Lines Matching full:buffer

52 	} buffer[13];  member
109 struct packet_buffer buffer; member
117 packet_buffer_init(struct packet_buffer *buffer, size_t capacity) in packet_buffer_init() argument
119 buffer->data = kmalloc(capacity, GFP_KERNEL); in packet_buffer_init()
120 if (buffer->data == NULL) in packet_buffer_init()
122 buffer->head = (struct packet *) buffer->data; in packet_buffer_init()
123 buffer->tail = (struct packet *) buffer->data; in packet_buffer_init()
124 buffer->capacity = capacity; in packet_buffer_init()
125 buffer->lost_packet_count = 0; in packet_buffer_init()
126 atomic_set(&buffer->size, 0); in packet_buffer_init()
127 init_waitqueue_head(&buffer->wait); in packet_buffer_init()
133 packet_buffer_destroy(struct packet_buffer *buffer) in packet_buffer_destroy() argument
135 kfree(buffer->data); in packet_buffer_destroy()
141 struct packet_buffer *buffer = &client->buffer; in packet_buffer_get() local
145 if (wait_event_interruptible(buffer->wait, in packet_buffer_get()
146 atomic_read(&buffer->size) > 0) || in packet_buffer_get()
150 if (atomic_read(&buffer->size) == 0) in packet_buffer_get()
153 length = buffer->head->length; in packet_buffer_get()
158 end = buffer->data + buffer->capacity; in packet_buffer_get()
160 if (&buffer->head->data[length] < end) { in packet_buffer_get()
161 if (copy_to_user(data, buffer->head->data, length)) in packet_buffer_get()
163 buffer->head = (struct packet *) &buffer->head->data[length]; in packet_buffer_get()
165 size_t split = end - buffer->head->data; in packet_buffer_get()
167 if (copy_to_user(data, buffer->head->data, split)) in packet_buffer_get()
169 if (copy_to_user(data + split, buffer->data, length - split)) in packet_buffer_get()
171 buffer->head = (struct packet *) &buffer->data[length - split]; in packet_buffer_get()
175 * Decrease buffer->size as the last thing, since this is what in packet_buffer_get()
177 * retrieving from the buffer. in packet_buffer_get()
179 atomic_sub(sizeof(struct packet) + length, &buffer->size); in packet_buffer_get()
185 packet_buffer_put(struct packet_buffer *buffer, void *data, size_t length) in packet_buffer_put() argument
189 buffer->total_packet_count++; in packet_buffer_put()
191 if (buffer->capacity < in packet_buffer_put()
192 atomic_read(&buffer->size) + sizeof(struct packet) + length) { in packet_buffer_put()
193 buffer->lost_packet_count++; in packet_buffer_put()
197 end = buffer->data + buffer->capacity; in packet_buffer_put()
198 buffer->tail->length = length; in packet_buffer_put()
200 if (&buffer->tail->data[length] < end) { in packet_buffer_put()
201 memcpy(buffer->tail->data, data, length); in packet_buffer_put()
202 buffer->tail = (struct packet *) &buffer->tail->data[length]; in packet_buffer_put()
204 size_t split = end - buffer->tail->data; in packet_buffer_put()
206 memcpy(buffer->tail->data, data, split); in packet_buffer_put()
207 memcpy(buffer->data, data + split, length - split); in packet_buffer_put()
208 buffer->tail = (struct packet *) &buffer->data[length - split]; in packet_buffer_put()
211 /* Finally, adjust buffer size and wake up userspace reader. */ in packet_buffer_put()
213 atomic_add(sizeof(struct packet) + length, &buffer->size); in packet_buffer_put()
214 wake_up_interruptible(&buffer->wait); in packet_buffer_put()
292 if (packet_buffer_init(&client->buffer, 128 * 1024) < 0) in nosy_open()
315 packet_buffer_destroy(&client->buffer); in nosy_release()
328 poll_wait(file, &client->buffer.wait, pt); in nosy_poll()
330 if (atomic_read(&client->buffer.size) > 0) in nosy_poll()
340 nosy_read(struct file *file, char __user *buffer, size_t count, loff_t *offset) in nosy_read() argument
344 return packet_buffer_get(client, buffer, count); in nosy_read()
358 stats.total_packet_count = client->buffer.total_packet_count; in nosy_ioctl()
359 stats.lost_packet_count = client->buffer.lost_packet_count; in nosy_ioctl()
394 /* Flush buffer, configure filter. */ in nosy_ioctl()
435 packet_buffer_put(&client->buffer, in packet_irq_handler()
454 packet_buffer_put(&client->buffer, &timestamp, 4); in bus_reset_irq_handler()
515 wake_up_interruptible(&client->buffer.wait); in remove_card()
582 dev_err(&dev->dev, "Failed to allocate receive buffer\n"); in add_card()
590 lynx->rcv_pcl->buffer[0].control = in add_card()
592 lynx->rcv_pcl->buffer[0].pointer = in add_card()
597 lynx->rcv_pcl->buffer[i].control = in add_card()
599 lynx->rcv_pcl->buffer[i].pointer = cpu_to_le32(p); in add_card()
601 lynx->rcv_pcl->buffer[i - 1].control |= cpu_to_le32(PCL_LAST_BUFF); in add_card()