sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget`. ``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](jD)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh:}(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.hhK9hjubh literal_block)}(h>struct ssh_frame { u8 type; __le16 len; u8 seq; };h]h>struct ssh_frame { u8 type; __le16 len; u8 seq; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK;hjubh)}(h **Members**h]jD)}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj(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.hhKAhjubjZ)}(hhh](j_)}(hT``type`` The type of the frame. See :c:type:`enum ssh_frame_type `. h](je)}(h``type``h]jk)}(hjIh]htype}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjGubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK7hjCubj)}(hhh]h)}(hJThe type of the frame. See :c:type:`enum ssh_frame_type `.h](hThe type of the frame. See }(hjbhhhNhNubh)}(h.:c:type:`enum ssh_frame_type `h]jk)}(hjlh]henum ssh_frame_type}(hjnhhhNhNubah}(h]h ](xrefj.c-typeeh"]h$]h&]uh1jjhjjubah}(h]h ]h"]h$]h&]refdoc(driver-api/surface_aggregator/client-api refdomainj.reftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftargetssh_frame_typeuh1hhj^hK7hjbubh.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^hK7hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1j^hj^hK7hj@ubj_)}(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](je)}(h``len``h]jk)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhK9hj@ubj_)}(h6``seq`` The sequence number for this message/exchange.h](je)}(h``seq``h]jk)}(hjh]hseq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhK9hj@ubeh}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(hjDhhhNhNubah}(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.hhK@ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjQhK@ubj)}(hssh_payload_typeh]j)}(hj>h]hssh_payload_type}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj@hhhjQhK@ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj<hhhjQhK@ubah}(h]j7ah ](j j eh"]h$]h&]jj)jhuh1jhjQhK@hj9hhubj)}(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&]uh1jhj9hhhjQhK@ubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubj:)}(hi**Constants** ``SSH_PLD_TYPE_CMD`` The payload is a command structure with optional command payload.h](h)}(h **Constants**h]jD)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhKPhjubjZ)}(hhh]j_)}(hV``SSH_PLD_TYPE_CMD`` The payload is a command structure with optional command payload.h](je)}(h``SSH_PLD_TYPE_CMD``h]jk)}(hjh]hSSH_PLD_TYPE_CMD}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhKShjubah}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(hj hhhNhNubah}(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.hhKZubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj-hKZubj)}(h ssh_commandh]j)}(hjh]h ssh_command}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj-hKZubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj-hKZubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhj-hKZhjhhubj)}(hhh]h)}(h Payload of a command-type frame.h]h Payload of a command-type frame.}(hjbhhhNhNubah}(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.hhKUhj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj-hKZubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jzj5jzj6j7j8uh1jhhhjhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh:}(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.hhKYhj~ubj)}(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&]hhuh1jh/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]jD)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhKehj~ubjZ)}(hhh](j_)}(h``type`` The type of the payload. See :c:type:`enum ssh_payload_type `. Should be SSH_PLD_TYPE_CMD for this struct. h](je)}(h``type``h]jk)}(hjh]htype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hjh]henum ssh_payload_type}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1hhjhKWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKXhjubj_)}(h ``tc`` Command target category. h](je)}(h``tc``h]jk)}(hj,h]htc}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj*ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKYhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1j^hjAhKYhjubj_)}(h8``tid`` Target ID. Indicates the target of the message. h](je)}(h``tid``h]jk)}(hjeh]htid}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjcubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKZhj_ubj)}(hhh]h)}(h/Target ID. Indicates the target of the message.h]h/Target ID. Indicates the target of the message.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKZhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1j^hjzhKZhjubj_)}(h8``sid`` Source ID. Indicates the source of the message. h](je)}(h``sid``h]jk)}(hjh]hsid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhK[hjubj_)}(h``iid`` Instance ID. h](je)}(h``iid``h]jk)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhK\hjubj_)}(hk``rqid`` Request ID. Used to match requests with responses and differentiate between responses and events. h](je)}(h``rqid``h]jk)}(hjh]hrqid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK^hj ubj)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j^hj%hK^hjubj_)}(h``cid`` Command ID.h](je)}(h``cid``h]jk)}(hjJh]hcid}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjHubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhK^hjDubj)}(hhh]h)}(h Command ID.h]h Command ID.}(hjchhhNhNubah}(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&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1j^hj_hK^hjubeh}(h]h ]h"]h$]h&]uh1jYhj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubh)}(h%``SSH_MESSAGE_LENGTH (payload_size)``h]jk)}(hjh]h!SSH_MESSAGE_LENGTH (payload_size)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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.}(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&]uh1jhj hKhjhhubj:)}(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]jD)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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 ubjZ)}(hhh]j_)}(h=``payload_size`` Length of the payload inside the SSH frame. h](je)}(h``payload_size``h]jk)}(hj0 h]h payload_size}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj. ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE hKhjF ubah}(h]h ]h"]h$]h&]uh1jhj* ubeh}(h]h ]h"]h$]h&]uh1j^hjE hKhj' ubah}(h]h ]h"]h$]h&]uh1jYhj ubh)}(h **Return**h]jD)}(hjk h]hReturn}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1jChji 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&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhj hKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j j5j j6j7j8uh1jhhhjhNhNubh)}(h-``SSH_COMMAND_MESSAGE_LENGTH (payload_size)``h]jk)}(hj h]h)SSH_COMMAND_MESSAGE_LENGTH (payload_size)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj 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&]uh1jhj hKhjhhubj:)}(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]jD)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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 ubjZ)}(hhh]j_)}(h0``payload_size`` Length of the command payload. h](je)}(h``payload_size``h]jk)}(hj: h]h payload_size}(hj< hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8 ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhj4 ubj)}(hhh]h)}(hLength of the command payload.h]hLength of the command payload.}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO hKhjP ubah}(h]h ]h"]h$]h&]uh1jhj4 ubeh}(h]h ]h"]h$]h&]uh1j^hjO hKhj1 ubah}(h]h ]h"]h$]h&]uh1jYhj ubh)}(h **Return**h]jD)}(hju h]hReturn}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjs 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&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhj hKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j j5j j6j7j8uh1jhhhjhNhNubh)}(h``SSH_MSGOFFSET_FRAME (field)``h]jk)}(hj h]hSSH_MSGOFFSET_FRAME (field)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj 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&]uh1jhj hKhjhhubj:)}(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]jD)}(hj% h]h Parameters}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj# 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 ubjZ)}(hhh]j_)}(h=``field`` The field for which the offset should be computed. h](je)}(h ``field``h]jk)}(hjD h]hfield}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjB ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1hhjY hKhjZ ubah}(h]h ]h"]h$]h&]uh1jhj> ubeh}(h]h ]h"]h$]h&]uh1j^hjY hKhj; ubah}(h]h ]h"]h$]h&]uh1jYhj ubh)}(h **Return**h]jD)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj} 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_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]jk)}(hj h]hstruct ssh_frame}(hj hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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 hKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhj hKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj hhhj hKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j j5j j6j7j8uh1jhhhjhNhNubh)}(h!``SSH_MSGOFFSET_COMMAND (field)``h]jk)}(hj h]hSSH_MSGOFFSET_COMMAND (field)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj 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]jD)}(hjR h]h Parameters}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjP 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.hhKhjL ubjZ)}(hhh]j_)}(h=``field`` The field for which the offset should be computed. h](je)}(h ``field``h]jk)}(hjq h]hfield}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjo ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjk 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&]uh1jhjk ubeh}(h]h ]h"]h$]h&]uh1j^hj hKhjh ubah}(h]h ]h"]h$]h&]uh1jYhjL ubh)}(h **Return**h]jD)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.hhKhjL 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]jk)}(hj h]hstruct ssh_command}(hj hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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 hKhjL ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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&] refdomainj.reftype identifier reftargetj modnameN classnameNjj)}j]j ASTIdentifier)}j- 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 }(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj; hKubj)}(hssh_crch]j)}(hj8 h]hssh_crc}(hjN hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj; hKubhdesc_parameterlist)}(h(const u8 *buf, size_t len)h](hdesc_parameter)}(h const u8 *bufh](j)}(hconsth]hconst}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubj)}(h h]h }(hj{ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubh)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj modnameN classnameNjj)}j]j6 c.ssh_crcasbuh1hhji ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hji ubj)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjc ubjh )}(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&] refdomainj.reftypej- reftargetj modnameN classnameNjj)}j]j6 c.ssh_crcasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjc ubeh}(h]h ]h"]h$]h&]hhuh1ja hj hhhj; hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj; hKubah}(h]j ah ](j j eh"]h$]h&]jj)jhuh1jhj; hKhj hhubj)}(hhh]h)}(hCompute CRC for SSH messages.h]hCompute CRC for SSH messages.}(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.hhKhj8hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj; hKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jSj5jSj6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj[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.hhKhjWubjZ)}(hhh](j_)}(hY``const u8 *buf`` The pointer pointing to the data for which the CRC should be computed. h](je)}(h``const u8 *buf``h]jk)}(hj|h]h const u8 *buf}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjzubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjvubj)}(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&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjsubj_)}(hL``size_t len`` The length of the data for which the CRC should be computed. h](je)}(h``size_t len``h]jk)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhKhjubj)}(hhh]h)}(hh]hssh_tc_to_rqid}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjAhKubjb )}(h(u8 tc)h]jh )}(hu8 tch](h)}(hhh]j)}(hu8h]hu8}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjtmodnameN classnameNjj)}j]j<c.ssh_tc_to_rqidasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(htch]htc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjgubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjAhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjAhKubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjAhKhjhhubj)}(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&]uh1jhjhhhjAhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubj:)}(h;**Parameters** ``u8 tc`` The target category to convert.h](h)}(h**Parameters**h]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhKhjubjZ)}(hhh]j_)}(h)``u8 tc`` The target category to convert.h](je)}(h ``u8 tc``h]jk)}(hj h]hu8 tc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(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.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjubah}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjhmodnameN classnameNjj)}j]j5 )}j- ssh_tid_to_indexsbc.ssh_tid_to_indexasbuh1hhj_hhh/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&]uh1jhj_hhhjhKubj)}(hssh_tid_to_indexh]j)}(hjh]hssh_tid_to_index}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj_hhhjhKubjb )}(h(u8 tid)h]jh )}(hu8 tidh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- 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&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hj_hhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj[hhhjhKubah}(h]jVah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjXhhubj)}(hhh]h)}(h4Convert target ID to its corresponding target index.h]h4Convert target ID to its corresponding target index.}(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.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j&j5j&j6j7j8uh1jhhhjhNhNubj:)}(h6**Parameters** ``u8 tid`` The target ID to convert.h](h)}(h**Parameters**h]jD)}(hj0h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj.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*ubjZ)}(hhh]j_)}(h$``u8 tid`` The target ID to convert.h](je)}(h ``u8 tid``h]jk)}(hjOh]hu8 tid}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjMubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjIubj)}(hhh]h)}(hThe target ID to convert.h]hThe target ID to convert.}(hjhhhhNhNubah}(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.hhKhjeubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1j^hjdhMhjFubah}(h]h ]h"]h$]h&]uh1jYhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjb )}(h(u8 tid)h]jh )}(hu8 tidh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jsbc.ssh_tid_is_validasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(htidh]htid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h&Check if target ID is valid/supported.h]h&Check if target ID is valid/supported.}(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&]uh1jhjhhhjhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jXj5jXj6j7j8uh1jhhhjhNhNubj:)}(h4**Parameters** ``u8 tid`` The target ID to check.h](h)}(h**Parameters**h]jD)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj`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\ubjZ)}(hhh]j_)}(h"``u8 tid`` The target ID to check.h](je)}(h ``u8 tid``h]jk)}(hjh]hu8 tid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM hj{ubj)}(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&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1j^hjhM hjxubah}(h]h ]h"]h$]h&]uh1jYhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hReference to a buffer region.h]hReference to a 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.hhM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j5j5j5j6j7j8uh1jhhhjhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj=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.hhMhj9ubj)}(h2struct ssam_span { u8 *ptr; size_t len; };h]h2struct ssam_span { u8 *ptr; size_t len; };}hjZsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj9ubh)}(h **Members**h]jD)}(hjkh]hMembers}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjiubah}(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.hhMhj9ubjZ)}(hhh](j_)}(h&``ptr`` Pointer to the buffer region. h](je)}(h``ptr``h]jk)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjubj_)}(h$``len`` Length of the buffer region.h](je)}(h``len``h]jk)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjubeh}(h]h ]h"]h$]h&]uh1jYhj9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.}(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.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}(hjDhhhNhNubah}(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 }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhjQhMubj)}(h ssam_ssh_tidh]j)}(hj>h]h ssam_ssh_tid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj@hhhjQhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj<hhhjQhMubah}(h]j7ah ](j j eh"]h$]h&]jj)jhuh1jhjQhMhj9hhubj)}(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&]uh1jhj9hhhjQhMubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhMhjubjZ)}(hhh](j_)}(h:``SSAM_SSH_TID_HOST`` We as the kernel Serial Hub driver. h](je)}(h``SSAM_SSH_TID_HOST``h]jk)}(hjh]hSSAM_SSH_TID_HOST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhM!hjubj_)}(h0``SSAM_SSH_TID_SAM`` The Surface Aggregator EC. h](je)}(h``SSAM_SSH_TID_SAM``h]jk)}(hjh]hSSAM_SSH_TID_SAM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM$hjubj_)}(h9``SSAM_SSH_TID_KIP`` Keyboard and perihperal controller. h](je)}(h``SSAM_SSH_TID_KIP``h]jk)}(hj9h]hSSAM_SSH_TID_KIP}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj7ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM'hj3ubj)}(hhh]h)}(h#Keyboard and perihperal controller.h]h#Keyboard and perihperal controller.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhM'hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1j^hjNhM'hjubj_)}(h(``SSAM_SSH_TID_DEBUG`` Debug connector. h](je)}(h``SSAM_SSH_TID_DEBUG``h]jk)}(hjrh]hSSAM_SSH_TID_DEBUG}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjpubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM*hjlubj)}(hhh]h)}(hDebug connector.h]hDebug connector.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1j^hjhM*hjubj_)}(h-``SSAM_SSH_TID_SURFLINK`` SurfLink connector.h](je)}(h``SSAM_SSH_TID_SURFLINK``h]jk)}(hjh]hSSAM_SSH_TID_SURFLINK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhM,hjubeh}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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.hhM3ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM3ubj)}(hssh_packet_base_priorityh]j)}(hjh]hssh_packet_base_priority}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM3ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM3ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM3hjhhubj)}(hhh]h)}(h=Base priorities for :c:type:`struct ssh_packet `.h](hBase priorities for }(hjGhhhNhNubh)}(h(:c:type:`struct ssh_packet `h]jk)}(hjQh]hstruct ssh_packet}(hjShhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjOubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjj)}j]j5 )}j- 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.hhKhjGubh.}(hjGhhhNhNubeh}(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.hhMbhjDhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM3ubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhMfhjubjZ)}(hhh](j_)}(h?``SSH_PACKET_PRIORITY_FLUSH`` Base priority for flush packets. h](je)}(h``SSH_PACKET_PRIORITY_FLUSH``h]jk)}(hjh]hSSH_PACKET_PRIORITY_FLUSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMihjubj_)}(hD``SSH_PACKET_PRIORITY_DATA`` Base priority for normal data packets. h](je)}(h``SSH_PACKET_PRIORITY_DATA``h]jk)}(hjh]hSSH_PACKET_PRIORITY_DATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMlhjubj_)}(h;``SSH_PACKET_PRIORITY_NAK`` Base priority for NAK packets. h](je)}(h``SSH_PACKET_PRIORITY_NAK``h]jk)}(hj%h]hSSH_PACKET_PRIORITY_NAK}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj#ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMohjubj)}(hhh]h)}(hBase priority for NAK packets.h]hBase priority for NAK packets.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMohj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj:hMohjubj_)}(h:``SSH_PACKET_PRIORITY_ACK`` Base priority for ACK packets.h](je)}(h``SSH_PACKET_PRIORITY_ACK``h]jk)}(hj^h]hSSH_PACKET_PRIORITY_ACK}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj\ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMqhjXubj)}(hhh]h)}(hBase priority for ACK packets.h]hBase priority for ACK packets.}(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.hhMrhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1j^hjshMqhjubeh}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubh)}(h#``SSH_PACKET_PRIORITY (base, try)``h]jk)}(hjh]hSSH_PACKET_PRIORITY (base, try)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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)}(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&]uh1jhjhMvhjhhubj:)}(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]jD)}(hj#h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj!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.hhMzhjubjZ)}(hhh](j_)}(h``base`` The base priority as suffix of :c:type:`enum ssh_packet_base_priority `, e.g. ``FLUSH``, ``DATA``, ``ACK``, or ``NAK``. h](je)}(h``base``h]jk)}(hjBh]hbase}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj@ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMyhj<ubj)}(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 }(hj[hhhNhNubh)}(hB:c:type:`enum ssh_packet_base_priority `h]jk)}(hjeh]henum ssh_packet_base_priority}(hjghhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjcubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssh_packet_base_priorityuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMxhj[ubh, e.g. }(hj[hhhNhNubjk)}(h ``FLUSH``h]hFLUSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[ubh, }(hj[hhhNhNubjk)}(h``DATA``h]hDATA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[ubh, }hj[sbjk)}(h``ACK``h]hACK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[ubh, or }(hj[hhhNhNubjk)}(h``NAK``h]hNAK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[ubh.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMxhjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1j^hjWhMyhj9ubj_)}(h4``try`` The number of tries (must be less than 16). h](je)}(h``try``h]jk)}(hjh]htry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMzhj9ubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hj"h]h Description}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.hhM|hjubh)}(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.}(hj8hhhNhNubah}(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|hjubh)}(h **Return**h]jD)}(hjIh]hReturn}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjGubah}(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)}(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 }(hj_hhhNhNubh)}(h :c:type:`u8`h]jk)}(hjih]hu8}(hjkhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjgubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj_ubh*. A higher number means a higher priority.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- 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 ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjb )}(h (u8 priority)h]jh )}(h u8 priorityh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssh_packet_priority_get_tryasbuh1hhjubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hpriorityh]hpriority}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(h)Get number of tries from packet priority.h]h)Get number of tries from packet priority.}(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.hhMhjYhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jtj5jtj6j7j8uh1jhhhjhNhNubj:)}(h**Parameters** ``u8 priority`` The packet priority. **Return** Returns the number of tries encoded in the specified packet priority.h](h)}(h**Parameters**h]jD)}(hj~h]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj|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.hhMhjxubjZ)}(hhh]j_)}(h%``u8 priority`` The packet priority. h](je)}(h``u8 priority``h]jk)}(hjh]h u8 priority}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjubah}(h]h ]h"]h$]h&]uh1jYhjxubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhMhjxubh)}(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.hhMhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj"modnameN classnameNjj)}j]j5 )}j- ssh_packet_priority_get_basesbc.ssh_packet_priority_get_baseasbuh1hhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjAhMubj)}(hssh_packet_priority_get_baseh]j)}(hj>h]hssh_packet_priority_get_base}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjAhMubjb )}(h (u8 priority)h]jh )}(h u8 priorityh](h)}(hhh]j)}(hu8h]hu8}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjtmodnameN classnameNjj)}j]j<c.ssh_packet_priority_get_baseasbuh1hhjkubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hpriorityh]hpriority}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjgubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjAhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjAhMubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjAhMhjhhubj)}(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&]uh1jhjhhhjAhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjhNhNubj:)}(h**Parameters** ``u8 priority`` The packet priority. **Return** Returns the base priority encoded in the given packet priority.h](h)}(h**Parameters**h]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.hhMhjubjZ)}(hhh]j_)}(h%``u8 priority`` The packet priority. h](je)}(h``u8 priority``h]jk)}(hj h]h u8 priority}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j^hj hMhj ubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h **Return**h]jD)}(hjD h]hReturn}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjB 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.}(hjZ 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&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhj hhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]j| ah ](j j eh"]h$]h&]jj)jhuh1jhj 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&]uh1jhj~ hhhj hMubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j j5j j6j7j8uh1jhhhjhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj ubh)}(h **Members**h]jD)}(hj!h]hMembers}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj!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 ubjZ)}(hhh](j_)}(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](je)}(h ``release``h]jk)}(hj8!h]hrelease}(hj:!hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj6!ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj2!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).}(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.hhMhjN!ubah}(h]h ]h"]h$]h&]uh1jhj2!ubeh}(h]h ]h"]h$]h&]uh1j^hjM!hMhj/!ubj_)}(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](je)}(h ``complete``h]jk)}(hjr!h]hcomplete}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjp!ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjl!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&]uh1jhjl!ubeh}(h]h ]h"]h$]h&]uh1j^hj!hMhj/!ubeh}(h]h ]h"]h$]h&]uh1jYhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhj!hhhj!hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj!hhhj!hMubah}(h]j!ah ](j j eh"]h$]h&]jj)jhuh1jhj!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&]uh1jhj!hhhj!hMubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j&"j5j&"j6j7j8uh1jhhhjhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj2"hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj."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)}(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; };}hjK"sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj*"ubh)}(h **Members**h]jD)}(hj\"h]hMembers}(hj^"hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjZ"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*"ubjZ)}(hhh](j_)}(h``ptl`` Pointer to the packet transport layer. May be ``NULL`` if the packet (or enclosing request) has not been submitted yet. h](je)}(h``ptl``h]jk)}(hj{"h]hptl}(hj}"hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjy"ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhju"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"hhhNhNubjk)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj"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&]uh1jhju"ubeh}(h]h ]h"]h$]h&]uh1j^hj"hMhjr"ubj_)}(h*``refcnt`` Reference count of the packet. h](je)}(h ``refcnt``h]jk)}(hj"h]hrefcnt}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj"ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj"hMhjr"ubj_)}(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](je)}(h ``priority``h]jk)}(hj#h]hpriority}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj"ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj#hMhjr"ubj_)}(h``data`` Raw message data. h](je)}(h``data``h]jk)}(hj:#h]hdata}(hj<#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8#ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj4#ubj)}(hhh]h)}(hRaw message data.h]hRaw message data.}(hjS#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO#hMhjP#ubah}(h]h ]h"]h$]h&]uh1jhj4#ubeh}(h]h ]h"]h$]h&]uh1j^hjO#hMhjr"ubj_)}(h-``data.len`` Length of the raw message data. h](je)}(h ``data.len``h]jk)}(hjs#h]hdata.len}(hju#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjq#ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjm#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&]uh1jhjm#ubeh}(h]h ]h"]h$]h&]uh1j^hj#hMhjr"ubj_)}(h5``data.ptr`` Pointer to the raw message data buffer. h](je)}(h ``data.ptr``h]jk)}(hj#h]hdata.ptr}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj#ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj#hMhjr"ubj_)}(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](je)}(h ``state``h]jk)}(hj#h]hstate}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj#ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj$h]henum ssh_packet_flags}(hj $hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj$ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1hhj%$hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1j^hj#hMhjr"ubj_)}(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](je)}(h ``timestamp``h]jk)}(hjB$h]h timestamp}(hjD$hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj@$ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj<$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 }(hj[$hhhNhNubjk)}(h ``KTIME_MAX``h]h KTIME_MAX}(hjc$hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[$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.}(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.hhMhjX$ubah}(h]h ]h"]h$]h&]uh1jhj<$ubeh}(h]h ]h"]h$]h&]uh1j^hjW$hMhjr"ubj_)}(h3``queue_node`` The list node for the packet queue. h](je)}(h``queue_node``h]jk)}(hj$h]h queue_node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj$ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj$hMhjr"ubj_)}(h?``pending_node`` The list node for the set of pending packets. h](je)}(h``pending_node``h]jk)}(hj$h]h pending_node}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj$ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj$hMhjr"ubj_)}(h``ops`` Packet operations.h](je)}(h``ops``h]jk)}(hj%h]hops}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj$ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj%hMhjr"ubeh}(h]h ]h"]h$]h&]uh1jYhj*"ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(hjZ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV%hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMubj)}(h h]h }(hji%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjV%hhhjh%hMubj)}(hssh_packet_set_datah]j)}(hssh_packet_set_datah]hssh_packet_set_data}(hj{%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw%ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjV%hhhjh%hMubjb )}(h+(struct ssh_packet *p, u8 *ptr, size_t len)h](jh )}(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&] refdomainj.reftypej- reftargetj%modnameN classnameNjj)}j]j5 )}j- 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&]noemphhhuh1jg hj%ubjh )}(hu8 *ptrh](h)}(hhh]j)}(hu8h]hu8}(hj &hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- 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*}(hj7&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubj)}(hptrh]hptr}(hjD&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj%ubjh )}(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&] refdomainj.reftypej- reftargetjb&modnameN classnameNjj)}j]j%c.ssh_packet_set_dataasbuh1hhjY&ubj)}(h h]h }(hj~&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubj)}(hlenh]hlen}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj%ubeh}(h]h ]h"]h$]h&]hhuh1ja hjV%hhhjh%hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjR%hhhjh%hMubah}(h]jM%ah ](j j eh"]h$]h&]jj)jhuh1jhjh%hMhjO%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&]uh1jhjO%hhhjh%hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j&j5j&j6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj&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&ubjZ)}(hhh](j_)}(hN``struct ssh_packet *p`` The packet for which the message data should be set. h](je)}(h``struct ssh_packet *p``h]jk)}(hj&h]hstruct ssh_packet *p}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj&ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj 'hMhj&ubj_)}(h<``u8 *ptr`` Pointer to the memory holding the message data. h](je)}(h ``u8 *ptr``h]jk)}(hj0'h]hu8 *ptr}(hj2'hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj.'ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjI'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE'hMhjF'ubah}(h]h ]h"]h$]h&]uh1jhj*'ubeh}(h]h ]h"]h$]h&]uh1j^hjE'hMhj&ubj_)}(h+``size_t len`` Length of the message data. h](je)}(h``size_t len``h]jk)}(hji'h]h size_t len}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjg'ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjc'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&]uh1jhjc'ubeh}(h]h ]h"]h$]h&]uh1j^hj~'hMhj&ubeh}(h]h ]h"]h$]h&]uh1jYhj&ubh)}(h**Description**h]jD)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj'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'hhhNhNubjk)}(h ``release``h]hrelease}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj'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&]uh1j9hjhhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhj'hhhj(hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj'hhhj(hMubah}(h]j'ah ](j j eh"]h$]h&]jj)jhuh1jhj(hMhj'hhubj)}(hhh]h)}(h&Callback operations for a SSH request.h]h&Callback operations for a SSH 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&]uh1jhj'hhhj(hMubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jU(j5jU(j6j7j8uh1jhhhjhNhNubj:)}(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``). If 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)}(h**Definition**::h](jD)}(h**Definition**h]h Definition}(hja(hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj](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.hhMAhjY(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); };}hjz(sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMChjY(ubh)}(h **Members**h]jD)}(hj(h]hMembers}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj(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.hhMHhjY(ubjZ)}(hhh](j_)}(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](je)}(h ``release``h]jk)}(hj(h]hrelease}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj(hMAhj(ubj_)}(hX``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``). If 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](je)}(h ``complete``h]jk)}(hj(h]hcomplete}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMRhj(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]jk)}(hj)h]hstruct ssh_command}(hj )hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj)ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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(hhhNhNubjk)}(h``cmd``h]hcmd}(hj))hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(ubh7), the command payload of the request response via the }(hj(hhhNhNubh)}(h$:c:type:`struct ssh_span `h]jk)}(hj=)h]hstruct ssh_span}(hj?)hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj;)ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssh_spanuh1hhj$)hMBhj(ubh parameter (}hj(sbjk)}(h``data``h]hdata}(hj^)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(ubh).}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$)hMBhj(ubh)}(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 }(hjv)hhhNhNubjk)}(h``cmd``h]hcmd}(hj~)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjv)ubh and }(hjv)hhhNhNubjk)}(h``data``h]hdata}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjv)ubhY parameters will be NULL. If the request response does not have any command payload, the }(hjv)hhhNhNubjk)}(h``data``h]hdata}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjv)ubh* span will be an empty (zero-length) span.}(hjv)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.hhMHhj(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)hhhNhNubjk)}(h ``status``h]hstatus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj)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.hhMMhj(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&]uh1hhj(hMRhj(ubeh}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1j^hj(hMRhj(ubeh}(h]h ]h"]h$]h&]uh1jYhjY(ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(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.hhMYubj)}(h h]h }(hj**hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj)*hMYubj)}(h ssh_requesth]j)}(hj*h]h ssh_request}(hj<*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8*ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj)*hMYubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj*hhhj)*hMYubah}(h]j*ah ](j j eh"]h$]h&]jj)jhuh1jhj)*hMYhj*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&]uh1jhj*hhhj)*hMYubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jv*j5jv*j6j7j8uh1jhhhjhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj~*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`hjz*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&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMbhjz*ubh)}(h **Members**h]jD)}(hj*h]hMembers}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj*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.hhMjhjz*ubjZ)}(hhh](j_)}(h0``packet`` The underlying SSH transport packet. h](je)}(h ``packet``h]jk)}(hj*h]hpacket}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj*ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj*hM^hj*ubj_)}(h:``node`` List node for the request queue and pending set. h](je)}(h``node``h]jk)}(hj+h]hnode}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj+ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM_hj*ubj)}(hhh]h)}(h0List node for the request queue and pending set.h]h0List node for the request queue and pending set.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hM_hj+ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1j^hj+hM_hj*ubj_)}(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](je)}(h ``state``h]jk)}(hj=+h]hstate}(hj?+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj;+ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMbhj7+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 }(hjV+hhhNhNubh)}(h4:c:type:`enum ssh_request_flags `h]jk)}(hj`+h]henum ssh_request_flags}(hjb+hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj^+ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssh_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhM`hjV+ubh for possible options.}(hjV+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}+hM`hjS+ubah}(h]h ]h"]h$]h&]uh1jhj7+ubeh}(h]h ]h"]h$]h&]uh1j^hjR+hMbhj*ubj_)}(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](je)}(h ``timestamp``h]jk)}(hj+h]h timestamp}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj+ubah}(h]h ]h"]h$]h&]uh1jdh/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+hhhNhNubjk)}(h ``KTIME_MAX``h]h KTIME_MAX}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj+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&]uh1j^hj+hMghj*ubj_)}(h``ops`` Request Operations.h](je)}(h``ops``h]jk)}(hj+h]hops}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj+ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(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.hhMhhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1j^hj+hMghj*ubeh}(h]h ]h"]h$]h&]uh1jYhjz*ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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}(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.hhM}ubj)}(h h]h }(hjN,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<,hhhjM,hM}ubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hj_,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\,ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetja,modnameN classnameNjj)}j]j5 )}j- to_ssh_requestsbc.to_ssh_requestasbuh1hhj<,hhhjM,hM}ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<,hhhjM,hM}ubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj<,hhhjM,hM}ubj)}(hto_ssh_requesth]j)}(hj},h]hto_ssh_request}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj<,hhhjM,hM}ubjb )}(h(struct ssh_packet *p)h]jh )}(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&] refdomainj.reftypej- 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}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj,ubah}(h]h ]h"]h$]h&]hhuh1ja hj<,hhhjM,hM}ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj8,hhhjM,hM}ubah}(h]j3,ah ](j j eh"]h$]h&]jj)jhuh1jhjM,hM}hj5,hhubj)}(hhh]h)}(h/Cast a SSH packet to its enclosing SSH request.h]h/Cast a SSH packet to its enclosing SSH 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.hhMthj7-hhubah}(h]h ]h"]h$]h&]uh1jhj5,hhhjM,hM}ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jR-j5jR-j6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hj\-h]h Parameters}(hj^-hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjZ-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.hhMxhjV-ubjZ)}(hhh]j_)}(h-``struct ssh_packet *p`` The packet to cast. h](je)}(h``struct ssh_packet *p``h]jk)}(hj{-h]hstruct ssh_packet *p}(hj}-hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjy-ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMuhju-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&]uh1jhju-ubeh}(h]h ]h"]h$]h&]uh1j^hj-hMuhjr-ubah}(h]h ]h"]h$]h&]uh1jYhjV-ubh)}(h**Description**h]jD)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj-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.hhMwhjV-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]jk)}(hj-h]hstruct ssh_packet}(hj-hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMwhj-ubh to its enclosing }(hj-hhhNhNubh)}(h*:c:type:`struct ssh_request `h]jk)}(hj-h]hstruct ssh_request}(hj-hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj-ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssh_requestuh1hhj-hMwhj-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]jk)}(hj.h]hstruct ssh_request}(hj.hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssh_requestuh1hhj-hMwhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hMwhjV-ubh)}(h **Return**h]jD)}(hjF.h]hReturn}(hjH.hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjD.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.hhM{hjV-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]jk)}(hjf.h]hstruct ssh_request}(hjh.hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjd.ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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{hjV-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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]jD)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj/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/ubjZ)}(hhh]j_)}(hK``struct ssh_request *r`` The request to increment the reference count of. h](je)}(h``struct ssh_request *r``h]jk)}(hj/h]hstruct ssh_request *r}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj/ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj/ubj)}(hhh]h)}(h0The request to increment the reference count of.h]h0The request to increment the reference count of.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1j^hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jYhj/ubh)}(h**Description**h]jD)}(hj%0h]h Description}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj#0ubah}(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 }(hj;0hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]jk)}(hjE0h]hstruct ssh_packet}(hjG0hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjC0ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj;0ubh, enclosed in it.}(hj;0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjb0hMhj/ubh)}(h-See also ssh_request_put(), ssh_packet_get().h]h-See also ssh_request_put(), ssh_packet_get().}(hjm0hhhNhNubah}(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]jD)}(hj~0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj|0ubah}(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&]uh1j9hjhhhNhNubj)}(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 }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hMubj)}(hssh_request_puth]j)}(hssh_request_puth]hssh_request_put}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj0hhhj0hMubjb )}(h(struct ssh_request *r)h]jh )}(hstruct ssh_request *rh](j)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj 1modnameN classnameNjj)}j]j5 )}j- j0sbc.ssh_request_putasbuh1hhj0ubj)}(h h]h }(hj>1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj )}(hj h]h*}(hjL1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj0ubj)}(hj/h]hr}(hjY1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj0ubah}(h]h ]h"]h$]h&]hhuh1ja hj0hhhj0hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj0hhhj0hMubah}(h]j0ah ](j j eh"]h$]h&]jj)jhuh1jhj0hMhj0hhubj)}(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&]uh1jhj0hhhj0hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j1j5j1j6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj1ubah}(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.hhMhj1ubjZ)}(hhh]j_)}(hK``struct ssh_request *r`` The request to decrement the reference count of. h](je)}(h``struct ssh_request *r``h]jk)}(hj1h]hstruct ssh_request *r}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj1ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1j^hj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jYhj1ubh)}(h**Description**h]jD)}(hj1h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj1ubah}(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 }(hj2hhhNhNubh)}(h(:c:type:`struct ssh_packet `h]jk)}(hj2h]hstruct ssh_packet}(hj 2hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssh_packetuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhj2ubh;, enclosed in it. If the reference count reaches zero, the }(hj2hhhNhNubjk)}(h ``release``h]hrelease}(hj@2hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj2ubh' callback specified in the request’s }(hj2hhhNhNubh)}(h2:c:type:`struct ssh_request_ops `h]jk)}(hjT2h]hstruct ssh_request_ops}(hjV2hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjR2ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssh_request_opsuh1hhj;2hMhj2ubh, i.e. }(hj2hhhNhNubjk)}(h``r->ops->release``h]hr->ops->release}(hju2hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj2ubh, will be called.}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj;2hMhj1ubh)}(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&]uh1j9hjhhhNhNubj)}(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 }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj2hMubj)}(hssh_request_set_datah]j)}(hssh_request_set_datah]hssh_request_set_data}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj2hhhj2hMubjb )}(h,(struct ssh_request *r, u8 *ptr, size_t len)h](jh )}(hstruct ssh_request *rh](j)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(h ssh_requesth]h ssh_request}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj3modnameN classnameNjj)}j]j5 )}j- j2sbc.ssh_request_set_dataasbuh1hhj2ubj)}(h h]h }(hj73hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj )}(hj h]h*}(hjE3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubj)}(hj/h]hr}(hjR3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj2ubjh )}(hu8 *ptrh](h)}(hhh]j)}(hu8h]hu8}(hjm3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj3ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjo3modnameN classnameNjj)}j]j33c.ssh_request_set_dataasbuh1hhjf3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf3ubj )}(hj h]h*}(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjf3ubj)}(hptrh]hptr}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj2ubjh )}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj3modnameN classnameNjj)}j]j33c.ssh_request_set_dataasbuh1hhj3ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hlenh]hlen}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj2ubeh}(h]h ]h"]h$]h&]hhuh1ja hj2hhhj2hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj2hhhj2hMubah}(h]j2ah ](j j eh"]h$]h&]jj)jhuh1jhj2hMhj2hhubj)}(hhh]h)}(h Set raw message data of request.h]h Set raw message data of request.}(hj4hhhNhNubah}(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.hhMhj4hhubah}(h]h ]h"]h$]h&]uh1jhj2hhhj2hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j04j5j04j6j7j8uh1jhhhjhNhNubj:)}(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]jD)}(hj:4h]h Parameters}(hj<4hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj84ubah}(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.hhMhj44ubjZ)}(hhh](j_)}(hP``struct ssh_request *r`` The request for which the message data should be set. h](je)}(h``struct ssh_request *r``h]jk)}(hjY4h]hstruct ssh_request *r}(hj[4hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjW4ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:14: ./include/linux/surface_aggregator/serial_hub.hhMhjS4ubj)}(hhh]h)}(h5The request for which the message data should be set.h]h5The request for which the message data should be set.}(hjr4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn4hMhjo4ubah}(h]h ]h"]h$]h&]uh1jhjS4ubeh}(h]h ]h"]h$]h&]uh1j^hjn4hMhjP4ubj_)}(h<``u8 *ptr`` Pointer to the memory holding the message data. h](je)}(h ``u8 *ptr``h]jk)}(hj4h]hu8 *ptr}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj4ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj4hMhjP4ubj_)}(h+``size_t len`` Length of the message data. h](je)}(h``size_t len``h]jk)}(hj4h]h size_t len}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj4ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1j^hj4hMhjP4ubeh}(h]h ]h"]h$]h&]uh1jYhj44ubh)}(h**Description**h]jD)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj5ubah}(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.hhMhj44ubh)}(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.}(hj5hhhNhNubah}(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.hhMhj44ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(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)}(h5ah ](j j eh"]h$]h&]jj)jhuh1jhjX5hMhj@5hhubj)}(hhh]h)}(h$Increment reference count of packet.h]h$Increment reference count of packet.}(hjF6hhhNhNubah}(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 hjC6hhubah}(h]h ]h"]h$]h&]uh1jhj@5hhhjX5hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j^6j5j^6j6j7j8uh1jhhhjhNhNubj:)}(hX**Parameters** ``struct ssh_packet *packet`` The packet to increment the reference count of. **Description** Increments the reference count of the given packet. See ssh_packet_put() for the counter-part of this function. **Return** Returns the packet provided as input.h](h)}(h**Parameters**h]jD)}(hjh6h]h Parameters}(hjj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjf6ubah}(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 hjb6ubjZ)}(hhh]j_)}(hN``struct ssh_packet *packet`` The packet to increment the reference count of. h](je)}(h``struct ssh_packet *packet``h]jk)}(hj6h]hstruct ssh_packet *packet}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj6ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM hj6ubj)}(hhh]h)}(h/The packet to increment the reference count of.h]h/The packet to increment the reference count of.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hM hj6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1j^hj6hM hj~6ubah}(h]h ]h"]h$]h&]uh1jYhjb6ubh)}(h**Description**h]jD)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj6ubah}(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 hjb6ubh)}(hoIncrements the reference count of the given packet. See ssh_packet_put() for the counter-part of this function.h]hoIncrements the reference count of the given packet. See ssh_packet_put() for the counter-part of this function.}(hj6hhhNhNubah}(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 hjb6ubh)}(h **Return**h]jD)}(hj6h]hReturn}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj6ubah}(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.chMhjb6ubh)}(h%Returns the packet provided as input.h]h%Returns the packet provided as input.}(hj6hhhNhNubah}(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.chMhjb6ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssh_packet_put (C function)c.ssh_packet_puthNtauh1jhjhhhNhNubj)}(hhh](j)}(h/void ssh_packet_put (struct ssh_packet *packet)h]j)}(h.void ssh_packet_put(struct ssh_packet *packet)h](j)}(hvoidh]hvoid}(hj.7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*7hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:16: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM#ubj)}(h h]h }(hj=7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*7hhhj<7hM#ubj)}(hssh_packet_puth]j)}(hssh_packet_puth]hssh_packet_put}(hjO7hhhNhNubah}(h]h ]jah"]h$]h&]uh1j,hjK7ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*7hhhj<7hM#ubjb )}(h(struct ssh_packet *packet)h]jh )}(hstruct ssh_packet *packeth](j)}(hjh]hstruct}(hjk7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg7ubj)}(h h]h }(hjx7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg7ubh)}(hhh]j)}(h ssh_packeth]h ssh_packet}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj7modnameN classnameNjj)}j]j5 )}j- jQ7sbc.ssh_packet_putasbuh1hhjg7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg7ubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg7ubj)}(hpacketh]hpacket}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjc7ubah}(h]h ]h"]h$]h&]hhuh1ja hj*7hhhj<7hM#ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj&7hhhj<7hM#ubah}(h]j!7ah ](j j eh"]h$]h&]jj)jhuh1jhj<7hM#hj#7hhubj)}(hhh]h)}(h$Decrement reference count of packet.h]h$Decrement reference count of packet.}(hj7hhhNhNubah}(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.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhj#7hhhj<7hM#ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j8j5j8j6j7j8uh1jhhhjhNhNubj:)}(hXg**Parameters** ``struct ssh_packet *packet`` The packet to decrement the reference count of. **Description** If 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. See ssh_packet_get() for the counter-part of this function.h](h)}(h**Parameters**h]jD)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj8ubah}(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.chMhj 8ubjZ)}(hhh]j_)}(hN``struct ssh_packet *packet`` The packet to decrement the reference count of. h](je)}(h``struct ssh_packet *packet``h]jk)}(hj/8h]hstruct ssh_packet *packet}(hj18hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-8ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjH8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD8hMhjE8ubah}(h]h ]h"]h$]h&]uh1jhj)8ubeh}(h]h ]h"]h$]h&]uh1j^hjD8hMhj&8ubah}(h]h ]h"]h$]h&]uh1jYhj 8ubh)}(h**Description**h]jD)}(hjj8h]h Description}(hjl8hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjh8ubah}(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.chMhj 8ubh)}(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 }(hj8hhhNhNubjk)}(h ``release``h]hrelease}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8ubh& callback specified in the packet’s }(hj8hhhNhNubh)}(h0:c:type:`struct ssh_packet_ops `h]jk)}(hj8h]hstruct ssh_packet_ops}(hj8hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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. }(hj8hhhNhNubjk)}(h``packet->ops->release``h]hpacket->ops->release}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8ubh, will be called.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj8hMhj 8ubh)}(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.}(hj8hhhNhNubah}(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!hj 8ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjhhhNhNubeh}(h]jah ]h"]serial hub communicationah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hController and Core Interfaceh]hController and Core Interface}(hj8hhhNhNubah}(h]h ]h"]h$]h&]hj9uh1hhj8hhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_flags (C enum)c.ssam_event_flagshNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_event_flagsh]j)}(henum ssam_event_flagsh](j)}(hjh]henum}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKubj)}(h h]h }(hj+9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhhj*9hKubj)}(hssam_event_flagsh]j)}(hj9h]hssam_event_flags}(hj=9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj99ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj9hhhj*9hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj9hhhj*9hKubah}(h]j9ah ](j j eh"]h$]h&]jj)jhuh1jhj*9hKhj9hhubj)}(hhh]h)}(h'Flags for enabling/disabling SAM eventsh]h'Flags for enabling/disabling SAM events}(hj_9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj\9hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj*9hKubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4jw9j5jw9j6j7j8uh1jhhhj8hNhNubj:)}(h\**Constants** ``SSAM_EVENT_SEQUENCED`` The event will be sent via a sequenced data frame.h](h)}(h **Constants**h]jD)}(hj9h]h Constants}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj9ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj{9ubjZ)}(hhh]j_)}(hK``SSAM_EVENT_SEQUENCED`` The event will be sent via a sequenced data frame.h](je)}(h``SSAM_EVENT_SEQUENCED``h]jk)}(hj9h]hSSAM_EVENT_SEQUENCED}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj9ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj9hKhj9ubah}(h]h ]h"]h$]h&]uh1jYhj{9ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event (C struct) c.ssam_eventhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h ssam_eventh]j)}(hstruct ssam_eventh](j)}(hjh]hstruct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9hhh/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&]uh1jhj9hhhj:hK&ubj)}(h ssam_eventh]j)}(hj9h]h ssam_event}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj9hhhj:hK&ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj9hhhj:hK&ubah}(h]j9ah ](j j eh"]h$]h&]jj)jhuh1jhj:hK&hj9hhubj)}(hhh]h)}(h'SAM event sent from the EC to the host.h]h'SAM event sent from the EC to the host.}(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!hj9:hhubah}(h]h ]h"]h$]h&]uh1jhj9hhhj:hK&ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jT:j5jT:j6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj`:hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj\: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%hjX: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[] ; };}hjy:sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK'hjX:ubh)}(h **Members**h]jD)}(hj:h]hMembers}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj: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.hhK0hjX:ubjZ)}(hhh](j_)}(hg``target_category`` Target category of the event source. See :c:type:`enum ssam_ssh_tc `. h](je)}(h``target_category``h]jk)}(hj:h]htarget_category}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj:ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj:h]henum ssam_ssh_tc}(hj:hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj:ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hj:hK#hj:ubj_)}(h-``target_id`` Target ID of the event source. h](je)}(h ``target_id``h]jk)}(hj;h]h target_id}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj;ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK$hj:ubj)}(hhh]h)}(hTarget ID of the event source.h]hTarget 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&]uh1j^hj;hK$hj:ubj_)}(h(``command_id`` Command ID of the event. h](je)}(h``command_id``h]jk)}(hj>;h]h command_id}(hj@;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj<;ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK%hj8;ubj)}(hhh]h)}(hCommand ID of the event.h]hCommand ID of the event.}(hjW;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS;hK%hjT;ubah}(h]h ]h"]h$]h&]uh1jhj8;ubeh}(h]h ]h"]h$]h&]uh1j^hjS;hK%hj:ubj_)}(h1``instance_id`` Instance ID of the event source. h](je)}(h``instance_id``h]jk)}(hjw;h]h instance_id}(hjy;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhju;ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK&hjq;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&]uh1jhjq;ubeh}(h]h ]h"]h$]h&]uh1j^hj;hK&hj:ubj_)}(h1``length`` Length of the event payload in bytes. h](je)}(h ``length``h]jk)}(hj;h]hlength}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj;ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj;hK'hj:ubj_)}(h``data`` Event payload data.h](je)}(h``data``h]jk)}(hj;h]hdata}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj;ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(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&]uh1j^hj;hK'hj:ubeh}(h]h ]h"]h$]h&]uh1jYhjX:ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_flags (C enum)c.ssam_request_flagshNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_request_flagsh]j)}(henum ssam_request_flagsh](j)}(hjh]henum}(hjC<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 }(hjQ<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?<hhhjP<hK.ubj)}(hssam_request_flagsh]j)}(hj=<h]hssam_request_flags}(hjc<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_<ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj?<hhhjP<hK.ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj;<hhhjP<hK.ubah}(h]j6<ah ](j j eh"]h$]h&]jj)jhuh1jhjP<hK.hj8<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&]uh1jhj8<hhhjP<hK.ubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4j<j5j<j6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj<h]h Constants}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj<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<ubjZ)}(hhh](j_)}(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](je)}(h``SSAM_REQUEST_HAS_RESPONSE``h]jk)}(hj<h]hSSAM_REQUEST_HAS_RESPONSE}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj<ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj<hK=hj<ubj_)}(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](je)}(h``SSAM_REQUEST_UNSEQUENCED``h]jk)}(hj=h]hSSAM_REQUEST_UNSEQUENCED}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj<ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKAhj<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 }(hj=hhhNhNubjk)}(h``SSAM_REQUEST_HAS_RESPONSE``h]hSSAM_REQUEST_HAS_RESPONSE}(hj!=hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj=ubh flag are mutually exclusive.}(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=ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1j^hj=hKAhj<ubeh}(h]h ]h"]h$]h&]uh1jYhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request (C struct)c.ssam_requesthNtauh1jhj8hhhNhNubj)}(hhh](j)}(h ssam_requesth]j)}(hstruct ssam_requesth](j)}(hjh]hstruct}(hjl=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh=hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKHubj)}(h h]h }(hjz=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh=hhhjy=hKHubj)}(h ssam_requesth]j)}(hjf=h]h ssam_request}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjh=hhhjy=hKHubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjd=hhhjy=hKHubah}(h]j_=ah ](j j eh"]h$]h&]jj)jhuh1jhjy=hKHhja=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&]uh1jhja=hhhjy=hKHubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j=j5j=j6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj=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&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKLhj=ubh)}(h **Members**h]jD)}(hj=h]hMembers}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj=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=ubjZ)}(hhh](j_)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](je)}(h``target_category``h]jk)}(hj>h]htarget_category}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj>ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKHhj>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 }(hj4>hhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]jk)}(hj>>h]henum ssam_ssh_tc}(hj@>hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj<>ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhj0>hKHhj4>ubh.}(hj4>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0>hKHhj1>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1j^hj0>hKHhj>ubj_)}(h*``target_id`` ID of the request's target. h](je)}(h ``target_id``h]jk)}(hjw>h]h target_id}(hjy>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhju>ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKIhjq>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&]uh1jhjq>ubeh}(h]h ]h"]h$]h&]uh1j^hj>hKIhj>ubj_)}(h*``command_id`` Command ID of the request. h](je)}(h``command_id``h]jk)}(hj>h]h command_id}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj>ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj>hKJhj>ubj_)}(h5``instance_id`` Instance ID of the request's target. h](je)}(h``instance_id``h]jk)}(hj>h]h instance_id}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj>ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKKhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1j^hj>hKKhj>ubj_)}(h]``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `. h](je)}(h ``flags``h]jk)}(hj"?h]hflags}(hj$?hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ?ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKLhj?ubj)}(hhh]h)}(hRFlags for the request. See :c:type:`enum ssam_request_flags `.h](hFlags for the request. See }(hj;?hhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]jk)}(hjE?h]henum ssam_request_flags}(hjG?hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjC?ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_flagsuh1hhj7?hKLhj;?ubh.}(hj;?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7?hKLhj8?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1j^hj7?hKLhj>ubj_)}(h3``length`` Length of the request payload in bytes. h](je)}(h ``length``h]jk)}(hj~?h]hlength}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj|?ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKMhjx?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&]uh1jhjx?ubeh}(h]h ]h"]h$]h&]uh1j^hj?hKMhj>ubj_)}(h!``payload`` Request payload data.h](je)}(h ``payload``h]jk)}(hj?h]hpayload}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj?ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj?hKMhj>ubeh}(h]h ]h"]h$]h&]uh1jYhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubh)}(h**Description**h]jD)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj?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.hhKQhj8hhubh)}(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. }(hj@hhhNhNubh)}(h6:c:type:`struct ssam_request_sync `h]jk)}(hj@h]hstruct ssam_request_sync}(hj@hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj@ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_syncuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKOhj@ubhF, and specifically its raw message data via ssam_request_write_data().}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7@hKOhj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_response (C struct)c.ssam_responsehNtauh1jhj8hhhNhNubj)}(hhh](j)}(h ssam_responseh]j)}(hstruct ssam_responseh](j)}(hjh]hstruct}(hj[@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW@hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKVubj)}(h h]h }(hji@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW@hhhjh@hKVubj)}(h ssam_responseh]j)}(hjU@h]h ssam_response}(hj{@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw@ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjW@hhhjh@hKVubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjS@hhhjh@hKVubah}(h]jN@ah ](j j eh"]h$]h&]jj)jhuh1jhjh@hKVhjP@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&]uh1jhjP@hhhjh@hKVubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j@j5j@j6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj@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; };}hj@sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKdhj@ubh)}(h **Members**h]jD)}(hj@h]hMembers}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj@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.hhKjhj@ubjZ)}(hhh](j_)}(h/``capacity`` Capacity of the buffer, in bytes. h](je)}(h ``capacity``h]jk)}(hj Ah]hcapacity}(hj AhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjAubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhK`hjAubj)}(hhh]h)}(h!Capacity of the buffer, in bytes.h]h!Capacity of the buffer, in bytes.}(hj#AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK`hj Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1j^hjAhK`hjAubj_)}(h|``length`` Length of the actual data stored in the memory pointed to by **pointer**, in bytes. Set by the transport system. h](je)}(h ``length``h]jk)}(hjCAh]hlength}(hjEAhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjAAubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKbhj=Aubj)}(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 }(hj\AhhhNhNubjD)}(h **pointer**h]hpointer}(hjdAhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj\Aubh(, in bytes. Set by the transport system.}(hj\AhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKahjYAubah}(h]h ]h"]h$]h&]uh1jhj=Aubeh}(h]h ]h"]h$]h&]uh1j^hjXAhKbhjAubj_)}(hN``pointer`` Pointer to the buffer's memory, storing the response payload data.h](je)}(h ``pointer``h]jk)}(hjAh]hpointer}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjAubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjAhKbhjAubeh}(h]h ]h"]h$]h&]uh1jYhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_sync (C struct)c.ssam_request_synchNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_request_synch]j)}(hstruct ssam_request_synch](j)}(hjh]hstruct}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKiubj)}(h h]h }(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjAhKiubj)}(hssam_request_synch]j)}(hjAh]hssam_request_sync}(hj BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]hhuh1jhjAhhhjAhKiubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjAhhhjAhKiubah}(h]jAah ](j j eh"]h$]h&]jj)jhuh1jhjAhKihjAhhubj)}(hhh]h)}(hSynchronous SAM request struct.h]hSynchronous SAM request struct.}(hj+BhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj(Bhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhKiubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jCBj5jCBj6j7j8uh1jhhhj8hNhNubj:)}(hXI**Definition**:: struct ssam_request_sync { struct ssh_request base; struct completion comp; struct ssam_response *resp; int status; }; **Members** ``base`` Underlying SSH request. ``comp`` Completion used to signal full completion of the request. After the request has been submitted, this struct may only be modified or deallocated after the completion has been signaled. request has been submitted, ``resp`` Buffer to store the response. ``status`` Status of the request, set after the base request has been completed or has failed.h](h)}(h**Definition**::h](jD)}(h**Definition**h]h Definition}(hjOBhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjKBubh:}(hjKBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjGBubj)}(hstruct ssam_request_sync { struct ssh_request base; struct completion comp; struct ssam_response *resp; int status; };h]hstruct ssam_request_sync { struct ssh_request base; struct completion comp; struct ssam_response *resp; int status; };}hjhBsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjGBubh)}(h **Members**h]jD)}(hjyBh]hMembers}(hj{BhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjwBubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjGBubjZ)}(hhh](j_)}(h!``base`` Underlying SSH request. h](je)}(h``base``h]jk)}(hjBh]hbase}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjBubj)}(hhh]h)}(hUnderlying SSH request.h]hUnderlying SSH request.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1j^hjBhKhjBubj_)}(h``comp`` Completion used to signal full completion of the request. After the request has been submitted, this struct may only be modified or deallocated after the completion has been signaled. request has been submitted, h](je)}(h``comp``h]jk)}(hjBh]hcomp}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjBubj)}(hhh]h)}(hCompletion used to signal full completion of the request. After the request has been submitted, this struct may only be modified or deallocated after the completion has been signaled. request has been submitted,h]hCompletion used to signal full completion of the request. After the request has been submitted, this struct may only be modified or deallocated after the completion has been signaled. request has been submitted,}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1j^hjBhKhjBubj_)}(h'``resp`` Buffer to store the response. h](je)}(h``resp``h]jk)}(hj Ch]hresp}(hj ChhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj Cubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjCubj)}(hhh]h)}(hBuffer to store the response.h]hBuffer to store the response.}(hj$ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ChKhj!Cubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1j^hj ChKhjBubj_)}(h^``status`` Status of the request, set after the base request has been completed or has failed.h](je)}(h ``status``h]jk)}(hjDCh]hstatus}(hjFChhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBCubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj>Cubj)}(hhh]h)}(hSStatus of the request, set after the base request has been completed or has failed.h]hSStatus of the request, set after the base request has been completed or has failed.}(hj]ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYChKhjZCubah}(h]h ]h"]h$]h&]uh1jhj>Cubeh}(h]h ]h"]h$]h&]uh1j^hjYChKhjBubeh}(h]h ]h"]h$]h&]uh1jYhjGBubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ssam_request_sync_set_data (C function)c.ssam_request_sync_set_datahNtauh1jhj8hhhNhNubj)}(hhh](j)}(hUvoid ssam_request_sync_set_data (struct ssam_request_sync *rqst, u8 *ptr, size_t len)h]j)}(hTvoid ssam_request_sync_set_data(struct ssam_request_sync *rqst, u8 *ptr, size_t len)h](j)}(hvoidh]hvoid}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChKubj)}(hssam_request_sync_set_datah]j)}(hssam_request_sync_set_datah]hssam_request_sync_set_data}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]hhuh1jhjChhhjChKubjb )}(h5(struct ssam_request_sync *rqst, u8 *ptr, size_t len)h](jh )}(hstruct ssam_request_sync *rqsth](j)}(hjh]hstruct}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubh)}(hhh]j)}(hssam_request_synch]hssam_request_sync}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjCmodnameN classnameNjj)}j]j5 )}j- jCsbc.ssam_request_sync_set_dataasbuh1hhjCubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj )}(hj h]h*}(hj&DhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjCubj)}(hrqsth]hrqst}(hj3DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjCubjh )}(hu8 *ptrh](h)}(hhh]j)}(hu8h]hu8}(hjODhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLDubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjQDmodnameN classnameNjj)}j]jDc.ssam_request_sync_set_dataasbuh1hhjHDubj)}(h h]h }(hjmDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHDubj )}(hj h]h*}(hj{DhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjHDubj)}(hptrh]hptr}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHDubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjCubjh )}(h size_t lenh](h)}(hhh]j)}(hsize_th]hsize_t}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjDmodnameN classnameNjj)}j]jDc.ssam_request_sync_set_dataasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hlenh]hlen}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjCubeh}(h]h ]h"]h$]h&]hhuh1ja hjChhhjChKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjChhhjChKubah}(h]jCah ](j j eh"]h$]h&]jj)jhuh1jhjChKhjChhubj)}(hhh]h)}(h*Set message data of a synchronous request.h]h*Set message data of a synchronous request.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjDhhubah}(h]h ]h"]h$]h&]uh1jhjChhhjChKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jEj5jEj6j7j8uh1jhhhj8hNhNubj:)}(hX<**Parameters** ``struct ssam_request_sync *rqst`` The request. ``u8 *ptr`` Pointer to the request message data. ``size_t len`` Length of the request message data. **Description** Set the request message data of a synchronous request. The provided buffer needs to live until the request has been completed.h](h)}(h**Parameters**h]jD)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjEubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjEubjZ)}(hhh](j_)}(h0``struct ssam_request_sync *rqst`` The request. h](je)}(h"``struct ssam_request_sync *rqst``h]jk)}(hj;Eh]hstruct ssam_request_sync *rqst}(hj=EhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj9Eubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhj5Eubj)}(hhh]h)}(h The request.h]h The request.}(hjTEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPEhKhjQEubah}(h]h ]h"]h$]h&]uh1jhj5Eubeh}(h]h ]h"]h$]h&]uh1j^hjPEhKhj2Eubj_)}(h1``u8 *ptr`` Pointer to the request message data. h](je)}(h ``u8 *ptr``h]jk)}(hjtEh]hu8 *ptr}(hjvEhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjrEubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjnEubj)}(hhh]h)}(h$Pointer to the request message data.h]h$Pointer to the request message data.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1jhjnEubeh}(h]h ]h"]h$]h&]uh1j^hjEhKhj2Eubj_)}(h3``size_t len`` Length of the request message data. h](je)}(h``size_t len``h]jk)}(hjEh]h size_t len}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjEubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjEubj)}(hhh]h)}(h#Length of the request message data.h]h#Length of the request message data.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1j^hjEhKhj2Eubeh}(h]h ]h"]h$]h&]uh1jYhjEubh)}(h**Description**h]jD)}(hjEh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjEubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhKhjEubh)}(h~Set the request message data of a synchronous request. The provided buffer needs to live until the request has been completed.h]h~Set the request message data of a synchronous request. The provided buffer needs to live until the request has been completed.}(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.hhKhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'ssam_request_sync_set_resp (C function)c.ssam_request_sync_set_resphNtauh1jhj8hhhNhNubj)}(hhh](j)}(h\void ssam_request_sync_set_resp (struct ssam_request_sync *rqst, struct ssam_response *resp)h]j)}(h[void ssam_request_sync_set_resp(struct ssam_request_sync *rqst, struct ssam_response *resp)h](j)}(hvoidh]hvoid}(hj-FhhhNhNubah}(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.hhKubj)}(h h]h }(hjReturns the return value of the last execution of **request**.h](h2Returns the return value of the last execution of }(hjNhhhNhNubjD)}(h **request**h]hrequest}(hj NhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjNubh.}(hjNhhhNhNubeh}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_retry (C macro) c.ssam_retryhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h ssam_retryh]j)}(h ssam_retryh]j)}(h ssam_retryh]j)}(hj>Nh]h ssam_retry}(hjHNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDNubah}(h]h ](jjeh"]h$]h&]hhuh1jhj@Nhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjReturns the return value of the last execution of **request**.h](h2Returns the return value of the last execution of }(hjOhhhNhNubjD)}(h **request**h]hrequest}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjOubh.}(hjOhhhNhNubeh}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_spec (C struct)c.ssam_request_spechNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_request_spech]j)}(hstruct ssam_request_spech](j)}(hjh]hstruct}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjPhhh/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&]uh1jhjPhhhj$PhM!ubj)}(hssam_request_spech]j)}(hjPh]hssam_request_spec}(hj7PhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3Pubah}(h]h ](jjeh"]h$]h&]hhuh1jhjPhhhj$PhM!ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhj$PhM!ubah}(h]j Pah ](j j eh"]h$]h&]jj)jhuh1jhj$PhM!hj Phhubj)}(hhh]h)}(h(Blue-print specification of SAM request.h]h(Blue-print specification of SAM request.}(hjYPhhhNhNubah}(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"hjVPhhubah}(h]h ]h"]h$]h&]uh1jhj Phhhj$PhM!ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jqPj5jqPj6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj}PhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjyPubh:}(hjyPhhhNhNubeh}(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&hjuPubj)}(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&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hjuPubh)}(h **Members**h]jD)}(hjPh]hMembers}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjPubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM0hjuPubjZ)}(hhh](j_)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](je)}(h``target_category``h]jk)}(hjPh]htarget_category}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjPubah}(h]h ]h"]h$]h&]uh1jdh/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 }(hjPhhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]jk)}(hjPh]henum ssam_ssh_tc}(hjPhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjPubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhjPhM$hjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjPhM$hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1j^hjPhM$hjPubj_)}(h*``target_id`` ID of the request's target. h](je)}(h ``target_id``h]jk)}(hj"Qh]h target_id}(hj$QhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj Qubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM%hjQubj)}(hhh]h)}(hID of the request's target.h]hID of the request’s target.}(hj;QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7QhM%hj8Qubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1j^hj7QhM%hjPubj_)}(h*``command_id`` Command ID of the request. h](je)}(h``command_id``h]jk)}(hj[Qh]h command_id}(hj]QhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjYQubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM&hjUQubj)}(hhh]h)}(hCommand ID of the request.h]hCommand ID of the request.}(hjtQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpQhM&hjqQubah}(h]h ]h"]h$]h&]uh1jhjUQubeh}(h]h ]h"]h$]h&]uh1j^hjpQhM&hjPubj_)}(h5``instance_id`` Instance ID of the request's target. h](je)}(h``instance_id``h]jk)}(hjQh]h instance_id}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjQubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjQhM'hjPubj_)}(h\``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](je)}(h ``flags``h]jk)}(hjQh]hflags}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjQubah}(h]h ]h"]h$]h&]uh1jdh/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 }(hjQhhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]jk)}(hjQh]henum ssam_request_flags}(hjQhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjQubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM(hjQubh.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj RhM(hjQubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1j^hjQhM'hjPubeh}(h]h ]h"]h$]h&]uh1jYhjuPubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubh)}(h**Description**h]jD)}(hj3Rh]h Description}(hj5RhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj1Rubah}(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+hj8hhubh)}(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 }(hjIRhhhNhNubjk)}(h ``SSAM_DEFINE_SYNC_REQUEST_x()``h]hSSAM_DEFINE_SYNC_REQUEST_x()}(hjQRhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjIRubh family of macros.}(hjIRhhhNhNubeh}(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)hj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_request_spec_md (C struct)c.ssam_request_spec_mdhNtauh1jhj8hhhNhNubj)}(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.hhM2ubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjRhM2ubj)}(hssam_request_spec_mdh]j)}(hj}Rh]hssam_request_spec_md}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ](jjeh"]h$]h&]hhuh1jhjRhhhjRhM2ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj{RhhhjRhM2ubah}(h]jvRah ](j j eh"]h$]h&]jj)jhuh1jhjRhM2hjxRhhubj)}(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&]uh1jhjxRhhhjRhM2ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jRj5jRj6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjRubh:}(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<hjRubj)}(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; };}hjSsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM>hjRubh)}(h **Members**h]jD)}(hjSh]hMembers}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jChjSubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMDhjRubjZ)}(hhh](j_)}(hd``target_category`` Category of the request's target. See :c:type:`enum ssam_ssh_tc `. h](je)}(h``target_category``h]jk)}(hj2Sh]htarget_category}(hj4ShhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj0Subah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM;hj,Subj)}(hhh]h)}(hOCategory of the request's target. See :c:type:`enum ssam_ssh_tc `.h](h(Category of the request’s target. See }(hjKShhhNhNubh)}(h(:c:type:`enum ssam_ssh_tc `h]jk)}(hjUSh]henum ssam_ssh_tc}(hjWShhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjSSubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_ssh_tcuh1hhjGShM;hjKSubh.}(hjKShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjGShM;hjHSubah}(h]h ]h"]h$]h&]uh1jhj,Subeh}(h]h ]h"]h$]h&]uh1j^hjGShM;hj)Subj_)}(h*``command_id`` Command ID of the request. h](je)}(h``command_id``h]jk)}(hjSh]h command_id}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjSubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjShM<hj)Subj_)}(h\``flags`` Flags for the request. See :c:type:`enum ssam_request_flags `.h](je)}(h ``flags``h]jk)}(hjSh]hflags}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjSubah}(h]h ]h"]h$]h&]uh1jdh/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 }(hjShhhNhNubh)}(h6:c:type:`enum ssam_request_flags `h]jk)}(hjSh]henum ssam_request_flags}(hjShhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjSubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM=hjSubh.}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjThM=hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1j^hjShM<hj)Subeh}(h]h ]h"]h$]h&]uh1jYhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubh)}(h**Description**h]jD)}(hj-Th]h Description}(hj/ThhhNhNubah}(h]h ]h"]h$]h&]uh1jChj+Tubah}(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@hj8hhubh)}(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 }(hjCThhhNhNubjk)}(h#``SSAM_DEFINE_SYNC_REQUEST_MD_x()``h]hSSAM_DEFINE_SYNC_REQUEST_MD_x()}(hjKThhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjCTubh and }(hjCThhhNhNubjk)}(h#``SSAM_DEFINE_SYNC_REQUEST_CL_x()``h]hSSAM_DEFINE_SYNC_REQUEST_CL_x()}(hj]ThhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjCTubh families of macros.}(hjCThhhNhNubeh}(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>hj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_N (C macro)c.SSAM_DEFINE_SYNC_REQUEST_NhNtauh1jhj8hhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMcubah}(h]h ]h"]h$]h&]hhjuh1jjjhjThhhjThMcubah}(h]jTah ](j j eh"]h$]h&]jj)jhuh1jhjThMchjThhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjThhhjThMcubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jTj5jTj6j7j8uh1jhhhj8hNhNubh)}(h.``SSAM_DEFINE_SYNC_REQUEST_N (name, spec...)``h]jk)}(hjTh]h*SSAM_DEFINE_SYNC_REQUEST_N (name, spec...)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjTubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMehj8hhubj)}(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.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOhjTubah}(h]h ]h"]h$]h&]uh1jhjThMOhj8hhubj:)}(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]jD)}(hjTh]h Parameters}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jChjTubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMShjTubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjUh]hname}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjUubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMQhjUubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hj2UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.UhMQhj/Uubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1j^hj.UhMQhjUubj_)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](je)}(h ``spec...``h]jk)}(hjRUh]hspec...}(hjTUhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjPUubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMRhjLUubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hjkUhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]jk)}(hjuUh]hstruct ssam_request_spec}(hjwUhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjsUubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_specuh1hhjgUhMRhjkUubh) defining the request.}(hjkUhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjgUhMRhjhUubah}(h]h ]h"]h$]h&]uh1jhjLUubeh}(h]h ]h"]h$]h&]uh1j^hjgUhMRhjUubeh}(h]h ]h"]h$]h&]uh1jYhjTubh)}(h**Description**h]jD)}(hjUh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjUubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMThjTubh)}(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 }(hjUhhhNhNubjD)}(h**spec**h]hspec}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjUubhX5, 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.hhMThjTubh)}(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 }(hjUhhhNhNubjk)}(h1``static int name(struct ssam_controller *ctrl)``h]h-static int name(struct ssam_controller *ctrl)}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjUubh], returning the status of the request, which is zero on success and negative on failure. The }(hjUhhhNhNubjk)}(h``ctrl``h]hctrl}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjUubhA parameter is the controller via which the request is being sent.}(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.hhM[hjTubh)}(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.}(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.hhM`hjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_W (C macro)c.SSAM_DEFINE_SYNC_REQUEST_WhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Wh]j)}(hjCVh]hSSAM_DEFINE_SYNC_REQUEST_W}(hjMVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIVubah}(h]h ](jjeh"]h$]h&]hhuh1jhjEVhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjAVhhhj`VhMubah}(h]jVhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj>Vhhhj`VhMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jyVj5jyVj6j7j8uh1jhhhj8hNhNubh)}(h5``SSAM_DEFINE_SYNC_REQUEST_W (name, atype, spec...)``h]jk)}(hjVh]h1SSAM_DEFINE_SYNC_REQUEST_W (name, atype, spec...)}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj}Vubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj8hhubj)}(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&]uh1jhjVhMuhj8hhubj:)}(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]jD)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjVubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMyhjVubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjVh]hname}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjVubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMwhjVubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMwhjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1j^hjVhMwhjVubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hj Wh]hatype}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj Wubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMxhjWubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hj%WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!WhMxhj"Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1j^hj!WhMxhjVubj_)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](je)}(h ``spec...``h]jk)}(hjEWh]hspec...}(hjGWhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjCWubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMyhj?Wubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hj^WhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]jk)}(hjhWh]hstruct ssam_request_spec}(hjjWhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjfWubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_specuh1hhjZWhMyhj^Wubh) defining the request.}(hj^WhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZWhMyhj[Wubah}(h]h ]h"]h$]h&]uh1jhj?Wubeh}(h]h ]h"]h$]h&]uh1j^hjZWhMyhjVubeh}(h]h ]h"]h$]h&]uh1jYhjVubh)}(h**Description**h]jD)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjWubah}(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 }(hjWhhhNhNubjD)}(h**spec**h]hspec}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjWubh., with the request taking an argument of type }(hjWhhhNhNubjD)}(h **atype**h]hatype}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjWubhX 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.hhM{hjVubh)}(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 }(hjWhhhNhNubjk)}(hC``static int name(struct ssam_controller *ctrl, const atype *arg)``h]h?static int name(struct ssam_controller *ctrl, const atype *arg)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjWubh], returning the status of the request, which is zero on success and negative on failure. The }(hjWhhhNhNubjk)}(h``ctrl``h]hctrl}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjWubhf parameter is the controller via which the request is sent. The request argument is specified via the }(hjWhhhNhNubjk)}(h``arg``h]harg}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjWubh pointer.}(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.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.}(hj1XhhhNhNubah}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$SSAM_DEFINE_SYNC_REQUEST_R (C macro)c.SSAM_DEFINE_SYNC_REQUEST_RhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_Rh]j)}(hjZXh]hSSAM_DEFINE_SYNC_REQUEST_R}(hjdXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`Xubah}(h]h ](jjeh"]h$]h&]hhuh1jhj\Xhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjXXhhhjwXhMubah}(h]jSXah ](j j eh"]h$]h&]jj)jhuh1jhjwXhMhjUXhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjUXhhhjwXhMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jXj5jXj6j7j8uh1jhhhj8hNhNubh)}(h5``SSAM_DEFINE_SYNC_REQUEST_R (name, rtype, spec...)``h]jk)}(hjXh]h1SSAM_DEFINE_SYNC_REQUEST_R (name, rtype, spec...)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjXubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj8hhubj)}(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&]uh1jhjXhMhj8hhubj:)}(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]jD)}(hjXh]h Parameters}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjXubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjXh]hname}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjXubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjXubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMhjYubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1j^hjXhMhjXubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hj#Yh]hrtype}(hj%YhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj!Yubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjYubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hj`) defining the request. h](je)}(h ``spec...``h]jk)}(hj\Yh]hspec...}(hj^YhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZYubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjVYubj)}(hhh]h)}(h\Specification (:c:type:`struct ssam_request_spec `) defining the request.h](hSpecification (}(hjuYhhhNhNubh)}(h6:c:type:`struct ssam_request_spec `h]jk)}(hjYh]hstruct ssam_request_spec}(hjYhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj}Yubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_specuh1hhjqYhMhjuYubh) defining the request.}(hjuYhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqYhMhjrYubah}(h]h ]h"]h$]h&]uh1jhjVYubeh}(h]h ]h"]h$]h&]uh1j^hjqYhMhjXubeh}(h]h ]h"]h$]h&]uh1jYhjXubh)}(h**Description**h]jD)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjYubah}(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 }(hjYhhhNhNubjD)}(h**spec**h]hspec}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjYubhH, with the request taking no argument but having a return value of type }(hjYhhhNhNubjD)}(h **rtype**h]hrtype}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjYubhX. 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.}(hjYhhhNhNubeh}(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 }(hjZhhhNhNubjk)}(h=``static int name(struct ssam_controller *ctrl, rtype *ret)``h]h9static int name(struct ssam_controller *ctrl, rtype *ret)}(hj ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubh], returning the status of the request, which is zero on success and negative on failure. The }(hjZhhhNhNubjk)}(h``ctrl``h]hctrl}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubh parameter is the controller via which the request is sent. The request’s return value is written to the memory pointed to by the }(hjZhhhNhNubjk)}(h``ret``h]hret}(hj/ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubh parameter.}(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)}(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.}(hjHZhhhNhNubah}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%SSAM_DEFINE_SYNC_REQUEST_WR (C macro)c.SSAM_DEFINE_SYNC_REQUEST_WRhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_WRh]j)}(hjqZh]hSSAM_DEFINE_SYNC_REQUEST_WR}(hj{ZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwZubah}(h]h ](jjeh"]h$]h&]hhuh1jhjsZhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjoZhhhjZhMubah}(h]jjZah ](j j eh"]h$]h&]jj)jhuh1jhjZhMhjlZhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjlZhhhjZhMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jZj5jZj6j7j8uh1jhhhj8hNhNubh)}(h=``SSAM_DEFINE_SYNC_REQUEST_WR (name, atype, rtype, spec...)``h]jk)}(hjZh]h9SSAM_DEFINE_SYNC_REQUEST_WR (name, atype, rtype, spec...)}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj8hhubj)}(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&]uh1jhjZhMhj8hhubj:)}(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]jD)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjZubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjZubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hj[h]hname}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjZubj)}(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&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1j^hj[hMhjZubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hj:[h]hatype}(hj<[hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8[ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj4[ubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hjS[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO[hMhjP[ubah}(h]h ]h"]h$]h&]uh1jhj4[ubeh}(h]h ]h"]h$]h&]uh1j^hjO[hMhjZubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hjs[h]hrtype}(hju[hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjq[ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjm[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&]uh1jhjm[ubeh}(h]h ]h"]h$]h&]uh1j^hj[hMhjZubj_)}(hi``spec...`` Specification (:c:type:`struct ssam_request_spec `) defining the request. h](je)}(h ``spec...``h]jk)}(hj[h]hspec...}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj[ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj[h]hstruct ssam_request_spec}(hj[hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj[ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hj[hMhjZubeh}(h]h ]h"]h$]h&]uh1jYhjZubh)}(h**Description**h]jD)}(hj \h]h Description}(hj \hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj\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.hhMhjZubh)}(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 }(hj \hhhNhNubjD)}(h**spec**h]hspec}(hj(\hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj \ubh., with the request taking an argument of type }(hj \hhhNhNubjD)}(h **atype**h]hatype}(hj:\hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj \ubh# and having a return value of type }(hj \hhhNhNubjD)}(h **rtype**h]hrtype}(hjL\hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj \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.}(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.hhMhjZubh)}(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 }(hje\hhhNhNubjk)}(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)}(hjm\hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhje\ubh], returning the status of the request, which is zero on success and negative on failure. The }(hje\hhhNhNubjk)}(h``ctrl``h]hctrl}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhje\ubhf parameter is the controller via which the request is sent. The request argument is specified via the }(hje\hhhNhNubjk)}(h``arg``h]harg}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhje\ubhR pointer. The request’s return value is written to the memory pointed to by the }(hje\hhhNhNubjk)}(h``ret``h]hret}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhje\ubh parameter.}(hje\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.hhMhjZubh)}(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.hhMhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_N (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_NhNtauh1jhj8hhhNhNubj)}(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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhj]hM,hj\hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj\hhhj]hM,ubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j]j5j]j6j7j8uh1jhhhj8hNhNubh)}(h1``SSAM_DEFINE_SYNC_REQUEST_MD_N (name, spec...)``h]jk)}(hj!]h]h-SSAM_DEFINE_SYNC_REQUEST_MD_N (name, spec...)}(hj#]hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj]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.hj8hhubj)}(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.}(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.hhMhj7]ubah}(h]h ]h"]h$]h&]uh1jhjI]hMhj8hhubj:)}(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]jD)}(hjV]h]h Parameters}(hjX]hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjT]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.hhMhjP]ubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hju]h]hname}(hjw]hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjs]ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjo]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&]uh1jhjo]ubeh}(h]h ]h"]h$]h&]uh1j^hj]hMhjl]ubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hj]h]hspec...}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj]ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj]h]hstruct ssam_request_spec_md}(hj]hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj]ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hj]hMhjl]ubeh}(h]h ]h"]h$]h&]uh1jYhjP]ubh)}(h**Description**h]jD)}(hj ^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj ^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.hhMhjP]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 }(hj"^hhhNhNubjD)}(h**spec**h]hspec}(hj*^hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj"^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.}(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.hhMhjP]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 }(hjC^hhhNhNubjk)}(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)}(hjK^hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjC^ubh], returning the status of the request, which is zero on success and negative on failure. The }(hjC^hhhNhNubjk)}(h``ctrl``h]hctrl}(hj]^hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjC^ubh< parameter is the controller via which the request is sent, }(hjC^hhhNhNubjk)}(h``tid``h]htid}(hjo^hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjC^ubh$ the target ID for the request, and }(hjC^hhhNhNubjk)}(h``iid``h]hiid}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjC^ubh the instance ID.}(hjC^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#hjP]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)hjP]ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_W (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_WhNtauh1jhj8hhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhj^hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMVubah}(h]h ]h"]h$]h&]hhjuh1jjjhj^hhhj^hMVubah}(h]j^ah ](j j eh"]h$]h&]jj)jhuh1jhj^hMVhj^hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMVubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j^j5j^j6j7j8uh1jhhhj8hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_MD_W (name, atype, spec...)``h]jk)}(hj^h]h4SSAM_DEFINE_SYNC_REQUEST_MD_W (name, atype, spec...)}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj^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.hhMXhj8hhubj)}(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.}(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_ubah}(h]h ]h"]h$]h&]uh1jhj'_hM>hj8hhubj:)}(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]jD)}(hj4_h]h Parameters}(hj6_hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj2_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.hhMBhj._ubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjS_h]hname}(hjU_hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjQ_ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM@hjM_ubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjl_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh_hM@hji_ubah}(h]h ]h"]h$]h&]uh1jhjM_ubeh}(h]h ]h"]h$]h&]uh1j^hjh_hM@hjJ_ubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hj_h]hatype}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj_ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj_hMAhjJ_ubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hj_h]hspec...}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj_ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj_h]hstruct ssam_request_spec_md}(hj_hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj_ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hj_hMBhjJ_ubeh}(h]h ]h"]h$]h&]uh1jYhj._ubh)}(h**Description**h]jD)}(hj#`h]h Description}(hj%`hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj!`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.hhMDhj._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 }(hj9`hhhNhNubjD)}(h**spec**h]hspec}(hjA`hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj9`ubh., with the request taking an argument of type }(hj9`hhhNhNubjD)}(h **atype**h]hatype}(hjS`hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj9`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.}(hj9`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.hhMDhj._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 }(hjl`hhhNhNubjk)}(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)}(hjt`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjl`ubh], returning the status of the request, which is zero on success and negative on failure. The }(hjl`hhhNhNubjk)}(h``ctrl``h]hctrl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjl`ubh< parameter is the controller via which the request is sent, }(hjl`hhhNhNubjk)}(h``tid``h]htid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjl`ubh$ the target ID for the request, and }(hjl`hhhNhNubjk)}(h``iid``h]hiid}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjl`ubh< the instance ID. The request argument is specified via the }(hjl`hhhNhNubjk)}(h``arg``h]harg}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjl`ubh pointer.}(hjl`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.hhMLhj._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.hhMShj._ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'SSAM_DEFINE_SYNC_REQUEST_MD_R (C macro)c.SSAM_DEFINE_SYNC_REQUEST_MD_RhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_Rh]j)}(hj`h]hSSAM_DEFINE_SYNC_REQUEST_MD_R}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ](jjeh"]h$]h&]hhuh1jhjahhh/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`hhhjahMubah}(h]j`ah ](j j eh"]h$]h&]jj)jhuh1jhjahMhj`hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj`hhhjahMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j4aj5j4aj6j7j8uh1jhhhj8hNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_MD_R (name, rtype, spec...)``h]jk)}(hj:ah]h4SSAM_DEFINE_SYNC_REQUEST_MD_R (name, rtype, spec...)}(hj`) 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]jD)}(hjoah]h Parameters}(hjqahhhNhNubah}(h]h ]h"]h$]h&]uh1jChjmaubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMmhjiaubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjah]hname}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjaubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjahMkhjaubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hjah]hrtype}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjaubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMlhjaubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1j^hjahMlhjaubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hjbh]hspec...}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjaubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMmhjaubj)}(hhh]h)}(hbSpecification (:c:type:`struct ssam_request_spec_md `) defining the request.h](hSpecification (}(hjbhhhNhNubh)}(h<:c:type:`struct ssam_request_spec_md `h]jk)}(hj#bh]hstruct ssam_request_spec_md}(hj%bhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj!bubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjbhMmhjbubh) defining the request.}(hjbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjbhMmhjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1j^hjbhMmhjaubeh}(h]h ]h"]h$]h&]uh1jYhjiaubh)}(h**Description**h]jD)}(hj^bh]h Description}(hj`bhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj\bubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMohjiaubh)}(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 }(hjtbhhhNhNubjD)}(h**spec**h]hspec}(hj|bhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjtbubhH, with the request taking no argument but having a return value of type }(hjtbhhhNhNubjD)}(h **rtype**h]hrtype}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjtbubhXd. 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.}(hjtbhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMohjiaubh)}(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 }(hjbhhhNhNubjk)}(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&]uh1jjhjbubh], returning the status of the request, which is zero on success and negative on failure. The }(hjbhhhNhNubjk)}(h``ctrl``h]hctrl}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh< parameter is the controller via which the request is sent, }(hjbhhhNhNubjk)}(h``tid``h]htid}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh$ the target ID for the request, and }(hjbhhhNhNubjk)}(h``iid``h]hiid}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubhZ the instance ID. The request’s return value is written to the memory pointed to by the }(hjbhhhNhNubjk)}(h``ret``h]hret}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh 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.hhMwhjiaubh)}(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.}(hjchhhNhNubah}(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~hjiaubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(SSAM_DEFINE_SYNC_REQUEST_MD_WR (C macro) c.SSAM_DEFINE_SYNC_REQUEST_MD_WRhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hSSAM_DEFINE_SYNC_REQUEST_MD_WRh]j)}(hj9ch]hSSAM_DEFINE_SYNC_REQUEST_MD_WR}(hjCchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?cubah}(h]h ](jjeh"]h$]h&]hhuh1jhj;chhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhj7chhhjVchMubah}(h]j2cah ](j j eh"]h$]h&]jj)jhuh1jhjVchMhj4chhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhj4chhhjVchMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jocj5jocj6j7j8uh1jhhhj8hNhNubh)}(h@``SSAM_DEFINE_SYNC_REQUEST_MD_WR (name, atype, rtype, spec...)``h]jk)}(hjuch]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]jD)}(hjch]h Parameters}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jChjcubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjch]hname}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjcubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1j^hjchMhjcubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hjdh]hatype}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjdubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjcubj)}(hhh]h)}(hType of the request's argument.h]h!Type of the request’s argument.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1j^hjdhMhjcubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hj;dh]hrtype}(hj=dhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj9dubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj5dubj)}(hhh]h)}(h#Type of the request's return value.h]h%Type of the request’s return value.}(hjTdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPdhMhjQdubah}(h]h ]h"]h$]h&]uh1jhj5dubeh}(h]h ]h"]h$]h&]uh1j^hjPdhMhjcubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hjtdh]hspec...}(hjvdhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjrdubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjndubj)}(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]jk)}(hjdh]hstruct ssam_request_spec_md}(hjdhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjdubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_request_spec_mduh1hhjdhMhjdubh) defining the request.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjdhMhjdubah}(h]h ]h"]h$]h&]uh1jhjndubeh}(h]h ]h"]h$]h&]uh1j^hjdhMhjcubeh}(h]h ]h"]h$]h&]uh1jYhjcubh)}(h**Description**h]jD)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjdubah}(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 }(hjdhhhNhNubjD)}(h**spec**h]hspec}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjdubh., with the request taking an argument of type }(hjdhhhNhNubjD)}(h **atype**h]hatype}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jChjdubh# and having a return value of type }(hjdhhhNhNubjD)}(h **rtype**h]hrtype}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jChjdubhXd. 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.}(hjdhhhNhNubeh}(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 }(hj-ehhhNhNubjk)}(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)}(hj5ehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubh], returning the status of the request, which is zero on success and negative on failure. The }(hj-ehhhNhNubjk)}(h``ctrl``h]hctrl}(hjGehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubh< parameter is the controller via which the request is sent, }(hj-ehhhNhNubjk)}(h``tid``h]htid}(hjYehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubh$ the target ID for the request, and }(hj-ehhhNhNubjk)}(h``iid``h]hiid}(hjkehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubh< the instance ID. The request argument is specified via the }(hj-ehhhNhNubjk)}(h``arg``h]harg}(hj}ehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubhR pointer. The request’s return value is written to the memory pointed to by the }(hj-ehhhNhNubjk)}(h``ret``h]hret}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-eubh parameter.}(hj-ehhhNhNubeh}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_notif_flags (C enum)c.ssam_notif_flagshNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_notif_flagsh]j)}(henum ssam_notif_flagsh](j)}(hjh]henum}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhhjehMubj)}(hssam_notif_flagsh]j)}(hjeh]hssam_notif_flags}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]hhuh1jhjehhhjehMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjehhhjehMubah}(h]jeah ](j j eh"]h$]h&]jj)jhuh1jhjehMhjehhubj)}(hhh]h)}(hBFlags used in return values from SSAM notifier callback functions.h]hBFlags used in return values from SSAM notifier callback functions.}(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.hhMhjfhhubah}(h]h ]h"]h$]h&]uh1jhjehhhjehMubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4j1fj5j1fj6j7j8uh1jhhhj8hNhNubj:)}(hX**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. If 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. ``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]jD)}(hj;fh]h Constants}(hj=fhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj9fubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj5fubjZ)}(hhh](j_)}(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. If 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](je)}(h``SSAM_NOTIF_HANDLED``h]jk)}(hjZfh]hSSAM_NOTIF_HANDLED}(hj\fhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjXfubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjTfubj)}(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.}(hjsfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjpfubh)}(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.}(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.hhMhjpfubeh}(h]h ]h"]h$]h&]uh1jhjTfubeh}(h]h ]h"]h$]h&]uh1j^hjofhMhjQfubj_)}(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](je)}(h``SSAM_NOTIF_STOP``h]jk)}(hjfh]hSSAM_NOTIF_STOP}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjfubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjfhMhjQfubeh}(h]h ]h"]h$]h&]uh1jYhj5fubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_notifier_block (C struct)c.ssam_notifier_blockhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_notifier_blockh]j)}(hstruct ssam_notifier_blockh](j)}(hjh]hstruct}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhj ghMubj)}(hssam_notifier_blockh]j)}(hjfh]hssam_notifier_block}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]hhuh1jhjfhhhj ghMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjfhhhj ghMubah}(h]jfah ](j j eh"]h$]h&]jj)jhuh1jhj ghMhjfhhubj)}(hhh]h)}(h1Base notifier block for SSAM event notifications.h]h1Base notifier block for SSAM event notifications.}(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.hhM 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``). ``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](jD)}(h**Definition**h]h Definition}(hjcghhhNhNubah}(h]h ]h"]h$]h&]uh1jChj_gubh:}(hj_ghhhNhNubeh}(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[gubj)}(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; };}hj|gsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj[gubh)}(h **Members**h]jD)}(hjgh]hMembers}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jChjgubah}(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[gubjZ)}(hhh](j_)}(h-``node`` The node for the list of notifiers. h](je)}(h``node``h]jk)}(hjgh]hnode}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjgubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1j^hjghMhjgubj_)}(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](je)}(h``fn``h]jk)}(hjgh]hfn}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjgubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubj)}(hhh]h)}(hXThe 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](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 }(hjghhhNhNubh)}(h2:c:type:`enum ssam_notif_flags `h]jk)}(hjhh]henum ssam_notif_flags}(hj hhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjhubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_notif_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjgubhg, converted from a standard error value via ssam_notifier_from_errno(), or a combination of both (e.g. }(hjghhhNhNubjk)}(h4``ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED``h]h0ssam_notifier_from_errno(e) | SSAM_NOTIF_HANDLED}(hj*hhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjgubh).}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hhMhjgubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1j^hjghMhjgubj_)}(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](je)}(h ``priority``h]jk)}(hjThh]hpriority}(hjVhhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjRhubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjNhubj)}(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.}(hjmhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjjhubah}(h]h ]h"]h$]h&]uh1jhjNhubeh}(h]h ]h"]h$]h&]uh1j^hjihhMhjgubeh}(h]h ]h"]h$]h&]uh1jYhj[gubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ssam_notifier_from_errno (C function)c.ssam_notifier_from_errnohNtauh1jhj8hhhNhNubj)}(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}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjhmodnameN classnameNjj)}j]j5 )}j- ssam_notifier_from_errnosbc.ssam_notifier_from_errnoasbuh1hhjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM)ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM)ubj)}(hssam_notifier_from_errnoh]j)}(hjhh]hssam_notifier_from_errno}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhhjhhM)ubjb )}(h (int err)h]jh )}(hint errh](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(herrh]herr}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjhubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhhjhhM)ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhhjhhM)ubah}(h]jhah ](j j eh"]h$]h&]jj)jhuh1jhjhhM)hjhhhubj)}(hhh]h)}(h5Convert standard error value to notifier return code.h]h5Convert standard error value to notifier return code.}(hjFihhhNhNubah}(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 hjCihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM)ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j^ij5j^ij6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjhih]h Parameters}(hjjihhhNhNubah}(h]h ]h"]h$]h&]uh1jChjfiubah}(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$hjbiubjZ)}(hhh]j_)}(hk``int err`` The error code to convert, must be negative (in case of failure) or zero (in case of success). h](je)}(h ``int err``h]jk)}(hjih]hint err}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjiubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjihM#hj~iubah}(h]h ]h"]h$]h&]uh1jYhjbiubh)}(h **Return**h]jD)}(hjih]hReturn}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jChjiubah}(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%hjbiubh)}(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 }(hjihhhNhNubjD)}(h**err**h]herr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jChjiubh value. In case }(hjihhhNhNubjD)}(h**err**h]herr}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jChjiubh is negative, the }(hjihhhNhNubjk)}(h``SSAM_NOTIF_STOP``h]hSSAM_NOTIF_STOP}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjiubhB flag will be set, causing notifier call chain traversal to abort.}(hjihhhNhNubeh}(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%hjbiubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ssam_notifier_to_errno (C function)c.ssam_notifier_to_errnohNtauh1jhj8hhhNhNubj)}(hhh](j)}(h$int ssam_notifier_to_errno (u32 ret)h]j)}(h#int ssam_notifier_to_errno(u32 ret)h](j)}(hinth]hint}(hj>jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM9ubj)}(h h]h }(hjMjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:jhhhjLjhM9ubj)}(hssam_notifier_to_errnoh]j)}(hssam_notifier_to_errnoh]hssam_notifier_to_errno}(hj_jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[jubah}(h]h ](jjeh"]h$]h&]hhuh1jhj:jhhhjLjhM9ubjb )}(h (u32 ret)h]jh )}(hu32 reth](h)}(hhh]j)}(hu32h]hu32}(hj~jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{jubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjjmodnameN classnameNjj)}j]j5 )}j- jajsbc.ssam_notifier_to_errnoasbuh1hhjwjubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubj)}(hreth]hret}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjsjubah}(h]h ]h"]h$]h&]hhuh1ja hj:jhhhjLjhM9ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj6jhhhjLjhM9ubah}(h]j1jah ](j j eh"]h$]h&]jj)jhuh1jhjLjhM9hj3jhhubj)}(hhh]h)}(h5Convert notifier return code to standard error value.h]h5Convert notifier return code to standard error value.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM2hjjhhubah}(h]h ]h"]h$]h&]uh1jhj3jhhhjLjhM9ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jjj5jjj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjjh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjjubjZ)}(hhh]j_)}(h2``u32 ret`` The notifier return value to convert. h](je)}(h ``u32 ret``h]jk)}(hjkh]hu32 ret}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjkubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM4hjkubj)}(hhh]h)}(h%The notifier return value to convert.h]h%The notifier return value to convert.}(hj0khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,khM4hj-kubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1j^hj,khM4hjkubah}(h]h ]h"]h$]h&]uh1jYhjjubh)}(h **Return**h]jD)}(hjRkh]hReturn}(hjTkhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjPkubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjjubh)}(hYReturns the negative error value encoded in **ret** or zero if **ret** indicates success.h](h,Returns the negative error value encoded in }(hjhkhhhNhNubjD)}(h**ret**h]hret}(hjpkhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjhkubh or zero if }(hjhkhhhNhNubjD)}(h**ret**h]hret}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjhkubh indicates success.}(hjhkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM6hjjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_registry (C struct)c.ssam_event_registryhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_event_registryh]j)}(hstruct ssam_event_registryh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM<ubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhhjkhM<ubj)}(hssam_event_registryh]j)}(hjkh]hssam_event_registry}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ](jjeh"]h$]h&]hhuh1jhjkhhhjkhM<ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjkhhhjkhM<ubah}(h]jkah ](j j eh"]h$]h&]jj)jhuh1jhjkhM<hjkhhubj)}(hhh]h)}(h0Registry specification used for enabling events.h]h0Registry specification used for enabling events.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMBhjkhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhM<ubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jlj5jlj6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hj!lhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjlubh:}(hjlhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhjlubj)}(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; };}hj:lsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMHhjlubh)}(h **Members**h]jD)}(hjKlh]hMembers}(hjMlhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjIlubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMOhjlubjZ)}(hhh](j_)}(hE``target_category`` Target category for the event registry requests. h](je)}(h``target_category``h]jk)}(hjjlh]htarget_category}(hjllhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjhlubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMDhjdlubj)}(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&]uh1jhjdlubeh}(h]h ]h"]h$]h&]uh1j^hjlhMDhjalubj_)}(h9``target_id`` Target ID for the event registry requests. h](je)}(h ``target_id``h]jk)}(hjlh]h target_id}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjlubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMEhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1j^hjlhMEhjalubj_)}(h8``cid_enable`` Command ID for the event-enable request. h](je)}(h``cid_enable``h]jk)}(hjlh]h cid_enable}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjlubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhjlubj)}(hhh]h)}(h(Command ID for the event-enable request.h]h(Command ID for the event-enable request.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMFhjlubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1j^hjlhMFhjalubj_)}(h9``cid_disable`` Command ID for the event-disable request.h](je)}(h``cid_disable``h]jk)}(hjmh]h cid_disable}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjmubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMFhjmubj)}(hhh]h)}(h)Command ID for the event-disable request.h]h)Command ID for the event-disable request.}(hj.mhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMGhj+mubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1j^hj*mhMFhjalubeh}(h]h ]h"]h$]h&]uh1jYhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubh)}(h**Description**h]jD)}(hjXmh]h Description}(hjZmhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjVmubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMJhj8hhubh)}(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 }(hjnmhhhNhNubh)}(h.:c:type:`struct ssam_event_id `h]jk)}(hjxmh]hstruct ssam_event_id}(hjzmhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjvmubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_event_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMHhjnmubh.}(hjnmhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjmhMHhj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_id (C struct)c.ssam_event_idhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h ssam_event_idh]j)}(hstruct ssam_event_idh](j)}(hjh]hstruct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMPubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmhhhjmhMPubj)}(h ssam_event_idh]j)}(hjmh]h ssam_event_id}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ](jjeh"]h$]h&]hhuh1jhjmhhhjmhMPubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjmhhhjmhMPubah}(h]jmah ](j j eh"]h$]h&]jj)jhuh1jhjmhMPhjmhhubj)}(hhh]h)}(h)Unique event ID used for enabling events.h]h)Unique event ID used for enabling events.}(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.hhMUhjmhhubah}(h]h ]h"]h$]h&]uh1jhjmhhhjmhMPubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jnj5jnj6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjnubh:}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMYhjnubj)}(hBstruct ssam_event_id { u8 target_category; u8 instance; };h]hBstruct ssam_event_id { u8 target_category; u8 instance; };}hj8nsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM[hjnubh)}(h **Members**h]jD)}(hjInh]hMembers}(hjKnhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjGnubah}(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`hjnubjZ)}(hhh](j_)}(h9``target_category`` Target category of the event source. h](je)}(h``target_category``h]jk)}(hjhnh]htarget_category}(hjjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjfnubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMWhjbnubj)}(hhh]h)}(h$Target category of the event source.h]h$Target category of the event source.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}nhMWhj~nubah}(h]h ]h"]h$]h&]uh1jhjbnubeh}(h]h ]h"]h$]h&]uh1j^hj}nhMWhj_nubj_)}(h-``instance`` Instance ID of the event source.h](je)}(h ``instance``h]jk)}(hjnh]hinstance}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjnubah}(h]h ]h"]h$]h&]uh1jdh/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.}(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.hhMXhjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ]h"]h$]h&]uh1j^hjnhMWhj_nubeh}(h]h ]h"]h$]h&]uh1jYhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubh)}(h**Description**h]jD)}(hjnh]h Description}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjnubah}(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[hj8hhubh)}(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 }(hjnhhhNhNubh)}(h::c:type:`struct ssam_event_registry `h]jk)}(hjoh]hstruct ssam_event_registry}(hjohhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjoubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_event_registryuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMYhjnubh.}(hjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!ohMYhj8hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_mask (C enum)c.ssam_event_maskhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_event_maskh]j)}(henum ssam_event_maskh](j)}(hjh]henum}(hjEohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAohhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhM`ubj)}(h h]h }(hjSohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAohhhjRohM`ubj)}(hssam_event_maskh]j)}(hj?oh]hssam_event_mask}(hjeohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaoubah}(h]h ](jjeh"]h$]h&]hhuh1jhjAohhhjRohM`ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj=ohhhjRohM`ubah}(h]j8oah ](j j eh"]h$]h&]jj)jhuh1jhjRohM`hj:ohhubj)}(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&]uh1jhj:ohhhjRohM`ubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4joj5joj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjoh]h Constants}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jChjoubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMghjoubjZ)}(hhh](j_)}(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](je)}(h``SSAM_EVENT_MASK_TARGET``h]jk)}(hjoh]hSSAM_EVENT_MASK_TARGET}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjoubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMlhjoubj)}(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.}(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.hhMjhjoubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1j^hjohMlhjoubj_)}(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](je)}(h``SSAM_EVENT_MASK_INSTANCE``h]jk)}(hjph]hSSAM_EVENT_MASK_INSTANCE}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjpubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMqhjoubj)}(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.}(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.hhMohjpubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1j^hjphMqhjoubj_)}(h{``SSAM_EVENT_MASK_NONE`` Run the callback for any event with matching target category. Do not do any additional filtering. h](je)}(h``SSAM_EVENT_MASK_NONE``h]jk)}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj:pubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMuhj6pubj)}(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.}(hjUphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMthjRpubah}(h]h ]h"]h$]h&]uh1jhj6pubeh}(h]h ]h"]h$]h&]uh1j^hjQphMuhjoubj_)}(h6``SSAM_EVENT_MASK_STRICT`` Do all the filtering above.h](je)}(h``SSAM_EVENT_MASK_STRICT``h]jk)}(hjvph]hSSAM_EVENT_MASK_STRICT}(hjxphhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjtpubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMwhjppubj)}(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&]uh1jhjppubeh}(h]h ]h"]h$]h&]uh1j^hjphMwhjoubeh}(h]h ]h"]h$]h&]uh1jYhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jSSAM_EVENT_REGISTRY (C macro)c.SSAM_EVENT_REGISTRYhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hSSAM_EVENT_REGISTRYh]j)}(hSSAM_EVENT_REGISTRYh]j)}(hSSAM_EVENT_REGISTRYh]j)}(hjph]hSSAM_EVENT_REGISTRY}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ](jjeh"]h$]h&]hhuh1jhjphhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubah}(h]h ]h"]h$]h&]hhjuh1jjjhjphhhjphMubah}(h]jpah ](j j eh"]h$]h&]jj)jhuh1jhjphMhjphhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjphhhjphMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jqj5jqj6j7j8uh1jhhhj8hNhNubh)}(h2``SSAM_EVENT_REGISTRY (tc, tid, cid_en, cid_dis)``h]jk)}(hjqh]h.SSAM_EVENT_REGISTRY (tc, tid, cid_en, cid_dis)}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj8hhubj)}(hDefine a new event registry. h]h)}(hDefine a new event registry.h]hDefine a new event registry.}(hj qhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubah}(h]h ]h"]h$]h&]uh1jhj.qhMhj8hhubj:)}(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]jD)}(hj;qh]h Parameters}(hj=qhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj9qubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj5qubjZ)}(hhh](j_)}(h8``tc`` Target category for the event registry requests. h](je)}(h``tc``h]jk)}(hjZqh]htc}(hj\qhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjXqubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjTqubj)}(hhh]h)}(h0Target category for the event registry requests.h]h0Target category for the event registry requests.}(hjsqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoqhMhjpqubah}(h]h ]h"]h$]h&]uh1jhjTqubeh}(h]h ]h"]h$]h&]uh1j^hjoqhMhjQqubj_)}(h3``tid`` Target ID for the event registry requests. h](je)}(h``tid``h]jk)}(hjqh]htid}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1j^hjqhMhjQqubj_)}(h4``cid_en`` Command ID for the event-enable request. h](je)}(h ``cid_en``h]jk)}(hjqh]hcid_en}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubj)}(hhh]h)}(h(Command ID for the event-enable request.h]h(Command ID for the event-enable request.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjqubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1j^hjqhMhjQqubj_)}(h6``cid_dis`` Command ID for the event-disable request. h](je)}(h ``cid_dis``h]jk)}(hjrh]hcid_dis}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjrubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjqubj)}(hhh]h)}(h)Command ID for the event-disable request.h]h)Command ID for the event-disable request.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjrubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1j^hjrhMhjQqubeh}(h]h ]h"]h$]h&]uh1jYhj5qubh)}(h **Return**h]jD)}(hj@rh]hReturn}(hjBrhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj>rubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj5qubh)}(hiReturns the :c:type:`struct ssam_event_registry ` specified by the given parameters.h](h Returns the }(hjVrhhhNhNubh)}(h::c:type:`struct ssam_event_registry `h]jk)}(hj`rh]hstruct ssam_event_registry}(hjbrhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj^rubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_event_registryuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjVrubh# specified by the given parameters.}(hjVrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj}rhMhj5qubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"ssam_event_notifier_flags (C enum)c.ssam_event_notifier_flagshNtauh1jhj8hhhNhNubj)}(hhh](j)}(hssam_event_notifier_flagsh]j)}(henum ssam_event_notifier_flagsh](j)}(hjh]henum}(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.hhMubj)}(h h]h }(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrhhhjrhMubj)}(hssam_event_notifier_flagsh]j)}(hjrh]hssam_event_notifier_flags}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ](jjeh"]h$]h&]hhuh1jhjrhhhjrhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjrhhhjrhMubah}(h]jrah ](j j eh"]h$]h&]jj)jhuh1jhjrhMhjrhhubj)}(hhh]h)}(hFlags for event notifiers.h]hFlags for event notifiers.}(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.hhMhjrhhubah}(h]h ]h"]h$]h&]uh1jhjrhhhjrhMubeh}(h]h ](j.enumeh"]h$]h&]j3j.j4jsj5jsj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj sh]h Constants}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jChj subah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjsubjZ)}(hhh]j_)}(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](je)}(h ``SSAM_EVENT_NOTIFIER_OBSERVER``h]jk)}(hj+sh]hSSAM_EVENT_NOTIFIER_OBSERVER}(hj-shhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj)subah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjDshhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjAsubah}(h]h ]h"]h$]h&]uh1jhj%subeh}(h]h ]h"]h$]h&]uh1j^hj@shMhj"subah}(h]h ]h"]h$]h&]uh1jYhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jssam_event_notifier (C struct)c.ssam_event_notifierhNtauh1jhj8hhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhjshhhjshMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj}shhhjshMubah}(h]jxsah ](j j eh"]h$]h&]jj)jhuh1jhjshMhjzshhubj)}(hhh]h)}(hNotifier block for SSAM events.h]hNotifier block for SSAM events.}(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.hhMhjshhubah}(h]h ]h"]h$]h&]uh1jhjzshhhjshMubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jsj5jsj6j7j8uh1jhhhj8hNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jChjsubh:}(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.hhMhjsubj)}(hstruct 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; };h]hstruct 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; };}hjtsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjsubh)}(h **Members**h]jD)}(hjth]hMembers}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jChjtubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhjsubjZ)}(hhh](j_)}(hF``base`` The base notifier block with callback function and priority. h](je)}(h``base``h]jk)}(hj4th]hbase}(hj6thhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj2tubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMhj.tubj)}(hhh]h)}(h`).h](je)}(h ``flags``h]jk)}(hjuh]hflags}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjuubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hjuh]henum ssam_event_notifier_flags}(hjuhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjuubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1hhjuhMhjuubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1j^hjuhMhj+tubeh}(h]h ]h"]h$]h&]uh1jYhjsubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ssam_notifier_unregister (C function)c.ssam_notifier_unregisterhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hZint ssam_notifier_unregister (struct ssam_controller *ctrl, struct ssam_event_notifier *n)h]j)}(hYint ssam_notifier_unregister(struct ssam_controller *ctrl, struct ssam_event_notifier *n)h](j)}(hinth]hint}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:23: ./include/linux/surface_aggregator/controller.hhMubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhhjvhMubj)}(hssam_notifier_unregisterh]j)}(hssam_notifier_unregisterh]hssam_notifier_unregister}(hj(vhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$vubah}(h]h ](jjeh"]h$]h&]hhuh1jhjvhhhjvhMubjb )}(h=(struct ssam_controller *ctrl, struct ssam_event_notifier *n)h](jh )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjDvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@vubj)}(h h]h }(hjQvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@vubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjbvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_vubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjdvmodnameN classnameNjj)}j]j5 )}j- j*vsbc.ssam_notifier_unregisterasbuh1hhj@vubj)}(h h]h }(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@vubj )}(hj h]h*}(hjvhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj@vubj)}(hctrlh]hctrl}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@vubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj` associated with this controller.h](hGet the }(hjcyhhhNhNubh)}(h :c:type:`struct device `h]jk)}(hjmyh]h struct device}(hjoyhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjkyubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjj)}j]jxc.ssam_controller_deviceasbjdeviceuh1hhjvxhMlhjcyubh! associated with this controller.}(hjcyhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMehj`yhhubah}(h]h ]h"]h$]h&]uh1jhj^xhhhjvxhMlubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jyj5jyj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjyh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjyubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjyubjZ)}(hhh]j_)}(hJ``struct ssam_controller *c`` The controller for which to get the device. h](je)}(h``struct ssam_controller *c``h]jk)}(hjyh]hstruct ssam_controller *c}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjyubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMghjyubj)}(hhh]h)}(h+The controller for which to get the device.h]h+The controller for which to get the device.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhMghjyubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1j^hjyhMghjyubah}(h]h ]h"]h$]h&]uh1jYhjyubh)}(h **Return**h]jD)}(hjzh]hReturn}(hj zhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjzubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjyubh)}(hrReturns the :c:type:`struct device ` associated with this controller, providing its lower-level transport.h](h Returns the }(hjzhhhNhNubh)}(h :c:type:`struct device `h]jk)}(hj'zh]h struct device}(hj)zhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj%zubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMihjzubhF associated with this controller, providing its lower-level transport.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjDzhMihjyubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_controller_get (C function)c.ssam_controller_gethNtauh1jhj8hhhNhNubj)}(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}(hjozhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkzhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hj}zhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkzhhhj|zhMubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjzmodnameN classnameNjj)}j]j5 )}j- ssam_controller_getsbc.ssam_controller_getasbuh1hhjkzhhhj|zhMubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkzhhhj|zhMubj )}(hj h]h*}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjkzhhhj|zhMubj)}(hssam_controller_geth]j)}(hjzh]hssam_controller_get}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubah}(h]h ](jjeh"]h$]h&]hhuh1jhjkzhhhj|zhMubjb )}(h(struct ssam_controller *c)h]jh )}(hstruct ssam_controller *ch](j)}(hjh]hstruct}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj)}(h h]h }(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj {modnameN classnameNjj)}j]jzc.ssam_controller_getasbuh1hhjzubj)}(h h]h }(hj%{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubj )}(hj h]h*}(hj3{hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjzubj)}(hj.h]hc}(hj@{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjzubah}(h]h ]h"]h$]h&]hhuh1ja hjkzhhhj|zhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjgzhhhj|zhMubah}(h]jbzah ](j j eh"]h$]h&]jj)jhuh1jhj|zhMhjdzhhubj)}(hhh]h)}(h(Increment reference count of controller.h]h(Increment reference count of controller.}(hji{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.chMhjf{hhubah}(h]h ]h"]h$]h&]uh1jhjdzhhhj|zhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j{j5j{j6j7j8uh1jhhhj8hNhNubj:)}(hv**Parameters** ``struct ssam_controller *c`` The controller. **Return** Returns the controller provided as input.h](h)}(h**Parameters**h]jD)}(hj{h]h Parameters}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj{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{ubjZ)}(hhh]j_)}(h.``struct ssam_controller *c`` The controller. h](je)}(h``struct ssam_controller *c``h]jk)}(hj{h]hstruct ssam_controller *c}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj{ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj{hMhj{ubah}(h]h ]h"]h$]h&]uh1jYhj{ubh)}(h **Return**h]jD)}(hj{h]hReturn}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj{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.}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_controller_put (C function)c.ssam_controller_puthNtauh1jhj8hhhNhNubj)}(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 }(hj9|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&|hhhj8|hMubj)}(hssam_controller_puth]j)}(hssam_controller_puth]hssam_controller_put}(hjK|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG|ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj&|hhhj8|hMubjb )}(h(struct ssam_controller *c)h]jh )}(hstruct ssam_controller *ch](j)}(hjh]hstruct}(hjg|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc|ubj)}(h h]h }(hjt|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc|ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj|modnameN classnameNjj)}j]j5 )}j- jM|sbc.ssam_controller_putasbuh1hhjc|ubj)}(h h]h }(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc|ubj )}(hj h]h*}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjc|ubj)}(hj.h]hc}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc|ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj_|ubah}(h]h ]h"]h$]h&]hhuh1ja hj&|hhhj8|hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj"|hhhj8|hMubah}(h]j|ah ](j j eh"]h$]h&]jj)jhuh1jhj8|hMhj|hhubj)}(hhh]h)}(h(Decrement reference count of controller.h]h(Decrement 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&]uh1jhj|hhhj8|hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j}j5j}j6j7j8uh1jhhhj8hNhNubj:)}(h?**Parameters** ``struct ssam_controller *c`` The controller.h](h)}(h**Parameters**h]jD)}(hj }h]h Parameters}(hj }hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj }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}ubjZ)}(hhh]j_)}(h-``struct ssam_controller *c`` The controller.h](je)}(h``struct ssam_controller *c``h]jk)}(hj*}h]hstruct ssam_controller *c}(hj,}hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(}ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjC}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&]uh1j^hj?}hMhj!}ubah}(h]h ]h"]h$]h&]uh1jYhj}ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&ssam_controller_statelock (C function)c.ssam_controller_statelockhNtauh1jhj8hhhNhNubj)}(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 ](jjeh"]h$]h&]hhuh1jhj}hhhj}hMubjb )}(h(struct ssam_controller *c)h]jh )}(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&] refdomainj.reftypej- reftargetj}modnameN classnameNjj)}j]j5 )}j- j}sbc.ssam_controller_statelockasbuh1hhj}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]hc}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj}ubah}(h]h ]h"]h$]h&]hhuh1ja hj}hhhj}hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj|}hhhj}hMubah}(h]jw}ah ](j j eh"]h$]h&]jj)jhuh1jhj}hMhjy}hhubj)}(hhh]h)}(h.Lock the controller against state transitions.h]h.Lock the controller against state transitions.}(hjC~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&]uh1jhjy}hhhj}hMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j[~j5j[~j6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hje~h]h Parameters}(hjg~hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjc~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_~ubjZ)}(hhh]j_)}(h6``struct ssam_controller *c`` The controller to lock. h](je)}(h``struct ssam_controller *c``h]jk)}(hj~h]hstruct ssam_controller *c}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj~ubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hj~hMhj{~ubah}(h]h ]h"]h$]h&]uh1jYhj_~ubh)}(h**Description**h]jD)}(hj~h]h Description}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj~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)}(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~hhhNhNubjk)}(h ``statelock``h]h statelock}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj~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.}(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.chMhj_~ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(ssam_controller_stateunlock (C function)c.ssam_controller_stateunlockhNtauh1jhj8hhhNhNubj)}(hhh](j)}(hubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj/hMqubjb )}(h?(struct ssam_request_sync *rqst, enum ssam_request_flags flags)h](jh )}(hstruct ssam_request_sync *rqsth](j)}(hjh]hstruct}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(hssam_request_synch]hssam_request_sync}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj~modnameN classnameNjj)}j]j5 )}j- jDsbc.ssam_request_sync_initasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjZubj)}(hrqsth]hrqst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjVubjh )}(henum ssam_request_flags flagsh](j)}(hjh]henum}(hjЉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubj)}(h h]h }(hj݉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubh)}(hhh]j)}(hssam_request_flagsh]hssam_request_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_request_sync_initasbuh1hhj̉ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj̉ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjVubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhj/hMqubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj/hMqubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhj/hMqhjhhubj)}(hhh]h)}(h(Initialize a synchronous request struct.h]h(Initialize a synchronous request struct.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMfhjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj/hMqubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j\j5j\j6j7j8uh1jhhhj8hNhNubj:)}(hX**Parameters** ``struct ssam_request_sync *rqst`` The request to initialize. ``enum ssam_request_flags flags`` The request flags. **Description** Initializes 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(). **Return** Returns zero on success or ``-EINVAL`` if the given flags are invalid.h](h)}(h**Parameters**h]jD)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjdubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMjhj`ubjZ)}(hhh](j_)}(h>``struct ssam_request_sync *rqst`` The request to initialize. h](je)}(h"``struct ssam_request_sync *rqst``h]jk)}(hjh]hstruct ssam_request_sync *rqst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMghjubj)}(hhh]h)}(hThe request to initialize.h]hThe request to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMghj|ubj_)}(h5``enum ssam_request_flags flags`` The request flags. h](je)}(h!``enum ssam_request_flags flags``h]jk)}(hjh]henum ssam_request_flags flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj׊hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjӊhMhhjԊubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjӊhMhhj|ubeh}(h]h ]h"]h$]h&]uh1jYhj`ubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMjhj`ubh)}(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().}(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.chMjhj`ubh)}(h **Return**h]jD)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMohj`ubh)}(hFReturns zero on success or ``-EINVAL`` if the given flags are invalid.h](hReturns zero on success or }(hj6hhhNhNubjk)}(h ``-EINVAL``h]h-EINVAL}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj6ubh if the given flags are invalid.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMohj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%ssam_request_sync_submit (C function)c.ssam_request_sync_submithNtauh1jhj8hhhNhNubj)}(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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhhjhMubj)}(hssam_request_sync_submith]j)}(hssam_request_sync_submith]hssam_request_sync_submit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjshhhjhMubjb )}(h>(struct ssam_controller *ctrl, struct ssam_request_sync *rqst)h](jh )}(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&] refdomainj.reftypej- reftargetjԋmodnameN classnameNjj)}j]j5 )}j- jsbc.ssam_request_sync_submitasbuh1hhjubj)}(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&]noemphhhuh1jg hjubjh )}(hstruct ssam_request_sync *rqsth](j)}(hjh]hstruct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hssam_request_synch]hssam_request_sync}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjFmodnameN classnameNjj)}j]jc.ssam_request_sync_submitasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj )}(hj h]h*}(hjphhhNhNubah}(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&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjshhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjohhhjhMubah}(h]jjah ](j j eh"]h$]h&]jj)jhuh1jhjhMhjlhhubj)}(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&]uh1jhjlhhhjhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjɌh]h Parameters}(hjˌhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjnjubah}(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ÌubjZ)}(hhh](j_)}(hR``struct ssam_controller *ctrl`` The controller with which to submit the request. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h0The controller with which to submit the request.h]h0The controller with which to submit the request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjߌubj_)}(h:``struct ssam_request_sync *rqst`` The request to submit. h](je)}(h"``struct ssam_request_sync *rqst``h]jk)}(hj!h]hstruct ssam_request_sync *rqst}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe request to submit.h]hThe request to submit.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj6hMhjߌubeh}(h]h ]h"]h$]h&]uh1jYhjÌubh)}(h**Description**h]jD)}(hj\h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjZubah}(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)}(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 }(hjrhhhNhNubjk)}(h``NULL``h]hNULL}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjrubhs if no response is expected) and command message data. This function does not wait for the request to be completed.}(hjrhhhNhNubeh}(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)}(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.chMhjÌubh)}(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.chMhjÌubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_request_do_sync (C function)c.ssam_request_do_synchNtauh1jhj8hhhNhNubj)}(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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj͍hhhjߍhMubj)}(hssam_request_do_synch]j)}(hssam_request_do_synch]hssam_request_do_sync}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj͍hhhjߍhMubjb )}(hZ(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp)h](jh )}(hstruct ssam_controller *ctrlh](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_controllerh]hssam_controller}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj.modnameN classnameNjj)}j]j5 )}j- jsbc.ssam_request_do_syncasbuh1hhj ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj )}(hj h]h*}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubj)}(hctrlh]hctrl}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hconst struct ssam_request *spech](j)}(hjo h]hconst}(hjhhhNhNubah}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jHc.ssam_request_do_syncasbuh1hhj|ubj)}(h h]h }(hj׎hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj|ubj)}(hspech]hspec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_response *rsph](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_responseh]h ssam_response}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj+modnameN classnameNjj)}j]jHc.ssam_request_do_syncasbuh1hhjubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjUhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrsph]hrsp}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hj͍hhhjߍhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjɍhhhjߍhMubah}(h]jčah ](j j eh"]h$]h&]jj)jhuh1jhjߍhMhjƍhhubj)}(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&]uh1jhjƍhhhjߍhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubjZ)}(hhh](j_)}(hY``struct ssam_controller *ctrl`` The controller via which the request will be submitted. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hj͏h]hstruct ssam_controller *ctrl}(hjϏhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjˏubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjǏubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjďubj_)}(hK``const struct ssam_request *spec`` The request specification and payload. h](je)}(h#``const struct ssam_request *spec``h]jk)}(hjh]hconst struct ssam_request *spec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjďubj_)}(h3``struct ssam_response *rsp`` The response buffer. h](je)}(h``struct ssam_response *rsp``h]jk)}(hj?h]hstruct ssam_response *rsp}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj=ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhj9ubj)}(hhh]h)}(hThe response buffer.h]hThe response buffer.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1j^hjThMhjďubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjxubah}(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]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j-ssam_request_do_sync_with_buffer (C function)"c.ssam_request_do_sync_with_bufferhNtauh1jhj8hhhNhNubj)}(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}(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.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h ssam_request_do_sync_with_bufferh]j)}(h ssam_request_do_sync_with_bufferh]h ssam_request_do_sync_with_buffer}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubjb )}(hq(struct ssam_controller *ctrl, const struct ssam_request *spec, struct ssam_response *rsp, struct ssam_span *buf)h](jh )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjCmodnameN classnameNjj)}j]j5 )}j- j sb"c.ssam_request_do_sync_with_bufferasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjohhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hconst struct ssam_request *spech](j)}(hjo 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_requesth]h ssam_request}(hjΑhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjˑubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjБmodnameN classnameNjj)}j]j]"c.ssam_request_do_sync_with_bufferasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hspech]hspec}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_response *rsph](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h ssam_responseh]h ssam_response}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- 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*}(hjjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hrsph]hrsp}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j]"c.ssam_request_do_sync_with_bufferasbuh1hhjubj)}(h h]h }(hj̒hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjڒhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjސhhhjhMubah}(h]jِah ](j j eh"]h$]h&]jj)jhuh1jhjhMhjېhhubj)}(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.}(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&]uh1jhjېhhhjhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j)j5j)j6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj1ubah}(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-ubjZ)}(hhh](j_)}(hY``struct ssam_controller *ctrl`` The controller via which the request will be submitted. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hjRh]hstruct ssam_controller *ctrl}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjPubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjLubj)}(hhh]h)}(h7The controller via which the request will be submitted.h]h7The controller via which the request will be submitted.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1j^hjghMhjIubj_)}(hK``const struct ssam_request *spec`` The request specification and payload. h](je)}(h#``const struct ssam_request *spec``h]jk)}(hjh]hconst struct ssam_request *spec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjIubj_)}(h3``struct ssam_response *rsp`` The response buffer. h](je)}(h``struct ssam_response *rsp``h]jk)}(hjēh]hstruct ssam_response *rsp}(hjƓhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj“ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjݓhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjٓhMhjړubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjٓhMhjIubj_)}(hC``struct ssam_span *buf`` The buffer for the request message data. h](je)}(h``struct ssam_span *buf``h]jk)}(hjh]hstruct ssam_span *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h(The buffer for the request message data.h]h(The buffer for the request message data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjIubeh}(h]h ]h"]h$]h&]uh1jYhj-ubh)}(h**Description**h]jD)}(hj8h]h Description}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj6ubah}(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)}(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.}(hjNhhhNhNubah}(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)}(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.}(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)}(h **Return**h]jD)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jChjlubah}(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 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.chMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#ssam_notifier_register (C function)c.ssam_notifier_registerhNtauh1jhj8hhhNhNubj)}(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}(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.chM ubj)}(h h]h }(hj”hhhNhNubah}(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 ](jjeh"]h$]h&]hhuh1jhjhhhjhM ubjb )}(h=(struct ssam_controller *ctrl, struct ssam_event_notifier *n)h](jh )}(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&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- j֔sbc.ssam_notifier_registerasbuh1hhjubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_event_notifier *nh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubh)}(hhh]j)}(hssam_event_notifierh]hssam_event_notifier}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j*c.ssam_notifier_registerasbuh1hhj^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)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h)}(hRegister an event notifier.h]hRegister 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.chM hjߕhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 hjubjZ)}(hhh](j_)}(hM``struct ssam_controller *ctrl`` The controller to register the notifier on. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hj#h]hstruct ssam_controller *ctrl}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj!ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h+The controller to register the notifier on.h]h+The controller to register the notifier on.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hM hj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj8hM hjubj_)}(hB``struct ssam_event_notifier *n`` The event notifier to register. h](je)}(h!``struct ssam_event_notifier *n``h]jk)}(hj\h]hstruct ssam_event_notifier *n}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjZubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjVubj)}(hhh]h)}(hThe event notifier to register.h]hThe event notifier to register.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhM hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1j^hjqhM hjubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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)}(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 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:25: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(h **Return**h]jD)}(hj͖h]hReturn}(hjϖhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj˖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 hjubh)}(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, }(hjhhhNhNubjk)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh if there have already been }(hjhhhNhNubjk)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubhP notifiers for the event ID/type associated with the notifier block registered, }(hjhhhNhNubjk)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh 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.}(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.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j'__ssam_notifier_unregister (C function)c.__ssam_notifier_unregisterhNtauh1jhj8hhhNhNubj)}(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}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM[ ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhhjVhM[ ubj)}(h__ssam_notifier_unregisterh]j)}(h__ssam_notifier_unregisterh]h__ssam_notifier_unregister}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ](jjeh"]h$]h&]hhuh1jhjDhhhjVhM[ ubjb )}(hK(struct ssam_controller *ctrl, struct ssam_event_notifier *n, bool disable)h](jh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jksbc.__ssam_notifier_unregisterasbuh1hhjubj)}(h h]h }(hj×hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjїhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hjޗhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj}ubjh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.__ssam_notifier_unregisterasbuh1hhjubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjAhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hjh]hn}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj}ubjh )}(h bool disableh](j)}(hjh]hbool}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hdisableh]hdisable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj}ubeh}(h]h ]h"]h$]h&]hhuh1ja hjDhhhjVhM[ ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj@hhhjVhM[ ubah}(h]j;ah ](j j eh"]h$]h&]jj)jhuh1jhjVhM[ hj=hhubj)}(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&]uh1jhj=hhhjVhM[ ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jØj5jØj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj͘h]h Parameters}(hjϘhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj˘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ǘubjZ)}(hhh](j_)}(hU``struct ssam_controller *ctrl`` The controller the notifier has been registered on. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMJ hjubj)}(hhh]h)}(h3The controller the notifier has been registered on.h]h3The controller the notifier has been registered on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMJ hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMJ hjubj_)}(hD``struct ssam_event_notifier *n`` The event notifier to unregister. h](je)}(h!``struct ssam_event_notifier *n``h]jk)}(hj%h]hstruct ssam_event_notifier *n}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj#ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chMK hjubj)}(hhh]h)}(h!The event notifier to unregister.h]h!The event notifier to unregister.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMK hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj:hMK hjubj_)}(hG``bool disable`` Whether to disable the corresponding event on the EC. h](je)}(h``bool disable``h]jk)}(hj^h]h bool disable}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj\ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chML hjXubj)}(hhh]h)}(h5Whether to disable the corresponding event on the EC.h]h5Whether to disable the corresponding event on the EC.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshML hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1j^hjshML hjubeh}(h]h ]h"]h$]h&]uh1jYhjǘubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 }(hjhhhNhNubjk)}(h ``disable``h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh equals }(hjhhhNhNubjk)}(h``true``h]htrue}(hjəhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, 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.chMN 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 }(hjhhhNhNubjk)}(h ``disable``h]hdisable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh as }(hjhhhNhNubjk)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh" avoids communication with the EC.}(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.chMR hjǘubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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ǘ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, }(hj-hhhNhNubjk)}(h ``-ENOENT``h]h-ENOENT}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj-ubh 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.}(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.chMV hjǘubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)ssam_controller_event_enable (C function)c.ssam_controller_event_enablehNtauh1jhj8hhhNhNubj)}(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}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjhhh/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&]uh1jhjjhhhj|hM ubj)}(hssam_controller_event_enableh]j)}(hssam_controller_event_enableh]hssam_controller_event_enable}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjjhhhj|hM ubjb )}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](jh )}(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&] refdomainj.reftypej- reftargetj˚modnameN classnameNjj)}j]j5 )}j- jsbc.ssam_controller_event_enableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_event_registry regh](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_registryh]hssam_event_registry}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj=modnameN classnameNjj)}j]jc.ssam_controller_event_enableasbuh1hhjubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hregh]hreg}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_event_id idh](j)}(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_event_idh]h ssam_event_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.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&]noemphhhuh1jg hjubjh )}(hu8 flagsh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_controller_event_enableasbuh1hhjߛubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߛubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjߛubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjjhhhj|hM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjfhhhj|hM ubah}(h]jaah ](j j eh"]h$]h&]jj)jhuh1jhj|hM hjchhubj)}(hhh]h)}(hEnable the specified event.h]hEnable the specified event.}(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 hj9hhubah}(h]h ]h"]h$]h&]uh1jhjchhhj|hM ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jTj5jTj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj\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 hjXubjZ)}(hhh](j_)}(hI``struct ssam_controller *ctrl`` The controller to enable the event for. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hj}h]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj{ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjwubj)}(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&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1j^hjhM hjtubj_)}(hU``struct ssam_event_registry reg`` The event registry to use for enabling the event. h](je)}(h"``struct ssam_event_registry reg``h]jk)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj˜hM hjtubj_)}(hM``struct ssam_event_id id`` The event ID specifying the event to be enabled. h](je)}(h``struct ssam_event_id id``h]jk)}(hjh]hstruct ssam_event_id id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h0The event ID specifying the event to be enabled.h]h0The event ID specifying the event to be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM hjtubj_)}(h>``u8 flags`` The SAM event flags used for enabling the event. h](je)}(h ``u8 flags``h]jk)}(hj(h]hu8 flags}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj&ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hM hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1j^hj=hM hjtubeh}(h]h ]h"]h$]h&]uh1jYhjXubh)}(h**Description**h]jD)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jChjaubah}(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 hjXubh)}(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.}(hjyhhhNhNubah}(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 hjXubh)}(h**Note**h]jD)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 hjXubh)}(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 hjXubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 hjXubh)}(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ǝhhhNhNubjk)}(h ``-ENOSPC``h]h-ENOSPC}(hjϝhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjǝubhI if the reference count for the specified event has reached its maximum, }(hjǝhhhNhNubjk)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjǝ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 hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j*ssam_controller_event_disable (C function)c.ssam_controller_event_disablehNtauh1jhj8hhhNhNubj)}(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}(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.chM ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hM ubj)}(hssam_controller_event_disableh]j)}(hssam_controller_event_disableh]hssam_controller_event_disable}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj(hM ubjb )}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](jh )}(hstruct ssam_controller *ctrlh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjwmodnameN classnameNjj)}j]j5 )}j- j=sbc.ssam_controller_event_disableasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjSubj)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjOubjh )}(hstruct ssam_event_registry regh](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_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhjŞubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŞubj)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjŞubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjOubjh )}(hstruct ssam_event_id idh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(h ssam_event_idh]h ssam_event_id}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjLmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhj(ubj)}(h h]h }(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hidh]hid}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjOubjh )}(hu8 flagsh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_controller_event_disableasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjOubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhj(hM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj(hM ubah}(h]j ah ](j j eh"]h$]h&]jj)jhuh1jhj(hM hjhhubj)}(hhh]h)}(hDisable the specified event.h]hDisable 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&]uh1jhjhhhj(hM ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 hjubjZ)}(hhh](j_)}(hJ``struct ssam_controller *ctrl`` The controller to disable the event for. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hj)h]hstruct ssam_controller *ctrl}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj'ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hM hj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1j^hj>hM hj ubj_)}(hV``struct ssam_event_registry reg`` The event registry to use for disabling the event. h](je)}(h"``struct ssam_event_registry reg``h]jk)}(hjbh]hstruct ssam_event_registry reg}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj`ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:25: ./drivers/platform/surface/aggregator/controller.chM hj\ubj)}(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&]uh1hhjwhM hjxubah}(h]h ]h"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]uh1j^hjwhM hj ubj_)}(hN``struct ssam_event_id id`` The event ID specifying the event to be disabled. h](je)}(h``struct ssam_event_id id``h]jk)}(hjh]hstruct ssam_event_id id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM hj ubj_)}(h5``u8 flags`` The flags used when enabling the event. h](je)}(h ``u8 flags``h]jk)}(hjԠh]hu8 flags}(hj֠hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjҠubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjΠubeh}(h]h ]h"]h$]h&]uh1j^hjhM hj ubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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 hjubh)}(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 hjubh)}(h**Note**h]jD)}(hj6h]hNote}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj4ubah}(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()/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.}(hjLhhhNhNubah}(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]jD)}(hj]h]hReturn}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj[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 hjubh)}(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, }(hjshhhNhNubjk)}(h ``-ENOENT``h]h-ENOENT}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjsubh 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.}(hjshhhNhNubeh}(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&]uh1j9hj8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_get_controller (C function)c.ssam_get_controllerhNtauh1jhj8hhhNhNubj)}(hhh](j)}(h3struct ssam_controller * ssam_get_controller (void)h]j)}(h1struct ssam_controller *ssam_get_controller(void)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK7ubj)}(h h]h }(hj¡hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubh)}(hhh]j)}(hssam_controllerh]hssam_controller}(hjӡhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjСubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjաmodnameN classnameNjj)}j]j5 )}j- ssam_get_controllersbc.ssam_get_controllerasbuh1hhjhhhjhK7ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK7ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhK7ubj)}(hssam_get_controllerh]j)}(hjh]hssam_get_controller}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhK7ubjb )}(h(void)h]jh )}(hvoidh]j)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]noemphhhuh1jg hj&ubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhK7ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK7ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhK7hjhhubj)}(hhh]h)}(h!Get reference to SSAM controller.h]h!Get reference to SSAM controller.}(hjXhhhNhNubah}(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/hjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK7ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jpj5jpj6j7j8uh1jhhhj8hNhNubj:)}(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]jD)}(hjzh]h Parameters}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjxubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK3hjtubjZ)}(hhh]j_)}(h``void`` no arguments h](je)}(h``void``h]jk)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:28: ./drivers/platform/surface/aggregator/core.chK6hjubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhK6hjubah}(h]h ]h"]h$]h&]uh1jYhjtubh)}(h**Description**h]jD)}(hjԢh]h Description}(hj֢hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjҢ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.chK8hjtubh)}(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](h` with the given parameters. h]h)}(hXInitialize a :c:type:`struct ssam_device_id ` with the given parameters.h](h Initialize a }(hj*hhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]jk)}(hj4h]hstruct ssam_device_id}(hj6hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj2ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKLhj*ubh with the given parameters.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQhKLhj&ubah}(h]h ]h"]h$]h&]uh1jhjQhKLhjЧhhubj:)}(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]jD)}(hjhh]h Parameters}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKPhjbubjZ)}(hhh](j_)}(h``d`` Domain of the device. h](je)}(h``d``h]jk)}(hjh]hd}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKNhjubj)}(hhh]h)}(hDomain of the device.h]hDomain of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKNhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKNhj~ubj_)}(h'``cat`` Target category of the device. h](je)}(h``cat``h]jk)}(hjh]hcat}(hj¬hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hj٬hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjլhKOhj֬ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjլhKOhj~ubj_)}(h!``tid`` Target ID of the device. h](je)}(h``tid``h]jk)}(hjh]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKPhjubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKPhj~ubj_)}(h#``iid`` Instance ID of the device. h](je)}(h``iid``h]jk)}(hj2h]hiid}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj0ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKQhj,ubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhKQhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1j^hjGhKQhj~ubj_)}(h$``fun`` Sub-function of the device. h](je)}(h``fun``h]jk)}(hjkh]hfun}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjiubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKRhjeubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKRhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j^hjhKRhj~ubeh}(h]h ]h"]h$]h&]uh1jYhjbubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKThjbubh)}(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]jk)}(hjƭh]hstruct ssam_device_id}(hjȭhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjĭubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKThjubh with the given parameters. See }(hjhhhNhNubh)}(h2:c:type:`struct ssam_device_uid `h]jk)}(hjh]hstruct ssam_device_uid}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_uiduh1hhjhKThjubh: for details regarding the parameters. The special values }(hjhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, }(hjhhhNhNubjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, and }(hjhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjhhhNhNubjk)}(h``match_flags``h]h match_flags}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh% field based on the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKThjbubh)}(h**Note**h]jD)}(hj[h]hNote}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjYubah}(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[hjbubh)}(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 }(hjqhhhNhNubjD)}(h**d**h]hd}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjqubh and }(hjqhhhNhNubjD)}(h**cat**h]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjqubh must be valid }(hjqhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK[hjqubh values, the parameters }(hjqhhhNhNubjD)}(h**tid**h]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjqubh, }(hjqhhhNhNubjD)}(h**iid**h]hiid}(hjӮhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjqubh, and }(hjqhhhNhNubjD)}(h**fun**h]hfun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjqubh must be either valid }(hjqhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhjhK[hjqubh values or }(hjqhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubh, }(hjqhhhNhNubjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubh, or }(hjqhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjqubh, respectively. Other non-}(hjqhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjRh]hu8}(hjThhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjPubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhjhK[hjqubh values are not allowed.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK[hjbubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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 ](jjeh"]h$]h&]hhuh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhK~ubah}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhK~ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhK~hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhK~ubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jɯj5jɯj6j7j8uh1jhhhjЧhNhNubh)}(h"``SSAM_VDEV (cat, tid, iid, fun)``h]jk)}(hjϯh]hSSAM_VDEV (cat, tid, iid, fun)}(hjѯhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjͯ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.hhKhjЧ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 }(hjhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]jk)}(hjh]hstruct ssam_device_id}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKkhjubh- as virtual device with the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKkhjubah}(h]h ]h"]h$]h&]uh1jhjhKkhjЧhhubj:)}(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]jD)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj%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.hhKohj!ubjZ)}(hhh](j_)}(h'``cat`` Target category of the device. h](je)}(h``cat``h]jk)}(hjFh]hcat}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjDubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKmhj@ubj)}(hhh]h)}(hTarget category of the device.h]hTarget category of the device.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hKmhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1j^hj[hKmhj=ubj_)}(h!``tid`` Target ID of the device. h](je)}(h``tid``h]jk)}(hjh]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj}ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKnhjyubj)}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1j^hjhKnhj=ubj_)}(h#``iid`` Instance ID of the device. h](je)}(h``iid``h]jk)}(hjh]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKohjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjͰhKohj=ubj_)}(h$``fun`` Sub-function of the device. h](je)}(h``fun``h]jk)}(hjh]hfun}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKphjubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKphj=ubeh}(h]h ]h"]h$]h&]uh1jYhj!ubh)}(h**Description**h]jD)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj*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.hhKrhj!ubh)}(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 }(hjBhhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]jk)}(hjLh]hstruct ssam_device_id}(hjNhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjJubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKrhjBubh6 with the given parameters in the virtual domain. See }(hjBhhhNhNubh)}(h2:c:type:`struct ssam_device_uid `h]jk)}(hjph]hstruct ssam_device_uid}(hjrhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjnubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_uiduh1hhjihKrhjBubh: for details regarding the parameters. The special values }(hjBhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubh, }(hjBhhhNhNubjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubh, and }(hjBhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjBhhhNhNubjk)}(h``match_flags``h]h match_flags}(hjDZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjBubh% field based on the given parameters.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjihKrhj!ubh)}(h**Note**h]jD)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj߱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.hhKyhj!ubh)}(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 }(hjhhhNhNubjD)}(h**cat**h]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh must be a valid }(hjhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKyhjubh value, the parameters }(hjhhhNhNubjD)}(h**tid**h]htid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh, }(hjhhhNhNubjD)}(h**iid**h]hiid}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh, and }(hjhhhNhNubjD)}(h**fun**h]hfun}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh must be either valid }(hjhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjmh]hu8}(hjohhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjkubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhj0hKyhjubh values or }(hjhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, }hjsbjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, or }(hjhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, respectively. Other non-}(hjhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjƲh]hu8}(hjȲhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjIJubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhj0hKyhjubh values are not allowed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0hKyhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hjh]h SSAM_SDEV}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhj$hKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj$hKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4j=j5j=j6j7j8uh1jhhhjЧhNhNubh)}(h"``SSAM_SDEV (cat, tid, iid, fun)``h]jk)}(hjCh]hSSAM_SDEV (cat, tid, iid, fun)}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjAubah}(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 }(hj]hhhNhNubh)}(h0:c:type:`struct ssam_device_id `h]jk)}(hjgh]hstruct ssam_device_id}(hjihhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjeubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj]ubh2 as physical SSH device with the given parameters.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjYubah}(h]h ]h"]h$]h&]uh1jhjhKhjЧhhubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjZ)}(hhh](j_)}(h'``cat`` Target category of the device. h](je)}(h``cat``h]jk)}(hjh]hcat}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjϳhKhjubj_)}(h!``tid`` Target ID of the device. h](je)}(h``tid``h]jk)}(hjh]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hTarget ID of the device.h]hTarget ID of the device.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjubj_)}(h#``iid`` Instance ID of the device. h](je)}(h``iid``h]jk)}(hj,h]hiid}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj*ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj&ubj)}(hhh]h)}(hInstance ID of the device.h]hInstance ID of the device.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1j^hjAhKhjubj_)}(h$``fun`` Sub-function of the device. h](je)}(h``fun``h]jk)}(hjeh]hfun}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjcubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj_ubj)}(hhh]h)}(hSub-function of the device.h]hSub-function of the device.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1j^hjzhKhjubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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]jk)}(hjh]hstruct ssam_device_id}(hj´hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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]jk)}(hjh]hstruct ssam_device_uid}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_uiduh1hhjݴhKhjubh: for details regarding the parameters. The special values }(hjhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, }(hjhhhNhNubjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh, and }(hjhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh can be used to specify that matching should ignore target ID, instance ID, and/or sub-function, respectively. This macro initializes the }(hjhhhNhNubjk)}(h``match_flags``h]h match_flags}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh% field based on the given parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjݴhKhjubh)}(h**Note**h]jD)}(hjUh]hNote}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjSubah}(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 }(hjkhhhNhNubjD)}(h**cat**h]hcat}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jChjkubh must be a valid }(hjkhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjkubh value, the parameters }(hjkhhhNhNubjD)}(h**tid**h]htid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjkubh, }(hjkhhhNhNubjD)}(h**iid**h]hiid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjkubh, and }(hjkhhhNhNubjD)}(h**fun**h]hfun}(hj͵hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjkubh must be either valid }(hjkhhhNhNubh)}(h :c:type:`u8`h]jk)}(hjh]hu8}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjߵubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhjhKhjkubh values or }(hjkhhhNhNubjk)}(h``SSAM_SSH_TID_ANY``h]hSSAM_SSH_TID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjkubh, }hjksbjk)}(h``SSAM_SSH_IID_ANY``h]hSSAM_SSH_IID_ANY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjkubh, or }(hjkhhhNhNubjk)}(h``SSAM_SSH_FUN_ANY``h]hSSAM_SSH_FUN_ANY}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjkubh, respectively. Other non-}(hjkhhhNhNubh)}(h :c:type:`u8`h]jk)}(hj:h]hu8}(hj<hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj8ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjju8uh1hhjhKhjkubh values are not allowed.}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(hjhhhNhNubah}(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 ](jjeh"]h$]h&]hhuh1jhj}hhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjyhhhjhKubah}(h]jtah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjvhhubj)}(hhh]h)}(hSSAM client device.h]hSSAM 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.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjvhhhjhKubeh}(h]h ](j.structeh"]h$]h&]j3j.j4j۶j5j۶j6j7j8uh1jhhhjЧhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh:}(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.hhKhj߶ubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj߶ubh)}(h **Members**h]jD)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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߶ubjZ)}(hhh](j_)}(h3``dev`` Driver model representation of the device. h](je)}(h``dev``h]jk)}(hj0h]hdev}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj.ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj*ubj)}(hhh]h)}(h*Driver model representation of the device.h]h*Driver model representation of the device.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhKhjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1j^hjEhKhj'ubj_)}(h/``ctrl`` SSAM controller managing this device. h](je)}(h``ctrl``h]jk)}(hjih]hctrl}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjgubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjcubj)}(hhh]h)}(h%SSAM controller managing this device.h]h%SSAM controller managing this device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~hKhjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1j^hj~hKhj'ubj_)}(h$``uid`` UID identifying the device. h](je)}(h``uid``h]jk)}(hjh]huid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhKhj'ubj_)}(hW``flags`` Device state flags, see :c:type:`enum ssam_device_flags `.h](je)}(h ``flags``h]jk)}(hj۷h]hflags}(hjݷhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjٷubah}(h]h ]h"]h$]h&]uh1jdh/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 }(hjhhhNhNubh)}(h4:c:type:`enum ssam_device_flags `h]jk)}(hjh]henum ssam_device_flags}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_flagsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjշubeh}(h]h ]h"]h$]h&]uh1j^hjhKhj'ubeh}(h]h ]h"]h$]h&]uh1jYhj߶ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKubj)}(h h]h }(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhhjehKubj)}(hssam_device_driverh]j)}(hjRh]hssam_device_driver}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtubah}(h]h ](jjeh"]h$]h&]hhuh1jhjThhhjehKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjPhhhjehKubah}(h]jKah ](j j eh"]h$]h&]jj)jhuh1jhjehKhjMhhubj)}(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&]uh1jhjMhhhjehKubeh}(h]h ](j.structeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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](jD)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh:}(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); };}hj׸sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh)}(h **Members**h]jD)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjZ)}(hhh](j_)}(h(``driver`` Base driver model structure. h](je)}(h ``driver``h]jk)}(hjh]hdriver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hBase driver model structure.h]hBase driver model structure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjubj_)}(hP``match_table`` Match table specifying which devices the driver should bind to. h](je)}(h``match_table``h]jk)}(hj@h]h match_table}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj>ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj:ubj)}(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.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1j^hjUhKhjubj_)}(h=``probe`` Called when the driver is being bound to a device. h](je)}(h ``probe``h]jk)}(hjyh]hprobe}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjwubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjsubj)}(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&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjubj_)}(hC``remove`` Called when the driver is being unbound from the device.h](je)}(h ``remove``h]jk)}(hjh]hremove}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjǹhKhjubeh}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(hj hhhNhNubah}(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)}(his_ssam_deviceh]j)}(his_ssam_deviceh]his_ssam_device}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubjb )}(h(struct device *d)h]jh )}(hstruct device *dh](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hdeviceh]hdevice}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjhmodnameN classnameNjj)}j]j5 )}j- j.sbc.is_ssam_deviceasbuh1hhjDubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjDubj)}(hdh]hd}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj@ubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjZ)}(hhh]j_)}(h5``struct device *d`` The device to test the type of. h](je)}(h``struct device *d``h]jk)}(hj h]hstruct device *d}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubj)}(hhh]h)}(hThe device to test the type of.h]hThe device to test the type of.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj!hKhjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h **Return**h]jD)}(hjGh]hReturn}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjEubah}(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)}(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 }(hj]hhhNhNubjk)}(h``true``h]htrue}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj]ubh$ if the specified device is of type }(hj]hhhNhNubh)}(h*:c:type:`struct ssam_device `h]jk)}(hjyh]hstruct ssam_device}(hj{hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjwubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_deviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj]ubh!, i.e. the device type points to }(hj]hhhNhNubjk)}(h``ssam_device_type``h]hssam_device_type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj]ubh, and }(hj]hhhNhNubjk)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj]ubh otherwise.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hj߻h]hto_ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh/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ݻhhhjhKubah}(h]jػah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjڻhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjڻhhhjhKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubh)}(h``to_ssam_device (d)``h]jk)}(hjh]hto_ssam_device (d)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj1ubah}(h]h ]h"]h$]h&]uh1jhjChKhjЧhhubj:)}(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]jD)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjJubjZ)}(hhh]j_)}(h``d`` The device to cast. h](je)}(h``d``h]jk)}(hjoh]hd}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjmubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjiubj)}(hhh]h)}(hThe device to cast.h]hThe device to cast.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjfubah}(h]h ]h"]h$]h&]uh1jYhjJubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjJubh)}(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]jk)}(hjʼh]h struct device}(hj̼hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjȼubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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]jk)}(hjh]hstruct ssam_device}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_deviceuh1hhjhKhjubhK. The caller has to ensure that the given device is actually enclosed in a }(hjhhhNhNubh)}(h*:c:type:`struct ssam_device `h]jk)}(hjh]hstruct ssam_device}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_deviceuh1hhjhKhjubh#, e.g. by calling is_ssam_device().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjJubh)}(h **Return**h]jD)}(hj:h]hReturn}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj8ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjJubh)}(hdReturns a pointer to the :c:type:`struct ssam_device ` wrapping the given device **d**.h](hReturns a pointer to the }(hjPhhhNhNubh)}(h*:c:type:`struct ssam_device `h]jk)}(hjZh]hstruct ssam_device}(hj\hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjXubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjj ssam_deviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjPubh wrapping the given device }(hjPhhhNhNubjD)}(h**d**h]hd}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjPubh.}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwhKhjJubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh/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 ](j j eh"]h$]h&]jj)jhuh1jhj˽hKhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhj˽hKubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubh)}(h``to_ssam_device_driver (d)``h]jk)}(hjh]hto_ssam_device_driver (d)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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.}(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&]uh1jhjhKhjЧhhubj:)}(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]jD)}(hjh]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubjZ)}(hhh]j_)}(h``d`` The driver to cast. h](je)}(h``d``h]jk)}(hj>h]hd}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj<ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhj8ubj)}(hhh]h)}(hThe driver to cast.h]hThe driver to cast.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShKhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1j^hjShKhj5ubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjyh]h Description}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjwubah}(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)}(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]jk)}(hjh]hstruct device_driver}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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]jk)}(hjh]hstruct ssam_device_driver}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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]jk)}(hjh]hstruct ssam_device_driver}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj޾ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_driveruh1hhjhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubh)}(h **Return**h]jD)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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)}(h{Returns the pointer to the :c:type:`struct ssam_device_driver ` wrapping the given device driver **d**.h](hReturns the pointer to the }(hjhhhNhNubh)}(h8:c:type:`struct ssam_device_driver `h]jk)}(hj)h]hstruct ssam_device_driver}(hj+hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjssam_device_driveruh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhKhjubh" wrapping the given device driver }(hjhhhNhNubjD)}(h**d**h]hd}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hReturns ``true`` if the device has been marked as hot-removed.h](hReturns }(hj|hhhNhNubjk)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj|ubh. if the device has been marked as hot-removed.}(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.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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 }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM-ubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- ssam_device_getsbc.ssam_device_getasbuh1hhjhhhjhM-ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM-ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM-ubj)}(hssam_device_geth]j)}(hjh]hssam_device_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM-ubjb )}(h(struct ssam_device *sdev)h]jh )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjWmodnameN classnameNjj)}j]jc.ssam_device_getasbuh1hhj3ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj3ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj/ubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhM-ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM-ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM-hjhhubj)}(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&]uh1jhjhhhjhM-ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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&hjubjZ)}(hhh]j_)}(hM``struct ssam_device *sdev`` The device to increment the reference count of. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM#hjubj)}(hhh]h)}(h/The device to increment the reference count of.h]h/The device to increment the reference count of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM#hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM#hjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hj4h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj2ubah}(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)}(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 }(hjJhhhNhNubh)}(h :c:type:`struct device `h]jk)}(hjTh]h struct device}(hjVhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjRubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM%hjJubh via get_device().}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjqhM%hjubh)}(h` via put_device(). See ssam_device_get() for the counter-part of this function.h](h)}(h**Parameters**h]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM7hjubjZ)}(hhh]j_)}(hM``struct ssam_device *sdev`` The device to decrement the reference count of. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM4hjubj)}(hhh]h)}(h/The device to decrement the reference count of.h]h/The device to decrement the reference count of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM4hjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.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]jk)}(hj.h]h struct device}(hj0hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype refexplicitrefwarnjjjdeviceuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM6hj$ubh via put_device().}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjKhM6hjubh)}(hhhhNhNubah}(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:ubah}(h]h ]h"]h$]h&]uh1jhjLhMhjЧhhubj:)}(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]jD)}(hjYh]h Parameters}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjWubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjSubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjxh]hname}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjvubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjrubj)}(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&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjoubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hjh]hspec...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hjh]hstruct ssam_request_spec_md}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hjhMhjoubeh}(h]h ]h"]h$]h&]uh1jYhjSubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.hhMhjSubh)}(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%hhhNhNubjD)}(h**spec**h]hspec}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj%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.hhMhjSubh)}(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 }(hjFhhhNhNubjk)}(h-``static int name(struct ssam_device *sdev)``h]h)static int name(struct ssam_device *sdev)}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjFubh], returning the status of the request, which is zero on success and negative on failure. The }(hjFhhhNhNubjk)}(h``sdev``h]hsdev}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjFubh{ parameter specifies both the target device of the request and by association the controller via which the request is sent.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjSubh)}(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.}(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.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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 ](jjeh"]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 ](j j eh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_CL_W (name, atype, spec...)``h]jk)}(hjh]h4SSAM_DEFINE_SYNC_REQUEST_CL_W (name, atype, spec...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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.}(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&]uh1jhjhMhjЧhhubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 ubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hj2h]hname}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj0ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhj,ubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1j^hjGhMhj)ubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hjkh]hatype}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjiubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjeubj)}(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&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j^hjhMhj)ubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hjh]hspec...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hjh]hstruct ssam_request_spec_md}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hjhMhj)ubeh}(h]h ]h"]h$]h&]uh1jYhj ubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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)}(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 }(hjhhhNhNubjD)}(h**spec**h]hspec}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh., with the request taking an argument of type }(hjhhhNhNubjD)}(h **atype**h]hatype}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhX 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.}(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, 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 }(hjKhhhNhNubjk)}(h?``static int name(struct ssam_device *sdev, const atype *arg)``h]h;static int name(struct ssam_device *sdev, const atype *arg)}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjKubh], returning the status of the request, which is zero on success and negative on failure. The }(hjKhhhNhNubjk)}(h``sdev``h]hsdev}(nhjehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjKubh 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 }(hjKhhhNhNubjk)}(h``arg``h]harg}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjKubh pointer.}(hjKhhhNhNubeh}(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&]uh1j9hjЧ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 ](jjeh"]h$]h&]hhuh1jhjhhh/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&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubh)}(h8``SSAM_DEFINE_SYNC_REQUEST_CL_R (name, rtype, spec...)``h]jk)}(hjh]h4SSAM_DEFINE_SYNC_REQUEST_CL_R (name, rtype, spec...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(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)}(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.}(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 ubah}(h]h ]h"]h$]h&]uh1jhjhMhjЧhhubj:)}(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]jD)}(hj*h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj(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$ubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hjIh]hname}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjGubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjCubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1j^hj^hMhj@ubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hjh]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]uh1j^hjhMhj@ubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hjh]hspec...}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hjh]hstruct ssam_request_spec_md}(hjhhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hjhMhj@ubeh}(h]h ]h"]h$]h&]uh1jYhj$ubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 }(hj/hhhNhNubjD)}(h**spec**h]hspec}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj/ubhH, with the request taking no argument but having a return value of type }(hj/hhhNhNubjD)}(h **rtype**h]hrtype}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj/ubhX. 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.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 }(hjbhhhNhNubjk)}(h9``static int name(struct ssam_device *sdev, rtype *ret)``h]h5static int name(struct ssam_device *sdev, rtype *ret)}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh], returning the status of the request, which is zero on success and negative on failure. The }(hjbhhhNhNubjk)}(h``sdev``h]hsdev}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh 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 }(hjbhhhNhNubjk)}(h``ret``h]hret}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjbubh parameter.}(hjbhhhNhNubeh}(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&]uh1j9hjЧ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)}(hjh]hSSAM_DEFINE_SYNC_REQUEST_CL_WR}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhh/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&]hhjuh1jjjhjhhhjhM.ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM.hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM.ubeh}(h]h ](j.macroeh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubh)}(h@``SSAM_DEFINE_SYNC_REQUEST_CL_WR (name, atype, rtype, spec...)``h]jk)}(hj h]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]jD)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jChj?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;ubjZ)}(hhh](j_)}(h)``name`` Name of the generated function. h](je)}(h``name``h]jk)}(hj`h]hname}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj^ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMhjZubj)}(hhh]h)}(hName of the generated function.h]hName of the generated function.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1j^hjuhMhjWubj_)}(h*``atype`` Type of the request's argument. h](je)}(h ``atype``h]jk)}(hjh]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjWubj_)}(h.``rtype`` Type of the request's return value. h](je)}(h ``rtype``h]jk)}(hjh]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjWubj_)}(ho``spec...`` Specification (:c:type:`struct ssam_request_spec_md `) defining the request. h](je)}(h ``spec...``h]jk)}(hj h]hspec...}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ubah}(h]h ]h"]h$]h&]uh1jdh/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]jk)}(hj.h]hstruct ssam_request_spec_md}(hj0hhhNhNubah}(h]h ](jxj.c-typeeh"]h$]h&]uh1jjhj,ubah}(h]h ]h"]h$]h&]refdocj refdomainj.reftypetype 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&]uh1j^hj hMhjWubeh}(h]h ]h"]h$]h&]uh1jYhj;ubh)}(h**Description**h]jD)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjgubah}(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)}(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 }(hjhhhNhNubjD)}(h**spec**h]hspec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh., with the request taking an argument of type }(hjhhhNhNubjD)}(h **atype**h]hatype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubh# and having a return value of type }(hjhhhNhNubjD)}(h **rtype**h]hrtype}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubhX. 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, 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 }(hjhhhNhNubjk)}(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)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh], returning the status of the request, which is zero on success and negative on failure. The }(hjhhhNhNubjk)}(h``sdev``h]hsdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh 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 }(hjhhhNhNubjk)}(h``arg``h]harg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubhR pointer. The request’s return value is written to the memory pointed to by the }(hjhhhNhNubjk)}(h``ret``h]hret}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh 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#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.}(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+hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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.hhMPubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFhhhjXhMPubj)}(hssam_device_notifier_registerh]j)}(hssam_device_notifier_registerh]hssam_device_notifier_register}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ](jjeh"]h$]h&]hhuh1jhjFhhhjXhMPubjb )}(h9(struct ssam_device *sdev, struct ssam_event_notifier *n)h](jh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jmsbc.ssam_device_notifier_registerasbuh1hhjubj)}(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&]noemphhhuh1jg hjubjh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_device_notifier_registerasbuh1hhjubj)}(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&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjFhhhjXhMPubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjBhhhjXhMPubah}(h]j=ah ](j j eh"]h$]h&]jj)jhuh1jhjXhMPhj?hhubj)}(hhh]h)}(h;Register an event notifier for the specified client device.h]h;Register 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&]uh1jhj?hhhjXhMPubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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>hjubjZ)}(hhh](j_)}(hN``struct ssam_device *sdev`` The device the notifier should be registered on. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM<hjubj)}(hhh]h)}(h0The device the notifier should be registered on.h]h0The device the notifier should be registered on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM<hjubj_)}(hB``struct ssam_event_notifier *n`` The event notifier to register. h](je)}(h!``struct ssam_event_notifier *n``h]jk)}(hjh]hstruct ssam_event_notifier *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhM=hjubj)}(hhh]h)}(hThe event notifier to register.h]hThe event notifier to register.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhM=hjubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj,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.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.}(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.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.}(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.hhMEhjubh)}(h **Return**h]jD)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMIhjubh)}(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, }(hjzhhhNhNubjk)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjzubh if there have already been }(hjzhhhNhNubjk)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjzubhP notifiers for the event ID/type associated with the notifier block registered, }(hjzhhhNhNubjk)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjzubh: if the corresponding event entry could not be allocated, }(hjzhhhNhNubjk)}(h ``-ENODEV``h]h-ENODEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjzubh 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.}(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.hhMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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.hhMqubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMqubj)}(hssam_device_notifier_unregisterh]j)}(hssam_device_notifier_unregisterh]hssam_device_notifier_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMqubjb )}(h9(struct ssam_device *sdev, struct ssam_event_notifier *n)h](jh )}(hstruct ssam_device *sdevh](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 ssam_deviceh]h ssam_device}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjNmodnameN classnameNjj)}j]j5 )}j- jsb!c.ssam_device_notifier_unregisterasbuh1hhj*ubj)}(h h]h }(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj )}(hj h]h*}(hjzhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj&ubjh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jh!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)}(hjh]hn}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj&ubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhMqubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMqubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhMqhjhhubj)}(hhh]h)}(h=Unregister an event notifier for the specified client device.h]h=Unregister an event notifier for the specified 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.hhM`hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMqubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j8j5j8j6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj@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.hhMdhj<ubjZ)}(hhh](j_)}(hM``struct ssam_device *sdev`` The device the notifier has been registered on. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjah]hstruct ssam_device *sdev}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj_ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:35: ./include/linux/surface_aggregator/device.hhMbhj[ubj)}(hhh]h)}(h/The device the notifier has been registered on.h]h/The device the notifier has been registered on.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhMbhjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1j^hjvhMbhjXubj_)}(hD``struct ssam_event_notifier *n`` The event notifier to unregister. h](je)}(h!``struct ssam_event_notifier *n``h]jk)}(hjh]hstruct ssam_event_notifier *n}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMchjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMchjXubeh}(h]h ]h"]h$]h&]uh1jYhj<ubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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<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, 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.}(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.hhMehj<ubh)}(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.}(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.hhMihj<ubh)}(h **Return**h]jD)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.hhMlhj<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, }(hj!hhhNhNubjk)}(h ``-ENOENT``h]h-ENOENT}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj!ubh 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.}(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.hhMlhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(hjbhhhNhNubah}(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.chKQubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohKQubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- ssam_device_allocsbc.ssam_device_allocasbuh1hhj^hhhjohKQubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhjohKQubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj^hhhjohKQubj)}(hssam_device_alloch]j)}(hjh]hssam_device_alloc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj^hhhjohKQubjb )}(h:(struct ssam_controller *ctrl, struct ssam_device_uid uid)h](jh )}(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&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_device_allocasbuh1hhjubj)}(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}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct ssam_device_uid uidh](j)}(hjh]hstruct}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hssam_device_uidh]hssam_device_uid}(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjlmodnameN classnameNjj)}j]jc.ssam_device_allocasbuh1hhjHubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(huidh]huid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hj^hhhjohKQubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjZhhhjohKQubah}(h]jUah ](j j eh"]h$]h&]jj)jhuh1jhjohKQhjWhhubj)}(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&]uh1jhjWhhhjohKQubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKIhjubjZ)}(hhh](j_)}(hX``struct ssam_controller *ctrl`` The controller under which the device should be added. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKFhjubj)}(hhh]h)}(h6The controller under which the device should be added.h]h6The controller under which the device should be added.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKFhjubj_)}(hB``struct ssam_device_uid uid`` The UID of the device to be added. h](je)}(h``struct ssam_device_uid uid``h]jk)}(hj:h]hstruct ssam_device_uid uid}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj8ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKGhj4ubj)}(hhh]h)}(h"The UID of the device to be added.h]h"The UID of the device to be added.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhKGhjPubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1j^hjOhKGhjubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjuh]h Description}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjsubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKIhjubh)}(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.chKIhjubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKNhjubh)}(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 }(hjhhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh if it could not be allocated.}(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.chKNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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)}(hssam_device_addh]j)}(hssam_device_addh]hssam_device_add}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubjb )}(h(struct ssam_device *sdev)h]jh )}(hstruct ssam_device *sdevh](j)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(h ssam_deviceh]h ssam_device}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjPmodnameN classnameNjj)}j]j5 )}j- jsbc.ssam_device_addasbuh1hhj,ubj)}(h h]h }(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj )}(hj h]h*}(hj|hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,ubj)}(hsdevh]hsdev}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hj(ubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hAdd a SSAM client device.h]hAdd 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.chKjhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKnhjubjZ)}(hhh]j_)}(hA``struct ssam_device *sdev`` The SSAM client device to be added. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKkhjubj)}(hhh]h)}(h#The SSAM client device to be added.h]h#The SSAM client device to be added.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKkhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj hKkhjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hj/h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj-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.chKmhjubh)}(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 }(hjEhhhNhNubjk)}(h ``-ENODEV``h]h-ENODEV}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjEubhi if the controller of the device has not been initialized yet, has been suspended, or has been shut down.}(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.chKmhjubh)}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKrhjubh)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKwhjubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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: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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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)}(hssam_device_removeh]j)}(hssam_device_removeh]hssam_device_remove}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubjb )}(h(struct ssam_device *sdev)h]jh )}(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}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj(modnameN classnameNjj)}j]j5 )}j- jsbc.ssam_device_removeasbuh1hhjubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdevh]hsdev}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(h**Parameters** ``struct ssam_device *sdev`` The device to remove. **Description** Removes and unregisters the provided SSAM client device.h](h)}(h**Parameters**h]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubjZ)}(hhh]j_)}(h3``struct ssam_device *sdev`` The device to remove. h](je)}(h``struct ssam_device *sdev``h]jk)}(hjh]hstruct ssam_device *sdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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.}(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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hjo h]hconst}(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.chKubj)}(h h]h }(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubj)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- ssam_device_id_matchsbc.ssam_device_id_matchasbuh1hhjHhhhjYhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjYhKubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjHhhhjYhKubj)}(hssam_device_id_matchh]j)}(hjh]hssam_device_id_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjHhhhjYhKubjb )}(hF(const struct ssam_device_id *table, const struct ssam_device_uid uid)h](jh )}(h"const struct ssam_device_id *tableh](j)}(hjo 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 }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_device_id_matchasbuh1hhjubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjFhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(htableh]htable}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(h const struct ssam_device_uid uidh](j)}(hjo h]hconst}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(hssam_device_uidh]hssam_device_uid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]jc.ssam_device_id_matchasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(huidh]huid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjHhhhjYhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjDhhhjYhKubah}(h]j?ah ](j j eh"]h$]h&]jj)jhuh1jhjYhKhjAhhubj)}(hhh]h)}(h3Find the matching ID table entry for the given UID.h]h3Find the matching ID table entry for the given UID.}(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&]uh1jhjAhhhjYhKubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjubjZ)}(hhh](j_)}(h?``const struct ssam_device_id *table`` The table to search in. h](je)}(h&``const struct ssam_device_id *table``h]jk)}(hj<h]h"const struct ssam_device_id *table}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj:ubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhj6ubj)}(hhh]h)}(hThe table to search in.h]hThe table to search in.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhKhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1j^hjQhKhj3ubj_)}(h^``const struct ssam_device_uid uid`` The UID to matched against the individual table entries. h](je)}(h$``const struct ssam_device_uid uid``h]jk)}(hjuh]h const struct ssam_device_uid uid}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjsubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjoubj)}(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&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1j^hjhKhj3ubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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)}(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 }(hjhhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh 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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hjo 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.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubh)}(hhh]j)}(hssam_device_idh]hssam_device_id}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjCmodnameN classnameNjj)}j]j5 )}j- ssam_device_get_matchsbc.ssam_device_get_matchasbuh1hhjhhhjhM ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj )}(hj h]h*}(hjphhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjhhhjhM ubj)}(hssam_device_get_matchh]j)}(hj_h]hssam_device_get_match}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM ubjb )}(h(const struct ssam_device *dev)h]jh )}(hconst struct ssam_device *devh](j)}(hjo 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j]c.ssam_device_get_matchasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM hjhhubj)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhj5hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jPj5jPj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjZh]h Parameters}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jChjXubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjTubjZ)}(hhh]j_)}(h[``const struct ssam_device *dev`` The device for which to get the matching ID table entry. h](je)}(h!``const struct ssam_device *dev``h]jk)}(hjyh]hconst struct ssam_device *dev}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjwubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjsubj)}(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&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1j^hjhKhjpubah}(h]h ]h"]h$]h&]uh1jYhjTubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chKhjTubh)}(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 }(hjhhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubhd if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is }(hjhhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubh6), or there is no match in the driver’s match_table.}(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.chKhjTubh)}(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.}(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.chMhjTubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.chMhjTubh)}(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$hhhNhNubjk)}(h``NULL``h]hNULL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj$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.chMhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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)}(hjo h]hconst}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM*ubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjrhM*ubj)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjrhM*ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjrhM*ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjahhhjrhM*ubj)}(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 ](jjeh"]h$]h&]hhuh1jhjahhhjrhM*ubjb )}(h(const struct ssam_device *dev)h]jh )}(hconst struct ssam_device *devh](j)}(hjo 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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jsbc.ssam_device_get_match_dataasbuh1hhjubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hdevh]hdev}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjahhhjrhM*ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj]hhhjrhM*ubah}(h]jXah ](j j eh"]h$]h&]jj)jhuh1jhjrhM*hjZhhubj)}(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 }(hjhhhhNhNubjk)}(h``driver_data``h]h driver_data}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjhubh member.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjrhM*ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubjZ)}(hhh]j_)}(hN``const struct ssam_device *dev`` The device for which to get the match data. h](je)}(h!``const struct ssam_device *dev``h]jk)}(hjh]hconst struct ssam_device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMhjubah}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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 }(hj hhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ubhd if the device does not have a driver bound to it, the driver does not have match_table (i.e. it is }(hj hhhNhNubjk)}(h``NULL``h]hNULL}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj ubh_), there is no match in the driver’s match_table, or the match does not have any driver_data.}(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.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 }(hj?hhhNhNubjk)}(h%``struct ssam_device_id.driver_data``h]h!struct ssam_device_id.driver_data}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj?ubh member.}(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.chM#hjubh)}(h **Return**h]jD)}(hjbh]hReturn}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jChj`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.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 }(hjxhhhNhNubjk)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjxubh! if no such match could be found.}(hjxhhhNhNubeh}(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&]uh1j9hjЧ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.chM^ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM^ubj)}(h__ssam_device_driver_registerh]j)}(h__ssam_device_driver_registerh]h__ssam_device_driver_register}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM^ubjb )}(h7(struct ssam_device_driver *sdrv, struct module *owner)h](jh )}(hstruct ssam_device_driver *sdrvh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hssam_device_driverh]hssam_device_driver}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jsbc.__ssam_device_driver_registerasbuh1hhjubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdrvh]hsdrv}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubjh )}(hstruct module *ownerh](j)}(hjh]hstruct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(h h]h }(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubh)}(hhh]j)}(hmoduleh]hmodule}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j0c.__ssam_device_driver_registerasbuh1hhjdubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjdubj)}(hownerh]howner}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubeh}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhM^ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM^ubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhM^hjhhubj)}(hhh]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:37: ./drivers/platform/surface/aggregator/bus.chMWhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM^ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj 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.chM[hjubjZ)}(hhh](j_)}(h<``struct ssam_device_driver *sdrv`` The driver to register. h](je)}(h#``struct ssam_device_driver *sdrv``h]jk)}(hj*h]hstruct ssam_device_driver *sdrv}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhj(ubah}(h]h ]h"]h$]h&]uh1jdh/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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMXhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1j^hj?hMXhj!ubj_)}(h@``struct module *owner`` The module owning the provided driver. h](je)}(h``struct module *owner``h]jk)}(hjch]hstruct module *owner}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjaubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMYhj]ubj)}(hhh]h)}(h&The module owning the provided driver.h]h&The module owning the provided driver.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMYhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1j^hjxhMYhj!ubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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~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.}(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.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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.chMoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMoubj)}(hssam_device_driver_unregisterh]j)}(hssam_device_driver_unregisterh]hssam_device_driver_unregister}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMoubjb )}(h!(struct ssam_device_driver *sdrv)h]jh )}(hstruct ssam_device_driver *sdrvh](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_device_driverh]hssam_device_driver}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj@modnameN classnameNjj)}j]j5 )}j- jsbc.ssam_device_driver_unregisterasbuh1hhjubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hjlhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hsdrvh]hsdrv}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjhhhjhMoubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMoubah}(h]jah ](j j eh"]h$]h&]jj)jhuh1jhjhMohjhhubj)}(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&]uh1jhjhhhjhMoubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(hO**Parameters** ``struct ssam_device_driver *sdrv`` The driver to unregister.h](h)}(h**Parameters**h]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMphjubjZ)}(hhh]j_)}(h=``struct ssam_device_driver *sdrv`` The driver to unregister.h](je)}(h#``struct ssam_device_driver *sdrv``h]jk)}(hjh]hstruct ssam_device_driver *sdrv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMrhjubj)}(hhh]h)}(hThe driver to unregister.h]hThe driver to unregister.}(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.chMmhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hjhMrhjubah}(h]h ]h"]h$]h&]uh1jYhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(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.chMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhhjLhMubj)}(h__ssam_register_clientsh]j)}(h__ssam_register_clientsh]h__ssam_register_clients}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj:hhhjLhMubjb )}(hQ(struct device *parent, struct ssam_controller *ctrl, struct fwnode_handle *node)h](jh )}(hstruct device *parenth](j)}(hjh]hstruct}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubh)}(hhh]j)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jasbc.__ssam_register_clientsasbuh1hhjwubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjwubj)}(hparenth]hparent}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjsubjh )}(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&] refdomainj.reftypej- reftargetj modnameN classnameNjj)}j]jc.__ssam_register_clientsasbuh1hhjubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj )}(hj h]h*}(hj7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubj)}(hctrlh]hctrl}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjsubjh )}(hstruct fwnode_handle *nodeh](j)}(hjh]hstruct}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(h h]h }(hjjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubh)}(hhh]j)}(h fwnode_handleh]h fwnode_handle}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetj}modnameN classnameNjj)}j]jc.__ssam_register_clientsasbuh1hhjYubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubj)}(hnodeh]hnode}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphhhuh1jg hjsubeh}(h]h ]h"]h$]h&]hhuh1ja hj:hhhjLhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj6hhhjLhMubah}(h]j1ah ](j j eh"]h$]h&]jj)jhuh1jhjLhMhj3hhubj)}(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.}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj3hhhjLhMubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4jj5jj6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubjZ)}(hhh](j_)}(hV``struct device *parent`` The parent device under which clients should be registered. h](je)}(h``struct device *parent``h]jk)}(hjh]hstruct device *parent}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjubj)}(hhh]h)}(h;The parent device under which clients should be registered.h]h;The parent device under which clients should be registered.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4hMhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j^hj4hMhjubj_)}(hX``struct ssam_controller *ctrl`` The controller with which client should be registered. h](je)}(h ``struct ssam_controller *ctrl``h]jk)}(hjXh]hstruct ssam_controller *ctrl}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjVubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjRubj)}(hhh]h)}(h6The controller with which client should be registered.h]h6The controller with which client should be registered.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhMhjnubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]uh1j^hjmhMhjubj_)}(ha``struct fwnode_handle *node`` The firmware node holding definitions of the devices to be added. h](je)}(h``struct fwnode_handle *node``h]jk)}(hjh]hstruct fwnode_handle *node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjubah}(h]h ]h"]h$]h&]uh1jdh/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&]uh1j^hjhMhjubeh}(h]h ]h"]h$]h&]uh1jYhjubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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)}(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.}(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.chMhjubh)}(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.}(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.chMhjubh)}(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).}(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.chMhjubh)}(h **Return**h]jD)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(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,Returns zero on success, nonzero on failure.h]h,Returns zero on success, nonzero on failure.}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧ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}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chM ubj)}(h h]h }(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhhjdhM ubj)}(hssam_remove_clientsh]j)}(hssam_remove_clientsh]hssam_remove_clients}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ](jjeh"]h$]h&]hhuh1jhjRhhhjdhM ubjb )}(h(struct device *dev)h]jh )}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj.reftypej- reftargetjmodnameN classnameNjj)}j]j5 )}j- jysbc.ssam_remove_clientsasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(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&]noemphhhuh1jg hjubah}(h]h ]h"]h$]h&]hhuh1ja hjRhhhjdhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjNhhhjdhM ubah}(h]jIah ](j j eh"]h$]h&]jj)jhuh1jhjdhM hjKhhubj)}(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.}(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.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjdhM ubeh}(h]h ](j.functioneh"]h$]h&]j3j.j4j.j5j.j6j7j8uh1jhhhjЧhNhNubj:)}(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]jD)}(hj8h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jChj6ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhj2ubjZ)}(hhh]j_)}(hM``struct device *dev`` The (parent) device to remove all direct clients for. h](je)}(h``struct device *dev``h]jk)}(hjWh]hstruct device *dev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jjhjUubah}(h]h ]h"]h$]h&]uh1jdh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhjQubj)}(hhh]h)}(h5The (parent) device to remove all direct clients for.h]h5The (parent) device to remove all direct clients for.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1j^hjlhMhjNubah}(h]h ]h"]h$]h&]uh1jYhj2ubh)}(h**Description**h]jD)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jChjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/client-api:37: ./drivers/platform/surface/aggregator/bus.chMhj2ubh)}(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.chMhj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j9hjЧhhhNhNubeh}(h]jaah ]h"] client bus and client device apiah$]h&]uh1hhhhhhhhK!ubeh}(h]hah ]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_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jhjjj8jjͧj?jjau nametypes}(jjj8jͧjuh}(hhjhjjjjjjj7j<jjjjj j j j j j j j j(j-jjjjjjjVj[jjjjj7j<jjjjjjjjj| j j!j!jM%jR%j'j'j*j*j3,j8,j.j.j0j0j2j2j>5jC5j!7j&7j?j8j9j9j9j9j6<j;<j_=jd=jN@jS@jAjAjCjCj Fj%Fj\HjaHjJjJj(Lj-Lj7Nj