Exemple #1
0
/*
 * 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;
}
Exemple #2
0
/*
 * 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;
}