cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vidioc-create-bufs.rst (4969B)


      1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
      2.. c:namespace:: V4L
      3
      4.. _VIDIOC_CREATE_BUFS:
      5
      6************************
      7ioctl VIDIOC_CREATE_BUFS
      8************************
      9
     10Name
     11====
     12
     13VIDIOC_CREATE_BUFS - Create buffers for Memory Mapped or User Pointer or DMA Buffer I/O
     14
     15Synopsis
     16========
     17
     18.. c:macro:: VIDIOC_CREATE_BUFS
     19
     20``int ioctl(int fd, VIDIOC_CREATE_BUFS, struct v4l2_create_buffers *argp)``
     21
     22Arguments
     23=========
     24
     25``fd``
     26    File descriptor returned by :c:func:`open()`.
     27
     28``argp``
     29    Pointer to struct :c:type:`v4l2_create_buffers`.
     30
     31Description
     32===========
     33
     34This ioctl is used to create buffers for :ref:`memory mapped <mmap>`
     35or :ref:`user pointer <userp>` or :ref:`DMA buffer <dmabuf>` I/O. It
     36can be used as an alternative or in addition to the
     37:ref:`VIDIOC_REQBUFS` ioctl, when a tighter control
     38over buffers is required. This ioctl can be called multiple times to
     39create buffers of different sizes.
     40
     41To allocate the device buffers applications must initialize the relevant
     42fields of the struct :c:type:`v4l2_create_buffers` structure. The
     43``count`` field must be set to the number of requested buffers, the
     44``memory`` field specifies the requested I/O method and the ``reserved``
     45array must be zeroed.
     46
     47The ``format`` field specifies the image format that the buffers must be
     48able to handle. The application has to fill in this struct
     49:c:type:`v4l2_format`. Usually this will be done using the
     50:ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` or
     51:ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctls to ensure that the
     52requested format is supported by the driver. Based on the format's
     53``type`` field the requested buffer size (for single-planar) or plane
     54sizes (for multi-planar formats) will be used for the allocated buffers.
     55The driver may return an error if the size(s) are not supported by the
     56hardware (usually because they are too small).
     57
     58The buffers created by this ioctl will have as minimum size the size
     59defined by the ``format.pix.sizeimage`` field (or the corresponding
     60fields for other format types). Usually if the ``format.pix.sizeimage``
     61field is less than the minimum required for the given format, then an
     62error will be returned since drivers will typically not allow this. If
     63it is larger, then the value will be used as-is. In other words, the
     64driver may reject the requested size, but if it is accepted the driver
     65will use it unchanged.
     66
     67When the ioctl is called with a pointer to this structure the driver
     68will attempt to allocate up to the requested number of buffers and store
     69the actual number allocated and the starting index in the ``count`` and
     70the ``index`` fields respectively. On return ``count`` can be smaller
     71than the number requested.
     72
     73.. c:type:: v4l2_create_buffers
     74
     75.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}|
     76
     77.. flat-table:: struct v4l2_create_buffers
     78    :header-rows:  0
     79    :stub-columns: 0
     80    :widths:       1 1 2
     81
     82    * - __u32
     83      - ``index``
     84      - The starting buffer index, returned by the driver.
     85    * - __u32
     86      - ``count``
     87      - The number of buffers requested or granted. If count == 0, then
     88	:ref:`VIDIOC_CREATE_BUFS` will set ``index`` to the current number of
     89	created buffers, and it will check the validity of ``memory`` and
     90	``format.type``. If those are invalid -1 is returned and errno is
     91	set to ``EINVAL`` error code, otherwise :ref:`VIDIOC_CREATE_BUFS` returns
     92	0. It will never set errno to ``EBUSY`` error code in this particular
     93	case.
     94    * - __u32
     95      - ``memory``
     96      - Applications set this field to ``V4L2_MEMORY_MMAP``,
     97	``V4L2_MEMORY_DMABUF`` or ``V4L2_MEMORY_USERPTR``. See
     98	:c:type:`v4l2_memory`
     99    * - struct :c:type:`v4l2_format`
    100      - ``format``
    101      - Filled in by the application, preserved by the driver.
    102    * - __u32
    103      - ``capabilities``
    104      - Set by the driver. If 0, then the driver doesn't support
    105        capabilities. In that case all you know is that the driver is
    106	guaranteed to support ``V4L2_MEMORY_MMAP`` and *might* support
    107	other :c:type:`v4l2_memory` types. It will not support any other
    108	capabilities. See :ref:`here <v4l2-buf-capabilities>` for a list of the
    109	capabilities.
    110
    111	If you want to just query the capabilities without making any
    112	other changes, then set ``count`` to 0, ``memory`` to
    113	``V4L2_MEMORY_MMAP`` and ``format.type`` to the buffer type.
    114
    115    * - __u32
    116      - ``flags``
    117      - Specifies additional buffer management attributes.
    118	See :ref:`memory-flags`.
    119
    120    * - __u32
    121      - ``reserved``\ [6]
    122      - A place holder for future extensions. Drivers and applications
    123	must set the array to zero.
    124
    125Return Value
    126============
    127
    128On success 0 is returned, on error -1 and the ``errno`` variable is set
    129appropriately. The generic error codes are described at the
    130:ref:`Generic Error Codes <gen-errors>` chapter.
    131
    132ENOMEM
    133    No memory to allocate buffers for :ref:`memory mapped <mmap>` I/O.
    134
    135EINVAL
    136    The buffer type (``format.type`` field), requested I/O method
    137    (``memory``) or format (``format`` field) is not valid.