|
@@ -0,0 +1,116 @@
|
|
|
+.. _dmx-mmap:
|
|
|
+
|
|
|
+*****************
|
|
|
+Digital TV mmap()
|
|
|
+*****************
|
|
|
+
|
|
|
+Name
|
|
|
+====
|
|
|
+
|
|
|
+dmx-mmap - Map device memory into application address space
|
|
|
+
|
|
|
+.. warning:: this API is still experimental
|
|
|
+
|
|
|
+Synopsis
|
|
|
+========
|
|
|
+
|
|
|
+.. code-block:: c
|
|
|
+
|
|
|
+ #include <unistd.h>
|
|
|
+ #include <sys/mman.h>
|
|
|
+
|
|
|
+
|
|
|
+.. c:function:: void *mmap( void *start, size_t length, int prot, int flags, int fd, off_t offset )
|
|
|
+ :name: dmx-mmap
|
|
|
+
|
|
|
+Arguments
|
|
|
+=========
|
|
|
+
|
|
|
+``start``
|
|
|
+ Map the buffer to this address in the application's address space.
|
|
|
+ When the ``MAP_FIXED`` flag is specified, ``start`` must be a
|
|
|
+ multiple of the pagesize and mmap will fail when the specified
|
|
|
+ address cannot be used. Use of this option is discouraged;
|
|
|
+ applications should just specify a ``NULL`` pointer here.
|
|
|
+
|
|
|
+``length``
|
|
|
+ Length of the memory area to map. This must be a multiple of the
|
|
|
+ DVB packet length (188, on most drivers).
|
|
|
+
|
|
|
+``prot``
|
|
|
+ The ``prot`` argument describes the desired memory protection.
|
|
|
+ Regardless of the device type and the direction of data exchange it
|
|
|
+ should be set to ``PROT_READ`` | ``PROT_WRITE``, permitting read
|
|
|
+ and write access to image buffers. Drivers should support at least
|
|
|
+ this combination of flags.
|
|
|
+
|
|
|
+``flags``
|
|
|
+ The ``flags`` parameter specifies the type of the mapped object,
|
|
|
+ mapping options and whether modifications made to the mapped copy of
|
|
|
+ the page are private to the process or are to be shared with other
|
|
|
+ references.
|
|
|
+
|
|
|
+ ``MAP_FIXED`` requests that the driver selects no other address than
|
|
|
+ the one specified. If the specified address cannot be used,
|
|
|
+ :ref:`mmap() <dmx-mmap>` will fail. If ``MAP_FIXED`` is specified,
|
|
|
+ ``start`` must be a multiple of the pagesize. Use of this option is
|
|
|
+ discouraged.
|
|
|
+
|
|
|
+ One of the ``MAP_SHARED`` or ``MAP_PRIVATE`` flags must be set.
|
|
|
+ ``MAP_SHARED`` allows applications to share the mapped memory with
|
|
|
+ other (e. g. child-) processes.
|
|
|
+
|
|
|
+ .. note::
|
|
|
+
|
|
|
+ The Linux Digital TV applications should not set the
|
|
|
+ ``MAP_PRIVATE``, ``MAP_DENYWRITE``, ``MAP_EXECUTABLE`` or ``MAP_ANON``
|
|
|
+ flags.
|
|
|
+
|
|
|
+``fd``
|
|
|
+ File descriptor returned by :ref:`open() <dmx_fopen>`.
|
|
|
+
|
|
|
+``offset``
|
|
|
+ Offset of the buffer in device memory, as returned by
|
|
|
+ :ref:`DMX_QUERYBUF` ioctl.
|
|
|
+
|
|
|
+
|
|
|
+Description
|
|
|
+===========
|
|
|
+
|
|
|
+The :ref:`mmap() <dmx-mmap>` function asks to map ``length`` bytes starting at
|
|
|
+``offset`` in the memory of the device specified by ``fd`` into the
|
|
|
+application address space, preferably at address ``start``. This latter
|
|
|
+address is a hint only, and is usually specified as 0.
|
|
|
+
|
|
|
+Suitable length and offset parameters are queried with the
|
|
|
+:ref:`DMX_QUERYBUF` ioctl. Buffers must be allocated with the
|
|
|
+:ref:`DMX_REQBUFS` ioctl before they can be queried.
|
|
|
+
|
|
|
+To unmap buffers the :ref:`munmap() <dmx-munmap>` function is used.
|
|
|
+
|
|
|
+
|
|
|
+Return Value
|
|
|
+============
|
|
|
+
|
|
|
+On success :ref:`mmap() <dmx-mmap>` returns a pointer to the mapped buffer. On
|
|
|
+error ``MAP_FAILED`` (-1) is returned, and the ``errno`` variable is set
|
|
|
+appropriately. Possible error codes are:
|
|
|
+
|
|
|
+EBADF
|
|
|
+ ``fd`` is not a valid file descriptor.
|
|
|
+
|
|
|
+EACCES
|
|
|
+ ``fd`` is not open for reading and writing.
|
|
|
+
|
|
|
+EINVAL
|
|
|
+ The ``start`` or ``length`` or ``offset`` are not suitable. (E. g.
|
|
|
+ they are too large, or not aligned on a ``PAGESIZE`` boundary.)
|
|
|
+
|
|
|
+ The ``flags`` or ``prot`` value is not supported.
|
|
|
+
|
|
|
+ No buffers have been allocated with the
|
|
|
+ :ref:`DMX_REQBUFS` ioctl.
|
|
|
+
|
|
|
+ENOMEM
|
|
|
+ Not enough physical or virtual memory was available to complete the
|
|
|
+ request.
|