xref: /openbmc/linux/Documentation/userspace-api/media/mediactl/media-ioc-g-topology.rst (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
1059b1c5bSMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2937e6805SMauro Carvalho Chehab.. c:namespace:: MC
354f38fcaSMauro Carvalho Chehab
454f38fcaSMauro Carvalho Chehab.. _media_ioc_g_topology:
554f38fcaSMauro Carvalho Chehab
654f38fcaSMauro Carvalho Chehab**************************
754f38fcaSMauro Carvalho Chehabioctl MEDIA_IOC_G_TOPOLOGY
854f38fcaSMauro Carvalho Chehab**************************
954f38fcaSMauro Carvalho Chehab
1054f38fcaSMauro Carvalho ChehabName
1154f38fcaSMauro Carvalho Chehab====
1254f38fcaSMauro Carvalho Chehab
1354f38fcaSMauro Carvalho ChehabMEDIA_IOC_G_TOPOLOGY - Enumerate the graph topology and graph element properties
1454f38fcaSMauro Carvalho Chehab
1554f38fcaSMauro Carvalho ChehabSynopsis
1654f38fcaSMauro Carvalho Chehab========
1754f38fcaSMauro Carvalho Chehab
18937e6805SMauro Carvalho Chehab.. c:macro:: MEDIA_IOC_G_TOPOLOGY
1954f38fcaSMauro Carvalho Chehab
20937e6805SMauro Carvalho Chehab``int ioctl(int fd, MEDIA_IOC_G_TOPOLOGY, struct media_v2_topology *argp)``
2154f38fcaSMauro Carvalho Chehab
2254f38fcaSMauro Carvalho ChehabArguments
2354f38fcaSMauro Carvalho Chehab=========
2454f38fcaSMauro Carvalho Chehab
2554f38fcaSMauro Carvalho Chehab``fd``
26937e6805SMauro Carvalho Chehab    File descriptor returned by :c:func:`open()`.
2754f38fcaSMauro Carvalho Chehab
2854f38fcaSMauro Carvalho Chehab``argp``
2954f38fcaSMauro Carvalho Chehab    Pointer to struct :c:type:`media_v2_topology`.
3054f38fcaSMauro Carvalho Chehab
3154f38fcaSMauro Carvalho ChehabDescription
3254f38fcaSMauro Carvalho Chehab===========
3354f38fcaSMauro Carvalho Chehab
3454f38fcaSMauro Carvalho ChehabThe typical usage of this ioctl is to call it twice. On the first call,
3554f38fcaSMauro Carvalho Chehabthe structure defined at struct
3654f38fcaSMauro Carvalho Chehab:c:type:`media_v2_topology` should be zeroed. At
3754f38fcaSMauro Carvalho Chehabreturn, if no errors happen, this ioctl will return the
3854f38fcaSMauro Carvalho Chehab``topology_version`` and the total number of entities, interfaces, pads
3954f38fcaSMauro Carvalho Chehaband links.
4054f38fcaSMauro Carvalho Chehab
4154f38fcaSMauro Carvalho ChehabBefore the second call, the userspace should allocate arrays to store
4254f38fcaSMauro Carvalho Chehabthe graph elements that are desired, putting the pointers to them at the
4354f38fcaSMauro Carvalho Chehabptr_entities, ptr_interfaces, ptr_links and/or ptr_pads, keeping the
4454f38fcaSMauro Carvalho Chehabother values untouched.
4554f38fcaSMauro Carvalho Chehab
4654f38fcaSMauro Carvalho ChehabIf the ``topology_version`` remains the same, the ioctl should fill the
4754f38fcaSMauro Carvalho Chehabdesired arrays with the media graph elements.
4854f38fcaSMauro Carvalho Chehab
49*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.4cm}|p{12.3cm}|
5054f38fcaSMauro Carvalho Chehab
5154f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_topology
5254f38fcaSMauro Carvalho Chehab
5354f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_topology
5454f38fcaSMauro Carvalho Chehab    :header-rows:  0
5554f38fcaSMauro Carvalho Chehab    :stub-columns: 0
5654f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
5754f38fcaSMauro Carvalho Chehab
5854f38fcaSMauro Carvalho Chehab    *  -  __u64
5954f38fcaSMauro Carvalho Chehab       -  ``topology_version``
6054f38fcaSMauro Carvalho Chehab       -  Version of the media graph topology. When the graph is created,
6154f38fcaSMauro Carvalho Chehab	  this field starts with zero. Every time a graph element is added
6254f38fcaSMauro Carvalho Chehab	  or removed, this field is incremented.
6354f38fcaSMauro Carvalho Chehab
6454f38fcaSMauro Carvalho Chehab    *  -  __u32
6554f38fcaSMauro Carvalho Chehab       -  ``num_entities``
6654f38fcaSMauro Carvalho Chehab       -  Number of entities in the graph
6754f38fcaSMauro Carvalho Chehab
6854f38fcaSMauro Carvalho Chehab    *  -  __u32
6954f38fcaSMauro Carvalho Chehab       -  ``reserved1``
7054f38fcaSMauro Carvalho Chehab       -  Applications and drivers shall set this to 0.
7154f38fcaSMauro Carvalho Chehab
7254f38fcaSMauro Carvalho Chehab    *  -  __u64
7354f38fcaSMauro Carvalho Chehab       -  ``ptr_entities``
7454f38fcaSMauro Carvalho Chehab       -  A pointer to a memory area where the entities array will be
7554f38fcaSMauro Carvalho Chehab	  stored, converted to a 64-bits integer. It can be zero. if zero,
7654f38fcaSMauro Carvalho Chehab	  the ioctl won't store the entities. It will just update
7754f38fcaSMauro Carvalho Chehab	  ``num_entities``
7854f38fcaSMauro Carvalho Chehab
7954f38fcaSMauro Carvalho Chehab    *  -  __u32
8054f38fcaSMauro Carvalho Chehab       -  ``num_interfaces``
8154f38fcaSMauro Carvalho Chehab       -  Number of interfaces in the graph
8254f38fcaSMauro Carvalho Chehab
8354f38fcaSMauro Carvalho Chehab    *  -  __u32
8454f38fcaSMauro Carvalho Chehab       -  ``reserved2``
8554f38fcaSMauro Carvalho Chehab       -  Applications and drivers shall set this to 0.
8654f38fcaSMauro Carvalho Chehab
8754f38fcaSMauro Carvalho Chehab    *  -  __u64
8854f38fcaSMauro Carvalho Chehab       -  ``ptr_interfaces``
8954f38fcaSMauro Carvalho Chehab       -  A pointer to a memory area where the interfaces array will be
9054f38fcaSMauro Carvalho Chehab	  stored, converted to a 64-bits integer. It can be zero. if zero,
9154f38fcaSMauro Carvalho Chehab	  the ioctl won't store the interfaces. It will just update
9254f38fcaSMauro Carvalho Chehab	  ``num_interfaces``
9354f38fcaSMauro Carvalho Chehab
9454f38fcaSMauro Carvalho Chehab    *  -  __u32
9554f38fcaSMauro Carvalho Chehab       -  ``num_pads``
9654f38fcaSMauro Carvalho Chehab       -  Total number of pads in the graph
9754f38fcaSMauro Carvalho Chehab
9854f38fcaSMauro Carvalho Chehab    *  -  __u32
9954f38fcaSMauro Carvalho Chehab       -  ``reserved3``
10054f38fcaSMauro Carvalho Chehab       -  Applications and drivers shall set this to 0.
10154f38fcaSMauro Carvalho Chehab
10254f38fcaSMauro Carvalho Chehab    *  -  __u64
10354f38fcaSMauro Carvalho Chehab       -  ``ptr_pads``
10454f38fcaSMauro Carvalho Chehab       -  A pointer to a memory area where the pads array will be stored,
10554f38fcaSMauro Carvalho Chehab	  converted to a 64-bits integer. It can be zero. if zero, the ioctl
10654f38fcaSMauro Carvalho Chehab	  won't store the pads. It will just update ``num_pads``
10754f38fcaSMauro Carvalho Chehab
10854f38fcaSMauro Carvalho Chehab    *  -  __u32
10954f38fcaSMauro Carvalho Chehab       -  ``num_links``
11054f38fcaSMauro Carvalho Chehab       -  Total number of data and interface links in the graph
11154f38fcaSMauro Carvalho Chehab
11254f38fcaSMauro Carvalho Chehab    *  -  __u32
11354f38fcaSMauro Carvalho Chehab       -  ``reserved4``
11454f38fcaSMauro Carvalho Chehab       -  Applications and drivers shall set this to 0.
11554f38fcaSMauro Carvalho Chehab
11654f38fcaSMauro Carvalho Chehab    *  -  __u64
11754f38fcaSMauro Carvalho Chehab       -  ``ptr_links``
11854f38fcaSMauro Carvalho Chehab       -  A pointer to a memory area where the links array will be stored,
11954f38fcaSMauro Carvalho Chehab	  converted to a 64-bits integer. It can be zero. if zero, the ioctl
12054f38fcaSMauro Carvalho Chehab	  won't store the links. It will just update ``num_links``
12154f38fcaSMauro Carvalho Chehab
122*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.5cm}|
12354f38fcaSMauro Carvalho Chehab
12454f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_entity
12554f38fcaSMauro Carvalho Chehab
12654f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_entity
12754f38fcaSMauro Carvalho Chehab    :header-rows:  0
12854f38fcaSMauro Carvalho Chehab    :stub-columns: 0
12954f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
13054f38fcaSMauro Carvalho Chehab
13154f38fcaSMauro Carvalho Chehab    *  -  __u32
13254f38fcaSMauro Carvalho Chehab       -  ``id``
13354f38fcaSMauro Carvalho Chehab       -  Unique ID for the entity. Do not expect that the ID will
13454f38fcaSMauro Carvalho Chehab	  always be the same for each instance of the device. In other words,
13554f38fcaSMauro Carvalho Chehab	  do not hardcode entity IDs in an application.
13654f38fcaSMauro Carvalho Chehab
13754f38fcaSMauro Carvalho Chehab    *  -  char
13854f38fcaSMauro Carvalho Chehab       -  ``name``\ [64]
13954f38fcaSMauro Carvalho Chehab       -  Entity name as an UTF-8 NULL-terminated string. This name must be unique
14054f38fcaSMauro Carvalho Chehab          within the media topology.
14154f38fcaSMauro Carvalho Chehab
14254f38fcaSMauro Carvalho Chehab    *  -  __u32
14354f38fcaSMauro Carvalho Chehab       -  ``function``
14454f38fcaSMauro Carvalho Chehab       -  Entity main function, see :ref:`media-entity-functions` for details.
14554f38fcaSMauro Carvalho Chehab
14654f38fcaSMauro Carvalho Chehab    *  -  __u32
14754f38fcaSMauro Carvalho Chehab       -  ``flags``
14854f38fcaSMauro Carvalho Chehab       -  Entity flags, see :ref:`media-entity-flag` for details.
14954f38fcaSMauro Carvalho Chehab	  Only valid if ``MEDIA_V2_ENTITY_HAS_FLAGS(media_version)``
15054f38fcaSMauro Carvalho Chehab	  returns true. The ``media_version`` is defined in struct
15154f38fcaSMauro Carvalho Chehab	  :c:type:`media_device_info` and can be retrieved using
15254f38fcaSMauro Carvalho Chehab	  :ref:`MEDIA_IOC_DEVICE_INFO`.
15354f38fcaSMauro Carvalho Chehab
15454f38fcaSMauro Carvalho Chehab    *  -  __u32
15554f38fcaSMauro Carvalho Chehab       -  ``reserved``\ [5]
15654f38fcaSMauro Carvalho Chehab       -  Reserved for future extensions. Drivers and applications must set
15754f38fcaSMauro Carvalho Chehab	  this array to zero.
15854f38fcaSMauro Carvalho Chehab
159*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.5cm}|
16054f38fcaSMauro Carvalho Chehab
16154f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_interface
16254f38fcaSMauro Carvalho Chehab
16354f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_interface
16454f38fcaSMauro Carvalho Chehab    :header-rows:  0
16554f38fcaSMauro Carvalho Chehab    :stub-columns: 0
16654f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
16754f38fcaSMauro Carvalho Chehab
16854f38fcaSMauro Carvalho Chehab    *  -  __u32
16954f38fcaSMauro Carvalho Chehab       -  ``id``
17054f38fcaSMauro Carvalho Chehab       -  Unique ID for the interface. Do not expect that the ID will
17154f38fcaSMauro Carvalho Chehab	  always be the same for each instance of the device. In other words,
17254f38fcaSMauro Carvalho Chehab	  do not hardcode interface IDs in an application.
17354f38fcaSMauro Carvalho Chehab
17454f38fcaSMauro Carvalho Chehab    *  -  __u32
17554f38fcaSMauro Carvalho Chehab       -  ``intf_type``
17654f38fcaSMauro Carvalho Chehab       -  Interface type, see :ref:`media-intf-type` for details.
17754f38fcaSMauro Carvalho Chehab
17854f38fcaSMauro Carvalho Chehab    *  -  __u32
17954f38fcaSMauro Carvalho Chehab       -  ``flags``
18054f38fcaSMauro Carvalho Chehab       -  Interface flags. Currently unused.
18154f38fcaSMauro Carvalho Chehab
18254f38fcaSMauro Carvalho Chehab    *  -  __u32
18354f38fcaSMauro Carvalho Chehab       -  ``reserved``\ [9]
18454f38fcaSMauro Carvalho Chehab       -  Reserved for future extensions. Drivers and applications must set
18554f38fcaSMauro Carvalho Chehab	  this array to zero.
18654f38fcaSMauro Carvalho Chehab
18754f38fcaSMauro Carvalho Chehab    *  -  struct media_v2_intf_devnode
18854f38fcaSMauro Carvalho Chehab       -  ``devnode``
18954f38fcaSMauro Carvalho Chehab       -  Used only for device node interfaces. See
19054f38fcaSMauro Carvalho Chehab	  :c:type:`media_v2_intf_devnode` for details.
19154f38fcaSMauro Carvalho Chehab
192*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.5cm}|
19354f38fcaSMauro Carvalho Chehab
19454f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_intf_devnode
19554f38fcaSMauro Carvalho Chehab
19654f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_intf_devnode
19754f38fcaSMauro Carvalho Chehab    :header-rows:  0
19854f38fcaSMauro Carvalho Chehab    :stub-columns: 0
19954f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
20054f38fcaSMauro Carvalho Chehab
20154f38fcaSMauro Carvalho Chehab    *  -  __u32
20254f38fcaSMauro Carvalho Chehab       -  ``major``
20354f38fcaSMauro Carvalho Chehab       -  Device node major number.
20454f38fcaSMauro Carvalho Chehab
20554f38fcaSMauro Carvalho Chehab    *  -  __u32
20654f38fcaSMauro Carvalho Chehab       -  ``minor``
20754f38fcaSMauro Carvalho Chehab       -  Device node minor number.
20854f38fcaSMauro Carvalho Chehab
209*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.5cm}|
21054f38fcaSMauro Carvalho Chehab
21154f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_pad
21254f38fcaSMauro Carvalho Chehab
21354f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_pad
21454f38fcaSMauro Carvalho Chehab    :header-rows:  0
21554f38fcaSMauro Carvalho Chehab    :stub-columns: 0
21654f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
21754f38fcaSMauro Carvalho Chehab
21854f38fcaSMauro Carvalho Chehab    *  -  __u32
21954f38fcaSMauro Carvalho Chehab       -  ``id``
22054f38fcaSMauro Carvalho Chehab       -  Unique ID for the pad. Do not expect that the ID will
22154f38fcaSMauro Carvalho Chehab	  always be the same for each instance of the device. In other words,
22254f38fcaSMauro Carvalho Chehab	  do not hardcode pad IDs in an application.
22354f38fcaSMauro Carvalho Chehab
22454f38fcaSMauro Carvalho Chehab    *  -  __u32
22554f38fcaSMauro Carvalho Chehab       -  ``entity_id``
22654f38fcaSMauro Carvalho Chehab       -  Unique ID for the entity where this pad belongs.
22754f38fcaSMauro Carvalho Chehab
22854f38fcaSMauro Carvalho Chehab    *  -  __u32
22954f38fcaSMauro Carvalho Chehab       -  ``flags``
23054f38fcaSMauro Carvalho Chehab       -  Pad flags, see :ref:`media-pad-flag` for more details.
23154f38fcaSMauro Carvalho Chehab
23254f38fcaSMauro Carvalho Chehab    *  -  __u32
23354f38fcaSMauro Carvalho Chehab       -  ``index``
23454f38fcaSMauro Carvalho Chehab       -  Pad index, starts at 0. Only valid if ``MEDIA_V2_PAD_HAS_INDEX(media_version)``
23554f38fcaSMauro Carvalho Chehab	  returns true. The ``media_version`` is defined in struct
23654f38fcaSMauro Carvalho Chehab	  :c:type:`media_device_info` and can be retrieved using
23754f38fcaSMauro Carvalho Chehab	  :ref:`MEDIA_IOC_DEVICE_INFO`.
23854f38fcaSMauro Carvalho Chehab
23954f38fcaSMauro Carvalho Chehab    *  -  __u32
24054f38fcaSMauro Carvalho Chehab       -  ``reserved``\ [4]
24154f38fcaSMauro Carvalho Chehab       -  Reserved for future extensions. Drivers and applications must set
24254f38fcaSMauro Carvalho Chehab	  this array to zero.
24354f38fcaSMauro Carvalho Chehab
244*fea13a69SMauro Carvalho Chehab.. tabularcolumns:: |p{1.6cm}|p{3.2cm}|p{12.5cm}|
24554f38fcaSMauro Carvalho Chehab
24654f38fcaSMauro Carvalho Chehab.. c:type:: media_v2_link
24754f38fcaSMauro Carvalho Chehab
24854f38fcaSMauro Carvalho Chehab.. flat-table:: struct media_v2_link
24954f38fcaSMauro Carvalho Chehab    :header-rows:  0
25054f38fcaSMauro Carvalho Chehab    :stub-columns: 0
25154f38fcaSMauro Carvalho Chehab    :widths: 1 2 8
25254f38fcaSMauro Carvalho Chehab
25354f38fcaSMauro Carvalho Chehab    *  -  __u32
25454f38fcaSMauro Carvalho Chehab       -  ``id``
25554f38fcaSMauro Carvalho Chehab       -  Unique ID for the link. Do not expect that the ID will
25654f38fcaSMauro Carvalho Chehab	  always be the same for each instance of the device. In other words,
25754f38fcaSMauro Carvalho Chehab	  do not hardcode link IDs in an application.
25854f38fcaSMauro Carvalho Chehab
25954f38fcaSMauro Carvalho Chehab    *  -  __u32
26054f38fcaSMauro Carvalho Chehab       -  ``source_id``
26154f38fcaSMauro Carvalho Chehab       -  On pad to pad links: unique ID for the source pad.
26254f38fcaSMauro Carvalho Chehab
26354f38fcaSMauro Carvalho Chehab	  On interface to entity links: unique ID for the interface.
26454f38fcaSMauro Carvalho Chehab
26554f38fcaSMauro Carvalho Chehab    *  -  __u32
26654f38fcaSMauro Carvalho Chehab       -  ``sink_id``
26754f38fcaSMauro Carvalho Chehab       -  On pad to pad links: unique ID for the sink pad.
26854f38fcaSMauro Carvalho Chehab
26954f38fcaSMauro Carvalho Chehab	  On interface to entity links: unique ID for the entity.
27054f38fcaSMauro Carvalho Chehab
27154f38fcaSMauro Carvalho Chehab    *  -  __u32
27254f38fcaSMauro Carvalho Chehab       -  ``flags``
27354f38fcaSMauro Carvalho Chehab       -  Link flags, see :ref:`media-link-flag` for more details.
27454f38fcaSMauro Carvalho Chehab
27554f38fcaSMauro Carvalho Chehab    *  -  __u32
27654f38fcaSMauro Carvalho Chehab       -  ``reserved``\ [6]
27754f38fcaSMauro Carvalho Chehab       -  Reserved for future extensions. Drivers and applications must set
27854f38fcaSMauro Carvalho Chehab	  this array to zero.
27954f38fcaSMauro Carvalho Chehab
28054f38fcaSMauro Carvalho ChehabReturn Value
28154f38fcaSMauro Carvalho Chehab============
28254f38fcaSMauro Carvalho Chehab
28354f38fcaSMauro Carvalho ChehabOn success 0 is returned, on error -1 and the ``errno`` variable is set
28454f38fcaSMauro Carvalho Chehabappropriately. The generic error codes are described at the
28554f38fcaSMauro Carvalho Chehab:ref:`Generic Error Codes <gen-errors>` chapter.
28654f38fcaSMauro Carvalho Chehab
28754f38fcaSMauro Carvalho ChehabENOSPC
28854f38fcaSMauro Carvalho Chehab    This is returned when either one or more of the num_entities,
28954f38fcaSMauro Carvalho Chehab    num_interfaces, num_links or num_pads are non-zero and are
29054f38fcaSMauro Carvalho Chehab    smaller than the actual number of elements inside the graph. This
29154f38fcaSMauro Carvalho Chehab    may happen if the ``topology_version`` changed when compared to the
29254f38fcaSMauro Carvalho Chehab    last time this ioctl was called. Userspace should usually free the
29354f38fcaSMauro Carvalho Chehab    area for the pointers, zero the struct elements and call this ioctl
29454f38fcaSMauro Carvalho Chehab    again.
295