linux/drivers/media
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
..
cec media: cec: core: not all messages were passed on when monitoring 2023-04-15 07:48:39 +01:00
common media: common: saa7146: add support for missing .vidioc_try_fmt_vbi_cap 2023-04-15 08:55:16 +01:00
dvb-core Driver Core changes for 6.2-rc1 2022-12-16 03:54:54 -08:00
dvb-frontends media: zd1301_demod: Convert to platform remove callback returning void 2023-04-11 16:59:14 +02:00
firewire media: Makefiles: remove extra spaces 2022-03-12 16:59:52 +01:00
i2c media: i2c: imx290: Add missing \n on dev_err_probe() message 2023-04-11 18:54:02 +02:00
mc media: mc-device: remove unnecessary __must_check 2023-04-11 18:54:01 +02:00
mmc media: media/*/Kconfig: sort entries 2022-03-18 05:58:35 +01:00
pci media: pci: saa7146: advertise only those TV standard that are supported 2023-04-15 08:56:05 +01:00
platform media: mediatek: vcodec: Coverity issues in encoder driver 2023-04-15 08:39:22 +01:00
radio media: radio-platform-si4713: Convert to platform remove callback returning void 2023-04-11 16:59:20 +02:00
rc media: rc: gpio-ir-recv: Fix support for wake-up 2023-04-12 09:19:05 +02:00
spi media updates for v5.18-rc1 2022-03-23 14:51:35 -07:00
test-drivers media: Zero-initialize all structures passed to subdev pad operations 2023-04-12 09:46:06 +02:00
tuners media: it913x: Convert to platform remove callback returning void 2023-04-11 16:59:21 +02:00
usb media: Prefer designated initializers over memset for subdev pad ops 2023-04-12 09:46:06 +02:00
v4l2-core media: v4l2-subdev: Add new ioctl for client capabilities 2023-04-15 08:58:41 +01:00
Kconfig media: Kconfig: Make DVB_CORE=m possible when MEDIA_SUPPORT=y 2022-12-07 17:58:46 +01:00
Makefile media: Makefiles: remove extra spaces 2022-03-12 16:59:52 +01:00