sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftargetubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]h Client Bus and Client Device API}(hjfhhhNhNubah}(h]id4ah ]h"]h$]h&]refid client-bus-and-client-device-apiuh1jhjcubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hSerial Hub Communicationh]hSerial Hub Communication}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj+uh1hhjhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlessh_frame_type (C enum)c.ssh_frame_typehNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hssh_frame_typeh]hdesc_signature_line)}(henum ssh_frame_typeh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hssh_frame_typeh]h desc_sig_name)}(hjh]hssh_frame_type}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(hFrame types for SSH frames.h]hFrame types for SSH frames.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj'hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainjBobjtypejCdesctypejCnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Constants** ``SSH_FRAME_TYPE_DATA_SEQ`` Indicates a data frame, followed by a payload with the length specified in the ``struct ssh_frame.len`` field. This frame is sequenced, meaning that an ACK is required. ``SSH_FRAME_TYPE_DATA_NSQ`` Same as ``SSH_FRAME_TYPE_DATA_SEQ``, but unsequenced, meaning that the message does not have to be ACKed. ``SSH_FRAME_TYPE_ACK`` Indicates an ACK message. ``SSH_FRAME_TYPE_NAK`` Indicates an error response for previously sent frame. In general, this means that the frame and/or payload is malformed, e.g. a CRC is wrong. For command-type payloads, this can also mean that the command is invalid.h](h)}(h **Constants**h]hstrong)}(hjUh]h Constants}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjSubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjOubhdefinition_list)}(hhh](hdefinition_list_item)}(h``SSH_FRAME_TYPE_DATA_SEQ`` Indicates a data frame, followed by a payload with the length specified in the ``struct ssh_frame.len`` field. This frame is sequenced, meaning that an ACK is required. h](hterm)}(h``SSH_FRAME_TYPE_DATA_SEQ``h]hliteral)}(hj|h]hSSH_FRAME_TYPE_DATA_SEQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK"hjtubh definition)}(hhh]h)}(hIndicates a data frame, followed by a payload with the length specified in the ``struct ssh_frame.len`` field. This frame is sequenced, meaning that an ACK is required.h](hOIndicates a data frame, followed by a payload with the length specified in the }(hjhhhNhNubj)}(h``struct ssh_frame.len``h]hstruct ssh_frame.len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubhA field. This frame is sequenced, meaning that an ACK is required.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jrhjhK"hjoubjs)}(h``SSH_FRAME_TYPE_DATA_NSQ`` Same as ``SSH_FRAME_TYPE_DATA_SEQ``, but unsequenced, meaning that the message does not have to be ACKed. h](jy)}(h``SSH_FRAME_TYPE_DATA_NSQ``h]j)}(hjh]hSSH_FRAME_TYPE_DATA_NSQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK&hjubj)}(hhh]h)}(hiSame as ``SSH_FRAME_TYPE_DATA_SEQ``, but unsequenced, meaning that the message does not have to be ACKed.h](hSame as }(hjhhhNhNubj)}(h``SSH_FRAME_TYPE_DATA_SEQ``h]hSSH_FRAME_TYPE_DATA_SEQ}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubhF, but unsequenced, meaning that the message does not have to be ACKed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK&hjoubjs)}(h1``SSH_FRAME_TYPE_ACK`` Indicates an ACK message. h](jy)}(h``SSH_FRAME_TYPE_ACK``h]j)}(hjh]hSSH_FRAME_TYPE_ACK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK)hjubj)}(hhh]h)}(hIndicates an ACK message.h]hIndicates an ACK message.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hK)hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj-hK)hjoubjs)}(h``SSH_FRAME_TYPE_NAK`` Indicates an error response for previously sent frame. In general, this means that the frame and/or payload is malformed, e.g. a CRC is wrong. For command-type payloads, this can also mean that the command is invalid.h](jy)}(h``SSH_FRAME_TYPE_NAK``h]j)}(hjQh]hSSH_FRAME_TYPE_NAK}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjOubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK.hjKubj)}(hhh]h)}(hIndicates an error response for previously sent frame. In general, this means that the frame and/or payload is malformed, e.g. a CRC is wrong. For command-type payloads, this can also mean that the command is invalid.h]hIndicates an error response for previously sent frame. In general, this means that the frame and/or payload is malformed, e.g. a CRC is wrong. For command-type payloads, this can also mean that the command is invalid.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK,hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jrhjfhK.hjoubeh}(h]h ]h"]h$]h&]uh1jmhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_frame (C struct) c.ssh_framehNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssh_frameh]j)}(hstruct ssh_frameh](j)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK4ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK4ubj)}(h ssh_frameh]j)}(hjh]h ssh_frame}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhK4ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK4ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhK4hjhhubj&)}(hhh]h)}(hSSH communication frame.h]hSSH communication frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK5hjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhK4ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(hX**Definition**:: struct ssh_frame { u8 type; __le16 len; u8 seq; }; **Members** ``type`` The type of the frame. See :c:type:`enum ssh_frame_type `. ``len`` The length of the frame payload directly following the CRC for this frame. Does not include the final CRC for that payload. ``seq`` The sequence number for this message/exchange.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK9hj ubh literal_block)}(h>struct ssh_frame { u8 type; __le16 len; u8 seq; };h]h>struct ssh_frame { u8 type; __le16 len; u8 seq; };}hj-sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK;hj ubh)}(h **Members**h]jX)}(hj>h]hMembers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKAhj ubjn)}(hhh](js)}(hT``type`` The type of the frame. See :c:type:`enum ssh_frame_type `. h](jy)}(h``type``h]j)}(hj]h]htype}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK7hjWubj)}(hhh]h)}(hJThe type of the frame. See :c:type:`enum ssh_frame_type `.h](hThe type of the frame. See }(hjvhhhNhNubh)}(h.:c:type:`enum ssh_frame_type `h]j)}(hjh]henum ssh_frame_type}(hjhhhNhNubah}(h]h ](xrefjBc-typeeh"]h$]h&]uh1j~hj~ubah}(h]h ]h"]h$]h&]refdoc(driver-api/surface_aggregator/client-api refdomainjBreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftargetssh_frame_typeuh1hhjrhK7hjvubh.}(hjvhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhK7hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jrhjrhK7hjTubjs)}(h``len`` The length of the frame payload directly following the CRC for this frame. Does not include the final CRC for that payload. h](jy)}(h``len``h]j)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK9hjubj)}(hhh]h)}(h{The length of the frame payload directly following the CRC for this frame. Does not include the final CRC for that payload.h]h{The length of the frame payload directly following the CRC for this frame. Does not include the final CRC for that payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK9hjTubjs)}(h6``seq`` The sequence number for this message/exchange.h](jy)}(h``seq``h]j)}(hjh]hseq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK9hjubj)}(hhh]h)}(h.The sequence number for this message/exchange.h]h.The sequence number for this message/exchange.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK:hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK9hjTubeh}(h]h ]h"]h$]h&]uh1jmhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_payload_type (C enum)c.ssh_payload_typehNtauh1jhjhhhNhNubj)}(hhh](j)}(hssh_payload_typeh]j)}(henum ssh_payload_typeh](j)}(hjh]henum}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK@ubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehK@ubj)}(hssh_payload_typeh]j)}(hjRh]hssh_payload_type}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](j j eh"]h$]h&]hhuh1jhjThhhjehK@ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhjehK@ubah}(h]jKah ](jjeh"]h$]h&]j"j#)j$huh1jhjehK@hjMhhubj&)}(hhh]h)}(h#Type indicator for the SSH payload.h]h#Type indicator for the SSH payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKLhjhhubah}(h]h ]h"]h$]h&]uh1j%hjMhhhjehK@ubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(hi**Constants** ``SSH_PLD_TYPE_CMD`` The payload is a command structure with optional command payload.h](h)}(h **Constants**h]jX)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKPhjubjn)}(hhh]js)}(hV``SSH_PLD_TYPE_CMD`` The payload is a command structure with optional command payload.h](jy)}(h``SSH_PLD_TYPE_CMD``h]j)}(hjh]hSSH_PLD_TYPE_CMD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKShjubj)}(hhh]h)}(hAThe payload is a command structure with optional command payload.h]hAThe payload is a command structure with optional command payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKShjubah}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_command (C struct) c.ssh_commandhNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssh_commandh]j)}(hstruct ssh_commandh](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKYubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhjAhKYubj)}(h ssh_commandh]j)}(hj.h]h ssh_command}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](j j eh"]h$]h&]hhuh1jhj0hhhjAhKYubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj,hhhjAhKYubah}(h]j'ah ](jjeh"]h$]h&]j"j#)j$huh1jhjAhKYhj)hhubj&)}(hhh]h)}(h Payload of a command-type frame.h]h Payload of a command-type frame.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKUhjshhubah}(h]h ]h"]h$]h&]uh1j%hj)hhhjAhKYubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(hXd**Definition**:: struct ssh_command { u8 type; u8 tc; u8 tid; u8 sid; u8 iid; __le16 rqid; u8 cid; }; **Members** ``type`` The type of the payload. See :c:type:`enum ssh_payload_type `. Should be SSH_PLD_TYPE_CMD for this struct. ``tc`` Command target category. ``tid`` Target ID. Indicates the target of the message. ``sid`` Source ID. Indicates the source of the message. ``iid`` Instance ID. ``rqid`` Request ID. Used to match requests with responses and differentiate between responses and events. ``cid`` Command ID.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKYhjubj,)}(hpstruct ssh_command { u8 type; u8 tc; u8 tid; u8 sid; u8 iid; __le16 rqid; u8 cid; };h]hpstruct ssh_command { u8 type; u8 tc; u8 tid; u8 sid; u8 iid; __le16 rqid; u8 cid; };}hjsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK[hjubh)}(h **Members**h]jX)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKehjubjn)}(hhh](js)}(h``type`` The type of the payload. See :c:type:`enum ssh_payload_type `. Should be SSH_PLD_TYPE_CMD for this struct. h](jy)}(h``type``h]j)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKXhjubj)}(hhh]h)}(h|The type of the payload. See :c:type:`enum ssh_payload_type `. Should be SSH_PLD_TYPE_CMD for this struct.h](hThe type of the payload. See }(hjhhhNhNubh)}(h2:c:type:`enum ssh_payload_type `h]j)}(hjh]henum ssh_payload_type}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_payload_typeuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKWhjubh-. Should be SSH_PLD_TYPE_CMD for this struct.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKXhjubjs)}(h ``tc`` Command target category. h](jy)}(h``tc``h]j)}(hj@h]htc}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj>ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKYhj:ubj)}(hhh]h)}(hCommand target category.h]hCommand target category.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKYhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jrhjUhKYhjubjs)}(h8``tid`` Target ID. Indicates the target of the message. h](jy)}(h``tid``h]j)}(hjyh]htid}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjwubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKZhjsubj)}(hhh]h)}(h/Target ID. Indicates the target of the message.h]h/Target ID. Indicates the target of the message.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKZhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jrhjhKZhjubjs)}(h8``sid`` Source ID. Indicates the source of the message. h](jy)}(h``sid``h]j)}(hjh]hsid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK[hjubj)}(hhh]h)}(h/Source ID. Indicates the source of the message.h]h/Source ID. Indicates the source of the message.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK[hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK[hjubjs)}(h``iid`` Instance ID. h](jy)}(h``iid``h]j)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK\hjubj)}(hhh]h)}(h Instance ID.h]h Instance ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK\hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK\hjubjs)}(hk``rqid`` Request ID. Used to match requests with responses and differentiate between responses and events. h](jy)}(h``rqid``h]j)}(hj$h]hrqid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj"ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK^hjubj)}(hhh]h)}(haRequest ID. Used to match requests with responses and differentiate between responses and events.h]haRequest ID. Used to match requests with responses and differentiate between responses and events.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK]hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj9hK^hjubjs)}(h``cid`` Command ID.h](jy)}(h``cid``h]j)}(hj^h]hcid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK^hjXubj)}(hhh]h)}(h Command ID.h]h Command ID.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK_hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jrhjshK^hjubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSH_MESSAGE_LENGTH (C macro)c.SSH_MESSAGE_LENGTHhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSSH_MESSAGE_LENGTHh]j)}(hSSH_MESSAGE_LENGTHh]j)}(hSSH_MESSAGE_LENGTHh]j)}(hjh]hSSH_MESSAGE_LENGTH}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhjhKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubh)}(h%``SSH_MESSAGE_LENGTH (payload_size)``h]j)}(hjh]h!SSH_MESSAGE_LENGTH (payload_size)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubh block_quote)}(hCompute length of SSH message. h]h)}(hCompute length of SSH message.h]hCompute length of SSH message.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubah}(h]h ]h"]h$]h&]uh1j hj hKhjhhubjN)}(h**Parameters** ``payload_size`` Length of the payload inside the SSH frame. **Return** Returns the length of a SSH message with payload of specified size.h](h)}(h**Parameters**h]jX)}(hj% h]h Parameters}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj# ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubjn)}(hhh]js)}(h=``payload_size`` Length of the payload inside the SSH frame. h](jy)}(h``payload_size``h]j)}(hjD h]h payload_size}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjB ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj> ubj)}(hhh]h)}(h+Length of the payload inside the SSH frame.h]h+Length of the payload inside the SSH frame.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY hKhjZ ubah}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ]h"]h$]h&]uh1jrhjY hKhj; ubah}(h]h ]h"]h$]h&]uh1jmhj ubh)}(h **Return**h]jX)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj} ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubh)}(hCReturns the length of a SSH message with payload of specified size.h]hCReturns the length of a SSH message with payload of specified size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSH_COMMAND_MESSAGE_LENGTH (C macro)c.SSH_COMMAND_MESSAGE_LENGTHhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSSH_COMMAND_MESSAGE_LENGTHh]j)}(hSSH_COMMAND_MESSAGE_LENGTHh]j)}(hSSH_COMMAND_MESSAGE_LENGTHh]j)}(hj h]hSSH_COMMAND_MESSAGE_LENGTH}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj hKhj hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj hhhj hKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj jIj jJjKjLuh1jhhhjhNhNubh)}(h-``SSH_COMMAND_MESSAGE_LENGTH (payload_size)``h]j)}(hj h]h)SSH_COMMAND_MESSAGE_LENGTH (payload_size)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubj )}(h'Compute length of SSH command message. h]h)}(h&Compute length of SSH command message.h]h&Compute length of SSH command message.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubah}(h]h ]h"]h$]h&]uh1j hj" hKhjhhubjN)}(h**Parameters** ``payload_size`` Length of the command payload. **Return** Returns the length of a SSH command message with command payload of specified size.h](h)}(h**Parameters**h]jX)}(hj/ h]h Parameters}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj- ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj) ubjn)}(hhh]js)}(h0``payload_size`` Length of the command payload. h](jy)}(h``payload_size``h]j)}(hjN h]h payload_size}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjL ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjH ubj)}(hhh]h)}(hLength of the command payload.h]hLength of the command payload.}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc hKhjd ubah}(h]h ]h"]h$]h&]uh1jhjH ubeh}(h]h ]h"]h$]h&]uh1jrhjc hKhjE ubah}(h]h ]h"]h$]h&]uh1jmhj) ubh)}(h **Return**h]jX)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj) ubh)}(hSReturns the length of a SSH command message with command payload of specified size.h]hSReturns the length of a SSH command message with command payload of specified size.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj) ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSH_MSGOFFSET_FRAME (C macro)c.SSH_MSGOFFSET_FRAMEhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSSH_MSGOFFSET_FRAMEh]j)}(hSSH_MSGOFFSET_FRAMEh]j)}(hSSH_MSGOFFSET_FRAMEh]j)}(hj h]hSSH_MSGOFFSET_FRAME}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj hKhj hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj hhhj hKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj jIj jJjKjLuh1jhhhjhNhNubh)}(h``SSH_MSGOFFSET_FRAME (field)``h]j)}(hj h]hSSH_MSGOFFSET_FRAME (field)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubj )}(h;Compute offset in SSH message to specified field in frame. h]h)}(h:Compute offset in SSH message to specified field in frame.h]h:Compute offset in SSH message to specified field in frame.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubah}(h]h ]h"]h$]h&]uh1j hj, hKhjhhubjN)}(hX**Parameters** ``field`` The field for which the offset should be computed. **Return** Returns the offset of the specified :c:type:`struct ssh_frame ` field in the raw SSH message data as. Takes SYN bytes (u16) preceding the frame into account.h](h)}(h**Parameters**h]jX)}(hj9 h]h Parameters}(hj; hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj7 ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj3 ubjn)}(hhh]js)}(h=``field`` The field for which the offset should be computed. h](jy)}(h ``field``h]j)}(hjX h]hfield}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjV ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjR ubj)}(hhh]h)}(h2The field for which the offset should be computed.h]h2The field for which the offset should be computed.}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm hKhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1jrhjm hKhjO ubah}(h]h ]h"]h$]h&]uh1jmhj3 ubh)}(h **Return**h]jX)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj3 ubh)}(hReturns the offset of the specified :c:type:`struct ssh_frame ` field in the raw SSH message data as. Takes SYN bytes (u16) preceding the frame into account.h](h$Returns the offset of the specified }(hj hhhNhNubh)}(h&:c:type:`struct ssh_frame `h]j)}(hj h]hstruct ssh_frame}(hj hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_frameuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubh^ field in the raw SSH message data as. Takes SYN bytes (u16) preceding the frame into account.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj3 ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSH_MSGOFFSET_COMMAND (C macro)c.SSH_MSGOFFSET_COMMANDhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSSH_MSGOFFSET_COMMANDh]j)}(hSSH_MSGOFFSET_COMMANDh]j)}(hSSH_MSGOFFSET_COMMANDh]j)}(hj h]hSSH_MSGOFFSET_COMMAND}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj hKhj hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj hhhj hKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj+ jIj+ jJjKjLuh1jhhhjhNhNubh)}(h!``SSH_MSGOFFSET_COMMAND (field)``h]j)}(hj1 h]hSSH_MSGOFFSET_COMMAND (field)}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj/ ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubj )}(h=Compute offset in SSH message to specified field in command. h]h)}(h` field in the raw SSH message data. Takes SYN bytes (u16) preceding the frame and the frame CRC (u16) between frame and command into account.h](h)}(h**Parameters**h]jX)}(hjf h]h Parameters}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjd ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj` ubjn)}(hhh]js)}(h=``field`` The field for which the offset should be computed. h](jy)}(h ``field``h]j)}(hj h]hfield}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubj)}(hhh]h)}(h2The field for which the offset should be computed.h]h2The field for which the offset should be computed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj hKhj| ubah}(h]h ]h"]h$]h&]uh1jmhj` ubh)}(h **Return**h]jX)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj` ubh)}(hReturns the offset of the specified :c:type:`struct ssh_command ` field in the raw SSH message data. Takes SYN bytes (u16) preceding the frame and the frame CRC (u16) between frame and command into account.h](h$Returns the offset of the specified }(hj hhhNhNubh)}(h*:c:type:`struct ssh_command `h]j)}(hj h]hstruct ssh_command}(hj hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_commanduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj ubh field in the raw SSH message data. Takes SYN bytes (u16) preceding the frame and the frame CRC (u16) between frame and command into account.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhj` ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_crc (C function) c.ssh_crchNtauh1jhjhhhNhNubj)}(hhh](j)}(h'u16 ssh_crc (const u8 *buf, size_t len)h]j)}(h&u16 ssh_crc(const u8 *buf, size_t len)h](h)}(hhh]j)}(hu16h]hu16}(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj( ubah}(h]h ]h"]h$]h&] refdomainjBreftype identifier reftargetj- modnameN classnameNjj)}j]j ASTIdentifier)}jA ssh_crcsb c.ssh_crcasbuh1hhj$ hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubj)}(h h]h }(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ hhhjO hKubj)}(hssh_crch]j)}(hjL h]hssh_crc}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj$ hhhjO hKubhdesc_parameterlist)}(h(const u8 *buf, size_t len)h](hdesc_parameter)}(h const u8 *bufh](j)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} ubh)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj modnameN classnameNjj)}j]jJ c.ssh_crcasbuh1hhj} ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj} ubj)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjw ubj| )}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj modnameN classnameNjj)}j]jJ c.ssh_crcasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlenh]hlen}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjw ubeh}(h]h ]h"]h$]h&]hhuh1ju hj$ hhhjO hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhjO hKubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhjO hKhj hhubj&)}(hhh]h)}(hCompute CRC for SSH messages.h]hCompute CRC for SSH messages.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjLhhubah}(h]h ]h"]h$]h&]uh1j%hj hhhjO hKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjgjIjgjJjKjLuh1jhhhjhNhNubjN)}(hX**Parameters** ``const u8 *buf`` The pointer pointing to the data for which the CRC should be computed. ``size_t len`` The length of the data for which the CRC should be computed. **Return** Returns the CRC computed on the provided data, as used for SSH messages.h](h)}(h**Parameters**h]jX)}(hjqh]h Parameters}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjoubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjkubjn)}(hhh](js)}(hY``const u8 *buf`` The pointer pointing to the data for which the CRC should be computed. h](jy)}(h``const u8 *buf``h]j)}(hjh]h const u8 *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hFThe pointer pointing to the data for which the CRC should be computed.h]hFThe pointer pointing to the data for which the CRC should be computed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubjs)}(hL``size_t len`` The length of the data for which the CRC should be computed. h](jy)}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hhhubj&)}(hhh]h)}(h!Return the next valid request ID.h]h!Return the next valid request ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hj>hhhjmhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj jIj jJjKjLuh1jhhhjhNhNubjN)}(h**Parameters** ``u16 rqid`` The current request ID. **Return** Returns the next valid request ID, following the current request ID provided to this function. This function skips any request IDs reserved for events.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubjn)}(hhh]js)}(h%``u16 rqid`` The current request ID. h](jy)}(h ``u16 rqid``h]j)}(hj5h]hu16 rqid}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj3ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj/ubj)}(hhh]h)}(hThe current request ID.h]hThe current request ID.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhKhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jrhjJhKhj,ubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h **Return**h]jX)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubh)}(hReturns the next valid request ID, following the current request ID provided to this function. This function skips any request IDs reserved for events.h]hReturns the next valid request ID, following the current request ID provided to this function. This function skips any request IDs reserved for events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_rqid_to_event (C function)c.ssh_rqid_to_eventhNtauh1jhjhhhNhNubj)}(hhh](j)}(h u16 ssh_rqid_to_event (u16 rqid)h]j)}(hu16 ssh_rqid_to_event(u16 rqid)h](h)}(hhh]j)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA ssh_rqid_to_eventsbc.ssh_rqid_to_eventasbuh1hhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hssh_rqid_to_eventh]j)}(hjh]hssh_rqid_to_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhKubjv )}(h (u16 rqid)h]j| )}(hu16 rqidh](h)}(hhh]j)}(hu16h]hu16}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj modnameN classnameNjj)}j]jc.ssh_rqid_to_eventasbuh1hhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hrqidh]hrqid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhjhhubj&)}(hhh]h)}(h1Convert request ID to its corresponding event ID.h]h1Convert request ID to its corresponding event ID.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj]hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjxjIjxjJjKjLuh1jhhhjhNhNubjN)}(h9**Parameters** ``u16 rqid`` The request ID to convert.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj|ubjn)}(hhh]js)}(h'``u16 rqid`` The request ID to convert.h](jy)}(h ``u16 rqid``h]j)}(hjh]hu16 rqid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hThe request ID to convert.h]hThe request ID to convert.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubah}(h]h ]h"]h$]h&]uh1jmhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_rqid_is_event (C function)c.ssh_rqid_is_eventhNtauh1jhjhhhNhNubj)}(hhh](j)}(h!bool ssh_rqid_is_event (u16 rqid)h]j)}(h bool ssh_rqid_is_event(u16 rqid)h](hdesc_sig_keyword_type)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubj)}(hssh_rqid_is_eventh]j)}(hssh_rqid_is_eventh]hssh_rqid_is_event}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhj hKubjv )}(h (u16 rqid)h]j| )}(hu16 rqidh](h)}(hhh]j)}(hu16h]hu16}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj@modnameN classnameNjj)}j]jI )}jA j!sbc.ssh_rqid_is_eventasbuh1hhj7ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubj)}(hrqidh]hrqid}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj3ubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj hKhjhhubj&)}(hhh]h)}(h.Check if given request ID is a valid event ID.h]h.Check if given request ID is a valid event ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj hKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(h7**Parameters** ``u16 rqid`` The request ID to check.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubjn)}(hhh]js)}(h%``u16 rqid`` The request ID to check.h](jy)}(h ``u16 rqid``h]j)}(hjh]hu16 rqid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hThe request ID to check.h]hThe request ID to check.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubah}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_tc_to_rqid (C function)c.ssh_tc_to_rqidhNtauh1jhjhhhNhNubj)}(hhh](j)}(hu16 ssh_tc_to_rqid (u8 tc)h]j)}(hu16 ssh_tc_to_rqid(u8 tc)h](h)}(hhh]j)}(hu16h]hu16}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj6modnameN classnameNjj)}j]jI )}jA ssh_tc_to_rqidsbc.ssh_tc_to_rqidasbuh1hhj-hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhjUhKubj)}(hssh_tc_to_rqidh]j)}(hjRh]hssh_tc_to_rqid}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](j j eh"]h$]h&]hhuh1jhj-hhhjUhKubjv )}(h(u8 tc)h]j| )}(hu8 tch](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jPc.ssh_tc_to_rqidasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htch]htc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj{ubah}(h]h ]h"]h$]h&]hhuh1ju hj-hhhjUhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj)hhhjUhKubah}(h]j$ah ](jjeh"]h$]h&]j"j#)j$huh1jhjUhKhj&hhubj&)}(hhh]h)}(h8Convert target category to its corresponding request ID.h]h8Convert target category to its corresponding request ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hj&hhhjUhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(h;**Parameters** ``u8 tc`` The target category to convert.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubjn)}(hhh]js)}(h)``u8 tc`` The target category to convert.h](jy)}(h ``u8 tc``h]j)}(hjh]hu8 tc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hThe target category to convert.h]hThe target category to convert.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj2hKhjubah}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_tid_to_index (C function)c.ssh_tid_to_indexhNtauh1jhjhhhNhNubj)}(hhh](j)}(hu8 ssh_tid_to_index (u8 tid)h]j)}(hu8 ssh_tid_to_index(u8 tid)h](h)}(hhh]j)}(hu8h]hu8}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj|modnameN classnameNjj)}j]jI )}jA ssh_tid_to_indexsbc.ssh_tid_to_indexasbuh1hhjshhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhKubj)}(hssh_tid_to_indexh]j)}(hjh]hssh_tid_to_index}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjshhhjhKubjv )}(h(u8 tid)h]j| )}(hu8 tidh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssh_tid_to_indexasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htidh]htid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjshhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjohhhjhKubah}(h]jjah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhjlhhubj&)}(hhh]h)}(h4Convert target ID to its corresponding target index.h]h4Convert target ID to its corresponding target index.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hjlhhhjhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj:jIj:jJjKjLuh1jhhhjhNhNubjN)}(h6**Parameters** ``u8 tid`` The target ID to convert.h](h)}(h**Parameters**h]jX)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjBubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj>ubjn)}(hhh]js)}(h$``u8 tid`` The target ID to convert.h](jy)}(h ``u8 tid``h]j)}(hjch]hu8 tid}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj]ubj)}(hhh]h)}(hThe target ID to convert.h]hThe target ID to convert.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jrhjxhMhjZubah}(h]h ]h"]h$]h&]uh1jmhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_tid_is_valid (C function)c.ssh_tid_is_validhNtauh1jhjhhhNhNubj)}(hhh](j)}(hbool ssh_tid_is_valid (u8 tid)h]j)}(hbool ssh_tid_is_valid(u8 tid)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hssh_tid_is_validh]j)}(hssh_tid_is_validh]hssh_tid_is_valid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(h(u8 tid)h]j| )}(hu8 tidh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jsbc.ssh_tid_is_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htidh]htid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(h&Check if target ID is valid/supported.h]h&Check if target ID is valid/supported.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjQhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjljIjljJjKjLuh1jhhhjhNhNubjN)}(h4**Parameters** ``u8 tid`` The target ID to check.h](h)}(h**Parameters**h]jX)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjtubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjpubjn)}(hhh]js)}(h"``u8 tid`` The target ID to check.h](jy)}(h ``u8 tid``h]j)}(hjh]hu8 tid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM hjubj)}(hhh]h)}(hThe target ID to check.h]hThe target ID to check.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhM hjubah}(h]h ]h"]h$]h&]uh1jmhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_span (C struct) c.ssam_spanhNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssam_spanh]j)}(hstruct ssam_spanh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h ssam_spanh]j)}(hjh]h ssam_span}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhM hjhhubj&)}(hhh]h)}(hReference to a buffer region.h]hReference to a buffer region.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM hj.hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhM ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjIjIjIjJjKjLuh1jhhhjhNhNubjN)}(h**Definition**:: struct ssam_span { u8 *ptr; size_t len; }; **Members** ``ptr`` Pointer to the buffer region. ``len`` Length of the buffer region.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjQubh:}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjMubj,)}(h2struct ssam_span { u8 *ptr; size_t len; };h]h2struct ssam_span { u8 *ptr; size_t len; };}hjnsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjMubh)}(h **Members**h]jX)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj}ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjMubjn)}(hhh](js)}(h&``ptr`` Pointer to the buffer region. h](jy)}(h``ptr``h]j)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubj)}(hhh]h)}(hPointer to the buffer region.h]hPointer to the buffer region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h$``len`` Length of the buffer region.h](jy)}(h``len``h]j)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubj)}(hhh]h)}(hLength of the buffer region.h]hLength of the buffer region.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjhhubh)}(hA reference to a (non-owned) buffer segment, consisting of pointer and length. Use of this struct indicates non-owned data, i.e. data of which the life-time is managed (i.e. it is allocated/freed) via another pointer.h]hA reference to a (non-owned) buffer segment, consisting of pointer and length. Use of this struct indicates non-owned data, i.e. data of which the life-time is managed (i.e. it is allocated/freed) via another pointer.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_ssh_tid (C enum)c.ssam_ssh_tidhNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssam_ssh_tidh]j)}(henum ssam_ssh_tidh](j)}(hjh]henum}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehMubj)}(h ssam_ssh_tidh]j)}(hjRh]h ssam_ssh_tid}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](j j eh"]h$]h&]hhuh1jhjThhhjehMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhjehMubah}(h]jKah ](jjeh"]h$]h&]j"j#)j$huh1jhjehMhjMhhubj&)}(hhh]h)}(h*Target/source IDs for Serial Hub messages.h]h*Target/source IDs for Serial Hub messages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j%hjMhhhjehMubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(hX**Constants** ``SSAM_SSH_TID_HOST`` We as the kernel Serial Hub driver. ``SSAM_SSH_TID_SAM`` The Surface Aggregator EC. ``SSAM_SSH_TID_KIP`` Keyboard and perihperal controller. ``SSAM_SSH_TID_DEBUG`` Debug connector. ``SSAM_SSH_TID_SURFLINK`` SurfLink connector.h](h)}(h **Constants**h]jX)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubjn)}(hhh](js)}(h:``SSAM_SSH_TID_HOST`` We as the kernel Serial Hub driver. h](jy)}(h``SSAM_SSH_TID_HOST``h]j)}(hjh]hSSAM_SSH_TID_HOST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM!hjubj)}(hhh]h)}(h#We as the kernel Serial Hub driver.h]h#We as the kernel Serial Hub driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhM!hjubjs)}(h0``SSAM_SSH_TID_SAM`` The Surface Aggregator EC. h](jy)}(h``SSAM_SSH_TID_SAM``h]j)}(hjh]hSSAM_SSH_TID_SAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM$hjubj)}(hhh]h)}(hThe Surface Aggregator EC.h]hThe Surface Aggregator EC.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM$hj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj)hM$hjubjs)}(h9``SSAM_SSH_TID_KIP`` Keyboard and perihperal controller. h](jy)}(h``SSAM_SSH_TID_KIP``h]j)}(hjMh]hSSAM_SSH_TID_KIP}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjKubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM'hjGubj)}(hhh]h)}(h#Keyboard and perihperal controller.h]h#Keyboard and perihperal controller.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM'hjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jrhjbhM'hjubjs)}(h(``SSAM_SSH_TID_DEBUG`` Debug connector. h](jy)}(h``SSAM_SSH_TID_DEBUG``h]j)}(hjh]hSSAM_SSH_TID_DEBUG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM*hjubj)}(hhh]h)}(hDebug connector.h]hDebug connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhM*hjubjs)}(h-``SSAM_SSH_TID_SURFLINK`` SurfLink connector.h](jy)}(h``SSAM_SSH_TID_SURFLINK``h]j)}(hjh]hSSAM_SSH_TID_SURFLINK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM,hjubj)}(hhh]h)}(hSurfLink connector.h]hSurfLink connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhM,hjubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_packet_base_priority (C enum)c.ssh_packet_base_priorityhNtauh1jhjhhhNhNubj)}(hhh](j)}(hssh_packet_base_priorityh]j)}(henum ssh_packet_base_priorityh](j)}(hjh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM2ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj&hM2ubj)}(hssh_packet_base_priorityh]j)}(hjh]hssh_packet_base_priority}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhj&hM2ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj&hM2ubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj&hM2hjhhubj&)}(hhh]h)}(h=Base priorities for :c:type:`struct ssh_packet `.h](hBase priorities for }(hj[hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]j)}(hjeh]hstruct ssh_packet}(hjghhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjcubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjj)}j]jI )}jA jsbc.ssh_packet_base_priorityasbj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMbhjXhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj&hM2ubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(hX**Constants** ``SSH_PACKET_PRIORITY_FLUSH`` Base priority for flush packets. ``SSH_PACKET_PRIORITY_DATA`` Base priority for normal data packets. ``SSH_PACKET_PRIORITY_NAK`` Base priority for NAK packets. ``SSH_PACKET_PRIORITY_ACK`` Base priority for ACK packets.h](h)}(h **Constants**h]jX)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMfhjubjn)}(hhh](js)}(h?``SSH_PACKET_PRIORITY_FLUSH`` Base priority for flush packets. h](jy)}(h``SSH_PACKET_PRIORITY_FLUSH``h]j)}(hjh]hSSH_PACKET_PRIORITY_FLUSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMihjubj)}(hhh]h)}(h Base priority for flush packets.h]h Base priority for flush packets.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMihjubjs)}(hD``SSH_PACKET_PRIORITY_DATA`` Base priority for normal data packets. h](jy)}(h``SSH_PACKET_PRIORITY_DATA``h]j)}(hjh]hSSH_PACKET_PRIORITY_DATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMlhjubj)}(hhh]h)}(h&Base priority for normal data packets.h]h&Base priority for normal data packets.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMlhjubjs)}(h;``SSH_PACKET_PRIORITY_NAK`` Base priority for NAK packets. h](jy)}(h``SSH_PACKET_PRIORITY_NAK``h]j)}(hj9h]hSSH_PACKET_PRIORITY_NAK}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj7ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMohj3ubj)}(hhh]h)}(hBase priority for NAK packets.h]hBase priority for NAK packets.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMohjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jrhjNhMohjubjs)}(h:``SSH_PACKET_PRIORITY_ACK`` Base priority for ACK packets.h](jy)}(h``SSH_PACKET_PRIORITY_ACK``h]j)}(hjrh]hSSH_PACKET_PRIORITY_ACK}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMqhjlubj)}(hhh]h)}(hBase priority for ACK packets.h]hBase priority for ACK packets.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMrhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jrhjhMqhjubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSH_PACKET_PRIORITY (C macro)c.SSH_PACKET_PRIORITYhNtauh1jhjhhhNhNubj)}(hhh](j)}(hSSH_PACKET_PRIORITYh]j)}(hSSH_PACKET_PRIORITYh]j)}(hSSH_PACKET_PRIORITYh]j)}(hjh]hSSH_PACKET_PRIORITY}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMvubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMvubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMvhjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhjhMvubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubh)}(h#``SSH_PACKET_PRIORITY (base, try)``h]j)}(hjh]hSSH_PACKET_PRIORITY (base, try)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMxhjhhubj )}(h@Compute packet priority from base priority and number of tries. h]h)}(h?Compute packet priority from base priority and number of tries.h]h?Compute packet priority from base priority and number of tries.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMvhjubah}(h]h ]h"]h$]h&]uh1j hj*hMvhjhhubjN)}(hXr**Parameters** ``base`` The base priority as suffix of :c:type:`enum ssh_packet_base_priority `, e.g. ``FLUSH``, ``DATA``, ``ACK``, or ``NAK``. ``try`` The number of tries (must be less than 16). **Description** Compute the combined packet priority. The combined priority is dominated by the base priority, whereas the number of (re-)tries decides the precedence of packets with the same base priority, giving higher priority to packets that already have more tries. **Return** Returns the computed priority as value fitting inside a :c:type:`u8`. A higher number means a higher priority.h](h)}(h**Parameters**h]jX)}(hj7h]h Parameters}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj5ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMzhj1ubjn)}(hhh](js)}(h``base`` The base priority as suffix of :c:type:`enum ssh_packet_base_priority `, e.g. ``FLUSH``, ``DATA``, ``ACK``, or ``NAK``. h](jy)}(h``base``h]j)}(hjVh]hbase}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjTubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMyhjPubj)}(hhh]h)}(hThe base priority as suffix of :c:type:`enum ssh_packet_base_priority `, e.g. ``FLUSH``, ``DATA``, ``ACK``, or ``NAK``.h](hThe base priority as suffix of }(hjohhhNhNubh)}(hB:c:type:`enum ssh_packet_base_priority `h]j)}(hjyh]henum ssh_packet_base_priority}(hj{hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjwubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_packet_base_priorityuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMxhjoubh, e.g. }(hjohhhNhNubj)}(h ``FLUSH``h]hFLUSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjoubh, }(hjohhhNhNubj)}(h``DATA``h]hDATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjoubh, }hjosbj)}(h``ACK``h]hACK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjoubh, or }(hjohhhNhNubj)}(h``NAK``h]hNAK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjoubh.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMxhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jrhjkhMyhjMubjs)}(h4``try`` The number of tries (must be less than 16). h](jy)}(h``try``h]j)}(hjh]htry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMzhjubj)}(hhh]h)}(h+The number of tries (must be less than 16).h]h+The number of tries (must be less than 16).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMzhjMubeh}(h]h ]h"]h$]h&]uh1jmhj1ubh)}(h**Description**h]jX)}(hj6h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj4ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM|hj1ubh)}(hCompute the combined packet priority. The combined priority is dominated by the base priority, whereas the number of (re-)tries decides the precedence of packets with the same base priority, giving higher priority to packets that already have more tries.h]hCompute the combined packet priority. The combined priority is dominated by the base priority, whereas the number of (re-)tries decides the precedence of packets with the same base priority, giving higher priority to packets that already have more tries.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM{hj1ubh)}(h **Return**h]jX)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1ubh)}(hnReturns the computed priority as value fitting inside a :c:type:`u8`. A higher number means a higher priority.h](h8Returns the computed priority as value fitting inside a }(hjshhhNhNubh)}(h :c:type:`u8`h]j)}(hj}h]hu8}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj{ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjsubh*. A higher number means a higher priority.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ssh_packet_priority_get_try (C function)c.ssh_packet_priority_get_tryhNtauh1jhjhhhNhNubj)}(hhh](j)}(h,u8 ssh_packet_priority_get_try (u8 priority)h]j)}(h+u8 ssh_packet_priority_get_try(u8 priority)h](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA ssh_packet_priority_get_trysbc.ssh_packet_priority_get_tryasbuh1hhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hssh_packet_priority_get_tryh]j)}(hjh]hssh_packet_priority_get_try}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(h (u8 priority)h]j| )}(h u8 priorityh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssh_packet_priority_get_tryasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpriorityh]hpriority}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(h)Get number of tries from packet priority.h]h)Get number of tries from packet priority.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjmhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(h**Parameters** ``u8 priority`` The packet priority. **Return** Returns the number of tries encoded in the specified packet priority.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubjn)}(hhh]js)}(h%``u8 priority`` The packet priority. h](jy)}(h``u8 priority``h]j)}(hjh]h u8 priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubj)}(hhh]h)}(hThe packet priority.h]hThe packet priority.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubh)}(hEReturns the number of tries encoded in the specified packet priority.h]hEReturns the number of tries encoded in the specified packet priority.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ssh_packet_priority_get_base (C function)c.ssh_packet_priority_get_basehNtauh1jhjhhhNhNubj)}(hhh](j)}(h-u8 ssh_packet_priority_get_base (u8 priority)h]j)}(h,u8 ssh_packet_priority_get_base(u8 priority)h](h)}(hhh]j)}(hu8h]hu8}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj6modnameN classnameNjj)}j]jI )}jA ssh_packet_priority_get_basesbc.ssh_packet_priority_get_baseasbuh1hhj-hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhhjUhMubj)}(hssh_packet_priority_get_baseh]j)}(hjRh]hssh_packet_priority_get_base}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](j j eh"]h$]h&]hhuh1jhj-hhhjUhMubjv )}(h (u8 priority)h]j| )}(h u8 priorityh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jPc.ssh_packet_priority_get_baseasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpriorityh]hpriority}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj{ubah}(h]h ]h"]h$]h&]hhuh1ju hj-hhhjUhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj)hhhjUhMubah}(h]j$ah ](jjeh"]h$]h&]j"j#)j$huh1jhjUhMhj&hhubj&)}(hhh]h)}(h'Get base priority from packet priority.h]h'Get base priority from packet priority.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjhhubah}(h]h ]h"]h$]h&]uh1j%hj&hhhjUhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhjhNhNubjN)}(h**Parameters** ``u8 priority`` The packet priority. **Return** Returns the base priority encoded in the given packet priority.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubjn)}(hhh]js)}(h%``u8 priority`` The packet priority. h](jy)}(h``u8 priority``h]j)}(hj h]h u8 priority}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj ubj)}(hhh]h)}(hThe packet priority.h]hThe packet priority.}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hMhj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj2 hMhj ubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h **Return**h]jX)}(hjX h]hReturn}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjV ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubh)}(h?Returns the base priority encoded in the given packet priority.h]h?Returns the base priority encoded in the given packet priority.}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_packet_ops (C struct)c.ssh_packet_opshNtauh1jhjhhhNhNubj)}(hhh](j)}(hssh_packet_opsh]j)}(hstruct ssh_packet_opsh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMubj)}(hssh_packet_opsh]j)}(hj h]hssh_packet_ops}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj hMhj hhubj&)}(hhh]h)}(h%Callback operations for a SSH packet.h]h%Callback operations for a SSH packet.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj hhubah}(h]h ]h"]h$]h&]uh1j%hj hhhj hMubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj jIj jJjKjLuh1jhhhjhNhNubjN)}(hX**Definition**:: struct ssh_packet_ops { void (*release)(struct ssh_packet *p); void (*complete)(struct ssh_packet *p, int status); }; **Members** ``release`` Function called when the packet reference count reaches zero. This callback must be relied upon to ensure that the packet has left the transport system(s). ``complete`` Function called when the packet is completed, either with success or failure. In case of failure, the reason for the failure is indicated by the value of the provided status code argument. This value will be zero in case of success. Note that a call to this callback does not guarantee that the packet is not in use by the transport system any more.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubh:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj ubj,)}(h}struct ssh_packet_ops { void (*release)(struct ssh_packet *p); void (*complete)(struct ssh_packet *p, int status); };h]h}struct ssh_packet_ops { void (*release)(struct ssh_packet *p); void (*complete)(struct ssh_packet *p, int status); };}hj!sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj ubh)}(h **Members**h]jX)}(hj-!h]hMembers}(hj/!hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+!ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj ubjn)}(hhh](js)}(h``release`` Function called when the packet reference count reaches zero. This callback must be relied upon to ensure that the packet has left the transport system(s). h](jy)}(h ``release``h]j)}(hjL!h]hrelease}(hjN!hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjJ!ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjF!ubj)}(hhh]h)}(hFunction called when the packet reference count reaches zero. This callback must be relied upon to ensure that the packet has left the transport system(s).h]hFunction called when the packet reference count reaches zero. This callback must be relied upon to ensure that the packet has left the transport system(s).}(hje!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjb!ubah}(h]h ]h"]h$]h&]uh1jhjF!ubeh}(h]h ]h"]h$]h&]uh1jrhja!hMhjC!ubjs)}(hXj``complete`` Function called when the packet is completed, either with success or failure. In case of failure, the reason for the failure is indicated by the value of the provided status code argument. This value will be zero in case of success. Note that a call to this callback does not guarantee that the packet is not in use by the transport system any more.h](jy)}(h ``complete``h]j)}(hj!h]hcomplete}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj!ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj!ubj)}(hhh]h)}(hX]Function called when the packet is completed, either with success or failure. In case of failure, the reason for the failure is indicated by the value of the provided status code argument. This value will be zero in case of success. Note that a call to this callback does not guarantee that the packet is not in use by the transport system any more.h]hX]Function called when the packet is completed, either with success or failure. In case of failure, the reason for the failure is indicated by the value of the provided status code argument. This value will be zero in case of success. Note that a call to this callback does not guarantee that the packet is not in use by the transport system any more.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jrhj!hMhjC!ubeh}(h]h ]h"]h$]h&]uh1jmhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_packet (C struct) c.ssh_packethNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssh_packeth]j)}(hstruct ssh_packeth](j)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhj!hMubj)}(h ssh_packeth]j)}(hj!h]h ssh_packet}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj!hhhj!hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj!hhhj!hMubah}(h]j!ah ](jjeh"]h$]h&]j"j#)j$huh1jhj!hMhj!hhubj&)}(hhh]h)}(hSSH transport packet.h]hSSH transport packet.}(hj""hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj"hhubah}(h]h ]h"]h$]h&]uh1j%hj!hhhj!hMubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj:"jIj:"jJjKjLuh1jhhhjhNhNubjN)}(hX**Definition**:: struct ssh_packet { struct ssh_ptl *ptl; struct kref refcnt; u8 priority; struct { size_t len; u8 *ptr; } data; unsigned long state; ktime_t timestamp; struct list_head queue_node; struct list_head pending_node; const struct ssh_packet_ops *ops; }; **Members** ``ptl`` Pointer to the packet transport layer. May be ``NULL`` if the packet (or enclosing request) has not been submitted yet. ``refcnt`` Reference count of the packet. ``priority`` Priority of the packet. Must be computed via SSH_PACKET_PRIORITY(). Must only be accessed while holding the queue lock after first submission. ``data`` Raw message data. ``data.len`` Length of the raw message data. ``data.ptr`` Pointer to the raw message data buffer. ``state`` State and type flags describing current packet state (dynamic) and type (static). See :c:type:`enum ssh_packet_flags ` for possible options. ``timestamp`` Timestamp specifying when the latest transmission of a currently pending packet has been started. May be ``KTIME_MAX`` before or in-between transmission attempts. Used for the packet timeout implementation. Must only be accessed while holding the pending lock after first submission. ``queue_node`` The list node for the packet queue. ``pending_node`` The list node for the set of pending packets. ``ops`` Packet operations.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjF"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjB"ubh:}(hjB"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj>"ubj,)}(hX0struct ssh_packet { struct ssh_ptl *ptl; struct kref refcnt; u8 priority; struct { size_t len; u8 *ptr; } data; unsigned long state; ktime_t timestamp; struct list_head queue_node; struct list_head pending_node; const struct ssh_packet_ops *ops; };h]hX0struct ssh_packet { struct ssh_ptl *ptl; struct kref refcnt; u8 priority; struct { size_t len; u8 *ptr; } data; unsigned long state; ktime_t timestamp; struct list_head queue_node; struct list_head pending_node; const struct ssh_packet_ops *ops; };}hj_"sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj>"ubh)}(h **Members**h]jX)}(hjp"h]hMembers}(hjr"hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjn"ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj>"ubjn)}(hhh](js)}(h``ptl`` Pointer to the packet transport layer. May be ``NULL`` if the packet (or enclosing request) has not been submitted yet. h](jy)}(h``ptl``h]j)}(hj"h]hptl}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj"ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj"ubj)}(hhh]h)}(hwPointer to the packet transport layer. May be ``NULL`` if the packet (or enclosing request) has not been submitted yet.h](h.Pointer to the packet transport layer. May be }(hj"hhhNhNubj)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj"ubhA if the packet (or enclosing request) has not been submitted yet.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jrhj"hMhj"ubjs)}(h*``refcnt`` Reference count of the packet. h](jy)}(h ``refcnt``h]j)}(hj"h]hrefcnt}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj"ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj"ubj)}(hhh]h)}(hReference count of the packet.h]hReference count of the packet.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jrhj"hMhj"ubjs)}(h``priority`` Priority of the packet. Must be computed via SSH_PACKET_PRIORITY(). Must only be accessed while holding the queue lock after first submission. h](jy)}(h ``priority``h]j)}(hj#h]hpriority}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj#ubj)}(hhh]h)}(hPriority of the packet. Must be computed via SSH_PACKET_PRIORITY(). Must only be accessed while holding the queue lock after first submission.h]hPriority of the packet. Must be computed via SSH_PACKET_PRIORITY(). Must only be accessed while holding the queue lock after first submission.}(hj-#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj*#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jrhj)#hMhj"ubjs)}(h``data`` Raw message data. h](jy)}(h``data``h]j)}(hjN#h]hdata}(hjP#hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjL#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjH#ubj)}(hhh]h)}(hRaw message data.h]hRaw message data.}(hjg#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc#hMhjd#ubah}(h]h ]h"]h$]h&]uh1jhjH#ubeh}(h]h ]h"]h$]h&]uh1jrhjc#hMhj"ubjs)}(h-``data.len`` Length of the raw message data. h](jy)}(h ``data.len``h]j)}(hj#h]hdata.len}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj#ubj)}(hhh]h)}(hLength of the raw message data.h]hLength of the raw message data.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jrhj#hMhj"ubjs)}(h5``data.ptr`` Pointer to the raw message data buffer. h](jy)}(h ``data.ptr``h]j)}(hj#h]hdata.ptr}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj#ubj)}(hhh]h)}(h'Pointer to the raw message data buffer.h]h'Pointer to the raw message data buffer.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jrhj#hMhj"ubjs)}(h``state`` State and type flags describing current packet state (dynamic) and type (static). See :c:type:`enum ssh_packet_flags ` for possible options. h](jy)}(h ``state``h]j)}(hj#h]hstate}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj#ubj)}(hhh]h)}(hState and type flags describing current packet state (dynamic) and type (static). See :c:type:`enum ssh_packet_flags ` for possible options.h](hVState and type flags describing current packet state (dynamic) and type (static). See }(hj$hhhNhNubh)}(h2:c:type:`enum ssh_packet_flags `h]j)}(hj$h]henum ssh_packet_flags}(hj$hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj$ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_packet_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj$ubh for possible options.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jrhj$hMhj"ubjs)}(hX*``timestamp`` Timestamp specifying when the latest transmission of a currently pending packet has been started. May be ``KTIME_MAX`` before or in-between transmission attempts. Used for the packet timeout implementation. Must only be accessed while holding the pending lock after first submission. h](jy)}(h ``timestamp``h]j)}(hjV$h]h timestamp}(hjX$hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjT$ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjP$ubj)}(hhh]h)}(hXTimestamp specifying when the latest transmission of a currently pending packet has been started. May be ``KTIME_MAX`` before or in-between transmission attempts. Used for the packet timeout implementation. Must only be accessed while holding the pending lock after first submission.h](hiTimestamp specifying when the latest transmission of a currently pending packet has been started. May be }(hjo$hhhNhNubj)}(h ``KTIME_MAX``h]h KTIME_MAX}(hjw$hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjo$ubh before or in-between transmission attempts. Used for the packet timeout implementation. Must only be accessed while holding the pending lock after first submission.}(hjo$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjl$ubah}(h]h ]h"]h$]h&]uh1jhjP$ubeh}(h]h ]h"]h$]h&]uh1jrhjk$hMhj"ubjs)}(h3``queue_node`` The list node for the packet queue. h](jy)}(h``queue_node``h]j)}(hj$h]h queue_node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj$ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj$ubj)}(hhh]h)}(h#The list node for the packet queue.h]h#The list node for the packet queue.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jrhj$hMhj"ubjs)}(h?``pending_node`` The list node for the set of pending packets. h](jy)}(h``pending_node``h]j)}(hj$h]h pending_node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj$ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj$ubj)}(hhh]h)}(h-The list node for the set of pending packets.h]h-The list node for the set of pending packets.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jrhj$hMhj"ubjs)}(h``ops`` Packet operations.h](jy)}(h``ops``h]j)}(hj%h]hops}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj%ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj%ubj)}(hhh]h)}(hPacket operations.h]hPacket operations.}(hj-%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj*%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jrhj)%hMhj"ubeh}(h]h ]h"]h$]h&]uh1jmhj>"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_packet_set_data (C function)c.ssh_packet_set_datahNtauh1jhjhhhNhNubj)}(hhh](j)}(hDvoid ssh_packet_set_data (struct ssh_packet *p, u8 *ptr, size_t len)h]j)}(hCvoid ssh_packet_set_data(struct ssh_packet *p, u8 *ptr, size_t len)h](j)}(hvoidh]hvoid}(hjn%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj%hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj}%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj%hhhj|%hMubj)}(hssh_packet_set_datah]j)}(hssh_packet_set_datah]hssh_packet_set_data}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjj%hhhj|%hMubjv )}(h+(struct ssh_packet *p, u8 *ptr, size_t len)h](j| )}(hstruct ssh_packet *ph](j)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(h ssh_packeth]h ssh_packet}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj%modnameN classnameNjj)}j]jI )}jA j%sbc.ssh_packet_set_dataasbuh1hhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj )}(hj h]h*}(hj%hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubj)}(hj h]hp}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj%ubj| )}(hu8 *ptrh](h)}(hhh]j)}(hu8h]hu8}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj!&modnameN classnameNjj)}j]j%c.ssh_packet_set_dataasbuh1hhj&ubj)}(h h]h }(hj=&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj )}(hj h]h*}(hjK&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj)}(hptrh]hptr}(hjX&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj%ubj| )}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjt&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq&ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjv&modnameN classnameNjj)}j]j%c.ssh_packet_set_dataasbuh1hhjm&ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm&ubj)}(hlenh]hlen}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj%ubeh}(h]h ]h"]h$]h&]hhuh1ju hjj%hhhj|%hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjf%hhhj|%hMubah}(h]ja%ah ](jjeh"]h$]h&]j"j#)j$huh1jhj|%hMhjc%hhubj&)}(hhh]h)}(hSet raw message data of packet.h]hSet raw message data of packet.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj&hhubah}(h]h ]h"]h$]h&]uh1j%hjc%hhhj|%hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj&jIj&jJjKjLuh1jhhhjhNhNubjN)}(hX**Parameters** ``struct ssh_packet *p`` The packet for which the message data should be set. ``u8 *ptr`` Pointer to the memory holding the message data. ``size_t len`` Length of the message data. **Description** Sets the raw message data buffer of the packet to the provided memory. The memory is not copied. Instead, the caller is responsible for management (i.e. allocation and deallocation) of the memory. The caller must ensure that the provided memory is valid and contains a valid SSH message, starting from the time of submission of the packet until the ``release`` callback has been called. During this time, the memory may not be altered in any way.h](h)}(h**Parameters**h]jX)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj&ubjn)}(hhh](js)}(hN``struct ssh_packet *p`` The packet for which the message data should be set. h](jy)}(h``struct ssh_packet *p``h]j)}(hj 'h]hstruct ssh_packet *p}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj 'ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj'ubj)}(hhh]h)}(h4The packet for which the message data should be set.h]h4The packet for which the message data should be set.}(hj$'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 'hMhj!'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jrhj 'hMhj'ubjs)}(h<``u8 *ptr`` Pointer to the memory holding the message data. h](jy)}(h ``u8 *ptr``h]j)}(hjD'h]hu8 *ptr}(hjF'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjB'ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj>'ubj)}(hhh]h)}(h/Pointer to the memory holding the message data.h]h/Pointer to the memory holding the message data.}(hj]'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY'hMhjZ'ubah}(h]h ]h"]h$]h&]uh1jhj>'ubeh}(h]h ]h"]h$]h&]uh1jrhjY'hMhj'ubjs)}(h+``size_t len`` Length of the message data. h](jy)}(h``size_t len``h]j)}(hj}'h]h size_t len}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj{'ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjw'ubj)}(hhh]h)}(hLength of the message data.h]hLength of the message data.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhjw'ubeh}(h]h ]h"]h$]h&]uh1jrhj'hMhj'ubeh}(h]h ]h"]h$]h&]uh1jmhj&ubh)}(h**Description**h]jX)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj'ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj&ubh)}(hXSets the raw message data buffer of the packet to the provided memory. The memory is not copied. Instead, the caller is responsible for management (i.e. allocation and deallocation) of the memory. The caller must ensure that the provided memory is valid and contains a valid SSH message, starting from the time of submission of the packet until the ``release`` callback has been called. During this time, the memory may not be altered in any way.h](hX]Sets the raw message data buffer of the packet to the provided memory. The memory is not copied. Instead, the caller is responsible for management (i.e. allocation and deallocation) of the memory. The caller must ensure that the provided memory is valid and contains a valid SSH message, starting from the time of submission of the packet until the }(hj'hhhNhNubj)}(h ``release``h]hrelease}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj'ubhV callback has been called. During this time, the memory may not be altered in any way.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_request_ops (C struct)c.ssh_request_opshNtauh1jhjhhhNhNubj)}(hhh](j)}(hssh_request_opsh]j)}(hstruct ssh_request_opsh](j)}(hjh]hstruct}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj (hhhj(hMubj)}(hssh_request_opsh]j)}(hj (h]hssh_request_ops}(hj/(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+(ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj (hhhj(hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]j"j#)j$huh1jhj(hMhj(hhubj&)}(hhh]h)}(h&Callback operations for a SSH request.h]h&Callback operations for a SSH request.}(hjQ(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM=hjN(hhubah}(h]h ]h"]h$]h&]uh1j%hj(hhhj(hMubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHji(jIji(jJjKjLuh1jhhhjhNhNubjN)}(hX**Definition**:: struct ssh_request_ops { void (*release)(struct ssh_request *rqst); void (*complete)(struct ssh_request *rqst, const struct ssh_command *cmd, const struct ssam_span *data, int status); }; **Members** ``release`` Function called when the request's reference count reaches zero. This callback must be relied upon to ensure that the request has left the transport systems (both, packet an request systems). ``complete`` Function called when the request is completed, either with success or failure. The command data for the request response is provided via the :c:type:`struct ssh_command ` parameter (``cmd``), the command payload of the request response via the :c:type:`struct ssh_span ` parameter (``data``).h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hju(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjq(ubh:}(hjq(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMAhjm(ubj,)}(hstruct ssh_request_ops { void (*release)(struct ssh_request *rqst); void (*complete)(struct ssh_request *rqst, const struct ssh_command *cmd, const struct ssam_span *data, int status); };h]hstruct ssh_request_ops { void (*release)(struct ssh_request *rqst); void (*complete)(struct ssh_request *rqst, const struct ssh_command *cmd, const struct ssam_span *data, int status); };}hj(sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMChjm(ubh)}(h **Members**h]jX)}(hj(h]hMembers}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj(ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMHhjm(ubjn)}(hhh](js)}(h``release`` Function called when the request's reference count reaches zero. This callback must be relied upon to ensure that the request has left the transport systems (both, packet an request systems). h](jy)}(h ``release``h]j)}(hj(h]hrelease}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj(ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMAhj(ubj)}(hhh]h)}(hFunction called when the request's reference count reaches zero. This callback must be relied upon to ensure that the request has left the transport systems (both, packet an request systems).h]hFunction called when the request’s reference count reaches zero. This callback must be relied upon to ensure that the request has left the transport systems (both, packet an request systems).}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM?hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jrhj(hMAhj(ubjs)}(hXH``complete`` Function called when the request is completed, either with success or failure. The command data for the request response is provided via the :c:type:`struct ssh_command ` parameter (``cmd``), the command payload of the request response via the :c:type:`struct ssh_span ` parameter (``data``).h](jy)}(h ``complete``h]j)}(hj(h]hcomplete}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj(ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMEhj(ubj)}(hhh]h)}(hX;Function called when the request is completed, either with success or failure. The command data for the request response is provided via the :c:type:`struct ssh_command ` parameter (``cmd``), the command payload of the request response via the :c:type:`struct ssh_span ` parameter (``data``).h](hFunction called when the request is completed, either with success or failure. The command data for the request response is provided via the }(hj)hhhNhNubh)}(h*:c:type:`struct ssh_command `h]j)}(hj)h]hstruct ssh_command}(hj)hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj)ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_commanduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMBhj)ubh parameter (}(hj)hhhNhNubj)}(h``cmd``h]hcmd}(hj=)hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubh7), the command payload of the request response via the }(hj)hhhNhNubh)}(h$:c:type:`struct ssh_span `h]j)}(hjQ)h]hstruct ssh_span}(hjS)hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjO)ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_spanuh1hhj8)hMBhj)ubh parameter (}hj)sbj)}(h``data``h]hdata}(hjr)hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubh).}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8)hMBhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jrhj )hMEhj(ubeh}(h]h ]h"]h$]h&]uh1jmhjm(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubh)}(h**Description**h]jX)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj)ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMIhjhhubj )}(hX9If the request does not have any response or has not been completed with success, both ``cmd`` and ``data`` parameters will be NULL. If the request response does not have any command payload, the ``data`` span will be an empty (zero-length) span. In case of failure, the reason for the failure is indicated by the value of the provided status code argument (``status``). This value will be zero in case of success and a regular errno otherwise. Note that a call to this callback does not guarantee that the request is not in use by the transport systems any more. h](h)}(hIf the request does not have any response or has not been completed with success, both ``cmd`` and ``data`` parameters will be NULL. If the request response does not have any command payload, the ``data`` span will be an empty (zero-length) span.h](hWIf the request does not have any response or has not been completed with success, both }(hj)hhhNhNubj)}(h``cmd``h]hcmd}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubh and }(hj)hhhNhNubj)}(h``data``h]hdata}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubhY parameters will be NULL. If the request response does not have any command payload, the }(hj)hhhNhNubj)}(h``data``h]hdata}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubh* span will be an empty (zero-length) span.}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMFhj)ubh)}(hIn case of failure, the reason for the failure is indicated by the value of the provided status code argument (``status``). This value will be zero in case of success and a regular errno otherwise.h](hoIn case of failure, the reason for the failure is indicated by the value of the provided status code argument (}(hj*hhhNhNubj)}(h ``status``h]hstatus}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj*ubhL). This value will be zero in case of success and a regular errno otherwise.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMKhj)ubh)}(hvNote that a call to this callback does not guarantee that the request is not in use by the transport systems any more.h]hvNote that a call to this callback does not guarantee that the request is not in use by the transport systems any more.}(hj%*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMPhj)ubeh}(h]h ]h"]h$]h&]uh1j hj*hMFhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_request (C struct) c.ssh_requesthNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssh_requesth]j)}(hstruct ssh_requesth](j)}(hjh]hstruct}(hjS*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO*hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMVubj)}(h h]h }(hja*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO*hhhj`*hMVubj)}(h ssh_requesth]j)}(hjM*h]h ssh_request}(hjs*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo*ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjO*hhhj`*hMVubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjK*hhhj`*hMVubah}(h]jF*ah ](jjeh"]h$]h&]j"j#)j$huh1jhj`*hMVhjH*hhubj&)}(hhh]h)}(hSSH transport request.h]hSSH transport request.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM\hj*hhubah}(h]h ]h"]h$]h&]uh1j%hjH*hhhj`*hMVubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj*jIj*jJjKjLuh1jhhhjhNhNubjN)}(hX7**Definition**:: struct ssh_request { struct ssh_packet packet; struct list_head node; unsigned long state; ktime_t timestamp; const struct ssh_request_ops *ops; }; **Members** ``packet`` The underlying SSH transport packet. ``node`` List node for the request queue and pending set. ``state`` State and type flags describing current request state (dynamic) and type (static). See :c:type:`enum ssh_request_flags ` for possible options. ``timestamp`` Timestamp specifying when we start waiting on the response of the request. This is set once the underlying packet has been completed and may be ``KTIME_MAX`` before that, or when the request does not expect a response. Used for the request timeout implementation. ``ops`` Request Operations.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*ubh:}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM`hj*ubj,)}(hstruct ssh_request { struct ssh_packet packet; struct list_head node; unsigned long state; ktime_t timestamp; const struct ssh_request_ops *ops; };h]hstruct ssh_request { struct ssh_packet packet; struct list_head node; unsigned long state; ktime_t timestamp; const struct ssh_request_ops *ops; };}hj*sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMbhj*ubh)}(h **Members**h]jX)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj*ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMjhj*ubjn)}(hhh](js)}(h0``packet`` The underlying SSH transport packet. h](jy)}(h ``packet``h]j)}(hj+h]hpacket}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM^hj*ubj)}(hhh]h)}(h$The underlying SSH transport packet.h]h$The underlying SSH transport packet.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM^hj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jrhj+hM^hj*ubjs)}(h:``node`` List node for the request queue and pending set. h](jy)}(h``node``h]j)}(hj;+h]hnode}(hj=+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj9+ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM_hj5+ubj)}(hhh]h)}(h0List node for the request queue and pending set.h]h0List node for the request queue and pending set.}(hjT+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP+hM_hjQ+ubah}(h]h ]h"]h$]h&]uh1jhj5+ubeh}(h]h ]h"]h$]h&]uh1jrhjP+hM_hj*ubjs)}(h``state`` State and type flags describing current request state (dynamic) and type (static). See :c:type:`enum ssh_request_flags ` for possible options. h](jy)}(h ``state``h]j)}(hjt+h]hstate}(hjv+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjr+ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMbhjn+ubj)}(hhh]h)}(hState and type flags describing current request state (dynamic) and type (static). See :c:type:`enum ssh_request_flags ` for possible options.h](hWState and type flags describing current request state (dynamic) and type (static). See }(hj+hhhNhNubh)}(h4:c:type:`enum ssh_request_flags `h]j)}(hj+h]henum ssh_request_flags}(hj+hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM`hj+ubh for possible options.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hM`hj+ubah}(h]h ]h"]h$]h&]uh1jhjn+ubeh}(h]h ]h"]h$]h&]uh1jrhj+hMbhj*ubjs)}(hX``timestamp`` Timestamp specifying when we start waiting on the response of the request. This is set once the underlying packet has been completed and may be ``KTIME_MAX`` before that, or when the request does not expect a response. Used for the request timeout implementation. h](jy)}(h ``timestamp``h]j)}(hj+h]h timestamp}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMghj+ubj)}(hhh]h)}(hXTimestamp specifying when we start waiting on the response of the request. This is set once the underlying packet has been completed and may be ``KTIME_MAX`` before that, or when the request does not expect a response. Used for the request timeout implementation.h](hTimestamp specifying when we start waiting on the response of the request. This is set once the underlying packet has been completed and may be }(hj+hhhNhNubj)}(h ``KTIME_MAX``h]h KTIME_MAX}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj+ubhj before that, or when the request does not expect a response. Used for the request timeout implementation.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMchj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jrhj+hMghj*ubjs)}(h``ops`` Request Operations.h](jy)}(h``ops``h]j)}(hj,h]hops}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj,ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMghj,ubj)}(hhh]h)}(hRequest Operations.h]hRequest Operations.}(hj6,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhhj3,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jrhj2,hMghj*ubeh}(h]h ]h"]h$]h&]uh1jmhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jto_ssh_request (C function)c.to_ssh_requesthNtauh1jhjhhhNhNubj)}(hhh](j)}(h:struct ssh_request * to_ssh_request (struct ssh_packet *p)h]j)}(h8struct ssh_request *to_ssh_request(struct ssh_packet *p)h](j)}(hjh]hstruct}(hjw,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs,hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMtubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs,hhhj,hMtubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj,modnameN classnameNjj)}j]jI )}jA to_ssh_requestsbc.to_ssh_requestasbuh1hhjs,hhhj,hMtubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs,hhhj,hMtubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjs,hhhj,hMtubj)}(hto_ssh_requesth]j)}(hj,h]hto_ssh_request}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjs,hhhj,hMtubjv )}(h(struct ssh_packet *p)h]j| )}(hstruct ssh_packet *ph](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h ssh_packeth]h ssh_packet}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj -ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj-modnameN classnameNjj)}j]j,c.to_ssh_requestasbuh1hhj,ubj)}(h h]h }(hj--hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj )}(hj h]h*}(hj;-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj)}(hj h]hp}(hjH-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj,ubah}(h]h ]h"]h$]h&]hhuh1ju hjs,hhhj,hMtubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjo,hhhj,hMtubah}(h]jj,ah ](jjeh"]h$]h&]j"j#)j$huh1jhj,hMthjl,hhubj&)}(hhh]h)}(h/Cast a SSH packet to its enclosing SSH request.h]h/Cast a SSH packet to its enclosing SSH request.}(hjq-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMthjn-hhubah}(h]h ]h"]h$]h&]uh1j%hjl,hhhj,hMtubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj-jIj-jJjKjLuh1jhhhjhNhNubjN)}(hX**Parameters** ``struct ssh_packet *p`` The packet to cast. **Description** Casts the given :c:type:`struct ssh_packet ` to its enclosing :c:type:`struct ssh_request `. The caller is responsible for making sure that the packet is actually wrapped in a :c:type:`struct ssh_request `. **Return** Returns the :c:type:`struct ssh_request ` wrapping the provided packet.h](h)}(h**Parameters**h]jX)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMxhj-ubjn)}(hhh]js)}(h-``struct ssh_packet *p`` The packet to cast. h](jy)}(h``struct ssh_packet *p``h]j)}(hj-h]hstruct ssh_packet *p}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj-ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMuhj-ubj)}(hhh]h)}(hThe packet to cast.h]hThe packet to cast.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMuhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jrhj-hMuhj-ubah}(h]h ]h"]h$]h&]uh1jmhj-ubh)}(h**Description**h]jX)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj-ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMwhj-ubh)}(hCasts the given :c:type:`struct ssh_packet ` to its enclosing :c:type:`struct ssh_request `. The caller is responsible for making sure that the packet is actually wrapped in a :c:type:`struct ssh_request `.h](hCasts the given }(hj.hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]j)}(hj .h]hstruct ssh_packet}(hj.hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj .ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMvhj.ubh to its enclosing }(hj.hhhNhNubh)}(h*:c:type:`struct ssh_request `h]j)}(hj1.h]hstruct ssh_request}(hj3.hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj/.ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_requestuh1hhj*.hMvhj.ubhU. The caller is responsible for making sure that the packet is actually wrapped in a }(hj.hhhNhNubh)}(h*:c:type:`struct ssh_request `h]j)}(hjT.h]hstruct ssh_request}(hjV.hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjR.ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_requestuh1hhj*.hMvhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*.hMvhj-ubh)}(h **Return**h]jX)}(hj}.h]hReturn}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{.ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMzhj-ubh)}(hTReturns the :c:type:`struct ssh_request ` wrapping the provided packet.h](h Returns the }(hj.hhhNhNubh)}(h*:c:type:`struct ssh_request `h]j)}(hj.h]hstruct ssh_request}(hj.hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj.ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_requestuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM{hj.ubh wrapping the provided packet.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hM{hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_request_get (C function)c.ssh_request_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(h`, enclosed in it. See also ssh_request_put(), ssh_packet_get(). **Return** Returns the request provided as input.h](h)}(h**Parameters**h]jX)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubjn)}(hhh]js)}(hK``struct ssh_request *r`` The request to increment the reference count of. h](jy)}(h``struct ssh_request *r``h]j)}(hj!0h]hstruct ssh_request *r}(hj#0hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj0ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj0ubj)}(hhh]h)}(h0The request to increment the reference count of.h]h0The request to increment the reference count of.}(hj:0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj60hMhj70ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jrhj60hMhj0ubah}(h]h ]h"]h$]h&]uh1jmhj/ubh)}(h**Description**h]jX)}(hj\0h]h Description}(hj^0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZ0ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubh)}(hIncrements the reference count of the given request by incrementing the reference count of the underlying :c:type:`struct ssh_packet `, enclosed in it.h](hjIncrements the reference count of the given request by incrementing the reference count of the underlying }(hjr0hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]j)}(hj|0h]hstruct ssh_packet}(hj~0hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjz0ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjr0ubh, enclosed in it.}(hjr0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hMhj/ubh)}(h-See also ssh_request_put(), ssh_packet_get().h]h-See also ssh_request_put(), ssh_packet_get().}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubh)}(h **Return**h]jX)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj0ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubh)}(h&Returns the request provided as input.h]h&Returns the request provided as input.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_request_put (C function)c.ssh_request_puthNtauh1jhjhhhNhNubj)}(hhh](j)}(h,void ssh_request_put (struct ssh_request *r)h]j)}(h+void ssh_request_put(struct ssh_request *r)h](j)}(hvoidh]hvoid}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj1hMubj)}(hssh_request_puth]j)}(hssh_request_puth]hssh_request_put}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj0hhhj1hMubjv )}(h(struct ssh_request *r)h]j| )}(hstruct ssh_request *rh](j)}(hjh]hstruct}(hj71hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj31ubj)}(h h]h }(hjD1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj31ubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hjU1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR1ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjW1modnameN classnameNjj)}j]jI )}jA j1sbc.ssh_request_putasbuh1hhj31ubj)}(h h]h }(hju1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj31ubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj31ubj)}(hj/h]hr}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj31ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj/1ubah}(h]h ]h"]h$]h&]hhuh1ju hj0hhhj1hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj0hhhj1hMubah}(h]j0ah ](jjeh"]h$]h&]j"j#)j$huh1jhj1hMhj0hhubj&)}(hhh]h)}(h%Decrement reference count of request.h]h%Decrement reference count of request.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1hhubah}(h]h ]h"]h$]h&]uh1j%hj0hhhj1hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj1jIj1jJjKjLuh1jhhhjhNhNubjN)}(hX**Parameters** ``struct ssh_request *r`` The request to decrement the reference count of. **Description** Decrements the reference count of the given request by decrementing the reference count of the underlying :c:type:`struct ssh_packet `, enclosed in it. If the reference count reaches zero, the ``release`` callback specified in the request's :c:type:`struct ssh_request_ops `, i.e. ``r->ops->release``, will be called. See also ssh_request_get(), ssh_packet_put().h](h)}(h**Parameters**h]jX)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1ubjn)}(hhh]js)}(hK``struct ssh_request *r`` The request to decrement the reference count of. h](jy)}(h``struct ssh_request *r``h]j)}(hj1h]hstruct ssh_request *r}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj1ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1ubj)}(hhh]h)}(h0The request to decrement the reference count of.h]h0The request to decrement the reference count of.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj2ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jrhj2hMhj1ubah}(h]h ]h"]h$]h&]uh1jmhj1ubh)}(h**Description**h]jX)}(hj52h]h Description}(hj72hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj32ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1ubh)}(hXZDecrements the reference count of the given request by decrementing the reference count of the underlying :c:type:`struct ssh_packet `, enclosed in it. If the reference count reaches zero, the ``release`` callback specified in the request's :c:type:`struct ssh_request_ops `, i.e. ``r->ops->release``, will be called.h](hjDecrements the reference count of the given request by decrementing the reference count of the underlying }(hjK2hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]j)}(hjU2h]hstruct ssh_packet}(hjW2hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjS2ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjK2ubh;, enclosed in it. If the reference count reaches zero, the }(hjK2hhhNhNubj)}(h ``release``h]hrelease}(hjw2hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjK2ubh' callback specified in the request’s }(hjK2hhhNhNubh)}(h2:c:type:`struct ssh_request_ops `h]j)}(hj2h]hstruct ssh_request_ops}(hj2hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj2ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_request_opsuh1hhjr2hMhjK2ubh, i.e. }(hjK2hhhNhNubj)}(h``r->ops->release``h]hr->ops->release}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjK2ubh, will be called.}(hjK2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjr2hMhj1ubh)}(h-See also ssh_request_get(), ssh_packet_put().h]h-See also ssh_request_get(), ssh_packet_put().}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_request_set_data (C function)c.ssh_request_set_datahNtauh1jhjhhhNhNubj)}(hhh](j)}(hFvoid ssh_request_set_data (struct ssh_request *r, u8 *ptr, size_t len)h]j)}(hEvoid ssh_request_set_data(struct ssh_request *r, u8 *ptr, size_t len)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj3hMubj)}(hssh_request_set_datah]j)}(hssh_request_set_datah]hssh_request_set_data}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj2hhhj3hMubjv )}(h,(struct ssh_request *r, u8 *ptr, size_t len)h](j| )}(hstruct ssh_request *rh](j)}(hjh]hstruct}(hj03hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,3ubj)}(h h]h }(hj=3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,3ubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hjN3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK3ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjP3modnameN classnameNjj)}j]jI )}jA j3sbc.ssh_request_set_dataasbuh1hhj,3ubj)}(h h]h }(hjn3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,3ubj )}(hj h]h*}(hj|3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,3ubj)}(hj/h]hr}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj(3ubj| )}(hu8 *ptrh](h)}(hhh]j)}(hu8h]hu8}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj3modnameN classnameNjj)}j]jj3c.ssh_request_set_dataasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(hptrh]hptr}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj(3ubj| )}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj3modnameN classnameNjj)}j]jj3c.ssh_request_set_dataasbuh1hhj3ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hlenh]hlen}(hj%4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj(3ubeh}(h]h ]h"]h$]h&]hhuh1ju hj2hhhj3hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj2hhhj3hMubah}(h]j2ah ](jjeh"]h$]h&]j"j#)j$huh1jhj3hMhj2hhubj&)}(hhh]h)}(h Set raw message data of request.h]h Set raw message data of request.}(hjO4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjL4hhubah}(h]h ]h"]h$]h&]uh1j%hj2hhhj3hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjg4jIjg4jJjKjLuh1jhhhjhNhNubjN)}(hX**Parameters** ``struct ssh_request *r`` The request for which the message data should be set. ``u8 *ptr`` Pointer to the memory holding the message data. ``size_t len`` Length of the message data. **Description** Sets the raw message data buffer of the underlying packet to the specified buffer. Does not copy the actual message data, just sets the buffer pointer and length. Refer to ssh_packet_set_data() for more details.h](h)}(h**Parameters**h]jX)}(hjq4h]h Parameters}(hjs4hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjo4ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjk4ubjn)}(hhh](js)}(hP``struct ssh_request *r`` The request for which the message data should be set. h](jy)}(h``struct ssh_request *r``h]j)}(hj4h]hstruct ssh_request *r}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj4ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj4ubj)}(hhh]h)}(h5The request for which the message data should be set.h]h5The request for which the message data should be set.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jrhj4hMhj4ubjs)}(h<``u8 *ptr`` Pointer to the memory holding the message data. h](jy)}(h ``u8 *ptr``h]j)}(hj4h]hu8 *ptr}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj4ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj4ubj)}(hhh]h)}(h/Pointer to the memory holding the message data.h]h/Pointer to the memory holding the message data.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jrhj4hMhj4ubjs)}(h+``size_t len`` Length of the message data. h](jy)}(h``size_t len``h]j)}(hj5h]h size_t len}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj5ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj4ubj)}(hhh]h)}(hLength of the message data.h]hLength of the message data.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jrhj5hMhj4ubeh}(h]h ]h"]h$]h&]uh1jmhjk4ubh)}(h**Description**h]jX)}(hj=5h]h Description}(hj?5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;5ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjk4ubh)}(hSets the raw message data buffer of the underlying packet to the specified buffer. Does not copy the actual message data, just sets the buffer pointer and length. Refer to ssh_packet_set_data() for more details.h]hSets the raw message data buffer of the underlying packet to the specified buffer. Does not copy the actual message data, just sets the buffer pointer and length. Refer to ssh_packet_set_data() for more details.}(hjS5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjk4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_packet_get (C function)c.ssh_packet_gethNtauh1jhjhhhNhNubj)}(hhh](j)}(h>struct ssh_packet * ssh_packet_get (struct ssh_packet *packet)h]j)}(h`, i.e. ``packet->ops->release``, will be called. See ssh_packet_get() for the counter-part of this function.h](h)}(h**Parameters**h]jX)}(hjG8h]h Parameters}(hjI8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjE8ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjA8ubjn)}(hhh]js)}(hN``struct ssh_packet *packet`` The packet to decrement the reference count of. h](jy)}(h``struct ssh_packet *packet``h]j)}(hjf8h]hstruct ssh_packet *packet}(hjh8hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjd8ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj`8ubj)}(hhh]h)}(h/The packet to decrement the reference count of.h]h/The packet to decrement the reference count of.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{8hMhj|8ubah}(h]h ]h"]h$]h&]uh1jhj`8ubeh}(h]h ]h"]h$]h&]uh1jrhj{8hMhj]8ubah}(h]h ]h"]h$]h&]uh1jmhjA8ubh)}(h**Description**h]jX)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjA8ubh)}(hIf the reference count reaches zero, the ``release`` callback specified in the packet's :c:type:`struct ssh_packet_ops `, i.e. ``packet->ops->release``, will be called.h](h)If the reference count reaches zero, the }(hj8hhhNhNubj)}(h ``release``h]hrelease}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj8ubh& callback specified in the packet’s }(hj8hhhNhNubh)}(h0:c:type:`struct ssh_packet_ops `h]j)}(hj8h]hstruct ssh_packet_ops}(hj8hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssh_packet_opsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj8ubh, i.e. }(hj8hhhNhNubj)}(h``packet->ops->release``h]hpacket->ops->release}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj8ubh, will be called.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hMhjA8ubh)}(h;See ssh_packet_get() for the counter-part of this function.h]h;See ssh_packet_get() for the counter-part of this function.}(hj 9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM hjA8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhjhhhNhNubeh}(h]j1ah ]h"]serial hub communicationah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hController and Core Interfaceh]hController and Core Interface}(hj-9hhhNhNubah}(h]h ]h"]h$]h&]hjMuh1hhj*9hhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_flags (C enum)c.ssam_event_flagshNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_event_flagsh]j)}(henum ssam_event_flagsh](j)}(hjh]henum}(hjT9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP9hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKubj)}(h h]h }(hjb9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP9hhhja9hKubj)}(hssam_event_flagsh]j)}(hjN9h]hssam_event_flags}(hjt9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp9ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjP9hhhja9hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjL9hhhja9hKubah}(h]jG9ah ](jjeh"]h$]h&]j"j#)j$huh1jhja9hKhjI9hhubj&)}(hhh]h)}(h'Flags for enabling/disabling SAM eventsh]h'Flags for enabling/disabling SAM events}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj9hhubah}(h]h ]h"]h$]h&]uh1j%hjI9hhhja9hKubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHj9jIj9jJjKjLuh1jhhhj*9hNhNubjN)}(h\**Constants** ``SSAM_EVENT_SEQUENCED`` The event will be sent via a sequenced data frame.h](h)}(h **Constants**h]jX)}(hj9h]h Constants}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj9ubjn)}(hhh]js)}(hK``SSAM_EVENT_SEQUENCED`` The event will be sent via a sequenced data frame.h](jy)}(h``SSAM_EVENT_SEQUENCED``h]j)}(hj9h]hSSAM_EVENT_SEQUENCED}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj9ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj9ubj)}(hhh]h)}(h2The event will be sent via a sequenced data frame.h]h2The event will be sent via a sequenced data frame.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK hj9ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jrhj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jmhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event (C struct) c.ssam_eventhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h ssam_eventh]j)}(hstruct ssam_eventh](j)}(hjh]hstruct}(hj1:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-:hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK%ubj)}(h h]h }(hj?:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-:hhhj>:hK%ubj)}(h ssam_eventh]j)}(hj+:h]h ssam_event}(hjQ:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM:ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj-:hhhj>:hK%ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj):hhhj>:hK%ubah}(h]j$:ah ](jjeh"]h$]h&]j"j#)j$huh1jhj>:hK%hj&:hhubj&)}(hhh]h)}(h'SAM event sent from the EC to the host.h]h'SAM event sent from the EC to the host.}(hjs:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK!hjp:hhubah}(h]h ]h"]h$]h&]uh1j%hj&:hhhj>:hK%ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj:jIj:jJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_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](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:ubh:}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK%hj:ubj,)}(hstruct ssam_event { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u16 length; u8 data[]; };h]hstruct ssam_event { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u16 length; u8 data[]; };}hj:sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK'hj:ubh)}(h **Members**h]jX)}(hj:h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK0hj:ubjn)}(hhh](js)}(hg``target_category`` Target category of the event source. See :c:type:`enum ssam_ssh_tc `. h](jy)}(h``target_category``h]j)}(hj:h]htarget_category}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj:ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK#hj:ubj)}(hhh]h)}(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]j)}(hj;h]henum ssam_ssh_tc}(hj;hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhj:hK#hj:ubh.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj:hK#hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jrhj:hK#hj:ubjs)}(h-``target_id`` Target ID of the event source. h](jy)}(h ``target_id``h]j)}(hj<;h]h target_id}(hj>;hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj:;ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK$hj6;ubj)}(hhh]h)}(hTarget ID of the event source.h]hTarget ID of the event source.}(hjU;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ;hK$hjR;ubah}(h]h ]h"]h$]h&]uh1jhj6;ubeh}(h]h ]h"]h$]h&]uh1jrhjQ;hK$hj:ubjs)}(h(``command_id`` Command ID of the event. h](jy)}(h``command_id``h]j)}(hju;h]h command_id}(hjw;hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjs;ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK%hjo;ubj)}(hhh]h)}(hCommand ID of the event.h]hCommand ID of the event.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK%hj;ubah}(h]h ]h"]h$]h&]uh1jhjo;ubeh}(h]h ]h"]h$]h&]uh1jrhj;hK%hj:ubjs)}(h1``instance_id`` Instance ID of the event source. h](jy)}(h``instance_id``h]j)}(hj;h]h instance_id}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK&hj;ubj)}(hhh]h)}(h Instance ID of the event source.h]h Instance ID of the event source.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK&hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jrhj;hK&hj:ubjs)}(h1``length`` Length of the event payload in bytes. h](jy)}(h ``length``h]j)}(hj;h]hlength}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK'hj;ubj)}(hhh]h)}(h%Length of the event payload in bytes.h]h%Length of the event payload in bytes.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hK'hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jrhj;hK'hj:ubjs)}(h``data`` Event payload data.h](jy)}(h``data``h]j)}(hj <h]hdata}(hj"<hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj<ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK'hj<ubj)}(hhh]h)}(hEvent payload data.h]hEvent payload data.}(hj9<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK(hj6<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jrhj5<hK'hj:ubeh}(h]h ]h"]h$]h&]uh1jmhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_flags (C enum)c.ssam_request_flagshNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_request_flagsh]j)}(henum ssam_request_flagsh](j)}(hjh]henum}(hjz<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv<hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK.ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv<hhhj<hK.ubj)}(hssam_request_flagsh]j)}(hjt<h]hssam_request_flags}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjv<hhhj<hK.ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjr<hhhj<hK.ubah}(h]jm<ah ](jjeh"]h$]h&]j"j#)j$huh1jhj<hK.hjo<hhubj&)}(hhh]h)}(hFlags for SAM requests.h]hFlags for SAM requests.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK3hj<hhubah}(h]h ]h"]h$]h&]uh1j%hjo<hhhj<hK.ubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHj<jIj<jJjKjLuh1jhhhj*9hNhNubjN)}(hX **Constants** ``SSAM_REQUEST_HAS_RESPONSE`` Specifies that the request expects a response. If not set, the request will be directly completed after its underlying packet has been transmitted. If set, the request transport system waits for a response of the request. ``SSAM_REQUEST_UNSEQUENCED`` Specifies that the request should be transmitted via an unsequenced packet. If set, the request must not have a response, meaning that this flag and the ``SSAM_REQUEST_HAS_RESPONSE`` flag are mutually exclusive.h](h)}(h **Constants**h]jX)}(hj<h]h Constants}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK7hj<ubjn)}(hhh](js)}(h``SSAM_REQUEST_HAS_RESPONSE`` Specifies that the request expects a response. If not set, the request will be directly completed after its underlying packet has been transmitted. If set, the request transport system waits for a response of the request. h](jy)}(h``SSAM_REQUEST_HAS_RESPONSE``h]j)}(hj<h]hSSAM_REQUEST_HAS_RESPONSE}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj<ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK=hj<ubj)}(hhh]h)}(hSpecifies that the request expects a response. If not set, the request will be directly completed after its underlying packet has been transmitted. If set, the request transport system waits for a response of the request.h]hSpecifies that the request expects a response. If not set, the request will be directly completed after its underlying packet has been transmitted. If set, the request transport system waits for a response of the request.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK:hj=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jrhj=hK=hj<ubjs)}(h``SSAM_REQUEST_UNSEQUENCED`` Specifies that the request should be transmitted via an unsequenced packet. If set, the request must not have a response, meaning that this flag and the ``SSAM_REQUEST_HAS_RESPONSE`` flag are mutually exclusive.h](jy)}(h``SSAM_REQUEST_UNSEQUENCED``h]j)}(hj7=h]hSSAM_REQUEST_UNSEQUENCED}(hj9=hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj5=ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKAhj1=ubj)}(hhh]h)}(hSpecifies that the request should be transmitted via an unsequenced packet. If set, the request must not have a response, meaning that this flag and the ``SSAM_REQUEST_HAS_RESPONSE`` flag are mutually exclusive.h](hSpecifies that the request should be transmitted via an unsequenced packet. If set, the request must not have a response, meaning that this flag and the }(hjP=hhhNhNubj)}(h``SSAM_REQUEST_HAS_RESPONSE``h]hSSAM_REQUEST_HAS_RESPONSE}(hjX=hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjP=ubh flag are mutually exclusive.}(hjP=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK@hjM=ubah}(h]h ]h"]h$]h&]uh1jhj1=ubeh}(h]h ]h"]h$]h&]uh1jrhjL=hKAhj<ubeh}(h]h ]h"]h$]h&]uh1jmhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request (C struct)c.ssam_requesthNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h ssam_requesth]j)}(hstruct ssam_requesth](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKGubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj=hKGubj)}(h ssam_requesth]j)}(hj=h]h ssam_request}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj=hhhj=hKGubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj=hhhj=hKGubah}(h]j=ah ](jjeh"]h$]h&]j"j#)j$huh1jhj=hKGhj=hhubj&)}(hhh]h)}(hSAM request description.h]hSAM request description.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKFhj=hhubah}(h]h ]h"]h$]h&]uh1j%hj=hhhj=hKGubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj=jIj=jJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_request { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u16 flags; u16 length; const u8 *payload; }; **Members** ``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. ``target_id`` ID of the request's target. ``command_id`` Command ID of the request. ``instance_id`` Instance ID of the request's target. ``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `. ``length`` Length of the request payload in bytes. ``payload`` Request payload data.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj>ubh:}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKJhj>ubj,)}(hstruct ssam_request { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u16 flags; u16 length; const u8 *payload; };h]hstruct ssam_request { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u16 flags; u16 length; const u8 *payload; };}hj">sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKLhj>ubh)}(h **Members**h]jX)}(hj3>h]hMembers}(hj5>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1>ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKVhj>ubjn)}(hhh](js)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](jy)}(h``target_category``h]j)}(hjR>h]htarget_category}(hjT>hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjP>ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKHhjL>ubj)}(hhh]h)}(hOCategory of the request's target. See :c:type:`enum ssam_ssh_tc `.h](h(Category of the request’s target. See }(hjk>hhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]j)}(hju>h]henum ssam_ssh_tc}(hjw>hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjs>ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhjg>hKHhjk>ubh.}(hjk>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjg>hKHhjh>ubah}(h]h ]h"]h$]h&]uh1jhjL>ubeh}(h]h ]h"]h$]h&]uh1jrhjg>hKHhjI>ubjs)}(h*``target_id`` ID of the request's target. h](jy)}(h ``target_id``h]j)}(hj>h]h target_id}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj>ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKIhj>ubj)}(hhh]h)}(hID of the request's target.h]hID of the request’s target.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKIhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jrhj>hKIhjI>ubjs)}(h*``command_id`` Command ID of the request. h](jy)}(h``command_id``h]j)}(hj>h]h command_id}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj>ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKJhj>ubj)}(hhh]h)}(hCommand ID of the request.h]hCommand ID of the request.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKJhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jrhj>hKJhjI>ubjs)}(h5``instance_id`` Instance ID of the request's target. h](jy)}(h``instance_id``h]j)}(hj ?h]h instance_id}(hj"?hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKKhj?ubj)}(hhh]h)}(h$Instance ID of the request's target.h]h&Instance ID of the request’s target.}(hj9?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5?hKKhj6?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jrhj5?hKKhjI>ubjs)}(h]``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `. h](jy)}(h ``flags``h]j)}(hjY?h]hflags}(hj[?hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjW?ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKLhjS?ubj)}(hhh]h)}(hRFlags for the request. See :c:type:`enum ssam_request_flags `.h](hFlags for the request. See }(hjr?hhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]j)}(hj|?h]henum ssam_request_flags}(hj~?hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjz?ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_flagsuh1hhjn?hKLhjr?ubh.}(hjr?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjn?hKLhjo?ubah}(h]h ]h"]h$]h&]uh1jhjS?ubeh}(h]h ]h"]h$]h&]uh1jrhjn?hKLhjI>ubjs)}(h3``length`` Length of the request payload in bytes. h](jy)}(h ``length``h]j)}(hj?h]hlength}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKMhj?ubj)}(hhh]h)}(h'Length of the request payload in bytes.h]h'Length of the request payload in bytes.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hKMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jrhj?hKMhjI>ubjs)}(h!``payload`` Request payload data.h](jy)}(h ``payload``h]j)}(hj?h]hpayload}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKMhj?ubj)}(hhh]h)}(hRequest payload data.h]hRequest payload data.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKNhj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jrhj@hKMhjI>ubeh}(h]h ]h"]h$]h&]uh1jmhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hj1@h]h Description}(hj3@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/@ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKQhj*9hhubh)}(hThis struct fully describes a SAM request with payload. It is intended to help set up the actual transport struct, e.g. :c:type:`struct ssam_request_sync `, and specifically its raw message data via ssam_request_write_data().h](hxThis struct fully describes a SAM request with payload. It is intended to help set up the actual transport struct, e.g. }(hjG@hhhNhNubh)}(h6:c:type:`struct ssam_request_sync `h]j)}(hjQ@h]hstruct ssam_request_sync}(hjS@hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjO@ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_syncuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKNhjG@ubhF, and specifically its raw message data via ssam_request_write_data().}(hjG@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjn@hKNhj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_response (C struct)c.ssam_responsehNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h ssam_responseh]j)}(hstruct ssam_responseh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKUubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj@hKUubj)}(h ssam_responseh]j)}(hj@h]h ssam_response}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj@hhhj@hKUubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj@hhhj@hKUubah}(h]j@ah ](jjeh"]h$]h&]j"j#)j$huh1jhj@hKUhj@hhubj&)}(hhh]h)}(h Response buffer for SAM request.h]h Response buffer for SAM request.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK^hj@hhubah}(h]h ]h"]h$]h&]uh1j%hj@hhhj@hKUubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj@jIj@jJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_response { size_t capacity; size_t length; u8 *pointer; }; **Members** ``capacity`` Capacity of the buffer, in bytes. ``length`` Length of the actual data stored in the memory pointed to by **pointer**, in bytes. Set by the transport system. ``pointer`` Pointer to the buffer's memory, storing the response payload data.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@ubh:}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKbhj@ubj,)}(hRstruct ssam_response { size_t capacity; size_t length; u8 *pointer; };h]hRstruct ssam_response { size_t capacity; size_t length; u8 *pointer; };}hjAsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKdhj@ubh)}(h **Members**h]jX)}(hj"Ah]hMembers}(hj$AhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj Aubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKjhj@ubjn)}(hhh](js)}(h/``capacity`` Capacity of the buffer, in bytes. h](jy)}(h ``capacity``h]j)}(hjAAh]hcapacity}(hjCAhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj?Aubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK`hj;Aubj)}(hhh]h)}(h!Capacity of the buffer, in bytes.h]h!Capacity of the buffer, in bytes.}(hjZAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVAhK`hjWAubah}(h]h ]h"]h$]h&]uh1jhj;Aubeh}(h]h ]h"]h$]h&]uh1jrhjVAhK`hj8Aubjs)}(h|``length`` Length of the actual data stored in the memory pointed to by **pointer**, in bytes. Set by the transport system. h](jy)}(h ``length``h]j)}(hjzAh]hlength}(hj|AhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjxAubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKbhjtAubj)}(hhh]h)}(hpLength of the actual data stored in the memory pointed to by **pointer**, in bytes. Set by the transport system.h](h=Length of the actual data stored in the memory pointed to by }(hjAhhhNhNubjX)}(h **pointer**h]hpointer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjAubh(, in bytes. Set by the transport system.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKahjAubah}(h]h ]h"]h$]h&]uh1jhjtAubeh}(h]h ]h"]h$]h&]uh1jrhjAhKbhj8Aubjs)}(hN``pointer`` Pointer to the buffer's memory, storing the response payload data.h](jy)}(h ``pointer``h]j)}(hjAh]hpointer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjAubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKbhjAubj)}(hhh]h)}(hBPointer to the buffer's memory, storing the response payload data.h]hDPointer to the buffer’s memory, storing the response payload data.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKchjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jrhjAhKbhj8Aubeh}(h]h ]h"]h$]h&]uh1jmhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_sync (C struct)c.ssam_request_synchNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_request_synch]j)}(hstruct ssam_request_synch](j)}(hjh]hstruct}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKiubj)}(h h]h }(hj.BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhj-BhKiubj)}(hssam_request_synch]j)}(hjBh]hssam_request_sync}(hj@BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjReturns the return value of the last execution of **request**.h](h2Returns the return value of the last execution of }(hj:NhhhNhNubjX)}(h **request**h]hrequest}(hjBNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj:Nubh.}(hj:NhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_retry (C macro) c.ssam_retryhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h ssam_retryh]j)}(h ssam_retryh]j)}(h ssam_retryh]j)}(hjuNh]h ssam_retry}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{Nubah}(h]h ](j j eh"]h$]h&]hhuh1jhjwNhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjsNhhhjNhMubah}(h]jnNah ](jjeh"]h$]h&]j"j#)j$huh1jhjNhMhjpNhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjpNhhhjNhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjNjIjNjJjKjLuh1jhhhj*9hNhNubh)}(h!``ssam_retry (request, args...)``h]j)}(hjNh]hssam_retry (request, args...)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(hLRetry request in case of I/O errors or timeouts up to three times in total. h]h)}(hKRetry request in case of I/O errors or timeouts up to three times in total.h]hKRetry request in case of I/O errors or timeouts up to three times in total.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjNubah}(h]h ]h"]h$]h&]uh1j hjNhMhj*9hhubjN)}(hX#**Parameters** ``request`` The request function to execute. Must return an integer. ``args...`` Arguments for the request function. **Description** Executes the given request function, i.e. calls **request**. In case the request returns ``-EREMOTEIO`` (indicates I/O error) or -``ETIMEDOUT`` (request or underlying packet timed out), **request** will be re-executed again, up to three times in total. See __ssam_retry() for a more generic macro for this purpose. **Return** Returns the return value of the last execution of **request**.h](h)}(h**Parameters**h]jX)}(hjNh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjNubjn)}(hhh](js)}(hE``request`` The request function to execute. Must return an integer. h](jy)}(h ``request``h]j)}(hjOh]hrequest}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjOubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjNubj)}(hhh]h)}(h8The request function to execute. Must return an integer.h]h8The request function to execute. Must return an integer.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMhjOubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jrhjOhMhjNubjs)}(h0``args...`` Arguments for the request function. h](jy)}(h ``args...``h]j)}(hj>Oh]hargs...}(hj@OhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjReturns the return value of the last execution of **request**.h](h2Returns the return value of the last execution of }(hj PhhhNhNubjX)}(h **request**h]hrequest}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj Pubh.}(hj PhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjNubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_spec (C struct)c.ssam_request_spechNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_request_spech]j)}(hstruct ssam_request_spech](j)}(hjh]hstruct}(hjNPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJPhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM!ubj)}(h h]h }(hj\PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJPhhhj[PhM!ubj)}(hssam_request_spech]j)}(hjHPh]hssam_request_spec}(hjnPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjPubah}(h]h ](j j eh"]h$]h&]hhuh1jhjJPhhhj[PhM!ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjFPhhhj[PhM!ubah}(h]jAPah ](jjeh"]h$]h&]j"j#)j$huh1jhj[PhM!hjCPhhubj&)}(hhh]h)}(h(Blue-print specification of SAM request.h]h(Blue-print specification of SAM request.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM"hjPhhubah}(h]h ]h"]h$]h&]uh1j%hjCPhhhj[PhM!ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjPjIjPjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_request_spec { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u8 flags; }; **Members** ``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. ``target_id`` ID of the request's target. ``command_id`` Command ID of the request. ``instance_id`` Instance ID of the request's target. ``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubh:}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM&hjPubj,)}(h|struct ssam_request_spec { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u8 flags; };h]h|struct ssam_request_spec { u8 target_category; u8 target_id; u8 command_id; u8 instance_id; u8 flags; };}hjPsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hjPubh)}(h **Members**h]jX)}(hjPh]hMembers}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM0hjPubjn)}(hhh](js)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](jy)}(h``target_category``h]j)}(hjPh]htarget_category}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM$hjPubj)}(hhh]h)}(hOCategory of the request's target. See :c:type:`enum ssam_ssh_tc `.h](h(Category of the request’s target. See }(hjQhhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]j)}(hj Qh]henum ssam_ssh_tc}(hj"QhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjQubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhjQhM$hjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhM$hjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jrhjQhM$hjPubjs)}(h*``target_id`` ID of the request's target. h](jy)}(h ``target_id``h]j)}(hjYQh]h target_id}(hj[QhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjWQubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM%hjSQubj)}(hhh]h)}(hID of the request's target.h]hID of the request’s target.}(hjrQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnQhM%hjoQubah}(h]h ]h"]h$]h&]uh1jhjSQubeh}(h]h ]h"]h$]h&]uh1jrhjnQhM%hjPubjs)}(h*``command_id`` Command ID of the request. h](jy)}(h``command_id``h]j)}(hjQh]h command_id}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjQubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM&hjQubj)}(hhh]h)}(hCommand ID of the request.h]hCommand ID of the request.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM&hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jrhjQhM&hjPubjs)}(h5``instance_id`` Instance ID of the request's target. h](jy)}(h``instance_id``h]j)}(hjQh]h instance_id}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjQubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM'hjQubj)}(hhh]h)}(h$Instance ID of the request's target.h]h&Instance ID of the request’s target.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM'hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jrhjQhM'hjPubjs)}(h\``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](jy)}(h ``flags``h]j)}(hjRh]hflags}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjRubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM'hjQubj)}(hhh]h)}(hRFlags for the request. See :c:type:`enum ssam_request_flags `.h](hFlags for the request. See }(hjRhhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]j)}(hj'Rh]henum ssam_request_flags}(hj)RhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj%Rubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hjRubh.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDRhM(hjRubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jrhjRhM'hjPubeh}(h]h ]h"]h$]h&]uh1jmhjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hjjRh]h Description}(hjlRhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhRubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM+hj*9hhubh)}(hX?Blue-print specification for a SAM request. This struct describes the unique static parameters of a request (i.e. type) without specifying any of its instance-specific data (e.g. payload). It is intended to be used as base for defining simple request functions via the ``SSAM_DEFINE_SYNC_REQUEST_x()`` family of macros.h](hX Blue-print specification for a SAM request. This struct describes the unique static parameters of a request (i.e. type) without specifying any of its instance-specific data (e.g. payload). It is intended to be used as base for defining simple request functions via the }(hjRhhhNhNubj)}(h ``SSAM_DEFINE_SYNC_REQUEST_x()``h]hSSAM_DEFINE_SYNC_REQUEST_x()}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjRubh family of macros.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_spec_md (C struct)c.ssam_request_spec_mdhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_request_spec_mdh]j)}(hstruct ssam_request_spec_mdh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM1ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhM1ubj)}(hssam_request_spec_mdh]j)}(hjRh]hssam_request_spec_md}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](j j eh"]h$]h&]hhuh1jhjRhhhjRhM1ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjRhhhjRhM1ubah}(h]jRah ](jjeh"]h$]h&]j"j#)j$huh1jhjRhM1hjRhhubj&)}(hhh]h)}(h6Blue-print specification for multi-device SAM request.h]h6Blue-print specification for multi-device SAM request.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM8hjRhhubah}(h]h ]h"]h$]h&]uh1j%hjRhhhjRhM1ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjSjIjSjJjKjLuh1jhhhj*9hNhNubjN)}(hXv**Definition**:: struct ssam_request_spec_md { u8 target_category; u8 command_id; u8 flags; }; **Members** ``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. ``command_id`` Command ID of the request. ``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM<hjSubj,)}(hYstruct ssam_request_spec_md { u8 target_category; u8 command_id; u8 flags; };h]hYstruct ssam_request_spec_md { u8 target_category; u8 command_id; u8 flags; };}hj9Ssbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM>hjSubh)}(h **Members**h]jX)}(hjJSh]hMembers}(hjLShhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjHSubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMDhjSubjn)}(hhh](js)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](jy)}(h``target_category``h]j)}(hjiSh]htarget_category}(hjkShhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjgSubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM;hjcSubj)}(hhh]h)}(hOCategory of the request's target. See :c:type:`enum ssam_ssh_tc `.h](h(Category of the request’s target. See }(hjShhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]j)}(hjSh]henum ssam_ssh_tc}(hjShhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjSubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhj~ShM;hjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~ShM;hjSubah}(h]h ]h"]h$]h&]uh1jhjcSubeh}(h]h ]h"]h$]h&]uh1jrhj~ShM;hj`Subjs)}(h*``command_id`` Command ID of the request. h](jy)}(h``command_id``h]j)}(hjSh]h command_id}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjSubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM<hjSubj)}(hhh]h)}(hCommand ID of the request.h]hCommand ID of the request.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM<hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jrhjShM<hj`Subjs)}(h\``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](jy)}(h ``flags``h]j)}(hjSh]hflags}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjSubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM<hjSubj)}(hhh]h)}(hRFlags for the request. See :c:type:`enum ssam_request_flags `.h](hFlags for the request. See }(hjThhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]j)}(hj!Th]henum ssam_request_flags}(hj#ThhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjTubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM=hjTubh.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>ThM=hjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jrhjThM<hj`Subeh}(h]h ]h"]h$]h&]uh1jmhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hjdTh]h Description}(hjfThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbTubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM@hj*9hhubh)}(hXQBlue-print specification for a multi-device SAM request, i.e. a request that is applicable to multiple device instances, described by their individual target and instance IDs. This struct describes the unique static parameters of a request (i.e. type) without specifying any of its instance-specific data (e.g. payload) and without specifying any of its device specific IDs (i.e. target and instance ID). It is intended to be used as base for defining simple multi-device request functions via the ``SSAM_DEFINE_SYNC_REQUEST_MD_x()`` and ``SSAM_DEFINE_SYNC_REQUEST_CL_x()`` families of macros.h](hXBlue-print specification for a multi-device SAM request, i.e. a request that is applicable to multiple device instances, described by their individual target and instance IDs. This struct describes the unique static parameters of a request (i.e. type) without specifying any of its instance-specific data (e.g. payload) and without specifying any of its device specific IDs (i.e. target and instance ID). It is intended to be used as base for defining simple multi-device request functions via the }(hjzThhhNhNubj)}(h#``SSAM_DEFINE_SYNC_REQUEST_MD_x()``h]hSSAM_DEFINE_SYNC_REQUEST_MD_x()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzTubh and }(hjzThhhNhNubj)}(h#``SSAM_DEFINE_SYNC_REQUEST_CL_x()``h]hSSAM_DEFINE_SYNC_REQUEST_CL_x()}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzTubh families of macros.}(hjzThhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM=hj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_N (C macro)c.SSAM_DEFINE_SYNC_REQUEST_NhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Nh]j)}(hjTh]hSSAM_DEFINE_SYNC_REQUEST_N}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubah}(h]h ](j j eh"]h$]h&]hhuh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOubah}(h]h ]h"]h$]h&]hhjuh1jjjhjThhhjThMOubah}(h]jTah ](jjeh"]h$]h&]j"j#)j$huh1jhjThMOhjThhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjThhhjThMOubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjTjIjTjJjKjLuh1jhhhj*9hNhNubh)}(h.``SSAM_DEFINE_SYNC_REQUEST_N (name, spec...)``h]j)}(hjTh]h*SSAM_DEFINE_SYNC_REQUEST_N (name, spec...)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjTubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMQhj*9hhubj )}(hPDefine synchronous SAM request function with neither argument nor return value. h]h)}(hODefine synchronous SAM request function with neither argument nor return value.h]hODefine synchronous SAM request function with neither argument nor return value.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOhjUubah}(h]h ]h"]h$]h&]uh1j hj$UhMOhj*9hhubjN)}(hX**Parameters** ``name`` Name of the generated function. ``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. The generated function takes care of setting up the request struct and buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is being sent. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hj1Uh]h Parameters}(hj3UhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj/Uubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMShj+Uubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjPUh]hname}(hjRUhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjNUubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMQhjJUubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjiUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeUhMQhjfUubah}(h]h ]h"]h$]h&]uh1jhjJUubeh}(h]h ]h"]h$]h&]uh1jrhjeUhMQhjGUubjs)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](jy)}(h ``spec...``h]j)}(hjUh]hspec...}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMRhjUubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hjUhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]j)}(hjUh]hstruct ssam_request_spec}(hjUhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_specuh1hhjUhMRhjUubh) defining the request.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjUhMRhjUubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jrhjUhMRhjGUubeh}(h]h ]h"]h$]h&]uh1jmhj+Uubh)}(h**Description**h]jX)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMThj+Uubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. The generated function takes care of setting up the request struct and buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjUhhhNhNubjX)}(h**spec**h]hspec}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjUubhX5, with the request having neither argument nor return value. The generated function takes care of setting up the request struct and buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMShj+Uubh)}(hThe generated function is defined as ``static int name(struct ssam_controller *ctrl)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is being sent.h](h%The generated function is defined as }(hjVhhhNhNubj)}(h1``static int name(struct ssam_controller *ctrl)``h]h-static int name(struct ssam_controller *ctrl)}(hj&VhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjVubh], returning the status of the request, which is zero on success and negative on failure. The }(hjVhhhNhNubj)}(h``ctrl``h]hctrl}(hj8VhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjVubhA parameter is the controller via which the request is being sent.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMZhj+Uubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjQVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM_hj+Uubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_W (C macro)c.SSAM_DEFINE_SYNC_REQUEST_WhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hjzVh]hSSAM_DEFINE_SYNC_REQUEST_W}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ](j j eh"]h$]h&]hhuh1jhj|Vhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMuubah}(h]h ]h"]h$]h&]hhjuh1jjjhjxVhhhjVhMuubah}(h]jsVah ](jjeh"]h$]h&]j"j#)j$huh1jhjVhMuhjuVhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjuVhhhjVhMuubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjVjIjVjJjKjLuh1jhhhj*9hNhNubh)}(h5``SSAM_DEFINE_SYNC_REQUEST_W (name, atype, spec...)``h]j)}(hjVh]h1SSAM_DEFINE_SYNC_REQUEST_W (name, atype, spec...)}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjVubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMwhj*9hhubj )}(h7Define synchronous SAM request function with argument. h]h)}(h6Define synchronous SAM request function with argument.h]h6Define synchronous SAM request function with argument.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMuhjVubah}(h]h ]h"]h$]h&]uh1j hjVhMuhj*9hhubjN)}(hX'**Parameters** ``name`` Name of the generated function. ``atype`` Type of the request's argument. ``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request argument is specified via the ``arg`` pointer. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjVubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMyhjVubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hj Wh]hname}(hj WhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjWubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMwhjWubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hj#WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhMwhj Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jrhjWhMwhjWubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hjCWh]hatype}(hjEWhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjAWubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMxhj=Wubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hj\WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXWhMxhjYWubah}(h]h ]h"]h$]h&]uh1jhj=Wubeh}(h]h ]h"]h$]h&]uh1jrhjXWhMxhjWubjs)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](jy)}(h ``spec...``h]j)}(hj|Wh]hspec...}(hj~WhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzWubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMyhjvWubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hjWhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]j)}(hjWh]hstruct ssam_request_spec}(hjWhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjWubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_specuh1hhjWhMyhjWubh) defining the request.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjWhMyhjWubah}(h]h ]h"]h$]h&]uh1jhjvWubeh}(h]h ]h"]h$]h&]uh1jrhjWhMyhjWubeh}(h]h ]h"]h$]h&]uh1jmhjVubh)}(h**Description**h]jX)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM{hjVubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjWhhhNhNubjX)}(h**spec**h]hspec}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWubh., with the request taking an argument of type }(hjWhhhNhNubjX)}(h **atype**h]hatype}(hj XhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWubhX and having no return value. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMzhjVubh)}(hXCThe generated function is defined as ``static int name(struct ssam_controller *ctrl, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request argument is specified via the ``arg`` pointer.h](h%The generated function is defined as }(hj#XhhhNhNubj)}(hC``static int name(struct ssam_controller *ctrl, const atype *arg)``h]h?static int name(struct ssam_controller *ctrl, const atype *arg)}(hj+XhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#Xubh], returning the status of the request, which is zero on success and negative on failure. The }(hj#XhhhNhNubj)}(h``ctrl``h]hctrl}(hj=XhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#Xubhf parameter is the controller via which the request is sent. The request argument is specified via the }(hj#XhhhNhNubj)}(h``arg``h]harg}(hjOXhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#Xubh pointer.}(hj#XhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjVubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjhXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_R (C macro)c.SSAM_DEFINE_SYNC_REQUEST_RhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hjXh]hSSAM_DEFINE_SYNC_REQUEST_R}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](j j eh"]h$]h&]hhuh1jhjXhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjXhhhjXhMubah}(h]jXah ](jjeh"]h$]h&]j"j#)j$huh1jhjXhMhjXhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjXhhhjXhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjXjIjXjJjKjLuh1jhhhj*9hNhNubh)}(h5``SSAM_DEFINE_SYNC_REQUEST_R (name, rtype, spec...)``h]j)}(hjXh]h1SSAM_DEFINE_SYNC_REQUEST_R (name, rtype, spec...)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjXubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(h;Define synchronous SAM request function with return value. h]h)}(h:Define synchronous SAM request function with return value.h]h:Define synchronous SAM request function with return value.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubah}(h]h ]h"]h$]h&]uh1j hjXhMhj*9hhubjN)}(hXP**Parameters** ``name`` Name of the generated function. ``rtype`` Type of the request's return value. ``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjYh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hj!Yh]hname}(hj#YhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjYubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjYubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hj:YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6YhMhj7Yubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jrhj6YhMhjYubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hjZYh]hrtype}(hj\YhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjXYubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjTYubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjsYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoYhMhjpYubah}(h]h ]h"]h$]h&]uh1jhjTYubeh}(h]h ]h"]h$]h&]uh1jrhjoYhMhjYubjs)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](jy)}(h ``spec...``h]j)}(hjYh]hspec...}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjYubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjYubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hjYhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]j)}(hjYh]hstruct ssam_request_spec}(hjYhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjYubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_specuh1hhjYhMhjYubh) defining the request.}(hjYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjYhMhjYubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jrhjYhMhjYubeh}(h]h ]h"]h$]h&]uh1jmhjXubh)}(h**Description**h]jX)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjZhhhNhNubjX)}(h**spec**h]hspec}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZubhH, with the request taking no argument but having a return value of type }(hjZhhhNhNubjX)}(h **rtype**h]hrtype}(hj!ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjZubhX. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubh)}(hX[The generated function is defined as ``static int name(struct ssam_controller *ctrl, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hj:ZhhhNhNubj)}(h=``static int name(struct ssam_controller *ctrl, rtype *ret)``h]h9static int name(struct ssam_controller *ctrl, rtype *ret)}(hjBZhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj:Zubh], returning the status of the request, which is zero on success and negative on failure. The }(hj:ZhhhNhNubj)}(h``ctrl``h]hctrl}(hjTZhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj:Zubh parameter is the controller via which the request is sent. The request’s return value is written to the memory pointed to by the }(hj:ZhhhNhNubj)}(h``ret``h]hret}(hjfZhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj:Zubh parameter.}(hj:ZhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%SSAM_DEFINE_SYNC_REQUEST_WR (C macro)c.SSAM_DEFINE_SYNC_REQUEST_WRhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hjZh]hSSAM_DEFINE_SYNC_REQUEST_WR}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ](j j eh"]h$]h&]hhuh1jhjZhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjZhhhjZhMubah}(h]jZah ](jjeh"]h$]h&]j"j#)j$huh1jhjZhMhjZhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjZhhhjZhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjZjIjZjJjKjLuh1jhhhj*9hNhNubh)}(h=``SSAM_DEFINE_SYNC_REQUEST_WR (name, atype, rtype, spec...)``h]j)}(hjZh]h9SSAM_DEFINE_SYNC_REQUEST_WR (name, atype, rtype, spec...)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjZubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(hMDefine synchronous SAM request function with both argument and return value. h]h)}(hLDefine synchronous SAM request function with both argument and return value.h]hLDefine synchronous SAM request function with both argument and return value.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjZubah}(h]h ]h"]h$]h&]uh1j hj [hMhj*9hhubjN)}(hX**Parameters** ``name`` Name of the generated function. ``atype`` Type of the request's argument. ``rtype`` Type of the request's return value. ``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hj[h]h Parameters}(hjhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hj8[h]hname}(hj:[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj6[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj2[ubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjQ[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM[hMhjN[ubah}(h]h ]h"]h$]h&]uh1jhj2[ubeh}(h]h ]h"]h$]h&]uh1jrhjM[hMhj/[ubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hjq[h]hatype}(hjs[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjo[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjk[ubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhjk[ubeh}(h]h ]h"]h$]h&]uh1jrhj[hMhj/[ubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hj[h]hrtype}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jrhj[hMhj/[ubjs)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](jy)}(h ``spec...``h]j)}(hj[h]hspec...}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hj[hhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]j)}(hj\h]hstruct ssam_request_spec}(hj\hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_specuh1hhj[hMhj[ubh) defining the request.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj[hMhj[ubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jrhj[hMhj/[ubeh}(h]h ]h"]h$]h&]uh1jmhj[ubh)}(h**Description**h]jX)}(hjA\h]h Description}(hjC\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?\ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjW\hhhNhNubjX)}(h**spec**h]hspec}(hj_\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjW\ubh., with the request taking an argument of type }(hjW\hhhNhNubjX)}(h **atype**h]hatype}(hjq\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjW\ubh# and having a return value of type }(hjW\hhhNhNubjX)}(h **rtype**h]hrtype}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjW\ubhX. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjW\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubh)}(hXThe generated function is defined as ``static int name(struct ssam_controller *ctrl, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent. The request argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hj\hhhNhNubj)}(hO``static int name(struct ssam_controller *ctrl, const atype *arg, rtype *ret)``h]hKstatic int name(struct ssam_controller *ctrl, const atype *arg, rtype *ret)}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\ubh], returning the status of the request, which is zero on success and negative on failure. The }(hj\hhhNhNubj)}(h``ctrl``h]hctrl}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\ubhf parameter is the controller via which the request is sent. The request argument is specified via the }(hj\hhhNhNubj)}(h``arg``h]harg}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\ubhR pointer. The request’s return value is written to the memory pointed to by the }(hj\hhhNhNubj)}(h``ret``h]hret}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\ubh parameter.}(hj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_N (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_NhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Nh]j)}(hj]h]hSSAM_DEFINE_SYNC_REQUEST_MD_N}(hj&]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"]ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj]hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj]hhhj9]hMubah}(h]j]ah ](jjeh"]h$]h&]j"j#)j$huh1jhj9]hMhj]hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj]hhhj9]hMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjR]jIjR]jJjKjLuh1jhhhj*9hNhNubh)}(h1``SSAM_DEFINE_SYNC_REQUEST_MD_N (name, spec...)``h]j)}(hjX]h]h-SSAM_DEFINE_SYNC_REQUEST_MD_N (name, spec...)}(hjZ]hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjV]ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(h]Define synchronous multi-device SAM request function with neither argument nor return value. h]h)}(h\Define synchronous multi-device SAM request function with neither argument nor return value.h]h\Define synchronous multi-device SAM request function with neither argument nor return value.}(hjr]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjn]ubah}(h]h ]h"]h$]h&]uh1j hj]hMhj*9hhubjN)}(hXO**Parameters** ``name`` Name of the generated function. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hj]h]h Parameters}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj]ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj]ubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hj]h]hname}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj]ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj]ubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jrhj]hMhj]ubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hj]h]hspec...}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj]ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj]ubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hj]hhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hj^h]hstruct ssam_request_spec_md}(hj ^hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj^ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhj]hMhj]ubh) defining the request.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jrhj]hMhj]ubeh}(h]h ]h"]h$]h&]uh1jmhj]ubh)}(h**Description**h]jX)}(hjC^h]h Description}(hjE^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjA^ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj]ubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjY^hhhNhNubjX)}(h**spec**h]hspec}(hja^hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjY^ubhX, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjY^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj]ubh)}(hXJThe generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID.h](h%The generated function is defined as }(hjz^hhhNhNubj)}(hA``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid)``h]h=static int name(struct ssam_controller *ctrl, u8 tid, u8 iid)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjz^ubh], returning the status of the request, which is zero on success and negative on failure. The }(hjz^hhhNhNubj)}(h``ctrl``h]hctrl}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjz^ubh< parameter is the controller via which the request is sent, }(hjz^hhhNhNubj)}(h``tid``h]htid}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjz^ubh$ the target ID for the request, and }(hjz^hhhNhNubj)}(h``iid``h]hiid}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjz^ubh the instance ID.}(hjz^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM"hj]ubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_W (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_WhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Wh]j)}(hj^h]hSSAM_DEFINE_SYNC_REQUEST_MD_W}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj^hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM>ubah}(h]h ]h"]h$]h&]hhjuh1jjjhj^hhhj_hM>ubah}(h]j^ah ](jjeh"]h$]h&]j"j#)j$huh1jhj_hM>hj^hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj^hhhj_hM>ubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj0_jIj0_jJjKjLuh1jhhhj*9hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_MD_W (name, atype, spec...)``h]j)}(hj6_h]h4SSAM_DEFINE_SYNC_REQUEST_MD_W (name, atype, spec...)}(hj8_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj4_ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM@hj*9hhubj )}(hDDefine synchronous multi-device SAM request function with argument. h]h)}(hCDefine synchronous multi-device SAM request function with argument.h]hCDefine synchronous multi-device SAM request function with argument.}(hjP_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM>hjL_ubah}(h]h ]h"]h$]h&]uh1j hj^_hM>hj*9hhubjN)}(hX**Parameters** ``name`` Name of the generated function. ``atype`` Type of the request's argument. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request argument is specified via the ``arg`` pointer. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjk_h]h Parameters}(hjm_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhji_ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMBhje_ubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hj_h]hname}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj_ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM@hj_ubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hM@hj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jrhj_hM@hj_ubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hj_h]hatype}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj_ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMAhj_ubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMAhj_ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jrhj_hMAhj_ubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hj_h]hspec...}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj_ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMBhj_ubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hj`hhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hj`h]hstruct ssam_request_spec_md}(hj!`hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj`ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhj`hMBhj`ubh) defining the request.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMBhj`ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jrhj`hMBhj_ubeh}(h]h ]h"]h$]h&]uh1jmhje_ubh)}(h**Description**h]jX)}(hjZ`h]h Description}(hj\`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjX`ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMDhje_ubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjp`hhhNhNubjX)}(h**spec**h]hspec}(hjx`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp`ubh., with the request taking an argument of type }(hjp`hhhNhNubjX)}(h **atype**h]hatype}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjp`ubhXq and having no return value. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjp`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMChje_ubh)}(hXThe generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request argument is specified via the ``arg`` pointer.h](h%The generated function is defined as }(hj`hhhNhNubj)}(hS``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg)``h]hOstatic int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg)}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`ubh], returning the status of the request, which is zero on success and negative on failure. The }(hj`hhhNhNubj)}(h``ctrl``h]hctrl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`ubh< parameter is the controller via which the request is sent, }(hj`hhhNhNubj)}(h``tid``h]htid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`ubh$ the target ID for the request, and }(hj`hhhNhNubj)}(h``iid``h]hiid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`ubh< the instance ID. The request argument is specified via the }(hj`hhhNhNubj)}(h``arg``h]harg}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`ubh pointer.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMKhje_ubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hj ahhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMRhje_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_R (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_RhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hj5ah]hSSAM_DEFINE_SYNC_REQUEST_MD_R}(hj?ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;aubah}(h]h ](j j eh"]h$]h&]hhuh1jhj7ahhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMiubah}(h]h ]h"]h$]h&]hhjuh1jjjhj3ahhhjRahMiubah}(h]j.aah ](jjeh"]h$]h&]j"j#)j$huh1jhjRahMihj0ahhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj0ahhhjRahMiubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjkajIjkajJjKjLuh1jhhhj*9hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_MD_R (name, rtype, spec...)``h]j)}(hjqah]h4SSAM_DEFINE_SYNC_REQUEST_MD_R (name, rtype, spec...)}(hjsahhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjoaubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMkhj*9hhubj )}(hHDefine synchronous multi-device SAM request function with return value. h]h)}(hGDefine synchronous multi-device SAM request function with return value.h]hGDefine synchronous multi-device SAM request function with return value.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMihjaubah}(h]h ]h"]h$]h&]uh1j hjahMihj*9hhubjN)}(hX **Parameters** ``name`` Name of the generated function. ``rtype`` Type of the request's return value. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjaubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMmhjaubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjah]hname}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMkhjaubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMkhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jrhjahMkhjaubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hjah]hrtype}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjaubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMlhjaubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMlhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jrhjbhMlhjaubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hj7bh]hspec...}(hj9bhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj5bubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMmhj1bubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hjPbhhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hjZbh]hstruct ssam_request_spec_md}(hj\bhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjXbubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjLbhMmhjPbubh) defining the request.}(hjPbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjLbhMmhjMbubah}(h]h ]h"]h$]h&]uh1jhj1bubeh}(h]h ]h"]h$]h&]uh1jrhjLbhMmhjaubeh}(h]h ]h"]h$]h&]uh1jmhjaubh)}(h**Description**h]jX)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMohjaubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjbhhhNhNubjX)}(h**spec**h]hspec}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbubhH, with the request taking no argument but having a return value of type }(hjbhhhNhNubjX)}(h **rtype**h]hrtype}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbubhXd. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMnhjaubh)}(hXThe generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hjbhhhNhNubj)}(hM``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, rtype *ret)``h]hIstatic int name(struct ssam_controller *ctrl, u8 tid, u8 iid, rtype *ret)}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubh], returning the status of the request, which is zero on success and negative on failure. The }(hjbhhhNhNubj)}(h``ctrl``h]hctrl}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubh< parameter is the controller via which the request is sent, }(hjbhhhNhNubj)}(h``tid``h]htid}(hj chhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubh$ the target ID for the request, and }(hjbhhhNhNubj)}(h``iid``h]hiid}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubhZ the instance ID. The request’s return value is written to the memory pointed to by the }(hjbhhhNhNubj)}(h``ret``h]hret}(hj.chhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubh parameter.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMvhjaubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjGchhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM}hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(SSAM_DEFINE_SYNC_REQUEST_MD_WR (C macro) c.SSAM_DEFINE_SYNC_REQUEST_MD_WRhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hjpch]hSSAM_DEFINE_SYNC_REQUEST_MD_WR}(hjzchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvcubah}(h]h ](j j eh"]h$]h&]hhuh1jhjrchhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjnchhhjchMubah}(h]jicah ](jjeh"]h$]h&]j"j#)j$huh1jhjchMhjkchhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjkchhhjchMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjcjIjcjJjKjLuh1jhhhj*9hNhNubh)}(h@``SSAM_DEFINE_SYNC_REQUEST_MD_WR (name, atype, rtype, spec...)``h]j)}(hjch]h`) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjcubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjdh]hname}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjcubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jrhjdhMhjcubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hj9dh]hatype}(hj;dhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj7dubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj3dubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hjRdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNdhMhjOdubah}(h]h ]h"]h$]h&]uh1jhj3dubeh}(h]h ]h"]h$]h&]uh1jrhjNdhMhjcubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hjrdh]hrtype}(hjtdhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjpdubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjldubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjldubeh}(h]h ]h"]h$]h&]uh1jrhjdhMhjcubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hjdh]hspec...}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjdubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hjdhhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hjdh]hstruct ssam_request_spec_md}(hjdhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjdubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjdhMhjdubh) defining the request.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]uh1jrhjdhMhjcubeh}(h]h ]h"]h$]h&]uh1jmhjcubh)}(h**Description**h]jX)}(hj eh]h Description}(hj ehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjehhhNhNubjX)}(h**spec**h]hspec}(hj'ehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubh., with the request taking an argument of type }(hjehhhNhNubjX)}(h **atype**h]hatype}(hj9ehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubh# and having a return value of type }(hjehhhNhNubjX)}(h **rtype**h]hrtype}(hjKehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubhXd. Device specifying parameters are not hard-coded, but instead must be provided to the function. The generated function takes care of setting up the request and response structs, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubh)}(hXThe generated function is defined as ``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``ctrl`` parameter is the controller via which the request is sent, ``tid`` the target ID for the request, and ``iid`` the instance ID. The request argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hjdehhhNhNubj)}(h_``static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg, rtype *ret)``h]h[static int name(struct ssam_controller *ctrl, u8 tid, u8 iid, const atype *arg, rtype *ret)}(hjlehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubh], returning the status of the request, which is zero on success and negative on failure. The }(hjdehhhNhNubj)}(h``ctrl``h]hctrl}(hj~ehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubh< parameter is the controller via which the request is sent, }(hjdehhhNhNubj)}(h``tid``h]htid}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubh$ the target ID for the request, and }(hjdehhhNhNubj)}(h``iid``h]hiid}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubh< the instance ID. The request argument is specified via the }(hjdehhhNhNubj)}(h``arg``h]harg}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubhR pointer. The request’s return value is written to the memory pointed to by the }(hjdehhhNhNubj)}(h``ret``h]hret}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjdeubh parameter.}(hjdehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_notif_flags (C enum)c.ssam_notif_flagshNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_notif_flagsh]j)}(henum ssam_notif_flagsh](j)}(hjh]henum}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj fhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj fhhhjfhMubj)}(hssam_notif_flagsh]j)}(hjfh]hssam_notif_flags}(hj.fhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*fubah}(h]h ](j j eh"]h$]h&]hhuh1jhj fhhhjfhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjfhhhjfhMubah}(h]jfah ](jjeh"]h$]h&]j"j#)j$huh1jhjfhMhjfhhubj&)}(hhh]h)}(hBFlags used in return values from SSAM notifier callback functions.h]hBFlags used in return values from SSAM notifier callback functions.}(hjPfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjMfhhubah}(h]h ]h"]h$]h&]uh1j%hjfhhhjfhMubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHjhfjIjhfjJjKjLuh1jhhhj*9hNhNubjN)}(hXu**Constants** ``SSAM_NOTIF_HANDLED`` Indicates that the notification has been handled. This flag should be set by the handler if the handler can act/has acted upon the event provided to it. This flag should not be set if the handler is not a primary handler intended for the provided event. ``SSAM_NOTIF_STOP`` Indicates that the notifier traversal should stop. If this flag is returned from a notifier callback, notifier chain traversal will immediately stop and any remaining notifiers will not be called. This flag is automatically set when ssam_notifier_from_errno() is called with a negative error value.h](h)}(h **Constants**h]jX)}(hjrfh]h Constants}(hjtfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjpfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjlfubjn)}(hhh](js)}(hX``SSAM_NOTIF_HANDLED`` Indicates that the notification has been handled. This flag should be set by the handler if the handler can act/has acted upon the event provided to it. This flag should not be set if the handler is not a primary handler intended for the provided event. h](jy)}(h``SSAM_NOTIF_HANDLED``h]j)}(hjfh]hSSAM_NOTIF_HANDLED}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjfubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjfubj)}(hhh]h)}(hIndicates that the notification has been handled. This flag should be set by the handler if the handler can act/has acted upon the event provided to it. This flag should not be set if the handler is not a primary handler intended for the provided event.h]hIndicates that the notification has been handled. This flag should be set by the handler if the handler can act/has acted upon the event provided to it. This flag should not be set if the handler is not a primary handler intended for the provided event.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jrhjfhMhjfubjs)}(hX>``SSAM_NOTIF_STOP`` Indicates that the notifier traversal should stop. If this flag is returned from a notifier callback, notifier chain traversal will immediately stop and any remaining notifiers will not be called. This flag is automatically set when ssam_notifier_from_errno() is called with a negative error value.h](jy)}(h``SSAM_NOTIF_STOP``h]j)}(hjfh]hSSAM_NOTIF_STOP}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjfubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjfubj)}(hhh]h)}(hX*Indicates that the notifier traversal should stop. If this flag is returned from a notifier callback, notifier chain traversal will immediately stop and any remaining notifiers will not be called. This flag is automatically set when ssam_notifier_from_errno() is called with a negative error value.h]hX*Indicates that the notifier traversal should stop. If this flag is returned from a notifier callback, notifier chain traversal will immediately stop and any remaining notifiers will not be called. This flag is automatically set when ssam_notifier_from_errno() is called with a negative error value.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjfubah}(h]h ]h"]h$]h&]uh1jhjfubeh}(h]h ]h"]h$]h&]uh1jrhjfhMhjfubeh}(h]h ]h"]h$]h&]uh1jmhjlfubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj gubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(hIf this flag has not been set by any handler after the notifier chain has been traversed, a warning will be emitted, stating that the event has not been handled. h]h)}(hIf this flag has not been set by any handler after the notifier chain has been traversed, a warning will be emitted, stating that the event has not been handled.h]hIf this flag has not been set by any handler after the notifier chain has been traversed, a warning will be emitted, stating that the event has not been handled.}(hj(ghhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj$gubah}(h]h ]h"]h$]h&]uh1j hj6ghMhj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_notifier_block (C struct)c.ssam_notifier_blockhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_notifier_blockh]j)}(hstruct ssam_notifier_blockh](j)}(hjh]hstruct}(hjVghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRghhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjdghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRghhhjcghMubj)}(hssam_notifier_blockh]j)}(hjPgh]hssam_notifier_block}(hjvghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrgubah}(h]h ](j j eh"]h$]h&]hhuh1jhjRghhhjcghMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjNghhhjcghMubah}(h]jIgah ](jjeh"]h$]h&]j"j#)j$huh1jhjcghMhjKghhubj&)}(hhh]h)}(h1Base notifier block for SSAM event notifications.h]h1Base notifier block for SSAM event notifications.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM hjghhubah}(h]h ]h"]h$]h&]uh1j%hjKghhhjcghMubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjgjIjgjJjKjLuh1jhhhj*9hNhNubjN)}(hXW**Definition**:: struct ssam_notifier_block { struct list_head node; ssam_notifier_fn_t fn; int priority; }; **Members** ``node`` The node for the list of notifiers. ``fn`` The callback function of this notifier. This function takes the respective notifier block and event as input and should return a notifier value, which can either be obtained from the flags provided in :c:type:`enum ssam_notif_flags `, converted from a standard error value via ssam_notifier_from_errno(), or a combination of both (e.g. ``ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED``). ``priority`` Priority value determining the order in which notifier callbacks will be called. A higher value means higher priority, i.e. the associated callback will be executed earlier than other (lower priority) callbacks.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjgubh:}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubj,)}(hgstruct ssam_notifier_block { struct list_head node; ssam_notifier_fn_t fn; int priority; };h]hgstruct ssam_notifier_block { struct list_head node; ssam_notifier_fn_t fn; int priority; };}hjgsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubh)}(h **Members**h]jX)}(hjgh]hMembers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjgubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubjn)}(hhh](js)}(h-``node`` The node for the list of notifiers. h](jy)}(h``node``h]j)}(hjhh]hnode}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubj)}(hhh]h)}(h#The node for the list of notifiers.h]h#The node for the list of notifiers.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1jrhjhhMhjgubjs)}(hX``fn`` The callback function of this notifier. This function takes the respective notifier block and event as input and should return a notifier value, which can either be obtained from the flags provided in :c:type:`enum ssam_notif_flags `, converted from a standard error value via ssam_notifier_from_errno(), or a combination of both (e.g. ``ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED``). h](jy)}(h``fn``h]j)}(hj>hh]hfn}(hj@hhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj`, converted from a standard error value via ssam_notifier_from_errno(), or a combination of both (e.g. ``ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED``).h](hThe callback function of this notifier. This function takes the respective notifier block and event as input and should return a notifier value, which can either be obtained from the flags provided in }(hjWhhhhNhNubh)}(h2:c:type:`enum ssam_notif_flags `h]j)}(hjahh]henum ssam_notif_flags}(hjchhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj_hubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_notif_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjWhubhg, converted from a standard error value via ssam_notifier_from_errno(), or a combination of both (e.g. }(hjWhhhhNhNubj)}(h4``ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED``h]h0ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjWhubh).}(hjWhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~hhMhjThubah}(h]h ]h"]h$]h&]uh1jhj8hubeh}(h]h ]h"]h$]h&]uh1jrhjShhMhjgubjs)}(h``priority`` Priority value determining the order in which notifier callbacks will be called. A higher value means higher priority, i.e. the associated callback will be executed earlier than other (lower priority) callbacks.h](jy)}(h ``priority``h]j)}(hjhh]hpriority}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjhubj)}(hhh]h)}(hPriority value determining the order in which notifier callbacks will be called. A higher value means higher priority, i.e. the associated callback will be executed earlier than other (lower priority) callbacks.h]hPriority value determining the order in which notifier callbacks will be called. A higher value means higher priority, i.e. the associated callback will be executed earlier than other (lower priority) callbacks.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjhubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jrhjhhMhjgubeh}(h]h ]h"]h$]h&]uh1jmhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ssam_notifier_from_errno (C function)c.ssam_notifier_from_errnohNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h&u32 ssam_notifier_from_errno (int err)h]j)}(h%u32 ssam_notifier_from_errno(int err)h](h)}(hhh]j)}(hu32h]hu32}(hj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj imodnameN classnameNjj)}j]jI )}jA ssam_notifier_from_errnosbc.ssam_notifier_from_errnoasbuh1hhjihhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM ubj)}(h h]h }(hj,ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjihhhj+ihM ubj)}(hssam_notifier_from_errnoh]j)}(hj(ih]hssam_notifier_from_errno}(hj>ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:iubah}(h]h ](j j eh"]h$]h&]hhuh1jhjihhhj+ihM ubjv )}(h (int err)h]j| )}(hint errh](j)}(hinth]hint}(hjYihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUiubj)}(h h]h }(hjgihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUiubj)}(herrh]herr}(hjuihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUiubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjQiubah}(h]h ]h"]h$]h&]hhuh1ju hjihhhj+ihM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhhj+ihM ubah}(h]jhah ](jjeh"]h$]h&]j"j#)j$huh1jhj+ihM hjhhhubj&)}(hhh]h)}(h5Convert standard error value to notifier return code.h]h5Convert standard error value to notifier return code.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM hjihhubah}(h]h ]h"]h$]h&]uh1j%hjhhhhj+ihM ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjijIjijJjKjLuh1jhhhj*9hNhNubjN)}(hXX**Parameters** ``int err`` The error code to convert, must be negative (in case of failure) or zero (in case of success). **Return** Returns the notifier return value obtained by converting the specified **err** value. In case **err** is negative, the ``SSAM_NOTIF_STOP`` flag will be set, causing notifier call chain traversal to abort.h](h)}(h**Parameters**h]jX)}(hjih]h Parameters}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjiubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM$hjiubjn)}(hhh]js)}(hk``int err`` The error code to convert, must be negative (in case of failure) or zero (in case of success). h](jy)}(h ``int err``h]j)}(hjih]hint err}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjiubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM#hjiubj)}(hhh]h)}(h^The error code to convert, must be negative (in case of failure) or zero (in case of success).h]h^The error code to convert, must be negative (in case of failure) or zero (in case of success).}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM"hjiubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jrhjihM#hjiubah}(h]h ]h"]h$]h&]uh1jmhjiubh)}(h **Return**h]jX)}(hjjh]hReturn}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM%hjiubh)}(hReturns the notifier return value obtained by converting the specified **err** value. In case **err** is negative, the ``SSAM_NOTIF_STOP`` flag will be set, causing notifier call chain traversal to abort.h](hGReturns the notifier return value obtained by converting the specified }(hj2jhhhNhNubjX)}(h**err**h]herr}(hj:jhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2jubh value. In case }(hj2jhhhNhNubjX)}(h**err**h]herr}(hjLjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj2jubh is negative, the }(hj2jhhhNhNubj)}(h``SSAM_NOTIF_STOP``h]hSSAM_NOTIF_STOP}(hj^jhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj2jubhB flag will be set, causing notifier call chain traversal to abort.}(hj2jhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM%hjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ssam_notifier_to_errno (C function)c.ssam_notifier_to_errnohNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h$int ssam_notifier_to_errno (u32 ret)h]j)}(h#int ssam_notifier_to_errno(u32 ret)h](j)}(hinth]hint}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM2ubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhhjjhM2ubj)}(hssam_notifier_to_errnoh]j)}(hssam_notifier_to_errnoh]hssam_notifier_to_errno}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjjhhhjjhM2ubjv )}(h (u32 ret)h]j| )}(hu32 reth](h)}(hhh]j)}(hu32h]hu32}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjjmodnameN classnameNjj)}j]jI )}jA jjsbc.ssam_notifier_to_errnoasbuh1hhjjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hreth]hret}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjjubah}(h]h ]h"]h$]h&]hhuh1ju hjjhhhjjhM2ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjjhhhjjhM2ubah}(h]jjah ](jjeh"]h$]h&]j"j#)j$huh1jhjjhM2hjjhhubj&)}(hhh]h)}(h5Convert notifier return code to standard error value.h]h5Convert notifier return code to standard error value.}(hj/khhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM2hj,khhubah}(h]h ]h"]h$]h&]uh1j%hjjhhhjjhM2ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjGkjIjGkjJjKjLuh1jhhhj*9hNhNubjN)}(h**Parameters** ``u32 ret`` The notifier return value to convert. **Return** Returns the negative error value encoded in **ret** or zero if **ret** indicates success.h](h)}(h**Parameters**h]jX)}(hjQkh]h Parameters}(hjSkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjOkubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjKkubjn)}(hhh]js)}(h2``u32 ret`` The notifier return value to convert. h](jy)}(h ``u32 ret``h]j)}(hjpkh]hu32 ret}(hjrkhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjnkubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM4hjjkubj)}(hhh]h)}(h%The notifier return value to convert.h]h%The notifier return value to convert.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhM4hjkubah}(h]h ]h"]h$]h&]uh1jhjjkubeh}(h]h ]h"]h$]h&]uh1jrhjkhM4hjgkubah}(h]h ]h"]h$]h&]uh1jmhjKkubh)}(h **Return**h]jX)}(hjkh]hReturn}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjKkubh)}(hYReturns the negative error value encoded in **ret** or zero if **ret** indicates success.h](h,Returns the negative error value encoded in }(hjkhhhNhNubjX)}(h**ret**h]hret}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkubh or zero if }(hjkhhhNhNubjX)}(h**ret**h]hret}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjkubh indicates success.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjKkubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_registry (C struct)c.ssam_event_registryhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_event_registryh]j)}(hstruct ssam_event_registryh](j)}(hjh]hstruct}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM<ubj)}(h h]h }(hj"lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj!lhM<ubj)}(hssam_event_registryh]j)}(hjlh]hssam_event_registry}(hj4lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0lubah}(h]h ](j j eh"]h$]h&]hhuh1jhjlhhhj!lhM<ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj lhhhj!lhM<ubah}(h]jlah ](jjeh"]h$]h&]j"j#)j$huh1jhj!lhM<hj lhhubj&)}(hhh]h)}(h0Registry specification used for enabling events.h]h0Registry specification used for enabling events.}(hjVlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMBhjSlhhubah}(h]h ]h"]h$]h&]uh1j%hj lhhhj!lhM<ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjnljIjnljJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_event_registry { u8 target_category; u8 target_id; u8 cid_enable; u8 cid_disable; }; **Members** ``target_category`` Target category for the event registry requests. ``target_id`` Target ID for the event registry requests. ``cid_enable`` Command ID for the event-enable request. ``cid_disable`` Command ID for the event-disable request.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjzlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvlubh:}(hjvlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhjrlubj,)}(hpstruct ssam_event_registry { u8 target_category; u8 target_id; u8 cid_enable; u8 cid_disable; };h]hpstruct ssam_event_registry { u8 target_category; u8 target_id; u8 cid_enable; u8 cid_disable; };}hjlsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMHhjrlubh)}(h **Members**h]jX)}(hjlh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjlubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOhjrlubjn)}(hhh](js)}(hE``target_category`` Target category for the event registry requests. h](jy)}(h``target_category``h]j)}(hjlh]htarget_category}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjlubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMDhjlubj)}(hhh]h)}(h0Target category for the event registry requests.h]h0Target category for the event registry requests.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMDhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jrhjlhMDhjlubjs)}(h9``target_id`` Target ID for the event registry requests. h](jy)}(h ``target_id``h]j)}(hjlh]h target_id}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjlubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMEhjlubj)}(hhh]h)}(h*Target ID for the event registry requests.h]h*Target ID for the event registry requests.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMEhjmubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jrhjmhMEhjlubjs)}(h8``cid_enable`` Command ID for the event-enable request. h](jy)}(h``cid_enable``h]j)}(hj5mh]h cid_enable}(hj7mhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj3mubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhj/mubj)}(hhh]h)}(h(Command ID for the event-enable request.h]h(Command ID for the event-enable request.}(hjNmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJmhMFhjKmubah}(h]h ]h"]h$]h&]uh1jhj/mubeh}(h]h ]h"]h$]h&]uh1jrhjJmhMFhjlubjs)}(h9``cid_disable`` Command ID for the event-disable request.h](jy)}(h``cid_disable``h]j)}(hjnmh]h cid_disable}(hjpmhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjlmubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhjhmubj)}(hhh]h)}(h)Command ID for the event-disable request.h]h)Command ID for the event-disable request.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMGhjmubah}(h]h ]h"]h$]h&]uh1jhjhmubeh}(h]h ]h"]h$]h&]uh1jrhjmhMFhjlubeh}(h]h ]h"]h$]h&]uh1jmhjrlubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hjmh]h Description}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjmubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMJhj*9hhubh)}(hXThis struct describes a SAM event registry via the minimal collection of SAM IDs specifying the requests to use for enabling and disabling an event. The individual event to be enabled/disabled itself is specified via :c:type:`struct ssam_event_id `.h](hThis struct describes a SAM event registry via the minimal collection of SAM IDs specifying the requests to use for enabling and disabling an event. The individual event to be enabled/disabled itself is specified via }(hjmhhhNhNubh)}(h.:c:type:`struct ssam_event_id `h]j)}(hjmh]hstruct ssam_event_id}(hjmhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjmubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_event_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMGhjmubh.}(hjmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMGhj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_id (C struct)c.ssam_event_idhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h ssam_event_idh]j)}(hstruct ssam_event_idh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOubj)}(h h]h }(hj nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnhhhjnhMOubj)}(h ssam_event_idh]j)}(hj nh]h ssam_event_id}(hj2nhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.nubah}(h]h ](j j eh"]h$]h&]hhuh1jhjnhhhjnhMOubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj nhhhjnhMOubah}(h]jnah ](jjeh"]h$]h&]j"j#)j$huh1jhjnhMOhjnhhubj&)}(hhh]h)}(h)Unique event ID used for enabling events.h]h)Unique event ID used for enabling events.}(hjTnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMUhjQnhhubah}(h]h ]h"]h$]h&]uh1j%hjnhhhjnhMOubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjlnjIjlnjJjKjLuh1jhhhj*9hNhNubjN)}(h**Definition**:: struct ssam_event_id { u8 target_category; u8 instance; }; **Members** ``target_category`` Target category of the event source. ``instance`` Instance ID of the event source.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjxnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjtnubh:}(hjtnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMYhjpnubj,)}(hBstruct ssam_event_id { u8 target_category; u8 instance; };h]hBstruct ssam_event_id { u8 target_category; u8 instance; };}hjnsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM[hjpnubh)}(h **Members**h]jX)}(hjnh]hMembers}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM`hjpnubjn)}(hhh](js)}(h9``target_category`` Target category of the event source. h](jy)}(h``target_category``h]j)}(hjnh]htarget_category}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjnubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMWhjnubj)}(hhh]h)}(h$Target category of the event source.h]h$Target category of the event source.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMWhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jrhjnhMWhjnubjs)}(h-``instance`` Instance ID of the event source.h](jy)}(h ``instance``h]j)}(hjnh]hinstance}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjnubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMWhjnubj)}(hhh]h)}(h Instance ID of the event source.h]h Instance ID of the event source.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMXhjoubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1jrhjohMWhjnubeh}(h]h ]h"]h$]h&]uh1jmhjpnubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubh)}(h**Description**h]jX)}(hj=oh]h Description}(hj?ohhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj;oubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM[hj*9hhubh)}(hThis struct specifies the event to be enabled/disabled via an externally provided registry. It does not specify the registry to be used itself, this is done via :c:type:`struct ssam_event_registry `.h](hThis struct specifies the event to be enabled/disabled via an externally provided registry. It does not specify the registry to be used itself, this is done via }(hjSohhhNhNubh)}(h::c:type:`struct ssam_event_registry `h]j)}(hj]oh]hstruct ssam_event_registry}(hj_ohhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj[oubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_event_registryuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMXhjSoubh.}(hjSohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzohMXhj*9hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_mask (C enum)c.ssam_event_maskhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_event_maskh]j)}(henum ssam_event_maskh](j)}(hjh]henum}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM_ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjohM_ubj)}(hssam_event_maskh]j)}(hjoh]hssam_event_mask}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ](j j eh"]h$]h&]hhuh1jhjohhhjohM_ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjohhhjohM_ubah}(h]joah ](jjeh"]h$]h&]j"j#)j$huh1jhjohM_hjohhubj&)}(hhh]h)}(h5Flags specifying how events are matched to notifiers.h]h5Flags specifying how events are matched to notifiers.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMchjohhubah}(h]h ]h"]h$]h&]uh1j%hjohhhjohM_ubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHjojIjojJjKjLuh1jhhhj*9hNhNubjN)}(hXm**Constants** ``SSAM_EVENT_MASK_TARGET`` In addition to filtering by target category, only execute the notifier callback for events with a target ID matching to the one of the registry used for enabling/disabling the event. ``SSAM_EVENT_MASK_INSTANCE`` In addition to filtering by target category, only execute the notifier callback for events with an instance ID matching to the instance ID used when enabling the event. ``SSAM_EVENT_MASK_NONE`` Run the callback for any event with matching target category. Do not do any additional filtering. ``SSAM_EVENT_MASK_STRICT`` Do all the filtering above.h](h)}(h **Constants**h]jX)}(hjph]h Constants}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjpubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMghjoubjn)}(hhh](js)}(h``SSAM_EVENT_MASK_TARGET`` In addition to filtering by target category, only execute the notifier callback for events with a target ID matching to the one of the registry used for enabling/disabling the event. h](jy)}(h``SSAM_EVENT_MASK_TARGET``h]j)}(hj!ph]hSSAM_EVENT_MASK_TARGET}(hj#phhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMlhjpubj)}(hhh]h)}(hIn addition to filtering by target category, only execute the notifier callback for events with a target ID matching to the one of the registry used for enabling/disabling the event.h]hIn addition to filtering by target category, only execute the notifier callback for events with a target ID matching to the one of the registry used for enabling/disabling the event.}(hj:phhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMjhj7pubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jrhj6phMlhjpubjs)}(h``SSAM_EVENT_MASK_INSTANCE`` In addition to filtering by target category, only execute the notifier callback for events with an instance ID matching to the instance ID used when enabling the event. h](jy)}(h``SSAM_EVENT_MASK_INSTANCE``h]j)}(hj[ph]hSSAM_EVENT_MASK_INSTANCE}(hj]phhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjYpubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMqhjUpubj)}(hhh]h)}(hIn addition to filtering by target category, only execute the notifier callback for events with an instance ID matching to the instance ID used when enabling the event.h]hIn addition to filtering by target category, only execute the notifier callback for events with an instance ID matching to the instance ID used when enabling the event.}(hjtphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMohjqpubah}(h]h ]h"]h$]h&]uh1jhjUpubeh}(h]h ]h"]h$]h&]uh1jrhjpphMqhjpubjs)}(h{``SSAM_EVENT_MASK_NONE`` Run the callback for any event with matching target category. Do not do any additional filtering. h](jy)}(h``SSAM_EVENT_MASK_NONE``h]j)}(hjph]hSSAM_EVENT_MASK_NONE}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMuhjpubj)}(hhh]h)}(haRun the callback for any event with matching target category. Do not do any additional filtering.h]haRun the callback for any event with matching target category. Do not do any additional filtering.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMthjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jrhjphMuhjpubjs)}(h6``SSAM_EVENT_MASK_STRICT`` Do all the filtering above.h](jy)}(h``SSAM_EVENT_MASK_STRICT``h]j)}(hjph]hSSAM_EVENT_MASK_STRICT}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjpubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMwhjpubj)}(hhh]h)}(hDo all the filtering above.h]hDo all the filtering above.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMxhjpubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jrhjphMwhjpubeh}(h]h ]h"]h$]h&]uh1jmhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSAM_EVENT_REGISTRY (C macro)c.SSAM_EVENT_REGISTRYhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hSSAM_EVENT_REGISTRYh]j)}(hSSAM_EVENT_REGISTRYh]j)}(hSSAM_EVENT_REGISTRYh]j)}(hj#qh]hSSAM_EVENT_REGISTRY}(hj-qhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)qubah}(h]h ](j j eh"]h$]h&]hhuh1jhj%qhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj!qhhhj@qhMubah}(h]jqah ](jjeh"]h$]h&]j"j#)j$huh1jhj@qhMhjqhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjqhhhj@qhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjYqjIjYqjJjKjLuh1jhhhj*9hNhNubh)}(h2``SSAM_EVENT_REGISTRY (tc, tid, cid_en, cid_dis)``h]j)}(hj_qh]h.SSAM_EVENT_REGISTRY (tc, tid, cid_en, cid_dis)}(hjaqhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj]qubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj*9hhubj )}(hDefine a new event registry. h]h)}(hDefine a new event registry.h]hDefine a new event registry.}(hjyqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjuqubah}(h]h ]h"]h$]h&]uh1j hjqhMhj*9hhubjN)}(hXf**Parameters** ``tc`` Target category for the event registry requests. ``tid`` Target ID for the event registry requests. ``cid_en`` Command ID for the event-enable request. ``cid_dis`` Command ID for the event-disable request. **Return** Returns the :c:type:`struct ssam_event_registry ` specified by the given parameters.h](h)}(h**Parameters**h]jX)}(hjqh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubjn)}(hhh](js)}(h8``tc`` Target category for the event registry requests. h](jy)}(h``tc``h]j)}(hjqh]htc}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjqubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubj)}(hhh]h)}(h0Target category for the event registry requests.h]h0Target category for the event registry requests.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jrhjqhMhjqubjs)}(h3``tid`` Target ID for the event registry requests. h](jy)}(h``tid``h]j)}(hjqh]htid}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjqubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubj)}(hhh]h)}(h*Target ID for the event registry requests.h]h*Target ID for the event registry requests.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jrhjrhMhjqubjs)}(h4``cid_en`` Command ID for the event-enable request. h](jy)}(h ``cid_en``h]j)}(hj%rh]hcid_en}(hj'rhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#rubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjrubj)}(hhh]h)}(h(Command ID for the event-enable request.h]h(Command ID for the event-enable request.}(hj>rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:rhMhj;rubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jrhj:rhMhjqubjs)}(h6``cid_dis`` Command ID for the event-disable request. h](jy)}(h ``cid_dis``h]j)}(hj^rh]hcid_dis}(hj`rhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj\rubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXrubj)}(hhh]h)}(h)Command ID for the event-disable request.h]h)Command ID for the event-disable request.}(hjwrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsrhMhjtrubah}(h]h ]h"]h$]h&]uh1jhjXrubeh}(h]h ]h"]h$]h&]uh1jrhjsrhMhjqubeh}(h]h ]h"]h$]h&]uh1jmhjqubh)}(h **Return**h]jX)}(hjrh]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjrubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubh)}(hiReturns the :c:type:`struct ssam_event_registry ` specified by the given parameters.h](h Returns the }(hjrhhhNhNubh)}(h::c:type:`struct ssam_event_registry `h]j)}(hjrh]hstruct ssam_event_registry}(hjrhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjrubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_event_registryuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjrubh# specified by the given parameters.}(hjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjrhMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ssam_event_notifier_flags (C enum)c.ssam_event_notifier_flagshNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_event_notifier_flagsh]j)}(henum ssam_event_notifier_flagsh](j)}(hjh]henum}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjshMubj)}(hssam_event_notifier_flagsh]j)}(hjrh]hssam_event_notifier_flags}(hj!shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](j j eh"]h$]h&]hhuh1jhjrhhhjshMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjrhhhjshMubah}(h]jrah ](jjeh"]h$]h&]j"j#)j$huh1jhjshMhjrhhubj&)}(hhh]h)}(hFlags for event notifiers.h]hFlags for event notifiers.}(hjCshhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj@shhubah}(h]h ]h"]h$]h&]uh1j%hjrhhhjshMubeh}(h]h ](jBenumeh"]h$]h&]jGjBjHj[sjIj[sjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Constants** ``SSAM_EVENT_NOTIFIER_OBSERVER`` The corresponding notifier acts as observer. Registering a notifier with this flag set will not attempt to enable any event. Equally, unregistering will not attempt to disable any event. Note that a notifier with this flag may not even correspond to a certain event at all, only to a specific event target category. Event matching will not be influenced by this flag.h](h)}(h **Constants**h]jX)}(hjesh]h Constants}(hjgshhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjcsubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj_subjn)}(hhh]js)}(hX``SSAM_EVENT_NOTIFIER_OBSERVER`` The corresponding notifier acts as observer. Registering a notifier with this flag set will not attempt to enable any event. Equally, unregistering will not attempt to disable any event. Note that a notifier with this flag may not even correspond to a certain event at all, only to a specific event target category. Event matching will not be influenced by this flag.h](jy)}(h ``SSAM_EVENT_NOTIFIER_OBSERVER``h]j)}(hjsh]hSSAM_EVENT_NOTIFIER_OBSERVER}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjsubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj~subj)}(hhh]h)}(hXoThe corresponding notifier acts as observer. Registering a notifier with this flag set will not attempt to enable any event. Equally, unregistering will not attempt to disable any event. Note that a notifier with this flag may not even correspond to a certain event at all, only to a specific event target category. Event matching will not be influenced by this flag.h]hXoThe corresponding notifier acts as observer. Registering a notifier with this flag set will not attempt to enable any event. Equally, unregistering will not attempt to disable any event. Note that a notifier with this flag may not even correspond to a certain event at all, only to a specific event target category. Event matching will not be influenced by this flag.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjsubah}(h]h ]h"]h$]h&]uh1jhj~subeh}(h]h ]h"]h$]h&]uh1jrhjshMhj{subah}(h]h ]h"]h$]h&]uh1jmhj_subeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_notifier (C struct)c.ssam_event_notifierhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hssam_event_notifierh]j)}(hstruct ssam_event_notifierh](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjshMubj)}(hssam_event_notifierh]j)}(hjsh]hssam_event_notifier}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](j j eh"]h$]h&]hhuh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjshhhjshMubah}(h]jsah ](jjeh"]h$]h&]j"j#)j$huh1jhjshMhjshhubj&)}(hhh]h)}(hNotifier block for SSAM events.h]hNotifier block for SSAM events.}(hj thhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjthhubah}(h]h ]h"]h$]h&]uh1j%hjshhhjshMubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj8tjIj8tjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Definition**:: struct ssam_event_notifier { struct ssam_notifier_block base; struct { struct ssam_event_registry reg; struct ssam_event_id id; enum ssam_event_mask mask; u8 flags; } event; unsigned long flags; }; **Members** ``base`` The base notifier block with callback function and priority. ``event`` The event for which this block will receive notifications. ``event.reg`` Registry via which the event will be enabled/disabled. ``event.id`` ID specifying the event. ``event.mask`` Flags determining how events are matched to the notifier. ``event.flags`` Flags used for enabling the event. ``flags`` Notifier flags (see :c:type:`enum ssam_event_notifier_flags `).h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjDthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj@tubh:}(hj@thhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj`).h](jy)}(h ``flags``h]j)}(hjuh]hflags}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjuubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjuubj)}(hhh]h)}(hZNotifier flags (see :c:type:`enum ssam_event_notifier_flags `).h](hNotifier flags (see }(hjuhhhNhNubh)}(hD:c:type:`enum ssam_event_notifier_flags `h]j)}(hjvh]henum ssam_event_notifier_flags}(hjvhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_event_notifier_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjuubh).}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#vhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1jrhjuhMhjtubeh}(h]h ]h"]h$]h&]uh1jmhj` associated with this controller.h](hGet the }(hjyhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjyh]h struct device}(hjyhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjyubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjj)}j]jxc.ssam_controller_deviceasbjdeviceuh1hhjxhMehjyubh! associated with this controller.}(hjyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMehjyhhubah}(h]h ]h"]h$]h&]uh1j%hjxhhhjxhMeubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjyjIjyjJjKjLuh1jhhhj*9hNhNubjN)}(h**Parameters** ``struct ssam_controller *c`` The controller for which to get the device. **Return** Returns the :c:type:`struct device ` associated with this controller, providing its lower-level transport.h](h)}(h**Parameters**h]jX)}(hjzh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjzubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjzubjn)}(hhh]js)}(hJ``struct ssam_controller *c`` The controller for which to get the device. h](jy)}(h``struct ssam_controller *c``h]j)}(hj%zh]hstruct ssam_controller *c}(hj'zhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#zubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMghjzubj)}(hhh]h)}(h+The controller for which to get the device.h]h+The controller for which to get the device.}(hj>zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:zhMghj;zubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jrhj:zhMghjzubah}(h]h ]h"]h$]h&]uh1jmhjzubh)}(h **Return**h]jX)}(hj`zh]hReturn}(hjbzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^zubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjzubh)}(hrReturns the :c:type:`struct device ` associated with this controller, providing its lower-level transport.h](h Returns the }(hjvzhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjzh]h struct device}(hjzhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj~zubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjvzubhF associated with this controller, providing its lower-level transport.}(hjvzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjzhMihjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_controller_get (C function)c.ssam_controller_gethNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hHstruct ssam_controller * ssam_controller_get (struct ssam_controller *c)h]j)}(hFstruct ssam_controller *ssam_controller_get(struct ssam_controller *c)h](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjzmodnameN classnameNjj)}j]jI )}jA ssam_controller_getsbc.ssam_controller_getasbuh1hhjzhhhjzhMubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhhjzhMubj )}(hj h]h*}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzhhhjzhMubj)}(hssam_controller_geth]j)}(hj{h]hssam_controller_get}(hj'{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#{ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjzhhhjzhMubjv )}(h(struct ssam_controller *c)h]j| )}(hstruct ssam_controller *ch](j)}(hjh]hstruct}(hjB{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>{ubj)}(h h]h }(hjO{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>{ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj`{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]{ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjb{modnameN classnameNjj)}j]j{c.ssam_controller_getasbuh1hhj>{ubj)}(h h]h }(hj~{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>{ubj )}(hj h]h*}(hj{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj>{ubj)}(hjBh]hc}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>{ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj:{ubah}(h]h ]h"]h$]h&]hhuh1ju hjzhhhjzhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjzhhhjzhMubah}(h]jzah ](jjeh"]h$]h&]j"j#)j$huh1jhjzhMhjzhhubj&)}(hhh]h)}(h(Increment reference count of controller.h]h(Increment reference count of controller.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj{hhubah}(h]h ]h"]h$]h&]uh1j%hjzhhhjzhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj{jIj{jJjKjLuh1jhhhj*9hNhNubjN)}(hv**Parameters** ``struct ssam_controller *c`` The controller. **Return** Returns the controller provided as input.h](h)}(h**Parameters**h]jX)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj{ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj{ubjn)}(hhh]js)}(h.``struct ssam_controller *c`` The controller. h](jy)}(h``struct ssam_controller *c``h]j)}(hj|h]hstruct ssam_controller *c}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj|ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj{ubj)}(hhh]h)}(hThe controller.h]hThe controller.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jrhj|hMhj{ubah}(h]h ]h"]h$]h&]uh1jmhj{ubh)}(h **Return**h]jX)}(hj>|h]hReturn}(hj@|hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<|ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj{ubh)}(h)Returns the controller provided as input.h]h)Returns the controller provided as input.}(hjT|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_controller_put (C function)c.ssam_controller_puthNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h4void ssam_controller_put (struct ssam_controller *c)h]j)}(h3void ssam_controller_put(struct ssam_controller *c)h](j)}(hvoidh]hvoid}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhj|hMubj)}(hssam_controller_puth]j)}(hssam_controller_puth]hssam_controller_put}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj|hhhj|hMubjv )}(h(struct ssam_controller *c)h]j| )}(hstruct ssam_controller *ch](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj|modnameN classnameNjj)}j]jI )}jA j|sbc.ssam_controller_putasbuh1hhj|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj )}(hj h]h*}(hj }hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubj)}(hjBh]hc}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj|ubah}(h]h ]h"]h$]h&]hhuh1ju hj|hhhj|hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj{|hhhj|hMubah}(h]jv|ah ](jjeh"]h$]h&]j"j#)j$huh1jhj|hMhjx|hhubj&)}(hhh]h)}(h(Decrement reference count of controller.h]h(Decrement reference count of controller.}(hjB}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj?}hhubah}(h]h ]h"]h$]h&]uh1j%hjx|hhhj|hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjZ}jIjZ}jJjKjLuh1jhhhj*9hNhNubjN)}(h?**Parameters** ``struct ssam_controller *c`` The controller.h](h)}(h**Parameters**h]jX)}(hjd}h]h Parameters}(hjf}hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjb}ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj^}ubjn)}(hhh]js)}(h-``struct ssam_controller *c`` The controller.h](jy)}(h``struct ssam_controller *c``h]j)}(hj}h]hstruct ssam_controller *c}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj}ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj}}ubj)}(hhh]h)}(hThe controller.h]hThe controller.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj}ubah}(h]h ]h"]h$]h&]uh1jhj}}ubeh}(h]h ]h"]h$]h&]uh1jrhj}hMhjz}ubah}(h]h ]h"]h$]h&]uh1jmhj^}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ssam_controller_statelock (C function)c.ssam_controller_statelockhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h:void ssam_controller_statelock (struct ssam_controller *c)h]j)}(h9void ssam_controller_statelock(struct ssam_controller *c)h](j)}(hvoidh]hvoid}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj}hMubj)}(hssam_controller_statelockh]j)}(hssam_controller_statelockh]hssam_controller_statelock}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj}hhhj}hMubjv )}(h(struct ssam_controller *c)h]j| )}(hstruct ssam_controller *ch](j)}(hjh]hstruct}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hj'~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj8~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5~ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj:~modnameN classnameNjj)}j]jI )}jA j~sbc.ssam_controller_statelockasbuh1hhj~ubj)}(h h]h }(hjX~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj )}(hj h]h*}(hjf~hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj~ubj)}(hjBh]hc}(hjs~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj~ubah}(h]h ]h"]h$]h&]hhuh1ju hj}hhhj}hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj}hhhj}hMubah}(h]j}ah ](jjeh"]h$]h&]j"j#)j$huh1jhj}hMhj}hhubj&)}(hhh]h)}(h.Lock the controller against state transitions.h]h.Lock the controller against state transitions.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~hhubah}(h]h ]h"]h$]h&]uh1j%hj}hhhj}hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj~jIj~jJjKjLuh1jhhhj*9hNhNubjN)}(hX **Parameters** ``struct ssam_controller *c`` The controller to lock. **Description** Lock the controller against state transitions. Holding this lock guarantees that the controller will not transition between states, i.e. if the controller is in state "started", when this lock has been acquired, it will remain in this state at least until the lock has been released. Multiple clients may concurrently hold this lock. In other words: The ``statelock`` functions represent the read-lock part of a r/w-semaphore. Actions causing state transitions of the controller must be executed while holding the write-part of this r/w-semaphore (see ssam_controller_lock() and ssam_controller_unlock() for that). See ssam_controller_stateunlock() for the corresponding unlock function.h](h)}(h**Parameters**h]jX)}(hj~h]h Parameters}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubjn)}(hhh]js)}(h6``struct ssam_controller *c`` The controller to lock. h](jy)}(h``struct ssam_controller *c``h]j)}(hj~h]hstruct ssam_controller *c}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj~ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubj)}(hhh]h)}(hThe controller to lock.h]hThe controller to lock.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jrhj~hMhj~ubah}(h]h ]h"]h$]h&]uh1jmhj~ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubh)}(hXLock the controller against state transitions. Holding this lock guarantees that the controller will not transition between states, i.e. if the controller is in state "started", when this lock has been acquired, it will remain in this state at least until the lock has been released.h]hXLock the controller against state transitions. Holding this lock guarantees that the controller will not transition between states, i.e. if the controller is in state “started”, when this lock has been acquired, it will remain in this state at least until the lock has been released.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubh)}(hXJMultiple clients may concurrently hold this lock. In other words: The ``statelock`` functions represent the read-lock part of a r/w-semaphore. Actions causing state transitions of the controller must be executed while holding the write-part of this r/w-semaphore (see ssam_controller_lock() and ssam_controller_unlock() for that).h](hFMultiple clients may concurrently hold this lock. In other words: The }(hj=hhhNhNubj)}(h ``statelock``h]h statelock}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj=ubh functions represent the read-lock part of a r/w-semaphore. Actions causing state transitions of the controller must be executed while holding the write-part of this r/w-semaphore (see ssam_controller_lock() and ssam_controller_unlock() for that).}(hj=hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubh)}(hHSee ssam_controller_stateunlock() for the corresponding unlock function.h]hHSee ssam_controller_stateunlock() for the corresponding unlock function.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ssam_controller_stateunlock (C function)c.ssam_controller_stateunlockhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h``struct ssam_request_sync *rqst`` The request to initialize. h](jy)}(h"``struct ssam_request_sync *rqst``h]j)}(hjފh]hstruct ssam_request_sync *rqst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj܊ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMghj؊ubj)}(hhh]h)}(hThe request to initialize.h]hThe request to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhj؊ubeh}(h]h ]h"]h$]h&]uh1jrhjhMghjՊubjs)}(h5``enum ssam_request_flags flags`` The request flags. h](jy)}(h!``enum ssam_request_flags flags``h]j)}(hjh]henum ssam_request_flags flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhhjubj)}(hhh]h)}(hThe request flags.h]hThe request flags.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhhj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj,hMhhjՊubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMjhjubh)}(hInitializes the given request struct. Does not initialize the request message data. This has to be done explicitly after this call via ssam_request_sync_set_data() and the actual message data has to be written via ssam_request_write_data().h]hInitializes the given request struct. Does not initialize the request message data. This has to be done explicitly after this call via ssam_request_sync_set_data() and the actual message data has to be written via ssam_request_write_data().}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjubh)}(h **Return**h]jX)}(hjyh]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjwubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMnhjubh)}(hFReturns zero on success or ``-EINVAL`` if the given flags are invalid.h](hReturns zero on success or }(hjhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh if the given flags are invalid.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMohjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ssam_request_sync_submit (C function)c.ssam_request_sync_submithNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h[int ssam_request_sync_submit (struct ssam_controller *ctrl, struct ssam_request_sync *rqst)h]j)}(hZint ssam_request_sync_submit(struct ssam_controller *ctrl, struct ssam_request_sync *rqst)h](j)}(hinth]hint}(hjЋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̋hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hjߋhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̋hhhjދhMubj)}(hssam_request_sync_submith]j)}(hssam_request_sync_submith]hssam_request_sync_submit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhj̋hhhjދhMubjv )}(h>(struct ssam_controller *ctrl, struct ssam_request_sync *rqst)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj-modnameN classnameNjj)}j]jI )}jA jsbc.ssam_request_sync_submitasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjYhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hctrlh]hctrl}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_request_sync *rqsth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubh)}(hhh]j)}(hssam_request_synch]hssam_request_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jGc.ssam_request_sync_submitasbuh1hhj{ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj )}(hj h]h*}(hjɌhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj{ubj)}(hrqsth]hrqst}(hj֌hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hj̋hhhjދhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjȋhhhjދhMubah}(h]jËah ](jjeh"]h$]h&]j"j#)j$huh1jhjދhMhjŋhhubj&)}(hhh]h)}(hSubmit a synchronous request.h]hSubmit a synchronous request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1j%hjŋhhhjދhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller with which to submit the request. ``struct ssam_request_sync *rqst`` The request to submit. **Description** Submit a synchronous request. The request has to be initialized and properly set up, including response buffer (may be ``NULL`` if no response is expected) and command message data. This function does not wait for the request to be completed. If this function succeeds, ssam_request_sync_wait() must be used to ensure that the request has been completed before the response data can be accessed and/or the request can be freed. On failure, the request may immediately be freed. This function may only be used if the controller is active, i.e. has been initialized and not suspended.h](h)}(h**Parameters**h]jX)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubjn)}(hhh](js)}(hR``struct ssam_controller *ctrl`` The controller with which to submit the request. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjAh]hstruct ssam_controller *ctrl}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj?ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj;ubj)}(hhh]h)}(h0The controller with which to submit the request.h]h0The controller with which to submit the request.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jrhjVhMhj8ubjs)}(h:``struct ssam_request_sync *rqst`` The request to submit. h](jy)}(h"``struct ssam_request_sync *rqst``h]j)}(hjzh]hstruct ssam_request_sync *rqst}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjxubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjtubj)}(hhh]h)}(hThe request to submit.h]hThe request to submit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jrhjhMhj8ubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hSubmit a synchronous request. The request has to be initialized and properly set up, including response buffer (may be ``NULL`` if no response is expected) and command message data. This function does not wait for the request to be completed.h](hwSubmit a synchronous request. The request has to be initialized and properly set up, including response buffer (may be }(hjˍhhhNhNubj)}(h``NULL``h]hNULL}(hjӍhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjˍubhs if no response is expected) and command message data. This function does not wait for the request to be completed.}(hjˍhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hIf this function succeeds, ssam_request_sync_wait() must be used to ensure that the request has been completed before the response data can be accessed and/or the request can be freed. On failure, the request may immediately be freed.h]hIf this function succeeds, ssam_request_sync_wait() must be used to ensure that the request has been completed before the response data can be accessed and/or the request can be freed. On failure, the request may immediately be freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hhThis function may only be used if the controller is active, i.e. has been initialized and not suspended.h]hhThis function may only be used if the controller is active, i.e. has been initialized and not suspended.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_request_do_sync (C function)c.ssam_request_do_synchNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hsint ssam_request_do_sync (struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp)h]j)}(hrint ssam_request_do_sync(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp)h](j)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj8hMubj)}(hssam_request_do_synch]j)}(hssam_request_do_synch]hssam_request_do_sync}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](j j eh"]h$]h&]hhuh1jhj&hhhj8hMubjv )}(hZ(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jMsbc.ssam_request_do_syncasbuh1hhjcubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjcubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj_ubj| )}(hconst struct ssam_request *spech](j)}(hj h]hconst}(hjَhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubh)}(hhh]j)}(h ssam_requesth]h ssam_request}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_request_do_syncasbuh1hhjՎubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubj )}(hj h]h*}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjՎubj)}(hspech]hspec}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjՎubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj_ubj| )}(hstruct ssam_response *rsph](j)}(hjh]hstruct}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubh)}(hhh]j)}(h ssam_responseh]h ssam_response}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_request_do_syncasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`ubj)}(hrsph]hrsp}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj_ubeh}(h]h ]h"]h$]h&]hhuh1ju hj&hhhj8hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj"hhhj8hMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj8hMhjhhubj&)}(hhh]h)}(hExecute a synchronous request.h]hExecute a synchronous request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj8hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj*9hNhNubjN)}(hXN**Parameters** ``struct ssam_controller *ctrl`` The controller via which the request will be submitted. ``const struct ssam_request *spec`` The request specification and payload. ``struct ssam_response *rsp`` The response buffer. **Description** Allocates a synchronous request with its message data buffer on the heap via ssam_request_sync_alloc(), fully initializes it via the provided request specification, submits it, and finally waits for its completion before freeing it and returning its status. **Return** Returns the status of the request or any failure during setup.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubjn)}(hhh](js)}(hY``struct ssam_controller *ctrl`` The controller via which the request will be submitted. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hj&h]hstruct ssam_controller *ctrl}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj$ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj ubj)}(hhh]h)}(h7The controller via which the request will be submitted.h]h7The controller via which the request will be submitted.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj;hMhjubjs)}(hK``const struct ssam_request *spec`` The request specification and payload. h](jy)}(h#``const struct ssam_request *spec``h]j)}(hj_h]hconst struct ssam_request *spec}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj]ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjYubj)}(hhh]h)}(h&The request specification and payload.h]h&The request specification and payload.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jrhjthMhjubjs)}(h3``struct ssam_response *rsp`` The response buffer. h](jy)}(h``struct ssam_response *rsp``h]j)}(hjh]hstruct ssam_response *rsp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe response buffer.h]hThe response buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjӐh]h Description}(hjՐhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjѐubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hXAllocates a synchronous request with its message data buffer on the heap via ssam_request_sync_alloc(), fully initializes it via the provided request specification, submits it, and finally waits for its completion before freeing it and returning its status.h]hXAllocates a synchronous request with its message data buffer on the heap via ssam_request_sync_alloc(), fully initializes it via the provided request specification, submits it, and finally waits for its completion before freeing it and returning its status.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h>Returns the status of the request or any failure during setup.h]h>Returns the status of the request or any failure during setup.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-ssam_request_do_sync_with_buffer (C function)"c.ssam_request_do_sync_with_bufferhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hint ssam_request_do_sync_with_buffer (struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp, struct ssam_span *buf)h]j)}(hint ssam_request_do_sync_with_buffer(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp, struct ssam_span *buf)h](j)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;hhhjMhMubj)}(h ssam_request_do_sync_with_bufferh]j)}(h ssam_request_do_sync_with_bufferh]h ssam_request_do_sync_with_buffer}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj;hhhjMhMubjv )}(hq(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp, struct ssam_span *buf)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jbsb"c.ssam_request_do_sync_with_bufferasbuh1hhjxubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubj )}(hj h]h*}(hjȑhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjxubj)}(hctrlh]hctrl}(hjՑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjtubj| )}(hconst struct ssam_request *spech](j)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_requesth]h ssam_request}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj)modnameN classnameNjj)}j]j"c.ssam_request_do_sync_with_bufferasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjShhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hspech]hspec}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjtubj| )}(hstruct ssam_response *rsph](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(h ssam_responseh]h ssam_response}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]j"c.ssam_request_do_sync_with_bufferasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj )}(hj h]h*}(hjÒhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjuubj)}(hrsph]hrsp}(hjВhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjtubj| )}(hstruct ssam_span *bufh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj modnameN classnameNjj)}j]j"c.ssam_request_do_sync_with_bufferasbuh1hhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjtubeh}(h]h ]h"]h$]h&]hhuh1ju hj;hhhjMhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj7hhhjMhMubah}(h]j2ah ](jjeh"]h$]h&]j"j#)j$huh1jhjMhMhj4hhubj&)}(hhh]h)}(hZExecute a synchronous request with the provided buffer as back-end for the message buffer.h]hZExecute a synchronous request with the provided buffer as back-end for the message buffer.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjghhubah}(h]h ]h"]h$]h&]uh1j%hj4hhhjMhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller via which the request will be submitted. ``const struct ssam_request *spec`` The request specification and payload. ``struct ssam_response *rsp`` The response buffer. ``struct ssam_span *buf`` The buffer for the request message data. **Description** Allocates a synchronous request struct on the stack, fully initializes it using the provided buffer as message data buffer, submits it, and then waits for its completion before returning its status. The SSH_COMMAND_MESSAGE_LENGTH() macro can be used to compute the required message buffer size. This function does essentially the same as ssam_request_do_sync(), but instead of dynamically allocating the request and message data buffer, it uses the provided message data buffer and stores the (small) request struct on the heap. **Return** Returns the status of the request or any failure during setup.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubjn)}(hhh](js)}(hY``struct ssam_controller *ctrl`` The controller via which the request will be submitted. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h7The controller via which the request will be submitted.h]h7The controller via which the request will be submitted.}(hjēhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(hK``const struct ssam_request *spec`` The request specification and payload. h](jy)}(h#``const struct ssam_request *spec``h]j)}(hjh]hconst struct ssam_request *spec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjޓubj)}(hhh]h)}(h&The request specification and payload.h]h&The request specification and payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjޓubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h3``struct ssam_response *rsp`` The response buffer. h](jy)}(h``struct ssam_response *rsp``h]j)}(hjh]hstruct ssam_response *rsp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe response buffer.h]hThe response buffer.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj2hMhjubjs)}(hC``struct ssam_span *buf`` The buffer for the request message data. h](jy)}(h``struct ssam_span *buf``h]j)}(hjVh]hstruct ssam_span *buf}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjTubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjPubj)}(hhh]h)}(h(The buffer for the request message data.h]h(The buffer for the request message data.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjkhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jrhjkhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hX&Allocates a synchronous request struct on the stack, fully initializes it using the provided buffer as message data buffer, submits it, and then waits for its completion before returning its status. The SSH_COMMAND_MESSAGE_LENGTH() macro can be used to compute the required message buffer size.h]hX&Allocates a synchronous request struct on the stack, fully initializes it using the provided buffer as message data buffer, submits it, and then waits for its completion before returning its status. The SSH_COMMAND_MESSAGE_LENGTH() macro can be used to compute the required message buffer size.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hThis function does essentially the same as ssam_request_do_sync(), but instead of dynamically allocating the request and message data buffer, it uses the provided message data buffer and stores the (small) request struct on the heap.h]hThis function does essentially the same as ssam_request_do_sync(), but instead of dynamically allocating the request and message data buffer, it uses the provided message data buffer and stores the (small) request struct on the heap.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Return**h]jX)}(hjǔh]hReturn}(hjɔhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjŔubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h>Returns the status of the request or any failure during setup.h]h>Returns the status of the request or any failure during setup.}(hjݔhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ssam_notifier_register (C function)c.ssam_notifier_registerhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hXint ssam_notifier_register (struct ssam_controller *ctrl, struct ssam_event_notifier *n)h]j)}(hWint ssam_notifier_register(struct ssam_controller *ctrl, struct ssam_event_notifier *n)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hssam_notifier_registerh]j)}(hssam_notifier_registerh]hssam_notifier_register}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhM ubjv )}(h=(struct ssam_controller *ctrl, struct ssam_event_notifier *n)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjimodnameN classnameNjj)}j]jI )}jA j/sbc.ssam_notifier_registerasbuh1hhjEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjAubj| )}(hstruct ssam_event_notifier *nh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjȕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_event_notifierh]hssam_event_notifier}(hjٕhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj֕ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjەmodnameN classnameNjj)}j]jc.ssam_notifier_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjAubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhM hjhhubj&)}(hhh]h)}(hRegister an event notifier.h]hRegister an event notifier.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj8hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhM ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjSjIjSjJjKjLuh1jhhhj*9hNhNubjN)}(hX[**Parameters** ``struct ssam_controller *ctrl`` The controller to register the notifier on. ``struct ssam_event_notifier *n`` The event notifier to register. **Description** Register an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified. Notifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set. **Return** Returns zero on success, ``-ENOSPC`` if there have already been ``INT_MAX`` notifiers for the event ID/type associated with the notifier block registered, ``-ENOMEM`` if the corresponding event entry could not be allocated. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.h](h)}(h**Parameters**h]jX)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj[ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubjn)}(hhh](js)}(hM``struct ssam_controller *ctrl`` The controller to register the notifier on. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hj|h]hstruct ssam_controller *ctrl}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjvubj)}(hhh]h)}(h+The controller to register the notifier on.h]h+The controller to register the notifier on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jrhjhM hjsubjs)}(hB``struct ssam_event_notifier *n`` The event notifier to register. h](jy)}(h!``struct ssam_event_notifier *n``h]j)}(hjh]hstruct ssam_event_notifier *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(hThe event notifier to register.h]hThe event notifier to register.}(hjΖhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjʖhM hj˖ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjʖhM hjsubeh}(h]h ]h"]h$]h&]uh1jmhjWubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubh)}(hXoRegister an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified.h]hXoRegister an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubh)}(hNotifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set.h]hNotifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubh)}(h **Return**h]jX)}(hj&h]hReturn}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubh)}(hXsReturns zero on success, ``-ENOSPC`` if there have already been ``INT_MAX`` notifiers for the event ID/type associated with the notifier block registered, ``-ENOMEM`` if the corresponding event entry could not be allocated. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.h](hReturns zero on success, }(hj<hhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj<ubh if there have already been }(hj<hhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj<ubhP notifiers for the event ID/type associated with the notifier block registered, }(hj<hhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj<ubh if the corresponding event entry could not be allocated. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'__ssam_notifier_unregister (C function)c.__ssam_notifier_unregisterhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hjint __ssam_notifier_unregister (struct ssam_controller *ctrl, struct ssam_event_notifier *n, bool disable)h]j)}(hiint __ssam_notifier_unregister(struct ssam_controller *ctrl, struct ssam_event_notifier *n, bool disable)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMI ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMI ubj)}(h__ssam_notifier_unregisterh]j)}(h__ssam_notifier_unregisterh]h__ssam_notifier_unregister}(hj—hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMI ubjv )}(hK(struct ssam_controller *ctrl, struct ssam_event_notifier *n, bool disable)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjޗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڗubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jėsbc.__ssam_notifier_unregisterasbuh1hhjڗubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڗubj )}(hj h]h*}(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjڗubj)}(hctrlh]hctrl}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjڗubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj֗ubj| )}(hstruct ssam_event_notifier *nh](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hssam_event_notifierh]hssam_event_notifier}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjpmodnameN classnameNjj)}j]jc.__ssam_notifier_unregisterasbuh1hhjLubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjLubj)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj֗ubj| )}(h bool disableh](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj̘hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hdisableh]hdisable}(hjژhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj֗ubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMI ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMI ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMI hjhhubj&)}(hhh]h)}(hUnregister an event notifier.h]hUnregister an event notifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMI hjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMI ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller the notifier has been registered on. ``struct ssam_event_notifier *n`` The event notifier to unregister. ``bool disable`` Whether to disable the corresponding event on the EC. **Description** Unregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero and ``disable`` equals ``true``, the event will be disabled. Useful for hot-removable devices, where communication may fail once the device has been physically removed. In that case, specifying ``disable`` as ``false`` avoids communication with the EC. **Return** Returns zero on success, ``-ENOENT`` if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.h](h)}(h**Parameters**h]jX)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj$ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMM hj ubjn)}(hhh](js)}(hU``struct ssam_controller *ctrl`` The controller the notifier has been registered on. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjEh]hstruct ssam_controller *ctrl}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjCubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMJ hj?ubj)}(hhh]h)}(h3The controller the notifier has been registered on.h]h3The controller the notifier has been registered on.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMJ hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jrhjZhMJ hj<ubjs)}(hD``struct ssam_event_notifier *n`` The event notifier to unregister. h](jy)}(h!``struct ssam_event_notifier *n``h]j)}(hj~h]hstruct ssam_event_notifier *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj|ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMK hjxubj)}(hhh]h)}(h!The event notifier to unregister.h]h!The event notifier to unregister.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMK hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jrhjhMK hj<ubjs)}(hG``bool disable`` Whether to disable the corresponding event on the EC. h](jy)}(h``bool disable``h]j)}(hjh]h bool disable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chML hjubj)}(hhh]h)}(h5Whether to disable the corresponding event on the EC.h]h5Whether to disable the corresponding event on the EC.}(hjЙhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj̙hML hj͙ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj̙hML hj<ubeh}(h]h ]h"]h$]h&]uh1jmhj ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMN hj ubh)}(hUnregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero and ``disable`` equals ``true``, the event will be disabled.h](hUnregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero and }(hjhhhNhNubj)}(h ``disable``h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh equals }(hjhhhNhNubj)}(h``true``h]htrue}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, the event will be disabled.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMM hj ubh)}(hUseful for hot-removable devices, where communication may fail once the device has been physically removed. In that case, specifying ``disable`` as ``false`` avoids communication with the EC.h](hUseful for hot-removable devices, where communication may fail once the device has been physically removed. In that case, specifying }(hj;hhhNhNubj)}(h ``disable``h]hdisable}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj;ubh as }(hj;hhhNhNubj)}(h ``false``h]hfalse}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj;ubh" avoids communication with the EC.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMQ hj ubh)}(h **Return**h]jX)}(hjph]hReturn}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjnubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMU hj ubh)}(hReturns zero on success, ``-ENOENT`` if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.h](hReturns zero on success, }(hjhhhNhNubj)}(h ``-ENOENT``h]h-ENOENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMV hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ssam_controller_event_enable (C function)c.ssam_controller_event_enablehNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hint ssam_controller_event_enable (struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h]j)}(hint ssam_controller_event_enable(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j)}(hinth]hint}(hjǚhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÚhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM ubj)}(h h]h }(hj֚hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÚhhhj՚hM ubj)}(hssam_controller_event_enableh]j)}(hssam_controller_event_enableh]hssam_controller_event_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjÚhhhj՚hM ubjv )}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj$modnameN classnameNjj)}j]jI )}jA jsbc.ssam_controller_event_enableasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjPhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_registry regh](j)}(hjh]hstruct}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]j>c.ssam_controller_event_enableasbuh1hhjrubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_id idh](j)}(hjh]hstruct}(hjٛhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՛ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՛ubh)}(hhh]j)}(h ssam_event_idh]h ssam_event_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]j>c.ssam_controller_event_enableasbuh1hhj՛ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՛ubj)}(hidh]hid}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj՛ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hu8 flagsh](h)}(hhh]j)}(hu8h]hu8}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjAmodnameN classnameNjj)}j]j>c.ssam_controller_event_enableasbuh1hhj8ubj)}(h h]h }(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(hflagsh]hflags}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hjÚhhhj՚hM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj՚hM ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj՚hM hjhhubj&)}(hhh]h)}(hEnable the specified event.h]hEnable the specified event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj՚hM ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj*9hNhNubjN)}(hXF**Parameters** ``struct ssam_controller *ctrl`` The controller to enable the event for. ``struct ssam_event_registry reg`` The event registry to use for enabling the event. ``struct ssam_event_id id`` The event ID specifying the event to be enabled. ``u8 flags`` The SAM event flags used for enabling the event. **Description** Increment the event reference count of the specified event. If the event has not been enabled previously, it will be enabled by this call. **Note** In general, ssam_notifier_register() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling. **Return** Returns zero on success, ``-ENOSPC`` if the reference count for the specified event has reached its maximum, ``-ENOMEM`` if the corresponding event entry could not be allocated. If this is the first time that this event has been enabled (i.e. the reference count was incremented from zero to one by this call), returns the status of the event-enable EC-command.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubjn)}(hhh](js)}(hI``struct ssam_controller *ctrl`` The controller to enable the event for. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hj֜h]hstruct ssam_controller *ctrl}(hj؜hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjԜubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjМubj)}(hhh]h)}(h'The controller to enable the event for.h]h'The controller to enable the event for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjМubeh}(h]h ]h"]h$]h&]uh1jrhjhM hj͜ubjs)}(hU``struct ssam_event_registry reg`` The event registry to use for enabling the event. h](jy)}(h"``struct ssam_event_registry reg``h]j)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj ubj)}(hhh]h)}(h1The event registry to use for enabling the event.h]h1The event registry to use for enabling the event.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM hj%ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj$hM hj͜ubjs)}(hM``struct ssam_event_id id`` The event ID specifying the event to be enabled. h](jy)}(h``struct ssam_event_id id``h]j)}(hjHh]hstruct ssam_event_id id}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjFubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjBubj)}(hhh]h)}(h0The event ID specifying the event to be enabled.h]h0The event ID specifying the event to be enabled.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jrhj]hM hj͜ubjs)}(h>``u8 flags`` The SAM event flags used for enabling the event. h](jy)}(h ``u8 flags``h]j)}(hjh]hu8 flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj{ubj)}(hhh]h)}(h0The SAM event flags used for enabling the event.h]h0The SAM event flags used for enabling the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jrhjhM hj͜ubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hIncrement the event reference count of the specified event. If the event has not been enabled previously, it will be enabled by this call.h]hIncrement the event reference count of the specified event. If the event has not been enabled previously, it will be enabled by this call.}(hjҝhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(h**Note**h]jX)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hIn general, ssam_notifier_register() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling.h]hIn general, ssam_notifier_register() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(h **Return**h]jX)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hXiReturns zero on success, ``-ENOSPC`` if the reference count for the specified event has reached its maximum, ``-ENOMEM`` if the corresponding event entry could not be allocated. If this is the first time that this event has been enabled (i.e. the reference count was incremented from zero to one by this call), returns the status of the event-enable EC-command.h](hReturns zero on success, }(hj hhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubhI if the reference count for the specified event has reached its maximum, }(hj hhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubh if the corresponding event entry could not be allocated. If this is the first time that this event has been enabled (i.e. the reference count was incremented from zero to one by this call), returns the status of the event-enable EC-command.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*ssam_controller_event_disable (C function)c.ssam_controller_event_disablehNtauh1jhj*9hhhNhNubj)}(hhh](j)}(hint ssam_controller_event_disable (struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h]j)}(hint ssam_controller_event_disable(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j)}(hinth]hint}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhjhM ubj)}(hssam_controller_event_disableh]j)}(hssam_controller_event_disableh]hssam_controller_event_disable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjohhhjhM ubjv )}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjΞhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj˞ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjОmodnameN classnameNjj)}j]jI )}jA jsbc.ssam_controller_event_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_registry regh](j)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_event_registryh]hssam_event_registry}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjBmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hregh]hreg}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_id idh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_event_idh]h ssam_event_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hidh]hid}(hjϟhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hu8 flagsh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hjohhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjkhhhjhM ubah}(h]jfah ](jjeh"]h$]h&]j"j#)j$huh1jhjhM hjhhhubj&)}(hhh]h)}(hDisable the specified event.h]hDisable the specified event.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj>hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhhjhM ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjYjIjYjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller to disable the event for. ``struct ssam_event_registry reg`` The event registry to use for disabling the event. ``struct ssam_event_id id`` The event ID specifying the event to be disabled. ``u8 flags`` The flags used when enabling the event. **Description** Decrement the reference count of the specified event. If the reference count reaches zero, the event will be disabled. **Note** In general, ssam_notifier_register()/ssam_notifier_unregister() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling. **Return** Returns zero on success, ``-ENOENT`` if the given event has not been enabled on the controller. If the reference count of the event reaches zero during this call, returns the status of the event-disable EC-command.h](h)}(h**Parameters**h]jX)}(hjch]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjaubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubjn)}(hhh](js)}(hJ``struct ssam_controller *ctrl`` The controller to disable the event for. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj|ubj)}(hhh]h)}(h(The controller to disable the event for.h]h(The controller to disable the event for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1jrhjhM hjyubjs)}(hV``struct ssam_event_registry reg`` The event registry to use for disabling the event. h](jy)}(h"``struct ssam_event_registry reg``h]j)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h2The event registry to use for disabling the event.h]h2The event registry to use for disabling the event.}(hjԠhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjРhM hjѠubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjРhM hjyubjs)}(hN``struct ssam_event_id id`` The event ID specifying the event to be disabled. h](jy)}(h``struct ssam_event_id id``h]j)}(hjh]hstruct ssam_event_id id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h1The event ID specifying the event to be disabled.h]h1The event ID specifying the event to be disabled.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj hM hjyubjs)}(h5``u8 flags`` The flags used when enabling the event. h](jy)}(h ``u8 flags``h]j)}(hj-h]hu8 flags}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj'ubj)}(hhh]h)}(h'The flags used when enabling the event.h]h'The flags used when enabling the event.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhM hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jrhjBhM hjyubeh}(h]h ]h"]h$]h&]uh1jmhj]ubh)}(h**Description**h]jX)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubh)}(hvDecrement the reference count of the specified event. If the reference count reaches zero, the event will be disabled.h]hvDecrement the reference count of the specified event. If the reference count reaches zero, the event will be disabled.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubh)}(h**Note**h]jX)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubh)}(hIn general, ssam_notifier_register()/ssam_notifier_unregister() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling.h]hIn general, ssam_notifier_register()/ssam_notifier_unregister() with a non-observer notifier should be preferred for enabling/disabling events, as this will guarantee proper ordering and event forwarding in case of errors during event enabling/disabling.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubh)}(hReturns zero on success, ``-ENOENT`` if the given event has not been enabled on the controller. If the reference count of the event reaches zero during this call, returns the status of the event-disable EC-command.h](hReturns zero on success, }(hj̡hhhNhNubj)}(h ``-ENOENT``h]h-ENOENT}(hjԡhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj̡ubh if the given event has not been enabled on the controller. If the reference count of the event reaches zero during this call, returns the status of the event-disable EC-command.}(hj̡hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj*9hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_get_controller (C function)c.ssam_get_controllerhNtauh1jhj*9hhhNhNubj)}(hhh](j)}(h3struct ssam_controller * ssam_get_controller (void)h]j)}(h1struct ssam_controller *ssam_get_controller(void)h](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK/ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhK/ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj.modnameN classnameNjj)}j]jI )}jA ssam_get_controllersbc.ssam_get_controllerasbuh1hhj hhhjhK/ubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhK/ubj )}(hj h]h*}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj hhhjhK/ubj)}(hssam_get_controllerh]j)}(hjJh]hssam_get_controller}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhhjhK/ubjv )}(h(void)h]j| )}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hj hhhjhK/ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK/ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhK/hjhhubj&)}(hhh]h)}(h!Get reference to SSAM controller.h]h!Get reference to SSAM controller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK/hjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhK/ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjɢjIjɢjJjKjLuh1jhhhj*9hNhNubjN)}(hX**Parameters** ``void`` no arguments **Description** Returns a reference to the SSAM controller of the system or ``NULL`` if there is none, it hasn't been set up yet, or it has already been unregistered. This function automatically increments the reference count of the controller, thus the calling party must ensure that ssam_controller_put() is called when it doesn't need the controller any more.h](h)}(h**Parameters**h]jX)}(hjӢh]h Parameters}(hjբhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjѢubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK3hj͢ubjn)}(hhh]js)}(h``void`` no arguments h](jy)}(h``void``h]j)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chKhjubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubah}(h]h ]h"]h$]h&]uh1jmhj͢ubh)}(h**Description**h]jX)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj+ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chKhj͢ubh)}(hXZReturns a reference to the SSAM controller of the system or ``NULL`` if there is none, it hasn't been set up yet, or it has already been unregistered. This function automatically increments the reference count of the controller, thus the calling party must ensure that ssam_controller_put() is called when it doesn't need the controller any more.h](hhhhjShK1ubah}(h]j9ah ](jjeh"]h$]h&]j"j#)j$huh1jhjShK1hj;hhubj&)}(hhh]h)}(h"Unique identifier for SSAM device.h]h"Unique identifier for SSAM device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK-hjhhubah}(h]h ]h"]h$]h&]uh1j%hj;hhhjShK1ubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hX%**Definition**:: struct ssam_device_uid { u8 domain; u8 category; u8 target; u8 instance; u8 function; }; **Members** ``domain`` Domain of the device. ``category`` Target category of the device. ``target`` Target ID of the device. ``instance`` Instance ID of the device. ``function`` Sub-function of the device. This field can be used to split a single SAM device into multiple virtual subdevices to separate different functionality of that device and allow one driver per such functionality.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK1hjubj,)}(hlstruct ssam_device_uid { u8 domain; u8 category; u8 target; u8 instance; u8 function; };h]hlstruct ssam_device_uid { u8 domain; u8 category; u8 target; u8 instance; u8 function; };}hjŪsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK3hjubh)}(h **Members**h]jX)}(hj֪h]hMembers}(hjتhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjԪubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK;hjubjn)}(hhh](js)}(h!``domain`` Domain of the device. h](jy)}(h ``domain``h]j)}(hjh]hdomain}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK/hjubj)}(hhh]h)}(hDomain of the device.h]hDomain of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK/hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj hK/hjubjs)}(h,``category`` Target category of the device. h](jy)}(h ``category``h]j)}(hj.h]hcategory}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj,ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK0hj(ubj)}(hhh]h)}(hTarget category of the device.h]hTarget category of the device.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChK0hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jrhjChK0hjubjs)}(h$``target`` Target ID of the device. h](jy)}(h ``target``h]j)}(hjgh]htarget}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjeubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK1hjaubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hK1hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jrhj|hK1hjubjs)}(h(``instance`` Instance ID of the device. h](jy)}(h ``instance``h]j)}(hjh]hinstance}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK2hjubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhK2hjubjs)}(h``function`` Sub-function of the device. This field can be used to split a single SAM device into multiple virtual subdevices to separate different functionality of that device and allow one driver per such functionality.h](jy)}(h ``function``h]j)}(hj٫h]hfunction}(hj۫hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj׫ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK5hjӫubj)}(hhh]h)}(hSub-function of the device. This field can be used to split a single SAM device into multiple virtual subdevices to separate different functionality of that device and allow one driver per such functionality.h]hSub-function of the device. This field can be used to split a single SAM device into multiple virtual subdevices to separate different functionality of that device and allow one driver per such functionality.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK3hjubah}(h]h ]h"]h$]h&]uh1jhjӫubeh}(h]h ]h"]h$]h&]uh1jrhjhK5hjubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSAM_DEVICE (C macro) c.SSAM_DEVICEhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h SSAM_DEVICEh]j)}(h SSAM_DEVICEh]j)}(h SSAM_DEVICEh]j)}(hj-h]h SSAM_DEVICE}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj/hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKLubah}(h]h ]h"]h$]h&]hhjuh1jjjhj+hhhjJhKLubah}(h]j&ah ](jjeh"]h$]h&]j"j#)j$huh1jhjJhKLhj(hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj(hhhjJhKLubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjcjIjcjJjKjLuh1jhhhj)hNhNubh)}(h'``SSAM_DEVICE (d, cat, tid, iid, fun)``h]j)}(hjih]h#SSAM_DEVICE (d, cat, tid, iid, fun)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjgubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKNhj)hhubj )}(hYInitialize a :c:type:`struct ssam_device_id ` with the given parameters. h]h)}(hXInitialize a :c:type:`struct ssam_device_id ` with the given parameters.h](h Initialize a }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjh]hstruct ssam_device_id}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKLhjubh with the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKLhjubah}(h]h ]h"]h$]h&]uh1j hjhKLhj)hhubjN)}(hX**Parameters** ``d`` Domain of the device. ``cat`` Target category of the device. ``tid`` Target ID of the device. ``iid`` Instance ID of the device. ``fun`` Sub-function of the device. **Description** Initializes a :c:type:`struct ssam_device_id ` with the given parameters. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters. **Note** The parameters **d** and **cat** must be valid :c:type:`u8` values, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjìhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKPhjubjn)}(hhh](js)}(h``d`` Domain of the device. h](jy)}(h``d``h]j)}(hjh]hd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjެubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKNhjڬubj)}(hhh]h)}(hDomain of the device.h]hDomain of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjڬubeh}(h]h ]h"]h$]h&]uh1jrhjhKNhj׬ubjs)}(h'``cat`` Target category of the device. h](jy)}(h``cat``h]j)}(hjh]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKOhjubj)}(hhh]h)}(hTarget category of the device.h]hTarget category of the device.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKOhj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj.hKOhj׬ubjs)}(h!``tid`` Target ID of the device. h](jy)}(h``tid``h]j)}(hjRh]htid}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKPhjLubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghKPhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jrhjghKPhj׬ubjs)}(h#``iid`` Instance ID of the device. h](jy)}(h``iid``h]j)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKQhjubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKQhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKQhj׬ubjs)}(h$``fun`` Sub-function of the device. h](jy)}(h``fun``h]j)}(hjĭh]hfun}(hjƭhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj­ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKRhjubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hjݭhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj٭hKRhjڭubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj٭hKRhj׬ubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKThjubh)}(hXInitializes a :c:type:`struct ssam_device_id ` with the given parameters. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters.h](hInitializes a }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjh]hstruct ssam_device_id}(hj!hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKShjubh with the given parameters. See }(hjhhhNhNubh)}(h2:c:type:`struct ssam_device_uid `h]j)}(hjCh]hstruct ssam_device_uid}(hjEhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjAubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_uiduh1hhj<hKShjubh: for details regarding the parameters. The special values }(hjhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, }(hjhhhNhNubj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, and }(hjhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjhhhNhNubj)}(h``match_flags``h]h match_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh% field based on the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj<hKShjubh)}(h**Note**h]jX)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKZhjubh)}(hXThe parameters **d** and **cat** must be valid :c:type:`u8` values, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](hThe parameters }(hjʮhhhNhNubjX)}(h**d**h]hd}(hjҮhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʮubh and }(hjʮhhhNhNubjX)}(h**cat**h]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʮubh must be valid }(hjʮhhhNhNubh)}(h :c:type:`u8`h]j)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjBu8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK[hjʮubh values, the parameters }(hjʮhhhNhNubjX)}(h**tid**h]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʮubh, }(hjʮhhhNhNubjX)}(h**iid**h]hiid}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʮubh, and }(hjʮhhhNhNubjX)}(h**fun**h]hfun}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjʮubh must be either valid }(hjʮhhhNhNubh)}(h :c:type:`u8`h]j)}(hjRh]hu8}(hjThhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjPubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhK[hjʮubh values or }(hjʮhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjʮubh, }(hjʮhhhNhNubj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjʮubh, or }(hjʮhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjʮubh, respectively. Other non-}(hjʮhhhNhNubh)}(h :c:type:`u8`h]j)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhK[hjʮubh values are not allowed.}(hjʮhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSAM_VDEV (C macro) c.SSAM_VDEVhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h SSAM_VDEVh]j)}(h SSAM_VDEVh]j)}(h SSAM_VDEVh]j)}(hjh]h SSAM_VDEV}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKkubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj hKkubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj hKkhjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhj hKkubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj"jIj"jJjKjLuh1jhhhj)hNhNubh)}(h"``SSAM_VDEV (cat, tid, iid, fun)``h]j)}(hj(h]hSSAM_VDEV (cat, tid, iid, fun)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKmhj)hhubj )}(hkInitialize a :c:type:`struct ssam_device_id ` as virtual device with the given parameters. h]h)}(hjInitialize a :c:type:`struct ssam_device_id ` as virtual device with the given parameters.h](h Initialize a }(hjBhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjLh]hstruct ssam_device_id}(hjNhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKkhjBubh- as virtual device with the given parameters.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihKkhj>ubah}(h]h ]h"]h$]h&]uh1j hjihKkhj)hhubjN)}(hX**Parameters** ``cat`` Target category of the device. ``tid`` Target ID of the device. ``iid`` Instance ID of the device. ``fun`` Sub-function of the device. **Description** Initializes a :c:type:`struct ssam_device_id ` with the given parameters in the virtual domain. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters. **Note** The parameter **cat** must be a valid :c:type:`u8` value, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKohjzubjn)}(hhh](js)}(h'``cat`` Target category of the device. h](jy)}(h``cat``h]j)}(hjh]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKmhjubj)}(hhh]h)}(hTarget category of the device.h]hTarget category of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKmhjubjs)}(h!``tid`` Target ID of the device. h](jy)}(h``tid``h]j)}(hjذh]htid}(hjڰhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjְubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKnhjҰubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKnhjubah}(h]h ]h"]h$]h&]uh1jhjҰubeh}(h]h ]h"]h$]h&]uh1jrhjhKnhjubjs)}(h#``iid`` Instance ID of the device. h](jy)}(h``iid``h]j)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKohj ubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKohj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj&hKohjubjs)}(h$``fun`` Sub-function of the device. h](jy)}(h``fun``h]j)}(hjJh]hfun}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjHubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKphjDubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hKphj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jrhj_hKphjubeh}(h]h ]h"]h$]h&]uh1jmhjzubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKrhjzubh)}(hXInitializes a :c:type:`struct ssam_device_id ` with the given parameters in the virtual domain. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters.h](hInitializes a }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjh]hstruct ssam_device_id}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKqhjubh6 with the given parameters in the virtual domain. See }(hjhhhNhNubh)}(h2:c:type:`struct ssam_device_uid `h]j)}(hjɱh]hstruct ssam_device_uid}(hj˱hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjDZubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_uiduh1hhj±hKqhjubh: for details regarding the parameters. The special values }(hjhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, }(hjhhhNhNubj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, and }(hjhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjhhhNhNubj)}(h``match_flags``h]h match_flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh% field based on the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj±hKqhjzubh)}(h**Note**h]jX)}(hj:h]hNote}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj8ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKxhjzubh)}(hXThe parameter **cat** must be a valid :c:type:`u8` value, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](hThe parameter }(hjPhhhNhNubjX)}(h**cat**h]hcat}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubh must be a valid }(hjPhhhNhNubh)}(h :c:type:`u8`h]j)}(hjlh]hu8}(hjnhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKyhjPubh value, the parameters }(hjPhhhNhNubjX)}(h**tid**h]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubh, }(hjPhhhNhNubjX)}(h**iid**h]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubh, and }(hjPhhhNhNubjX)}(h**fun**h]hfun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjPubh must be either valid }(hjPhhhNhNubh)}(h :c:type:`u8`h]j)}(hjƲh]hu8}(hjȲhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjIJubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhKyhjPubh values or }(hjPhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubh, }hjPsbj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubh, or }(hjPhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubh, respectively. Other non-}(hjPhhhNhNubh)}(h :c:type:`u8`h]j)}(hjh]hu8}(hj!hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhKyhjPubh values are not allowed.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKyhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSAM_SDEV (C macro) c.SSAM_SDEVhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h SSAM_SDEVh]j)}(h SSAM_SDEVh]j)}(h SSAM_SDEVh]j)}(hj`h]h SSAM_SDEV}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfubah}(h]h ](j j eh"]h$]h&]hhuh1jhjbhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhj^hhhj}hKubah}(h]jYah ](jjeh"]h$]h&]j"j#)j$huh1jhj}hKhj[hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj[hhhj}hKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubh)}(h"``SSAM_SDEV (cat, tid, iid, fun)``h]j)}(hjh]hSSAM_SDEV (cat, tid, iid, fun)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj)hhubj )}(hpInitialize a :c:type:`struct ssam_device_id ` as physical SSH device with the given parameters. h]h)}(hoInitialize a :c:type:`struct ssam_device_id ` as physical SSH device with the given parameters.h](h Initialize a }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjh]hstruct ssam_device_id}(hj³hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh2 as physical SSH device with the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjݳhKhjubah}(h]h ]h"]h$]h&]uh1j hjݳhKhj)hhubjN)}(hX**Parameters** ``cat`` Target category of the device. ``tid`` Target ID of the device. ``iid`` Instance ID of the device. ``fun`` Sub-function of the device. **Description** Initializes a :c:type:`struct ssam_device_id ` with the given parameters in the SSH domain. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters. **Note** The parameter **cat** must be a valid :c:type:`u8` value, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjn)}(hhh](js)}(h'``cat`` Target category of the device. h](jy)}(h``cat``h]j)}(hjh]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj ubj)}(hhh]h)}(hTarget category of the device.h]hTarget category of the device.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj(hKhj ubjs)}(h!``tid`` Target ID of the device. h](jy)}(h``tid``h]j)}(hjLh]htid}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjFubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jrhjahKhj ubjs)}(h#``iid`` Instance ID of the device. h](jy)}(h``iid``h]j)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhj ubjs)}(h$``fun`` Sub-function of the device. h](jy)}(h``fun``h]j)}(hjh]hfun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hj״hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjӴhKhjԴubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjӴhKhj ubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(hXInitializes a :c:type:`struct ssam_device_id ` with the given parameters in the SSH domain. See :c:type:`struct ssam_device_uid ` for details regarding the parameters. The special values ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, and ``SSAM_SSH_FUN_ANY`` can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the ``match_flags`` field based on the given parameters.h](hInitializes a }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]j)}(hjh]hstruct ssam_device_id}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh2 with the given parameters in the SSH domain. See }(hjhhhNhNubh)}(h2:c:type:`struct ssam_device_uid `h]j)}(hj=h]hstruct ssam_device_uid}(hj?hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_uiduh1hhj6hKhjubh: for details regarding the parameters. The special values }(hjhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, }(hjhhhNhNubj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, and }(hjhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjhhhNhNubj)}(h``match_flags``h]h match_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh% field based on the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj6hKhjubh)}(h**Note**h]jX)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(hXThe parameter **cat** must be a valid :c:type:`u8` value, the parameters **tid**, **iid**, and **fun** must be either valid :c:type:`u8` values or ``SSAM_SSH_TID_ANY``, ``SSAM_SSH_IID_ANY``, or ``SSAM_SSH_FUN_ANY``, respectively. Other non-:c:type:`u8` values are not allowed.h](hThe parameter }(hjĵhhhNhNubjX)}(h**cat**h]hcat}(hj̵hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjĵubh must be a valid }(hjĵhhhNhNubh)}(h :c:type:`u8`h]j)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj޵ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjĵubh value, the parameters }(hjĵhhhNhNubjX)}(h**tid**h]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjĵubh, }(hjĵhhhNhNubjX)}(h**iid**h]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjĵubh, and }(hjĵhhhNhNubjX)}(h**fun**h]hfun}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjĵubh must be either valid }(hjĵhhhNhNubh)}(h :c:type:`u8`h]j)}(hj:h]hu8}(hj<hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj8ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhKhjĵubh values or }(hjĵhhhNhNubj)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjĵubh, }hjĵsbj)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjĵubh, or }(hjĵhhhNhNubj)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjĵubh, respectively. Other non-}(hjĵhhhNhNubh)}(h :c:type:`u8`h]j)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjju8uh1hhjhKhjĵubh values are not allowed.}(hjĵhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device (C struct) c.ssam_devicehNtauh1jhj)hhhNhNubj)}(hhh](j)}(h ssam_deviceh]j)}(hstruct ssam_deviceh](j)}(hjh]hstruct}(hjڶhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֶhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֶhhhjhKubj)}(h ssam_deviceh]j)}(hjԶh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjֶhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjҶhhhjhKubah}(h]jͶah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhj϶hhubj&)}(hhh]h)}(hSSAM client device.h]hSSAM client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hj϶hhhjhKubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj4jIj4jJjKjLuh1jhhhj)hNhNubjN)}(hX**Definition**:: struct ssam_device { struct device dev; struct ssam_controller *ctrl; struct ssam_device_uid uid; unsigned long flags; }; **Members** ``dev`` Driver model representation of the device. ``ctrl`` SSAM controller managing this device. ``uid`` UID identifying the device. ``flags`` Device state flags, see :c:type:`enum ssam_device_flags `.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<ubh:}(hj<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj8ubj,)}(hstruct ssam_device { struct device dev; struct ssam_controller *ctrl; struct ssam_device_uid uid; unsigned long flags; };h]hstruct ssam_device { struct device dev; struct ssam_controller *ctrl; struct ssam_device_uid uid; unsigned long flags; };}hjYsbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj8ubh)}(h **Members**h]jX)}(hjjh]hMembers}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj8ubjn)}(hhh](js)}(h3``dev`` Driver model representation of the device. h](jy)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(h*Driver model representation of the device.h]h*Driver model representation of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubjs)}(h/``ctrl`` SSAM controller managing this device. h](jy)}(h``ctrl``h]j)}(hj·h]hctrl}(hjķhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(h%SSAM controller managing this device.h]h%SSAM controller managing this device.}(hj۷hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj׷hKhjطubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj׷hKhjubjs)}(h$``uid`` UID identifying the device. h](jy)}(h``uid``h]j)}(hjh]huid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hUID identifying the device.h]hUID identifying the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubjs)}(hW``flags`` Device state flags, see :c:type:`enum ssam_device_flags `.h](jy)}(h ``flags``h]j)}(hj4h]hflags}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj2ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj.ubj)}(hhh]h)}(hMDevice state flags, see :c:type:`enum ssam_device_flags `.h](hDevice state flags, see }(hjMhhhNhNubh)}(h4:c:type:`enum ssam_device_flags `h]j)}(hjWh]henum ssam_device_flags}(hjYhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjUubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjMubh.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthKhjJubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jrhjIhKhjubeh}(h]h ]h"]h$]h&]uh1jmhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device_driver (C struct)c.ssam_device_driverhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hssam_device_driverh]j)}(hstruct ssam_device_driverh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hssam_device_driverh]j)}(hjh]hssam_device_driver}(hjѸhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͸ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhjhhubj&)}(hhh]h)}(hSSAM client device driver.h]hSSAM client device driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhKubeh}(h]h ](jBstructeh"]h$]h&]jGjBjHj jIj jJjKjLuh1jhhhj)hNhNubjN)}(hX**Definition**:: struct ssam_device_driver { struct device_driver driver; const struct ssam_device_id *match_table; int (*probe)(struct ssam_device *sdev); void (*remove)(struct ssam_device *sdev); }; **Members** ``driver`` Base driver model structure. ``match_table`` Match table specifying which devices the driver should bind to. ``probe`` Called when the driver is being bound to a device. ``remove`` Called when the driver is being unbound from the device.h](h)}(h**Definition**::h](jX)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj,)}(hstruct ssam_device_driver { struct device_driver driver; const struct ssam_device_id *match_table; int (*probe)(struct ssam_device *sdev); void (*remove)(struct ssam_device *sdev); };h]hstruct ssam_device_driver { struct device_driver driver; const struct ssam_device_id *match_table; int (*probe)(struct ssam_device *sdev); void (*remove)(struct ssam_device *sdev); };}hj0sbah}(h]h ]h"]h$]h&]hhuh1j+h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(h **Members**h]jX)}(hjAh]hMembers}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj?ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjn)}(hhh](js)}(h(``driver`` Base driver model structure. h](jy)}(h ``driver``h]j)}(hj`h]hdriver}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj^ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjZubj)}(hhh]h)}(hBase driver model structure.h]hBase driver model structure.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jrhjuhKhjWubjs)}(hP``match_table`` Match table specifying which devices the driver should bind to. h](jy)}(h``match_table``h]j)}(hjh]h match_table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(h?Match table specifying which devices the driver should bind to.h]h?Match table specifying which devices the driver should bind to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjWubjs)}(h=``probe`` Called when the driver is being bound to a device. h](jy)}(h ``probe``h]j)}(hjҹh]hprobe}(hjԹhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjйubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj̹ubj)}(hhh]h)}(h2Called when the driver is being bound to a device.h]h2Called when the driver is being bound to a device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj̹ubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjWubjs)}(hC``remove`` Called when the driver is being unbound from the device.h](jy)}(h ``remove``h]j)}(hj h]hremove}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(h8Called when the driver is being unbound from the device.h]h8Called when the driver is being unbound from the device.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj hKhjWubeh}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jis_ssam_device (C function)c.is_ssam_devicehNtauh1jhj)hhhNhNubj)}(hhh](j)}(h&bool is_ssam_device (struct device *d)h]j)}(h%bool is_ssam_device(struct device *d)h](j)}(hjh]hbool}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjrhKubj)}(his_ssam_deviceh]j)}(his_ssam_deviceh]his_ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjahhhjrhKubjv )}(h(struct device *d)h]j| )}(hstruct device *dh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jsbc.is_ssam_deviceasbuh1hhjubj)}(h h]h }(hjߺhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdh]hd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjahhhjrhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj]hhhjrhKubah}(h]jXah ](jjeh"]h$]h&]j"j#)j$huh1jhjrhKhjZhhubj&)}(hhh]h)}(h2Check if the given device is a SSAM client device.h]h2Check if the given device is a SSAM client device.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj!hhubah}(h]h ]h"]h$]h&]uh1j%hjZhhhjrhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj<jIj<jJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct device *d`` The device to test the type of. **Return** Returns ``true`` if the specified device is of type :c:type:`struct ssam_device `, i.e. the device type points to ``ssam_device_type``, and ``false`` otherwise.h](h)}(h**Parameters**h]jX)}(hjFh]h Parameters}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjDubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj@ubjn)}(hhh]js)}(h5``struct device *d`` The device to test the type of. h](jy)}(h``struct device *d``h]j)}(hjeh]hstruct device *d}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjcubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj_ubj)}(hhh]h)}(hThe device to test the type of.h]hThe device to test the type of.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jrhjzhKhj\ubah}(h]h ]h"]h$]h&]uh1jmhj@ubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj@ubh)}(hReturns ``true`` if the specified device is of type :c:type:`struct ssam_device `, i.e. the device type points to ``ssam_device_type``, and ``false`` otherwise.h](hReturns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh$ if the specified device is of type }(hjhhhNhNubh)}(h*:c:type:`struct ssam_device `h]j)}(hjһh]hstruct ssam_device}(hjԻhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjлubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_deviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh!, i.e. the device type points to }(hjhhhNhNubj)}(h``ssam_device_type``h]hssam_device_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh, and }(hjhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jto_ssam_device (C macro)c.to_ssam_devicehNtauh1jhj)hhhNhNubj)}(hhh](j)}(hto_ssam_deviceh]j)}(hto_ssam_deviceh]j)}(hto_ssam_deviceh]j)}(hj8h]hto_ssam_device}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj:hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhj6hhhjUhKubah}(h]j1ah ](jjeh"]h$]h&]j"j#)j$huh1jhjUhKhj3hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj3hhhjUhKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjnjIjnjJjKjLuh1jhhhj)hNhNubh)}(h``to_ssam_device (d)``h]j)}(hjth]hto_ssam_device (d)}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjrubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj)hhubj )}(h0Casts the given device to a SSAM client device. h]h)}(h/Casts the given device to a SSAM client device.h]h/Casts the given device to a SSAM client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubah}(h]h ]h"]h$]h&]uh1j hjhKhj)hhubjN)}(hX**Parameters** ``d`` The device to cast. **Description** Casts the given :c:type:`struct device ` to a :c:type:`struct ssam_device `. The caller has to ensure that the given device is actually enclosed in a :c:type:`struct ssam_device `, e.g. by calling is_ssam_device(). **Return** Returns a pointer to the :c:type:`struct ssam_device ` wrapping the given device **d**.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjn)}(hhh]js)}(h``d`` The device to cast. h](jy)}(h``d``h]j)}(hjȼh]hd}(hjʼhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjƼubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj¼ubj)}(hhh]h)}(hThe device to cast.h]hThe device to cast.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjݼhKhj޼ubah}(h]h ]h"]h$]h&]uh1jhj¼ubeh}(h]h ]h"]h$]h&]uh1jrhjݼhKhjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(hCasts the given :c:type:`struct device ` to a :c:type:`struct ssam_device `. The caller has to ensure that the given device is actually enclosed in a :c:type:`struct ssam_device `, e.g. by calling is_ssam_device().h](hCasts the given }(hjhhhNhNubh)}(h :c:type:`struct device `h]j)}(hj#h]h struct device}(hj%hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh to a }(hjhhhNhNubh)}(h*:c:type:`struct ssam_device `h]j)}(hjGh]hstruct ssam_device}(hjIhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjEubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_deviceuh1hhj@hKhjubhK. The caller has to ensure that the given device is actually enclosed in a }(hjhhhNhNubh)}(h*:c:type:`struct ssam_device `h]j)}(hjjh]hstruct ssam_device}(hjlhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjhubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_deviceuh1hhj@hKhjubh#, e.g. by calling is_ssam_device().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj@hKhjubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(hdReturns a pointer to the :c:type:`struct ssam_device ` wrapping the given device **d**.h](hReturns a pointer to the }(hjhhhNhNubh)}(h*:c:type:`struct ssam_device `h]j)}(hjh]hstruct ssam_device}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj ssam_deviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh wrapping the given device }(hjhhhNhNubjX)}(h**d**h]hd}(hjսhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjнhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jto_ssam_device_driver (C macro)c.to_ssam_device_driverhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hto_ssam_device_driverh]j)}(hto_ssam_device_driverh]j)}(hto_ssam_device_driverh]j)}(hjh]hto_ssam_device_driver}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj$hKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj$hKhjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhj$hKubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj=jIj=jJjKjLuh1jhhhj)hNhNubh)}(h``to_ssam_device_driver (d)``h]j)}(hjCh]hto_ssam_device_driver (d)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjAubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj)hhubj )}(h>Casts the given device driver to a SSAM client device driver. h]h)}(h=Casts the given device driver to a SSAM client device driver.h]h=Casts the given device driver to a SSAM client device driver.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjYubah}(h]h ]h"]h$]h&]uh1j hjkhKhj)hhubjN)}(hX**Parameters** ``d`` The driver to cast. **Description** Casts the given :c:type:`struct device_driver ` to a :c:type:`struct ssam_device_driver `. The caller has to ensure that the given driver is actually enclosed in a :c:type:`struct ssam_device_driver `. **Return** Returns the pointer to the :c:type:`struct ssam_device_driver ` wrapping the given device driver **d**.h](h)}(h**Parameters**h]jX)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjvubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjrubjn)}(hhh]js)}(h``d`` The driver to cast. h](jy)}(h``d``h]j)}(hjh]hd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hThe driver to cast.h]hThe driver to cast.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubah}(h]h ]h"]h$]h&]uh1jmhjrubh)}(h**Description**h]jX)}(hjҾh]h Description}(hjԾhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjоubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjrubh)}(hXCasts the given :c:type:`struct device_driver ` to a :c:type:`struct ssam_device_driver `. The caller has to ensure that the given driver is actually enclosed in a :c:type:`struct ssam_device_driver `.h](hCasts the given }(hjhhhNhNubh)}(h.:c:type:`struct device_driver `h]j)}(hjh]hstruct device_driver}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjj device_driveruh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh to a }(hjhhhNhNubh)}(h8:c:type:`struct ssam_device_driver `h]j)}(hjh]hstruct ssam_device_driver}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_driveruh1hhjhKhjubhK. The caller has to ensure that the given driver is actually enclosed in a }(hjhhhNhNubh)}(h8:c:type:`struct ssam_device_driver `h]j)}(hj9h]hstruct ssam_device_driver}(hj;hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj7ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_driveruh1hhjhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjrubh)}(h **Return**h]jX)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj`ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjrubh)}(h{Returns the pointer to the :c:type:`struct ssam_device_driver ` wrapping the given device driver **d**.h](hReturns the pointer to the }(hjxhhhNhNubh)}(h8:c:type:`struct ssam_device_driver `h]j)}(hjh]hstruct ssam_device_driver}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_device_driveruh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjxubh" wrapping the given device driver }(hjxhhhNhNubjX)}(h**d**h]hd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjxubh.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ssam_device_mark_hot_removed (C function)c.ssam_device_mark_hot_removedhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hh]h Parameters}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj<ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj8ubjn)}(hhh]js)}(h2``struct ssam_device *sdev`` The device to check. h](jy)}(h``struct ssam_device *sdev``h]j)}(hj]h]hstruct ssam_device *sdev}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj[ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjWubj)}(hhh]h)}(hThe device to check.h]hThe device to check.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jrhjrhMhjTubah}(h]h ]h"]h$]h&]uh1jmhj8ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj8ubh)}(hoChecks if the given device has been marked as hot-removed. See ssam_device_mark_hot_removed() for more details.h]hoChecks if the given device has been marked as hot-removed. See ssam_device_mark_hot_removed() for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj8ubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj8ubh)}(h>Returns ``true`` if the device has been marked as hot-removed.h](hReturns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh. if the device has been marked as hot-removed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device_get (C function)c.ssam_device_gethNtauh1jhj)hhhNhNubj)}(hhh](j)}(h?struct ssam_device * ssam_device_get (struct ssam_device *sdev)h]j)}(h=struct ssam_device *ssam_device_get(struct ssam_device *sdev)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM"ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM"ubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj7modnameN classnameNjj)}j]jI )}jA ssam_device_getsbc.ssam_device_getasbuh1hhjhhhj#hM"ubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj#hM"ubj )}(hj h]h*}(hjdhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhj#hM"ubj)}(hssam_device_geth]j)}(hjSh]hssam_device_get}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhj#hM"ubjv )}(h(struct ssam_device *sdev)h]j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jQc.ssam_device_getasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhj#hM"ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj#hM"ubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj#hM"hj hhubj&)}(hhh]h)}(h0Increment reference count of SSAM client device.h]h0Increment reference count of SSAM client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM"hjhhubah}(h]h ]h"]h$]h&]uh1j%hj hhhj#hM"ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj)jIj)jJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct ssam_device *sdev`` The device to increment the reference count of. **Description** Increments the reference count of the given SSAM client device by incrementing the reference count of the enclosed :c:type:`struct device ` via get_device(). See ssam_device_put() for the counter-part of this function. **Return** Returns the device provided as input.h](h)}(h**Parameters**h]jX)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj1ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM&hj-ubjn)}(hhh]js)}(hM``struct ssam_device *sdev`` The device to increment the reference count of. h](jy)}(h``struct ssam_device *sdev``h]j)}(hjRh]hstruct ssam_device *sdev}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjPubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM#hjLubj)}(hhh]h)}(h/The device to increment the reference count of.h]h/The device to increment the reference count of.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM#hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jrhjghM#hjIubah}(h]h ]h"]h$]h&]uh1jmhj-ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM%hj-ubh)}(hIncrements the reference count of the given SSAM client device by incrementing the reference count of the enclosed :c:type:`struct device ` via get_device().h](hsIncrements the reference count of the given SSAM client device by incrementing the reference count of the enclosed }(hjhhhNhNubh)}(h :c:type:`struct device `h]j)}(hjh]h struct device}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM$hjubh via get_device().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM$hj-ubh)}(h` via put_device(). See ssam_device_get() for the counter-part of this function.h](h)}(h**Parameters**h]jX)}(hj h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM7hjubjn)}(hhh]js)}(hM``struct ssam_device *sdev`` The device to decrement the reference count of. h](jy)}(h``struct ssam_device *sdev``h]j)}(hj,h]hstruct ssam_device *sdev}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj*ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM4hj&ubj)}(hhh]h)}(h/The device to decrement the reference count of.h]h/The device to decrement the reference count of.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM4hjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jrhjAhM4hj#ubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM6hjubh)}(hDecrements the reference count of the given SSAM client device by decrementing the reference count of the enclosed :c:type:`struct device ` via put_device().h](hsDecrements the reference count of the given SSAM client device by decrementing the reference count of the enclosed }(hj}hhhNhNubh)}(h :c:type:`struct device `h]j)}(hjh]h struct device}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM5hj}ubh via put_device().}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM5hjubh)}(hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM\ubah}(h]h ]h"]h$]h&]hhjuh1jjjhj:hhhjYhM\ubah}(h]j5ah ](jjeh"]h$]h&]j"j#)j$huh1jhjYhM\hj7hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj7hhhjYhM\ubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjrjIjrjJjKjLuh1jhhhj)hNhNubh)}(h%``ssam_device_driver_register (drv)``h]j)}(hjxh]h!ssam_device_driver_register (drv)}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM^hj)hhubj )}(h&Register a SSAM client device driver. h]h)}(h%Register a SSAM client device driver.h]h%Register a SSAM client device driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM\hjubah}(h]h ]h"]h$]h&]uh1j hjhM\hj)hhubjN)}(h1**Parameters** ``drv`` The driver to register.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM`hjubjn)}(hhh]js)}(h``drv`` The driver to register.h](jy)}(h``drv``h]j)}(hjh]hdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMbhjubj)}(hhh]h)}(hThe driver to register.h]hThe driver to register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMbhjubah}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#module_ssam_device_driver (C macro)c.module_ssam_device_driverhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hmodule_ssam_device_driverh]j)}(hmodule_ssam_device_driverh]j)}(hmodule_ssam_device_driverh]j)}(hj h]hmodule_ssam_device_driver}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj"hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMcubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj=hMcubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj=hMchjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhj=hMcubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjVjIjVjJjKjLuh1jhhhj)hNhNubh)}(h#``module_ssam_device_driver (drv)``h]j)}(hj\h]hmodule_ssam_device_driver (drv)}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjZubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMehj)hhubj )}(h2Helper macro for SSAM device driver registration. h]h)}(h1Helper macro for SSAM device driver registration.h]h1Helper macro for SSAM device driver registration.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMchjrubah}(h]h ]h"]h$]h&]uh1j hjhMchj)hhubjN)}(h**Parameters** ``drv`` The driver managed by this module. **Description** Helper macro to register a SSAM device driver via module_init() and module_exit(). This macro may only be used once per module and replaces the aforementioned definitions.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMghjubjn)}(hhh]js)}(h+``drv`` The driver managed by this module. h](jy)}(h``drv``h]j)}(hjh]hdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMehjubj)}(hhh]h)}(h"The driver managed by this module.h]h"The driver managed by this module.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMehjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMghjubh)}(hHelper macro to register a SSAM device driver via module_init() and module_exit(). This macro may only be used once per module and replaces the aforementioned definitions.h]hHelper macro to register a SSAM device driver via module_init() and module_exit(). This macro may only be used once per module and replaces the aforementioned definitions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ssam_register_clients (C function)c.ssam_register_clientshNtauh1jhj)hhhNhNubj)}(hhh](j)}(hLint ssam_register_clients (struct device *dev, struct ssam_controller *ctrl)h]j)}(hKint ssam_register_clients(struct device *dev, struct ssam_controller *ctrl)h](j)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj>hMubj)}(hssam_register_clientsh]j)}(hssam_register_clientsh]hssam_register_clients}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ](j j eh"]h$]h&]hhuh1jhj,hhhj>hMubjv )}(h2(struct device *dev, struct ssam_controller *ctrl)h](j| )}(hstruct device *devh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jSsbc.ssam_register_clientsasbuh1hhjiubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjiubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjeubj| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_register_clientsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjeubeh}(h]h ]h"]h$]h&]hhuh1ju hj,hhhj>hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj(hhhj>hMubah}(h]j#ah ](jjeh"]h$]h&]j"j#)j$huh1jhj>hMhj%hhubj&)}(hhh]h)}(hBRegister all client devices defined under the given parent device.h]hBRegister all client devices defined under the given parent device.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj]hhubah}(h]h ]h"]h$]h&]uh1j%hj%hhhj>hMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjxjIjxjJjKjLuh1jhhhj)hNhNubjN)}(hXA**Parameters** ``struct device *dev`` The parent device under which clients should be registered. ``struct ssam_controller *ctrl`` The controller with which client should be registered. **Description** Register all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices. The given controller will be used to instantiate the new devices. See ssam_device_add() for details. **Return** Returns zero on success, nonzero on failure.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubjn)}(hhh](js)}(hS``struct device *dev`` The parent device under which clients should be registered. h](jy)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(h;The parent device under which clients should be registered.h]h;The parent device under which clients should be registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(hX``struct ssam_controller *ctrl`` The controller with which client should be registered. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(h6The controller with which client should be registered.h]h6The controller with which client should be registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubeh}(h]h ]h"]h$]h&]uh1jmhj|ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubh)}(hRegister all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices.h]hRegister all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubh)}(hdThe given controller will be used to instantiate the new devices. See ssam_device_add() for details.h]hdThe given controller will be used to instantiate the new devices. See ssam_device_add() for details.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubh)}(h **Return**h]jX)}(hjKh]hReturn}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjIubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubh)}(h,Returns zero on success, nonzero on failure.h]h,Returns zero on success, nonzero on failure.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ssam_device_register_clients (C function)c.ssam_device_register_clientshNtauh1jhj)hhhNhNubj)}(hhh](j)}(h;int ssam_device_register_clients (struct ssam_device *sdev)h]j)}(h:int ssam_device_register_clients(struct ssam_device *sdev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hssam_device_register_clientsh]j)}(hssam_device_register_clientsh]hssam_device_register_clients}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(h(struct ssam_device *sdev)h]j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jsbc.ssam_device_register_clientsasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(hGRegister all client devices defined under the given SSAM parent device.h]hGRegister all client devices defined under the given SSAM parent device.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjMhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjhjIjhjJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct ssam_device *sdev`` The parent device under which clients should be registered. **Description** Register all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices. The controller used by the parent device will be used to instantiate the new devices. See ssam_device_add() for details. **Return** Returns zero on success, nonzero on failure.h](h)}(h**Parameters**h]jX)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjpubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubjn)}(hhh]js)}(hY``struct ssam_device *sdev`` The parent device under which clients should be registered. h](jy)}(h``struct ssam_device *sdev``h]j)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(h;The parent device under which clients should be registered.h]h;The parent device under which clients should be registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubah}(h]h ]h"]h$]h&]uh1jmhjlubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubh)}(hRegister all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices.h]hRegister all clients that have via firmware nodes been defined as children of the given (parent) device. The respective child firmware nodes will be associated with the correspondingly created child devices.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubh)}(hxThe controller used by the parent device will be used to instantiate the new devices. See ssam_device_add() for details.h]hxThe controller used by the parent device will be used to instantiate the new devices. See ssam_device_add() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubh)}(h,Returns zero on success, nonzero on failure.h]h,Returns zero on success, nonzero on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_CL_N (C macro)c.SSAM_DEFINE_SYNC_REQUEST_CL_NhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Nh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Nh]j)}(hjAh]hSSAM_DEFINE_SYNC_REQUEST_CL_N}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](j j eh"]h$]h&]hhuh1jhjChhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj?hhhj^hMubah}(h]j:ah ](jjeh"]h$]h&]j"j#)j$huh1jhj^hMhj<hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj<hhhj^hMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjwjIjwjJjKjLuh1jhhhj)hNhNubh)}(h1``SSAM_DEFINE_SYNC_REQUEST_CL_N (name, spec...)``h]j)}(hj}h]h-SSAM_DEFINE_SYNC_REQUEST_CL_N (name, spec...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj{ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj)hhubj )}(h^Define synchronous client-device SAM request function with neither argument nor return value. h]h)}(h]Define synchronous client-device SAM request function with neither argument nor return value.h]h]Define synchronous client-device SAM request function with neither argument nor return value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubah}(h]h ]h"]h$]h&]uh1j hjhMhj)hhubjN)}(hXt**Parameters** ``name`` Name of the generated function. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_device *sdev)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hj h]hspec...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hj#hhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hj-h]hstruct ssam_request_spec_md}(hj/hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjhMhj#ubh) defining the request.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjhh]h Description}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubh)}(hXDefines a function executing the synchronous SAM request specified by **spec**, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hj~hhhNhNubjX)}(h**spec**h]hspec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj~ubhX, with the request having neither argument nor return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubh)}(hX2The generated function is defined as ``static int name(struct ssam_device *sdev)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent.h](h%The generated function is defined as }(hjhhhNhNubj)}(h-``static int name(struct ssam_device *sdev)``h]h)static int name(struct ssam_device *sdev)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh], returning the status of the request, which is zero on success and negative on failure. The }(hjhhhNhNubj)}(h``sdev``h]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh{ parameter specifies both the target device of the request and by association the controller via which the request is sent.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_CL_W (C macro)c.SSAM_DEFINE_SYNC_REQUEST_CL_WhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Wh]j)}(hjh]hSSAM_DEFINE_SYNC_REQUEST_CL_W}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj1jIj1jJjKjLuh1jhhhj)hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_CL_W (name, atype, spec...)``h]j)}(hj7h]h4SSAM_DEFINE_SYNC_REQUEST_CL_W (name, atype, spec...)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj5ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj)hhubj )}(hEDefine synchronous client-device SAM request function with argument. h]h)}(hDDefine synchronous client-device SAM request function with argument.h]hDDefine synchronous client-device SAM request function with argument.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjMubah}(h]h ]h"]h$]h&]uh1j hj_hMhj)hhubjN)}(hX**Parameters** ``name`` Name of the generated function. ``atype`` Type of the request's argument. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_device *sdev, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's argument is specified via the ``arg`` pointer. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjlh]h Parameters}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjfubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hjh]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hjh]hspec...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hjhhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hj h]hstruct ssam_request_spec_md}(hj"hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjhMhjubh) defining the request.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjfubh)}(h**Description**h]jX)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjYubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjfubh)}(hX3Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having no return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjqhhhNhNubjX)}(h**spec**h]hspec}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqubh., with the request taking an argument of type }(hjqhhhNhNubjX)}(h **atype**h]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjqubhX and having no return value. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjfubh)}(hXThe generated function is defined as ``static int name(struct ssam_device *sdev, const atype *arg)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's argument is specified via the ``arg`` pointer.h](h%The generated function is defined as }(hjhhhNhNubj)}(h?``static int name(struct ssam_device *sdev, const atype *arg)``h]h;static int name(struct ssam_device *sdev, const atype *arg)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh], returning the status of the request, which is zero on success and negative on failure. The }(hjhhhNhNubj)}(h``sdev``h]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh parameter specifies both the target device of the request and by association the controller via which the request is sent. The request’s argument is specified via the }(hjhhhNhNubj)}(h``arg``h]harg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh pointer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjfubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_CL_R (C macro)c.SSAM_DEFINE_SYNC_REQUEST_CL_RhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_Rh]j)}(hjh]hSSAM_DEFINE_SYNC_REQUEST_CL_R}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj/hMubah}(h]j ah ](jjeh"]h$]h&]j"j#)j$huh1jhj/hMhj hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj hhhj/hMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHjHjIjHjJjKjLuh1jhhhj)hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_CL_R (name, rtype, spec...)``h]j)}(hjNh]h4SSAM_DEFINE_SYNC_REQUEST_CL_R (name, rtype, spec...)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjLubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj)hhubj )}(hIDefine synchronous client-device SAM request function with return value. h]h)}(hHDefine synchronous client-device SAM request function with return value.h]hHDefine synchronous client-device SAM request function with return value.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjdubah}(h]h ]h"]h$]h&]uh1j hjvhMhj)hhubjN)}(hX **Parameters** ``name`` Name of the generated function. ``rtype`` Type of the request's return value. ``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_device *sdev, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj}ubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hjh]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hjh]hspec...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hj-hhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hj7h]hstruct ssam_request_spec_md}(hj9hhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hj5ubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhj)hMhj-ubh) defining the request.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj)hMhjubeh}(h]h ]h"]h$]h&]uh1jmhj}ubh)}(h**Description**h]jX)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjpubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj}ubh)}(hX2Defines a function executing the synchronous SAM request specified by **spec**, with the request taking no argument but having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjhhhNhNubjX)}(h**spec**h]hspec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubhH, with the request taking no argument but having a return value of type }(hjhhhNhNubjX)}(h **rtype**h]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubhX. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj}ubh)}(hXThe generated function is defined as ``static int name(struct ssam_device *sdev, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hjhhhNhNubj)}(h9``static int name(struct ssam_device *sdev, rtype *ret)``h]h5static int name(struct ssam_device *sdev, rtype *ret)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh], returning the status of the request, which is zero on success and negative on failure. The }(hjhhhNhNubj)}(h``sdev``h]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh parameter specifies both the target device of the request and by association the controller via which the request is sent. The request’s return value is written to the memory pointed to by the }(hjhhhNhNubj)}(h``ret``h]hret}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj}ubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(SSAM_DEFINE_SYNC_REQUEST_CL_WR (C macro) c.SSAM_DEFINE_SYNC_REQUEST_CL_WRhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_CL_WRh]j)}(hj)h]hSSAM_DEFINE_SYNC_REQUEST_CL_WR}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](j j eh"]h$]h&]hhuh1jhj+hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj'hhhjFhMubah}(h]j"ah ](jjeh"]h$]h&]j"j#)j$huh1jhjFhMhj$hhubj&)}(hhh]h}(h]h ]h"]h$]h&]uh1j%hj$hhhjFhMubeh}(h]h ](jBmacroeh"]h$]h&]jGjBjHj_jIj_jJjKjLuh1jhhhj)hNhNubh)}(h@``SSAM_DEFINE_SYNC_REQUEST_CL_WR (name, atype, rtype, spec...)``h]j)}(hjeh]h`) defining the request. **Description** Defines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack. The generated function is defined as ``static int name(struct ssam_device *sdev, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter. Refer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubjn)}(hhh](js)}(h)``name`` Name of the generated function. h](jy)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h*``atype`` Type of the request's argument. h](jy)}(h ``atype``h]j)}(hjh]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubjs)}(h.``rtype`` Type of the request's return value. h](jy)}(h ``rtype``h]j)}(hj+h]hrtype}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj)ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj%ubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhjAubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jrhj@hMhjubjs)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](jy)}(h ``spec...``h]j)}(hjdh]hspec...}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjbubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj^ubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hj}hhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]j)}(hjh]hstruct ssam_request_spec_md}(hjhhhNhNubah}(h]h ](jjBc-typeeh"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]refdocj refdomainjBreftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjyhMhj}ubh) defining the request.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyhMhjzubah}(h]h ]h"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]uh1jrhjyhMhjubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubh)}(hXDDefines a function executing the synchronous SAM request specified by **spec**, with the request taking an argument of type **atype** and having a return value of type **rtype**. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.h](hFDefines a function executing the synchronous SAM request specified by }(hjhhhNhNubjX)}(h**spec**h]hspec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh., with the request taking an argument of type }(hjhhhNhNubjX)}(h **atype**h]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubh# and having a return value of type }(hjhhhNhNubjX)}(h **rtype**h]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubhX. Device specifying parameters are not hard-coded, but instead are provided via the client device, specifically its UID, supplied when calling this function. The generated function takes care of setting up the request struct, buffer allocation, as well as execution of the request itself, returning once the request has been fully completed. The required transport buffer will be allocated on the stack.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjubh)}(hXThe generated function is defined as ``static int name(struct ssam_device *sdev, const atype *arg, rtype *ret)``, returning the status of the request, which is zero on success and negative on failure. The ``sdev`` parameter specifies both the target device of the request and by association the controller via which the request is sent. The request's argument is specified via the ``arg`` pointer. The request's return value is written to the memory pointed to by the ``ret`` parameter.h](h%The generated function is defined as }(hjhhhNhNubj)}(hK``static int name(struct ssam_device *sdev, const atype *arg, rtype *ret)``h]hGstatic int name(struct ssam_device *sdev, const atype *arg, rtype *ret)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh], returning the status of the request, which is zero on success and negative on failure. The }(hjhhhNhNubj)}(h``sdev``h]hsdev}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh parameter specifies both the target device of the request and by association the controller via which the request is sent. The request’s argument is specified via the }(hjhhhNhNubj)}(h``arg``h]harg}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubhR pointer. The request’s return value is written to the memory pointed to by the }(hjhhhNhNubj)}(h``ret``h]hret}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM"hjubh)}(hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.h]hcRefer to ssam_request_do_sync_onstack() for more details on the behavior of the generated function.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM*hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*ssam_device_notifier_register (C function)c.ssam_device_notifier_registerhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h[int ssam_device_notifier_register (struct ssam_device *sdev, struct ssam_event_notifier *n)h]j)}(hZint ssam_device_notifier_register(struct ssam_device *sdev, struct ssam_event_notifier *n)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM:ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM:ubj)}(hssam_device_notifier_registerh]j)}(hssam_device_notifier_registerh]hssam_device_notifier_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhM:ubjv )}(h9(struct ssam_device *sdev, struct ssam_event_notifier *n)h](j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jsbc.ssam_device_notifier_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_notifier *nh](j)}(hjh]hstruct}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubh)}(hhh]j)}(hssam_event_notifierh]hssam_event_notifier}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjrmodnameN classnameNjj)}j]jc.ssam_device_notifier_registerasbuh1hhjNubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjNubj)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhM:ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM:ubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhM:hjhhubj&)}(hhh]h)}(h;Register an event notifier for the specified client device.h]h;Register an event notifier for the specified client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM:hjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhM:ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct ssam_device *sdev`` The device the notifier should be registered on. ``struct ssam_event_notifier *n`` The event notifier to register. **Description** Register an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified. Notifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set. **Return** Returns zero on success, ``-ENOSPC`` if there have already been ``INT_MAX`` notifiers for the event ID/type associated with the notifier block registered, ``-ENOMEM`` if the corresponding event entry could not be allocated, ``-ENODEV`` if the device is marked as hot-removed. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM>hjubjn)}(hhh](js)}(hN``struct ssam_device *sdev`` The device the notifier should be registered on. h](jy)}(h``struct ssam_device *sdev``h]j)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM<hj ubj)}(hhh]h)}(h0The device the notifier should be registered on.h]h0The device the notifier should be registered on.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hM<hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jrhj(hM<hj ubjs)}(hB``struct ssam_event_notifier *n`` The event notifier to register. h](jy)}(h!``struct ssam_event_notifier *n``h]j)}(hjLh]hstruct ssam_event_notifier *n}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjJubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM=hjFubj)}(hhh]h)}(hThe event notifier to register.h]hThe event notifier to register.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahM=hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jrhjahM=hj ubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM?hjubh)}(hXoRegister an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified.h]hXoRegister an event notifier. Increment the usage counter of the associated SAM event if the notifier is not marked as an observer. If the event is not marked as an observer and is currently not enabled, it will be enabled during this call. If the notifier is marked as an observer, no attempt will be made at enabling any event and no reference count will be modified.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM>hjubh)}(hNotifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set.h]hNotifiers marked as observers do not need to be associated with one specific event, i.e. as long as no event matching is performed, only the event target category needs to be set.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMDhjubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMHhjubh)}(hXReturns zero on success, ``-ENOSPC`` if there have already been ``INT_MAX`` notifiers for the event ID/type associated with the notifier block registered, ``-ENOMEM`` if the corresponding event entry could not be allocated, ``-ENODEV`` if the device is marked as hot-removed. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.h](hReturns zero on success, }(hjhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh if there have already been }(hjhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubhP notifiers for the event ID/type associated with the notifier block registered, }(hjhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh: if the corresponding event entry could not be allocated, }(hjhhhNhNubj)}(h ``-ENODEV``h]h-ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh if the device is marked as hot-removed. If this is the first time that a notifier block is registered for the specific associated event, returns the status of the event-enable EC-command.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j,ssam_device_notifier_unregister (C function)!c.ssam_device_notifier_unregisterhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h]int ssam_device_notifier_unregister (struct ssam_device *sdev, struct ssam_event_notifier *n)h]j)}(h\int ssam_device_notifier_unregister(struct ssam_device *sdev, struct ssam_event_notifier *n)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM`ubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhM`ubj)}(hssam_device_notifier_unregisterh]j)}(hssam_device_notifier_unregisterh]hssam_device_notifier_unregister}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](j j eh"]h$]h&]hhuh1jhjFhhhjXhM`ubjv )}(h9(struct ssam_device *sdev, struct ssam_event_notifier *n)h](j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jmsb!c.ssam_device_notifier_unregisterasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_event_notifier *nh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_event_notifierh]hssam_event_notifier}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]j!c.ssam_device_notifier_unregisterasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]hn}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hjFhhhjXhM`ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjBhhhjXhM`ubah}(h]j=ah ](jjeh"]h$]h&]j"j#)j$huh1jhjXhM`hj?hhubj&)}(hhh]h)}(h=Unregister an event notifier for the specified client device.h]h=Unregister an event notifier for the specified client device.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM`hjvhhubah}(h]h ]h"]h$]h&]uh1j%hj?hhhjXhM`ubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct ssam_device *sdev`` The device the notifier has been registered on. ``struct ssam_event_notifier *n`` The event notifier to unregister. **Description** Unregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero, the event will be disabled. In case the device has been marked as hot-removed, the event will not be disabled on the EC, as in those cases any attempt at doing so may time out. **Return** Returns zero on success, ``-ENOENT`` if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMdhjubjn)}(hhh](js)}(hM``struct ssam_device *sdev`` The device the notifier has been registered on. h](jy)}(h``struct ssam_device *sdev``h]j)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMbhjubj)}(hhh]h)}(h/The device the notifier has been registered on.h]h/The device the notifier has been registered on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMbhjubjs)}(hD``struct ssam_event_notifier *n`` The event notifier to unregister. h](jy)}(h!``struct ssam_event_notifier *n``h]j)}(hjh]hstruct ssam_event_notifier *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMchjubj)}(hhh]h)}(h!The event notifier to unregister.h]h!The event notifier to unregister.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMchjubeh}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMehjubh)}(hUnregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero, the event will be disabled.h]hUnregister an event notifier. Decrement the usage counter of the associated SAM event if the notifier is not marked as an observer. If the usage counter reaches zero, the event will be disabled.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMdhjubh)}(hIn case the device has been marked as hot-removed, the event will not be disabled on the EC, as in those cases any attempt at doing so may time out.h]hIn case the device has been marked as hot-removed, the event will not be disabled on the EC, as in those cases any attempt at doing so may time out.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhhjubh)}(h **Return**h]jX)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMkhjubh)}(hReturns zero on success, ``-ENOENT`` if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.h](hReturns zero on success, }(hjzhhhNhNubj)}(h ``-ENOENT``h]h-ENOENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjzubh if the given notifier block has not been registered on the controller. If the given notifier block was the last one associated with its specific event, returns the status of the event-disable EC-command.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMlhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device_alloc (C function)c.ssam_device_allochNtauh1jhj)hhhNhNubj)}(hhh](j)}(hastruct ssam_device * ssam_device_alloc (struct ssam_controller *ctrl, struct ssam_device_uid uid)h]j)}(h_struct ssam_device *ssam_device_alloc(struct ssam_controller *ctrl, struct ssam_device_uid uid)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKEubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA ssam_device_allocsbc.ssam_device_allocasbuh1hhjhhhjhKEubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKEubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKEubj)}(hssam_device_alloch]j)}(hjh]hssam_device_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhKEubjv )}(h:(struct ssam_controller *ctrl, struct ssam_device_uid uid)h](j| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjUmodnameN classnameNjj)}j]jc.ssam_device_allocasbuh1hhj1ubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj1ubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj-ubj| )}(hstruct ssam_device_uid uidh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_device_uidh]hssam_device_uid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_device_allocasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huidh]huid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj-ubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhKEubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKEubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKEhjhhubj&)}(hhh]h)}(h-Allocate and initialize a SSAM client device.h]h-Allocate and initialize a SSAM client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKEhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhKEubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj1jIj1jJjKjLuh1jhhhj)hNhNubjN)}(hX:**Parameters** ``struct ssam_controller *ctrl`` The controller under which the device should be added. ``struct ssam_device_uid uid`` The UID of the device to be added. **Description** Allocates and initializes a new client device. The parent of the device will be set to the controller device and the name will be set based on the UID. Note that the device still has to be added via ssam_device_add(). Refer to that function for more details. **Return** Returns the newly allocated and initialized SSAM client device, or ``NULL`` if it could not be allocated.h](h)}(h**Parameters**h]jX)}(hj;h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj9ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKIhj5ubjn)}(hhh](js)}(hX``struct ssam_controller *ctrl`` The controller under which the device should be added. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjZh]hstruct ssam_controller *ctrl}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjXubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKFhjTubj)}(hhh]h)}(h6The controller under which the device should be added.h]h6The controller under which the device should be added.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjohKFhjpubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jrhjohKFhjQubjs)}(hB``struct ssam_device_uid uid`` The UID of the device to be added. h](jy)}(h``struct ssam_device_uid uid``h]j)}(hjh]hstruct ssam_device_uid uid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKGhjubj)}(hhh]h)}(h"The UID of the device to be added.h]h"The UID of the device to be added.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKGhjQubeh}(h]h ]h"]h$]h&]uh1jmhj5ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKIhj5ubh)}(hXAllocates and initializes a new client device. The parent of the device will be set to the controller device and the name will be set based on the UID. Note that the device still has to be added via ssam_device_add(). Refer to that function for more details.h]hXAllocates and initializes a new client device. The parent of the device will be set to the controller device and the name will be set based on the UID. Note that the device still has to be added via ssam_device_add(). Refer to that function for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKHhj5ubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKMhj5ubh)}(hiReturns the newly allocated and initialized SSAM client device, or ``NULL`` if it could not be allocated.h](hCReturns the newly allocated and initialized SSAM client device, or }(hj hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj ubh if it could not be allocated.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKNhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device_add (C function)c.ssam_device_addhNtauh1jhj)hhhNhNubj)}(hhh](j)}(h.int ssam_device_add (struct ssam_device *sdev)h]j)}(h-int ssam_device_add(struct ssam_device *sdev)h](j)}(hinth]hint}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKjubj)}(h h]h }(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjZhKjubj)}(hssam_device_addh]j)}(hssam_device_addh]hssam_device_add}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](j j eh"]h$]h&]hhuh1jhjHhhhjZhKjubjv )}(h(struct ssam_device *sdev)h]j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA josbc.ssam_device_addasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjHhhhjZhKjubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjDhhhjZhKjubah}(h]j?ah ](jjeh"]h$]h&]j"j#)j$huh1jhjZhKjhjAhhubj&)}(hhh]h)}(hAdd a SSAM client device.h]hAdd a SSAM client device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKjhj hhubah}(h]h ]h"]h$]h&]uh1j%hjAhhhjZhKjubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHj$jIj$jJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``struct ssam_device *sdev`` The SSAM client device to be added. **Description** Added client devices must be guaranteed to always have a valid and active controller. Thus, this function will fail with ``-ENODEV`` if the controller of the device has not been initialized yet, has been suspended, or has been shut down. The caller of this function should ensure that the corresponding call to ssam_device_remove() is issued before the controller is shut down. If the added device is a direct child of the controller device (default), it will be automatically removed when the controller is shut down. By default, the controller device will become the parent of the newly created client device. The parent may be changed before ssam_device_add is called, but care must be taken that a) the correct suspend/resume ordering is guaranteed and b) the client device does not outlive the controller, i.e. that the device is removed before the controller is being shut down. In case these guarantees have to be manually enforced, please refer to the ssam_client_link() and ssam_client_bind() functions, which are intended to set up device-links for this purpose. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]jX)}(hj.h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj,ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKnhj(ubjn)}(hhh]js)}(hA``struct ssam_device *sdev`` The SSAM client device to be added. h](jy)}(h``struct ssam_device *sdev``h]j)}(hjMh]hstruct ssam_device *sdev}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjKubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKkhjGubj)}(hhh]h)}(h#The SSAM client device to be added.h]h#The SSAM client device to be added.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKkhjcubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jrhjbhKkhjDubah}(h]h ]h"]h$]h&]uh1jmhj(ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKmhj(ubh)}(hAdded client devices must be guaranteed to always have a valid and active controller. Thus, this function will fail with ``-ENODEV`` if the controller of the device has not been initialized yet, has been suspended, or has been shut down.h](hyAdded client devices must be guaranteed to always have a valid and active controller. Thus, this function will fail with }(hjhhhNhNubj)}(h ``-ENODEV``h]h-ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubhi if the controller of the device has not been initialized yet, has been suspended, or has been shut down.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKlhj(ubh)}(hXThe caller of this function should ensure that the corresponding call to ssam_device_remove() is issued before the controller is shut down. If the added device is a direct child of the controller device (default), it will be automatically removed when the controller is shut down.h]hXThe caller of this function should ensure that the corresponding call to ssam_device_remove() is issued before the controller is shut down. If the added device is a direct child of the controller device (default), it will be automatically removed when the controller is shut down.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKqhj(ubh)}(hX)By default, the controller device will become the parent of the newly created client device. The parent may be changed before ssam_device_add is called, but care must be taken that a) the correct suspend/resume ordering is guaranteed and b) the client device does not outlive the controller, i.e. that the device is removed before the controller is being shut down. In case these guarantees have to be manually enforced, please refer to the ssam_client_link() and ssam_client_bind() functions, which are intended to set up device-links for this purpose.h]hX)By default, the controller device will become the parent of the newly created client device. The parent may be changed before ssam_device_add is called, but care must be taken that a) the correct suspend/resume ordering is guaranteed and b) the client device does not outlive the controller, i.e. that the device is removed before the controller is being shut down. In case these guarantees have to be manually enforced, please refer to the ssam_client_link() and ssam_client_bind() functions, which are intended to set up device-links for this purpose.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKvhj(ubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhj(ubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_device_remove (C function)c.ssam_device_removehNtauh1jhj)hhhNhNubj)}(hhh](j)}(h2void ssam_device_remove (struct ssam_device *sdev)h]j)}(h1void ssam_device_remove(struct ssam_device *sdev)h](j)}(hvoidh]hvoid}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj2hKubj)}(hssam_device_removeh]j)}(hssam_device_removeh]hssam_device_remove}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](j j eh"]h$]h&]hhuh1jhj hhhj2hKubjv )}(h(struct ssam_device *sdev)h]j| )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jGsbc.ssam_device_removeasbuh1hhj]ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjYubah}(h]h ]h"]h$]h&]hhuh1ju hj hhhj2hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj2hKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj2hKhjhhubj&)}(hhh]h)}(hRemove a SSAM client device.h]hRemove a SSAM client device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj2hKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(h**Parameters** ``struct ssam_device *sdev`` The device to remove. **Description** Removes and unregisters the provided SSAM client device.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubjn)}(hhh]js)}(h3``struct ssam_device *sdev`` The device to remove. h](jy)}(h``struct ssam_device *sdev``h]j)}(hj%h]hstruct ssam_device *sdev}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubj)}(hhh]h)}(hThe device to remove.h]hThe device to remove.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj:hKhjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj^ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubh)}(h8Removes and unregisters the provided SSAM client device.h]h8Removes and unregisters the provided SSAM client device.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_device_id_match (C function)c.ssam_device_id_matchhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hyconst struct ssam_device_id * ssam_device_id_match (const struct ssam_device_id *table, const struct ssam_device_uid uid)h]j)}(hwconst struct ssam_device_id *ssam_device_id_match(const struct ssam_device_id *table, const struct ssam_device_uid uid)h](j)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA ssam_device_id_matchsbc.ssam_device_id_matchasbuh1hhjhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhKubj)}(hssam_device_id_matchh]j)}(hjh]hssam_device_id_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhKubjv )}(hF(const struct ssam_device_id *table, const struct ssam_device_uid uid)h](j| )}(h"const struct ssam_device_id *tableh](j)}(hj h]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjumodnameN classnameNjj)}j]jc.ssam_device_id_matchasbuh1hhj6ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj6ubj)}(htableh]htable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj2ubj| )}(h const struct ssam_device_uid uidh](j)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_device_uidh]hssam_device_uid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.ssam_device_id_matchasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(huidh]huid}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hj2ubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhKhjhhubj&)}(hhh]h)}(h3Find the matching ID table entry for the given UID.h]h3Find the matching ID table entry for the given UID.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjQhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjljIjljJjKjLuh1jhhhj)hNhNubjN)}(hXI**Parameters** ``const struct ssam_device_id *table`` The table to search in. ``const struct ssam_device_uid uid`` The UID to matched against the individual table entries. **Description** Find the first match for the provided device UID in the provided ID table and return it. Returns ``NULL`` if no match could be found.h](h)}(h**Parameters**h]jX)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjtubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjpubjn)}(hhh](js)}(h?``const struct ssam_device_id *table`` The table to search in. h](jy)}(h&``const struct ssam_device_id *table``h]j)}(hjh]h"const struct ssam_device_id *table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubj)}(hhh]h)}(hThe table to search in.h]hThe table to search in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubjs)}(h^``const struct ssam_device_uid uid`` The UID to matched against the individual table entries. h](jy)}(h$``const struct ssam_device_uid uid``h]j)}(hjh]h const struct ssam_device_uid uid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubj)}(hhh]h)}(h8The UID to matched against the individual table entries.h]h8The UID to matched against the individual table entries.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubeh}(h]h ]h"]h$]h&]uh1jmhjpubh)}(h**Description**h]jX)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjpubh)}(hFind the first match for the provided device UID in the provided ID table and return it. Returns ``NULL`` if no match could be found.h](haFind the first match for the provided device UID in the provided ID table and return it. Returns }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh if no match could be found.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ssam_device_get_match (C function)c.ssam_device_get_matchhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hSconst struct ssam_device_id * ssam_device_get_match (const struct ssam_device *dev)h]j)}(hQconst struct ssam_device_id *ssam_device_get_match(const struct ssam_device *dev)h](j)}(hj h]hconst}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhKubj)}(hjh]hstruct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhKubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA ssam_device_get_matchsbc.ssam_device_get_matchasbuh1hhj\hhhjmhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjmhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj\hhhjmhKubj)}(hssam_device_get_matchh]j)}(hjh]hssam_device_get_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhj\hhhjmhKubjv )}(h(const struct ssam_device *dev)h]j| )}(hconst struct ssam_device *devh](j)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj0modnameN classnameNjj)}j]jc.ssam_device_get_matchasbuh1hhjubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hj\hhhjmhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjXhhhjmhKubah}(h]jSah ](jjeh"]h$]h&]j"j#)j$huh1jhjmhKhjUhhubj&)}(hhh]h)}(hOFind and return the ID matching the device in the ID table of the bound driver.h]hOFind and return the ID matching the device in the ID table of the bound driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjhhubah}(h]h ]h"]h$]h&]uh1j%hjUhhhjmhKubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``const struct ssam_device *dev`` The device for which to get the matching ID table entry. **Description** Find the fist match for the UID of the device in the ID table of the currently bound driver and return it. Returns ``NULL`` if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is ``NULL``), or there is no match in the driver's match_table. This function essentially calls ssam_device_id_match() with the ID table of the bound device driver and the UID of the device. **Return** Returns the first match for the UID of the device in the device driver's match table, or ``NULL`` if no such match could be found.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubjn)}(hhh]js)}(h[``const struct ssam_device *dev`` The device for which to get the matching ID table entry. h](jy)}(h!``const struct ssam_device *dev``h]j)}(hjh]hconst struct ssam_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubj)}(hhh]h)}(h8The device for which to get the matching ID table entry.h]h8The device for which to get the matching ID table entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhKhjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hj h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubh)}(hXFind the fist match for the UID of the device in the ID table of the currently bound driver and return it. Returns ``NULL`` if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is ``NULL``), or there is no match in the driver's match_table.h](hsFind the fist match for the UID of the device in the ID table of the currently bound driver and return it. Returns }(hj#hhhNhNubj)}(h``NULL``h]hNULL}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubhd if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is }(hj#hhhNhNubj)}(h``NULL``h]hNULL}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj#ubh6), or there is no match in the driver’s match_table.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubh)}(h~This function essentially calls ssam_device_id_match() with the ID table of the bound device driver and the UID of the device.h]h~This function essentially calls ssam_device_id_match() with the ID table of the bound device driver and the UID of the device.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubh)}(h **Return**h]jX)}(hjgh]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjeubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubh)}(hReturns the first match for the UID of the device in the device driver's match table, or ``NULL`` if no such match could be found.h](h[Returns the first match for the UID of the device in the device driver’s match table, or }(hj}hhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj}ubh! if no such match could be found.}(hj}hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ssam_device_get_match_data (C function)c.ssam_device_get_match_datahNtauh1jhj)hhhNhNubj)}(hhh](j)}(hGconst void * ssam_device_get_match_data (const struct ssam_device *dev)h]j)}(hEconst void *ssam_device_get_match_data(const struct ssam_device *dev)h](j)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhMubj)}(hssam_device_get_match_datah]j)}(hssam_device_get_match_datah]hssam_device_get_match_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(h(const struct ssam_device *dev)h]j| )}(hconst struct ssam_device *devh](j)}(hj h]hconst}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj^modnameN classnameNjj)}j]jI )}jA j sbc.ssam_device_get_match_dataasbuh1hhjubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(hjFind the ID matching the device in the ID table of the bound driver and return its ``driver_data`` member.h](hSFind the ID matching the device in the ID table of the bound driver and return its }(hjhhhNhNubj)}(h``driver_data``h]h driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh member.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hX**Parameters** ``const struct ssam_device *dev`` The device for which to get the match data. **Description** Find the fist match for the UID of the device in the ID table of the corresponding driver and return its driver_data. Returns ``NULL`` if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is ``NULL``), there is no match in the driver's match_table, or the match does not have any driver_data. This function essentially calls ssam_device_get_match() and, if any match could be found, returns its ``struct ssam_device_id.driver_data`` member. **Return** Returns the driver data associated with the first match for the UID of the device in the device driver's match table, or ``NULL`` if no such match could be found.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubjn)}(hhh]js)}(hN``const struct ssam_device *dev`` The device for which to get the match data. h](jy)}(h!``const struct ssam_device *dev``h]j)}(hjh]hconst struct ssam_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubj)}(hhh]h)}(h+The device for which to get the match data.h]h+The device for which to get the match data.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhj)hMhj ubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjMubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubh)}(hXOFind the fist match for the UID of the device in the ID table of the corresponding driver and return its driver_data. Returns ``NULL`` if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is ``NULL``), there is no match in the driver's match_table, or the match does not have any driver_data.h](h~Find the fist match for the UID of the device in the ID table of the corresponding driver and return its driver_data. Returns }(hjehhhNhNubj)}(h``NULL``h]hNULL}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjeubhd if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is }(hjehhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjeubh_), there is no match in the driver’s match_table, or the match does not have any driver_data.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubh)}(hThis function essentially calls ssam_device_get_match() and, if any match could be found, returns its ``struct ssam_device_id.driver_data`` member.h](hfThis function essentially calls ssam_device_get_match() and, if any match could be found, returns its }(hjhhhNhNubj)}(h%``struct ssam_device_id.driver_data``h]h!struct ssam_device_id.driver_data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh member.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM"hjubh)}(h **Return**h]jX)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM%hjubh)}(hReturns the driver data associated with the first match for the UID of the device in the device driver's match table, or ``NULL`` if no such match could be found.h](h{Returns the driver data associated with the first match for the UID of the device in the device driver’s match table, or }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubh! if no such match could be found.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM&hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*__ssam_device_driver_register (C function)c.__ssam_device_driver_registerhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hYint __ssam_device_driver_register (struct ssam_device_driver *sdrv, struct module *owner)h]j)}(hXint __ssam_device_driver_register(struct ssam_device_driver *sdrv, struct module *owner)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMWubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMWubj)}(h__ssam_device_driver_registerh]j)}(h__ssam_device_driver_registerh]h__ssam_device_driver_register}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhj hMWubjv )}(h7(struct ssam_device_driver *sdrv, struct module *owner)h](j| )}(hstruct ssam_device_driver *sdrvh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(hssam_device_driverh]hssam_device_driver}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjomodnameN classnameNjj)}j]jI )}jA j5sbc.__ssam_device_driver_registerasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjKubj)}(hsdrvh]hsdrv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjGubj| )}(hstruct module *ownerh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.__ssam_device_driver_registerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hownerh]howner}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjGubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhj hMWubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMWubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhj hMWhjhhubj&)}(hhh]h)}(h%Register a SSAM client device driver.h]h%Register a SSAM client device driver.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMWhj?hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhj hMWubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjZjIjZjJjKjLuh1jhhhj)hNhNubjN)}(hX!**Parameters** ``struct ssam_device_driver *sdrv`` The driver to register. ``struct module *owner`` The module owning the provided driver. **Description** Please refer to the ssam_device_driver_register() macro for the normal way to register a driver from inside its owning module.h](h)}(h**Parameters**h]jX)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM[hj^ubjn)}(hhh](js)}(h<``struct ssam_device_driver *sdrv`` The driver to register. h](jy)}(h#``struct ssam_device_driver *sdrv``h]j)}(hjh]hstruct ssam_device_driver *sdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMXhj}ubj)}(hhh]h)}(hThe driver to register.h]hThe driver to register.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jrhjhMXhjzubjs)}(h@``struct module *owner`` The module owning the provided driver. h](jy)}(h``struct module *owner``h]j)}(hjh]hstruct module *owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMYhjubj)}(hhh]h)}(h&The module owning the provided driver.h]h&The module owning the provided driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMYhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMYhjzubeh}(h]h ]h"]h$]h&]uh1jmhj^ubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM[hj^ubh)}(h~Please refer to the ssam_device_driver_register() macro for the normal way to register a driver from inside its owning module.h]h~Please refer to the ssam_device_driver_register() macro for the normal way to register a driver from inside its owning module.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMZhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*ssam_device_driver_unregister (C function)c.ssam_device_driver_unregisterhNtauh1jhj)hhhNhNubj)}(hhh](j)}(hDvoid ssam_device_driver_unregister (struct ssam_device_driver *sdrv)h]j)}(hCvoid ssam_device_driver_unregister(struct ssam_device_driver *sdrv)h](j)}(hvoidh]hvoid}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMlubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhjJhMlubj)}(hssam_device_driver_unregisterh]j)}(hssam_device_driver_unregisterh]hssam_device_driver_unregister}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ](j j eh"]h$]h&]hhuh1jhj8hhhjJhMlubjv )}(h!(struct ssam_device_driver *sdrv)h]j| )}(hstruct ssam_device_driver *sdrvh](j)}(hjh]hstruct}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubh)}(hhh]j)}(hssam_device_driverh]hssam_device_driver}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA j_sbc.ssam_device_driver_unregisterasbuh1hhjuubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjuubj)}(hsdrvh]hsdrv}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjqubah}(h]h ]h"]h$]h&]hhuh1ju hj8hhhjJhMlubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj4hhhjJhMlubah}(h]j/ah ](jjeh"]h$]h&]j"j#)j$huh1jhjJhMlhj1hhubj&)}(hhh]h)}(h Unregister a SSAM device driver.h]h Unregister a SSAM device driver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMlhjhhubah}(h]h ]h"]h$]h&]uh1j%hj1hhhjJhMlubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hO**Parameters** ``struct ssam_device_driver *sdrv`` The driver to unregister.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMphjubjn)}(hhh]js)}(h=``struct ssam_device_driver *sdrv`` The driver to unregister.h](jy)}(h#``struct ssam_device_driver *sdrv``h]j)}(hj=h]hstruct ssam_device_driver *sdrv}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1j~hj;ubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMrhj7ubj)}(hhh]h)}(hThe driver to unregister.h]hThe driver to unregister.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMmhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jrhjRhMrhj4ubah}(h]h ]h"]h$]h&]uh1jmhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$__ssam_register_clients (C function)c.__ssam_register_clientshNtauh1jhj)hhhNhNubj)}(hhh](j)}(hmint __ssam_register_clients (struct device *parent, struct ssam_controller *ctrl, struct fwnode_handle *node)h]j)}(hlint __ssam_register_clients(struct device *parent, struct ssam_controller *ctrl, struct fwnode_handle *node)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h__ssam_register_clientsh]j)}(h__ssam_register_clientsh]h__ssam_register_clients}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(hQ(struct device *parent, struct ssam_controller *ctrl, struct fwnode_handle *node)h](j| )}(hstruct device *parenth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jI )}jA jsbc.__ssam_register_clientsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hparenth]hparent}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjfmodnameN classnameNjj)}j]jc.__ssam_register_clientsasbuh1hhjBubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubj| )}(hstruct fwnode_handle *nodeh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetjmodnameN classnameNjj)}j]jc.__ssam_register_clientsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hnodeh]hnode}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubeh}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(h^Register client devices defined under the given firmware node as children of the given device.h]h^Register client devices defined under the given firmware node as children of the given device.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhj4hhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjOjIjOjJjKjLuh1jhhhj)hNhNubjN)}(hXI**Parameters** ``struct device *parent`` The parent device under which clients should be registered. ``struct ssam_controller *ctrl`` The controller with which client should be registered. ``struct fwnode_handle *node`` The firmware node holding definitions of the devices to be added. **Description** Register all clients that have been defined as children of the given root firmware node as children of the given parent device. The respective child firmware nodes will be associated with the correspondingly created child devices. The given controller will be used to instantiate the new devices. See ssam_device_add() for details. Note that, generally, the use of either ssam_device_register_clients() or ssam_register_clients() should be preferred as they directly use the firmware node and/or controller associated with the given device. This function is only intended for use when different device specifications (e.g. ACPI and firmware nodes) need to be combined (as is done in the platform hub of the device registry). **Return** Returns zero on success, nonzero on failure.h](h)}(h**Parameters**h]jX)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjWubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubjn)}(hhh](js)}(hV``struct device *parent`` The parent device under which clients should be registered. h](jy)}(h``struct device *parent``h]j)}(hjxh]hstruct device *parent}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjvubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjrubj)}(hhh]h)}(h;The parent device under which clients should be registered.h]h;The parent device under which clients should be registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjoubjs)}(hX``struct ssam_controller *ctrl`` The controller with which client should be registered. h](jy)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubj)}(hhh]h)}(h6The controller with which client should be registered.h]h6The controller with which client should be registered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjoubjs)}(ha``struct fwnode_handle *node`` The firmware node holding definitions of the devices to be added. h](jy)}(h``struct fwnode_handle *node``h]j)}(hjh]hstruct fwnode_handle *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubj)}(hhh]h)}(hAThe firmware node holding definitions of the devices to be added.h]hAThe firmware node holding definitions of the devices to be added.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjoubeh}(h]h ]h"]h$]h&]uh1jmhjSubh)}(h**Description**h]jX)}(hj%h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jWhj#ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubh)}(hRegister all clients that have been defined as children of the given root firmware node as children of the given parent device. The respective child firmware nodes will be associated with the correspondingly created child devices.h]hRegister all clients that have been defined as children of the given root firmware node as children of the given parent device. The respective child firmware nodes will be associated with the correspondingly created child devices.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubh)}(hdThe given controller will be used to instantiate the new devices. See ssam_device_add() for details.h]hdThe given controller will be used to instantiate the new devices. See ssam_device_add() for details.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubh)}(hXNote that, generally, the use of either ssam_device_register_clients() or ssam_register_clients() should be preferred as they directly use the firmware node and/or controller associated with the given device. This function is only intended for use when different device specifications (e.g. ACPI and firmware nodes) need to be combined (as is done in the platform hub of the device registry).h]hXNote that, generally, the use of either ssam_device_register_clients() or ssam_register_clients() should be preferred as they directly use the firmware node and/or controller associated with the given device. This function is only intended for use when different device specifications (e.g. ACPI and firmware nodes) need to be combined (as is done in the platform hub of the device registry).}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubh)}(h **Return**h]jX)}(hjjh]hReturn}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjhubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubh)}(h,Returns zero on success, nonzero on failure.h]h,Returns zero on success, nonzero on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_remove_clients (C function)c.ssam_remove_clientshNtauh1jhj)hhhNhNubj)}(hhh](j)}(h-void ssam_remove_clients (struct device *dev)h]j)}(h,void ssam_remove_clients(struct device *dev)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(hssam_remove_clientsh]j)}(hssam_remove_clientsh]hssam_remove_clients}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](j j eh"]h$]h&]hhuh1jhjhhhjhMubjv )}(h(struct device *dev)h]j| )}(hstruct device *devh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hdeviceh]hdevice}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjBreftypejA reftargetj modnameN classnameNjj)}j]jI )}jA jsbc.ssam_remove_clientsasbuh1hhjubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j{ hjubah}(h]h ]h"]h$]h&]hhuh1ju hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]j"j#)j$huh1jhjhMhjhhubj&)}(hhh]h)}(hWRemove SSAM client devices registered as direct children under the given parent device.h]hWRemove SSAM client devices registered as direct children under the given parent device.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjlhhubah}(h]h ]h"]h$]h&]uh1j%hjhhhjhMubeh}(h]h ](jBfunctioneh"]h$]h&]jGjBjHjjIjjJjKjLuh1jhhhj)hNhNubjN)}(hXG**Parameters** ``struct device *dev`` The (parent) device to remove all direct clients for. **Description** Remove all SSAM client devices registered as direct children under the given device. Note that this only accounts for direct children of the device. Refer to ssam_device_add()/ssam_device_remove() for more details.h](h)}(h**Parameters**h]jX)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubjn)}(hhh]js)}(hM``struct device *dev`` The (parent) device to remove all direct clients for. h](jy)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j~hjubah}(h]h ]h"]h$]h&]uh1jxh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubj)}(hhh]h)}(h5The (parent) device to remove all direct clients for.h]h5The (parent) device to remove all direct clients for.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jrhjhMhjubah}(h]h ]h"]h$]h&]uh1jmhjubh)}(h**Description**h]jX)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jWhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubh)}(hRemove all SSAM client devices registered as direct children under the given device. Note that this only accounts for direct children of the device. Refer to ssam_device_add()/ssam_device_remove() for more details.h]hRemove all SSAM client devices registered as direct children under the given device. Note that this only accounts for direct children of the device. Refer to ssam_device_add()/ssam_device_remove() for more details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jMhj)hhhNhNubeh}(h]juah ]h"] client bus and client device apiah$]h&]uh1hhhhhhhhK!ubeh}(h]jah ]h"]client driver api documentationah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_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_handlerjHerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _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}substitution_names}refnames}refids}nameids}(j"jjjj'9j1j&jSjjuu nametypes}(j"jj'9j&juh}(jhjhj1jjjjjjKjPj'j,jjj j j j j j j j j<jAjjjjj$j)jjjojjjjjKjPj jjjjjj$j)j j j!j!ja%jf%j(j(jF*jK*jj,jo,j.j.j0j0j2j2ju5jz5jX7j]7jSj*9jG9jL9j$:j):jm<jr<j=j=j@j@jBjBjCjCjWFj\FjHjHjJJjOJj_LjdLjnNjsNjAPjFPjRjRjTjTjsVjxVjXjXjZjZj]j]j^j^j.aj3ajicjncjfjfjIgjNgjhjhjjjjjlj ljnj njojojqj!qjrjrjsjsjSvjXvjxjxjzjzjv|j{|j}j}jjjjj[j`j݇jjmjrjËjȋjj"j2j7jjjjjjjfjkjjjwj|jjjuj)jFjKj\jaj9j>j&j+jjjYj^jͶjҶjjjXj]j1j6jjjϿjԿjPjUj jjj#jjj_jdj5j:jjj#j(jjj:j?jjj jj"j'jjj=jBjjj?jDjjjjjSjXjjjj j/j4jjjjhjj+j"jMjDjojfu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jVKsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.