Lines Matching refs:buffer

6  * Handling of buffer allocation / resizing.
26 #include <linux/iio/buffer.h>
63 /* drain the buffer if it was disabled */
92 * iio_buffer_read_outer() - chrdev read for buffer access
94 * @buf: Destination buffer for iio buffer read
98 * This function relies on all buffer implementations having an
108 struct iio_buffer *rb = indio_dev->buffer;
124 * buffer, so signal end of file now.
162 * iio_buffer_poll() - poll the buffer to find out if it has data
174 struct iio_buffer *rb = indio_dev->buffer;
186 * iio_buffer_wakeup_poll - Wakes up the buffer waitqueue
194 struct iio_buffer *buffer = indio_dev->buffer;
196 if (!buffer)
199 wake_up(&buffer->pollq);
202 void iio_buffer_init(struct iio_buffer *buffer)
204 INIT_LIST_HEAD(&buffer->demux_list);
205 INIT_LIST_HEAD(&buffer->buffer_list);
206 init_waitqueue_head(&buffer->pollq);
207 kref_init(&buffer->ref);
208 if (!buffer->watermark)
209 buffer->watermark = 1;
214 * iio_buffer_set_attrs - Set buffer specific attributes
215 * @buffer: The buffer for which we are setting attributes
218 void iio_buffer_set_attrs(struct iio_buffer *buffer,
221 buffer->attrs = attrs;
269 struct iio_buffer *buffer = indio_dev->buffer;
273 buffer->scan_mask);
311 * @buffer: the buffer whose scan mask we are interested in
319 struct iio_buffer *buffer, int bit)
328 WARN(1, "Trying to set scanmask prior to registering buffer\n");
331 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength);
344 bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength);
355 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit)
357 clear_bit(bit, buffer->scan_mask);
362 struct iio_buffer *buffer, int bit)
367 if (!buffer->scan_mask)
371 return !!test_bit(bit, buffer->scan_mask);
382 struct iio_buffer *buffer = indio_dev->buffer;
389 if (iio_buffer_is_active(buffer)) {
393 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address);
397 ret = iio_scan_mask_clear(buffer, this_attr->address);
401 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address);
418 struct iio_buffer *buffer = indio_dev->buffer;
420 return sprintf(buf, "%d\n", buffer->scan_timestamp);
430 struct iio_buffer *buffer = indio_dev->buffer;
438 if (iio_buffer_is_active(buffer)) {
442 buffer->scan_timestamp = state;
450 struct iio_buffer *buffer,
462 &buffer->scan_el_dev_attr_list);
473 &buffer->scan_el_dev_attr_list);
485 &buffer->scan_el_dev_attr_list);
494 &buffer->scan_el_dev_attr_list);
507 struct iio_buffer *buffer = indio_dev->buffer;
509 return sprintf(buf, "%d\n", buffer->length);
517 struct iio_buffer *buffer = indio_dev->buffer;
525 if (val == buffer->length)
529 if (iio_buffer_is_active(buffer)) {
532 buffer->access->set_length(buffer, val);
537 if (buffer->length && buffer->length < buffer->watermark)
538 buffer->watermark = buffer->length;
550 struct iio_buffer *buffer = indio_dev->buffer;
552 return sprintf(buf, "%d\n", iio_buffer_is_active(buffer));
601 struct iio_buffer *buffer)
605 iio_buffer_get(buffer);
606 list_add(&buffer->buffer_list, &iio_dev_opaque->buffer_list);
609 static void iio_buffer_deactivate(struct iio_buffer *buffer)
611 list_del_init(&buffer->buffer_list);
612 wake_up_interruptible(&buffer->pollq);
613 iio_buffer_put(buffer);
619 struct iio_buffer *buffer, *_buffer;
621 list_for_each_entry_safe(buffer, _buffer,
623 iio_buffer_deactivate(buffer);
626 static int iio_buffer_enable(struct iio_buffer *buffer,
629 if (!buffer->access->enable)
631 return buffer->access->enable(buffer, indio_dev);
634 static int iio_buffer_disable(struct iio_buffer *buffer,
637 if (!buffer->access->disable)
639 return buffer->access->disable(buffer, indio_dev);
643 struct iio_buffer *buffer)
647 if (!buffer->access->set_bytes_per_datum)
650 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask,
651 buffer->scan_timestamp);
653 buffer->access->set_bytes_per_datum(buffer, bytes);
657 struct iio_buffer *buffer)
661 iio_buffer_update_bytes_per_datum(indio_dev, buffer);
662 if (buffer->access->request_update) {
663 ret = buffer->access->request_update(buffer);
666 "Buffer not started: buffer parameter update failed (%d)\n",
699 struct iio_buffer *buffer;
714 * If there is just one buffer and we are removing it there is nothing
723 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
724 if (buffer == remove_buffer)
726 modes &= buffer->access->modes;
727 config->watermark = min(config->watermark, buffer->watermark);
741 * Keep things simple for now and only allow a single buffer to
751 /* Can only occur on first buffer */
764 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
765 if (buffer == remove_buffer)
767 bitmap_or(compound_mask, compound_mask, buffer->scan_mask,
769 scan_timestamp |= buffer->scan_timestamp;
812 static void iio_buffer_demux_free(struct iio_buffer *buffer)
815 list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
821 static int iio_buffer_add_demux(struct iio_buffer *buffer,
836 list_add_tail(&(*p)->l, &buffer->demux_list);
843 struct iio_buffer *buffer)
850 iio_buffer_demux_free(buffer);
851 kfree(buffer->demux_bounce);
852 buffer->demux_bounce = NULL;
856 buffer->scan_mask,
862 buffer->scan_mask,
878 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
885 if (buffer->scan_timestamp) {
889 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
895 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL);
896 if (buffer->demux_bounce == NULL) {
903 iio_buffer_demux_free(buffer);
911 struct iio_buffer *buffer;
914 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
915 ret = iio_buffer_update_demux(indio_dev, buffer);
922 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list)
923 iio_buffer_demux_free(buffer);
932 struct iio_buffer *buffer;
947 "Buffer not started: buffer preenable failed (%d)\n", ret);
968 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
969 ret = iio_buffer_enable(buffer, indio_dev);
998 list_for_each_entry_continue_reverse(buffer, &iio_dev_opaque->buffer_list,
1000 iio_buffer_disable(buffer, indio_dev);
1014 struct iio_buffer *buffer;
1040 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1041 ret2 = iio_buffer_disable(buffer, indio_dev);
1165 struct iio_buffer *buffer = indio_dev->buffer;
1175 inlist = iio_buffer_is_active(buffer);
1181 ret = __iio_update_buffers(indio_dev, buffer, NULL);
1183 ret = __iio_update_buffers(indio_dev, NULL, buffer);
1197 struct iio_buffer *buffer = indio_dev->buffer;
1199 return sprintf(buf, "%u\n", buffer->watermark);
1208 struct iio_buffer *buffer = indio_dev->buffer;
1220 if (val > buffer->length) {
1225 if (iio_buffer_is_active(buffer)) {
1230 buffer->watermark = val;
1242 struct iio_buffer *buffer = indio_dev->buffer;
1244 return sprintf(buf, "%zu\n", iio_buffer_data_available(buffer));
1267 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
1276 if (buffer->attrs) {
1277 while (buffer->attrs[attrcount] != NULL)
1287 if (!buffer->access->set_length)
1290 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK)
1293 if (buffer->attrs)
1294 memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs,
1299 buffer->buffer_group.name = "buffer";
1300 buffer->buffer_group.attrs = attr;
1302 indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group;
1305 INIT_LIST_HEAD(&buffer->scan_el_dev_attr_list);
1313 ret = iio_buffer_add_channel_sysfs(indio_dev, buffer,
1322 if (indio_dev->masklength && buffer->scan_mask == NULL) {
1323 buffer->scan_mask = bitmap_zalloc(indio_dev->masklength,
1325 if (buffer->scan_mask == NULL) {
1332 buffer->scan_el_group.name = iio_scan_elements_group_name;
1334 buffer->scan_el_group.attrs = kcalloc(attrcount + 1,
1335 sizeof(buffer->scan_el_group.attrs[0]),
1337 if (buffer->scan_el_group.attrs == NULL) {
1343 list_for_each_entry(p, &buffer->scan_el_dev_attr_list, l)
1344 buffer->scan_el_group.attrs[attrn++] = &p->dev_attr.attr;
1345 indio_dev->groups[indio_dev->groupcounter++] = &buffer->scan_el_group;
1350 bitmap_free(buffer->scan_mask);
1352 iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
1353 kfree(buffer->buffer_group.attrs);
1360 struct iio_buffer *buffer = indio_dev->buffer;
1373 if (!buffer)
1376 return __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev);
1379 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer)
1381 bitmap_free(buffer->scan_mask);
1382 kfree(buffer->buffer_group.attrs);
1383 kfree(buffer->scan_el_group.attrs);
1384 iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
1389 struct iio_buffer *buffer = indio_dev->buffer;
1391 if (!buffer)
1394 __iio_buffer_free_sysfs_and_mask(buffer);
1413 static const void *iio_demux(struct iio_buffer *buffer,
1418 if (list_empty(&buffer->demux_list))
1420 list_for_each_entry(t, &buffer->demux_list, l)
1421 memcpy(buffer->demux_bounce + t->to,
1424 return buffer->demux_bounce;
1427 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data)
1429 const void *dataout = iio_demux(buffer, data);
1432 ret = buffer->access->store_to(buffer, dataout);
1440 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM);
1445 * iio_push_to_buffers() - push to a registered buffer.
1466 * iio_buffer_release() - Free a buffer's resources
1469 * This function is called when the last reference to the buffer has been
1470 * dropped. It will typically free all resources allocated by the buffer. Do not
1472 * buffer.
1476 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref);
1478 buffer->access->release(buffer);
1482 * iio_buffer_get() - Grab a reference to the buffer
1483 * @buffer: The buffer to grab a reference for, may be NULL
1485 * Returns the pointer to the buffer that was passed into the function.
1487 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer)
1489 if (buffer)
1490 kref_get(&buffer->ref);
1492 return buffer;
1497 * iio_buffer_put() - Release the reference to the buffer
1498 * @buffer: The buffer to release the reference for, may be NULL
1500 void iio_buffer_put(struct iio_buffer *buffer)
1502 if (buffer)
1503 kref_put(&buffer->ref, iio_buffer_release);
1508 * iio_device_attach_buffer - Attach a buffer to a IIO device
1509 * @indio_dev: The device the buffer should be attached to
1510 * @buffer: The buffer to attach to the device
1512 * This function attaches a buffer to a IIO device. The buffer stays attached to
1517 struct iio_buffer *buffer)
1519 indio_dev->buffer = iio_buffer_get(buffer);