1ea73eda5SJacopo Mondi.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2ea73eda5SJacopo Mondi.. c:namespace:: V4L
3ea73eda5SJacopo Mondi
4ea73eda5SJacopo Mondi.. _VIDIOC_SUBDEV_G_ROUTING:
5ea73eda5SJacopo Mondi
6ea73eda5SJacopo Mondi******************************************************
7ea73eda5SJacopo Mondiioctl VIDIOC_SUBDEV_G_ROUTING, VIDIOC_SUBDEV_S_ROUTING
8ea73eda5SJacopo Mondi******************************************************
9ea73eda5SJacopo Mondi
10ea73eda5SJacopo MondiName
11ea73eda5SJacopo Mondi====
12ea73eda5SJacopo Mondi
13ea73eda5SJacopo MondiVIDIOC_SUBDEV_G_ROUTING - VIDIOC_SUBDEV_S_ROUTING - Get or set routing between streams of media pads in a media entity.
14ea73eda5SJacopo Mondi
15ea73eda5SJacopo Mondi
16ea73eda5SJacopo MondiSynopsis
17ea73eda5SJacopo Mondi========
18ea73eda5SJacopo Mondi
19ea73eda5SJacopo Mondi.. c:macro:: VIDIOC_SUBDEV_G_ROUTING
20ea73eda5SJacopo Mondi
21ea73eda5SJacopo Mondi``int ioctl(int fd, VIDIOC_SUBDEV_G_ROUTING, struct v4l2_subdev_routing *argp)``
22ea73eda5SJacopo Mondi
23ea73eda5SJacopo Mondi.. c:macro:: VIDIOC_SUBDEV_S_ROUTING
24ea73eda5SJacopo Mondi
25ea73eda5SJacopo Mondi``int ioctl(int fd, VIDIOC_SUBDEV_S_ROUTING, struct v4l2_subdev_routing *argp)``
26ea73eda5SJacopo Mondi
27ea73eda5SJacopo MondiArguments
28ea73eda5SJacopo Mondi=========
29ea73eda5SJacopo Mondi
30ea73eda5SJacopo Mondi``fd``
31ea73eda5SJacopo Mondi    File descriptor returned by :ref:`open() <func-open>`.
32ea73eda5SJacopo Mondi
33ea73eda5SJacopo Mondi``argp``
34ea73eda5SJacopo Mondi    Pointer to struct :c:type:`v4l2_subdev_routing`.
35ea73eda5SJacopo Mondi
36ea73eda5SJacopo Mondi
37ea73eda5SJacopo MondiDescription
38ea73eda5SJacopo Mondi===========
39ea73eda5SJacopo Mondi
40ea73eda5SJacopo MondiThese ioctls are used to get and set the routing in a media entity.
41ea73eda5SJacopo MondiThe routing configuration determines the flows of data inside an entity.
42ea73eda5SJacopo Mondi
43ea73eda5SJacopo MondiDrivers report their current routing tables using the
44ea73eda5SJacopo Mondi``VIDIOC_SUBDEV_G_ROUTING`` ioctl and application may enable or disable routes
45ea73eda5SJacopo Mondiwith the ``VIDIOC_SUBDEV_S_ROUTING`` ioctl, by adding or removing routes and
46ea73eda5SJacopo Mondisetting or clearing flags of the  ``flags`` field of a
47ea73eda5SJacopo Mondistruct :c:type:`v4l2_subdev_route`.
48ea73eda5SJacopo Mondi
49ea73eda5SJacopo MondiAll stream configurations are reset when ``VIDIOC_SUBDEV_S_ROUTING`` is called. This
50ea73eda5SJacopo Mondimeans that the userspace must reconfigure all streams after calling the ioctl
51ea73eda5SJacopo Mondiwith e.g. ``VIDIOC_SUBDEV_S_FMT``.
52ea73eda5SJacopo Mondi
53ea73eda5SJacopo MondiOnly subdevices which have both sink and source pads can support routing.
54ea73eda5SJacopo Mondi
55ea73eda5SJacopo MondiWhen inspecting routes through ``VIDIOC_SUBDEV_G_ROUTING`` and the application
56ea73eda5SJacopo Mondiprovided ``num_routes`` is not big enough to contain all the available routes
57ea73eda5SJacopo Mondithe subdevice exposes, drivers return the ENOSPC error code and adjust the
58ea73eda5SJacopo Mondivalue of the ``num_routes`` field. Application should then reserve enough memory
59ea73eda5SJacopo Mondifor all the route entries and call ``VIDIOC_SUBDEV_G_ROUTING`` again.
60ea73eda5SJacopo Mondi
61*997a6b01STomi ValkeinenOn a successful ``VIDIOC_SUBDEV_G_ROUTING`` call the driver updates the
62*997a6b01STomi Valkeinen``num_routes`` field to reflect the actual number of routes returned.
63*997a6b01STomi Valkeinen
64ea73eda5SJacopo Mondi.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
65ea73eda5SJacopo Mondi
66ea73eda5SJacopo Mondi.. c:type:: v4l2_subdev_routing
67ea73eda5SJacopo Mondi
68ea73eda5SJacopo Mondi.. flat-table:: struct v4l2_subdev_routing
69ea73eda5SJacopo Mondi    :header-rows:  0
70ea73eda5SJacopo Mondi    :stub-columns: 0
71ea73eda5SJacopo Mondi    :widths:       1 1 2
72ea73eda5SJacopo Mondi
73ea73eda5SJacopo Mondi    * - __u32
74ea73eda5SJacopo Mondi      - ``which``
75ea73eda5SJacopo Mondi      - Format to modified, from enum
76ea73eda5SJacopo Mondi        :ref:`v4l2_subdev_format_whence <v4l2-subdev-format-whence>`.
77ea73eda5SJacopo Mondi    * - struct :c:type:`v4l2_subdev_route`
78ea73eda5SJacopo Mondi      - ``routes[]``
79ea73eda5SJacopo Mondi      - Array of struct :c:type:`v4l2_subdev_route` entries
80ea73eda5SJacopo Mondi    * - __u32
81ea73eda5SJacopo Mondi      - ``num_routes``
82ea73eda5SJacopo Mondi      - Number of entries of the routes array
83ea73eda5SJacopo Mondi    * - __u32
84ea73eda5SJacopo Mondi      - ``reserved``\ [5]
85ea73eda5SJacopo Mondi      - Reserved for future extensions. Applications and drivers must set
86ea73eda5SJacopo Mondi	the array to zero.
87ea73eda5SJacopo Mondi
88ea73eda5SJacopo Mondi.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
89ea73eda5SJacopo Mondi
90ea73eda5SJacopo Mondi.. c:type:: v4l2_subdev_route
91ea73eda5SJacopo Mondi
92ea73eda5SJacopo Mondi.. flat-table:: struct v4l2_subdev_route
93ea73eda5SJacopo Mondi    :header-rows:  0
94ea73eda5SJacopo Mondi    :stub-columns: 0
95ea73eda5SJacopo Mondi    :widths:       1 1 2
96ea73eda5SJacopo Mondi
97ea73eda5SJacopo Mondi    * - __u32
98ea73eda5SJacopo Mondi      - ``sink_pad``
99ea73eda5SJacopo Mondi      - Sink pad number.
100ea73eda5SJacopo Mondi    * - __u32
101ea73eda5SJacopo Mondi      - ``sink_stream``
102ea73eda5SJacopo Mondi      - Sink pad stream number.
103ea73eda5SJacopo Mondi    * - __u32
104ea73eda5SJacopo Mondi      - ``source_pad``
105ea73eda5SJacopo Mondi      - Source pad number.
106ea73eda5SJacopo Mondi    * - __u32
107ea73eda5SJacopo Mondi      - ``source_stream``
108ea73eda5SJacopo Mondi      - Source pad stream number.
109ea73eda5SJacopo Mondi    * - __u32
110ea73eda5SJacopo Mondi      - ``flags``
111ea73eda5SJacopo Mondi      - Route enable/disable flags
112ea73eda5SJacopo Mondi	:ref:`v4l2_subdev_routing_flags <v4l2-subdev-routing-flags>`.
113ea73eda5SJacopo Mondi    * - __u32
114ea73eda5SJacopo Mondi      - ``reserved``\ [5]
115ea73eda5SJacopo Mondi      - Reserved for future extensions. Applications and drivers must set
116ea73eda5SJacopo Mondi	the array to zero.
117ea73eda5SJacopo Mondi
118ea73eda5SJacopo Mondi.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
119ea73eda5SJacopo Mondi
120ea73eda5SJacopo Mondi.. _v4l2-subdev-routing-flags:
121ea73eda5SJacopo Mondi
122ea73eda5SJacopo Mondi.. flat-table:: enum v4l2_subdev_routing_flags
123ea73eda5SJacopo Mondi    :header-rows:  0
124ea73eda5SJacopo Mondi    :stub-columns: 0
125ea73eda5SJacopo Mondi    :widths:       3 1 4
126ea73eda5SJacopo Mondi
127ea73eda5SJacopo Mondi    * - V4L2_SUBDEV_ROUTE_FL_ACTIVE
128950e9a29SSakari Ailus      - 0x0001
129ea73eda5SJacopo Mondi      - The route is enabled. Set by applications.
130ea73eda5SJacopo Mondi
131ea73eda5SJacopo MondiReturn Value
132ea73eda5SJacopo Mondi============
133ea73eda5SJacopo Mondi
134ea73eda5SJacopo MondiOn success 0 is returned, on error -1 and the ``errno`` variable is set
135ea73eda5SJacopo Mondiappropriately. The generic error codes are described at the
136ea73eda5SJacopo Mondi:ref:`Generic Error Codes <gen-errors>` chapter.
137ea73eda5SJacopo Mondi
138ea73eda5SJacopo MondiENOSPC
139ea73eda5SJacopo Mondi   The application provided ``num_routes`` is not big enough to contain
140ea73eda5SJacopo Mondi   all the available routes the subdevice exposes.
141ea73eda5SJacopo Mondi
142ea73eda5SJacopo MondiEINVAL
143ea73eda5SJacopo Mondi   The sink or source pad identifiers reference a non-existing pad, or reference
144*997a6b01STomi Valkeinen   pads of different types (ie. the sink_pad identifiers refers to a source pad).
145ea73eda5SJacopo Mondi
146ea73eda5SJacopo MondiE2BIG
147ea73eda5SJacopo Mondi   The application provided ``num_routes`` for ``VIDIOC_SUBDEV_S_ROUTING`` is
148ea73eda5SJacopo Mondi   larger than the number of routes the driver can handle.
149