sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget>/translations/zh_CN/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/zh_TW/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/it_IT/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/ja_JP/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/ko_KR/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/sp_SP/driver-api/surface_aggregator/clients/cdevmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev.rsthKubhsubstitution_definition)}(hW.. |ssam_cdev_request| replace:: :c:type:`struct ssam_cdev_request `h]h)}(h6:c:type:`struct ssam_cdev_request `h]hliteral)}(hhh]hstruct ssam_cdev_request}(hhhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoc*driver-api/surface_aggregator/clients/cdev refdomainhˌreftypetype refexplicitrefwarn reftargetssam_cdev_requestuh1hhhhKhhubah}(h]h ]h"]ssam_cdev_requestah$]h&]uh1hhhhKhhhhubh)}(hg.. |ssam_cdev_request_flags| replace:: :c:type:`enum ssam_cdev_request_flags `h]h)}(h@:c:type:`enum ssam_cdev_request_flags `h]h)}(hhh]henum ssam_cdev_request_flags}(hhhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnh݌ssam_cdev_request_flagsuh1hhhhKhhubah}(h]h ]h"]ssam_cdev_request_flagsah$]h&]uh1hhhhKhhhhubh)}(hR.. |ssam_cdev_event| replace:: :c:type:`struct ssam_cdev_event ` h]h)}(h2:c:type:`struct ssam_cdev_event `h]h)}(hjh]hstruct ssam_cdev_event}(hjhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnh݌ssam_cdev_eventuh1hhhhKhjubah}(h]h ]h"]ssam_cdev_eventah$]h&]uh1hhhhKhhhhubhsection)}(hhh](htitle)}(hUser-Space EC Interface (cdev)h]hUser-Space EC Interface (cdev)}(hjAhhhNhNubah}(h]h ]h"]h$]h&]refidid2uh1j?hj<hhhhhK ubh paragraph)}(hXwThe ``surface_aggregator_cdev`` module provides a misc-device for the SSAM controller to allow for a (more or less) direct connection from user-space to the SAM EC. It is intended to be used for development and debugging, and therefore should not be used or relied upon in any other way. Note that this module is not loaded automatically, but instead must be loaded manually.h](hThe }(hjShhhNhNubh)}(h``surface_aggregator_cdev``h]hsurface_aggregator_cdev}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjSubhXX module provides a misc-device for the SSAM controller to allow for a (more or less) direct connection from user-space to the SAM EC. It is intended to be used for development and debugging, and therefore should not be used or relied upon in any other way. Note that this module is not loaded automatically, but instead must be loaded manually.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhK hj<hhubjR)}(hXThe provided interface is accessible through the ``/dev/surface/aggregator`` device-file. All functionality of this interface is provided via IOCTLs. These IOCTLs and their respective input/output parameter structs are defined in ``include/uapi/linux/surface_aggregator/cdev.h``.h](h1The provided interface is accessible through the }(hjshhhNhNubh)}(h``/dev/surface/aggregator``h]h/dev/surface/aggregator}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsubh device-file. All functionality of this interface is provided via IOCTLs. These IOCTLs and their respective input/output parameter structs are defined in }(hjshhhNhNubh)}(h0``include/uapi/linux/surface_aggregator/cdev.h``h]h,include/uapi/linux/surface_aggregator/cdev.h}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsubh.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj<hhubjR)}(hA small python library and scripts for accessing this interface can be found at https://github.com/linux-surface/surface-aggregator-module/tree/master/scripts/ssam.h](hPA small python library and scripts for accessing this interface can be found at }(hjhhhNhNubh reference)}(hShttps://github.com/linux-surface/surface-aggregator-module/tree/master/scripts/ssamh]hShttps://github.com/linux-surface/surface-aggregator-module/tree/master/scripts/ssam}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj<hhubhtopic)}(h Contents h](j@)}(hContentsh]hContents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hjhhhKubh bullet_list)}(hhh]h list_item)}(hhh](jR)}(hhh]j)}(hhh]hUser-Space EC Interface (cdev)}(hjhhhNhNubah}(h]jPah ]h"]h$]h&]refiduser-space-ec-interface-cdevuh1jhjubah}(h]h ]h"]h$]h&]uh1jQhjubj)}(hhh](j)}(hhh]jR)}(hhh]j)}(hhh]hReceiving Events}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]refidreceiving-eventsuh1jhjubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](jR)}(hhh]j)}(hhh]hController IOCTLs}(hj)hhhNhNubah}(h]id4ah ]h"]h$]h&]refidcontroller-ioctlsuh1jhj&ubah}(h]h ]h"]h$]h&]uh1jQhj#ubj)}(hhh](j)}(hhh]jR)}(hhh]j)}(hhh]h)}(h``SSAM_CDEV_REQUEST``h]hSSAM_CDEV_REQUEST}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjHubah}(h]id5ah ]h"]h$]h&]refidssam-cdev-requestuh1jhjEubah}(h]h ]h"]h$]h&]uh1jQhjBubah}(h]h ]h"]h$]h&]uh1jhj?ubj)}(hhh]jR)}(hhh]j)}(hhh]h)}(h``SSAM_CDEV_NOTIF_REGISTER``h]hSSAM_CDEV_NOTIF_REGISTER}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjtubah}(h]id6ah ]h"]h$]h&]refidssam-cdev-notif-registeruh1jhjqubah}(h]h ]h"]h$]h&]uh1jQhjnubah}(h]h ]h"]h$]h&]uh1jhj?ubj)}(hhh]jR)}(hhh]j)}(hhh]h)}(h``SSAM_CDEV_NOTIF_UNREGISTER``h]hSSAM_CDEV_NOTIF_UNREGISTER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id7ah ]h"]h$]h&]refidssam-cdev-notif-unregisteruh1jhjubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1jhj?ubj)}(hhh]jR)}(hhh]j)}(hhh]h)}(h``SSAM_CDEV_EVENT_ENABLE``h]hSSAM_CDEV_EVENT_ENABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id8ah ]h"]h$]h&]refidssam-cdev-event-enableuh1jhjubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1jhj?ubj)}(hhh]jR)}(hhh]j)}(hhh]h)}(h``SSAM_CDEV_EVENT_DISABLE``h]hSSAM_CDEV_EVENT_DISABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id9ah ]h"]h$]h&]refidssam-cdev-event-disableuh1jhjubah}(h]h ]h"]h$]h&]uh1jQhjubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hhh]j)}(hhh]hStructures and Enums}(hj0hhhNhNubah}(h]id10ah ]h"]h$]h&]refidstructures-and-enumsuh1jhj-ubah}(h]h ]h"]h$]h&]uh1jQhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1jhhhKhj<hhubj;)}(hhh](j@)}(hReceiving Eventsh]hReceiving Events}(hjjhhhNhNubah}(h]h ]h"]h$]h&]jOjuh1j?hjghhhhhKubjR)}(hnEvents can be received by reading from the device-file. The are represented by the |ssam_cdev_event| datatype.h](hSEvents can be received by reading from the device-file. The are represented by the }(hjxhhhNhNubh)}(hjh]h)}(hjh]hstruct ssam_cdev_event}(hjhhhNhNubah}(h]h ](hhj"eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej/ refexplicitrefwarn reftargetj2uh1hhhhKhjxhhubh datatype.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhjghhubjR)}(hXBefore events are available to be read, however, the desired notifiers must be registered via the ``SSAM_CDEV_NOTIF_REGISTER`` IOCTL. Notifiers are, in essence, callbacks, called when the EC sends an event. They are, in this interface, associated with a specific target category and device-file-instance. They forward any event of this category to the buffer of the corresponding instance, from which it can then be read.h](hbBefore events are available to be read, however, the desired notifiers must be registered via the }(hjhhhNhNubh)}(h``SSAM_CDEV_NOTIF_REGISTER``h]hSSAM_CDEV_NOTIF_REGISTER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhX' IOCTL. Notifiers are, in essence, callbacks, called when the EC sends an event. They are, in this interface, associated with a specific target category and device-file-instance. They forward any event of this category to the buffer of the corresponding instance, from which it can then be read.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhK"hjghhubjR)}(hXNotifiers themselves do not enable events on the EC. Thus, it may additionally be necessary to enable events via the ``SSAM_CDEV_EVENT_ENABLE`` IOCTL. While notifiers work per-client (i.e. per-device-file-instance), events are enabled globally, for the EC and all of its clients (regardless of userspace or non-userspace). The ``SSAM_CDEV_EVENT_ENABLE`` and ``SSAM_CDEV_EVENT_DISABLE`` IOCTLs take care of reference counting the events, such that an event is enabled as long as there is a client that has requested it.h](huNotifiers themselves do not enable events on the EC. Thus, it may additionally be necessary to enable events via the }(hjhhhNhNubh)}(h``SSAM_CDEV_EVENT_ENABLE``h]hSSAM_CDEV_EVENT_ENABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh IOCTL. While notifiers work per-client (i.e. per-device-file-instance), events are enabled globally, for the EC and all of its clients (regardless of userspace or non-userspace). The }(hjhhhNhNubh)}(h``SSAM_CDEV_EVENT_ENABLE``h]hSSAM_CDEV_EVENT_ENABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and }(hjhhhNhNubh)}(h``SSAM_CDEV_EVENT_DISABLE``h]hSSAM_CDEV_EVENT_DISABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh IOCTLs take care of reference counting the events, such that an event is enabled as long as there is a client that has requested it.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhK)hjghhubjR)}(hXvNote that enabled events are not automatically disabled once the client instance is closed. Therefore any client process (or group of processes) should balance their event enable calls with the corresponding event disable calls. It is, however, perfectly valid to enable and disable events on different client instances. For example, it is valid to set up notifiers and read events on client instance ``A``, enable those events on instance ``B`` (note that these will also be received by A since events are enabled/disabled globally), and after no more events are desired, disable the previously enabled events via instance ``C``.h](hXNote that enabled events are not automatically disabled once the client instance is closed. Therefore any client process (or group of processes) should balance their event enable calls with the corresponding event disable calls. It is, however, perfectly valid to enable and disable events on different client instances. For example, it is valid to set up notifiers and read events on client instance }(hj hhhNhNubh)}(h``A``h]hA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh", enable those events on instance }(hj hhhNhNubh)}(h``B``h]hB}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh (note that these will also be received by A since events are enabled/disabled globally), and after no more events are desired, disable the previously enabled events via instance }(hj hhhNhNubh)}(h``C``h]hC}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhK1hjghhubeh}(h]jah ]h"]receiving eventsah$]h&]uh1j:hj<hhhhhKubj;)}(hhh](j@)}(hController IOCTLsh]hController IOCTLs}(hjXhhhNhNubah}(h]h ]h"]h$]h&]jOj2uh1j?hjUhhhhhK=ubjR)}(h"The following IOCTLs are provided:h]h"The following IOCTLs are provided:}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhK?hjUhhubhtable)}(hhh](j@)}(hController IOCTLsh]hController IOCTLs}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1j?hhhKAhjvubhtgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]jR)}(hTypeh]hType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKEhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hNumberh]hNumber}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h Directionh]h Direction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKHhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h Descriptionh]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKIhj(ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubhtbody)}(hhh](j)}(hhh](j)}(hhh]jR)}(h``0xA5``h]h)}(hjXh]h0xA5}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jQhhhKKhjSubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]jR)}(h``1``h]h)}(hjxh]h1}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]uh1jQhhhKLhjsubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]jR)}(h``WR``h]h)}(hjh]hWR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKMhjubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]jR)}(h ``REQUEST``h]h)}(hjh]hREQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKNhjubah}(h]h ]h"]h$]h&]uh1jhjPubj)}(hhh]jR)}(h Perform synchronous SAM request.h]h Perform synchronous SAM request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKOhjubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh](j)}(hhh]jR)}(h``0xA5``h]h)}(hjh]h0xA5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``2``h]h)}(hjh]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``W``h]h)}(hj8h]hW}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jQhhhKShj3ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``NOTIF_REGISTER``h]h)}(hjXh]hNOTIF_REGISTER}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jQhhhKThjSubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hRegister event notifier.h]hRegister event notifier.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKUhjsubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh](j)}(hhh]jR)}(h``0xA5``h]h)}(hjh]h0xA5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``3``h]h)}(hjh]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKXhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``W``h]h)}(hjh]hW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKYhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``NOTIF_UNREGISTER``h]h)}(hjh]hNOTIF_UNREGISTER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKZhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hUnregister event notifier.h]hUnregister event notifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh](j)}(hhh]jR)}(h``0xA5``h]h)}(hj8h]h0xA5}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jQhhhK]hj3ubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]jR)}(h``4``h]h)}(hjXh]h4}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jQhhhK^hjSubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]jR)}(h``W``h]h)}(hjxh]hW}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvubah}(h]h ]h"]h$]h&]uh1jQhhhK_hjsubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]jR)}(h``EVENT_ENABLE``h]h)}(hjh]h EVENT_ENABLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhK`hjubah}(h]h ]h"]h$]h&]uh1jhj0ubj)}(hhh]jR)}(hEnable event source.h]hEnable event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKahjubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjMubj)}(hhh](j)}(hhh]jR)}(h``0xA5``h]h)}(hjh]h0xA5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKchjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``5``h]h)}(hjh]h5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKdhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``W``h]h)}(hjh]hW}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jQhhhKehjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(h``EVENT_DISABLE``h]h)}(hj8h]h EVENT_DISABLE}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jQhhhKfhj3ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]jR)}(hDisable event source.h]hDisable event source.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKghjSubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjvubeh}(h]id1ah ]h"]h$]h&]uh1jthjUhhhNhNubj;)}(hhh](j@)}(hjMh]h)}(hjMh]hSSAM_CDEV_REQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jOj[uh1j?hjhhhhhKkubjR)}(h8Defined as ``_IOWR(0xA5, 1, struct ssam_cdev_request)``.h](h Defined as }(hjhhhNhNubh)}(h,``_IOWR(0xA5, 1, struct ssam_cdev_request)``h]h(_IOWR(0xA5, 1, struct ssam_cdev_request)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKmhjhhubjR)}(hExecutes a synchronous SAM request. The request specification is passed in as argument of type |ssam_cdev_request|, which is then written to/modified by the IOCTL to return status and result of the request.h](h_Executes a synchronous SAM request. The request specification is passed in as argument of type }(hjhhhNhNubh)}(hhh]h)}(hhh]hstruct ssam_cdev_request}(hjhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypehڌ refexplicitrefwarn reftargethuh1hhhhKhjhhubh\, which is then written to/modified by the IOCTL to return status and result of the request.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKohjhhubjR)}(hX-Request payload data must be allocated separately and is passed in via the ``payload.data`` and ``payload.length`` members. If a response is required, the response buffer must be allocated by the caller and passed in via the ``response.data`` member. The ``response.length`` member must be set to the capacity of this buffer, or if no response is required, zero. Upon completion of the request, the call will write the response to the response buffer (if its capacity allows it) and overwrite the length field with the actual size of the response, in bytes.h](hKRequest payload data must be allocated separately and is passed in via the }(hjhhhNhNubh)}(h``payload.data``h]h payload.data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh and }(hjhhhNhNubh)}(h``payload.length``h]hpayload.length}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubho members. If a response is required, the response buffer must be allocated by the caller and passed in via the }(hjhhhNhNubh)}(h``response.data``h]h response.data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh member. The }(hjhhhNhNubh)}(h``response.length``h]hresponse.length}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhX member must be set to the capacity of this buffer, or if no response is required, zero. Upon completion of the request, the call will write the response to the response buffer (if its capacity allows it) and overwrite the length field with the actual size of the response, in bytes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKshjhhubjR)}(hAdditionally, if the request has a response, this must be indicated via the request flags, as is done with in-kernel requests. Request flags can be set via the ``flags`` member and the values correspond to the values found in |ssam_cdev_request_flags|.h](hAdditionally, if the request has a response, this must be indicated via the request flags, as is done with in-kernel requests. Request flags can be set via the }(hjA hhhNhNubh)}(h ``flags``h]hflags}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA ubh9 member and the values correspond to the values found in }(hjA hhhNhNubh)}(hhh]h)}(hhh]henum ssam_cdev_request_flags}(hj^ hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhj[ ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej refexplicitrefwarn reftargetjuh1hhhhKhjA hhubh.}(hjA hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhK|hjhhubjR)}(hXxFinally, the status of the request itself is returned in the ``status`` member (a negative errno value indicating failure). Note that failure indication of the IOCTL is separated from failure indication of the request: The IOCTL returns a negative status code if anything failed during setup of the request (``-EFAULT``) or if the provided argument or any of its fields are invalid (``-EINVAL``). In this case, the status value of the request argument may be set, providing more detail on what went wrong (e.g. ``-ENOMEM`` for out-of-memory), but this value may also be zero. The IOCTL will return with a zero status code in case the request has been set up, submitted, and completed (i.e. handed back to user-space) successfully from inside the IOCTL, but the request ``status`` member may still be negative in case the actual execution of the request failed after it has been submitted.h](h=Finally, the status of the request itself is returned in the }(hj hhhNhNubh)}(h ``status``h]hstatus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh member (a negative errno value indicating failure). Note that failure indication of the IOCTL is separated from failure indication of the request: The IOCTL returns a negative status code if anything failed during setup of the request (}(hj hhhNhNubh)}(h ``-EFAULT``h]h-EFAULT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh@) or if the provided argument or any of its fields are invalid (}(hj hhhNhNubh)}(h ``-EINVAL``h]h-EINVAL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhu). In this case, the status value of the request argument may be set, providing more detail on what went wrong (e.g. }(hj hhhNhNubh)}(h ``-ENOMEM``h]h-ENOMEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh for out-of-memory), but this value may also be zero. The IOCTL will return with a zero status code in case the request has been set up, submitted, and completed (i.e. handed back to user-space) successfully from inside the IOCTL, but the request }(hj hhhNhNubh)}(h ``status``h]hstatus}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhm member may still be negative in case the actual execution of the request failed after it has been submitted.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhjhhubjR)}(h;A full definition of the argument struct is provided below.h]h;A full definition of the argument struct is provided below.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKhjhhubeh}(h]jaah ]h"]ssam_cdev_requestah$]h&]uh1j:hjUhhhhhKkubj;)}(hhh](j@)}(hjyh]h)}(hjyh]hSSAM_CDEV_NOTIF_REGISTER}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jOjuh1j?hj hhhhhKubjR)}(h=Defined as ``_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)``.h](h Defined as }(hj hhhNhNubh)}(h1``_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)``h]h-_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubjR)}(hX Register a notifier for the event target category specified in the given notifier description with the specified priority. Notifiers registration is required to receive events, but does not enable events themselves. After a notifier for a specific target category has been registered, all events of that category will be forwarded to the userspace client and can then be read from the device file instance. Note that events may have to be enabled, e.g. via the ``SSAM_CDEV_EVENT_ENABLE`` IOCTL, before the EC will send them.h](hXRegister a notifier for the event target category specified in the given notifier description with the specified priority. Notifiers registration is required to receive events, but does not enable events themselves. After a notifier for a specific target category has been registered, all events of that category will be forwarded to the userspace client and can then be read from the device file instance. Note that events may have to be enabled, e.g. via the }(hj7 hhhNhNubh)}(h``SSAM_CDEV_EVENT_ENABLE``h]hSSAM_CDEV_EVENT_ENABLE}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7 ubh% IOCTL, before the EC will send them.}(hj7 hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubjR)}(hOnly one notifier can be registered per target category and client instance. If a notifier has already been registered, this IOCTL will fail with ``-EEXIST``.h](hOnly one notifier can be registered per target category and client instance. If a notifier has already been registered, this IOCTL will fail with }(hjW hhhNhNubh)}(h ``-EEXIST``h]h-EEXIST}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW ubh.}(hjW hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubjR)}(hPNotifiers will automatically be removed when the device file instance is closed.h]hPNotifiers will automatically be removed when the device file instance is closed.}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubeh}(h]jah ]h"]ssam_cdev_notif_registerah$]h&]uh1j:hjUhhhhhKubj;)}(hhh](j@)}(hjh]h)}(hjh]hSSAM_CDEV_NOTIF_UNREGISTER}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jOjuh1j?hj hhhhhKubjR)}(h=Defined as ``_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)``.h](h Defined as }(hj hhhNhNubh)}(h1``_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)``h]h-_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubjR)}(hUnregisters the notifier associated with the specified target category. The priority field will be ignored by this IOCTL. If no notifier has been registered for this client instance and the given category, this IOCTL will fail with ``-ENOENT``.h](hUnregisters the notifier associated with the specified target category. The priority field will be ignored by this IOCTL. If no notifier has been registered for this client instance and the given category, this IOCTL will fail with }(hj hhhNhNubh)}(h ``-ENOENT``h]h-ENOENT}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubeh}(h]jah ]h"]ssam_cdev_notif_unregisterah$]h&]uh1j:hjUhhhhhKubj;)}(hhh](j@)}(hjh]h)}(hjh]hSSAM_CDEV_EVENT_ENABLE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jOjuh1j?hj hhhhhKubjR)}(h:Defined as ``_IOW(0xA5, 4, struct ssam_cdev_event_desc)``.h](h Defined as }(hj hhhNhNubh)}(h.``_IOW(0xA5, 4, struct ssam_cdev_event_desc)``h]h*_IOW(0xA5, 4, struct ssam_cdev_event_desc)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhhhKhj hhubjR)}(h`). ``status`` Request status (output). ``payload`` Request payload (input data). ``payload.data`` Pointer to request payload data. ``payload.length`` Length of request payload data (in bytes). ``response`` Request response (output data). ``response.data`` Pointer to response buffer. ``response.length`` On input: Capacity of response buffer (in bytes). On output: Length of request response (number of bytes in the buffer that are actually used).h](jR)}(h**Definition**::h](j )}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK+hj ubh literal_block)}(hXTstruct ssam_cdev_request { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 flags; __s16 status; struct { __u64 data; __u16 length; __u8 __pad[6]; } payload; struct { __u64 data; __u16 length; __u8 __pad[6]; } response; };h]hXTstruct ssam_cdev_request { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 flags; __s16 status; struct { __u64 data; __u16 length; __u8 __pad[6]; } payload; struct { __u64 data; __u16 length; __u8 __pad[6]; } response; };}hj sbah}(h]h ]h"]h$]h&]hhuh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK-hj ubjR)}(h **Members**h]j )}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK@hj ubj )}(hhh](j )}(h8``target_category`` Target category of the SAM request. h](j )}(h``target_category``h]h)}(hjh]htarget_category}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK)hj ubj )}(hhh]jR)}(h#Target category of the SAM request.h]h#Target category of the SAM request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhK)hjubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjhK)hj ubj )}(h,``target_id`` Target ID of the SAM request. h](j )}(h ``target_id``h]h)}(hj<h]h target_id}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK*hj6ubj )}(hhh]jR)}(hTarget ID of the SAM request.h]hTarget ID of the SAM request.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjQhK*hjRubah}(h]h ]h"]h$]h&]uh1j hj6ubeh}(h]h ]h"]h$]h&]uh1j hjQhK*hj ubj )}(h.``command_id`` Command ID of the SAM request. h](j )}(h``command_id``h]h)}(hjuh]h command_id}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK+hjoubj )}(hhh]jR)}(hCommand ID of the SAM request.h]hCommand ID of the SAM request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhK+hjubah}(h]h ]h"]h$]h&]uh1j hjoubeh}(h]h ]h"]h$]h&]uh1j hjhK+hj ubj )}(h0``instance_id`` Instance ID of the SAM request. h](j )}(h``instance_id``h]h)}(hjh]h instance_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK,hjubj )}(hhh]jR)}(hInstance ID of the SAM request.h]hInstance ID of the SAM request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhK,hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK,hj ubj )}(h```flags`` Request flags (see :c:type:`enum ssam_cdev_request_flags `). h](j )}(h ``flags``h]h)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK-hjubj )}(hhh]jR)}(hURequest flags (see :c:type:`enum ssam_cdev_request_flags `).h](hRequest flags (see }(hjhhhNhNubh)}(h@:c:type:`enum ssam_cdev_request_flags `h]h)}(hj h]henum ssam_cdev_request_flags}(hj hhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbh݌ssam_cdev_request_flagsuh1hhjhK-hjubh).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhjhK-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK-hj ubj )}(h$``status`` Request status (output). h](j )}(h ``status``h]h)}(hjKh]hstatus}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK.hjEubj )}(hhh]jR)}(hRequest status (output).h]hRequest status (output).}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj`hK.hjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1j hj`hK.hj ubj )}(h*``payload`` Request payload (input data). h](j )}(h ``payload``h]h)}(hjh]hpayload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK/hj~ubj )}(hhh]jR)}(hRequest payload (input data).h]hRequest payload (input data).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhK/hjubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1j hjhK/hj ubj )}(h2``payload.data`` Pointer to request payload data. h](j )}(h``payload.data``h]h)}(hjh]h payload.data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK0hjubj )}(hhh]jR)}(h Pointer to request payload data.h]h Pointer to request payload data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhK0hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK0hj ubj )}(h>``payload.length`` Length of request payload data (in bytes). h](j )}(h``payload.length``h]h)}(hjh]hpayload.length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK1hjubj )}(hhh]jR)}(h*Length of request payload data (in bytes).h]h*Length of request payload data (in bytes).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj hK1hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj hK1hj ubj )}(h-``response`` Request response (output data). h](j )}(h ``response``h]h)}(hj/h]hresponse}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK2hj)ubj )}(hhh]jR)}(hRequest response (output data).h]hRequest response (output data).}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjDhK2hjEubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1j hjDhK2hj ubj )}(h.``response.data`` Pointer to response buffer. h](j )}(h``response.data``h]h)}(hjhh]h response.data}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK3hjbubj )}(hhh]jR)}(hPointer to response buffer.h]hPointer to response buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj}hK3hj~ubah}(h]h ]h"]h$]h&]uh1j hjbubeh}(h]h ]h"]h$]h&]uh1j hj}hK3hj ubj )}(h``response.length`` On input: Capacity of response buffer (in bytes). On output: Length of request response (number of bytes in the buffer that are actually used).h](j )}(h``response.length``h]h)}(hjh]hresponse.length}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK5hjubj )}(hhh]jR)}(hOn input: Capacity of response buffer (in bytes). On output: Length of request response (number of bytes in the buffer that are actually used).h]hOn input: Capacity of response buffer (in bytes). On output: Length of request response (number of bytes in the buffer that are actually used).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK4hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhK5hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jz hj hhhNhNubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_cdev_notifier_desc (C struct)c.ssam_cdev_notifier_deschNtauh1j hj hhhNhNubj )}(hhh](j )}(hssam_cdev_notifier_desch]j )}(hstruct ssam_cdev_notifier_desch](j )}(hjS h]hstruct}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK``reg.cid_disable`` Command ID for the event-disable request. h](j )}(h``reg.cid_disable``h]h)}(hjh]hreg.cid_disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKdhjubj )}(hhh]jR)}(h)Command ID for the event-disable request.h]h)Command ID for the event-disable request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj hKdhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj hKdhj ubj )}(h ``id`` ID specifying the event. h](j )}(h``id``h]h)}(hj0h]hid}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKehj*ubj )}(hhh]jR)}(hID specifying the event.h]hID specifying the event.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjEhKehjFubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1j hjEhKehj ubj )}(h<``id.target_category`` Target category of the event source. h](j )}(h``id.target_category``h]h)}(hjih]hid.target_category}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKfhjcubj )}(hhh]jR)}(h$Target category of the event source.h]h$Target category of the event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj~hKfhjubah}(h]h ]h"]h$]h&]uh1j hjcubeh}(h]h ]h"]h$]h&]uh1j hj~hKfhj ubj )}(h1``id.instance`` Instance ID of the event source. h](j )}(h``id.instance``h]h)}(hjh]h id.instance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKghjubj )}(hhh]jR)}(h Instance ID of the event source.h]h Instance ID of the event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKghjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKghj ubj )}(h,``flags`` Flags used for enabling the event.h](j )}(h ``flags``h]h)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKghjubj )}(hhh]jR)}(h"Flags used for enabling the event.h]h"Flags used for enabling the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKghj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jz hj hhhNhNubjR)}(h**Description**h]j )}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKkhj hhubjR)}(hDSpecifies which event should be enabled/disabled and how to do that.h]hDSpecifies which event should be enabled/disabled and how to do that.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKihj hhubj )}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cdev_event (C struct)c.ssam_cdev_eventhNtauh1j hj hhhNhNubj )}(hhh](j )}(hssam_cdev_eventh]j )}(hstruct ssam_cdev_eventh](j )}(hjS h]hstruct}(hj\hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKnubj )}(h h]h }(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjXhhhjihKnubj" )}(hssam_cdev_eventh]j( )}(hjVh]hssam_cdev_event}(hj|hhhNhNubah}(h]h ]j3 ah"]h$]h&]uh1j' hjxubah}(h]h ](j: j; eh"]h$]h&]hhuh1j! hjXhhhjihKnubeh}(h]h ]h"]h$]h&]hhjE uh1j jF jG hjThhhjihKnubah}(h]jOah ](jK jL eh"]h$]h&]jP jQ )jR huh1j hjihKnhjQhhubjT )}(hhh]jR)}(hSSAM event sent by the EC.h]hSSAM event sent by the EC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK|hjhhubah}(h]h ]h"]h$]h&]uh1jS hjQhhhjihKnubeh}(h]h ](hˌstructeh"]h$]h&]jt hju jjv jjw jx jy uh1j hhhj hNhNubj{ )}(hX**Definition**:: struct ssam_cdev_event { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 length; __u8 data[]; }; **Members** ``target_category`` Target category of the event source. See :c:type:`enum ssam_ssh_tc `. ``target_id`` Target ID of the event source. ``command_id`` Command ID of the event. ``instance_id`` Instance ID of the event source. ``length`` Length of the event payload in bytes. ``data`` Event payload data.h](jR)}(h**Definition**::h](j )}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjubj )}(hstruct ssam_cdev_event { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 length; __u8 data[]; };h]hstruct ssam_cdev_event { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 length; __u8 data[]; };}hjsbah}(h]h ]h"]h$]h&]hhuh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjubjR)}(h **Members**h]j )}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjubj )}(hhh](j )}(hg``target_category`` Target category of the event source. See :c:type:`enum ssam_ssh_tc `. h](j )}(h``target_category``h]h)}(hj h]htarget_category}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhK~hjubj )}(hhh]jR)}(hRTarget category of the event source. See :c:type:`enum ssam_ssh_tc `.h](h)Target category of the event source. See }(hj$hhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]h)}(hj.h]henum ssam_ssh_tc}(hj0hhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnj&j*h݌ ssam_ssh_tcuh1hhj hK~hj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jQhj hK~hj!ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj hK~hjubj )}(h-``target_id`` Target ID of the event source. h](j )}(h ``target_id``h]h)}(hjgh]h target_id}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjaubj )}(hhh]jR)}(hTarget ID of the event source.h]hTarget ID of the event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj|hKhj}ubah}(h]h ]h"]h$]h&]uh1j hjaubeh}(h]h ]h"]h$]h&]uh1j hj|hKhjubj )}(h(``command_id`` Command ID of the event. h](j )}(h``command_id``h]h)}(hjh]h command_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjubj )}(hhh]jR)}(hCommand ID of the event.h]hCommand ID of the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h1``instance_id`` Instance ID of the event source. h](j )}(h``instance_id``h]h)}(hjh]h instance_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjubj )}(hhh]jR)}(h Instance ID of the event source.h]h Instance ID of the event source.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jQhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjhKhjubj )}(h1``length`` Length of the event payload in bytes. h](j )}(h ``length``h]h)}(hjh]hlength}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhj ubj )}(hhh]jR)}(h%Length of the event payload in bytes.h]h%Length of the event payload in bytes.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jQhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj'hKhjubj )}(h``data`` Event payload data.h](j )}(h``data``h]h)}(hjKh]hdata}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjEubj )}(hhh]jR)}(hEvent payload data.h]hEvent payload data.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jQh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.hhKhjaubah}(h]h ]h"]h$]h&]uh1j hjEubeh}(h]h ]h"]h$]h&]uh1j hj`hKhjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jz hj hhhNhNubeh}(h]j?ah ]h"]structures and enumsah$]h&]uh1j:hj<hhhhhKubeh}(h]jah ]h"]user-space ec interface (cdev)ah$]h&]uh1j:hhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(j?N generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}(hhj hj7jusubstitution_names}(ssam_cdev_requesthssam_cdev_request_flagsj ssam_cdev_eventj7urefnames}refids}nameids}(jjjdj`jRjj j8j jaj jj jje jj jjj?u nametypes}(jjdjRj j j j je j juh}(jj<j`jjjgj8jUjajjj jj jj jjh j?j j j jD jI jjjWj\jOjTjjvjPjjjj2j)j[jHjjtjjjjj jj9j0u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jK sRparse_messages]transform_messages] transformerN include_log] decorationNhhub.