Lines Matching full:buffer
6 * Handling of buffer allocation / resizing.
34 #include <linux/iio/buffer.h>
45 struct iio_buffer *buffer; member
99 /* drain the buffer if it was disabled */ in iio_buffer_ready()
128 * iio_buffer_read() - chrdev read for buffer access
130 * @buf: Destination buffer for iio buffer read
134 * This function relies on all buffer implementations having an
144 struct iio_buffer *rb = ib->buffer; in iio_buffer_read()
164 * buffer, so signal end of file now. in iio_buffer_read()
213 struct iio_buffer *rb = ib->buffer; in iio_buffer_write()
266 * iio_buffer_poll() - poll the buffer to find out if it has data
278 struct iio_buffer *rb = ib->buffer; in iio_buffer_poll()
304 struct iio_buffer *rb = ib->buffer; in iio_buffer_read_wrapper()
306 /* check if buffer was opened through new API */ in iio_buffer_read_wrapper()
317 struct iio_buffer *rb = ib->buffer; in iio_buffer_write_wrapper()
319 /* check if buffer was opened through new API */ in iio_buffer_write_wrapper()
330 struct iio_buffer *rb = ib->buffer; in iio_buffer_poll_wrapper()
332 /* check if buffer was opened through new API */ in iio_buffer_poll_wrapper()
340 * iio_buffer_wakeup_poll - Wakes up the buffer waitqueue
349 struct iio_buffer *buffer; in iio_buffer_wakeup_poll() local
353 buffer = iio_dev_opaque->attached_buffers[i]; in iio_buffer_wakeup_poll()
354 wake_up(&buffer->pollq); in iio_buffer_wakeup_poll()
358 int iio_pop_from_buffer(struct iio_buffer *buffer, void *data) in iio_pop_from_buffer() argument
360 if (!buffer || !buffer->access || !buffer->access->remove_from) in iio_pop_from_buffer()
363 return buffer->access->remove_from(buffer, data); in iio_pop_from_buffer()
367 void iio_buffer_init(struct iio_buffer *buffer) in iio_buffer_init() argument
369 INIT_LIST_HEAD(&buffer->demux_list); in iio_buffer_init()
370 INIT_LIST_HEAD(&buffer->buffer_list); in iio_buffer_init()
371 INIT_LIST_HEAD(&buffer->dmabufs); in iio_buffer_init()
372 mutex_init(&buffer->dmabufs_mutex); in iio_buffer_init()
373 init_waitqueue_head(&buffer->pollq); in iio_buffer_init()
374 kref_init(&buffer->ref); in iio_buffer_init()
375 if (!buffer->watermark) in iio_buffer_init()
376 buffer->watermark = 1; in iio_buffer_init()
383 struct iio_buffer *buffer; in iio_device_detach_buffers() local
387 buffer = iio_dev_opaque->attached_buffers[i]; in iio_device_detach_buffers()
388 iio_buffer_put(buffer); in iio_device_detach_buffers()
445 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in iio_scan_el_show() local
449 buffer->scan_mask); in iio_scan_el_show()
503 * @buffer: the buffer whose scan mask we are interested in
511 struct iio_buffer *buffer, int bit) in iio_scan_mask_set() argument
518 WARN(1, "Trying to set scanmask prior to registering buffer\n"); in iio_scan_mask_set()
525 bitmap_copy(trialmask, buffer->scan_mask, masklength); in iio_scan_mask_set()
537 bitmap_copy(buffer->scan_mask, trialmask, masklength); in iio_scan_mask_set()
548 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit) in iio_scan_mask_clear() argument
550 clear_bit(bit, buffer->scan_mask); in iio_scan_mask_clear()
555 struct iio_buffer *buffer, int bit) in iio_scan_mask_query() argument
560 if (!buffer->scan_mask) in iio_scan_mask_query()
564 return !!test_bit(bit, buffer->scan_mask); in iio_scan_mask_query()
577 struct iio_buffer *buffer = this_attr->buffer; in iio_scan_el_store() local
584 if (iio_buffer_is_active(buffer)) in iio_scan_el_store()
587 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
595 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address); in iio_scan_el_store()
597 ret = iio_scan_mask_clear(buffer, this_attr->address); in iio_scan_el_store()
608 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in iio_scan_el_ts_show() local
610 return sysfs_emit(buf, "%d\n", buffer->scan_timestamp); in iio_scan_el_ts_show()
621 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in iio_scan_el_ts_store() local
629 if (iio_buffer_is_active(buffer)) in iio_scan_el_ts_store()
632 buffer->scan_timestamp = state; in iio_scan_el_ts_store()
638 struct iio_buffer *buffer, in iio_buffer_add_channel_sysfs() argument
650 buffer, in iio_buffer_add_channel_sysfs()
651 &buffer->buffer_attr_list); in iio_buffer_add_channel_sysfs()
662 buffer, in iio_buffer_add_channel_sysfs()
663 &buffer->buffer_attr_list); in iio_buffer_add_channel_sysfs()
675 buffer, in iio_buffer_add_channel_sysfs()
676 &buffer->buffer_attr_list); in iio_buffer_add_channel_sysfs()
685 buffer, in iio_buffer_add_channel_sysfs()
686 &buffer->buffer_attr_list); in iio_buffer_add_channel_sysfs()
697 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in length_show() local
699 return sysfs_emit(buf, "%d\n", buffer->length); in length_show()
707 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in length_store() local
715 if (val == buffer->length) in length_store()
719 if (iio_buffer_is_active(buffer)) in length_store()
722 buffer->access->set_length(buffer, val); in length_store()
724 if (buffer->length && buffer->length < buffer->watermark) in length_store()
725 buffer->watermark = buffer->length; in length_store()
733 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in enable_show() local
735 return sysfs_emit(buf, "%d\n", iio_buffer_is_active(buffer)); in enable_show()
798 struct iio_buffer *buffer) in iio_buffer_activate() argument
802 iio_buffer_get(buffer); in iio_buffer_activate()
803 list_add(&buffer->buffer_list, &iio_dev_opaque->buffer_list); in iio_buffer_activate()
806 static void iio_buffer_deactivate(struct iio_buffer *buffer) in iio_buffer_deactivate() argument
808 list_del_init(&buffer->buffer_list); in iio_buffer_deactivate()
809 wake_up_interruptible(&buffer->pollq); in iio_buffer_deactivate()
810 iio_buffer_put(buffer); in iio_buffer_deactivate()
816 struct iio_buffer *buffer, *_buffer; in iio_buffer_deactivate_all() local
818 list_for_each_entry_safe(buffer, _buffer, in iio_buffer_deactivate_all()
820 iio_buffer_deactivate(buffer); in iio_buffer_deactivate_all()
823 static int iio_buffer_enable(struct iio_buffer *buffer, in iio_buffer_enable() argument
826 if (!buffer->access->enable) in iio_buffer_enable()
828 return buffer->access->enable(buffer, indio_dev); in iio_buffer_enable()
831 static int iio_buffer_disable(struct iio_buffer *buffer, in iio_buffer_disable() argument
834 if (!buffer->access->disable) in iio_buffer_disable()
836 return buffer->access->disable(buffer, indio_dev); in iio_buffer_disable()
840 struct iio_buffer *buffer) in iio_buffer_update_bytes_per_datum() argument
844 if (!buffer->access->set_bytes_per_datum) in iio_buffer_update_bytes_per_datum()
847 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask, in iio_buffer_update_bytes_per_datum()
848 buffer->scan_timestamp); in iio_buffer_update_bytes_per_datum()
850 buffer->access->set_bytes_per_datum(buffer, bytes); in iio_buffer_update_bytes_per_datum()
854 struct iio_buffer *buffer) in iio_buffer_request_update() argument
858 iio_buffer_update_bytes_per_datum(indio_dev, buffer); in iio_buffer_request_update()
859 if (buffer->access->request_update) { in iio_buffer_request_update()
860 ret = buffer->access->request_update(buffer); in iio_buffer_request_update()
863 "Buffer not started: buffer parameter update failed (%d)\n", in iio_buffer_request_update()
898 struct iio_buffer *buffer; in iio_verify_update() local
913 * If there is just one buffer and we are removing it there is nothing in iio_verify_update()
922 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { in iio_verify_update()
923 if (buffer == remove_buffer) in iio_verify_update()
925 modes &= buffer->access->modes; in iio_verify_update()
926 config->watermark = min(config->watermark, buffer->watermark); in iio_verify_update()
940 * Keep things simple for now and only allow a single buffer to in iio_verify_update()
950 /* Can only occur on first buffer */ in iio_verify_update()
952 dev_dbg(&indio_dev->dev, "Buffer not started: no trigger\n"); in iio_verify_update()
963 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { in iio_verify_update()
964 if (buffer == remove_buffer) in iio_verify_update()
966 bitmap_or(compound_mask, compound_mask, buffer->scan_mask, in iio_verify_update()
968 scan_timestamp |= buffer->scan_timestamp; in iio_verify_update()
1010 static void iio_buffer_demux_free(struct iio_buffer *buffer) in iio_buffer_demux_free() argument
1014 list_for_each_entry_safe(p, q, &buffer->demux_list, l) { in iio_buffer_demux_free()
1020 static int iio_buffer_add_demux(struct iio_buffer *buffer, in iio_buffer_add_demux() argument
1035 list_add_tail(&(*p)->l, &buffer->demux_list); in iio_buffer_add_demux()
1042 struct iio_buffer *buffer) in iio_buffer_update_demux() argument
1050 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1051 kfree(buffer->demux_bounce); in iio_buffer_update_demux()
1052 buffer->demux_bounce = NULL; in iio_buffer_update_demux()
1056 buffer->scan_mask, masklength)) in iio_buffer_update_demux()
1060 for_each_set_bit(out_ind, buffer->scan_mask, masklength) { in iio_buffer_update_demux()
1081 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1088 if (buffer->scan_timestamp) { in iio_buffer_update_demux()
1096 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); in iio_buffer_update_demux()
1101 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL); in iio_buffer_update_demux()
1102 if (!buffer->demux_bounce) { in iio_buffer_update_demux()
1109 iio_buffer_demux_free(buffer); in iio_buffer_update_demux()
1117 struct iio_buffer *buffer; in iio_update_demux() local
1120 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { in iio_update_demux()
1121 ret = iio_buffer_update_demux(indio_dev, buffer); in iio_update_demux()
1128 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) in iio_update_demux()
1129 iio_buffer_demux_free(buffer); in iio_update_demux()
1138 struct iio_buffer *buffer, *tmp = NULL; in iio_enable_buffers() local
1153 "Buffer not started: buffer preenable failed (%d)\n", ret); in iio_enable_buffers()
1164 "Buffer not started: update scan mode failed (%d)\n", in iio_enable_buffers()
1174 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { in iio_enable_buffers()
1175 ret = iio_buffer_enable(buffer, indio_dev); in iio_enable_buffers()
1177 tmp = buffer; in iio_enable_buffers()
1193 "Buffer not started: postenable failed (%d)\n", ret); in iio_enable_buffers()
1206 buffer = list_prepare_entry(tmp, &iio_dev_opaque->buffer_list, buffer_list); in iio_enable_buffers()
1207 list_for_each_entry_continue_reverse(buffer, &iio_dev_opaque->buffer_list, in iio_enable_buffers()
1209 iio_buffer_disable(buffer, indio_dev); in iio_enable_buffers()
1223 struct iio_buffer *buffer; in iio_disable_buffers() local
1249 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { in iio_disable_buffers()
1250 ret2 = iio_buffer_disable(buffer, indio_dev); in iio_disable_buffers()
1367 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in enable_store() local
1377 inlist = iio_buffer_is_active(buffer); in enable_store()
1383 ret = __iio_update_buffers(indio_dev, buffer, NULL); in enable_store()
1385 ret = __iio_update_buffers(indio_dev, NULL, buffer); in enable_store()
1395 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in watermark_show() local
1397 return sysfs_emit(buf, "%u\n", buffer->watermark); in watermark_show()
1406 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in watermark_store() local
1418 if (val > buffer->length) in watermark_store()
1421 if (iio_buffer_is_active(buffer)) in watermark_store()
1424 buffer->watermark = val; in watermark_store()
1432 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in data_available_show() local
1434 return sysfs_emit(buf, "%zu\n", iio_buffer_data_available(buffer)); in data_available_show()
1441 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; in direction_show() local
1443 switch (buffer->direction) { in direction_show()
1477 static struct attribute *iio_buffer_wrap_attr(struct iio_buffer *buffer, in iio_buffer_wrap_attr() argument
1487 iio_attr->buffer = buffer; in iio_buffer_wrap_attr()
1497 list_add(&iio_attr->l, &buffer->buffer_attr_list); in iio_buffer_wrap_attr()
1520 group->name = "buffer"; in iio_buffer_register_legacy_sysfs_groups()
1565 struct iio_buffer *buffer = priv->buffer; in iio_buffer_dmabuf_release() local
1570 buffer->access->detach_dmabuf(buffer, priv->block); in iio_buffer_dmabuf_release()
1595 struct iio_buffer *buffer = ib->buffer; in iio_buffer_chrdev_release() local
1598 wake_up(&buffer->pollq); in iio_buffer_chrdev_release()
1600 guard(mutex)(&buffer->dmabufs_mutex); in iio_buffer_chrdev_release()
1603 list_for_each_entry_safe(priv, tmp, &buffer->dmabufs, entry) { in iio_buffer_chrdev_release()
1609 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags); in iio_buffer_chrdev_release()
1627 struct iio_buffer *buffer) in iio_buffer_get_dma_dev() argument
1629 if (buffer->access->get_dma_dev) in iio_buffer_get_dma_dev()
1630 return buffer->access->get_dma_dev(buffer); in iio_buffer_get_dma_dev()
1639 struct iio_buffer *buffer = ib->buffer; in iio_buffer_find_attachment() local
1640 struct device *dma_dev = iio_buffer_get_dma_dev(ib->indio_dev, buffer); in iio_buffer_find_attachment()
1644 guard(mutex)(&buffer->dmabufs_mutex); in iio_buffer_find_attachment()
1646 list_for_each_entry(priv, &buffer->dmabufs, entry) { in iio_buffer_find_attachment()
1664 struct iio_buffer *buffer = ib->buffer; in iio_buffer_attach_dmabuf() local
1665 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer); in iio_buffer_attach_dmabuf()
1671 if (!buffer->access->attach_dmabuf in iio_buffer_attach_dmabuf()
1672 || !buffer->access->detach_dmabuf in iio_buffer_attach_dmabuf()
1673 || !buffer->access->enqueue_dmabuf) in iio_buffer_attach_dmabuf()
1702 priv->dir = buffer->direction == IIO_BUFFER_DIRECTION_IN in iio_buffer_attach_dmabuf()
1713 priv->buffer = buffer; in iio_buffer_attach_dmabuf()
1717 priv->block = buffer->access->attach_dmabuf(buffer, attach); in iio_buffer_attach_dmabuf()
1725 mutex_lock(&buffer->dmabufs_mutex); in iio_buffer_attach_dmabuf()
1731 list_for_each_entry(each, &buffer->dmabufs, entry) { in iio_buffer_attach_dmabuf()
1740 mutex_unlock(&buffer->dmabufs_mutex); in iio_buffer_attach_dmabuf()
1747 list_add(&priv->entry, &buffer->dmabufs); in iio_buffer_attach_dmabuf()
1748 mutex_unlock(&buffer->dmabufs_mutex); in iio_buffer_attach_dmabuf()
1769 struct iio_buffer *buffer = ib->buffer; in iio_buffer_detach_dmabuf() local
1771 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer); in iio_buffer_detach_dmabuf()
1783 guard(mutex)(&buffer->dmabufs_mutex); in iio_buffer_detach_dmabuf()
1785 list_for_each_entry(priv, &buffer->dmabufs, entry) { in iio_buffer_detach_dmabuf()
1826 struct iio_buffer *buffer = ib->buffer; in iio_buffer_enqueue_dmabuf() local
1847 if (cyclic && buffer->direction != IIO_BUFFER_DIRECTION_OUT) in iio_buffer_enqueue_dmabuf()
1890 dma_to_ram = buffer->direction == IIO_BUFFER_DIRECTION_IN; in iio_buffer_enqueue_dmabuf()
1903 if (buffer->access->lock_queue) in iio_buffer_enqueue_dmabuf()
1904 buffer->access->lock_queue(buffer); in iio_buffer_enqueue_dmabuf()
1916 ret = buffer->access->enqueue_dmabuf(buffer, priv->block, &fence->base, in iio_buffer_enqueue_dmabuf()
1927 if (buffer->access->unlock_queue) in iio_buffer_enqueue_dmabuf()
1928 buffer->access->unlock_queue(buffer); in iio_buffer_enqueue_dmabuf()
1936 if (buffer->access->unlock_queue) in iio_buffer_enqueue_dmabuf()
1937 buffer->access->unlock_queue(buffer); in iio_buffer_enqueue_dmabuf()
2022 struct iio_buffer *buffer; in iio_device_buffer_getfd() local
2033 buffer = iio_dev_opaque->attached_buffers[idx]; in iio_device_buffer_getfd()
2035 if (test_and_set_bit(IIO_BUSY_BIT_POS, &buffer->flags)) { in iio_device_buffer_getfd()
2047 ib->buffer = buffer; in iio_device_buffer_getfd()
2049 fd = anon_inode_getfd("iio:buffer", &iio_buffer_chrdev_fileops, in iio_device_buffer_getfd()
2075 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags); in iio_device_buffer_getfd()
2108 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer, in __iio_buffer_alloc_sysfs_and_mask() argument
2121 if (buffer->attrs) { in __iio_buffer_alloc_sysfs_and_mask()
2122 while (buffer->attrs[buffer_attrcount]) in __iio_buffer_alloc_sysfs_and_mask()
2128 INIT_LIST_HEAD(&buffer->buffer_attr_list); in __iio_buffer_alloc_sysfs_and_mask()
2167 ret = iio_buffer_add_channel_sysfs(indio_dev, buffer, in __iio_buffer_alloc_sysfs_and_mask()
2176 if (masklength && !buffer->scan_mask) { in __iio_buffer_alloc_sysfs_and_mask()
2177 buffer->scan_mask = bitmap_zalloc(masklength, in __iio_buffer_alloc_sysfs_and_mask()
2179 if (!buffer->scan_mask) { in __iio_buffer_alloc_sysfs_and_mask()
2194 if (!buffer->access->set_length) in __iio_buffer_alloc_sysfs_and_mask()
2197 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK) in __iio_buffer_alloc_sysfs_and_mask()
2200 if (buffer->attrs) in __iio_buffer_alloc_sysfs_and_mask()
2201 for (i = 0, id_attr = buffer->attrs[i]; in __iio_buffer_alloc_sysfs_and_mask()
2202 (id_attr = buffer->attrs[i]); i++) in __iio_buffer_alloc_sysfs_and_mask()
2206 buffer->buffer_group.attrs = attr; in __iio_buffer_alloc_sysfs_and_mask()
2211 wrapped = iio_buffer_wrap_attr(buffer, attr[i]); in __iio_buffer_alloc_sysfs_and_mask()
2220 list_for_each_entry(p, &buffer->buffer_attr_list, l) in __iio_buffer_alloc_sysfs_and_mask()
2223 buffer->buffer_group.name = kasprintf(GFP_KERNEL, "buffer%d", index); in __iio_buffer_alloc_sysfs_and_mask()
2224 if (!buffer->buffer_group.name) { in __iio_buffer_alloc_sysfs_and_mask()
2229 ret = iio_device_register_sysfs_group(indio_dev, &buffer->buffer_group); in __iio_buffer_alloc_sysfs_and_mask()
2233 /* we only need to register the legacy groups for the first buffer */ in __iio_buffer_alloc_sysfs_and_mask()
2246 kfree(buffer->buffer_group.name); in __iio_buffer_alloc_sysfs_and_mask()
2248 kfree(buffer->buffer_group.attrs); in __iio_buffer_alloc_sysfs_and_mask()
2250 bitmap_free(buffer->scan_mask); in __iio_buffer_alloc_sysfs_and_mask()
2252 iio_free_chan_devattr_list(&buffer->buffer_attr_list); in __iio_buffer_alloc_sysfs_and_mask()
2257 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer, in __iio_buffer_free_sysfs_and_mask() argument
2263 bitmap_free(buffer->scan_mask); in __iio_buffer_free_sysfs_and_mask()
2264 kfree(buffer->buffer_group.name); in __iio_buffer_free_sysfs_and_mask()
2265 kfree(buffer->buffer_group.attrs); in __iio_buffer_free_sysfs_and_mask()
2266 iio_free_chan_devattr_list(&buffer->buffer_attr_list); in __iio_buffer_free_sysfs_and_mask()
2273 struct iio_buffer *buffer; in iio_buffers_alloc_sysfs_and_mask() local
2290 buffer = iio_dev_opaque->attached_buffers[idx]; in iio_buffers_alloc_sysfs_and_mask()
2291 ret = __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev, idx); in iio_buffers_alloc_sysfs_and_mask()
2311 buffer = iio_dev_opaque->attached_buffers[idx]; in iio_buffers_alloc_sysfs_and_mask()
2312 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, idx); in iio_buffers_alloc_sysfs_and_mask()
2320 struct iio_buffer *buffer; in iio_buffers_free_sysfs_and_mask() local
2330 buffer = iio_dev_opaque->attached_buffers[i]; in iio_buffers_free_sysfs_and_mask()
2331 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, i); in iio_buffers_free_sysfs_and_mask()
2351 static const void *iio_demux(struct iio_buffer *buffer, in iio_demux() argument
2356 if (list_empty(&buffer->demux_list)) in iio_demux()
2358 list_for_each_entry(t, &buffer->demux_list, l) in iio_demux()
2359 memcpy(buffer->demux_bounce + t->to, in iio_demux()
2362 return buffer->demux_bounce; in iio_demux()
2365 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data) in iio_push_to_buffer() argument
2367 const void *dataout = iio_demux(buffer, data); in iio_push_to_buffer()
2370 ret = buffer->access->store_to(buffer, dataout); in iio_push_to_buffer()
2378 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM); in iio_push_to_buffer()
2383 * iio_push_to_buffers() - push to a registered buffer.
2407 * iio_push_to_buffers_with_ts_unaligned() - push to registered buffer,
2433 * of either the data provided or the length of the destination buffer. in iio_push_to_buffers_with_ts_unaligned()
2458 * iio_buffer_release() - Free a buffer's resources
2461 * This function is called when the last reference to the buffer has been
2462 * dropped. It will typically free all resources allocated by the buffer. Do not
2464 * buffer.
2468 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref); in iio_buffer_release() local
2470 mutex_destroy(&buffer->dmabufs_mutex); in iio_buffer_release()
2471 buffer->access->release(buffer); in iio_buffer_release()
2475 * iio_buffer_get() - Grab a reference to the buffer
2476 * @buffer: The buffer to grab a reference for, may be NULL
2478 * Returns the pointer to the buffer that was passed into the function.
2480 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer) in iio_buffer_get() argument
2482 if (buffer) in iio_buffer_get()
2483 kref_get(&buffer->ref); in iio_buffer_get()
2485 return buffer; in iio_buffer_get()
2490 * iio_buffer_put() - Release the reference to the buffer
2491 * @buffer: The buffer to release the reference for, may be NULL
2493 void iio_buffer_put(struct iio_buffer *buffer) in iio_buffer_put() argument
2495 if (buffer) in iio_buffer_put()
2496 kref_put(&buffer->ref, iio_buffer_release); in iio_buffer_put()
2501 * iio_device_attach_buffer - Attach a buffer to a IIO device
2502 * @indio_dev: The device the buffer should be attached to
2503 * @buffer: The buffer to attach to the device
2507 * This function attaches a buffer to a IIO device. The buffer stays attached to
2509 * buffer will also be assigned to 'indio_dev->buffer'.
2514 struct iio_buffer *buffer) in iio_device_attach_buffer() argument
2527 buffer = iio_buffer_get(buffer); in iio_device_attach_buffer()
2529 /* first buffer is legacy; attach it to the IIO device directly */ in iio_device_attach_buffer()
2530 if (!indio_dev->buffer) in iio_device_attach_buffer()
2531 indio_dev->buffer = buffer; in iio_device_attach_buffer()
2533 iio_dev_opaque->attached_buffers[cnt - 1] = buffer; in iio_device_attach_buffer()