aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/dev_media.txt
blob: 523dd1317c6e040e2b6e7a507564ae11bd54692f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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]]
	reserved	array[const[0, int32], 4]
}

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		padto32[media_pad_index]
	reserved	array[int32, 4]
} [packed]

media_v2_link {
	id		int32
	source_id	int32
	sink_id		int32
	flags		int32
	reserved	array[int32, 6]
} [packed]