Linux 4.8.3
[linux/fpc-iii.git] / Documentation / media / uapi / mediactl / media-ioc-g-topology.rst
blob2e382cc7762c37dece8fff52a0b28fe99a5f1be3
1 .. -*- coding: utf-8; mode: rst -*-
3 .. _media_ioc_g_topology:
5 **************************
6 ioctl MEDIA_IOC_G_TOPOLOGY
7 **************************
9 Name
10 ====
12 MEDIA_IOC_G_TOPOLOGY - Enumerate the graph topology and graph element properties
15 Synopsis
16 ========
18 .. cpp:function:: int ioctl( int fd, int request, struct media_v2_topology *argp )
21 Arguments
22 =========
24 ``fd``
25     File descriptor returned by :ref:`open() <media-func-open>`.
27 ``request``
28     MEDIA_IOC_G_TOPOLOGY
30 ``argp``
33 Description
34 ===========
36 The typical usage of this ioctl is to call it twice. On the first call,
37 the structure defined at struct
38 :ref:`media_v2_topology <media-v2-topology>` should be zeroed. At
39 return, if no errors happen, this ioctl will return the
40 ``topology_version`` and the total number of entities, interfaces, pads
41 and links.
43 Before the second call, the userspace should allocate arrays to store
44 the graph elements that are desired, putting the pointers to them at the
45 ptr_entities, ptr_interfaces, ptr_links and/or ptr_pads, keeping the
46 other values untouched.
48 If the ``topology_version`` remains the same, the ioctl should fill the
49 desired arrays with the media graph elements.
52 .. _media-v2-topology:
54 .. flat-table:: struct media_v2_topology
55     :header-rows:  0
56     :stub-columns: 0
57     :widths: 1 2 8
60     -  .. row 1
62        -  __u64
64        -  ``topology_version``
66        -  Version of the media graph topology. When the graph is created,
67           this field starts with zero. Every time a graph element is added
68           or removed, this field is incremented.
70     -  .. row 2
72        -  __u64
74        -  ``num_entities``
76        -  Number of entities in the graph
78     -  .. row 3
80        -  __u64
82        -  ``ptr_entities``
84        -  A pointer to a memory area where the entities array will be
85           stored, converted to a 64-bits integer. It can be zero. if zero,
86           the ioctl won't store the entities. It will just update
87           ``num_entities``
89     -  .. row 4
91        -  __u64
93        -  ``num_interfaces``
95        -  Number of interfaces in the graph
97     -  .. row 5
99        -  __u64
101        -  ``ptr_interfaces``
103        -  A pointer to a memory area where the interfaces array will be
104           stored, converted to a 64-bits integer. It can be zero. if zero,
105           the ioctl won't store the interfaces. It will just update
106           ``num_interfaces``
108     -  .. row 6
110        -  __u64
112        -  ``num_pads``
114        -  Total number of pads in the graph
116     -  .. row 7
118        -  __u64
120        -  ``ptr_pads``
122        -  A pointer to a memory area where the pads array will be stored,
123           converted to a 64-bits integer. It can be zero. if zero, the ioctl
124           won't store the pads. It will just update ``num_pads``
126     -  .. row 8
128        -  __u64
130        -  ``num_links``
132        -  Total number of data and interface links in the graph
134     -  .. row 9
136        -  __u64
138        -  ``ptr_links``
140        -  A pointer to a memory area where the links array will be stored,
141           converted to a 64-bits integer. It can be zero. if zero, the ioctl
142           won't store the links. It will just update ``num_links``
146 .. _media-v2-entity:
148 .. flat-table:: struct media_v2_entity
149     :header-rows:  0
150     :stub-columns: 0
151     :widths: 1 2 8
154     -  .. row 1
156        -  __u32
158        -  ``id``
160        -  Unique ID for the entity.
162     -  .. row 2
164        -  char
166        -  ``name``\ [64]
168        -  Entity name as an UTF-8 NULL-terminated string.
170     -  .. row 3
172        -  __u32
174        -  ``function``
176        -  Entity main function, see :ref:`media-entity-type` for details.
178     -  .. row 4
180        -  __u32
182        -  ``reserved``\ [12]
184        -  Reserved for future extensions. Drivers and applications must set
185           this array to zero.
189 .. _media-v2-interface:
191 .. flat-table:: struct media_v2_interface
192     :header-rows:  0
193     :stub-columns: 0
194     :widths: 1 2 8
196     -  .. row 1
198        -  __u32
200        -  ``id``
202        -  Unique ID for the interface.
204     -  .. row 2
206        -  __u32
208        -  ``intf_type``
210        -  Interface type, see :ref:`media-intf-type` for details.
212     -  .. row 3
214        -  __u32
216        -  ``flags``
218        -  Interface flags. Currently unused.
220     -  .. row 4
222        -  __u32
224        -  ``reserved``\ [9]
226        -  Reserved for future extensions. Drivers and applications must set
227           this array to zero.
229     -  .. row 5
231        -  struct media_v2_intf_devnode
233        -  ``devnode``
235        -  Used only for device node interfaces. See
236           :ref:`media-v2-intf-devnode` for details..
240 .. _media-v2-intf-devnode:
242 .. flat-table:: struct media_v2_interface
243     :header-rows:  0
244     :stub-columns: 0
245     :widths: 1 2 8
248     -  .. row 1
250        -  __u32
252        -  ``major``
254        -  Device node major number.
256     -  .. row 2
258        -  __u32
260        -  ``minor``
262        -  Device node minor number.
266 .. _media-v2-pad:
268 .. flat-table:: struct media_v2_pad
269     :header-rows:  0
270     :stub-columns: 0
271     :widths: 1 2 8
274     -  .. row 1
276        -  __u32
278        -  ``id``
280        -  Unique ID for the pad.
282     -  .. row 2
284        -  __u32
286        -  ``entity_id``
288        -  Unique ID for the entity where this pad belongs.
290     -  .. row 3
292        -  __u32
294        -  ``flags``
296        -  Pad flags, see :ref:`media-pad-flag` for more details.
298     -  .. row 4
300        -  __u32
302        -  ``reserved``\ [9]
304        -  Reserved for future extensions. Drivers and applications must set
305           this array to zero.
309 .. _media-v2-link:
311 .. flat-table:: struct media_v2_pad
312     :header-rows:  0
313     :stub-columns: 0
314     :widths: 1 2 8
317     -  .. row 1
319        -  __u32
321        -  ``id``
323        -  Unique ID for the pad.
325     -  .. row 2
327        -  __u32
329        -  ``source_id``
331        -  On pad to pad links: unique ID for the source pad.
333           On interface to entity links: unique ID for the interface.
335     -  .. row 3
337        -  __u32
339        -  ``sink_id``
341        -  On pad to pad links: unique ID for the sink pad.
343           On interface to entity links: unique ID for the entity.
345     -  .. row 4
347        -  __u32
349        -  ``flags``
351        -  Link flags, see :ref:`media-link-flag` for more details.
353     -  .. row 5
355        -  __u32
357        -  ``reserved``\ [5]
359        -  Reserved for future extensions. Drivers and applications must set
360           this array to zero.
363 Return Value
364 ============
366 On success 0 is returned, on error -1 and the ``errno`` variable is set
367 appropriately. The generic error codes are described at the
368 :ref:`Generic Error Codes <gen-errors>` chapter.
370 ENOSPC
371     This is returned when either one or more of the num_entities,
372     num_interfaces, num_links or num_pads are non-zero and are
373     smaller than the actual number of elements inside the graph. This
374     may happen if the ``topology_version`` changed when compared to the
375     last time this ioctl was called. Userspace should usually free the
376     area for the pointers, zero the struct elements and call this ioctl
377     again.