| .. SPDX-License-Identifier: GPL-2.0 | 
 |  | 
 | =================================== | 
 | High-speed DMABUF interface for IIO | 
 | =================================== | 
 |  | 
 | 1. Overview | 
 | =========== | 
 |  | 
 | The Industrial I/O subsystem supports access to buffers through a | 
 | file-based interface, with read() and write() access calls through the | 
 | IIO device's dev node. | 
 |  | 
 | It additionally supports a DMABUF based interface, where the userspace | 
 | can attach DMABUF objects (externally created) to an IIO buffer, and | 
 | subsequently use them for data transfers. | 
 |  | 
 | A userspace application can then use this interface to share DMABUF | 
 | objects between several interfaces, allowing it to transfer data in a | 
 | zero-copy fashion, for instance between IIO and the USB stack. | 
 |  | 
 | The userspace application can also memory-map the DMABUF objects, and | 
 | access the sample data directly. The advantage of doing this vs. the | 
 | read() interface is that it avoids an extra copy of the data between the | 
 | kernel and userspace. This is particularly useful for high-speed devices | 
 | which produce several megabytes or even gigabytes of data per second. | 
 | It does however increase the userspace-kernelspace synchronization | 
 | overhead, as the DMA_BUF_SYNC_START and DMA_BUF_SYNC_END IOCTLs have to | 
 | be used for data integrity. | 
 |  | 
 | 2. User API | 
 | =========== | 
 |  | 
 | As part of this interface, three new IOCTLs have been added. These three | 
 | IOCTLs have to be performed on the IIO buffer's file descriptor, which | 
 | can be obtained using the IIO_BUFFER_GET_FD_IOCTL() ioctl. | 
 |  | 
 |   ``IIO_BUFFER_DMABUF_ATTACH_IOCTL(int fd)`` | 
 |     Attach the DMABUF object, identified by its file descriptor, to the | 
 |     IIO buffer. Returns zero on success, and a negative errno value on | 
 |     error. | 
 |  | 
 |   ``IIO_BUFFER_DMABUF_DETACH_IOCTL(int fd)`` | 
 |     Detach the given DMABUF object, identified by its file descriptor, | 
 |     from the IIO buffer. Returns zero on success, and a negative errno | 
 |     value on error. | 
 |  | 
 |     Note that closing the IIO buffer's file descriptor will | 
 |     automatically detach all previously attached DMABUF objects. | 
 |  | 
 |   ``IIO_BUFFER_DMABUF_ENQUEUE_IOCTL(struct iio_dmabuf *iio_dmabuf)`` | 
 |     Enqueue a previously attached DMABUF object to the buffer queue. | 
 |     Enqueued DMABUFs will be read from (if output buffer) or written to | 
 |     (if input buffer) as long as the buffer is enabled. |