aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/dev_media.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-01-05 16:29:00 +0100
committerDmitry Vyukov <dvyukov@google.com>2022-01-11 16:30:08 +0100
commitc1cff6f1ec1346f5d9c1e499dae0bd106ebb39ec (patch)
treecbf89277cc2fbbcea998f076799380b55d06bb23 /sys/linux/dev_media.txt
parent891d68726994c98742b282a365be9329f96c001f (diff)
sys/linux: add /dev/media descriptions
Move existing bits of /dev/media descriptions from sys.txt and dev_video4linux.txt and complete the descriptions. Also provide more concrete specialization of VIDIOC_QUERYBUF ioctl. Add ioctl specialization that serves as fd_v4l2_buffer resource constructor (returns it outside of a union).
Diffstat (limited to 'sys/linux/dev_media.txt')
-rw-r--r--sys/linux/dev_media.txt103
1 files changed, 103 insertions, 0 deletions
diff --git a/sys/linux/dev_media.txt b/sys/linux/dev_media.txt
new file mode 100644
index 000000000..8a3f845c0
--- /dev/null
+++ b/sys/linux/dev_media.txt
@@ -0,0 +1,103 @@
+# Copyright 2022 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+include <uapi/linux/media.h>
+
+resource fd_media[fd]
+resource fd_request[fd]
+resource media_entity_id[int32]: MEDIA_ENT_ID_FLAG_NEXT
+resource media_pad_index[int16]
+
+syz_open_dev$media(dev ptr[in, string["/dev/media#"]], id intptr, flags flags[open_flags]) fd_media
+
+ioctl$MEDIA_IOC_DEVICE_INFO(fd fd_media, cmd const[MEDIA_IOC_DEVICE_INFO], arg ptr[out, array[int8, MEDIA_DEVICE_INFO_SIZE]])
+ioctl$MEDIA_IOC_ENUM_ENTITIES(fd fd_media, cmd const[MEDIA_IOC_ENUM_ENTITIES], arg ptr[inout, media_entity_desc])
+ioctl$MEDIA_IOC_ENUM_LINKS(fd fd_media, cmd const[MEDIA_IOC_ENUM_LINKS], arg ptr[inout, media_links_enum])
+ioctl$MEDIA_IOC_SETUP_LINK(fd fd_media, cmd const[MEDIA_IOC_SETUP_LINK], arg ptr[in, media_link_desc])
+ioctl$MEDIA_IOC_G_TOPOLOGY(fd fd_media, cmd const[MEDIA_IOC_G_TOPOLOGY], arg ptr[inout, media_v2_topology])
+ioctl$MEDIA_IOC_REQUEST_ALLOC(fd fd_media, cmd const[MEDIA_IOC_REQUEST_ALLOC], arg ptr[out, fd_request])
+
+ioctl$MEDIA_REQUEST_IOC_QUEUE(fd fd_request, cmd const[MEDIA_REQUEST_IOC_QUEUE], arg const[0])
+ioctl$MEDIA_REQUEST_IOC_REINIT(fd fd_request, cmd const[MEDIA_REQUEST_IOC_REINIT], arg const[0])
+
+define MEDIA_DEVICE_INFO_SIZE sizeof(struct media_device_info)
+define MEDIA_ENTITY_DESC_SIZE sizeof(struct media_entity_desc)
+
+media_entity_desc {
+ id media_entity_id (in)
+} [size[MEDIA_ENTITY_DESC_SIZE]]
+
+media_links_enum {
+ entity media_entity_id (in)
+ pads ptr[out, array[media_pad_desc, 2]]
+ links ptr[out, array[media_link_desc, 2]]
+}
+
+media_link_desc {
+ source media_pad_desc
+ sink media_pad_desc
+ flags flags[media_link_flags, int32]
+ reserved array[int32, 2]
+}
+
+media_link_flags = MEDIA_LNK_FL_ENABLED, MEDIA_LNK_FL_IMMUTABLE, MEDIA_LNK_FL_DYNAMIC, MEDIA_LNK_FL_DATA_LINK, MEDIA_LNK_FL_INTERFACE_LINK
+
+media_pad_desc {
+ entity media_entity_id
+ index media_pad_index
+ flags flags[media_pad_flags, int32]
+ reserved array[int32, 2]
+}
+
+media_pad_flags = MEDIA_PAD_FL_SINK, MEDIA_PAD_FL_SOURCE, MEDIA_PAD_FL_MUST_CONNECT
+
+media_v2_topology {
+ topology_version int64 (out)
+ num_entities len[ptr_entities, int32]
+ reserved1 const[0, int32]
+ ptr_entities ptr64[out, array[media_v2_entity]]
+ num_interfaces len[ptr_interfaces, int32]
+ reserved2 const[0, int32]
+ ptr_interfaces ptr64[out, array[media_v2_interface]]
+ num_pads len[ptr_pads, int32]
+ reserved3 const[0, int32]
+ ptr_pads ptr64[out, array[media_v2_pad]]
+ num_links len[ptr_links, int32]
+ reserved4 const[0, int32]
+ ptr_links ptr64[out, array[media_v2_link]]
+} [packed]
+
+media_v2_entity {
+ id media_entity_id
+ name array[int8, 64]
+ function int32
+ flags int32
+ reserved array[int32, 5]
+} [packed]
+
+media_v2_interface {
+ id int32
+ intf_type int32
+ flags int32
+ reserved array[int32, 9]
+ raw array[int32, 16]
+} [packed]
+
+media_v2_pad {
+ id int32
+ entity_id media_entity_id
+ flags int32
+# The v1 pad indexes are int16, so we use int16 as resource base,
+# but v2 pad indexes are int32, so we need the pad.
+ index media_pad_index
+ index_pad const[0, int16]
+ reserved array[int32, 4]
+} [packed]
+
+media_v2_link {
+ id int32
+ source_id int32
+ sink_id int32
+ flags int32
+ reserved array[int32, 6]
+} [packed]