162306a36Sopenharmony_ci.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
262306a36Sopenharmony_ci.. c:namespace:: DTV.dmx
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci.. _DMX_EXPBUF:
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci****************
762306a36Sopenharmony_ciioctl DMX_EXPBUF
862306a36Sopenharmony_ci****************
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciName
1162306a36Sopenharmony_ci====
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciDMX_EXPBUF - Export a buffer as a DMABUF file descriptor.
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci.. warning:: this API is still experimental
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciSynopsis
1862306a36Sopenharmony_ci========
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci.. c:macro:: DMX_EXPBUF
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci``int ioctl(int fd, DMX_EXPBUF, struct dmx_exportbuffer *argp)``
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciArguments
2562306a36Sopenharmony_ci=========
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci``fd``
2862306a36Sopenharmony_ci    File descriptor returned by :c:func:`open()`.
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci``argp``
3162306a36Sopenharmony_ci    Pointer to struct :c:type:`dmx_exportbuffer`.
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciDescription
3462306a36Sopenharmony_ci===========
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ciThis ioctl is an extension to the memory mapping I/O method.
3762306a36Sopenharmony_ciIt can be used to export a buffer as a DMABUF file at any time after
3862306a36Sopenharmony_cibuffers have been allocated with the :ref:`DMX_REQBUFS` ioctl.
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciTo export a buffer, applications fill struct :c:type:`dmx_exportbuffer`.
4162306a36Sopenharmony_ciApplications must set the ``index`` field. Valid index numbers
4262306a36Sopenharmony_cirange from zero to the number of buffers allocated with :ref:`DMX_REQBUFS`
4362306a36Sopenharmony_ci(struct :c:type:`dmx_requestbuffers` ``count``) minus one.
4462306a36Sopenharmony_ciAdditional flags may be posted in the ``flags`` field. Refer to a manual
4562306a36Sopenharmony_cifor open() for details. Currently only O_CLOEXEC, O_RDONLY, O_WRONLY,
4662306a36Sopenharmony_ciand O_RDWR are supported.
4762306a36Sopenharmony_ciAll other fields must be set to zero. In the
4862306a36Sopenharmony_cicase of multi-planar API, every plane is exported separately using
4962306a36Sopenharmony_cimultiple :ref:`DMX_EXPBUF` calls.
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciAfter calling :ref:`DMX_EXPBUF` the ``fd`` field will be set by a
5262306a36Sopenharmony_cidriver, on success. This is a DMABUF file descriptor. The application may
5362306a36Sopenharmony_cipass it to other DMABUF-aware devices. It is recommended to close a DMABUF
5462306a36Sopenharmony_cifile when it is no longer used to allow the associated memory to be reclaimed.
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciExamples
5762306a36Sopenharmony_ci========
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci.. code-block:: c
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci    int buffer_export(int v4lfd, enum dmx_buf_type bt, int index, int *dmafd)
6262306a36Sopenharmony_ci    {
6362306a36Sopenharmony_ci	struct dmx_exportbuffer expbuf;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	memset(&expbuf, 0, sizeof(expbuf));
6662306a36Sopenharmony_ci	expbuf.type = bt;
6762306a36Sopenharmony_ci	expbuf.index = index;
6862306a36Sopenharmony_ci	if (ioctl(v4lfd, DMX_EXPBUF, &expbuf) == -1) {
6962306a36Sopenharmony_ci	    perror("DMX_EXPBUF");
7062306a36Sopenharmony_ci	    return -1;
7162306a36Sopenharmony_ci	}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci	*dmafd = expbuf.fd;
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	return 0;
7662306a36Sopenharmony_ci    }
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciReturn Value
7962306a36Sopenharmony_ci============
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ciOn success 0 is returned, on error -1 and the ``errno`` variable is set
8262306a36Sopenharmony_ciappropriately. The generic error codes are described at the
8362306a36Sopenharmony_ci:ref:`Generic Error Codes <gen-errors>` chapter.
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciEINVAL
8662306a36Sopenharmony_ci    A queue is not in MMAP mode or DMABUF exporting is not supported or
8762306a36Sopenharmony_ci    ``flags`` or ``index`` fields are invalid.
88