| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
- .. c:namespace:: DTV.dmx
- .. _DMX_REQBUFS:
- *****************
- ioctl DMX_REQBUFS
- *****************
- Name
- ====
- DMX_REQBUFS - Initiate Memory Mapping and/or DMA buffer I/O
- .. warning:: this API is still experimental
- Synopsis
- ========
- .. c:macro:: DMX_REQBUFS
- ``int ioctl(int fd, DMX_REQBUFS, struct dmx_requestbuffers *argp)``
- Arguments
- =========
- ``fd``
- File descriptor returned by :c:func:`open()`.
- ``argp``
- Pointer to struct :c:type:`dmx_requestbuffers`.
- Description
- ===========
- This ioctl is used to initiate a memory mapped or DMABUF based demux I/O.
- Memory mapped buffers are located in device memory and must be allocated
- with this ioctl before they can be mapped into the application's address
- space. User buffers are allocated by applications themselves, and this
- ioctl is merely used to switch the driver into user pointer I/O mode and
- to setup some internal structures. Similarly, DMABUF buffers are
- allocated by applications through a device driver, and this ioctl only
- configures the driver into DMABUF I/O mode without performing any direct
- allocation.
- To allocate device buffers applications initialize all fields of the
- struct :c:type:`dmx_requestbuffers` structure. They set the ``count`` field
- to the desired number of buffers, and ``size`` to the size of each
- buffer.
- When the ioctl is called with a pointer to this structure, the driver will
- attempt to allocate the requested number of buffers and it stores the actual
- number allocated in the ``count`` field. The ``count`` can be smaller than the number requested, even zero, when the driver runs out of free memory. A larger
- number is also possible when the driver requires more buffers to
- function correctly. The actual allocated buffer size can is returned
- at ``size``, and can be smaller than what's requested.
- When this I/O method is not supported, the ioctl returns an ``EOPNOTSUPP``
- error code.
- Applications can call :ref:`DMX_REQBUFS` again to change the number of
- buffers, however this cannot succeed when any buffers are still mapped.
- A ``count`` value of zero frees all buffers, after aborting or finishing
- any DMA in progress.
- Return Value
- ============
- On success 0 is returned, on error -1 and the ``errno`` variable is set
- appropriately. The generic error codes are described at the
- :ref:`Generic Error Codes <gen-errors>` chapter.
- EOPNOTSUPP
- The the requested I/O method is not supported.
|