€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ>/translations/zh_CN/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/zh_TW/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/it_IT/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/ja_JP/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/ko_KR/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/pt_BR/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ>/translations/sp_SP/driver-api/surface_aggregator/clients/cdev”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ!SPDX-License-Identifier: GPL-2.0+”h]”hŒ!SPDX-License-Identifier: GPL-2.0+”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev.rst”h´KubhŒsubstitution_definition”“”)�”}”(hŒW.. |ssam_cdev_request| replace:: :c:type:`struct ssam_cdev_request `”h]”h)�”}”(hŒ6:c:type:`struct ssam_cdev_request `”h]”hŒliteral”“”)�”}”(hhÐh]”hŒstruct ssam_cdev_request”…”�”}”(hhÔh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1hÒhhÎubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ*driver-api/surface_aggregator/clients/cdev”Œ refdomain”hߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ reftarget”Œssam_cdev_request”uh1hh³hÇh´KhhÊubah}”(h]”h ]”h"]”Œssam_cdev_request”ah$]”h&]”uh1hÈh³hÇh´Khhh²hubhÉ)�”}”(hŒg.. |ssam_cdev_request_flags| replace:: :c:type:`enum ssam_cdev_request_flags `”h]”h)�”}”(hŒ@:c:type:`enum ssam_cdev_request_flags `”h]”hÓ)�”}”(hjh]”hŒenum ssam_cdev_request_flags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(hÞhߌc-type”eh"]”h$]”h&]”uh1hÒhhþubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰hñŒssam_cdev_request_flags”uh1hh³hÇh´Khhúubah}”(h]”h ]”h"]”Œssam_cdev_request_flags”ah$]”h&]”uh1hÈh³hÇh´Khhh²hubhÉ)�”}”(hŒR.. |ssam_cdev_event| replace:: :c:type:`struct ssam_cdev_event ` ”h]”h)�”}”(hŒ2:c:type:`struct ssam_cdev_event `”h]”hÓ)�”}”(hj*h]”hŒstruct ssam_cdev_event”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”(hÞhߌc-type”eh"]”h$]”h&]”uh1hÒhj(ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰hñŒssam_cdev_event”uh1hh³hÇh´Khj$ubah}”(h]”h ]”h"]”Œssam_cdev_event”ah$]”h&]”uh1hÈh³hÇh´Khhh²hubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒUser-Space EC Interface (cdev)”h]”hŒUser-Space EC Interface (cdev)”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid2”uh1jShjPh²hh³hÇh´K 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]”(hŒThe ”…”�”}”(hjgh²hh³Nh´NubhÓ)�”}”(hŒ``surface_aggregator_cdev``”h]”hŒsurface_aggregator_cdev”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjgubhXX 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.”…”�”}”(hjgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K hjPh²hubjf)�”}”(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]”(hŒ1The provided interface is accessible through the ”…”�”}”(hj‡h²hh³Nh´NubhÓ)�”}”(hŒ``/dev/surface/aggregator``”h]”hŒ/dev/surface/aggregator”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj‡ubhŒš device-file. All functionality of this interface is provided via IOCTLs. These IOCTLs and their respective input/output parameter structs are defined in ”…”�”}”(hj‡h²hh³Nh´NubhÓ)�”}”(hŒ0``include/uapi/linux/surface_aggregator/cdev.h``”h]”hŒ,include/uapi/linux/surface_aggregator/cdev.h”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj‡ubhŒ.”…”�”}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KhjPh²hubjf)�”}”(hŒ¤A 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]”(hŒPA small python library and scripts for accessing this interface can be found at ”…”�”}”(hj¹h²hh³Nh´NubhŒ reference”“”)�”}”(hŒShttps://github.com/linux-surface/surface-aggregator-module/tree/master/scripts/ssam”h]”hŒShttps://github.com/linux-surface/surface-aggregator-module/tree/master/scripts/ssam”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jÅuh1jÁhj¹ubhŒ.”…”�”}”(hj¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KhjPh²hubhŒtopic”“”)�”}”(hŒ Contents ”h]”(jT)�”}”(hŒContents”h]”hŒContents”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjÞh³hÇh´KubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hhh]”(jf)�”}”(hhh]”jÂ)�”}”(hhh]”hŒUser-Space EC Interface (cdev)”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”jdah ]”h"]”h$]”h&]”Œrefid”Œuser-space-ec-interface-cdev”uh1jÁhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj÷ubjñ)�”}”(hhh]”(jö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hŒReceiving Events”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œreceiving-events”uh1jÁhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubjö)�”}”(hhh]”(jf)�”}”(hhh]”jÂ)�”}”(hhh]”hŒController IOCTLs”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œcontroller-ioctls”uh1jÁhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj7ubjñ)�”}”(hhh]”(jö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hÓ)�”}”(hŒ``SSAM_CDEV_REQUEST``”h]”hŒSSAM_CDEV_REQUEST”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒh³Nh´Nhj\ubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œssam-cdev-request”uh1jÁhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSubjö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hÓ)�”}”(hŒ``SSAM_CDEV_NOTIF_REGISTER``”h]”hŒSSAM_CDEV_NOTIF_REGISTER”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒh³Nh´Nhjˆubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œssam-cdev-notif-register”uh1jÁhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSubjö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hÓ)�”}”(hŒ``SSAM_CDEV_NOTIF_UNREGISTER``”h]”hŒSSAM_CDEV_NOTIF_UNREGISTER”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒh³Nh´Nhj´ubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œssam-cdev-notif-unregister”uh1jÁhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSubjö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hÓ)�”}”(hŒ``SSAM_CDEV_EVENT_ENABLE``”h]”hŒSSAM_CDEV_EVENT_ENABLE”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒh³Nh´Nhjàubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”Œrefid”Œssam-cdev-event-enable”uh1jÁhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSubjö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hÓ)�”}”(hŒ``SSAM_CDEV_EVENT_DISABLE``”h]”hŒSSAM_CDEV_EVENT_DISABLE”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒh³Nh´Nhj ubah}”(h]”Œid9”ah ]”h"]”h$]”h&]”Œrefid”Œssam-cdev-event-disable”uh1jÁhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jðhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubjö)�”}”(hhh]”jf)�”}”(hhh]”jÂ)�”}”(hhh]”hŒStructures and Enums”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”Œid10”ah ]”h"]”h$]”h&]”Œrefid”Œstructures-and-enums”uh1jÁhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jðhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jõhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jðhjÞh²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1jÜh³hÇh´KhjPh²hubjO)�”}”(hhh]”(jT)�”}”(hŒReceiving Events”h]”hŒReceiving Events”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jcj$uh1jShj{h²hh³hÇh´Kubjf)�”}”(hŒnEvents can be received by reading from the device-file. The are represented by the |ssam_cdev_event| datatype.”h]”(hŒSEvents can be received by reading from the device-file. The are represented by the ”…”�”}”(hjŒh²hh³Nh´Nubh)�”}”(hj*h]”hÓ)�”}”(hj*h]”hŒstruct ssam_cdev_event”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”(hÞhßj6eh"]”h$]”h&]”uh1hÒh³Nh´Nhj”ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”jCŒ refexplicit”ˆŒrefwarn”‰Œ reftarget”jFuh1hh³hÇh´KhjŒh²hubhŒ datatype.”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Khj{h²hubjf)�”}”(hX¥Before 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]”(hŒbBefore events are available to be read, however, the desired notifiers must be registered via the ”…”�”}”(hjºh²hh³Nh´NubhÓ)�”}”(hŒ``SSAM_CDEV_NOTIF_REGISTER``”h]”hŒSSAM_CDEV_NOTIF_REGISTER”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjºubhX' 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.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K"hj{h²hubjf)�”}”(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]”(hŒuNotifiers themselves do not enable events on the EC. Thus, it may additionally be necessary to enable events via the ”…”�”}”(hjÚh²hh³Nh´NubhÓ)�”}”(hŒ``SSAM_CDEV_EVENT_ENABLE``”h]”hŒSSAM_CDEV_EVENT_ENABLE”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÚubhŒ¸ 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 ”…”�”}”(hjÚh²hh³Nh´NubhÓ)�”}”(hŒ``SSAM_CDEV_EVENT_ENABLE``”h]”hŒSSAM_CDEV_EVENT_ENABLE”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÚubhŒ and ”…”�”}”(hjÚh²hh³Nh´NubhÓ)�”}”(hŒ``SSAM_CDEV_EVENT_DISABLE``”h]”hŒSSAM_CDEV_EVENT_DISABLE”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÚubhŒ… 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.”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K)hj{h²hubjf)�”}”(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]”(hX‘Note 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 ”…”�”}”(hjh²hh³Nh´NubhÓ)�”}”(hŒ``A``”h]”hŒA”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubhŒ", enable those events on instance ”…”�”}”(hjh²hh³Nh´NubhÓ)�”}”(hŒ``B``”h]”hŒB”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubhŒ³ (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 ”…”�”}”(hjh²hh³Nh´NubhÓ)�”}”(hŒ``C``”h]”hŒC”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K1hj{h²hubeh}”(h]”j*ah ]”h"]”Œreceiving events”ah$]”h&]”uh1jNhjPh²hh³hÇh´KubjO)�”}”(hhh]”(jT)�”}”(hŒController IOCTLs”h]”hŒController IOCTLs”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jcjFuh1jShjih²hh³hÇh´K=ubjf)�”}”(hŒ"The following IOCTLs are provided:”h]”hŒ"The following IOCTLs are provided:”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K?hjih²hubhŒtable”“”)�”}”(hhh]”(jT)�”}”(hŒController IOCTLs”h]”hŒController IOCTLs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jSh³hÇh´KAhjŠubhŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j hj�ubj¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j hj�ubj¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j hj�ubj¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j hj�ubj¡)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j hj�ubhŒthead”“”)�”}”(hhh]”hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”jf)�”}”(hŒType”h]”hŒType”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KEhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛubjß)�”}”(hhh]”jf)�”}”(hŒNumber”h]”hŒNumber”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KFhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛubjß)�”}”(hhh]”jf)�”}”(hŒ Direction”h]”hŒ Direction”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KGhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛubjß)�”}”(hhh]”jf)�”}”(hŒName”h]”hŒName”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KHhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛubjß)�”}”(hhh]”jf)�”}”(hŒ Description”h]”hŒ Description”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KIhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔhj�ubhŒtbody”“”)�”}”(hhh]”(jÚ)�”}”(hhh]”(jß)�”}”(hhh]”jf)�”}”(hŒ``0xA5``”h]”hÓ)�”}”(hjlh]”hŒ0xA5”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KKhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjdubjß)�”}”(hhh]”jf)�”}”(hŒ``1``”h]”hÓ)�”}”(hjŒh]”hŒ1”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KLhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjdubjß)�”}”(hhh]”jf)�”}”(hŒ``WR``”h]”hÓ)�”}”(hj¬h]”hŒWR”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KMhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjdubjß)�”}”(hhh]”jf)�”}”(hŒ ``REQUEST``”h]”hÓ)�”}”(hjÌh]”hŒREQUEST”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KNhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjdubjß)�”}”(hhh]”jf)�”}”(hŒ Perform synchronous SAM request.”h]”hŒ Perform synchronous SAM request.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KOhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjaubjÚ)�”}”(hhh]”(jß)�”}”(hhh]”jf)�”}”(hŒ``0xA5``”h]”hÓ)�”}”(hj h]”hŒ0xA5”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KQhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubjß)�”}”(hhh]”jf)�”}”(hŒ``2``”h]”hÓ)�”}”(hj,h]”hŒ2”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KRhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubjß)�”}”(hhh]”jf)�”}”(hŒ``W``”h]”hÓ)�”}”(hjLh]”hŒW”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KShjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubjß)�”}”(hhh]”jf)�”}”(hŒ``NOTIF_REGISTER``”h]”hÓ)�”}”(hjlh]”hŒNOTIF_REGISTER”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KThjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubjß)�”}”(hhh]”jf)�”}”(hŒRegister event notifier.”h]”hŒRegister event notifier.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KUhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjaubjÚ)�”}”(hhh]”(jß)�”}”(hhh]”jf)�”}”(hŒ``0xA5``”h]”hÓ)�”}”(hj¬h]”hŒ0xA5”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KWhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¤ubjß)�”}”(hhh]”jf)�”}”(hŒ``3``”h]”hÓ)�”}”(hjÌh]”hŒ3”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KXhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¤ubjß)�”}”(hhh]”jf)�”}”(hŒ``W``”h]”hÓ)�”}”(hjìh]”hŒW”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KYhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¤ubjß)�”}”(hhh]”jf)�”}”(hŒ``NOTIF_UNREGISTER``”h]”hÓ)�”}”(hj h]”hŒNOTIF_UNREGISTER”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KZhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¤ubjß)�”}”(hhh]”jf)�”}”(hŒUnregister event notifier.”h]”hŒUnregister event notifier.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K[hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjaubjÚ)�”}”(hhh]”(jß)�”}”(hhh]”jf)�”}”(hŒ``0xA5``”h]”hÓ)�”}”(hjLh]”hŒ0xA5”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K]hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjDubjß)�”}”(hhh]”jf)�”}”(hŒ``4``”h]”hÓ)�”}”(hjlh]”hŒ4”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K^hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjDubjß)�”}”(hhh]”jf)�”}”(hŒ``W``”h]”hÓ)�”}”(hjŒh]”hŒW”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K_hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjDubjß)�”}”(hhh]”jf)�”}”(hŒ``EVENT_ENABLE``”h]”hÓ)�”}”(hj¬h]”hŒ EVENT_ENABLE”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K`hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjDubjß)�”}”(hhh]”jf)�”}”(hŒEnable event source.”h]”hŒEnable event source.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KahjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjaubjÚ)�”}”(hhh]”(jß)�”}”(hhh]”jf)�”}”(hŒ``0xA5``”h]”hÓ)�”}”(hjìh]”hŒ0xA5”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kchjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjäubjß)�”}”(hhh]”jf)�”}”(hŒ``5``”h]”hÓ)�”}”(hj h]”hŒ5”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kdhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjäubjß)�”}”(hhh]”jf)�”}”(hŒ``W``”h]”hÓ)�”}”(hj,h]”hŒW”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kehj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjäubjß)�”}”(hhh]”jf)�”}”(hŒ``EVENT_DISABLE``”h]”hÓ)�”}”(hjLh]”hŒ EVENT_DISABLE”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KfhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjäubjß)�”}”(hhh]”jf)�”}”(hŒDisable event source.”h]”hŒDisable event source.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kghjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞhjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j_hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1j›hjŠubeh}”(h]”Œid1”ah ]”h"]”h$]”h&]”uh1jˆhjih²hh³Nh´NubjO)�”}”(hhh]”(jT)�”}”(hjah]”hÓ)�”}”(hjah]”hŒSSAM_CDEV_REQUEST”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj›ubah}”(h]”h ]”h"]”h$]”h&]”jcjouh1jShj˜h²hh³hÇh´Kkubjf)�”}”(hŒ8Defined as ``_IOWR(0xA5, 1, struct ssam_cdev_request)``.”h]”(hŒ Defined as ”…”�”}”(hj±h²hh³Nh´NubhÓ)�”}”(hŒ,``_IOWR(0xA5, 1, struct ssam_cdev_request)``”h]”hŒ(_IOWR(0xA5, 1, struct ssam_cdev_request)”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj±ubhŒ.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kmhj˜h²hubjf)�”}”(hŒÎExecutes 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 ”…”�”}”(hjÑh²hh³Nh´Nubh)�”}”(hhÐh]”hÓ)�”}”(hhÐh]”hŒstruct ssam_cdev_request”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”(hÞhßhàeh"]”h$]”h&]”uh1hÒh³Nh´NhjÙubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”hîŒ refexplicit”ˆŒrefwarn”‰Œ reftarget”hòuh1hh³hÇh´KhjÑh²hubhŒ\, which is then written to/modified by the IOCTL to return status and result of the request.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kohj˜h²hubjf)�”}”(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]”(hŒKRequest payload data must be allocated separately and is passed in via the ”…”�”}”(hjÿh²hh³Nh´NubhÓ)�”}”(hŒ``payload.data``”h]”hŒ payload.data”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÿubhŒ and ”…”�”}”(hjÿh²hh³Nh´NubhÓ)�”}”(hŒ``payload.length``”h]”hŒpayload.length”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÿubhŒo members. If a response is required, the response buffer must be allocated by the caller and passed in via the ”…”�”}”(hjÿh²hh³Nh´NubhÓ)�”}”(hŒ``response.data``”h]”hŒ response.data”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÿubhŒ member. The ”…”�”}”(hjÿh²hh³Nh´NubhÓ)�”}”(hŒ``response.length``”h]”hŒresponse.length”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÿubhX 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.”…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´Kshj˜h²hubjf)�”}”(hŒüAdditionally, 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]”(hŒ Additionally, 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 ”…”�”}”(hjU h²hh³Nh´NubhÓ)�”}”(hŒ ``flags``”h]”hŒflags”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjU ubhŒ9 member and the values correspond to the values found in ”…”�”}”(hjU h²hh³Nh´Nubh)�”}”(hjh]”hÓ)�”}”(hjh]”hŒenum ssam_cdev_request_flags”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”(hÞhßj eh"]”h$]”h&]”uh1hÒh³Nh´Nhjo ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”jŒ refexplicit”ˆŒrefwarn”‰Œ reftarget”juh1hh³hÇh´KhjU h²hubhŒ.”…”�”}”(hjU h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K|hj˜h²hubjf)�”}”(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• h²hh³Nh´NubhÓ)�”}”(hŒ ``status``”h]”hŒstatus”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj• 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• h²hh³Nh´NubhÓ)�”}”(hŒ ``-EFAULT``”h]”hŒ-EFAULT”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj• ubhŒ@) or if the provided argument or any of its fields are invalid (”…”�”}”(hj• h²hh³Nh´NubhÓ)�”}”(hŒ ``-EINVAL``”h]”hŒ-EINVAL”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj• ubhŒu). In this case, the status value of the request argument may be set, providing more detail on what went wrong (e.g. ”…”�”}”(hj• h²hh³Nh´NubhÓ)�”}”(hŒ ``-ENOMEM``”h]”hŒ-ENOMEM”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj• 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• h²hh³Nh´NubhÓ)�”}”(hŒ ``status``”h]”hŒstatus”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj• ubhŒm member may still be negative in case the actual execution of the request failed after it has been submitted.”…”�”}”(hj• h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K�hj˜h²hubjf)�”}”(hŒ;A full definition of the argument struct is provided below.”h]”hŒ;A full definition of the argument struct is provided below.”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´KŽhj˜h²hubeh}”(h]”juah ]”h"]”Œssam_cdev_request”ah$]”h&]”uh1jNhjih²hh³hÇh´KkubjO)�”}”(hhh]”(jT)�”}”(hj�h]”hÓ)�”}”(hj�h]”hŒSSAM_CDEV_NOTIF_REGISTER”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubah}”(h]”h ]”h"]”h$]”h&]”jcj›uh1jShj h²hh³hÇh´K‘ubjf)�”}”(hŒ=Defined as ``_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)``.”h]”(hŒ Defined as ”…”�”}”(hj+ h²hh³Nh´NubhÓ)�”}”(hŒ1``_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)``”h]”hŒ-_IOW(0xA5, 2, struct ssam_cdev_notifier_desc)”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj+ ubhŒ.”…”�”}”(hj+ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K“hj h²hubjf)�”}”(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]”(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 ”…”�”}”(hjK h²hh³Nh´NubhÓ)�”}”(hŒ``SSAM_CDEV_EVENT_ENABLE``”h]”hŒSSAM_CDEV_EVENT_ENABLE”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjK ubhŒ% IOCTL, before the EC will send them.”…”�”}”(hjK h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K•hj h²hubjf)�”}”(hŒžOnly 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]”(hŒ’Only one notifier can be registered per target category and client instance. If a notifier has already been registered, this IOCTL will fail with ”…”�”}”(hjk h²hh³Nh´NubhÓ)�”}”(hŒ ``-EEXIST``”h]”hŒ-EEXIST”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjk ubhŒ.”…”�”}”(hjk h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K�hj h²hubjf)�”}”(hŒPNotifiers will automatically be removed when the device file instance is closed.”h]”hŒPNotifiers will automatically be removed when the device file instance is closed.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K hj h²hubeh}”(h]”j¡ah ]”h"]”Œssam_cdev_notif_register”ah$]”h&]”uh1jNhjih²hh³hÇh´K‘ubjO)�”}”(hhh]”(jT)�”}”(hj¹h]”hÓ)�”}”(hj¹h]”hŒSSAM_CDEV_NOTIF_UNREGISTER”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj£ ubah}”(h]”h ]”h"]”h$]”h&]”jcjÇuh1jShj  h²hh³hÇh´K¤ubjf)�”}”(hŒ=Defined as ``_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)``.”h]”(hŒ Defined as ”…”�”}”(hj¹ h²hh³Nh´NubhÓ)�”}”(hŒ1``_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)``”h]”hŒ-_IOW(0xA5, 3, struct ssam_cdev_notifier_desc)”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj¹ ubhŒ.”…”�”}”(hj¹ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K¦hj  h²hubjf)�”}”(hŒôUnregisters 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]”(hŒèUnregisters 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Ù h²hh³Nh´NubhÓ)�”}”(hŒ ``-ENOENT``”h]”hŒ-ENOENT”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÙ ubhŒ.”…”�”}”(hjÙ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K¨hj  h²hubeh}”(h]”jÍah ]”h"]”Œssam_cdev_notif_unregister”ah$]”h&]”uh1jNhjih²hh³hÇh´K¤ubjO)�”}”(hhh]”(jT)�”}”(hjåh]”hÓ)�”}”(hjåh]”hŒSSAM_CDEV_EVENT_ENABLE”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubah}”(h]”h ]”h"]”h$]”h&]”jcjóuh1jShj h²hh³hÇh´K®ubjf)�”}”(hŒ:Defined as ``_IOW(0xA5, 4, struct ssam_cdev_event_desc)``.”h]”(hŒ Defined as ”…”�”}”(hj h²hh³Nh´NubhÓ)�”}”(hŒ.``_IOW(0xA5, 4, struct ssam_cdev_event_desc)``”h]”hŒ*_IOW(0xA5, 4, struct ssam_cdev_event_desc)”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³hÇh´K°hj h²hubjf)�”}”(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]”(jf)�”}”(hŒ**Definition**::”h]”(j™ )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j˜ hjÈ ubhŒ:”…”�”}”(hjÈ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K+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&]”hÅhÆuh1jå h³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K-hjÄ ubjf)�”}”(hŒ **Members**”h]”j™ )�”}”(hjø h]”hŒMembers”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j˜ hjö ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K@hjÄ ubj¯ )�”}”(hhh]”(j´ )�”}”(hŒ8``target_category`` Target category of the SAM request. ”h]”(jº )�”}”(hŒ``target_category``”h]”hÓ)�”}”(hjh]”hŒtarget_category”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubah}”(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.h”h´K)hjubjÔ )�”}”(hhh]”jf)�”}”(hŒ#Target category of the SAM request.”h]”hŒ#Target category of the SAM request.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j,h´K)hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j,h´K)hjubj´ )�”}”(hŒ,``target_id`` Target ID of the SAM request. ”h]”(jº )�”}”(hŒ ``target_id``”h]”hÓ)�”}”(hjPh]”hŒ target_id”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjNubah}”(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.h”h´K*hjJubjÔ )�”}”(hhh]”jf)�”}”(hŒTarget ID of the SAM request.”h]”hŒTarget ID of the SAM request.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jeh´K*hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jeh´K*hjubj´ )�”}”(hŒ.``command_id`` Command ID of the SAM request. ”h]”(jº )�”}”(hŒ``command_id``”h]”hÓ)�”}”(hj‰h]”hŒ command_id”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj‡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.h”h´K+hjƒubjÔ )�”}”(hhh]”jf)�”}”(hŒCommand ID of the SAM request.”h]”hŒCommand ID of the SAM request.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jžh´K+hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jžh´K+hjubj´ )�”}”(hŒ0``instance_id`` Instance ID of the SAM request. ”h]”(jº )�”}”(hŒ``instance_id``”h]”hÓ)�”}”(hjÂh]”hŒ instance_id”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÀ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.h”h´K,hj¼ubjÔ )�”}”(hhh]”jf)�”}”(hŒInstance ID of the SAM request.”h]”hŒInstance ID of the SAM request.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j×h´K,hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j×h´K,hjubj´ )�”}”(hŒ```flags`` Request flags (see :c:type:`enum ssam_cdev_request_flags `). ”h]”(jº )�”}”(hŒ ``flags``”h]”hÓ)�”}”(hjûh]”hŒflags”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjù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.h”h´K-hjõubjÔ )�”}”(hhh]”jf)�”}”(hŒURequest flags (see :c:type:`enum ssam_cdev_request_flags `).”h]”(hŒRequest flags (see ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ@:c:type:`enum ssam_cdev_request_flags `”h]”hÓ)�”}”(hjh]”hŒenum ssam_cdev_request_flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(hÞhߌc-type”eh"]”h$]”h&]”uh1hÒhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbhñŒssam_cdev_request_flags”uh1hh³jh´K-hjubhŒ).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jh´K-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jh´K-hjubj´ )�”}”(hŒ$``status`` Request status (output). ”h]”(jº )�”}”(hŒ ``status``”h]”hÓ)�”}”(hj_h]”hŒstatus”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj]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.h”h´K.hjYubjÔ )�”}”(hhh]”jf)�”}”(hŒRequest status (output).”h]”hŒRequest status (output).”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jth´K.hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jth´K.hjubj´ )�”}”(hŒ*``payload`` Request payload (input data). ”h]”(jº )�”}”(hŒ ``payload``”h]”hÓ)�”}”(hj˜h]”hŒpayload”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj–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.h”h´K/hj’ubjÔ )�”}”(hhh]”jf)�”}”(hŒRequest payload (input data).”h]”hŒRequest payload (input data).”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j­h´K/hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j­h´K/hjubj´ )�”}”(hŒ2``payload.data`` Pointer to request payload data. ”h]”(jº )�”}”(hŒ``payload.data``”h]”hÓ)�”}”(hjÑh]”hŒ payload.data”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjÏ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.h”h´K0hjËubjÔ )�”}”(hhh]”jf)�”}”(hŒ Pointer to request payload data.”h]”hŒ Pointer to request payload data.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jæh´K0hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jæh´K0hjubj´ )�”}”(hŒ>``payload.length`` Length of request payload data (in bytes). ”h]”(jº )�”}”(hŒ``payload.length``”h]”hÓ)�”}”(hj h]”hŒpayload.length”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubah}”(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.h”h´K1hjubjÔ )�”}”(hhh]”jf)�”}”(hŒ*Length of request payload data (in bytes).”h]”hŒ*Length of request payload data (in bytes).”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jh´K1hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jh´K1hjubj´ )�”}”(hŒ-``response`` Request response (output data). ”h]”(jº )�”}”(hŒ ``response``”h]”hÓ)�”}”(hjCh]”hŒresponse”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjAubah}”(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.h”h´K2hj=ubjÔ )�”}”(hhh]”jf)�”}”(hŒRequest response (output data).”h]”hŒRequest response (output data).”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jXh´K2hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jXh´K2hjubj´ )�”}”(hŒ.``response.data`` Pointer to response buffer. ”h]”(jº )�”}”(hŒ``response.data``”h]”hÓ)�”}”(hj|h]”hŒ response.data”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjzubah}”(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.h”h´K3hjvubjÔ )�”}”(hhh]”jf)�”}”(hŒPointer to response buffer.”h]”hŒPointer to response buffer.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j‘h´K3hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j‘h´K3hjubj´ )�”}”(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Ó)�”}”(hjµh]”hŒresponse.length”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj³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.h”h´K5hj¯ubjÔ )�”}”(hhh]”jf)�”}”(hŒ�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]”hŒ�On input: Capacity of response buffer (in bytes). On output: Length of request response (number of bytes in the buffer that are actually used).”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K4hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jÊh´K5hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hjÄ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jŽ hjß h²hh³Nh´Nubjñ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jý Œ"ssam_cdev_notifier_desc (C struct)”Œc.ssam_cdev_notifier_desc”hNt”auh1jð hjß h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒssam_cdev_notifier_desc”h]”j )�”}”(hŒstruct ssam_cdev_notifier_desc”h]”(j )�”}”(hjg h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hj h²hh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K``reg.cid_disable`` Command ID for the event-disable request. ”h]”(jº )�”}”(hŒ``reg.cid_disable``”h]”hÓ)�”}”(hj h]”hŒreg.cid_disable”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj 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.h”h´KdhjubjÔ )�”}”(hhh]”jf)�”}”(hŒ)Command ID for the event-disable request.”h]”hŒ)Command ID for the event-disable request.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j h´Kdhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j h´Kdhjubj´ )�”}”(hŒ ``id`` ID specifying the event. ”h]”(jº )�”}”(hŒ``id``”h]”hÓ)�”}”(hjDh]”hŒid”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjBubah}”(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.h”h´Kehj>ubjÔ )�”}”(hhh]”jf)�”}”(hŒID specifying the event.”h]”hŒID specifying the event.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jYh´KehjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jYh´Kehjubj´ )�”}”(hŒ<``id.target_category`` Target category of the event source. ”h]”(jº )�”}”(hŒ``id.target_category``”h]”hÓ)�”}”(hj}h]”hŒid.target_category”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj{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.h”h´KfhjwubjÔ )�”}”(hhh]”jf)�”}”(hŒ$Target category of the event source.”h]”hŒ$Target category of the event source.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j’h´Kfhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j’h´Kfhjubj´ )�”}”(hŒ1``id.instance`` Instance ID of the event source. ”h]”(jº )�”}”(hŒ``id.instance``”h]”hÓ)�”}”(hj¶h]”hŒ id.instance”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj´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.h”h´Kghj°ubjÔ )�”}”(hhh]”jf)�”}”(hŒ Instance ID of the event source.”h]”hŒ Instance ID of the event source.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jËh´KghjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jËh´Kghjubj´ )�”}”(hŒ,``flags`` Flags used for enabling the event.”h]”(jº )�”}”(hŒ ``flags``”h]”hÓ)�”}”(hjïh]”hŒflags”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjí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.h”h´KghjéubjÔ )�”}”(hhh]”jf)�”}”(hŒ"Flags used for enabling the event.”h]”hŒ"Flags used for enabling the event.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´Khhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jh´Kghjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hjÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jŽ hjß h²hh³Nh´Nubjf)�”}”(hŒ**Description**”h]”j™ )�”}”(hj2h]”hŒ Description”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j˜ hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´Kkhjß h²hubjf)�”}”(hŒDSpecifies which event should be enabled/disabled and how to do that.”h]”hŒDSpecifies which event should be enabled/disabled and how to do that.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´Khhjß h²hubjñ )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jý Œssam_cdev_event (C struct)”Œc.ssam_cdev_event”hNt”auh1jð hjß h²hh³Nh´Nubj )�”}”(hhh]”(j )�”}”(hŒssam_cdev_event”h]”j )�”}”(hŒstruct ssam_cdev_event”h]”(j )�”}”(hjg h]”hŒstruct”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j ah"]”h$]”h&]”uh1j hjlh²hh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´Kmubj% )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j1 ah"]”h$]”h&]”uh1j$ hjlh²hh³j}h´Kmubj6 )�”}”(hŒssam_cdev_event”h]”j< )�”}”(hjjh]”hŒssam_cdev_event”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jG ah"]”h$]”h&]”uh1j; hjŒubah}”(h]”h ]”(jN jO eh"]”h$]”h&]”hÅhÆuh1j5 hjlh²hh³j}h´Kmubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjY ˆuh1j jZ j[ hjhh²hh³j}h´Kmubah}”(h]”jcah ]”(j_ j` eh"]”h$]”h&]”jd ˆje )jf huh1j h³j}h´Kmhjeh²hubjh )�”}”(hhh]”jf)�”}”(hŒSSAM event sent by the EC.”h]”hŒSSAM event sent by the EC.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K|hj¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jg hjeh²hh³j}h´Kmubeh}”(h]”h ]”(hߌstruct”eh"]”h$]”h&]”jˆ hßj‰ jÊjŠ jÊj‹ ‰jŒ ‰j� ‰uh1j h²hhjß h³Nh´Nubj� )�”}”(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]”(jf)�”}”(hŒ**Definition**::”h]”(j™ )�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j˜ hjÒubhŒ:”…”�”}”(hjÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K€hjÎubjæ )�”}”(hŒ—struct ssam_cdev_event { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 length; __u8 data[]; };”h]”hŒ—struct ssam_cdev_event { __u8 target_category; __u8 target_id; __u8 command_id; __u8 instance_id; __u16 length; __u8 data[]; };”…”�”}”hjïsbah}”(h]”h ]”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.h”h´K‚hjÎubjf)�”}”(hŒ **Members**”h]”j™ )�”}”(hjh]”hŒMembers”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j˜ hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´K‹hjÎubj¯ )�”}”(hhh]”(j´ )�”}”(hŒg``target_category`` Target category of the event source. See :c:type:`enum ssam_ssh_tc `. ”h]”(jº )�”}”(hŒ``target_category``”h]”hÓ)�”}”(hjh]”hŒtarget_category”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjubah}”(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.h”h´K~hjubjÔ )�”}”(hhh]”jf)�”}”(hŒRTarget category of the event source. See :c:type:`enum ssam_ssh_tc `.”h]”(hŒ)Target category of the event source. See ”…”�”}”(hj8h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`enum ssam_ssh_tc `”h]”hÓ)�”}”(hjBh]”hŒenum ssam_ssh_tc”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”(hÞhߌc-type”eh"]”h$]”h&]”uh1hÒhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”hëŒ refdomain”hߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j:j>hñŒ ssam_ssh_tc”uh1hh³j4h´K~hj8ubhŒ.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j4h´K~hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j4h´K~hjubj´ )�”}”(hŒ-``target_id`` Target ID of the event source. ”h]”(jº )�”}”(hŒ ``target_id``”h]”hÓ)�”}”(hj{h]”hŒ target_id”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjyubah}”(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.h”h´KhjuubjÔ )�”}”(hhh]”jf)�”}”(hŒTarget ID of the event source.”h]”hŒTarget ID of the event source.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j�h´Khj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j�h´Khjubj´ )�”}”(hŒ(``command_id`` Command ID of the event. ”h]”(jº )�”}”(hŒ``command_id``”h]”hÓ)�”}”(hj´h]”hŒ command_id”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj²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.h”h´K€hj®ubjÔ )�”}”(hhh]”jf)�”}”(hŒCommand ID of the event.”h]”hŒCommand ID of the event.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jÉh´K€hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jÉh´K€hjubj´ )�”}”(hŒ1``instance_id`` Instance ID of the event source. ”h]”(jº )�”}”(hŒ``instance_id``”h]”hÓ)�”}”(hjíh]”hŒ instance_id”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhjë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.h”h´K�hjçubjÔ )�”}”(hhh]”jf)�”}”(hŒ Instance ID of the event source.”h]”hŒ Instance ID of the event source.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³jh´K�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jh´K�hjubj´ )�”}”(hŒ1``length`` Length of the event payload in bytes. ”h]”(jº )�”}”(hŒ ``length``”h]”hÓ)�”}”(hj&h]”hŒlength”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj$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.h”h´K‚hj ubjÔ )�”}”(hhh]”jf)�”}”(hŒ%Length of the event payload in bytes.”h]”hŒ%Length of the event payload in bytes.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³j;h´K‚hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³j;h´K‚hjubj´ )�”}”(hŒ``data`` Event payload data.”h]”(jº )�”}”(hŒ``data``”h]”hÓ)�”}”(hj_h]”hŒdata”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÒhj]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.h”h´K‚hjYubjÔ )�”}”(hhh]”jf)�”}”(hŒEvent payload data.”h]”hŒEvent payload data.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jeh³Œˆ/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/cdev:204: ./include/uapi/linux/surface_aggregator/cdev.h”h´Kƒhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓ hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j³ h³jth´K‚hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j® hjÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jŽ hjß h²hh³Nh´Nubeh}”(h]”jSah ]”h"]”Œstructures and enums”ah$]”h&]”uh1jNhjPh²hh³hÇh´KÊubeh}”(h]”j ah ]”h"]”Œuser-space ec interface (cdev)”ah$]”h&]”uh1jNhhh²hh³hÇh´K ubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(jSNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jÞŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÐŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”(h÷hÊj!hújKj$uŒsubstitution_names”}”(Œssam_cdev_request”h÷Œssam_cdev_request_flags”j!Œssam_cdev_event”jKuŒrefnames”}”Œrefids”}”Œnameids”}”(j«j jxjtjfj*jÜ jLj juj� j¡jý jÍjy jùjÕ j%j¤jSuŒ nametypes”}”(j«‰jx‰jf‰jÜ ‰j ‰j� ‰jý ‰jy ‰jÕ ‰j¤‰uh}”(j jPjtjÞj*j{jLjijuj˜j¡j jÍj  jùj j%j| jSjß jÿ j jX j] jjjkjpjcjhj“jŠjdjýj$jjFj=joj\j›jˆjÇj´jójàjj jMjDuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jÞK s…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.