Skip to content

Commit a09f8a2

Browse files
pcercueinunojsa
authored andcommitted
Documentation: iio: Document high-speed DMABUF based API
Document the new DMABUF based API. Signed-off-by: Paul Cercueil <paul@crapouillou.net> Co-developed-by: Nuno Sa <nuno.sa@analog.com> Signed-off-by: Nuno Sa <nuno.sa@analog.com> Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com> Link: https://patch.msgid.link/20240620122726.41232-7-paul@crapouillou.net Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
1 parent 2d63a48 commit a09f8a2

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

Documentation/iio/iio_dmabuf_api.rst

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
===================================
4+
High-speed DMABUF interface for IIO
5+
===================================
6+
7+
1. Overview
8+
===========
9+
10+
The Industrial I/O subsystem supports access to buffers through a
11+
file-based interface, with read() and write() access calls through the
12+
IIO device's dev node.
13+
14+
It additionally supports a DMABUF based interface, where the userspace
15+
can attach DMABUF objects (externally created) to an IIO buffer, and
16+
subsequently use them for data transfers.
17+
18+
A userspace application can then use this interface to share DMABUF
19+
objects between several interfaces, allowing it to transfer data in a
20+
zero-copy fashion, for instance between IIO and the USB stack.
21+
22+
The userspace application can also memory-map the DMABUF objects, and
23+
access the sample data directly. The advantage of doing this vs. the
24+
read() interface is that it avoids an extra copy of the data between the
25+
kernel and userspace. This is particularly useful for high-speed devices
26+
which produce several megabytes or even gigabytes of data per second.
27+
It does however increase the userspace-kernelspace synchronization
28+
overhead, as the DMA_BUF_SYNC_START and DMA_BUF_SYNC_END IOCTLs have to
29+
be used for data integrity.
30+
31+
2. User API
32+
===========
33+
34+
As part of this interface, three new IOCTLs have been added. These three
35+
IOCTLs have to be performed on the IIO buffer's file descriptor, which
36+
can be obtained using the IIO_BUFFER_GET_FD_IOCTL() ioctl.
37+
38+
``IIO_BUFFER_DMABUF_ATTACH_IOCTL(int fd)``
39+
Attach the DMABUF object, identified by its file descriptor, to the
40+
IIO buffer. Returns zero on success, and a negative errno value on
41+
error.
42+
43+
``IIO_BUFFER_DMABUF_DETACH_IOCTL(int fd)``
44+
Detach the given DMABUF object, identified by its file descriptor,
45+
from the IIO buffer. Returns zero on success, and a negative errno
46+
value on error.
47+
48+
Note that closing the IIO buffer's file descriptor will
49+
automatically detach all previously attached DMABUF objects.
50+
51+
``IIO_BUFFER_DMABUF_ENQUEUE_IOCTL(struct iio_dmabuf *iio_dmabuf)``
52+
Enqueue a previously attached DMABUF object to the buffer queue.
53+
Enqueued DMABUFs will be read from (if output buffer) or written to
54+
(if input buffer) as long as the buffer is enabled.

Documentation/iio/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Industrial I/O
99

1010
iio_configfs
1111
iio_devbuf
12+
iio_dmabuf_api
1213
iio_tools
1314

1415
Industrial I/O Kernel Drivers

0 commit comments

Comments
 (0)