]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - Documentation/media/uapi/cec/cec-ioc-g-mode.rst
[media] cec rst: remove "This API is not yet finalized" notice
[mirror_ubuntu-zesty-kernel.git] / Documentation / media / uapi / cec / cec-ioc-g-mode.rst
CommitLineData
e2460b1d
MH
1.. -*- coding: utf-8; mode: rst -*-
2
21c62694
MH
3.. _CEC_MODE:
4.. _CEC_G_MODE:
5.. _CEC_S_MODE:
e2460b1d 6
1267c60a
HV
7********************************
8ioctls CEC_G_MODE and CEC_S_MODE
9********************************
e2460b1d 10
21c62694 11CEC_G_MODE, CEC_S_MODE - Get or set exclusive use of the CEC adapter
e2460b1d
MH
12
13Synopsis
14========
15
99547836
MCC
16.. c:function:: int ioctl( int fd, CEC_G_MODE, __u32 *argp )
17 :name: CEC_G_MODE
18
19.. c:function:: int ioctl( int fd, CEC_S_MODE, __u32 *argp )
20 :name: CEC_S_MODE
e2460b1d
MH
21
22Arguments
23=========
24
25``fd``
99547836 26 File descriptor returned by :c:func:`open() <cec-open>`.
e2460b1d
MH
27
28``argp``
99547836 29 Pointer to CEC mode.
e2460b1d
MH
30
31Description
32===========
33
1267c60a 34By default any filehandle can use :ref:`CEC_TRANSMIT`, but in order to prevent
e2460b1d
MH
35applications from stepping on each others toes it must be possible to
36obtain exclusive access to the CEC adapter. This ioctl sets the
37filehandle to initiator and/or follower mode which can be exclusive
38depending on the chosen mode. The initiator is the filehandle that is
39used to initiate messages, i.e. it commands other CEC devices. The
40follower is the filehandle that receives messages sent to the CEC
41adapter and processes them. The same filehandle can be both initiator
42and follower, or this role can be taken by two different filehandles.
43
44When a CEC message is received, then the CEC framework will decide how
45it will be processed. If the message is a reply to an earlier
46transmitted message, then the reply is sent back to the filehandle that
47is waiting for it. In addition the CEC framework will process it.
48
49If the message is not a reply, then the CEC framework will process it
50first. If there is no follower, then the message is just discarded and a
51feature abort is sent back to the initiator if the framework couldn't
52process it. If there is a follower, then the message is passed on to the
1267c60a 53follower who will use :ref:`ioctl CEC_RECEIVE <CEC_RECEIVE>` to dequeue
e2460b1d
MH
54the new message. The framework expects the follower to make the right
55decisions.
56
57The CEC framework will process core messages unless requested otherwise
58by the follower. The follower can enable the passthrough mode. In that
59case, the CEC framework will pass on most core messages without
60processing them and the follower will have to implement those messages.
61There are some messages that the core will always process, regardless of
62the passthrough mode. See :ref:`cec-core-processing` for details.
63
64If there is no initiator, then any CEC filehandle can use
1267c60a 65:ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`. If there is an exclusive
e2460b1d 66initiator then only that initiator can call
21c62694 67:ref:`CEC_TRANSMIT`. The follower can of course
1267c60a 68always call :ref:`ioctl CEC_TRANSMIT <CEC_TRANSMIT>`.
e2460b1d
MH
69
70Available initiator modes are:
71
fa92b04d 72.. tabularcolumns:: |p{5.6cm}|p{0.9cm}|p{11.0cm}|
e2460b1d 73
96f69e0e 74.. _cec-mode-initiator_e:
e2460b1d
MH
75
76.. flat-table:: Initiator Modes
77 :header-rows: 0
78 :stub-columns: 0
b2a58436 79 :widths: 3 1 16
e2460b1d 80
77edf603
HV
81 * .. _`CEC-MODE-NO-INITIATOR`:
82
83 - ``CEC_MODE_NO_INITIATOR``
84 - 0x0
85 - This is not an initiator, i.e. it cannot transmit CEC messages or
86 make any other changes to the CEC adapter.
87 * .. _`CEC-MODE-INITIATOR`:
88
89 - ``CEC_MODE_INITIATOR``
90 - 0x1
91 - This is an initiator (the default when the device is opened) and
92 it can transmit CEC messages and make changes to the CEC adapter,
93 unless there is an exclusive initiator.
94 * .. _`CEC-MODE-EXCL-INITIATOR`:
95
96 - ``CEC_MODE_EXCL_INITIATOR``
97 - 0x2
98 - This is an exclusive initiator and this file descriptor is the
99 only one that can transmit CEC messages and make changes to the
100 CEC adapter. If someone else is already the exclusive initiator
101 then an attempt to become one will return the ``EBUSY`` error code
102 error.
e2460b1d
MH
103
104
105Available follower modes are:
106
fa92b04d 107.. tabularcolumns:: |p{6.6cm}|p{0.9cm}|p{10.0cm}|
e2460b1d 108
96f69e0e 109.. _cec-mode-follower_e:
e2460b1d
MH
110
111.. flat-table:: Follower Modes
112 :header-rows: 0
113 :stub-columns: 0
b2a58436 114 :widths: 3 1 16
e2460b1d 115
77edf603
HV
116 * .. _`CEC-MODE-NO-FOLLOWER`:
117
118 - ``CEC_MODE_NO_FOLLOWER``
119 - 0x00
120 - This is not a follower (the default when the device is opened).
121 * .. _`CEC-MODE-FOLLOWER`:
122
123 - ``CEC_MODE_FOLLOWER``
124 - 0x10
125 - This is a follower and it will receive CEC messages unless there
126 is an exclusive follower. You cannot become a follower if
127 :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
128 was specified, the ``EINVAL`` error code is returned in that case.
129 * .. _`CEC-MODE-EXCL-FOLLOWER`:
130
131 - ``CEC_MODE_EXCL_FOLLOWER``
132 - 0x20
133 - This is an exclusive follower and only this file descriptor will
134 receive CEC messages for processing. If someone else is already
135 the exclusive follower then an attempt to become one will return
136 the ``EBUSY`` error code. You cannot become a follower if
137 :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>` is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`
138 was specified, the ``EINVAL`` error code is returned in that case.
139 * .. _`CEC-MODE-EXCL-FOLLOWER-PASSTHRU`:
140
141 - ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU``
142 - 0x30
143 - This is an exclusive follower and only this file descriptor will
144 receive CEC messages for processing. In addition it will put the
145 CEC device into passthrough mode, allowing the exclusive follower
146 to handle most core messages instead of relying on the CEC
147 framework for that. If someone else is already the exclusive
148 follower then an attempt to become one will return the ``EBUSY`` error
149 code. You cannot become a follower if :ref:`CEC_CAP_TRANSMIT <CEC-CAP-TRANSMIT>`
150 is not set or if :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>` was specified,
151 the ``EINVAL`` error code is returned in that case.
152 * .. _`CEC-MODE-MONITOR`:
153
154 - ``CEC_MODE_MONITOR``
155 - 0xe0
156 - Put the file descriptor into monitor mode. Can only be used in
157 combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise EINVAL error
158 code will be returned. In monitor mode all messages this CEC
159 device transmits and all messages it receives (both broadcast
160 messages and directed messages for one its logical addresses) will
161 be reported. This is very useful for debugging. This is only
162 allowed if the process has the ``CAP_NET_ADMIN`` capability. If
163 that is not set, then the ``EPERM`` error code is returned.
164 * .. _`CEC-MODE-MONITOR-ALL`:
165
166 - ``CEC_MODE_MONITOR_ALL``
167 - 0xf0
168 - Put the file descriptor into 'monitor all' mode. Can only be used
169 in combination with :ref:`CEC_MODE_NO_INITIATOR <CEC-MODE-NO-INITIATOR>`, otherwise
170 the ``EINVAL`` error code will be returned. In 'monitor all' mode all messages
171 this CEC device transmits and all messages it receives, including
172 directed messages for other CEC devices will be reported. This is
173 very useful for debugging, but not all devices support this. This
174 mode requires that the :ref:`CEC_CAP_MONITOR_ALL <CEC-CAP-MONITOR-ALL>` capability is set,
175 otherwise the ``EINVAL`` error code is returned. This is only allowed if
176 the process has the ``CAP_NET_ADMIN`` capability. If that is not
177 set, then the ``EPERM`` error code is returned.
e2460b1d
MH
178
179
180Core message processing details:
181
fa92b04d 182.. tabularcolumns:: |p{6.6cm}|p{10.9cm}|
e2460b1d
MH
183
184.. _cec-core-processing:
185
186.. flat-table:: Core Message Processing
187 :header-rows: 0
188 :stub-columns: 0
b2a58436 189 :widths: 1 8
e2460b1d 190
77edf603
HV
191 * .. _`CEC-MSG-GET-CEC-VERSION`:
192
193 - ``CEC_MSG_GET_CEC_VERSION``
194 - When in passthrough mode this message has to be handled by
195 userspace, otherwise the core will return the CEC version that was
196 set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
197 * .. _`CEC-MSG-GIVE-DEVICE-VENDOR-ID`:
198
199 - ``CEC_MSG_GIVE_DEVICE_VENDOR_ID``
200 - When in passthrough mode this message has to be handled by
201 userspace, otherwise the core will return the vendor ID that was
202 set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
203 * .. _`CEC-MSG-ABORT`:
204
205 - ``CEC_MSG_ABORT``
206 - When in passthrough mode this message has to be handled by
207 userspace, otherwise the core will return a feature refused
208 message as per the specification.
209 * .. _`CEC-MSG-GIVE-PHYSICAL-ADDR`:
210
211 - ``CEC_MSG_GIVE_PHYSICAL_ADDR``
212 - When in passthrough mode this message has to be handled by
213 userspace, otherwise the core will report the current physical
214 address.
215 * .. _`CEC-MSG-GIVE-OSD-NAME`:
216
217 - ``CEC_MSG_GIVE_OSD_NAME``
218 - When in passthrough mode this message has to be handled by
219 userspace, otherwise the core will report the current OSD name as
220 was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`.
221 * .. _`CEC-MSG-GIVE-FEATURES`:
222
223 - ``CEC_MSG_GIVE_FEATURES``
224 - When in passthrough mode this message has to be handled by
225 userspace, otherwise the core will report the current features as
226 was set with :ref:`ioctl CEC_ADAP_S_LOG_ADDRS <CEC_ADAP_S_LOG_ADDRS>`
227 or the message is ignored if the CEC version was older than 2.0.
228 * .. _`CEC-MSG-USER-CONTROL-PRESSED`:
229
230 - ``CEC_MSG_USER_CONTROL_PRESSED``
231 - If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
232 press. This message is always passed on to userspace.
233 * .. _`CEC-MSG-USER-CONTROL-RELEASED`:
234
235 - ``CEC_MSG_USER_CONTROL_RELEASED``
236 - If :ref:`CEC_CAP_RC <CEC-CAP-RC>` is set, then generate a remote control key
237 release. This message is always passed on to userspace.
238 * .. _`CEC-MSG-REPORT-PHYSICAL-ADDR`:
239
240 - ``CEC_MSG_REPORT_PHYSICAL_ADDR``
241 - The CEC framework will make note of the reported physical address
242 and then just pass the message on to userspace.
e2460b1d
MH
243
244
245
246Return Value
247============
248
249On success 0 is returned, on error -1 and the ``errno`` variable is set
250appropriately. The generic error codes are described at the
251:ref:`Generic Error Codes <gen-errors>` chapter.