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