Files
linux/Documentation/userspace-api/media/v4l/user-func.rst
Tomi Valkeinen f57fa29592 media: v4l2-subdev: Add new ioctl for client capabilities
Add new ioctls to set and get subdev client capabilities. Client in this
context means the userspace application which opens the subdev device
node. The client capabilities are stored in the file handle of the
opened subdev device node, and the client must set the capabilities for
each opened subdev.

For now we only add a single flag, V4L2_SUBDEV_CLIENT_CAP_STREAMS, which
indicates that the client is streams-aware.

The reason for needing such a flag is as follows:

Many structs passed via ioctls, e.g. struct v4l2_subdev_format, contain
reserved fields (usually a single array field). These reserved fields
can be used to extend the ioctl. The userspace is required to zero the
reserved fields.

We recently added a new 'stream' field to many of these structs, and the
space for the field was taken from these reserved arrays. The assumption
was that these new 'stream' fields are always initialized to zero if the
userspace does not use them. This was a mistake, as, as mentioned above,
the userspace is required to zero the _reserved_ fields. In other words,
there is no requirement to zero this new stream field, and if the
userspace doesn't use the field (which is the case for all userspace
applications at the moment), the field may contain random data.

This shows that the way the reserved fields are defined in v4l2 is, in
my opinion, somewhat broken, but there is nothing to do about that.

To fix this issue we need a way for the userspace to tell the kernel
that the userspace has indeed set the 'stream' field, and it's fine for
the kernel to access it. This is achieved with the new ioctl, which the
userspace should usually use right after opening the subdev device node.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
2023-04-15 08:58:41 +01:00

85 lines
1.7 KiB
ReStructuredText

.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
.. _user-func:
******************
Function Reference
******************
.. toctree::
:maxdepth: 1
func-close
func-ioctl
vidioc-create-bufs
vidioc-cropcap
vidioc-dbg-g-chip-info
vidioc-dbg-g-register
vidioc-decoder-cmd
vidioc-dqevent
vidioc-dv-timings-cap
vidioc-encoder-cmd
vidioc-enumaudio
vidioc-enumaudioout
vidioc-enum-dv-timings
vidioc-enum-fmt
vidioc-enum-framesizes
vidioc-enum-frameintervals
vidioc-enum-freq-bands
vidioc-enuminput
vidioc-enumoutput
vidioc-enumstd
vidioc-expbuf
vidioc-g-audio
vidioc-g-audioout
vidioc-g-crop
vidioc-g-ctrl
vidioc-g-dv-timings
vidioc-g-edid
vidioc-g-enc-index
vidioc-g-ext-ctrls
vidioc-g-fbuf
vidioc-g-fmt
vidioc-g-frequency
vidioc-g-input
vidioc-g-jpegcomp
vidioc-g-modulator
vidioc-g-output
vidioc-g-parm
vidioc-g-priority
vidioc-g-selection
vidioc-g-sliced-vbi-cap
vidioc-g-std
vidioc-g-tuner
vidioc-log-status
vidioc-overlay
vidioc-prepare-buf
vidioc-qbuf
vidioc-querybuf
vidioc-querycap
vidioc-queryctrl
vidioc-query-dv-timings
vidioc-querystd
vidioc-reqbufs
vidioc-s-hw-freq-seek
vidioc-streamon
vidioc-subdev-enum-frame-interval
vidioc-subdev-enum-frame-size
vidioc-subdev-enum-mbus-code
vidioc-subdev-g-crop
vidioc-subdev-g-fmt
vidioc-subdev-g-frame-interval
vidioc-subdev-g-routing
vidioc-subdev-g-selection
vidioc-subdev-g-client-cap
vidioc-subdev-querycap
vidioc-subscribe-event
func-mmap
func-munmap
func-open
func-poll
func-read
func-select
func-write