Lines Matching refs:buffer
6 * Handling of buffer allocation / resizing.
28 #include <linux/iio/buffer.h>
65 /* drain the buffer if it was disabled */
94 * iio_buffer_read() - chrdev read for buffer access
96 * @buf: Destination buffer for iio buffer read
100 * This function relies on all buffer implementations having an
110 struct iio_buffer *rb = ib->buffer;
130 * buffer, so signal end of file now.
179 struct iio_buffer *rb = ib->buffer;
230 * iio_buffer_poll() - poll the buffer to find out if it has data
242 struct iio_buffer *rb = ib->buffer;
268 struct iio_buffer *rb = ib->buffer;
270 /* check if buffer was opened through new API */
281 struct iio_buffer *rb = ib->buffer;
283 /* check if buffer was opened through new API */
294 struct iio_buffer *rb = ib->buffer;
296 /* check if buffer was opened through new API */
304 * iio_buffer_wakeup_poll - Wakes up the buffer waitqueue
313 struct iio_buffer *buffer;
317 buffer = iio_dev_opaque->attached_buffers[i];
318 wake_up(&buffer->pollq);
322 int iio_pop_from_buffer(struct iio_buffer *buffer, void *data)
324 if (!buffer || !buffer->access || !buffer->access->remove_from)
327 return buffer->access->remove_from(buffer, data);
331 void iio_buffer_init(struct iio_buffer *buffer)
333 INIT_LIST_HEAD(&buffer->demux_list);
334 INIT_LIST_HEAD(&buffer->buffer_list);
335 init_waitqueue_head(&buffer->pollq);
336 kref_init(&buffer->ref);
337 if (!buffer->watermark)
338 buffer->watermark = 1;
345 struct iio_buffer *buffer;
349 buffer = iio_dev_opaque->attached_buffers[i];
350 iio_buffer_put(buffer);
399 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
403 buffer->scan_mask);
441 * @buffer: the buffer whose scan mask we are interested in
449 struct iio_buffer *buffer, int bit)
455 WARN(1, "Trying to set scanmask prior to registering buffer\n");
462 bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength);
475 bitmap_copy(buffer->scan_mask, trialmask, indio_dev->masklength);
486 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit)
488 clear_bit(bit, buffer->scan_mask);
493 struct iio_buffer *buffer, int bit)
498 if (!buffer->scan_mask)
502 return !!test_bit(bit, buffer->scan_mask);
515 struct iio_buffer *buffer = this_attr->buffer;
521 if (iio_buffer_is_active(buffer)) {
525 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address);
529 ret = iio_scan_mask_clear(buffer, this_attr->address);
533 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address);
548 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
550 return sysfs_emit(buf, "%d\n", buffer->scan_timestamp);
561 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
569 if (iio_buffer_is_active(buffer)) {
573 buffer->scan_timestamp = state;
581 struct iio_buffer *buffer,
593 buffer,
594 &buffer->buffer_attr_list);
605 buffer,
606 &buffer->buffer_attr_list);
618 buffer,
619 &buffer->buffer_attr_list);
628 buffer,
629 &buffer->buffer_attr_list);
640 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
642 return sysfs_emit(buf, "%d\n", buffer->length);
650 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
658 if (val == buffer->length)
662 if (iio_buffer_is_active(buffer)) {
665 buffer->access->set_length(buffer, val);
670 if (buffer->length && buffer->length < buffer->watermark)
671 buffer->watermark = buffer->length;
681 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
683 return sysfs_emit(buf, "%d\n", iio_buffer_is_active(buffer));
734 struct iio_buffer *buffer)
738 iio_buffer_get(buffer);
739 list_add(&buffer->buffer_list, &iio_dev_opaque->buffer_list);
742 static void iio_buffer_deactivate(struct iio_buffer *buffer)
744 list_del_init(&buffer->buffer_list);
745 wake_up_interruptible(&buffer->pollq);
746 iio_buffer_put(buffer);
752 struct iio_buffer *buffer, *_buffer;
754 list_for_each_entry_safe(buffer, _buffer,
756 iio_buffer_deactivate(buffer);
759 static int iio_buffer_enable(struct iio_buffer *buffer,
762 if (!buffer->access->enable)
764 return buffer->access->enable(buffer, indio_dev);
767 static int iio_buffer_disable(struct iio_buffer *buffer,
770 if (!buffer->access->disable)
772 return buffer->access->disable(buffer, indio_dev);
776 struct iio_buffer *buffer)
780 if (!buffer->access->set_bytes_per_datum)
783 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask,
784 buffer->scan_timestamp);
786 buffer->access->set_bytes_per_datum(buffer, bytes);
790 struct iio_buffer *buffer)
794 iio_buffer_update_bytes_per_datum(indio_dev, buffer);
795 if (buffer->access->request_update) {
796 ret = buffer->access->request_update(buffer);
799 "Buffer not started: buffer parameter update failed (%d)\n",
833 struct iio_buffer *buffer;
848 * If there is just one buffer and we are removing it there is nothing
857 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
858 if (buffer == remove_buffer)
860 modes &= buffer->access->modes;
861 config->watermark = min(config->watermark, buffer->watermark);
875 * Keep things simple for now and only allow a single buffer to
885 /* Can only occur on first buffer */
898 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
899 if (buffer == remove_buffer)
901 bitmap_or(compound_mask, compound_mask, buffer->scan_mask,
903 scan_timestamp |= buffer->scan_timestamp;
946 static void iio_buffer_demux_free(struct iio_buffer *buffer)
950 list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
956 static int iio_buffer_add_demux(struct iio_buffer *buffer,
971 list_add_tail(&(*p)->l, &buffer->demux_list);
978 struct iio_buffer *buffer)
985 iio_buffer_demux_free(buffer);
986 kfree(buffer->demux_bounce);
987 buffer->demux_bounce = NULL;
991 buffer->scan_mask,
997 buffer->scan_mask,
1013 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
1020 if (buffer->scan_timestamp) {
1024 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
1029 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL);
1030 if (!buffer->demux_bounce) {
1037 iio_buffer_demux_free(buffer);
1045 struct iio_buffer *buffer;
1048 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1049 ret = iio_buffer_update_demux(indio_dev, buffer);
1056 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list)
1057 iio_buffer_demux_free(buffer);
1066 struct iio_buffer *buffer, *tmp = NULL;
1081 "Buffer not started: buffer preenable failed (%d)\n", ret);
1102 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1103 ret = iio_buffer_enable(buffer, indio_dev);
1105 tmp = buffer;
1134 buffer = list_prepare_entry(tmp, &iio_dev_opaque->buffer_list, buffer_list);
1135 list_for_each_entry_continue_reverse(buffer, &iio_dev_opaque->buffer_list,
1137 iio_buffer_disable(buffer, indio_dev);
1151 struct iio_buffer *buffer;
1177 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1178 ret2 = iio_buffer_disable(buffer, indio_dev);
1306 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1316 inlist = iio_buffer_is_active(buffer);
1322 ret = __iio_update_buffers(indio_dev, buffer, NULL);
1324 ret = __iio_update_buffers(indio_dev, NULL, buffer);
1334 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1336 return sysfs_emit(buf, "%u\n", buffer->watermark);
1345 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1357 if (val > buffer->length) {
1362 if (iio_buffer_is_active(buffer)) {
1367 buffer->watermark = val;
1377 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1379 return sysfs_emit(buf, "%zu\n", iio_buffer_data_available(buffer));
1386 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1388 switch (buffer->direction) {
1422 static struct attribute *iio_buffer_wrap_attr(struct iio_buffer *buffer,
1432 iio_attr->buffer = buffer;
1442 list_add(&iio_attr->l, &buffer->buffer_attr_list);
1465 group->name = "buffer";
1510 struct iio_buffer *buffer = ib->buffer;
1512 wake_up(&buffer->pollq);
1515 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags);
1535 struct iio_buffer *buffer;
1546 buffer = iio_dev_opaque->attached_buffers[idx];
1548 if (test_and_set_bit(IIO_BUSY_BIT_POS, &buffer->flags)) {
1560 ib->buffer = buffer;
1562 fd = anon_inode_getfd("iio:buffer", &iio_buffer_chrdev_fileops,
1588 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags);
1605 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
1617 if (buffer->attrs) {
1618 while (buffer->attrs[buffer_attrcount])
1624 INIT_LIST_HEAD(&buffer->buffer_attr_list);
1645 ret = iio_buffer_add_channel_sysfs(indio_dev, buffer,
1654 if (indio_dev->masklength && !buffer->scan_mask) {
1655 buffer->scan_mask = bitmap_zalloc(indio_dev->masklength,
1657 if (!buffer->scan_mask) {
1672 if (!buffer->access->set_length)
1675 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK)
1678 if (buffer->attrs)
1679 for (i = 0, id_attr = buffer->attrs[i];
1680 (id_attr = buffer->attrs[i]); i++)
1684 buffer->buffer_group.attrs = attr;
1689 wrapped = iio_buffer_wrap_attr(buffer, attr[i]);
1698 list_for_each_entry(p, &buffer->buffer_attr_list, l)
1701 buffer->buffer_group.name = kasprintf(GFP_KERNEL, "buffer%d", index);
1702 if (!buffer->buffer_group.name) {
1707 ret = iio_device_register_sysfs_group(indio_dev, &buffer->buffer_group);
1711 /* we only need to register the legacy groups for the first buffer */
1724 kfree(buffer->buffer_group.name);
1726 kfree(buffer->buffer_group.attrs);
1728 bitmap_free(buffer->scan_mask);
1730 iio_free_chan_devattr_list(&buffer->buffer_attr_list);
1735 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer,
1741 bitmap_free(buffer->scan_mask);
1742 kfree(buffer->buffer_group.name);
1743 kfree(buffer->buffer_group.attrs);
1744 iio_free_chan_devattr_list(&buffer->buffer_attr_list);
1751 struct iio_buffer *buffer;
1768 buffer = iio_dev_opaque->attached_buffers[idx];
1769 ret = __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev, idx);
1789 buffer = iio_dev_opaque->attached_buffers[idx];
1790 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, idx);
1798 struct iio_buffer *buffer;
1808 buffer = iio_dev_opaque->attached_buffers[i];
1809 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, i);
1829 static const void *iio_demux(struct iio_buffer *buffer,
1834 if (list_empty(&buffer->demux_list))
1836 list_for_each_entry(t, &buffer->demux_list, l)
1837 memcpy(buffer->demux_bounce + t->to,
1840 return buffer->demux_bounce;
1843 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data)
1845 const void *dataout = iio_demux(buffer, data);
1848 ret = buffer->access->store_to(buffer, dataout);
1856 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM);
1861 * iio_push_to_buffers() - push to a registered buffer.
1882 * iio_push_to_buffers_with_ts_unaligned() - push to registered buffer,
1903 * of either the data provided or the length of the destination buffer.
1928 * iio_buffer_release() - Free a buffer's resources
1931 * This function is called when the last reference to the buffer has been
1932 * dropped. It will typically free all resources allocated by the buffer. Do not
1934 * buffer.
1938 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref);
1940 buffer->access->release(buffer);
1944 * iio_buffer_get() - Grab a reference to the buffer
1945 * @buffer: The buffer to grab a reference for, may be NULL
1947 * Returns the pointer to the buffer that was passed into the function.
1949 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer)
1951 if (buffer)
1952 kref_get(&buffer->ref);
1954 return buffer;
1959 * iio_buffer_put() - Release the reference to the buffer
1960 * @buffer: The buffer to release the reference for, may be NULL
1962 void iio_buffer_put(struct iio_buffer *buffer)
1964 if (buffer)
1965 kref_put(&buffer->ref, iio_buffer_release);
1970 * iio_device_attach_buffer - Attach a buffer to a IIO device
1971 * @indio_dev: The device the buffer should be attached to
1972 * @buffer: The buffer to attach to the device
1976 * This function attaches a buffer to a IIO device. The buffer stays attached to
1978 * buffer will also be assigned to 'indio_dev->buffer'.
1983 struct iio_buffer *buffer)
1996 buffer = iio_buffer_get(buffer);
1998 /* first buffer is legacy; attach it to the IIO device directly */
1999 if (!indio_dev->buffer)
2000 indio_dev->buffer = buffer;
2002 iio_dev_opaque->attached_buffers[cnt - 1] = buffer;