Lines Matching refs:buffer
50 } buffer[13];
107 struct packet_buffer buffer;
115 packet_buffer_init(struct packet_buffer *buffer, size_t capacity)
117 buffer->data = kmalloc(capacity, GFP_KERNEL);
118 if (buffer->data == NULL)
120 buffer->head = (struct packet *) buffer->data;
121 buffer->tail = (struct packet *) buffer->data;
122 buffer->capacity = capacity;
123 buffer->lost_packet_count = 0;
124 atomic_set(&buffer->size, 0);
125 init_waitqueue_head(&buffer->wait);
131 packet_buffer_destroy(struct packet_buffer *buffer)
133 kfree(buffer->data);
139 struct packet_buffer *buffer = &client->buffer;
143 if (wait_event_interruptible(buffer->wait,
144 atomic_read(&buffer->size) > 0) ||
148 if (atomic_read(&buffer->size) == 0)
153 end = buffer->data + buffer->capacity;
154 length = buffer->head->length;
156 if (&buffer->head->data[length] < end) {
157 if (copy_to_user(data, buffer->head->data, length))
159 buffer->head = (struct packet *) &buffer->head->data[length];
161 size_t split = end - buffer->head->data;
163 if (copy_to_user(data, buffer->head->data, split))
165 if (copy_to_user(data + split, buffer->data, length - split))
167 buffer->head = (struct packet *) &buffer->data[length - split];
171 * Decrease buffer->size as the last thing, since this is what
173 * retrieving from the buffer.
175 atomic_sub(sizeof(struct packet) + length, &buffer->size);
181 packet_buffer_put(struct packet_buffer *buffer, void *data, size_t length)
185 buffer->total_packet_count++;
187 if (buffer->capacity <
188 atomic_read(&buffer->size) + sizeof(struct packet) + length) {
189 buffer->lost_packet_count++;
193 end = buffer->data + buffer->capacity;
194 buffer->tail->length = length;
196 if (&buffer->tail->data[length] < end) {
197 memcpy(buffer->tail->data, data, length);
198 buffer->tail = (struct packet *) &buffer->tail->data[length];
200 size_t split = end - buffer->tail->data;
202 memcpy(buffer->tail->data, data, split);
203 memcpy(buffer->data, data + split, length - split);
204 buffer->tail = (struct packet *) &buffer->data[length - split];
207 /* Finally, adjust buffer size and wake up userspace reader. */
209 atomic_add(sizeof(struct packet) + length, &buffer->size);
210 wake_up_interruptible(&buffer->wait);
288 if (packet_buffer_init(&client->buffer, 128 * 1024) < 0)
311 packet_buffer_destroy(&client->buffer);
324 poll_wait(file, &client->buffer.wait, pt);
326 if (atomic_read(&client->buffer.size) > 0)
336 nosy_read(struct file *file, char __user *buffer, size_t count, loff_t *offset)
340 return packet_buffer_get(client, buffer, count);
354 stats.total_packet_count = client->buffer.total_packet_count;
355 stats.lost_packet_count = client->buffer.lost_packet_count;
390 /* Flush buffer, configure filter. */
431 packet_buffer_put(&client->buffer,
450 packet_buffer_put(&client->buffer, ×tamp, 4);
511 wake_up_interruptible(&client->buffer.wait);
576 dev_err(&dev->dev, "Failed to allocate receive buffer\n");
584 lynx->rcv_pcl->buffer[0].control =
586 lynx->rcv_pcl->buffer[0].pointer =
591 lynx->rcv_pcl->buffer[i].control =
593 lynx->rcv_pcl->buffer[i].pointer = cpu_to_le32(p);
595 lynx->rcv_pcl->buffer[i - 1].control |= cpu_to_le32(PCL_LAST_BUFF);