diff options
author | Markus Heiser <markus.heiser@darmarIT.de> | 2016-07-08 21:55:42 +0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-08 23:38:55 +0300 |
commit | e2460b1d579a6ea4f90cf2915da87b16b59e0082 (patch) | |
tree | 383cd21dd61326dfef365523fef358e3e3300604 /Documentation/media/uapi/cec/cec-ioc-g-mode.rst | |
parent | 4606ce43929a0a13443d691f53928ac58b002742 (diff) | |
download | linux-e2460b1d579a6ea4f90cf2915da87b16b59e0082.tar.xz |
[media] doc-rst: linux_tv CEC part, DocBook to reST migration
This is the reST migration of media's CEC part. The migration is based
on media_tree's cec branch:
https://git.linuxtv.org/media_tree.git
c7169ad * cec media_tree/cec [media] DocBook/media: add CEC documentation
Signed-off-by: Markus Heiser <markus.heiser@darmarIT.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'Documentation/media/uapi/cec/cec-ioc-g-mode.rst')
-rw-r--r-- | Documentation/media/uapi/cec/cec-ioc-g-mode.rst | 311 |
1 files changed, 311 insertions, 0 deletions
diff --git a/Documentation/media/uapi/cec/cec-ioc-g-mode.rst b/Documentation/media/uapi/cec/cec-ioc-g-mode.rst new file mode 100644 index 000000000000..f38c28755d8f --- /dev/null +++ b/Documentation/media/uapi/cec/cec-ioc-g-mode.rst @@ -0,0 +1,311 @@ +.. -*- coding: utf-8; mode: rst -*- + +.. _cec-ioc-g-mode: + +**************************** +ioctl CEC_G_MODE, CEC_S_MODE +**************************** + +*man CEC_G_MODE(2)* + +CEC_S_MODE +Get or set exclusive use of the CEC adapter + + +Synopsis +======== + +.. c:function:: int ioctl( int fd, int request, __u32 *argp ) + +Arguments +========= + +``fd`` + File descriptor returned by :ref:`open() <cec-func-open>`. + +``request`` + CEC_G_MODE, CEC_S_MODE + +``argp`` + + +Description +=========== + +Note: this documents the proposed CEC API. This API is not yet finalized +and is currently only available as a staging kernel module. + +By default any filehandle can use +:ref:`CEC_TRANSMIT <cec-ioc-receive>` and +:ref:`CEC_RECEIVE <cec-ioc-receive>`, but in order to prevent +applications from stepping on each others toes it must be possible to +obtain exclusive access to the CEC adapter. This ioctl sets the +filehandle to initiator and/or follower mode which can be exclusive +depending on the chosen mode. The initiator is the filehandle that is +used to initiate messages, i.e. it commands other CEC devices. The +follower is the filehandle that receives messages sent to the CEC +adapter and processes them. The same filehandle can be both initiator +and follower, or this role can be taken by two different filehandles. + +When a CEC message is received, then the CEC framework will decide how +it will be processed. If the message is a reply to an earlier +transmitted message, then the reply is sent back to the filehandle that +is waiting for it. In addition the CEC framework will process it. + +If the message is not a reply, then the CEC framework will process it +first. If there is no follower, then the message is just discarded and a +feature abort is sent back to the initiator if the framework couldn't +process it. If there is a follower, then the message is passed on to the +follower who will use :ref:`CEC_RECEIVE <cec-ioc-receive>` to dequeue +the new message. The framework expects the follower to make the right +decisions. + +The CEC framework will process core messages unless requested otherwise +by the follower. The follower can enable the passthrough mode. In that +case, the CEC framework will pass on most core messages without +processing them and the follower will have to implement those messages. +There are some messages that the core will always process, regardless of +the passthrough mode. See :ref:`cec-core-processing` for details. + +If there is no initiator, then any CEC filehandle can use +:ref:`CEC_TRANSMIT <cec-ioc-receive>`. If there is an exclusive +initiator then only that initiator can call +:ref:`CEC_TRANSMIT <cec-ioc-receive>`. The follower can of course +always call :ref:`CEC_TRANSMIT <cec-ioc-receive>`. + +Available initiator modes are: + + +.. _cec-mode-initiator: + +.. flat-table:: Initiator Modes + :header-rows: 0 + :stub-columns: 0 + :widths: 3 1 4 + + + - .. row 1 + + - ``CEC_MODE_NO_INITIATOR`` + + - 0x0 + + - This is not an initiator, i.e. it cannot transmit CEC messages or + make any other changes to the CEC adapter. + + - .. row 2 + + - ``CEC_MODE_INITIATOR`` + + - 0x1 + + - This is an initiator (the default when the device is opened) and + it can transmit CEC messages and make changes to the CEC adapter, + unless there is an exclusive initiator. + + - .. row 3 + + - ``CEC_MODE_EXCL_INITIATOR`` + + - 0x2 + + - This is an exclusive initiator and this file descriptor is the + only one that can transmit CEC messages and make changes to the + CEC adapter. If someone else is already the exclusive initiator + then an attempt to become one will return the EBUSY error code + error. + + +Available follower modes are: + + +.. _cec-mode-follower: + +.. flat-table:: Follower Modes + :header-rows: 0 + :stub-columns: 0 + :widths: 3 1 4 + + + - .. row 1 + + - ``CEC_MODE_NO_FOLLOWER`` + + - 0x00 + + - This is not a follower (the default when the device is opened). + + - .. row 2 + + - ``CEC_MODE_FOLLOWER`` + + - 0x10 + + - This is a follower and it will receive CEC messages unless there + is an exclusive follower. You cannot become a follower if + ``CEC_CAP_TRANSMIT`` is not set or if ``CEC_MODE_NO_INITIATOR`` + was specified, EINVAL error code is returned in that case. + + - .. row 3 + + - ``CEC_MODE_EXCL_FOLLOWER`` + + - 0x20 + + - This is an exclusive follower and only this file descriptor will + receive CEC messages for processing. If someone else is already + the exclusive follower then an attempt to become one will return + the EBUSY error code error. You cannot become a follower if + ``CEC_CAP_TRANSMIT`` is not set or if ``CEC_MODE_NO_INITIATOR`` + was specified, EINVAL error code is returned in that case. + + - .. row 4 + + - ``CEC_MODE_EXCL_FOLLOWER_PASSTHRU`` + + - 0x30 + + - This is an exclusive follower and only this file descriptor will + receive CEC messages for processing. In addition it will put the + CEC device into passthrough mode, allowing the exclusive follower + to handle most core messages instead of relying on the CEC + framework for that. If someone else is already the exclusive + follower then an attempt to become one will return the EBUSY error + code error. You cannot become a follower if ``CEC_CAP_TRANSMIT`` + is not set or if ``CEC_MODE_NO_INITIATOR`` was specified, EINVAL + error code is returned in that case. + + - .. row 5 + + - ``CEC_MODE_MONITOR`` + + - 0xe0 + + - Put the file descriptor into monitor mode. Can only be used in + combination with ``CEC_MODE_NO_INITIATOR``, otherwise EINVAL error + code will be returned. In monitor mode all messages this CEC + device transmits and all messages it receives (both broadcast + messages and directed messages for one its logical addresses) will + be reported. This is very useful for debugging. This is only + allowed if the process has the ``CAP_NET_ADMIN`` capability. If + that is not set, then EPERM error code is returned. + + - .. row 6 + + - ``CEC_MODE_MONITOR_ALL`` + + - 0xf0 + + - Put the file descriptor into 'monitor all' mode. Can only be used + in combination with ``CEC_MODE_NO_INITIATOR``, otherwise EINVAL + error code will be returned. In 'monitor all' mode all messages + this CEC device transmits and all messages it receives, including + directed messages for other CEC devices will be reported. This is + very useful for debugging, but not all devices support this. This + mode requires that the ``CEC_CAP_MONITOR_ALL`` capability is set, + otherwise EINVAL error code is returned. This is only allowed if + the process has the ``CAP_NET_ADMIN`` capability. If that is not + set, then EPERM error code is returned. + + +Core message processing details: + + +.. _cec-core-processing: + +.. flat-table:: Core Message Processing + :header-rows: 0 + :stub-columns: 0 + + + - .. row 1 + + - ``CEC_MSG_GET_CEC_VERSION`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will return the CEC version that was + set with + :ref:`CEC_ADAP_S_LOG_ADDRS <cec-ioc-adap-g-log-addrs>`. + + - .. row 2 + + - ``CEC_MSG_GIVE_DEVICE_VENDOR_ID`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will return the vendor ID that was + set with + :ref:`CEC_ADAP_S_LOG_ADDRS <cec-ioc-adap-g-log-addrs>`. + + - .. row 3 + + - ``CEC_MSG_ABORT`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will return a feature refused + message as per the specification. + + - .. row 4 + + - ``CEC_MSG_GIVE_PHYSICAL_ADDR`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will report the current physical + address. + + - .. row 5 + + - ``CEC_MSG_GIVE_OSD_NAME`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will report the current OSD name as + was set with + :ref:`CEC_ADAP_S_LOG_ADDRS <cec-ioc-adap-g-log-addrs>`. + + - .. row 6 + + - ``CEC_MSG_GIVE_FEATURES`` + + - When in passthrough mode this message has to be handled by + userspace, otherwise the core will report the current features as + was set with + :ref:`CEC_ADAP_S_LOG_ADDRS <cec-ioc-adap-g-log-addrs>` or + the message is ignore if the CEC version was older than 2.0. + + - .. row 7 + + - ``CEC_MSG_USER_CONTROL_PRESSED`` + + - If ``CEC_CAP_RC`` is set, then generate a remote control key + press. This message is always passed on to userspace. + + - .. row 8 + + - ``CEC_MSG_USER_CONTROL_RELEASED`` + + - If ``CEC_CAP_RC`` is set, then generate a remote control key + release. This message is always passed on to userspace. + + - .. row 9 + + - ``CEC_MSG_REPORT_PHYSICAL_ADDR`` + + - The CEC framework will make note of the reported physical address + and then just pass the message on to userspace. + + + +Return Value +============ + +On success 0 is returned, on error -1 and the ``errno`` variable is set +appropriately. The generic error codes are described at the +:ref:`Generic Error Codes <gen-errors>` chapter. + + +.. ------------------------------------------------------------------------------ +.. This file was automatically converted from DocBook-XML with the dbxml +.. library (https://github.com/return42/sphkerneldoc). The origin XML comes +.. from the linux kernel, refer to: +.. +.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook +.. ------------------------------------------------------------------------------ |