/* * scif_rb_get_next - Read from ring buffer. * @rb: ring buffer * @msg: buffer to hold the message. Must be at least size bytes long * @size: Number of bytes to be read * * Return: number of bytes read if available bytes are >= size, otherwise * returns zero. */ u32 scif_rb_get_next(struct scif_rb *rb, void *msg, u32 size) { void *header = NULL; int read_size = 0; header = scif_rb_get(rb, size); if (header) { u32 next_cmd_offset = (rb->current_read_offset + size) & (rb->size - 1); read_size = size; rb->current_read_offset = next_cmd_offset; memcpy_fromrb(rb, header, msg, size); } return read_size; }
/* * micscif_rb_get_next * Read from ring buffer. * @rb - The RingBuffer context * @msg - buffer to hold the message. Must be at least size bytes long * @size - Size to be read out passed in, actual bytes read * is returned. * RETURN: * Returns the number of bytes possible to read -- if retVal != size, then * the read does not occur. */ int micscif_rb_get_next (struct micscif_rb *rb, void *msg, uint32_t size) { void *header = NULL; int read_size = 0; /* * warning: RingBufferGet() looks at the shared write pointer */ header = micscif_rb_get(rb, size); if (header) { uint32_t next_cmd_offset = (rb->current_read_offset + size) & (rb->size - 1); read_size = size; rb->old_current_read_offset = rb->current_read_offset; rb->current_read_offset = next_cmd_offset; if (memcpy_fromrb(rb, header, msg, size)) // add check here return -EFAULT; } return read_size; }