sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget>/translations/zh_CN/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/zh_TW/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/it_IT/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/ja_JP/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/ko_KR/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/sp_SP/driver-api/surface_aggregator/internal-apimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api.rsthKubhsection)}(hhh](htitle)}(hInternal API Documentationh]hInternal API Documentation}(hhhhhNhNubah}(h]h ]h"]h$]h&]refidid1uh1hhhhhhhhKubhtopic)}(h Contents h](h)}(hContentsh]hContents}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhK ubh bullet_list)}(hhh]h list_item)}(hhh](h paragraph)}(hhh]h reference)}(hhh]hInternal API Documentation}(hhhhhNhNubah}(h]hah ]h"]h$]h&]refidinternal-api-documentationuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]h)}(hhh]h)}(hhh]hPacket Transport Layer}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidpacket-transport-layeruh1hhj ubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]hRequest Transport Layer}(hj0hhhNhNubah}(h]id3ah ]h"]h$]h&]refidrequest-transport-layeruh1hhj-ubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]h Controller}(hjRhhhNhNubah}(h]id4ah ]h"]h$]h&]refid controlleruh1hhjOubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]hClient Device Bus}(hjthhhNhNubah}(h]id5ah ]h"]h$]h&]refidclient-device-busuh1hhjqubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]hCore}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refidcoreuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]h)}(hhh]h Trace Helpers}(hjhhhNhNubah}(h]id7ah ]h"]h$]h&]refid trace-helpersuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hPacket Transport Layerh]hPacket Transport Layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlesshp_buf (C struct) c.sshp_bufhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hsshp_bufh]hdesc_signature_line)}(hstruct sshp_bufh](hdesc_sig_keyword)}(hstructh]hstruct}(hj$hhhNhNubah}(h]h ]kah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKubhdesc_sig_space)}(h h]h }(hj6hhhNhNubah}(h]h ]wah"]h$]h&]uh1j4hjhhhj3hKubh desc_name)}(hsshp_bufh]h desc_sig_name)}(hjh]hsshp_buf}(hjMhhhNhNubah}(h]h ]nah"]h$]h&]uh1jKhjGubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jEhjhhhj3hKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhj3hKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj3hKhjhhubh desc_content)}(hhh]h)}(hParser buffer for SSH messages.h]hParser buffer for SSH messages.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjyhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhj3hKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(h**Definition**:: struct sshp_buf { u8 *ptr; size_t len; size_t cap; }; **Members** ``ptr`` Pointer to the beginning of the buffer. ``len`` Number of bytes used in the buffer. ``cap`` Maximum capacity of the buffer.h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubh literal_block)}(hAstruct sshp_buf { u8 *ptr; size_t len; size_t cap; };h]hAstruct sshp_buf { u8 *ptr; size_t len; size_t cap; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubhdefinition_list)}(hhh](hdefinition_list_item)}(h0``ptr`` Pointer to the beginning of the buffer. h](hterm)}(h``ptr``h]hliteral)}(hjh]hptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubh definition)}(hhh]h)}(h'Pointer to the beginning of the buffer.h]h'Pointer to the beginning of the buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h,``len`` Number of bytes used in the buffer. h](j)}(h``len``h]j)}(hj9h]hlen}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhj3ubj)}(hhh]h)}(h#Number of bytes used in the buffer.h]h#Number of bytes used in the buffer.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhjubj)}(h'``cap`` Maximum capacity of the buffer.h](j)}(h``cap``h]j)}(hjrh]hcap}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjlubj)}(hhh]h)}(hMaximum capacity of the buffer.h]hMaximum capacity of the buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_buf_init (C function)c.sshp_buf_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h>void sshp_buf_init (struct sshp_buf *buf, u8 *ptr, size_t cap)h]j)}(h=void sshp_buf_init(struct sshp_buf *buf, u8 *ptr, size_t cap)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK'ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhK'ubjF)}(h sshp_buf_inith]jL)}(h sshp_buf_inith]h sshp_buf_init}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhK'ubhdesc_parameterlist)}(h+(struct sshp_buf *buf, u8 *ptr, size_t cap)h](hdesc_parameter)}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hj.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj0modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jI ASTIdentifier)}jDjsbc.sshp_buf_initasbuh1hhj ubj5)}(h h]h }(hjVhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubhdesc_sig_punctuation)}(h*h]h*}(hjfhhhNhNubah}(h]h ]pah"]h$]h&]uh1jdhj ubjL)}(hbufh]hbuf}(hjuhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu8 *ptrh](h)}(hhh]jL)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jRc.sshp_buf_initasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h size_t caph](h)}(hhh]jL)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jRc.sshp_buf_initasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hcaph]hcap}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK'ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhK'ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhK'hjhhubjx)}(hhh]h)}(hInitialize a SSH parser buffer.h]hInitialize a SSH parser buffer.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhj9hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhK'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1jhhhjhNhNubj)}(hX/**Parameters** ``struct sshp_buf *buf`` The buffer to initialize. ``u8 *ptr`` The memory backing the buffer. ``size_t cap`` The length of the memory backing the buffer, i.e. its capacity. **Description** Initializes the buffer with the given memory as backing and set its used length to zero.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK#hjXubj)}(hhh](j)}(h3``struct sshp_buf *buf`` The buffer to initialize. h](j)}(h``struct sshp_buf *buf``h]j)}(hj}h]hstruct sshp_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK hjwubj)}(hhh]h)}(hThe buffer to initialize.h]hThe buffer to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]uh1jhjhK hjtubj)}(h+``u8 *ptr`` The memory backing the buffer. h](j)}(h ``u8 *ptr``h]j)}(hjh]hu8 *ptr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK!hjubj)}(hhh]h)}(hThe memory backing the buffer.h]hThe memory backing the buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK!hjtubj)}(hO``size_t cap`` The length of the memory backing the buffer, i.e. its capacity. h](j)}(h``size_t cap``h]j)}(hjh]h size_t cap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK"hjubj)}(hhh]h)}(h?The length of the memory backing the buffer, i.e. its capacity.h]h?The length of the memory backing the buffer, i.e. its capacity.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK"hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK"hjtubeh}(h]h ]h"]h$]h&]uh1jhjXubh)}(h**Description**h]j)}(hj*h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK$hjXubh)}(hXInitializes the buffer with the given memory as backing and set its used length to zero.h]hXInitializes the buffer with the given memory as backing and set its used length to zero.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK$hjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_buf_alloc (C function)c.sshp_buf_allochNtauh1jhjhhhNhNubj)}(hhh](j)}(hBint sshp_buf_alloc (struct sshp_buf *buf, size_t cap, gfp_t flags)h]j)}(hAint sshp_buf_alloc(struct sshp_buf *buf, size_t cap, gfp_t flags)h](j)}(hinth]hint}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK9ubj5)}(h h]h }(hj~hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjkhhhj}hK9ubjF)}(hsshp_buf_alloch]jL)}(hsshp_buf_alloch]hsshp_buf_alloc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjkhhhj}hK9ubj)}(h/(struct sshp_buf *buf, size_t cap, gfp_t flags)h](j )}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.sshp_buf_allocasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h size_t caph](h)}(hhh]jL)}(hsize_th]hsize_t}(hj!hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj#modnameN classnameNjHjK)}jN]jc.sshp_buf_allocasbuh1hhjubj5)}(h h]h }(hj?hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hcaph]hcap}(hjMhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h gfp_t flagsh](h)}(hhh]jL)}(hgfp_th]hgfp_t}(hjihhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjfubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjkmodnameN classnameNjHjK)}jN]jc.sshp_buf_allocasbuh1hhjbubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjbubjL)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjbubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjkhhhj}hK9ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjghhhj}hK9ubah}(h]jbah ](jojpeh"]h$]h&]jtju)jvhuh1jhj}hK9hjdhhubjx)}(hhh]h)}(h,Allocate and initialize a SSH parser buffer.h]h,Allocate and initialize a SSH parser buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK/hjhhubah}(h]h ]h"]h$]h&]uh1jwhjdhhhj}hK9ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX~**Parameters** ``struct sshp_buf *buf`` The buffer to initialize/allocate to. ``size_t cap`` The desired capacity of the buffer. ``gfp_t flags`` The flags used for allocating the memory. **Description** Allocates **cap** bytes and initializes the provided buffer struct with the allocated memory. **Return** Returns zero on success and ``-ENOMEM`` if allocation failed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK3hjubj)}(hhh](j)}(h?``struct sshp_buf *buf`` The buffer to initialize/allocate to. h](j)}(h``struct sshp_buf *buf``h]j)}(hjh]hstruct sshp_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK0hjubj)}(hhh]h)}(h%The buffer to initialize/allocate to.h]h%The buffer to initialize/allocate to.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK0hjubj)}(h3``size_t cap`` The desired capacity of the buffer. h](j)}(h``size_t cap``h]j)}(hj9h]h size_t cap}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK1hj3ubj)}(hhh]h)}(h#The desired capacity of the buffer.h]h#The desired capacity of the buffer.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK1hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhK1hjubj)}(h:``gfp_t flags`` The flags used for allocating the memory. h](j)}(h``gfp_t flags``h]j)}(hjrh]h gfp_t flags}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK2hjlubj)}(hhh]h)}(h)The flags used for allocating the memory.h]h)The flags used for allocating the memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK2hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhK2hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK4hjubh)}(h]Allocates **cap** bytes and initializes the provided buffer struct with the allocated memory.h](h Allocates }(hjhhhNhNubj)}(h**cap**h]hcap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhL bytes and initializes the provided buffer struct with the allocated memory.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK4hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK7hjubh)}(h=Returns zero on success and ``-ENOMEM`` if allocation failed.h](hReturns zero on success and }(hjhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if allocation failed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK7hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_buf_free (C function)c.sshp_buf_freehNtauh1jhjhhhNhNubj)}(hhh](j)}(h)void sshp_buf_free (struct sshp_buf *buf)h]j)}(h(void sshp_buf_free(struct sshp_buf *buf)h](j)}(hvoidh]hvoid}(hj= hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9 hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKMubj5)}(h h]h }(hjL hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj9 hhhjK hKMubjF)}(h sshp_buf_freeh]jL)}(h sshp_buf_freeh]h sshp_buf_free}(hj^ hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjZ ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj9 hhhjK hKMubj)}(h(struct sshp_buf *buf)h]j )}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hjz hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjv ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjv ubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jQ)}jDj` sbc.sshp_buf_freeasbuh1hhjv ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjv ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjv ubjL)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjv ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjr ubah}(h]h ]h"]h$]h&]hhuh1jhj9 hhhjK hKMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj5 hhhjK hKMubah}(h]j0 ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjK hKMhj2 hhubjx)}(hhh]h)}(hFree a SSH parser buffer.h]hFree a SSH parser buffer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKFhj hhubah}(h]h ]h"]h$]h&]uh1jwhj2 hhhjK hKMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct sshp_buf *buf`` The buffer to free. **Description** Frees a SSH parser buffer by freeing the memory backing it and then resetting its pointer to ``NULL`` and length and capacity to zero. Intended to free a buffer previously allocated with sshp_buf_alloc().h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKJhj ubj)}(hhh]j)}(h-``struct sshp_buf *buf`` The buffer to free. h](j)}(h``struct sshp_buf *buf``h]j)}(hj> h]hstruct sshp_buf *buf}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKGhj8 ubj)}(hhh]h)}(hThe buffer to free.h]hThe buffer to free.}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS hKGhjT ubah}(h]h ]h"]h$]h&]uh1jhj8 ubeh}(h]h ]h"]h$]h&]uh1jhjS hKGhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjy h]h Description}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKIhj ubh)}(hFrees a SSH parser buffer by freeing the memory backing it and then resetting its pointer to ``NULL`` and length and capacity to zero. Intended to free a buffer previously allocated with sshp_buf_alloc().h](h]Frees a SSH parser buffer by freeing the memory backing it and then resetting its pointer to }(hj hhhNhNubj)}(h``NULL``h]hNULL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhg and length and capacity to zero. Intended to free a buffer previously allocated with sshp_buf_alloc().}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKIhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_buf_drop (C function)c.sshp_buf_drophNtauh1jhjhhhNhNubj)}(hhh](j)}(h3void sshp_buf_drop (struct sshp_buf *buf, size_t n)h]j)}(h2void sshp_buf_drop(struct sshp_buf *buf, size_t n)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK]ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj hhhj hK]ubjF)}(h sshp_buf_droph]jL)}(h sshp_buf_droph]h sshp_buf_drop}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj hhhj hK]ubj)}(h (struct sshp_buf *buf, size_t n)h](j )}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hj+ hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj( ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj- modnameN classnameNjHjK)}jN]jQ)}jDj sbc.sshp_buf_dropasbuh1hhj ubj5)}(h h]h }(hjK hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hjY hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hbufh]hbuf}(hjf hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hsize_t nh](h)}(hhh]jL)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jG c.sshp_buf_dropasbuh1hhj{ ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj{ ubjL)}(hjWh]hn}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj{ ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hK]ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj hhhj hK]ubah}(h]j ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj hK]hj hhubjx)}(hhh]h)}(h+Drop data from the beginning of the buffer.h]h+Drop data from the beginning of the buffer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKVhj hhubah}(h]h ]h"]h$]h&]uh1jwhj hhhj hK]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct sshp_buf *buf`` The buffer to drop data from. ``size_t n`` The number of bytes to drop. **Description** Drops the first **n** bytes from the buffer. Re-aligns any remaining data to the beginning of the buffer.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKZhj ubj)}(hhh](j)}(h7``struct sshp_buf *buf`` The buffer to drop data from. h](j)}(h``struct sshp_buf *buf``h]j)}(hj h]hstruct sshp_buf *buf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKWhj ubj)}(hhh]h)}(hThe buffer to drop data from.h]hThe buffer to drop data from.}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- hKWhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj- hKWhj ubj)}(h*``size_t n`` The number of bytes to drop. h](j)}(h ``size_t n``h]j)}(hjQ h]hsize_t n}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKXhjK ubj)}(hhh]h)}(hThe number of bytes to drop.h]hThe number of bytes to drop.}(hjj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf hKXhjg ubah}(h]h ]h"]h$]h&]uh1jhjK ubeh}(h]h ]h"]h$]h&]uh1jhjf hKXhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKZhj ubh)}(hiDrops the first **n** bytes from the buffer. Re-aligns any remaining data to the beginning of the buffer.h](hDrops the first }(hj hhhNhNubj)}(h**n**h]hn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhT bytes from the buffer. Re-aligns any remaining data to the beginning of the buffer.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKZhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $sshp_buf_read_from_fifo (C function)c.sshp_buf_read_from_fifohNtauh1jhjhhhNhNubj)}(hhh](j)}(hIsize_t sshp_buf_read_from_fifo (struct sshp_buf *buf, struct kfifo *fifo)h]j)}(hHsize_t sshp_buf_read_from_fifo(struct sshp_buf *buf, struct kfifo *fifo)h](h)}(hhh]jL)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jQ)}jDsshp_buf_read_from_fifosbc.sshp_buf_read_from_fifoasbuh1hhj hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKoubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj hhhj hKoubjF)}(hsshp_buf_read_from_fifoh]jL)}(hj h]hsshp_buf_read_from_fifo}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj hhhj hKoubj)}(h*(struct sshp_buf *buf, struct kfifo *fifo)h](j )}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hj5 hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj1 ubj5)}(h h]h }(hjB hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj1 ubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hjS hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjP ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjU modnameN classnameNjHjK)}jN]j c.sshp_buf_read_from_fifoasbuh1hhj1 ubj5)}(h h]h }(hjq hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj1 ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1 ubjL)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj1 ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj- ubj )}(hstruct kfifo *fifoh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hkfifoh]hkfifo}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]j c.sshp_buf_read_from_fifoasbuh1hhj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hfifoh]hfifo}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj- ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hKoubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj hhhj hKoubah}(h]j ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj hKohj hhubjx)}(hhh]h)}(h(Transfer data from a fifo to the buffer.h]h(Transfer data from a fifo to the buffer.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKdhj#hhubah}(h]h ]h"]h$]h&]uh1jwhj hhhj hKoubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct sshp_buf *buf`` The buffer to write the data into. ``struct kfifo *fifo`` The fifo to read the data from. **Description** Transfers the data contained in the fifo to the buffer, removing it from the fifo. This function will try to transfer as much data as possible, limited either by the remaining space in the buffer or by the number of bytes available in the fifo. **Return** Returns the number of bytes transferred.h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhhjBubj)}(hhh](j)}(h<``struct sshp_buf *buf`` The buffer to write the data into. h](j)}(h``struct sshp_buf *buf``h]j)}(hjgh]hstruct sshp_buf *buf}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKehjaubj)}(hhh]h)}(h"The buffer to write the data into.h]h"The buffer to write the data into.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKehj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKehj^ubj)}(h7``struct kfifo *fifo`` The fifo to read the data from. h](j)}(h``struct kfifo *fifo``h]j)}(hjh]hstruct kfifo *fifo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKfhjubj)}(hhh]h)}(hThe fifo to read the data from.h]hThe fifo to read the data from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKfhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhj^ubeh}(h]h ]h"]h$]h&]uh1jhjBubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhhjBubh)}(hTransfers the data contained in the fifo to the buffer, removing it from the fifo. This function will try to transfer as much data as possible, limited either by the remaining space in the buffer or by the number of bytes available in the fifo.h]hTransfers the data contained in the fifo to the buffer, removing it from the fifo. This function will try to transfer as much data as possible, limited either by the remaining space in the buffer or by the number of bytes available in the fifo.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhhjBubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKmhjBubh)}(h(Returns the number of bytes transferred.h]h(Returns the number of bytes transferred.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKmhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_buf_span_from (C function)c.sshp_buf_span_fromhNtauh1jhjhhhNhNubj)}(hhh](j)}(hUvoid sshp_buf_span_from (struct sshp_buf *buf, size_t offset, struct ssam_span *span)h]j)}(hTvoid sshp_buf_span_from(struct sshp_buf *buf, size_t offset, struct ssam_span *span)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKubj5)}(h h]h }(hjVhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjChhhjUhKubjF)}(hsshp_buf_span_fromh]jL)}(hsshp_buf_span_fromh]hsshp_buf_span_from}(hjhhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjdubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjChhhjUhKubj)}(h=(struct sshp_buf *buf, size_t offset, struct ssam_span *span)h](j )}(hstruct sshp_buf *bufh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hsshp_bufh]hsshp_buf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjjsbc.sshp_buf_span_fromasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj|ubj )}(h size_t offseth](h)}(hhh]jL)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_buf_span_fromasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hoffseth]hoffset}(hj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj|ubj )}(hstruct ssam_span *spanh](j#)}(hj&h]hstruct}(hj>hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj:ubj5)}(h h]h }(hjKhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:ubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hj\hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjYubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj^modnameN classnameNjHjK)}jN]jc.sshp_buf_span_fromasbuh1hhj:ubj5)}(h h]h }(hjzhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj:ubjL)}(hspanh]hspan}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj|ubeh}(h]h ]h"]h$]h&]hhuh1jhjChhhjUhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj?hhhjUhKubah}(h]j:ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjUhKhj<hhubjx)}(hhh]h)}(h3Initialize a span from the given buffer and offset.h]h3Initialize a span from the given buffer and offset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK{hjhhubah}(h]h ]h"]h$]h&]uh1jwhj<hhhjUhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct sshp_buf *buf`` The buffer to create the span from. ``size_t offset`` The offset in the buffer at which the span should start. ``struct ssam_span *span`` The span to initialize (output). **Description** Initializes the provided span to point to the memory at the given offset in the buffer, with the length of the span being capped by the number of bytes used in the buffer after the offset (i.e. bytes remaining after the offset). Warning: This function does not validate that **offset** is less than or equal to the number of bytes used in the buffer or the buffer capacity. This must be guaranteed by the caller.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubj)}(hhh](j)}(h=``struct sshp_buf *buf`` The buffer to create the span from. h](j)}(h``struct sshp_buf *buf``h]j)}(hjh]hstruct sshp_buf *buf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK|hjubj)}(hhh]h)}(h#The buffer to create the span from.h]h#The buffer to create the span from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK|hjubj)}(hK``size_t offset`` The offset in the buffer at which the span should start. h](j)}(h``size_t offset``h]j)}(hj9h]h size_t offset}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK}hj3ubj)}(hhh]h)}(h8The offset in the buffer at which the span should start.h]h8The offset in the buffer at which the span should start.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhK}hjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhK}hjubj)}(h<``struct ssam_span *span`` The span to initialize (output). h](j)}(h``struct ssam_span *span``h]j)}(hjrh]hstruct ssam_span *span}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK~hjlubj)}(hhh]h)}(h The span to initialize (output).h]h The span to initialize (output).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK~hjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhK~hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubh)}(hInitializes the provided span to point to the memory at the given offset in the buffer, with the length of the span being capped by the number of bytes used in the buffer after the offset (i.e. bytes remaining after the offset).h]hInitializes the provided span to point to the memory at the given offset in the buffer, with the length of the span being capped by the number of bytes used in the buffer after the offset (i.e. bytes remaining after the offset).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubh)}(hWarning: This function does not validate that **offset** is less than or equal to the number of bytes used in the buffer or the buffer capacity. This must be guaranteed by the caller.h](h.Warning: This function does not validate that }(hjhhhNhNubj)}(h **offset**h]hoffset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh is less than or equal to the number of bytes used in the buffer or the buffer capacity. This must be guaranteed by the caller.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_validate_crc (C function)c.sshp_validate_crchNtauh1jhjhhhNhNubj)}(hhh](j)}(hCbool sshp_validate_crc (const struct ssam_span *src, const u8 *crc)h]j)}(hBbool sshp_validate_crc(const struct ssam_span *src, const u8 *crc)h](j)}(hboolh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKubj5)}(h h]h }(hj"hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj!hKubjF)}(hsshp_validate_crch]jL)}(hsshp_validate_crch]hsshp_validate_crc}(hj4hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj0ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj!hKubj)}(h,(const struct ssam_span *src, const u8 *crc)h](j )}(hconst struct ssam_span *srch](j#)}(hconsth]hconst}(hjPhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjLubj5)}(h h]h }(hj^hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubj#)}(hj&h]hstruct}(hjlhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjLubj5)}(h h]h }(hjyhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDj6sbc.sshp_validate_crcasbuh1hhjLubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjLubjL)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjLubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjHubj )}(h const u8 *crch](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_validate_crcasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj(hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcrch]hcrc}(hj5hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjHubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj!hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj hhhj!hKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj!hKhjhhubjx)}(hhh]h)}(h#Validate a CRC in raw message data.h]h#Validate a CRC in raw message data.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj\hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhj!hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1jhhhjhNhNubj)}(hX **Parameters** ``const struct ssam_span *src`` The span of data over which the CRC should be computed. ``const u8 *crc`` The pointer to the expected u16 CRC value. **Description** Computes the CRC of the provided data span (**src**), compares it to the CRC stored at the given address (**crc**), and returns the result of this comparison, i.e. ``true`` if equal. This function is intended to run on raw input/message data. **Return** Returns ``true`` if the computed CRC matches the stored CRC, ``false`` otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj{ubj)}(hhh](j)}(hX``const struct ssam_span *src`` The span of data over which the CRC should be computed. h](j)}(h``const struct ssam_span *src``h]j)}(hjh]hconst struct ssam_span *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhjubj)}(hhh]h)}(h7The span of data over which the CRC should be computed.h]h7The span of data over which the CRC should be computed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h=``const u8 *crc`` The pointer to the expected u16 CRC value. h](j)}(h``const u8 *crc``h]j)}(hjh]h const u8 *crc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhjubj)}(hhh]h)}(h*The pointer to the expected u16 CRC value.h]h*The pointer to the expected u16 CRC value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj{ubh)}(hComputes the CRC of the provided data span (**src**), compares it to the CRC stored at the given address (**crc**), and returns the result of this comparison, i.e. ``true`` if equal. This function is intended to run on raw input/message data.h](h,Computes the CRC of the provided data span (}(hj*hhhNhNubj)}(h**src**h]hsrc}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh7), compares it to the CRC stored at the given address (}(hj*hhhNhNubj)}(h**crc**h]hcrc}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh3), and returns the result of this comparison, i.e. }(hj*hhhNhNubj)}(h``true``h]htrue}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubhF if equal. This function is intended to run on raw input/message data.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj{ubh)}(h **Return**h]j)}(hjqh]hReturn}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj{ubh)}(hQReturns ``true`` if the computed CRC matches the stored CRC, ``false`` otherwise.h](hReturns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- if the computed CRC matches the stored CRC, }(hjhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !sshp_starts_with_syn (C function)c.sshp_starts_with_synhNtauh1jhjhhhNhNubj)}(hhh](j)}(h7bool sshp_starts_with_syn (const struct ssam_span *src)h]j)}(h6bool sshp_starts_with_syn(const struct ssam_span *src)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK)ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhK)ubjF)}(hsshp_starts_with_synh]jL)}(hsshp_starts_with_synh]hsshp_starts_with_syn}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhK)ubj)}(h(const struct ssam_span *src)h]j )}(hconst struct ssam_span *srch](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj#hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hj1hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj>hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjLubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjQmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.sshp_starts_with_synasbuh1hhjubj5)}(h h]h }(hjohhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj}hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK)ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhK)ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhK)hjhhubjx)}(hhh]h)}(h2Check if the given data starts with SSH SYN bytes.h]h2Check if the given data starts with SSH SYN bytes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK&hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhK)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hV**Parameters** ``const struct ssam_span *src`` The data span to check the start of.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK*hjubj)}(hhh]j)}(hD``const struct ssam_span *src`` The data span to check the start of.h](j)}(h``const struct ssam_span *src``h]j)}(hjh]hconst struct ssam_span *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK,hjubj)}(hhh]h)}(h$The data span to check the start of.h]h$The data span to check the start of.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK'hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_find_syn (C function)c.sshp_find_synhNtauh1jhjhhhNhNubj)}(hhh](j)}(hGbool sshp_find_syn (const struct ssam_span *src, struct ssam_span *rem)h]j)}(hFbool sshp_find_syn(const struct ssam_span *src, struct ssam_span *rem)h](j)}(hjh]hbool}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKEubj5)}(h h]h }(hj]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjKhhhj\hKEubjF)}(h sshp_find_synh]jL)}(h sshp_find_synh]h sshp_find_syn}(hjohhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjkubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjKhhhj\hKEubj)}(h4(const struct ssam_span *src, struct ssam_span *rem)h](j )}(hconst struct ssam_span *srch](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjqsbc.sshp_find_synasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_span *remh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hj6hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj8modnameN classnameNjHjK)}jN]jc.sshp_find_synasbuh1hhjubj5)}(h h]h }(hjThhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjbhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hremh]hrem}(hjohhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjKhhhj\hKEubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjGhhhj\hKEubah}(h]jBah ](jojpeh"]h$]h&]jtju)jvhuh1jhj\hKEhjDhhubjx)}(hhh]h)}(h*Find SSH SYN bytes in the given data span.h]h*Find SSH SYN bytes in the given data span.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK/hjhhubah}(h]h ]h"]h$]h&]uh1jwhjDhhhj\hKEubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct ssam_span *src`` The data span to search in. ``struct ssam_span *rem`` The span (output) indicating the remaining data, starting with SSH SYN bytes, if found. **Description** Search for SSH SYN bytes in the given source span. If found, set the **rem** span to the remaining data, starting with the first SYN bytes and capped by the source span length, and return ``true``. This function does not copy any data, but rather only sets pointers to the respective start addresses and length values. If no SSH SYN bytes could be found, set the **rem** span to the zero-length span at the end of the source span and return ``false``. If partial SSH SYN bytes could be found at the end of the source span, set the **rem** span to cover these partial SYN bytes, capped by the end of the source span, and return ``false``. This function should then be re-run once more data is available. **Return** Returns ``true`` if a complete SSH SYN sequence could be found, ``false`` otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK3hjubj)}(hhh](j)}(h<``const struct ssam_span *src`` The data span to search in. h](j)}(h``const struct ssam_span *src``h]j)}(hjh]hconst struct ssam_span *src}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK0hjubj)}(hhh]h)}(hThe data span to search in.h]hThe data span to search in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK0hjubj)}(hr``struct ssam_span *rem`` The span (output) indicating the remaining data, starting with SSH SYN bytes, if found. h](j)}(h``struct ssam_span *rem``h]j)}(hjh]hstruct ssam_span *rem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK2hj ubj)}(hhh]h)}(hWThe span (output) indicating the remaining data, starting with SSH SYN bytes, if found.h]hWThe span (output) indicating the remaining data, starting with SSH SYN bytes, if found.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK1hj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hK2hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjOh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK4hjubh)}(hX>Search for SSH SYN bytes in the given source span. If found, set the **rem** span to the remaining data, starting with the first SYN bytes and capped by the source span length, and return ``true``. This function does not copy any data, but rather only sets pointers to the respective start addresses and length values.h](hESearch for SSH SYN bytes in the given source span. If found, set the }(hjehhhNhNubj)}(h**rem**h]hrem}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubhp span to the remaining data, starting with the first SYN bytes and capped by the source span length, and return }(hjehhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubhz. This function does not copy any data, but rather only sets pointers to the respective start addresses and length values.}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK4hjubh)}(hIf no SSH SYN bytes could be found, set the **rem** span to the zero-length span at the end of the source span and return ``false``.h](h,If no SSH SYN bytes could be found, set the }(hjhhhNhNubj)}(h**rem**h]hrem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhG span to the zero-length span at the end of the source span and return }(hjhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK:hjubh)}(hIf partial SSH SYN bytes could be found at the end of the source span, set the **rem** span to cover these partial SYN bytes, capped by the end of the source span, and return ``false``. This function should then be re-run once more data is available.h](hOIf partial SSH SYN bytes could be found at the end of the source span, set the }(hjhhhNhNubj)}(h**rem**h]hrem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhY span to cover these partial SYN bytes, capped by the end of the source span, and return }(hjhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhB. This function should then be re-run once more data is available.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK=hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKBhjubh)}(hTReturns ``true`` if a complete SSH SYN sequence could be found, ``false`` otherwise.h](hReturns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh0 if a complete SSH SYN sequence could be found, }(hjhhhNhNubj)}(h ``false``h]hfalse}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKBhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_parse_frame (C function)c.sshp_parse_framehNtauh1jhjhhhNhNubj)}(hhh](j)}(hint sshp_parse_frame (const struct device *dev, const struct ssam_span *source, struct ssh_frame **frame, struct ssam_span *payload, size_t maxlen)h]j)}(hint sshp_parse_frame(const struct device *dev, const struct ssam_span *source, struct ssh_frame **frame, struct ssam_span *payload, size_t maxlen)h](j)}(hinth]hint}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjehhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKuubj5)}(h h]h }(hjxhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjehhhjwhKuubjF)}(hsshp_parse_frameh]jL)}(hsshp_parse_frameh]hsshp_parse_frame}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjehhhjwhKuubj)}(h~(const struct device *dev, const struct ssam_span *source, struct ssh_frame **frame, struct ssam_span *payload, size_t maxlen)h](j )}(hconst struct device *devh](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.sshp_parse_frameasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst struct ssam_span *sourceh](j#)}(hjRh]hconst}(hj3hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj/ubj5)}(h h]h }(hj@hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubj#)}(hj&h]hstruct}(hjNhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj/ubj5)}(h h]h }(hj[hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjlhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjiubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjnmodnameN classnameNjHjK)}jN]jc.sshp_parse_frameasbuh1hhj/ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj/ubjL)}(hsourceh]hsource}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssh_frame **frameh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssh_frameh]h ssh_frame}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_parse_frameasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hframeh]hframe}(hj"hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_span *payloadh](j#)}(hj&h]hstruct}(hj;hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj7ubj5)}(h h]h }(hjHhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj7ubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjYhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjVubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj[modnameN classnameNjHjK)}jN]jc.sshp_parse_frameasbuh1hhj7ubj5)}(h h]h }(hjwhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj7ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj7ubjL)}(hpayloadh]hpayload}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h size_t maxlenh](h)}(hhh]jL)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_parse_frameasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hmaxlenh]hmaxlen}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjehhhjwhKuubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjahhhjwhKuubah}(h]j\ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjwhKuhj^hhubjx)}(hhh]h)}(hParse SSH frame.h]hParse SSH frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK]hjhhubah}(h]h ]h"]h$]h&]uh1jwhj^hhhjwhKuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``const struct device *dev`` The device used for logging. ``const struct ssam_span *source`` The source to parse from. ``struct ssh_frame **frame`` The parsed frame (output). ``struct ssam_span *payload`` The parsed payload (output). ``size_t maxlen`` The maximum supported message length. **Description** Parses and validates a SSH frame, including its payload, from the given source. Sets the provided **frame** pointer to the start of the frame and writes the limits of the frame payload to the provided **payload** span pointer. This function does not copy any data, but rather only validates the message data and sets pointers (and length values) to indicate the respective parts. If no complete SSH frame could be found, the frame pointer will be set to the ``NULL`` pointer and the payload span will be set to the null span (start pointer ``NULL``, size zero). **Return** Returns zero on success or if the frame is incomplete, ``-ENOMSG`` if the start of the message is invalid, ``-EBADMSG`` if any (frame-header or payload) CRC is invalid, or ``-EMSGSIZE`` if the SSH message is bigger than the maximum message length specified in the **maxlen** parameter.h](h)}(h**Parameters**h]j)}(hj&h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKahj ubj)}(hhh](j)}(h:``const struct device *dev`` The device used for logging. h](j)}(h``const struct device *dev``h]j)}(hjEh]hconst struct device *dev}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK^hj?ubj)}(hhh]h)}(hThe device used for logging.h]hThe device used for logging.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhK^hj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhK^hj<ubj)}(h=``const struct ssam_span *source`` The source to parse from. h](j)}(h"``const struct ssam_span *source``h]j)}(hj~h]hconst struct ssam_span *source}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK_hjxubj)}(hhh]h)}(hThe source to parse from.h]hThe source to parse from.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK_hjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhK_hj<ubj)}(h8``struct ssh_frame **frame`` The parsed frame (output). h](j)}(h``struct ssh_frame **frame``h]j)}(hjh]hstruct ssh_frame **frame}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK`hjubj)}(hhh]h)}(hThe parsed frame (output).h]hThe parsed frame (output).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK`hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK`hj<ubj)}(h;``struct ssam_span *payload`` The parsed payload (output). h](j)}(h``struct ssam_span *payload``h]j)}(hjh]hstruct ssam_span *payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKahjubj)}(hhh]h)}(hThe parsed payload (output).h]hThe parsed payload (output).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKahjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKahj<ubj)}(h8``size_t maxlen`` The maximum supported message length. h](j)}(h``size_t maxlen``h]j)}(hj)h]h size_t maxlen}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKbhj#ubj)}(hhh]h)}(h%The maximum supported message length.h]h%The maximum supported message length.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hKbhj?ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj>hKbhj<ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjdh]h Description}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKdhj ubh)}(hParses and validates a SSH frame, including its payload, from the given source. Sets the provided **frame** pointer to the start of the frame and writes the limits of the frame payload to the provided **payload** span pointer.h](hbParses and validates a SSH frame, including its payload, from the given source. Sets the provided }(hjzhhhNhNubj)}(h **frame**h]hframe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh^ pointer to the start of the frame and writes the limits of the frame payload to the provided }(hjzhhhNhNubj)}(h **payload**h]hpayload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh span pointer.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKdhj ubh)}(hThis function does not copy any data, but rather only validates the message data and sets pointers (and length values) to indicate the respective parts.h]hThis function does not copy any data, but rather only validates the message data and sets pointers (and length values) to indicate the respective parts.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKihj ubh)}(hIf no complete SSH frame could be found, the frame pointer will be set to the ``NULL`` pointer and the payload span will be set to the null span (start pointer ``NULL``, size zero).h](hNIf no complete SSH frame could be found, the frame pointer will be set to the }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhJ pointer and the payload span will be set to the null span (start pointer }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , size zero).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKlhj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKphj ubh)}(hXReturns zero on success or if the frame is incomplete, ``-ENOMSG`` if the start of the message is invalid, ``-EBADMSG`` if any (frame-header or payload) CRC is invalid, or ``-EMSGSIZE`` if the SSH message is bigger than the maximum message length specified in the **maxlen** parameter.h](h7Returns zero on success or if the frame is incomplete, }(hjhhhNhNubj)}(h ``-ENOMSG``h]h-ENOMSG}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) if the start of the message is invalid, }(hjhhhNhNubj)}(h ``-EBADMSG``h]h-EBADMSG}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh5 if any (frame-header or payload) CRC is invalid, or }(hjhhhNhNubj)}(h ``-EMSGSIZE``h]h -EMSGSIZE}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO if the SSH message is bigger than the maximum message length specified in the }(hjhhhNhNubj)}(h **maxlen**h]hmaxlen}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKphj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j sshp_parse_command (C function)c.sshp_parse_commandhNtauh1jhjhhhNhNubj)}(hhh](j)}(hint sshp_parse_command (const struct device *dev, const struct ssam_span *source, struct ssh_command **command, struct ssam_span *command_data)h]j)}(hint sshp_parse_command(const struct device *dev, const struct ssam_span *source, struct ssh_command **command, struct ssam_span *command_data)h](j)}(hinth]hint}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjzhhhjhKubjF)}(hsshp_parse_commandh]jL)}(hsshp_parse_commandh]hsshp_parse_command}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjzhhhjhKubj)}(hx(const struct device *dev, const struct ssam_span *source, struct ssh_command **command, struct ssam_span *command_data)h](j )}(hconst struct device *devh](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.sshp_parse_commandasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj"hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hdevh]hdev}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hconst struct ssam_span *sourceh](j#)}(hjRh]hconst}(hjHhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjDubj5)}(h h]h }(hjUhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubj#)}(hj&h]hstruct}(hjchhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjDubj5)}(h h]h }(hjphhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_parse_commandasbuh1hhjDubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjDubjL)}(hsourceh]hsource}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssh_command **commandh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssh_commandh]h ssh_command}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.sshp_parse_commandasbuh1hhjubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubje)}(hjhh]h*}(hj* hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcommandh]hcommand}(hj7 hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_span *command_datah](j#)}(hj&h]hstruct}(hjP hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjL ubj5)}(h h]h }(hj] hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjL ubh)}(hhh]jL)}(h ssam_spanh]h ssam_span}(hjn hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjk ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjp modnameN classnameNjHjK)}jN]jc.sshp_parse_commandasbuh1hhjL ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjL ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjL ubjL)}(h command_datah]h command_data}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjL ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjzhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjvhhhjhKubah}(h]jqah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjshhubjx)}(hhh]h)}(h Parse SSH command frame payload.h]h Parse SSH command frame payload.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj hhubah}(h]h ]h"]h$]h&]uh1jwhjshhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hXa**Parameters** ``const struct device *dev`` The device used for logging. ``const struct ssam_span *source`` The source to parse from. ``struct ssh_command **command`` The parsed command (output). ``struct ssam_span *command_data`` The parsed command data/payload (output). **Description** Parses and validates a SSH command frame payload. Sets the **command** pointer to the command header and the **command_data** span to the command data (i.e. payload of the command). This will result in a zero-length span if the command does not have any associated data/payload. This function does not check the frame-payload-type field, which should be checked by the caller before calling this function. The **source** parameter should be the complete frame payload, e.g. returned by the sshp_parse_frame() command. This function does not copy any data, but rather only validates the frame payload data and sets pointers (and length values) to indicate the respective parts. **Return** Returns zero on success or ``-ENOMSG`` if **source** does not represent a valid command-type frame payload, i.e. is too short.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubj)}(hhh](j)}(h:``const struct device *dev`` The device used for logging. h](j)}(h``const struct device *dev``h]j)}(hj!h]hconst struct device *dev}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj !ubj)}(hhh]h)}(hThe device used for logging.h]hThe device used for logging.}(hj+!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'!hKhj(!ubah}(h]h ]h"]h$]h&]uh1jhj !ubeh}(h]h ]h"]h$]h&]uh1jhj'!hKhj !ubj)}(h=``const struct ssam_span *source`` The source to parse from. h](j)}(h"``const struct ssam_span *source``h]j)}(hjK!h]hconst struct ssam_span *source}(hjM!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI!ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhjE!ubj)}(hhh]h)}(hThe source to parse from.h]hThe source to parse from.}(hjd!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`!hKhja!ubah}(h]h ]h"]h$]h&]uh1jhjE!ubeh}(h]h ]h"]h$]h&]uh1jhj`!hKhj !ubj)}(h>``struct ssh_command **command`` The parsed command (output). h](j)}(h ``struct ssh_command **command``h]j)}(hj!h]hstruct ssh_command **command}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj~!ubj)}(hhh]h)}(hThe parsed command (output).h]hThe parsed command (output).}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj~!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhj !ubj)}(hM``struct ssam_span *command_data`` The parsed command data/payload (output). h](j)}(h"``struct ssam_span *command_data``h]j)}(hj!h]hstruct ssam_span *command_data}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj!ubj)}(hhh]h)}(h)The parsed command data/payload (output).h]h)The parsed command data/payload (output).}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhj !ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj!h]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubh)}(hXParses and validates a SSH command frame payload. Sets the **command** pointer to the command header and the **command_data** span to the command data (i.e. payload of the command). This will result in a zero-length span if the command does not have any associated data/payload. This function does not check the frame-payload-type field, which should be checked by the caller before calling this function.h](h;Parses and validates a SSH command frame payload. Sets the }(hj"hhhNhNubj)}(h **command**h]hcommand}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh' pointer to the command header and the }(hj"hhhNhNubj)}(h**command_data**h]h command_data}(hj("hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhX span to the command data (i.e. payload of the command). This will result in a zero-length span if the command does not have any associated data/payload. This function does not check the frame-payload-type field, which should be checked by the caller before calling this function.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubh)}(hoThe **source** parameter should be the complete frame payload, e.g. returned by the sshp_parse_frame() command.h](hThe }(hjA"hhhNhNubj)}(h **source**h]hsource}(hjI"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA"ubha parameter should be the complete frame payload, e.g. returned by the sshp_parse_frame() command.}(hjA"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubh)}(hThis function does not copy any data, but rather only validates the frame payload data and sets pointers (and length values) to indicate the respective parts.h]hThis function does not copy any data, but rather only validates the frame payload data and sets pointers (and length values) to indicate the respective parts.}(hjb"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubh)}(h **Return**h]j)}(hjs"h]hReturn}(hju"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq"ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubh)}(h~Returns zero on success or ``-ENOMSG`` if **source** does not represent a valid command-type frame payload, i.e. is too short.h](hReturns zero on success or }(hj"hhhNhNubj)}(h ``-ENOMSG``h]h-ENOMSG}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh if }(hj"hhhNhNubj)}(h **source**h]hsource}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhJ does not represent a valid command-type frame payload, i.e. is too short.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgbuf (C struct)c.msgbufhNtauh1jhjhhhNhNubj)}(hhh](j)}(hmsgbufh]j)}(h struct msgbufh](j#)}(hj&h]hstruct}(hj"hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj"hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKubj5)}(h h]h }(hj"hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj"hhhj"hKubjF)}(hmsgbufh]jL)}(hj"h]hmsgbuf}(hj"hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj"ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj"hhhj"hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj"hhhj"hKubah}(h]j"ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj"hKhj"hhubjx)}(hhh]h)}(h(Buffer struct to construct SSH messages.h]h(Buffer struct to construct SSH messages.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj#hhubah}(h]h ]h"]h$]h&]uh1jwhj"hhhj"hKubeh}(h]h ](jstructeh"]h$]h&]jjjj6#jj6#jjjuh1jhhhjhNhNubj)}(hX<**Definition**:: struct msgbuf { u8 *begin; u8 *end; u8 *ptr; }; **Members** ``begin`` Pointer to the beginning of the allocated buffer space. ``end`` Pointer to the end (one past last element) of the allocated buffer space. ``ptr`` Pointer to the first free element in the buffer.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>#ubh:}(hj>#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj:#ubj)}(h;struct msgbuf { u8 *begin; u8 *end; u8 *ptr; };h]h;struct msgbuf { u8 *begin; u8 *end; u8 *ptr; };}hj[#sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj:#ubh)}(h **Members**h]j)}(hjl#h]hMembers}(hjn#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj#ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj:#ubj)}(hhh](j)}(hB``begin`` Pointer to the beginning of the allocated buffer space. h](j)}(h ``begin``h]j)}(hj#h]hbegin}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj#ubj)}(hhh]h)}(h7Pointer to the beginning of the allocated buffer space.h]h7Pointer to the beginning of the allocated buffer space.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj#ubj)}(hR``end`` Pointer to the end (one past last element) of the allocated buffer space. h](j)}(h``end``h]j)}(hj#h]hend}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj#ubj)}(hhh]h)}(hIPointer to the end (one past last element) of the allocated buffer space.h]hIPointer to the end (one past last element) of the allocated buffer space.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj#ubj)}(h8``ptr`` Pointer to the first free element in the buffer.h](j)}(h``ptr``h]j)}(hj#h]hptr}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj#ubj)}(hhh]h)}(h0Pointer to the first free element in the buffer.h]h0Pointer to the first free element in the buffer.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhj:#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_init (C function) c.msgb_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(h9void msgb_init (struct msgbuf *msgb, u8 *ptr, size_t cap)h]j)}(h8void msgb_init(struct msgbuf *msgb, u8 *ptr, size_t cap)h](j)}(hvoidh]hvoid}(hjX$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT$hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK'ubj5)}(h h]h }(hjg$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjT$hhhjf$hK'ubjF)}(h msgb_inith]jL)}(h msgb_inith]h msgb_init}(hjy$hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhju$ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjT$hhhjf$hK'ubj)}(h*(struct msgbuf *msgb, u8 *ptr, size_t cap)h](j )}(hstruct msgbuf *msgbh](j#)}(hj&h]hstruct}(hj$hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj$ubj5)}(h h]h }(hj$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj$ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hj$hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj$modnameN classnameNjHjK)}jN]jQ)}jDj{$sb c.msgb_initasbuh1hhj$ubj5)}(h h]h }(hj$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj$ubje)}(hjhh]h*}(hj$hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj$ubjL)}(hmsgbh]hmsgb}(hj$hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$ubj )}(hu8 *ptrh](h)}(hhh]jL)}(hu8h]hu8}(hj %hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj %modnameN classnameNjHjK)}jN]j$ c.msgb_initasbuh1hhj%ubj5)}(h h]h }(hj(%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj%ubje)}(hjhh]h*}(hj6%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj%ubjL)}(hptrh]hptr}(hjC%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$ubj )}(h size_t caph](h)}(hhh]jL)}(hsize_th]hsize_t}(hj_%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj\%ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetja%modnameN classnameNjHjK)}jN]j$ c.msgb_initasbuh1hhjX%ubj5)}(h h]h }(hj}%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjX%ubjL)}(hcaph]hcap}(hj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjX%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$ubeh}(h]h ]h"]h$]h&]hhuh1jhjT$hhhjf$hK'ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjP$hhhjf$hK'ubah}(h]jK$ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjf$hK'hjM$hhubjx)}(hhh]h)}(h+Initialize the given message buffer struct.h]h+Initialize the given message buffer struct.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj%hhubah}(h]h ]h"]h$]h&]uh1jwhjM$hhhjf$hK'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1jhhhjhNhNubj)}(hX1**Parameters** ``struct msgbuf *msgb`` The buffer struct to initialize ``u8 *ptr`` Pointer to the underlying memory by which the buffer will be backed. ``size_t cap`` Size of the underlying memory. **Description** Initialize the given message buffer struct using the provided memory as backing.h](h)}(h**Parameters**h]j)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK#hj%ubj)}(hhh](j)}(h8``struct msgbuf *msgb`` The buffer struct to initialize h](j)}(h``struct msgbuf *msgb``h]j)}(hj%h]hstruct msgbuf *msgb}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK hj%ubj)}(hhh]h)}(hThe buffer struct to initializeh]hThe buffer struct to initialize}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj &hK hj &ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj &hK hj%ubj)}(hQ``u8 *ptr`` Pointer to the underlying memory by which the buffer will be backed. h](j)}(h ``u8 *ptr``h]j)}(hj/&h]hu8 *ptr}(hj1&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-&ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK!hj)&ubj)}(hhh]h)}(hDPointer to the underlying memory by which the buffer will be backed.h]hDPointer to the underlying memory by which the buffer will be backed.}(hjH&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjD&hK!hjE&ubah}(h]h ]h"]h$]h&]uh1jhj)&ubeh}(h]h ]h"]h$]h&]uh1jhjD&hK!hj%ubj)}(h.``size_t cap`` Size of the underlying memory. h](j)}(h``size_t cap``h]j)}(hjh&h]h size_t cap}(hjj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf&ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK"hjb&ubj)}(hhh]h)}(hSize of the underlying memory.h]hSize of the underlying memory.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}&hK"hj~&ubah}(h]h ]h"]h$]h&]uh1jhjb&ubeh}(h]h ]h"]h$]h&]uh1jhj}&hK"hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK$hj%ubh)}(hPInitialize the given message buffer struct using the provided memory as backing.h]hPInitialize the given message buffer struct using the provided memory as backing.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK$hj%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_bytes_used (C function)c.msgb_bytes_usedhNtauh1jhjhhhNhNubj)}(hhh](j)}(h2size_t msgb_bytes_used (const struct msgbuf *msgb)h]j)}(h1size_t msgb_bytes_used(const struct msgbuf *msgb)h](h)}(hhh]jL)}(hsize_th]hsize_t}(hj&hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj&modnameN classnameNjHjK)}jN]jQ)}jDmsgb_bytes_usedsbc.msgb_bytes_usedasbuh1hhj&hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK2ubj5)}(h h]h }(hj 'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj&hhhj 'hK2ubjF)}(hmsgb_bytes_usedh]jL)}(hj 'h]hmsgb_bytes_used}(hj'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj'ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj&hhhj 'hK2ubj)}(h(const struct msgbuf *msgb)h]j )}(hconst struct msgbuf *msgbh](j#)}(hjRh]hconst}(hj:'hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj6'ubj5)}(h h]h }(hjG'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj6'ubj#)}(hj&h]hstruct}(hjU'hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj6'ubj5)}(h h]h }(hjb'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj6'ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hjs'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjp'ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetju'modnameN classnameNjHjK)}jN]j'c.msgb_bytes_usedasbuh1hhj6'ubj5)}(h h]h }(hj'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj6'ubje)}(hjhh]h*}(hj'hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6'ubjL)}(hmsgbh]hmsgb}(hj'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj6'ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj2'ubah}(h]h ]h"]h$]h&]hhuh1jhj&hhhj 'hK2ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj&hhhj 'hK2ubah}(h]j&ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj 'hK2hj&hhubjx)}(hhh]h)}(h6Return the current number of bytes used in the buffer.h]h6Return the current number of bytes used in the buffer.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK/hj'hhubah}(h]h ]h"]h$]h&]uh1jwhj&hhhj 'hK2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjhNhNubj)}(hC**Parameters** ``const struct msgbuf *msgb`` The message buffer.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK3hj'ubj)}(hhh]j)}(h1``const struct msgbuf *msgb`` The message buffer.h](j)}(h``const struct msgbuf *msgb``h]j)}(hj(h]hconst struct msgbuf *msgb}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK5hj(ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hj0(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK0hj-(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhj,(hK5hj(ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_push_u16 (C function)c.msgb_push_u16hNtauh1jhjhhhNhNubj)}(hhh](j)}(h3void msgb_push_u16 (struct msgbuf *msgb, u16 value)h]j)}(h2void msgb_push_u16(struct msgbuf *msgb, u16 value)h](j)}(hvoidh]hvoid}(hjq(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjm(hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKHubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjm(hhhj(hKHubjF)}(h msgb_push_u16h]jL)}(h msgb_push_u16h]h msgb_push_u16}(hj(hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjm(hhhj(hKHubj)}(h (struct msgbuf *msgb, u16 value)h](j )}(hstruct msgbuf *msgbh](j#)}(hj&h]hstruct}(hj(hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj(ubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj(ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hj(hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj(modnameN classnameNjHjK)}jN]jQ)}jDj(sbc.msgb_push_u16asbuh1hhj(ubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj(ubje)}(hjhh]h*}(hj(hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj(ubjL)}(hmsgbh]hmsgb}(hj)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(h u16 valueh](h)}(hhh]jL)}(hu16h]hu16}(hj#)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj )ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj%)modnameN classnameNjHjK)}jN]j(c.msgb_push_u16asbuh1hhj)ubj5)}(h h]h }(hjA)hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj)ubjL)}(hvalueh]hvalue}(hjO)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubeh}(h]h ]h"]h$]h&]hhuh1jhjm(hhhj(hKHubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhji(hhhj(hKHubah}(h]jd(ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj(hKHhjf(hhubjx)}(hhh]h)}(hPush a u16 value to the buffer.h]hPush a u16 value to the buffer.}(hjy)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKDhjv)hhubah}(h]h ]h"]h$]h&]uh1jwhjf(hhhj(hKHubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjhNhNubj)}(ho**Parameters** ``struct msgbuf *msgb`` The message buffer. ``u16 value`` The value to push to the buffer.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKHhj)ubj)}(hhh](j)}(h,``struct msgbuf *msgb`` The message buffer. h](j)}(h``struct msgbuf *msgb``h]j)}(hj)h]hstruct msgbuf *msgb}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKEhj)ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKEhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKEhj)ubj)}(h.``u16 value`` The value to push to the buffer.h](j)}(h ``u16 value``h]j)}(hj)h]h u16 value}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKGhj)ubj)}(hhh]h)}(h The value to push to the buffer.h]h The value to push to the buffer.}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKFhj *ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hKGhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_push_syn (C function)c.msgb_push_synhNtauh1jhjhhhNhNubj)}(hhh](j)}(h(void msgb_push_syn (struct msgbuf *msgb)h]j)}(h'void msgb_push_syn(struct msgbuf *msgb)h](j)}(hvoidh]hvoid}(hjM*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjI*hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKTubj5)}(h h]h }(hj\*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjI*hhhj[*hKTubjF)}(h msgb_push_synh]jL)}(h msgb_push_synh]h msgb_push_syn}(hjn*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjj*ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjI*hhhj[*hKTubj)}(h(struct msgbuf *msgb)h]j )}(hstruct msgbuf *msgbh](j#)}(hj&h]hstruct}(hj*hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj*ubj5)}(h h]h }(hj*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hj*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj*modnameN classnameNjHjK)}jN]jQ)}jDjp*sbc.msgb_push_synasbuh1hhj*ubj5)}(h h]h }(hj*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*ubje)}(hjhh]h*}(hj*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj*ubjL)}(hmsgbh]hmsgb}(hj*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubah}(h]h ]h"]h$]h&]hhuh1jhjI*hhhj[*hKTubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjE*hhhj[*hKTubah}(h]j@*ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj[*hKThjB*hhubjx)}(hhh]h)}(h!Push SSH SYN bytes to the buffer.h]h!Push SSH SYN bytes to the buffer.}(hj +hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKQhj +hhubah}(h]h ]h"]h$]h&]uh1jwhjB*hhhj[*hKTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%+jj%+jjjuh1jhhhjhNhNubj)}(h=**Parameters** ``struct msgbuf *msgb`` The message buffer.h](h)}(h**Parameters**h]j)}(hj/+h]h Parameters}(hj1+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-+ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKUhj)+ubj)}(hhh]j)}(h+``struct msgbuf *msgb`` The message buffer.h](j)}(h``struct msgbuf *msgb``h]j)}(hjN+h]hstruct msgbuf *msgb}(hjP+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL+ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKWhjH+ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hjg+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKRhjd+ubah}(h]h ]h"]h$]h&]uh1jhjH+ubeh}(h]h ]h"]h$]h&]uh1jhjc+hKWhjE+ubah}(h]h ]h"]h$]h&]uh1jhj)+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_push_buf (C function)c.msgb_push_bufhNtauh1jhjhhhNhNubj)}(hhh](j)}(hCvoid msgb_push_buf (struct msgbuf *msgb, const u8 *buf, size_t len)h]j)}(hBvoid msgb_push_buf(struct msgbuf *msgb, const u8 *buf, size_t len)h](j)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK_ubj5)}(h h]h }(hj+hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+hhhj+hK_ubjF)}(h msgb_push_bufh]jL)}(h msgb_push_bufh]h msgb_push_buf}(hj+hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj+hhhj+hK_ubj)}(h0(struct msgbuf *msgb, const u8 *buf, size_t len)h](j )}(hstruct msgbuf *msgbh](j#)}(hj&h]hstruct}(hj+hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+ubj5)}(h h]h }(hj+hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj,modnameN classnameNjHjK)}jN]jQ)}jDj+sbc.msgb_push_bufasbuh1hhj+ubj5)}(h h]h }(hj#,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubje)}(hjhh]h*}(hj1,hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubjL)}(hmsgbh]hmsgb}(hj>,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubj )}(h const u8 *bufh](j#)}(hjRh]hconst}(hjW,hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjS,ubj5)}(h h]h }(hjd,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjS,ubh)}(hhh]jL)}(hu8h]hu8}(hju,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjr,ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjw,modnameN classnameNjHjK)}jN]j,c.msgb_push_bufasbuh1hhjS,ubj5)}(h h]h }(hj,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjS,ubje)}(hjhh]h*}(hj,hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjS,ubjL)}(hbufh]hbuf}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjS,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubj )}(h size_t lenh](h)}(hhh]jL)}(hsize_th]hsize_t}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj,modnameN classnameNjHjK)}jN]j,c.msgb_push_bufasbuh1hhj,ubj5)}(h h]h }(hj,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj,ubjL)}(hlenh]hlen}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj+ubeh}(h]h ]h"]h$]h&]hhuh1jhj+hhhj+hK_ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj+hhhj+hK_ubah}(h]j+ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj+hK_hj+hhubjx)}(hhh]h)}(hPush raw data to the buffer.h]hPush raw data to the buffer.}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKZhj-hhubah}(h]h ]h"]h$]h&]uh1jwhj+hhhj+hK_ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8-jj8-jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct msgbuf *msgb`` The message buffer. ``const u8 *buf`` The data to push to the buffer. ``size_t len`` The length of the data to push to the buffer.h](h)}(h**Parameters**h]j)}(hjB-h]h Parameters}(hjD-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@-ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK^hj<-ubj)}(hhh](j)}(h,``struct msgbuf *msgb`` The message buffer. h](j)}(h``struct msgbuf *msgb``h]j)}(hja-h]hstruct msgbuf *msgb}(hjc-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_-ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK[hj[-ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hjz-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv-hK[hjw-ubah}(h]h ]h"]h$]h&]uh1jhj[-ubeh}(h]h ]h"]h$]h&]uh1jhjv-hK[hjX-ubj)}(h2``const u8 *buf`` The data to push to the buffer. h](j)}(h``const u8 *buf``h]j)}(hj-h]h const u8 *buf}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK\hj-ubj)}(hhh]h)}(hThe data to push to the buffer.h]hThe data to push to the buffer.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hK\hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hK\hjX-ubj)}(h<``size_t len`` The length of the data to push to the buffer.h](j)}(h``size_t len``h]j)}(hj-h]h size_t len}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK^hj-ubj)}(hhh]h)}(h-The length of the data to push to the buffer.h]h-The length of the data to push to the buffer.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK]hj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hK^hjX-ubeh}(h]h ]h"]h$]h&]uh1jhj<-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j msgb_push_crc (C function)c.msgb_push_crchNtauh1jhjhhhNhNubj)}(hhh](j)}(hCvoid msgb_push_crc (struct msgbuf *msgb, const u8 *buf, size_t len)h]j)}(hBvoid msgb_push_crc(struct msgbuf *msgb, const u8 *buf, size_t len)h](j)}(hvoidh]hvoid}(hj-.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj).hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKjubj5)}(h h]h }(hj<.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj).hhhj;.hKjubjF)}(h msgb_push_crch]jL)}(h msgb_push_crch]h msgb_push_crc}(hjN.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJ.ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj).hhhj;.hKjubj)}(h0(struct msgbuf *msgb, const u8 *buf, size_t len)h](j )}(hstruct msgbuf *msgbh](j#)}(hj&h]hstruct}(hjj.hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjf.ubj5)}(h h]h }(hjw.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjf.ubh)}(hhh]jL)}(hmsgbufh]hmsgbuf}(hj.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj.modnameN classnameNjHjK)}jN]jQ)}jDjP.sbc.msgb_push_crcasbuh1hhjf.ubj5)}(h h]h }(hj.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjf.ubje)}(hjhh]h*}(hj.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjf.ubjL)}(hmsgbh]hmsgb}(hj.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjf.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjb.ubj )}(h const u8 *bufh](j#)}(hjRh]hconst}(hj.hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj.ubj5)}(h h]h }(hj.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj.ubh)}(hhh]jL)}(hu8h]hu8}(hj.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj.modnameN classnameNjHjK)}jN]j.c.msgb_push_crcasbuh1hhj.ubj5)}(h h]h }(hj/hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj.ubje)}(hjhh]h*}(hj&/hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj.ubjL)}(hbufh]hbuf}(hj3/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjb.ubj )}(h size_t lenh](h)}(hhh]jL)}(hsize_th]hsize_t}(hjO/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjL/ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjQ/modnameN classnameNjHjK)}jN]j.c.msgb_push_crcasbuh1hhjH/ubj5)}(h h]h }(hjm/hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjH/ubjL)}(hlenh]hlen}(hj{/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjH/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjb.ubeh}(h]h ]h"]h$]h&]hhuh1jhj).hhhj;.hKjubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj%.hhhj;.hKjubah}(h]j .ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj;.hKjhj".hhubjx)}(hhh]h)}(h&Compute CRC and push it to the buffer.h]h&Compute CRC and push it to the buffer.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKehj/hhubah}(h]h ]h"]h$]h&]uh1jwhj".hhhj;.hKjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct msgbuf *msgb`` The message buffer. ``const u8 *buf`` The data for which the CRC should be computed. ``size_t len`` The length of the data for which the CRC should be computed.h](h)}(h**Parameters**h]j)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKihj/ubj)}(hhh](j)}(h,``struct msgbuf *msgb`` The message buffer. h](j)}(h``struct msgbuf *msgb``h]j)}(hj/h]hstruct msgbuf *msgb}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKfhj/ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKfhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKfhj/ubj)}(hA``const u8 *buf`` The data for which the CRC should be computed. h](j)}(h``const u8 *buf``h]j)}(hj0h]h const u8 *buf}(hj!0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKghj0ubj)}(hhh]h)}(h.The data for which the CRC should be computed.h]h.The data for which the CRC should be computed.}(hj80hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj40hKghj50ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj40hKghj/ubj)}(hK``size_t len`` The length of the data for which the CRC should be computed.h](j)}(h``size_t len``h]j)}(hjX0h]h size_t len}(hjZ0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV0ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKihjR0ubj)}(hhh]h)}(h7c.msgb_push_cmdasbuh1hhjr7ubj5)}(h h]h }(hj7hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjr7ubjL)}(hseqh]hseq}(hj7hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjr7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(hu16 rqidh](h)}(hhh]jL)}(hu16h]hu16}(hj7hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj7ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj7modnameN classnameNjHjK)}jN]j>7c.msgb_push_cmdasbuh1hhj7ubj5)}(h h]h }(hj7hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj7ubjL)}(hrqidh]hrqid}(hj7hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubj )}(hconst struct ssam_request *rqsth](j#)}(hjRh]hconst}(hj8hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj8ubj5)}(h h]h }(hj8hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj8ubj#)}(hj&h]hstruct}(hj!8hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj8ubj5)}(h h]h }(hj.8hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj8ubh)}(hhh]jL)}(h ssam_requesth]h ssam_request}(hj?8hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<8ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjA8modnameN classnameNjHjK)}jN]j>7c.msgb_push_cmdasbuh1hhj8ubj5)}(h h]h }(hj]8hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj8ubje)}(hjhh]h*}(hjk8hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj8ubjL)}(hrqsth]hrqst}(hjx8hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj6ubeh}(h]h ]h"]h$]h&]hhuh1jhj6hhhj6hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj6hhhj6hKubah}(h]j6ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj6hKhj6hhubjx)}(hhh]h)}(h4Push a SSH command frame with payload to the buffer.h]h4Push a SSH command frame with payload to the buffer.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj8hhubah}(h]h ]h"]h$]h&]uh1jwhj6hhhj6hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj8jj8jjjuh1jhhhjhNhNubj)}(hX **Parameters** ``struct msgbuf *msgb`` The message buffer. ``u8 seq`` The sequence ID (SEQ) of the frame/packet. ``u16 rqid`` The request ID (RQID) of the request contained in the frame. ``const struct ssam_request *rqst`` The request to wrap in the frame.h](h)}(h**Parameters**h]j)}(hj8h]h Parameters}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj8ubj)}(hhh](j)}(h,``struct msgbuf *msgb`` The message buffer. h](j)}(h``struct msgbuf *msgb``h]j)}(hj8h]hstruct msgbuf *msgb}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj8ubj)}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hKhj8ubj)}(h6``u8 seq`` The sequence ID (SEQ) of the frame/packet. h](j)}(h ``u8 seq``h]j)}(hj9h]hu8 seq}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhj9ubj)}(hhh]h)}(h*The sequence ID (SEQ) of the frame/packet.h]h*The sequence ID (SEQ) of the frame/packet.}(hj59hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj19hKhj29ubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhj19hKhj8ubj)}(hJ``u16 rqid`` The request ID (RQID) of the request contained in the frame. h](j)}(h ``u16 rqid``h]j)}(hjU9h]hu16 rqid}(hjW9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS9ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhjO9ubj)}(hhh]h)}(h`.h](hState-flags for }(hj+:hhhNhNubh)}(h":c:type:`struct ssh_ptl `h]j)}(hj5:h]hstruct ssh_ptl}(hj7:hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jhj3:ubah}(h]h ]h"]h$]h&]refdoc*driver-api/surface_aggregator/internal-api refdomainjreftypetype refexplicitrefwarnjHjK)}jN]jQ)}jDj9sbc.ssh_ptl_state_flagsasb reftargetssh_ptluh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhj+:ubh.}(hj+:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhj(:hhubah}(h]h ]h"]h$]h&]uh1jwhj9hhhj9hKubeh}(h]h ](jenumeh"]h$]h&]jjjjq:jjq:jjjuh1jhhhjhNhNubj)}(h**Constants** ``SSH_PTL_SF_SHUTDOWN_BIT`` Indicates that the packet transport layer has been shut down or is being shut down and should not accept any new packets/data.h](h)}(h **Constants**h]j)}(hj{:h]h Constants}(hj}:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy:ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhju:ubj)}(hhh]j)}(h``SSH_PTL_SF_SHUTDOWN_BIT`` Indicates that the packet transport layer has been shut down or is being shut down and should not accept any new packets/data.h](j)}(h``SSH_PTL_SF_SHUTDOWN_BIT``h]j)}(hj:h]hSSH_PTL_SF_SHUTDOWN_BIT}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK hj:ubj)}(hhh]h)}(h~Indicates that the packet transport layer has been shut down or is being shut down and should not accept any new packets/data.h]h~Indicates that the packet transport layer has been shut down or is being shut down and should not accept any new packets/data.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hK hj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hK hj:ubah}(h]h ]h"]h$]h&]uh1jhju:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_ops (C struct) c.ssh_ptl_opshNtauh1jhjhhhNhNubj)}(hhh](j)}(h ssh_ptl_opsh]j)}(hstruct ssh_ptl_opsh](j#)}(hj&h]hstruct}(hj:hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj:hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK'ubj5)}(h h]h }(hj;hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:hhhj;hK'ubjF)}(h ssh_ptl_opsh]jL)}(hj:h]h ssh_ptl_ops}(hj;hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj;ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj:hhhj;hK'ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj:hhhj;hK'ubah}(h]j:ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj;hK'hj:hhubjx)}(hhh]h)}(h/Callback operations for packet transport layer.h]h/Callback operations for packet transport layer.}(hj5;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK$hj2;hhubah}(h]h ]h"]h$]h&]uh1jwhj:hhhj;hK'ubeh}(h]h ](jstructeh"]h$]h&]jjjjM;jjM;jjjuh1jhhhjhNhNubj)}(hXQ**Definition**:: struct ssh_ptl_ops { void (*data_received)(struct ssh_ptl *p, const struct ssam_span *data); }; **Members** ``data_received`` Function called when a data-packet has been received. Both, the packet layer on which the packet has been received and the packet's payload data are provided to this function.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjY;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU;ubh:}(hjU;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK(hjQ;ubj)}(hcstruct ssh_ptl_ops { void (*data_received)(struct ssh_ptl *p, const struct ssam_span *data); };h]hcstruct ssh_ptl_ops { void (*data_received)(struct ssh_ptl *p, const struct ssam_span *data); };}hjr;sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK*hjQ;ubh)}(h **Members**h]j)}(hj;h]hMembers}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK.hjQ;ubj)}(hhh]j)}(h``data_received`` Function called when a data-packet has been received. Both, the packet layer on which the packet has been received and the packet's payload data are provided to this function.h](j)}(h``data_received``h]j)}(hj;h]h data_received}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK'hj;ubj)}(hhh]h)}(hFunction called when a data-packet has been received. Both, the packet layer on which the packet has been received and the packet's payload data are provided to this function.h]hFunction called when a data-packet has been received. Both, the packet layer on which the packet has been received and the packet’s payload data are provided to this function.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK&hj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hK'hj;ubah}(h]h ]h"]h$]h&]uh1jhjQ;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl (C struct) c.ssh_ptlhNtauh1jhjhhhNhNubj)}(hhh](j)}(hssh_ptlh]j)}(hstruct ssh_ptlh](j#)}(hj&h]hstruct}(hj;hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj;hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK.ubj5)}(h h]h }(hj <hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;hhhj <hK.ubjF)}(hssh_ptlh]jL)}(hj;h]hssh_ptl}(hj<hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj;hhhj <hK.ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj;hhhj <hK.ubah}(h]j;ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj <hK.hj;hhubjx)}(hhh]h)}(hSSH packet transport layer.h]hSSH packet transport layer.}(hj><hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK.hj;<hhubah}(h]h ]h"]h$]h&]uh1jwhj;hhhj <hK.ubeh}(h]h ](jstructeh"]h$]h&]jjjjV<jjV<jjjuh1jhhhjhNhNubj)}(hX **Definition**:: struct ssh_ptl { struct serdev_device *serdev; unsigned long state; struct { spinlock_t lock; struct list_head head; } queue; struct { spinlock_t lock; struct list_head head; atomic_t count; } pending; struct { atomic_t running; struct task_struct *thread; struct completion thread_cplt_tx; struct completion thread_cplt_pkt; struct wait_queue_head packet_wq; } tx; struct { struct task_struct *thread; struct wait_queue_head wq; struct kfifo fifo; struct sshp_buf buf; struct { u16 seqs[8]; u16 offset; } blocked; } rx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_ptl_ops ops; }; **Members** ``serdev`` Serial device providing the underlying data transport. ``state`` State(-flags) of the transport layer. ``queue`` Packet submission queue. ``queue.lock`` Lock for modifying the packet submission queue. ``queue.head`` List-head of the packet submission queue. ``pending`` Set/list of pending packets. ``pending.lock`` Lock for modifying the pending set. ``pending.head`` List-head of the pending set/list. ``pending.count`` Number of currently pending packets. ``tx`` Transmitter subsystem. ``tx.running`` Flag indicating (desired) transmitter thread state. ``tx.thread`` Transmitter thread. ``tx.thread_cplt_tx`` Completion for transmitter thread waiting on transfer. ``tx.thread_cplt_pkt`` Completion for transmitter thread waiting on packets. ``tx.packet_wq`` Waitqueue-head for packet transmit completion. ``rx`` Receiver subsystem. ``rx.thread`` Receiver thread. ``rx.wq`` Waitqueue-head for receiver thread. ``rx.fifo`` Buffer for receiving data/pushing data to receiver thread. ``rx.buf`` Buffer for evaluating data on receiver thread. ``rx.blocked`` List of recent/blocked sequence IDs to detect retransmission. ``rx.blocked.seqs`` Array of blocked sequence IDs. ``rx.blocked.offset`` Offset indicating where a new ID should be inserted. ``rtx_timeout`` Retransmission timeout subsystem. ``rtx_timeout.lock`` Lock for modifying the retransmission timeout reaper. ``rtx_timeout.timeout`` Timeout interval for retransmission. ``rtx_timeout.expires`` Time specifying when the reaper work is next scheduled. ``rtx_timeout.reaper`` Work performing timeout checks and subsequent actions. ``ops`` Packet layer operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjb<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^<ubh:}(hj^<hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK2hjZ<ubj)}(hXvstruct ssh_ptl { struct serdev_device *serdev; unsigned long state; struct { spinlock_t lock; struct list_head head; } queue; struct { spinlock_t lock; struct list_head head; atomic_t count; } pending; struct { atomic_t running; struct task_struct *thread; struct completion thread_cplt_tx; struct completion thread_cplt_pkt; struct wait_queue_head packet_wq; } tx; struct { struct task_struct *thread; struct wait_queue_head wq; struct kfifo fifo; struct sshp_buf buf; struct { u16 seqs[8]; u16 offset; } blocked; } rx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_ptl_ops ops; };h]hXvstruct ssh_ptl { struct serdev_device *serdev; unsigned long state; struct { spinlock_t lock; struct list_head head; } queue; struct { spinlock_t lock; struct list_head head; atomic_t count; } pending; struct { atomic_t running; struct task_struct *thread; struct completion thread_cplt_tx; struct completion thread_cplt_pkt; struct wait_queue_head packet_wq; } tx; struct { struct task_struct *thread; struct wait_queue_head wq; struct kfifo fifo; struct sshp_buf buf; struct { u16 seqs[8]; u16 offset; } blocked; } rx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_ptl_ops ops; };}hj{<sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK4hjZ<ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKZhjZ<ubj)}(hhh](j)}(hB``serdev`` Serial device providing the underlying data transport. h](j)}(h ``serdev``h]j)}(hj<h]hserdev}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK0hj<ubj)}(hhh]h)}(h6Serial device providing the underlying data transport.h]h6Serial device providing the underlying data transport.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hK0hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hK0hj<ubj)}(h0``state`` State(-flags) of the transport layer. h](j)}(h ``state``h]j)}(hj<h]hstate}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK1hj<ubj)}(hhh]h)}(h%State(-flags) of the transport layer.h]h%State(-flags) of the transport layer.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hK1hj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhj<hK1hj<ubj)}(h#``queue`` Packet submission queue. h](j)}(h ``queue``h]j)}(hj=h]hqueue}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK2hj=ubj)}(hhh]h)}(hPacket submission queue.h]hPacket submission queue.}(hj6=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2=hK2hj3=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj2=hK2hj<ubj)}(h?``queue.lock`` Lock for modifying the packet submission queue. h](j)}(h``queue.lock``h]j)}(hjV=h]h queue.lock}(hjX=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK3hjP=ubj)}(hhh]h)}(h/Lock for modifying the packet submission queue.h]h/Lock for modifying the packet submission queue.}(hjo=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk=hK3hjl=ubah}(h]h ]h"]h$]h&]uh1jhjP=ubeh}(h]h ]h"]h$]h&]uh1jhjk=hK3hj<ubj)}(h9``queue.head`` List-head of the packet submission queue. h](j)}(h``queue.head``h]j)}(hj=h]h queue.head}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK4hj=ubj)}(hhh]h)}(h)List-head of the packet submission queue.h]h)List-head of the packet submission queue.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hK4hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hK4hj<ubj)}(h)``pending`` Set/list of pending packets. h](j)}(h ``pending``h]j)}(hj=h]hpending}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK5hj=ubj)}(hhh]h)}(hSet/list of pending packets.h]hSet/list of pending packets.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hK5hj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj=hK5hj<ubj)}(h5``pending.lock`` Lock for modifying the pending set. h](j)}(h``pending.lock``h]j)}(hj>h]h pending.lock}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.h&hK6hj=ubj)}(hhh]h)}(h#Lock for modifying the pending set.h]h#Lock for modifying the pending set.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hK6hj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hK6hj<ubj)}(h4``pending.head`` List-head of the pending set/list. h](j)}(h``pending.head``h]j)}(hj:>h]h pending.head}(hj<>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK7hj4>ubj)}(hhh]h)}(h"List-head of the pending set/list.h]h"List-head of the pending set/list.}(hjS>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO>hK7hjP>ubah}(h]h ]h"]h$]h&]uh1jhj4>ubeh}(h]h ]h"]h$]h&]uh1jhjO>hK7hj<ubj)}(h7``pending.count`` Number of currently pending packets. h](j)}(h``pending.count``h]j)}(hjs>h]h pending.count}(hju>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK8hjm>ubj)}(hhh]h)}(h$Number of currently pending packets.h]h$Number of currently pending packets.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hK8hj>ubah}(h]h ]h"]h$]h&]uh1jhjm>ubeh}(h]h ]h"]h$]h&]uh1jhj>hK8hj<ubj)}(h``tx`` Transmitter subsystem. h](j)}(h``tx``h]j)}(hj>h]htx}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK9hj>ubj)}(hhh]h)}(hTransmitter subsystem.h]hTransmitter subsystem.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hK9hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hK9hj<ubj)}(hC``tx.running`` Flag indicating (desired) transmitter thread state. h](j)}(h``tx.running``h]j)}(hj>h]h tx.running}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK:hj>ubj)}(hhh]h)}(h3Flag indicating (desired) transmitter thread state.h]h3Flag indicating (desired) transmitter thread state.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hK:hj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hK:hj<ubj)}(h"``tx.thread`` Transmitter thread. h](j)}(h ``tx.thread``h]j)}(hj?h]h tx.thread}(hj ?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK;hj?ubj)}(hhh]h)}(hTransmitter thread.h]hTransmitter thread.}(hj7?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3?hK;hj4?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj3?hK;hj<ubj)}(hM``tx.thread_cplt_tx`` Completion for transmitter thread waiting on transfer. h](j)}(h``tx.thread_cplt_tx``h]j)}(hjW?h]htx.thread_cplt_tx}(hjY?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU?ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhj?ubj)}(hhh]h)}(h.Waitqueue-head for packet transmit completion.h]h.Waitqueue-head for packet transmit completion.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hK>hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj?hK>hj<ubj)}(h``rx`` Receiver subsystem. h](j)}(h``rx``h]j)}(hj@h]hrx}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK?hj?ubj)}(hhh]h)}(hReceiver subsystem.h]hReceiver subsystem.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hK?hj@ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhj@hK?hj<ubj)}(h``rx.thread`` Receiver thread. h](j)}(h ``rx.thread``h]j)}(hj;@h]h rx.thread}(hj=@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9@ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK@hj5@ubj)}(hhh]h)}(hReceiver thread.h]hReceiver thread.}(hjT@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP@hK@hjQ@ubah}(h]h ]h"]h$]h&]uh1jhj5@ubeh}(h]h ]h"]h$]h&]uh1jhjP@hK@hj<ubj)}(h.``rx.wq`` Waitqueue-head for receiver thread. h](j)}(h ``rx.wq``h]j)}(hjt@h]hrx.wq}(hjv@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr@ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKAhjn@ubj)}(hhh]h)}(h#Waitqueue-head for receiver thread.h]h#Waitqueue-head for receiver thread.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKAhj@ubah}(h]h ]h"]h$]h&]uh1jhjn@ubeh}(h]h ]h"]h$]h&]uh1jhj@hKAhj<ubj)}(hG``rx.fifo`` Buffer for receiving data/pushing data to receiver thread. h](j)}(h ``rx.fifo``h]j)}(hj@h]hrx.fifo}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKBhj@ubj)}(hhh]h)}(h:Buffer for receiving data/pushing data to receiver thread.h]h:Buffer for receiving data/pushing data to receiver thread.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKBhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hKBhj<ubj)}(h:``rx.buf`` Buffer for evaluating data on receiver thread. h](j)}(h ``rx.buf``h]j)}(hj@h]hrx.buf}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKChj@ubj)}(hhh]h)}(h.Buffer for evaluating data on receiver thread.h]h.Buffer for evaluating data on receiver thread.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hKChj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj@hKChj<ubj)}(hM``rx.blocked`` List of recent/blocked sequence IDs to detect retransmission. h](j)}(h``rx.blocked``h]j)}(hjAh]h rx.blocked}(hj!AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKDhjAubj)}(hhh]h)}(h=List of recent/blocked sequence IDs to detect retransmission.h]h=List of recent/blocked sequence IDs to detect retransmission.}(hj8AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4AhKDhj5Aubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj4AhKDhj<ubj)}(h3``rx.blocked.seqs`` Array of blocked sequence IDs. h](j)}(h``rx.blocked.seqs``h]j)}(hjXAh]hrx.blocked.seqs}(hjZAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVAubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKEhjRAubj)}(hhh]h)}(hArray of blocked sequence IDs.h]hArray of blocked sequence IDs.}(hjqAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmAhKEhjnAubah}(h]h ]h"]h$]h&]uh1jhjRAubeh}(h]h ]h"]h$]h&]uh1jhjmAhKEhj<ubj)}(hK``rx.blocked.offset`` Offset indicating where a new ID should be inserted. h](j)}(h``rx.blocked.offset``h]j)}(hjAh]hrx.blocked.offset}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKFhjAubj)}(hhh]h)}(h4Offset indicating where a new ID should be inserted.h]h4Offset indicating where a new ID should be inserted.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKFhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhKFhj<ubj)}(h2``rtx_timeout`` Retransmission timeout subsystem. h](j)}(h``rtx_timeout``h]j)}(hjAh]h rtx_timeout}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKGhjAubj)}(hhh]h)}(h!Retransmission timeout subsystem.h]h!Retransmission timeout subsystem.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKGhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhKGhj<ubj)}(hK``rtx_timeout.lock`` Lock for modifying the retransmission timeout reaper. h](j)}(h``rtx_timeout.lock``h]j)}(hjBh]hrtx_timeout.lock}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKHhjAubj)}(hhh]h)}(h5Lock for modifying the retransmission timeout reaper.h]h5Lock for modifying the retransmission timeout reaper.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKHhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhKHhj<ubj)}(h=``rtx_timeout.timeout`` Timeout interval for retransmission. h](j)}(h``rtx_timeout.timeout``h]j)}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:Bubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKIhj6Bubj)}(hhh]h)}(h$Timeout interval for retransmission.h]h$Timeout interval for retransmission.}(hjUBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQBhKIhjRBubah}(h]h ]h"]h$]h&]uh1jhj6Bubeh}(h]h ]h"]h$]h&]uh1jhjQBhKIhj<ubj)}(hP``rtx_timeout.expires`` Time specifying when the reaper work is next scheduled. h](j)}(h``rtx_timeout.expires``h]j)}(hjuBh]hrtx_timeout.expires}(hjwBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsBubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKJhjoBubj)}(hhh]h)}(h7Time specifying when the reaper work is next scheduled.h]h7Time specifying when the reaper work is next scheduled.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKJhjBubah}(h]h ]h"]h$]h&]uh1jhjoBubeh}(h]h ]h"]h$]h&]uh1jhjBhKJhj<ubj)}(hN``rtx_timeout.reaper`` Work performing timeout checks and subsequent actions. h](j)}(h``rtx_timeout.reaper``h]j)}(hjBh]hrtx_timeout.reaper}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKKhjBubj)}(hhh]h)}(h6Work performing timeout checks and subsequent actions.h]h6Work performing timeout checks and subsequent actions.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKKhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhKKhj<ubj)}(h ``ops`` Packet layer operations.h](j)}(h``ops``h]j)}(hjBh]hops}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKKhjBubj)}(hhh]h)}(hPacket layer operations.h]hPacket layer operations.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKLhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhKKhj<ubeh}(h]h ]h"]h$]h&]uh1jhjZ<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_get_device (C function)c.ssh_ptl_get_devicehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8struct device * ssh_ptl_get_device (struct ssh_ptl *ptl)h]j)}(h6struct device *ssh_ptl_get_device(struct ssh_ptl *ptl)h](j#)}(hj&h]hstruct}(hjAChhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj=Chhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKubj5)}(h h]h }(hjOChhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj=ChhhjNChKubh)}(hhh]jL)}(hdeviceh]hdevice}(hj`ChhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj]Cubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjbCmodnameN classnameNjHjK)}jN]jQ)}jDssh_ptl_get_devicesbc.ssh_ptl_get_deviceasbuh1hhj=ChhhjNChKubj5)}(h h]h }(hjChhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj=ChhhjNChKubje)}(hjhh]h*}(hjChhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj=ChhhjNChKubjF)}(hssh_ptl_get_deviceh]jL)}(hj~Ch]hssh_ptl_get_device}(hjChhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjCubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj=ChhhjNChKubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hjChhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjCubj5)}(h h]h }(hjChhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjCubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hjChhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjCubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjCmodnameN classnameNjHjK)}jN]j|Cc.ssh_ptl_get_deviceasbuh1hhjCubj5)}(h h]h }(hjChhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjCubje)}(hjhh]h*}(hjDhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjCubjL)}(hptlh]hptl}(hjDhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjCubah}(h]h ]h"]h$]h&]hhuh1jhj=ChhhjNChKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj9ChhhjNChKubah}(h]j4Cah ](jojpeh"]h$]h&]jtju)jvhuh1jhjNChKhj6Chhubjx)}(hhh]h)}(h2Get device associated with packet transport layer.h]h2Get device associated with packet transport layer.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:GhKhj;Gubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhj:GhKhjGubah}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hj`Gh]h Description}(hjbGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Gubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhjGubh)}(hXUseful to test detection and handling of automated re-transmits by the EC. Specifically of packets that the EC considers not-ACKed but the driver already considers ACKed (due to dropped ACK). In this case, the EC re-transmits the packet-to-be-ACKed and the driver should detect it as duplicate/already handled. Note that the driver should still send an ACK for the re-transmitted packet.h]hXUseful to test detection and handling of automated re-transmits by the EC. Specifically of packets that the EC considers not-ACKed but the driver already considers ACKed (due to dropped ACK). In this case, the EC re-transmits the packet-to-be-ACKed and the driver should detect it as duplicate/already handled. Note that the driver should still send an ACK for the re-transmitted packet.}(hjvGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j +ssh_ptl_should_drop_nak_packet (C function) c.ssh_ptl_should_drop_nak_packethNtauh1jhjhhhNhNubj)}(hhh](j)}(h*bool ssh_ptl_should_drop_nak_packet (void)h]j)}(h)bool ssh_ptl_should_drop_nak_packet(void)h](j)}(hjh]hbool}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKubj5)}(h h]h }(hjGhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjGhhhjGhKubjF)}(hssh_ptl_should_drop_nak_packeth]jL)}(hssh_ptl_should_drop_nak_packeth]hssh_ptl_should_drop_nak_packet}(hjGhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjGubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjGhhhjGhKubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]noemphhhuh1j hjGubah}(h]h ]h"]h$]h&]hhuh1jhjGhhhjGhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjGhhhjGhKubah}(h]jGah ](jojpeh"]h$]h&]jtju)jvhuh1jhjGhKhjGhhubjx)}(hhh]h)}(h)Error injection hook to drop NAK packets.h]h)Error injection hook to drop NAK packets.}(hj HhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhjHhhubah}(h]h ]h"]h$]h&]uh1jwhjGhhhjGhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#Hjj#Hjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Useful to test/force automated (timeout-based) re-transmit by the EC. Specifically, packets that have not reached the driver completely/with valid checksums. Only useful in combination with receival of (injected) bad data.h](h)}(h**Parameters**h]j)}(hj-Hh]h Parameters}(hj/HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Hubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhj'Hubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjLHh]hvoid}(hjNHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJHubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjFHubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjeHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaHhMhjbHubah}(h]h ]h"]h$]h&]uh1jhjFHubeh}(h]h ]h"]h$]h&]uh1jhjaHhMhjCHubah}(h]h ]h"]h$]h&]uh1jhj'Hubh)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj'Hubh)}(hUseful to test/force automated (timeout-based) re-transmit by the EC. Specifically, packets that have not reached the driver completely/with valid checksums. Only useful in combination with receival of (injected) bad data.h]hUseful to test/force automated (timeout-based) re-transmit by the EC. Specifically, packets that have not reached the driver completely/with valid checksums. Only useful in combination with receival of (injected) bad data.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhj'Hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j +ssh_ptl_should_drop_dsq_packet (C function) c.ssh_ptl_should_drop_dsq_packethNtauh1jhjhhhNhNubj)}(hhh](j)}(h*bool ssh_ptl_should_drop_dsq_packet (void)h]j)}(h)bool ssh_ptl_should_drop_dsq_packet(void)h](j)}(hjh]hbool}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM ubj5)}(h h]h }(hjHhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjHhhhjHhM ubjF)}(hssh_ptl_should_drop_dsq_packeth]jL)}(hssh_ptl_should_drop_dsq_packeth]hssh_ptl_should_drop_dsq_packet}(hjHhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjHubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjHhhhjHhM ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]noemphhhuh1j hjIubah}(h]h ]h"]h$]h&]hhuh1jhjHhhhjHhM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjHhhhjHhM ubah}(h]jHah ](jojpeh"]h$]h&]jtju)jvhuh1jhjHhM hjHhhubjx)}(hhh]h)}(h3Error injection hook to drop sequenced data packet.h]h3Error injection hook to drop sequenced data packet.}(hj2IhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj/Ihhubah}(h]h ]h"]h$]h&]uh1jwhjHhhhjHhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjJIjjJIjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Useful to test re-transmit timeout of the driver. If the data packet has not been ACKed after a certain time, the driver should re-transmit the packet up to limited number of times defined in SSH_PTL_MAX_PACKET_TRIES.h](h)}(h**Parameters**h]j)}(hjTIh]h Parameters}(hjVIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRIubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM hjNIubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjsIh]hvoid}(hjuIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqIubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM hjmIubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM hjIubah}(h]h ]h"]h$]h&]uh1jhjmIubeh}(h]h ]h"]h$]h&]uh1jhjIhM hjjIubah}(h]h ]h"]h$]h&]uh1jhjNIubh)}(h**Description**h]j)}(hjIh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjNIubh)}(hUseful to test re-transmit timeout of the driver. If the data packet has not been ACKed after a certain time, the driver should re-transmit the packet up to limited number of times defined in SSH_PTL_MAX_PACKET_TRIES.h]hUseful to test re-transmit timeout of the driver. If the data packet has not been ACKed after a certain time, the driver should re-transmit the packet up to limited number of times defined in SSH_PTL_MAX_PACKET_TRIES.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjNIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssh_ptl_should_fail_write (C function)c.ssh_ptl_should_fail_writehNtauh1jhjhhhNhNubj)}(hhh](j)}(h$int ssh_ptl_should_fail_write (void)h]j)}(h#int ssh_ptl_should_fail_write(void)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubj5)}(h h]h }(hjJhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjIhhhjJhMubjF)}(hssh_ptl_should_fail_writeh]jL)}(hssh_ptl_should_fail_writeh]hssh_ptl_should_fail_write}(hjJhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjIhhhjJhMubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hj0JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Jubah}(h]h ]h"]h$]h&]noemphhhuh1j hj(Jubah}(h]h ]h"]h$]h&]hhuh1jhjIhhhjJhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjIhhhjJhMubah}(h]jIah ](jojpeh"]h$]h&]jtju)jvhuh1jhjJhMhjIhhubjx)}(hhh]h)}(h8Error injection hook to make serdev_device_write() fail.h]h8Error injection hook to make serdev_device_write() fail.}(hjZJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjWJhhubah}(h]h ]h"]h$]h&]uh1jwhjIhhhjJhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrJjjrJjjjuh1jhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Hook to simulate errors in serdev_device_write when transmitting packets.h](h)}(h**Parameters**h]j)}(hj|Jh]h Parameters}(hj~JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzJubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjvJubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjJh]hvoid}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjJubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjJubah}(h]h ]h"]h$]h&]uh1jhjvJubh)}(h**Description**h]j)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjvJubh)}(hIHook to simulate errors in serdev_device_write when transmitting packets.h]hIHook to simulate errors in serdev_device_write when transmitting packets.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjvJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j +ssh_ptl_should_corrupt_tx_data (C function) c.ssh_ptl_should_corrupt_tx_datahNtauh1jhjhhhNhNubj)}(hhh](j)}(h*bool ssh_ptl_should_corrupt_tx_data (void)h]j)}(h)bool ssh_ptl_should_corrupt_tx_data(void)h](j)}(hjh]hbool}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM)ubj5)}(h h]h }(hj)KhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjKhhhj(KhM)ubjF)}(hssh_ptl_should_corrupt_tx_datah]jL)}(hssh_ptl_should_corrupt_tx_datah]hssh_ptl_should_corrupt_tx_data}(hj;KhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj7Kubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjKhhhj(KhM)ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjWKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSKubah}(h]h ]h"]h$]h&]noemphhhuh1j hjOKubah}(h]h ]h"]h$]h&]hhuh1jhjKhhhj(KhM)ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjKhhhj(KhM)ubah}(h]jKah ](jojpeh"]h$]h&]jtju)jvhuh1jhj(KhM)hjKhhubjx)}(hhh]h)}(hCError injection hook to simulate invalid data being sent to the EC.h]hCError injection hook to simulate invalid data being sent to the EC.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM hj~Khhubah}(h]h ]h"]h$]h&]uh1jwhjKhhhj(KhM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjKjjKjjjuh1jhhhjhNhNubj)}(hXi**Parameters** ``void`` no arguments **Description** Hook to simulate corrupt/invalid data being sent from host (driver) to EC. Causes the packet data to be actively corrupted by overwriting it with pre-defined values, such that it becomes invalid, causing the EC to respond with a NAK packet. Useful to test handling of NAK packets received by the driver.h](h)}(h**Parameters**h]j)}(hjKh]h Parameters}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM$hjKubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjKh]hvoid}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM'hjKubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM'hjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhM'hjKubah}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM)hjKubh)}(hX/Hook to simulate corrupt/invalid data being sent from host (driver) to EC. Causes the packet data to be actively corrupted by overwriting it with pre-defined values, such that it becomes invalid, causing the EC to respond with a NAK packet. Useful to test handling of NAK packets received by the driver.h]hX/Hook to simulate corrupt/invalid data being sent from host (driver) to EC. Causes the packet data to be actively corrupted by overwriting it with pre-defined values, such that it becomes invalid, causing the EC to respond with a NAK packet. Useful to test handling of NAK packets received by the driver.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM!hjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j *ssh_ptl_should_corrupt_rx_syn (C function)c.ssh_ptl_should_corrupt_rx_synhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)bool ssh_ptl_should_corrupt_rx_syn (void)h]j)}(h(bool ssh_ptl_should_corrupt_rx_syn(void)h](j)}(hjh]hbool}(hjBLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Lhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM6ubj5)}(h h]h }(hjPLhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj>LhhhjOLhM6ubjF)}(hssh_ptl_should_corrupt_rx_synh]jL)}(hssh_ptl_should_corrupt_rx_synh]hssh_ptl_should_corrupt_rx_syn}(hjbLhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj^Lubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj>LhhhjOLhM6ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hj~LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjzLubah}(h]h ]h"]h$]h&]noemphhhuh1j hjvLubah}(h]h ]h"]h$]h&]hhuh1jhj>LhhhjOLhM6ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj:LhhhjOLhM6ubah}(h]j5Lah ](jojpeh"]h$]h&]jtju)jvhuh1jhjOLhM6hj7Lhhubjx)}(hhh]h)}(hCError injection hook to simulate invalid data being sent by the EC.h]hCError injection hook to simulate invalid data being sent by the EC.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM0hjLhhubah}(h]h ]h"]h$]h&]uh1jwhj7LhhhjOLhM6ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjLjjLjjjuh1jhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Hook to simulate invalid SYN bytes, i.e. an invalid start of messages and test handling thereof in the driver.h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM4hjLubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjLh]hvoid}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM7hjLubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhM7hjLubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjLhM7hjLubah}(h]h ]h"]h$]h&]uh1jhjLubh)}(h**Description**h]j)}(hj$Mh]h Description}(hj&MhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"Mubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM9hjLubh)}(hnHook to simulate invalid SYN bytes, i.e. an invalid start of messages and test handling thereof in the driver.h]hnHook to simulate invalid SYN bytes, i.e. an invalid start of messages and test handling thereof in the driver.}(hj:MhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM1hjLubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j +ssh_ptl_should_corrupt_rx_data (C function) c.ssh_ptl_should_corrupt_rx_datahNtauh1jhjhhhNhNubj)}(hhh](j)}(h*bool ssh_ptl_should_corrupt_rx_data (void)h]j)}(h)bool ssh_ptl_should_corrupt_rx_data(void)h](j)}(hjh]hbool}(hjiMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeMhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMCubj5)}(h h]h }(hjwMhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjeMhhhjvMhMCubjF)}(hssh_ptl_should_corrupt_rx_datah]jL)}(hssh_ptl_should_corrupt_rx_datah]hssh_ptl_should_corrupt_rx_data}(hjMhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjMubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjeMhhhjvMhMCubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]noemphhhuh1j hjMubah}(h]h ]h"]h$]h&]hhuh1jhjeMhhhjvMhMCubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjaMhhhjvMhMCubah}(h]j\Mah ](jojpeh"]h$]h&]jtju)jvhuh1jhjvMhMChj^Mhhubjx)}(hhh]h)}(hCError injection hook to simulate invalid data being sent by the EC.h]hCError injection hook to simulate invalid data being sent by the EC.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM=hjMhhubah}(h]h ]h"]h$]h&]uh1jwhj^MhhhjvMhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Hook to simulate invalid data/checksum of the message frame and test handling thereof in the driver.h](h)}(h**Parameters**h]j)}(hjMh]h Parameters}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMAhjMubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjNh]hvoid}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMDhj Nubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj)NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%NhMDhj&Nubah}(h]h ]h"]h$]h&]uh1jhj Nubeh}(h]h ]h"]h$]h&]uh1jhj%NhMDhjNubah}(h]h ]h"]h$]h&]uh1jhjMubh)}(h**Description**h]j)}(hjKNh]h Description}(hjMNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjINubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMFhjMubh)}(hdHook to simulate invalid data/checksum of the message frame and test handling thereof in the driver.h]hdHook to simulate invalid data/checksum of the message frame and test handling thereof in the driver.}(hjaNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM>hjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_packet_init (C function)c.ssh_packet_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(hsvoid ssh_packet_init (struct ssh_packet *packet, unsigned long type, u8 priority, const struct ssh_packet_ops *ops)h]j)}(hrvoid ssh_packet_init(struct ssh_packet *packet, unsigned long type, u8 priority, const struct ssh_packet_ops *ops)h](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM<ubj5)}(h h]h }(hjNhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjNhhhjNhM<ubjF)}(hssh_packet_inith]jL)}(hssh_packet_inith]hssh_packet_init}(hjNhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjNubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjNhhhjNhM<ubj)}(h^(struct ssh_packet *packet, unsigned long type, u8 priority, const struct ssh_packet_ops *ops)h](j )}(hstruct ssh_packet *packeth](j#)}(hj&h]hstruct}(hjNhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjNubj5)}(h h]h }(hjNhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjNubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hjNhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjNubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjNmodnameN classnameNjHjK)}jN]jQ)}jDjNsbc.ssh_packet_initasbuh1hhjNubj5)}(h h]h }(hj OhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjNubje)}(hjhh]h*}(hjOhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjNubjL)}(hpacketh]hpacket}(hj&OhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubj )}(hunsigned long typeh](j)}(hunsignedh]hunsigned}(hj?OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Oubj5)}(h h]h }(hjMOhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;Oubj)}(hlongh]hlong}(hj[OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Oubj5)}(h h]h }(hjiOhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;OubjL)}(htypeh]htype}(hjwOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj;Oubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubj )}(h u8 priorityh](h)}(hhh]jL)}(hu8h]hu8}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjOubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjOmodnameN classnameNjHjK)}jN]jOc.ssh_packet_initasbuh1hhjOubj5)}(h h]h }(hjOhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOubjL)}(hpriorityh]hpriority}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjOubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubj )}(h const struct ssh_packet_ops *opsh](j#)}(hjRh]hconst}(hjOhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjOubj5)}(h h]h }(hjOhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOubj#)}(hj&h]hstruct}(hjOhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjOubj5)}(h h]h }(hjPhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOubh)}(hhh]jL)}(hssh_packet_opsh]hssh_packet_ops}(hjPhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjPubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjPmodnameN classnameNjHjK)}jN]jOc.ssh_packet_initasbuh1hhjOubj5)}(h h]h }(hj/PhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOubje)}(hjhh]h*}(hj=PhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjOubjL)}(hopsh]hops}(hjJPhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjOubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjNubeh}(h]h ]h"]h$]h&]hhuh1jhjNhhhjNhM<ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjNhhhjNhM<ubah}(h]jNah ](jojpeh"]h$]h&]jtju)jvhuh1jhjNhM<hjNhhubjx)}(hhh]h)}(hInitialize SSH packet.h]hInitialize SSH packet.}(hjtPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM0hjqPhhubah}(h]h ]h"]h$]h&]uh1jwhjNhhhjNhM<ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1jhhhjhNhNubj)}(hXX**Parameters** ``struct ssh_packet *packet`` The packet to initialize. ``unsigned long type`` Type-flags of the packet. ``u8 priority`` Priority of the packet. See SSH_PACKET_PRIORITY() for details. ``const struct ssh_packet_ops *ops`` Packet operations. **Description** Initializes the given SSH packet. Sets the transmission buffer pointer to ``NULL`` and the transmission buffer length to zero. For data-type packets, this buffer has to be set separately via ssh_packet_set_data() before submission, and must contain a valid SSH message, i.e. frame with optional payload of any type.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM4hjPubj)}(hhh](j)}(h8``struct ssh_packet *packet`` The packet to initialize. h](j)}(h``struct ssh_packet *packet``h]j)}(hjPh]hstruct ssh_packet *packet}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM1hjPubj)}(hhh]h)}(hThe packet to initialize.h]hThe packet to initialize.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM1hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM1hjPubj)}(h1``unsigned long type`` Type-flags of the packet. h](j)}(h``unsigned long type``h]j)}(hjPh]hunsigned long type}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM2hjPubj)}(hhh]h)}(hType-flags of the packet.h]hType-flags of the packet.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM2hjQubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjQhM2hjPubj)}(hO``u8 priority`` Priority of the packet. See SSH_PACKET_PRIORITY() for details. h](j)}(h``u8 priority``h]j)}(hj'Qh]h u8 priority}(hj)QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%Qubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM3hj!Qubj)}(hhh]h)}(h>Priority of the packet. See SSH_PACKET_PRIORITY() for details.h]h>Priority of the packet. See SSH_PACKET_PRIORITY() for details.}(hj@QhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjReturns zero on success, ``-ENOMEM`` if the allocation failed.h](hReturns zero on success, }(hjVhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubh if the allocation failed.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMxhjUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssh_ctrl_packet_free (C function)c.ssh_ctrl_packet_freehNtauh1jhjhhhNhNubj)}(hhh](j)}(h0void ssh_ctrl_packet_free (struct ssh_packet *p)h]j)}(h/void ssh_ctrl_packet_free(struct ssh_packet *p)h](j)}(hvoidh]hvoid}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubj5)}(h h]h }(hjWhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjVhhhjWhMubjF)}(hssh_ctrl_packet_freeh]jL)}(hssh_ctrl_packet_freeh]hssh_ctrl_packet_free}(hjWhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjWubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjVhhhjWhMubj)}(h(struct ssh_packet *p)h]j )}(hstruct ssh_packet *ph](j#)}(hj&h]hstruct}(hj6WhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj2Wubj5)}(h h]h }(hjCWhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj2Wubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hjTWhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjQWubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjVWmodnameN classnameNjHjK)}jN]jQ)}jDjWsbc.ssh_ctrl_packet_freeasbuh1hhj2Wubj5)}(h h]h }(hjtWhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj2Wubje)}(hjhh]h*}(hjWhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj2WubjL)}(hjqh]hp}(hjWhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj2Wubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.Wubah}(h]h ]h"]h$]h&]hhuh1jhjVhhhjWhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjVhhhjWhMubah}(h]jVah ](jojpeh"]h$]h&]jtju)jvhuh1jhjWhMhjVhhubjx)}(hhh]h)}(h0Free packet allocated from control packet cache.h]h0Free packet allocated from control packet cache.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjWhhubah}(h]h ]h"]h$]h&]uh1jwhjVhhhjWhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1jhhhjhNhNubj)}(h>**Parameters** ``struct ssh_packet *p`` The packet to free.h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjWubj)}(hhh]j)}(h,``struct ssh_packet *p`` The packet to free.h](j)}(h``struct ssh_packet *p``h]j)}(hjWh]hstruct ssh_packet *p}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjWubj)}(hhh]h)}(hThe packet to free.h]hThe packet to free.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjXubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjXhMhjWubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j %ssh_ptl_tx_wakeup_packet (C function)c.ssh_ptl_tx_wakeup_packethNtauh1jhjhhhNhNubj)}(hhh](j)}(h3void ssh_ptl_tx_wakeup_packet (struct ssh_ptl *ptl)h]j)}(h2void ssh_ptl_tx_wakeup_packet(struct ssh_ptl *ptl)h](j)}(hvoidh]hvoid}(hjSXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOXhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMrubj5)}(h h]h }(hjbXhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjOXhhhjaXhMrubjF)}(hssh_ptl_tx_wakeup_packeth]jL)}(hssh_ptl_tx_wakeup_packeth]hssh_ptl_tx_wakeup_packet}(hjtXhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjpXubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjOXhhhjaXhMrubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hjXhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjXubj5)}(h h]h }(hjXhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjXubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hjXhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjXubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjXmodnameN classnameNjHjK)}jN]jQ)}jDjvXsbc.ssh_ptl_tx_wakeup_packetasbuh1hhjXubj5)}(h h]h }(hjXhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjXubje)}(hjhh]h*}(hjXhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjXubjL)}(hptlh]hptl}(hjXhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjXubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjXubah}(h]h ]h"]h$]h&]hhuh1jhjOXhhhjaXhMrubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjKXhhhjaXhMrubah}(h]jFXah ](jojpeh"]h$]h&]jtju)jvhuh1jhjaXhMrhjHXhhubjx)}(hhh]h)}(h1Wake up packet transmitter thread for new packet.h]h1Wake up packet transmitter thread for new packet.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMjhjYhhubah}(h]h ]h"]h$]h&]uh1jwhjHXhhhjaXhMrubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+Yjj+Yjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Description** Wakes up the packet transmitter thread, notifying it that a new packet has arrived and is ready for transfer. If the packet transport layer has been shut down, calls to this function will be ignored.h](h)}(h**Parameters**h]j)}(hj5Yh]h Parameters}(hj7YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Yubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMnhj/Yubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjTYh]hstruct ssh_ptl *ptl}(hjVYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRYubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMlhjNYubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjmYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiYhMlhjjYubah}(h]h ]h"]h$]h&]uh1jhjNYubeh}(h]h ]h"]h$]h&]uh1jhjiYhMlhjKYubah}(h]h ]h"]h$]h&]uh1jhj/Yubh)}(h**Description**h]j)}(hjYh]h Description}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMnhj/Yubh)}(hWakes up the packet transmitter thread, notifying it that a new packet has arrived and is ready for transfer. If the packet transport layer has been shut down, calls to this function will be ignored.h]hWakes up the packet transmitter thread, notifying it that a new packet has arrived and is ready for transfer. If the packet transport layer has been shut down, calls to this function will be ignored.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMnhj/Yubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_tx_start (C function)c.ssh_ptl_tx_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ssh_ptl_tx_start (struct ssh_ptl *ptl)h]j)}(h)int ssh_ptl_tx_start(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubj5)}(h h]h }(hjYhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjYhhhjYhMubjF)}(hssh_ptl_tx_starth]jL)}(hssh_ptl_tx_starth]hssh_ptl_tx_start}(hjYhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjYubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjYhhhjYhMubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hjZhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj Zubj5)}(h h]h }(hjZhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj Zubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hj/ZhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,Zubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj1ZmodnameN classnameNjHjK)}jN]jQ)}jDjYsbc.ssh_ptl_tx_startasbuh1hhj Zubj5)}(h h]h }(hjOZhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj Zubje)}(hjhh]h*}(hj]ZhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ZubjL)}(hptlh]hptl}(hjjZhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj Zubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj Zubah}(h]h ]h"]h$]h&]hhuh1jhjYhhhjYhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjYhhhjYhMubah}(h]jYah ](jojpeh"]h$]h&]jtju)jvhuh1jhjYhMhjYhhubjx)}(hhh]h)}(h Start packet transmitter thread.h]h Start packet transmitter thread.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM{hjZhhubah}(h]h ]h"]h$]h&]uh1jwhjYhhhjYhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjZh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjZubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjZh]hstruct ssh_ptl *ptl}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM|hjZubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM|hjZubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjZhM|hjZubah}(h]h ]h"]h$]h&]uh1jhjZubh)}(h **Return**h]j)}(hj[h]hReturn}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM~hjZubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hj&[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM~hjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_tx_stop (C function)c.ssh_ptl_tx_stophNtauh1jhjhhhNhNubj)}(hhh](j)}(h)int ssh_ptl_tx_stop (struct ssh_ptl *ptl)h]j)}(h(int ssh_ptl_tx_stop(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hjU[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ[hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubj5)}(h h]h }(hjd[hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjQ[hhhjc[hMubjF)}(hssh_ptl_tx_stoph]jL)}(hssh_ptl_tx_stoph]hssh_ptl_tx_stop}(hjv[hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjr[ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjQ[hhhjc[hMubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hj[hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj[ubj5)}(h h]h }(hj[hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj[ubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hj[hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj[modnameN classnameNjHjK)}jN]jQ)}jDjx[sbc.ssh_ptl_tx_stopasbuh1hhj[ubj5)}(h h]h }(hj[hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj[ubje)}(hjhh]h*}(hj[hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj[ubjL)}(hptlh]hptl}(hj[hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj[ubah}(h]h ]h"]h$]h&]hhuh1jhjQ[hhhjc[hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjM[hhhjc[hMubah}(h]jH[ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjc[hMhjJ[hhubjx)}(hhh]h)}(hStop packet transmitter thread.h]hStop packet transmitter thread.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jwhjJ[hhhjc[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-\jj-\jjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj7\h]h Parameters}(hj9\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5\ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj1\ubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjV\h]hstruct ssh_ptl *ptl}(hjX\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT\ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjP\ubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjo\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk\hMhjl\ubah}(h]h ]h"]h$]h&]uh1jhjP\ubeh}(h]h ]h"]h$]h&]uh1jhjk\hMhjM\ubah}(h]h ]h"]h$]h&]uh1jhj1\ubh)}(h **Return**h]j)}(hj\h]hReturn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj1\ubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj1\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_submit (C function)c.ssh_ptl_submithNtauh1jhjhhhNhNubj)}(hhh](j)}(h>int ssh_ptl_submit (struct ssh_ptl *ptl, struct ssh_packet *p)h]j)}(h=int ssh_ptl_submit(struct ssh_ptl *ptl, struct ssh_packet *p)h](j)}(hinth]hint}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM ubj5)}(h h]h }(hj\hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj\hhhj\hM ubjF)}(hssh_ptl_submith]jL)}(hssh_ptl_submith]hssh_ptl_submit}(hj\hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj\ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj\hhhj\hM ubj)}(h+(struct ssh_ptl *ptl, struct ssh_packet *p)h](j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hj]hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj]ubj5)}(h h]h }(hj ]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj]ubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hj1]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj.]ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj3]modnameN classnameNjHjK)}jN]jQ)}jDj\sbc.ssh_ptl_submitasbuh1hhj]ubj5)}(h h]h }(hjQ]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj]ubje)}(hjhh]h*}(hj_]hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj]ubjL)}(hptlh]hptl}(hjl]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ]ubj )}(hstruct ssh_packet *ph](j#)}(hj&h]hstruct}(hj]hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj]ubj5)}(h h]h }(hj]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj]ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj]ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj]modnameN classnameNjHjK)}jN]jM]c.ssh_ptl_submitasbuh1hhj]ubj5)}(h h]h }(hj]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj]ubje)}(hjhh]h*}(hj]hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj]ubjL)}(hjqh]hp}(hj]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ]ubeh}(h]h ]h"]h$]h&]hhuh1jhj\hhhj\hM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj\hhhj\hM ubah}(h]j\ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj\hM hj\hhubjx)}(hhh]h)}(h'Submit a packet to the transport layer.h]h'Submit a packet to the transport layer.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj^hhubah}(h]h ]h"]h$]h&]uh1jwhj\hhhj\hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer to submit the packet to. ``struct ssh_packet *p`` The packet to submit. **Description** Submits a new packet to the transport layer, queuing it to be sent. This function should not be used for re-submission. **Return** Returns zero on success, ``-EINVAL`` if a packet field is invalid or the packet has been canceled prior to submission, ``-EALREADY`` if the packet has already been submitted, or ``-ESHUTDOWN`` if the packet transport layer has been shut down.h](h)}(h**Parameters**h]j)}(hj'^h]h Parameters}(hj)^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%^ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj!^ubj)}(hhh](j)}(hL``struct ssh_ptl *ptl`` The packet transport layer to submit the packet to. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjF^h]hstruct ssh_ptl *ptl}(hjH^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD^ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj@^ubj)}(hhh]h)}(h3The packet transport layer to submit the packet to.h]h3The packet transport layer to submit the packet to.}(hj_^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[^hMhj\^ubah}(h]h ]h"]h$]h&]uh1jhj@^ubeh}(h]h ]h"]h$]h&]uh1jhj[^hMhj=^ubj)}(h/``struct ssh_packet *p`` The packet to submit. h](j)}(h``struct ssh_packet *p``h]j)}(hj^h]hstruct ssh_packet *p}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}^ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjy^ubj)}(hhh]h)}(hThe packet to submit.h]hThe packet to submit.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jhjy^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj=^ubeh}(h]h ]h"]h$]h&]uh1jhj!^ubh)}(h**Description**h]j)}(hj^h]h Description}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj!^ubh)}(hwSubmits a new packet to the transport layer, queuing it to be sent. This function should not be used for re-submission.h]hwSubmits a new packet to the transport layer, queuing it to be sent. This function should not be used for re-submission.}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj!^ubh)}(h **Return**h]j)}(hj^h]hReturn}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj!^ubh)}(hReturns zero on success, ``-EINVAL`` if a packet field is invalid or the packet has been canceled prior to submission, ``-EALREADY`` if the packet has already been submitted, or ``-ESHUTDOWN`` if the packet transport layer has been shut down.h](hReturns zero on success, }(hj^hhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubhS if a packet field is invalid or the packet has been canceled prior to submission, }(hj^hhhNhNubj)}(h ``-EALREADY``h]h -EALREADY}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh. if the packet has already been submitted, or }(hj^hhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj#_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubh2 if the packet transport layer has been shut down.}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj!^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_cancel (C function)c.ssh_ptl_cancelhNtauh1jhjhhhNhNubj)}(hhh](j)}(h*void ssh_ptl_cancel (struct ssh_packet *p)h]j)}(h)void ssh_ptl_cancel(struct ssh_packet *p)h](j)}(hvoidh]hvoid}(hj\_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX_hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubj5)}(h h]h }(hjk_hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjX_hhhjj_hMubjF)}(hssh_ptl_cancelh]jL)}(hssh_ptl_cancelh]hssh_ptl_cancel}(hj}_hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjy_ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjX_hhhjj_hMubj)}(h(struct ssh_packet *p)h]j )}(hstruct ssh_packet *ph](j#)}(hj&h]hstruct}(hj_hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj_ubj5)}(h h]h }(hj_hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj_ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj_hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj_ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj_modnameN classnameNjHjK)}jN]jQ)}jDj_sbc.ssh_ptl_cancelasbuh1hhj_ubj5)}(h h]h }(hj_hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj_ubje)}(hjhh]h*}(hj_hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj_ubjL)}(hjqh]hp}(hj_hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj_ubah}(h]h ]h"]h$]h&]hhuh1jhjX_hhhjj_hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjT_hhhjj_hMubah}(h]jO_ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjj_hMhjQ_hhubjx)}(hhh]h)}(hCancel a packet.h]hCancel a packet.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj`hhubah}(h]h ]h"]h$]h&]uh1jwhjQ_hhhjj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3`jj3`jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct ssh_packet *p`` The packet to cancel. **Description** Cancels a packet. There are no guarantees on when completion and release callbacks will be called. This may occur during execution of this function or may occur at any point later. Note that it is not guaranteed that the packet will actually be canceled if the packet is concurrently completed by another process. The only guarantee of this function is that the packet will be completed (with success, failure, or cancellation) and released from the transport layer in a reasonable time-frame. May be called before the packet has been submitted, in which case any later packet submission fails.h](h)}(h**Parameters**h]j)}(hj=`h]h Parameters}(hj?`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;`ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj7`ubj)}(hhh]j)}(h/``struct ssh_packet *p`` The packet to cancel. h](j)}(h``struct ssh_packet *p``h]j)}(hj\`h]hstruct ssh_packet *p}(hj^`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ`ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjV`ubj)}(hhh]h)}(hThe packet to cancel.h]hThe packet to cancel.}(hju`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq`hMhjr`ubah}(h]h ]h"]h$]h&]uh1jhjV`ubeh}(h]h ]h"]h$]h&]uh1jhjq`hMhjS`ubah}(h]h ]h"]h$]h&]uh1jhj7`ubh)}(h**Description**h]j)}(hj`h]h Description}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj7`ubh)}(hCancels a packet. There are no guarantees on when completion and release callbacks will be called. This may occur during execution of this function or may occur at any point later.h]hCancels a packet. There are no guarantees on when completion and release callbacks will be called. This may occur during execution of this function or may occur at any point later.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj7`ubh)}(hX8Note that it is not guaranteed that the packet will actually be canceled if the packet is concurrently completed by another process. The only guarantee of this function is that the packet will be completed (with success, failure, or cancellation) and released from the transport layer in a reasonable time-frame.h]hX8Note that it is not guaranteed that the packet will actually be canceled if the packet is concurrently completed by another process. The only guarantee of this function is that the packet will be completed (with success, failure, or cancellation) and released from the transport layer in a reasonable time-frame.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj7`ubh)}(hdMay be called before the packet has been submitted, in which case any later packet submission fails.h]hdMay be called before the packet has been submitted, in which case any later packet submission fails.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj7`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_rx_start (C function)c.ssh_ptl_rx_starthNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ssh_ptl_rx_start (struct ssh_ptl *ptl)h]j)}(h)int ssh_ptl_rx_start(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM5ubj5)}(h h]h }(hj ahhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj`hhhjahM5ubjF)}(hssh_ptl_rx_starth]jL)}(hssh_ptl_rx_starth]hssh_ptl_rx_start}(hjahhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjaubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj`hhhjahM5ubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hj7ahhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj3aubj5)}(h h]h }(hjDahhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj3aubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hjUahhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjRaubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjWamodnameN classnameNjHjK)}jN]jQ)}jDjasbc.ssh_ptl_rx_startasbuh1hhj3aubj5)}(h h]h }(hjuahhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj3aubje)}(hjhh]h*}(hjahhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj3aubjL)}(hptlh]hptl}(hjahhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj3aubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/aubah}(h]h ]h"]h$]h&]hhuh1jhj`hhhjahM5ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj`hhhjahM5ubah}(h]j`ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjahM5hj`hhubjx)}(hhh]h)}(h-Start packet transport layer receiver thread.h]h-Start packet transport layer receiver thread.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM0hjahhubah}(h]h ]h"]h$]h&]uh1jwhj`hhhjahM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM4hjaubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjah]hstruct ssh_ptl *ptl}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM1hjaubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhM1hjbubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhjbhM1hjaubah}(h]h ]h"]h$]h&]uh1jhjaubh)}(h **Return**h]j)}(hj6bh]hReturn}(hj8bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4bubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM3hjaubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hjLbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM3hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_rx_stop (C function)c.ssh_ptl_rx_stophNtauh1jhjhhhNhNubj)}(hhh](j)}(h)int ssh_ptl_rx_stop (struct ssh_ptl *ptl)h]j)}(h(int ssh_ptl_rx_stop(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hj{bhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwbhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMHubj5)}(h h]h }(hjbhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjwbhhhjbhMHubjF)}(hssh_ptl_rx_stoph]jL)}(hssh_ptl_rx_stoph]hssh_ptl_rx_stop}(hjbhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjbubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjwbhhhjbhMHubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hjbhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjbubj5)}(h h]h }(hjbhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjbubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hjbhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjbubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjbmodnameN classnameNjHjK)}jN]jQ)}jDjbsbc.ssh_ptl_rx_stopasbuh1hhjbubj5)}(h h]h }(hjbhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjbubje)}(hjhh]h*}(hjchhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjbubjL)}(hptlh]hptl}(hjchhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjbubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjbubah}(h]h ]h"]h$]h&]hhuh1jhjwbhhhjbhMHubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjsbhhhjbhMHubah}(h]jnbah ](jojpeh"]h$]h&]jtju)jvhuh1jhjbhMHhjpbhhubjx)}(hhh]h)}(h,Stop packet transport layer receiver thread.h]h,Stop packet transport layer receiver thread.}(hj;chhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMChj8chhubah}(h]h ]h"]h$]h&]uh1jwhjpbhhhjbhMHubeh}(h]h ](jfunctioneh"]h$]h&]jjjjScjjScjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj]ch]h Parameters}(hj_chhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[cubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMGhjWcubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hj|ch]hstruct ssh_ptl *ptl}(hj~chhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzcubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMDhjvcubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMDhjcubah}(h]h ]h"]h$]h&]uh1jhjvcubeh}(h]h ]h"]h$]h&]uh1jhjchMDhjscubah}(h]h ]h"]h$]h&]uh1jhjWcubh)}(h **Return**h]j)}(hjch]hReturn}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMFhjWcubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMFhjWcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_rx_rcvbuf (C function)c.ssh_ptl_rx_rcvbufhNtauh1jhjhhhNhNubj)}(hhh](j)}(hHssize_t ssh_ptl_rx_rcvbuf (struct ssh_ptl *ptl, const u8 *buf, size_t n)h]j)}(hGssize_t ssh_ptl_rx_rcvbuf(struct ssh_ptl *ptl, const u8 *buf, size_t n)h](h)}(hhh]jL)}(hssize_th]hssize_t}(hjchhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjcubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjdmodnameN classnameNjHjK)}jN]jQ)}jDssh_ptl_rx_rcvbufsbc.ssh_ptl_rx_rcvbufasbuh1hhjchhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMbubj5)}(h h]h }(hj!dhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjchhhj dhMbubjF)}(hssh_ptl_rx_rcvbufh]jL)}(hjdh]hssh_ptl_rx_rcvbuf}(hj3dhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj/dubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjchhhj dhMbubj)}(h.(struct ssh_ptl *ptl, const u8 *buf, size_t n)h](j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hjNdhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjJdubj5)}(h h]h }(hj[dhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjJdubh)}(hhh]jL)}(hssh_ptlh]hssh_ptl}(hjldhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjidubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjndmodnameN classnameNjHjK)}jN]jdc.ssh_ptl_rx_rcvbufasbuh1hhjJdubj5)}(h h]h }(hjdhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjJdubje)}(hjhh]h*}(hjdhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjJdubjL)}(hptlh]hptl}(hjdhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJdubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjFdubj )}(h const u8 *bufh](j#)}(hjRh]hconst}(hjdhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjdubj5)}(h h]h }(hjdhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjdubh)}(hhh]jL)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjdubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjdmodnameN classnameNjHjK)}jN]jdc.ssh_ptl_rx_rcvbufasbuh1hhjdubj5)}(h h]h }(hjdhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjdubje)}(hjhh]h*}(hjehhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjdubjL)}(hbufh]hbuf}(hjehhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjdubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjFdubj )}(hsize_t nh](h)}(hhh]jL)}(hsize_th]hsize_t}(hj1ehhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj.eubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj3emodnameN classnameNjHjK)}jN]jdc.ssh_ptl_rx_rcvbufasbuh1hhj*eubj5)}(h h]h }(hjOehhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*eubjL)}(hjWh]hn}(hj]ehhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj*eubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjFdubeh}(h]h ]h"]h$]h&]hhuh1jhjchhhj dhMbubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjchhhj dhMbubah}(h]jcah ](jojpeh"]h$]h&]jtju)jvhuh1jhj dhMbhjchhubjx)}(hhh]h)}(h9Push data from lower-layer transport to the packet layer.h]h9Push data from lower-layer transport to the packet layer.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMUhjehhubah}(h]h ]h"]h$]h&]uh1jwhjchhhj dhMbubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjhNhNubj)}(hX2**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. ``const u8 *buf`` Pointer to the data to push to the layer. ``size_t n`` Size of the data to push to the layer, in bytes. **Description** Pushes data from a lower-layer transport to the receiver fifo buffer of the packet layer and notifies the receiver thread. Calls to this function are ignored once the packet layer has been shut down. **Return** Returns the number of bytes transferred (positive or zero) on success. Returns ``-ESHUTDOWN`` if the packet layer has been shut down.h](h)}(h**Parameters**h]j)}(hjeh]h Parameters}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMYhjeubj)}(hhh](j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j)}(h``struct ssh_ptl *ptl``h]j)}(hjeh]hstruct ssh_ptl *ptl}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMWhjeubj)}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMWhjeubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjehMWhjeubj)}(h<``const u8 *buf`` Pointer to the data to push to the layer. h](j)}(h``const u8 *buf``h]j)}(hjfh]h const u8 *buf}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMXhjeubj)}(hhh]h)}(h)Pointer to the data to push to the layer.h]h)Pointer to the data to push to the layer.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMXhjfubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjfhMXhjeubj)}(h>``size_t n`` Size of the data to push to the layer, in bytes. h](j)}(h ``size_t n``h]j)}(hj9fh]hsize_t n}(hj;fhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7fubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMYhj3fubj)}(hhh]h)}(h0Size of the data to push to the layer, in bytes.h]h0Size of the data to push to the layer, in bytes.}(hjRfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNfhMYhjOfubah}(h]h ]h"]h$]h&]uh1jhj3fubeh}(h]h ]h"]h$]h&]uh1jhjNfhMYhjeubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjtfh]h Description}(hjvfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM[hjeubh)}(hPushes data from a lower-layer transport to the receiver fifo buffer of the packet layer and notifies the receiver thread. Calls to this function are ignored once the packet layer has been shut down.h]hPushes data from a lower-layer transport to the receiver fifo buffer of the packet layer and notifies the receiver thread. Calls to this function are ignored once the packet layer has been shut down.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM[hjeubh)}(h **Return**h]j)}(hjfh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM_hjeubh)}(hReturns the number of bytes transferred (positive or zero) on success. Returns ``-ESHUTDOWN`` if the packet layer has been shut down.h](hOReturns the number of bytes transferred (positive or zero) on success. Returns }(hjfhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh( if the packet layer has been shut down.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM_hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_ptl_shutdown (C function)c.ssh_ptl_shutdownhNtauh1jhjhhhNhNubj)}(hhh](j)}(h+void ssh_ptl_shutdown (struct ssh_ptl *ptl)h]j)}(h*void ssh_ptl_shutdown(struct ssh_ptl *ptl)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM}ubj5)}(h h]h }(hjghhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjfhhhjghM}ubjF)}(hssh_ptl_shutdownh]jL)}(hssh_ptl_shutdownh]hssh_ptl_shutdown}(hjghhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjgubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjfhhhjghM}ubj)}(h(struct ssh_ptl *ptl)h]j )}(hstruct ssh_ptl *ptlh](j#)}(hj&h]hstruct}(hj/ghhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+gubj5)}(h h]h }(hj`.h](hState-flags for }(hj{mhhhNhNubh)}(h":c:type:`struct ssh_rtl `h]j)}(hjmh]hstruct ssh_rtl}(hjmhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjK)}jN]jQ)}jDj3msbc.ssh_rtl_state_flagsasbjZ:ssh_rtluh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhj{mubh.}(hj{mhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhjxmhhubah}(h]h ]h"]h$]h&]uh1jwhj.mhhhjFmhKubeh}(h]h ](jenumeh"]h$]h&]jjjjmjjmjjjuh1jhhhjmhNhNubj)}(h**Constants** ``SSH_RTL_SF_SHUTDOWN_BIT`` Indicates that the request transport layer has been shut down or is being shut down and should not accept any new requests.h](h)}(h **Constants**h]j)}(hjmh]h Constants}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhjmubj)}(hhh]j)}(h``SSH_RTL_SF_SHUTDOWN_BIT`` Indicates that the request transport layer has been shut down or is being shut down and should not accept any new requests.h](j)}(h``SSH_RTL_SF_SHUTDOWN_BIT``h]j)}(hjmh]hSSH_RTL_SF_SHUTDOWN_BIT}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhjmubj)}(hhh]h)}(h{Indicates that the request transport layer has been shut down or is being shut down and should not accept any new requests.h]h{Indicates that the request transport layer has been shut down or is being shut down and should not accept any new requests.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjmhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_ops (C struct) c.ssh_rtl_opshNtauh1jhjmhhhNhNubj)}(hhh](j)}(h ssh_rtl_opsh]j)}(hstruct ssh_rtl_opsh](j#)}(hj&h]hstruct}(hj@nhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjrubj)}(hhh]h)}(hTransmitter work item.h]hTransmitter work item.}(hj]rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYrhK:hjZrubah}(h]h ]h"]h$]h&]uh1jhj>rubeh}(h]h ]h"]h$]h&]uh1jhjYrhK:hjpubj)}(h2``rtx_timeout`` Retransmission timeout subsystem. h](j)}(h``rtx_timeout``h]j)}(hj}rh]h rtx_timeout}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{rubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK;hjwrubj)}(hhh]h)}(h!Retransmission timeout subsystem.h]h!Retransmission timeout subsystem.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhK;hjrubah}(h]h ]h"]h$]h&]uh1jhjwrubeh}(h]h ]h"]h$]h&]uh1jhjrhK;hjpubj)}(hK``rtx_timeout.lock`` Lock for modifying the retransmission timeout reaper. h](j)}(h``rtx_timeout.lock``h]j)}(hjrh]hrtx_timeout.lock}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhj"subj)}(hhh]h)}(h7Time specifying when the reaper work is next scheduled.h]h7Time specifying when the reaper work is next scheduled.}(hjAshhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=shK>hj>subah}(h]h ]h"]h$]h&]uh1jhj"subeh}(h]h ]h"]h$]h&]uh1jhj=shK>hjpubj)}(hN``rtx_timeout.reaper`` Work performing timeout checks and subsequent actions. h](j)}(h``rtx_timeout.reaper``h]j)}(hjash]hrtx_timeout.reaper}(hjcshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_subah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK?hj[subj)}(hhh]h)}(h6Work performing timeout checks and subsequent actions.h]h6Work performing timeout checks and subsequent actions.}(hjzshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvshK?hjwsubah}(h]h ]h"]h$]h&]uh1jhj[subeh}(h]h ]h"]h$]h&]uh1jhjvshK?hjpubj)}(h!``ops`` Request layer operations.h](j)}(h``ops``h]j)}(hjsh]hops}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK?hjsubj)}(hhh]h)}(hRequest layer operations.h]hRequest layer operations.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK@hjsubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjshK?hjpubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_get_device (C function)c.ssh_rtl_get_devicehNtauh1jhjmhhhNhNubj)}(hhh](j)}(h8struct device * ssh_rtl_get_device (struct ssh_rtl *rtl)h]j)}(h6struct device *ssh_rtl_get_device(struct ssh_rtl *rtl)h](j#)}(hj&h]hstruct}(hjshhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjshhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKnubj5)}(h h]h }(hjthhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjshhhjthKnubh)}(hhh]jL)}(hdeviceh]hdevice}(hjthhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjtmodnameN classnameNjHjK)}jN]jQ)}jDssh_rtl_get_devicesbc.ssh_rtl_get_deviceasbuh1hhjshhhjthKnubj5)}(h h]h }(hj4thhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjshhhjthKnubje)}(hjhh]h*}(hjBthhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjshhhjthKnubjF)}(hssh_rtl_get_deviceh]jL)}(hj1th]hssh_rtl_get_device}(hjSthhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjOtubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjshhhjthKnubj)}(h(struct ssh_rtl *rtl)h]j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hjnthhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjjtubj5)}(h h]h }(hj{thhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjjtubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hjthhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjtmodnameN classnameNjHjK)}jN]j/tc.ssh_rtl_get_deviceasbuh1hhjjtubj5)}(h h]h }(hjthhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjjtubje)}(hjhh]h*}(hjthhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjjtubjL)}(hrtlh]hrtl}(hjthhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjjtubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjftubah}(h]h ]h"]h$]h&]hhuh1jhjshhhjthKnubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjshhhjthKnubah}(h]jsah ](jojpeh"]h$]h&]jtju)jvhuh1jhjthKnhjshhubjx)}(hhh]h)}(h3Get device associated with request transport layer.h]h3Get device associated with request transport layer.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhhjthhubah}(h]h ]h"]h$]h&]uh1jwhjshhhjthKnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct ssh_rtl *rtl`` The request transport layer. **Return** Returns the device on which the given request transport layer builds upon.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKlhj uubj)}(hhh]j)}(h5``struct ssh_rtl *rtl`` The request transport layer. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hj0uh]hstruct ssh_rtl *rtl}(hj2uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.uubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKihj*uubj)}(hhh]h)}(hThe request transport layer.h]hThe request transport layer.}(hjIuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEuhKihjFuubah}(h]h ]h"]h$]h&]uh1jhj*uubeh}(h]h ]h"]h$]h&]uh1jhjEuhKihj'uubah}(h]h ]h"]h$]h&]uh1jhj uubh)}(h **Return**h]j)}(hjkuh]hReturn}(hjmuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiuubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKkhj uubh)}(hJReturns the device on which the given request transport layer builds upon.h]hJReturns the device on which the given request transport layer builds upon.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKkhj uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_request_rtl (C function)c.ssh_request_rtlhNtauh1jhjmhhhNhNubj)}(hhh](j)}(h;struct ssh_rtl * ssh_request_rtl (struct ssh_request *rqst)h]j)}(h9struct ssh_rtl *ssh_request_rtl(struct ssh_request *rqst)h](j#)}(hj&h]hstruct}(hjuhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjuhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKyubj5)}(h h]h }(hjuhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjuhhhjuhKyubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hjuhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjuubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjumodnameN classnameNjHjK)}jN]jQ)}jDssh_request_rtlsbc.ssh_request_rtlasbuh1hhjuhhhjuhKyubj5)}(h h]h }(hjuhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjuhhhjuhKyubje)}(hjhh]h*}(hjuhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjuhhhjuhKyubjF)}(hssh_request_rtlh]jL)}(hjuh]hssh_request_rtl}(hjvhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj vubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjuhhhjuhKyubj)}(h(struct ssh_request *rqst)h]j )}(hstruct ssh_request *rqsth](j#)}(hj&h]hstruct}(hj*vhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj&vubj5)}(h h]h }(hj7vhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj&vubh)}(hhh]jL)}(h ssh_requesth]h ssh_request}(hjHvhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjEvubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjJvmodnameN classnameNjHjK)}jN]juc.ssh_request_rtlasbuh1hhj&vubj5)}(h h]h }(hjfvhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj&vubje)}(hjhh]h*}(hjtvhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj&vubjL)}(hrqsth]hrqst}(hjvhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj&vubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj"vubah}(h]h ]h"]h$]h&]hhuh1jhjuhhhjuhKyubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjuhhhjuhKyubah}(h]juah ](jojpeh"]h$]h&]jtju)jvhuh1jhjuhKyhjuhhubjx)}(hhh]h)}(h4Get request transport layer associated with request.h]h4Get request transport layer associated with request.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKthjvhhubah}(h]h ]h"]h$]h&]uh1jwhjuhhhjuhKyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct ssh_request *rqst`` The request to get the request transport layer reference for. **Return** Returns the :c:type:`struct ssh_rtl ` associated with the given SSH request.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKxhjvubj)}(hhh]j)}(h[``struct ssh_request *rqst`` The request to get the request transport layer reference for. h](j)}(h``struct ssh_request *rqst``h]j)}(hjvh]hstruct ssh_request *rqst}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKuhjvubj)}(hhh]h)}(h=The request to get the request transport layer reference for.h]h=The request to get the request transport layer reference for.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwhKuhjwubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjwhKuhjvubah}(h]h ]h"]h$]h&]uh1jhjvubh)}(h **Return**h]j)}(hj'wh]hReturn}(hj)whhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%wubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKwhjvubh)}(hUReturns the :c:type:`struct ssh_rtl ` associated with the given SSH request.h](h Returns the }(hj=whhhNhNubh)}(h":c:type:`struct ssh_rtl `h]j)}(hjGwh]hstruct ssh_rtl}(hjIwhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjEwubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjK)}jN]sbjZ:ssh_rtluh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKwhj=wubh' associated with the given SSH request.}(hj=whhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjgwhKwhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j )ssh_rtl_should_drop_response (C function)c.ssh_rtl_should_drop_responsehNtauh1jhjmhhhNhNubj)}(hhh](j)}(h(bool ssh_rtl_should_drop_response (void)h]j)}(h'bool ssh_rtl_should_drop_response(void)h](j)}(hjh]hbool}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKGubj5)}(h h]h }(hjwhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjwhhhjwhKGubjF)}(hssh_rtl_should_drop_responseh]jL)}(hssh_rtl_should_drop_responseh]hssh_rtl_should_drop_response}(hjwhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjwubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjwhhhjwhKGubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]noemphhhuh1j hjwubah}(h]h ]h"]h$]h&]hhuh1jhjwhhhjwhKGubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjwhhhjwhKGubah}(h]jwah ](jojpeh"]h$]h&]jtju)jvhuh1jhjwhKGhjwhhubjx)}(hhh]h)}(h/Error injection hook to drop request responses.h]h/Error injection hook to drop request responses.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKAhjwhhubah}(h]h ]h"]h$]h&]uh1jwhjwhhhjwhKGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjxjjxjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Useful to cause request transmission timeouts in the driver by dropping the response to a request.h](h)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKEhjxubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj9xh]hvoid}(hj;xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7xubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKHhj3xubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjRxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNxhKHhjOxubah}(h]h ]h"]h$]h&]uh1jhj3xubeh}(h]h ]h"]h$]h&]uh1jhjNxhKHhj0xubah}(h]h ]h"]h$]h&]uh1jhjxubh)}(h**Description**h]j)}(hjtxh]h Description}(hjvxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrxubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKJhjxubh)}(hbUseful to cause request transmission timeouts in the driver by dropping the response to a request.h]hbUseful to cause request transmission timeouts in the driver by dropping the response to a request.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKBhjxubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_submit (C function)c.ssh_rtl_submithNtauh1jhjmhhhNhNubj)}(hhh](j)}(hBint ssh_rtl_submit (struct ssh_rtl *rtl, struct ssh_request *rqst)h]j)}(hAint ssh_rtl_submit(struct ssh_rtl *rtl, struct ssh_request *rqst)h](j)}(hinth]hint}(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMiubj5)}(h h]h }(hjxhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjxhhhjxhMiubjF)}(hssh_rtl_submith]jL)}(hssh_rtl_submith]hssh_rtl_submit}(hjxhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjxubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjxhhhjxhMiubj)}(h/(struct ssh_rtl *rtl, struct ssh_request *rqst)h](j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hjxhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjxubj5)}(h h]h }(hjyhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjxubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hjyhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjyubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjymodnameN classnameNjHjK)}jN]jQ)}jDjxsbc.ssh_rtl_submitasbuh1hhjxubj5)}(h h]h }(hj4yhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjxubje)}(hjhh]h*}(hjByhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjxubjL)}(hrtlh]hrtl}(hjOyhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjxubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjxubj )}(hstruct ssh_request *rqsth](j#)}(hj&h]hstruct}(hjhyhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjdyubj5)}(h h]h }(hjuyhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjdyubh)}(hhh]jL)}(h ssh_requesth]h ssh_request}(hjyhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjyubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjymodnameN classnameNjHjK)}jN]j0yc.ssh_rtl_submitasbuh1hhjdyubj5)}(h h]h }(hjyhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjdyubje)}(hjhh]h*}(hjyhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjdyubjL)}(hrqsth]hrqst}(hjyhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjdyubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjxubeh}(h]h ]h"]h$]h&]hhuh1jhjxhhhjxhMiubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjxhhhjxhMiubah}(h]jxah ](jojpeh"]h$]h&]jtju)jvhuh1jhjxhMihjxhhubjx)}(hhh]h)}(h(Submit a request to the transport layer.h]h(Submit a request to the transport layer.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM]hjyhhubah}(h]h ]h"]h$]h&]uh1jwhjxhhhjxhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1jhhhjmhNhNubj)}(hX**Parameters** ``struct ssh_rtl *rtl`` The request transport layer. ``struct ssh_request *rqst`` The request to submit. **Description** Submits a request to the transport layer. A single request may not be submitted multiple times without reinitializing it. **Return** Returns zero on success, ``-EINVAL`` if the request type is invalid or the request has been canceled prior to submission, ``-EALREADY`` if the request has already been submitted, or ``-ESHUTDOWN`` in case the request transport layer has been shut down.h](h)}(h**Parameters**h]j)}(hj zh]h Parameters}(hj zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj zubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMahjzubj)}(hhh](j)}(h5``struct ssh_rtl *rtl`` The request transport layer. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hj*zh]hstruct ssh_rtl *rtl}(hj,zhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(zubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM^hj$zubj)}(hhh]h)}(hThe request transport layer.h]hThe request transport layer.}(hjCzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?zhM^hj@zubah}(h]h ]h"]h$]h&]uh1jhj$zubeh}(h]h ]h"]h$]h&]uh1jhj?zhM^hj!zubj)}(h4``struct ssh_request *rqst`` The request to submit. h](j)}(h``struct ssh_request *rqst``h]j)}(hjczh]hstruct ssh_request *rqst}(hjezhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjazubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM_hj]zubj)}(hhh]h)}(hThe request to submit.h]hThe request to submit.}(hj|zhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxzhM_hjyzubah}(h]h ]h"]h$]h&]uh1jhj]zubeh}(h]h ]h"]h$]h&]uh1jhjxzhM_hj!zubeh}(h]h ]h"]h$]h&]uh1jhjzubh)}(h**Description**h]j)}(hjzh]h Description}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMahjzubh)}(hySubmits a request to the transport layer. A single request may not be submitted multiple times without reinitializing it.h]hySubmits a request to the transport layer. A single request may not be submitted multiple times without reinitializing it.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMahjzubh)}(h **Return**h]j)}(hjzh]hReturn}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMdhjzubh)}(hReturns zero on success, ``-EINVAL`` if the request type is invalid or the request has been canceled prior to submission, ``-EALREADY`` if the request has already been submitted, or ``-ESHUTDOWN`` in case the request transport layer has been shut down.h](hReturns zero on success, }(hjzhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubhV if the request type is invalid or the request has been canceled prior to submission, }(hjzhhhNhNubj)}(h ``-EALREADY``h]h -EALREADY}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh/ if the request has already been submitted, or }(hjzhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh8 in case the request transport layer has been shut down.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMdhjzubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_cancel (C function)c.ssh_rtl_cancelhNtauh1jhjmhhhNhNubj)}(hhh](j)}(h~ubj5)}(h h]h }(hjO~hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj>~ubh)}(hhh]jL)}(h ssh_requesth]h ssh_request}(hj`~hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj]~ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjb~modnameN classnameNjHjK)}jN]jQ)}jDj(~sbc.ssh_request_initasbuh1hhj>~ubj5)}(h h]h }(hj~hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj>~ubje)}(hjhh]h*}(hj~hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj>~ubjL)}(hrqsth]hrqst}(hj~hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj>~ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj:~ubj )}(henum ssam_request_flags flagsh](j#)}(hj9h]henum}(hj~hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj~ubj5)}(h h]h }(hj~hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj~ubh)}(hhh]jL)}(hssam_request_flagsh]hssam_request_flags}(hj~hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj~modnameN classnameNjHjK)}jN]j|~c.ssh_request_initasbuh1hhj~ubj5)}(h h]h }(hj~hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj~ubjL)}(hflagsh]hflags}(hj~hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj:~ubj )}(h!const struct ssh_request_ops *opsh](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hj2hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj?hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssh_request_opsh]hssh_request_ops}(hjPhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjMubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjRmodnameN classnameNjHjK)}jN]j|~c.ssh_request_initasbuh1hhjubj5)}(h h]h }(hjnhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj|hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hopsh]hops}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj:~ubeh}(h]h ]h"]h$]h&]hhuh1jhj~hhhj~hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj}hhhj~hMubah}(h]j}ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj~hMhj}hhubjx)}(hhh]h)}(hInitialize SSH request.h]hInitialize SSH request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhj}hhhj~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hXQ**Parameters** ``struct ssh_request *rqst`` The request to initialize. ``enum ssam_request_flags flags`` Request flags, determining the type of the request. ``const struct ssh_request_ops *ops`` Request operations. **Description** Initializes the given SSH request and underlying packet. Sets the message buffer pointer to ``NULL`` and the message buffer length to zero. This buffer has to be set separately via ssh_request_set_data() before submission and must contain a valid SSH request message. **Return** Returns zero on success or ``-EINVAL`` if the given flags are invalid.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubj)}(hhh](j)}(h8``struct ssh_request *rqst`` The request to initialize. h](j)}(h``struct ssh_request *rqst``h]j)}(hjh]hstruct ssh_request *rqst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubj)}(hhh]h)}(hThe request to initialize.h]hThe request to initialize.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hV``enum ssam_request_flags flags`` Request flags, determining the type of the request. h](j)}(h!``enum ssam_request_flags flags``h]j)}(hj-h]henum ssam_request_flags flags}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhj'ubj)}(hhh]h)}(h3Request flags, determining the type of the request.h]h3Request flags, determining the type of the request.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubj)}(h:``const struct ssh_request_ops *ops`` Request operations. h](j)}(h%``const struct ssh_request_ops *ops``h]j)}(hjfh]h!const struct ssh_request_ops *ops}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhj`ubj)}(hhh]h)}(hRequest operations.h]hRequest operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hX Initializes the given SSH request and underlying packet. Sets the message buffer pointer to ``NULL`` and the message buffer length to zero. This buffer has to be set separately via ssh_request_set_data() before submission and must contain a valid SSH request message.h](h\Initializes the given SSH request and underlying packet. Sets the message buffer pointer to }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and the message buffer length to zero. This buffer has to be set separately via ssh_request_set_data() before submission and must contain a valid SSH request message.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(h **Return**h]j)}(hjڀh]hReturn}(hj܀hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؀ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hFReturns zero on success or ``-EINVAL`` if the given flags are invalid.h](hReturns zero on success or }(hjhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if the given flags are invalid.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_init (C function)c.ssh_rtl_inithNtauh1jhjmhhhNhNubj)}(hhh](j)}(hcint ssh_rtl_init (struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h]j)}(hbint ssh_rtl_init(struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h](j)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMubj5)}(h h]h }(hj@hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-hhhj?hMubjF)}(h ssh_rtl_inith]jL)}(h ssh_rtl_inith]h ssh_rtl_init}(hjRhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjNubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj-hhhj?hMubj)}(hR(struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h](j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hjnhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjjubj5)}(h h]h }(hj{hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjjubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjTsbc.ssh_rtl_initasbuh1hhjjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjjubjL)}(hrtlh]hrtl}(hjǁhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjfubj )}(hstruct serdev_device *serdevh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj܁ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj܁ubh)}(hhh]jL)}(h serdev_deviceh]h serdev_device}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssh_rtl_initasbuh1hhj܁ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj܁ubje)}(hjhh]h*}(hj*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj܁ubjL)}(hserdevh]hserdev}(hj7hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj܁ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjfubj )}(hconst struct ssh_rtl_ops *opsh](j#)}(hjRh]hconst}(hjPhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjLubj5)}(h h]h }(hj]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubj#)}(hj&h]hstruct}(hjkhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjLubj5)}(h h]h }(hjxhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubh)}(hhh]jL)}(h ssh_rtl_opsh]h ssh_rtl_ops}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssh_rtl_initasbuh1hhjLubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjLubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjLubjL)}(hopsh]hops}(hj‚hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjLubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjfubeh}(h]h ]h"]h$]h&]hhuh1jhj-hhhj?hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj)hhhj?hMubah}(h]j$ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj?hMhj&hhubjx)}(hhh]h)}(h#Initialize request transport layer.h]h#Initialize request transport layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhj&hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hXg**Parameters** ``struct ssh_rtl *rtl`` The request transport layer to initialize. ``struct serdev_device *serdev`` The underlying serial device, i.e. the lower-level transport. ``const struct ssh_rtl_ops *ops`` Request transport layer operations. **Description** Initializes the given request transport layer and associated packet transport layer. Transmitter and receiver threads must be started separately via ssh_rtl_start(), after the request-layer has been initialized and the lower-level serial device layer has been set up. **Return** Returns zero on success and a nonzero error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubj)}(hhh](j)}(hC``struct ssh_rtl *rtl`` The request transport layer to initialize. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hj-h]hstruct ssh_rtl *rtl}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhj'ubj)}(hhh]h)}(h*The request transport layer to initialize.h]h*The request transport layer to initialize.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhj$ubj)}(h_``struct serdev_device *serdev`` The underlying serial device, i.e. the lower-level transport. h](j)}(h ``struct serdev_device *serdev``h]j)}(hjfh]hstruct serdev_device *serdev}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhj`ubj)}(hhh]h)}(h=The underlying serial device, i.e. the lower-level transport.h]h=The underlying serial device, i.e. the lower-level transport.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhj$ubj)}(hF``const struct ssh_rtl_ops *ops`` Request transport layer operations. h](j)}(h!``const struct ssh_rtl_ops *ops``h]j)}(hjh]hconst struct ssh_rtl_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubj)}(hhh]h)}(h#Request transport layer operations.h]h#Request transport layer operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjڃh]h Description}(hj܃hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj؃ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hX Initializes the given request transport layer and associated packet transport layer. Transmitter and receiver threads must be started separately via ssh_rtl_start(), after the request-layer has been initialized and the lower-level serial device layer has been set up.h]hX Initializes the given request transport layer and associated packet transport layer. Transmitter and receiver threads must be started separately via ssh_rtl_start(), after the request-layer has been initialized and the lower-level serial device layer has been set up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hhhhjThM)ubah}(h]j9ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjThM)hj;hhubjx)}(hhh]h)}(h%Deinitialize request transport layer.h]h%Deinitialize request transport layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM!hjhhubah}(h]h ]h"]h$]h&]uh1jwhj;hhhjThM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hXW**Parameters** ``struct ssh_rtl *rtl`` The request transport layer to deinitialize. **Description** Deinitializes the given request transport layer and frees resources associated with it. If receiver and/or transmitter threads have been started, the layer must first be shut down via ssh_rtl_shutdown() before this function can be called.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM%hj"ubj)}(hhh]j)}(hE``struct ssh_rtl *rtl`` The request transport layer to deinitialize. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hjGh]hstruct ssh_rtl *rtl}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM"hjAubj)}(hhh]h)}(h,The request transport layer to deinitialize.h]h,The request transport layer to deinitialize.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM"hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM"hj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM$hj"ubh)}(hDeinitializes the given request transport layer and frees resources associated with it. If receiver and/or transmitter threads have been started, the layer must first be shut down via ssh_rtl_shutdown() before this function can be called.h]hDeinitializes the given request transport layer and frees resources associated with it. If receiver and/or transmitter threads have been started, the layer must first be shut down via ssh_rtl_shutdown() before this function can be called.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM$hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_start (C function)c.ssh_rtl_starthNtauh1jhjmhhhNhNubj)}(hhh](j)}(h'int ssh_rtl_start (struct ssh_rtl *rtl)h]j)}(h&int ssh_rtl_start(struct ssh_rtl *rtl)h](j)}(hinth]hint}(hjDžhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjÅhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM4ubj5)}(h h]h }(hjօhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjÅhhhjՅhM4ubjF)}(h ssh_rtl_starth]jL)}(h ssh_rtl_starth]h ssh_rtl_start}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjÅhhhjՅhM4ubj)}(h(struct ssh_rtl *rtl)h]j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hj"hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj$modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssh_rtl_startasbuh1hhjubj5)}(h h]h }(hjBhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjPhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hrtlh]hrtl}(hj]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjÅhhhjՅhM4ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjՅhM4ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjՅhM4hjhhubjx)}(hhh]h)}(h'Start request transmitter and receiver.h]h'Start request transmitter and receiver.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjՅhM4ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(h**Parameters** ``struct ssh_rtl *rtl`` The request transport layer. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM3hjubj)}(hhh]j)}(h5``struct ssh_rtl *rtl`` The request transport layer. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hjȆh]hstruct ssh_rtl *rtl}(hjʆhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƆubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM0hj†ubj)}(hhh]h)}(hThe request transport layer.h]hThe request transport layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj݆hM0hjކubah}(h]h ]h"]h$]h&]uh1jhj†ubeh}(h]h ]h"]h$]h&]uh1jhj݆hM0hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM2hjubh)}(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/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_flush (C function)c.ssh_rtl_flushhNtauh1jhjmhhhNhNubj)}(hhh](j)}(h>int ssh_rtl_flush (struct ssh_rtl *rtl, unsigned long timeout)h]j)}(h=int ssh_rtl_flush(struct ssh_rtl *rtl, unsigned long timeout)h](j)}(hinth]hint}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMubj5)}(h h]h }(hjWhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDhhhjVhMubjF)}(h ssh_rtl_flushh]jL)}(h ssh_rtl_flushh]h ssh_rtl_flush}(hjihhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjeubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjDhhhjVhMubj)}(h,(struct ssh_rtl *rtl, unsigned long timeout)h](j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjksbc.ssh_rtl_flushasbuh1hhjubj5)}(h h]h }(hjÇhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjчhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hrtlh]hrtl}(hjއhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj}ubj )}(hunsigned long timeouth](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj)}(hlongh]hlong}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(h h]h }(hj!hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(htimeouth]htimeout}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj}ubeh}(h]h ]h"]h$]h&]hhuh1jhjDhhhjVhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj@hhhjVhMubah}(h]j;ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjVhMhj=hhubjx)}(hhh]h)}(h"Flush the request transport layer.h]h"Flush the request transport layer.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMghjVhhubah}(h]h ]h"]h$]h&]uh1jwhj=hhhjVhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjmhNhNubj)}(hX>**Parameters** ``struct ssh_rtl *rtl`` request transport layer ``unsigned long timeout`` timeout for the flush operation in jiffies **Description** Queue a special flush request and wait for its completion. This request will be completed after all other currently queued and pending requests have been completed. Instead of a normal data packet, this request submits a special flush packet, meaning that upon completion, also the underlying packet transport layer has been flushed. Flushing the request layer guarantees that all previously submitted requests have been fully completed before this call returns. Additionally, flushing blocks execution of all later submitted requests until the flush has been completed. If the caller ensures that no new requests are submitted after a call to this function, the request transport layer is guaranteed to have no remaining requests when this call returns. The same guarantee does not hold for the packet layer, on which control packets may still be queued after this call. **Return** Returns zero on success, ``-ETIMEDOUT`` if the flush timed out and has been canceled as a result of the timeout, or ``-ESHUTDOWN`` if the packet and/or request transport layer has been shut down before this call. May also return ``-EINTR`` if the underlying packet transmission has been interrupted.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMkhjuubj)}(hhh](j)}(h0``struct ssh_rtl *rtl`` request transport layer h](j)}(h``struct ssh_rtl *rtl``h]j)}(hjh]hstruct ssh_rtl *rtl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhhjubj)}(hhh]h)}(hrequest transport layerh]hrequest transport layer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhhjubj)}(hE``unsigned long timeout`` timeout for the flush operation in jiffies h](j)}(h``unsigned long timeout``h]j)}(hjӈh]hunsigned long timeout}(hjՈhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjшubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMihj͈ubj)}(hhh]h)}(h*timeout for the flush operation in jiffiesh]h*timeout for the flush operation in jiffies}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jhj͈ubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMkhjuubh)}(hXMQueue a special flush request and wait for its completion. This request will be completed after all other currently queued and pending requests have been completed. Instead of a normal data packet, this request submits a special flush packet, meaning that upon completion, also the underlying packet transport layer has been flushed.h]hXMQueue a special flush request and wait for its completion. This request will be completed after all other currently queued and pending requests have been completed. Instead of a normal data packet, this request submits a special flush packet, meaning that upon completion, also the underlying packet transport layer has been flushed.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMkhjuubh)}(hFlushing the request layer guarantees that all previously submitted requests have been fully completed before this call returns. Additionally, flushing blocks execution of all later submitted requests until the flush has been completed.h]hFlushing the request layer guarantees that all previously submitted requests have been fully completed before this call returns. Additionally, flushing blocks execution of all later submitted requests until the flush has been completed.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMqhjuubh)}(hX,If the caller ensures that no new requests are submitted after a call to this function, the request transport layer is guaranteed to have no remaining requests when this call returns. The same guarantee does not hold for the packet layer, on which control packets may still be queued after this call.h]hX,If the caller ensures that no new requests are submitted after a call to this function, the request transport layer is guaranteed to have no remaining requests when this call returns. The same guarantee does not hold for the packet layer, on which control packets may still be queued after this call.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMvhjuubh)}(h **Return**h]j)}(hjSh]hReturn}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM|hjuubh)}(hX+Returns zero on success, ``-ETIMEDOUT`` if the flush timed out and has been canceled as a result of the timeout, or ``-ESHUTDOWN`` if the packet and/or request transport layer has been shut down before this call. May also return ``-EINTR`` if the underlying packet transmission has been interrupted.h](hReturns zero on success, }(hjihhhNhNubj)}(h``-ETIMEDOUT``h]h -ETIMEDOUT}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhM if the flush timed out and has been canceled as a result of the timeout, or }(hjihhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubhc if the packet and/or request transport layer has been shut down before this call. May also return }(hjihhhNhNubj)}(h ``-EINTR``h]h-EINTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubh< if the underlying packet transmission has been interrupted.}(hjihhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM|hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rtl_shutdown (C function)c.ssh_rtl_shutdownhNtauh1jhjmhhhNhNubj)}(hhh](j)}(h+void ssh_rtl_shutdown (struct ssh_rtl *rtl)h]j)}(h*void ssh_rtl_shutdown(struct ssh_rtl *rtl)h](j)}(hvoidh]hvoid}(hjΉhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjʉhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMubj5)}(h h]h }(hj݉hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjʉhhhj܉hMubjF)}(hssh_rtl_shutdownh]jL)}(hssh_rtl_shutdownh]hssh_rtl_shutdown}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjʉhhhj܉hMubj)}(h(struct ssh_rtl *rtl)h]j )}(hstruct ssh_rtl *rtlh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssh_rtlh]hssh_rtl}(hj)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj&ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj+modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssh_rtl_shutdownasbuh1hhjubj5)}(h h]h }(hjIhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjWhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hrtlh]hrtl}(hjdhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjʉhhhj܉hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjƉhhhj܉hMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj܉hMhjÉhhubjx)}(hhh]h)}(h"Shut down request transport layer.h]h"Shut down request transport layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjÉhhhj܉$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjmhNhNubj)}(hX!**Parameters** ``struct ssh_rtl *rtl`` The request transport layer. **Description** Shuts down the request transport layer, removing and canceling all queued and pending requests. Requests canceled by this operation will be completed with ``-ESHUTDOWN`` as status. Receiver and transmitter threads will be stopped, the lower-level packet layer will be shutdown. As a result of this function, the transport layer will be marked as shut down. Submission of requests after the transport layer has been shut down will fail with ``-ESHUTDOWN``.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubj)}(hhh]j)}(h5``struct ssh_rtl *rtl`` The request transport layer. h](j)}(h``struct ssh_rtl *rtl``h]j)}(hjϊh]hstruct ssh_rtl *rtl}(hjъhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͊ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjɊubj)}(hhh]h)}(hThe request transport layer.h]hThe request transport layer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjɊubeh}(h]h ]h"]h$]h&]uh1jhjhMhjƊubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hXShuts down the request transport layer, removing and canceling all queued and pending requests. Requests canceled by this operation will be completed with ``-ESHUTDOWN`` as status. Receiver and transmitter threads will be stopped, the lower-level packet layer will be shutdown.h](hShuts down the request transport layer, removing and canceling all queued and pending requests. Requests canceled by this operation will be completed with }(hj hhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhl as status. Receiver and transmitter threads will be stopped, the lower-level packet layer will be shutdown.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubh)}(hAs a result of this function, the transport layer will be marked as shut down. Submission of requests after the transport layer has been shut down will fail with ``-ESHUTDOWN``.h](hAs a result of this function, the transport layer will be marked as shut down. Submission of requests after the transport layer has been shut down will fail with }(hjAhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubh.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjmhhhNhNubeh}(h]j?ah ]h"]request transport layerah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Controllerh]h Controller}(hjshhhNhNubah}(h]h ]h"]h$]h&]hj[uh1hhjphhhhhK)ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_seq_counter (C struct)c.ssh_seq_counterhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssh_seq_counterh]j)}(hstruct ssh_seq_counterh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhKubjF)}(hssh_seq_counterh]jL)}(hjh]hssh_seq_counter}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjhhubjx)}(hhh]h)}(h"Safe counter for SSH sequence IDs.h]h"Safe counter for SSH sequence IDs.}(hj܋hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjًhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hv**Definition**:: struct ssh_seq_counter { u8 value; }; **Members** ``value`` The current counter value.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK#hjubj)}(h)struct ssh_seq_counter { u8 value; };h]h)struct ssh_seq_counter { u8 value; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK%hjubh)}(h **Members**h]j)}(hj*h]hMembers}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK)hjubj)}(hhh]j)}(h$``value`` The current counter value.h](j)}(h ``value``h]j)}(hjIh]hvalue}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK hjCubj)}(hhh]h)}(hThe current counter value.h]hThe current counter value.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK!hj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hK hj@ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssh_rqid_counter (C struct)c.ssh_rqid_counterhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssh_rqid_counterh]j)}(hstruct ssh_rqid_counterh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK'ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhK'ubjF)}(hssh_rqid_counterh]jL)}(hjh]hssh_rqid_counter}(hjÌhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhK'ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhK'ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhK'hjhhubjx)}(hhh]h)}(h!Safe counter for SSH request IDs.h]h!Safe counter for SSH request IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK'hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhK'ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hx**Definition**:: struct ssh_rqid_counter { u16 value; }; **Members** ``value`` The current counter value.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK+hjubj)}(h+struct ssh_rqid_counter { u16 value; };h]h+struct ssh_rqid_counter { u16 value; };}hj"sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK-hjubh)}(h **Members**h]j)}(hj3h]hMembers}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK1hjubj)}(hhh]j)}(h$``value`` The current counter value.h](j)}(h ``value``h]j)}(hjRh]hvalue}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK(hjLubj)}(hhh]h)}(hThe current counter value.h]hThe current counter value.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK)hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghK(hjIubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_head (C struct)c.ssam_nf_headhNtauh1jhjphhhNhNubj)}(hhh](j)}(h ssam_nf_headh]j)}(hstruct ssam_nf_headh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK/ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhK/ubjF)}(h ssam_nf_headh]jL)}(hjh]h ssam_nf_head}(hj̍hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjȍubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhK/ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhK/ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhK/hjhhubjx)}(hhh]h)}(hNotifier head for SSAM events.h]hNotifier head for SSAM events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK2hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhK/ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Definition**:: struct ssam_nf_head { struct srcu_struct srcu; struct list_head head; }; **Members** ``srcu`` The SRCU struct for synchronization. ``head`` List-head for notifier blocks registered under this head.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK6hj ubj)}(hPstruct ssam_nf_head { struct srcu_struct srcu; struct list_head head; };h]hPstruct ssam_nf_head { struct srcu_struct srcu; struct list_head head; };}hj+sbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK8hj ubh)}(h **Members**h]j)}(hj<h]hMembers}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK=hj ubj)}(hhh](j)}(h.``srcu`` The SRCU struct for synchronization. h](j)}(h``srcu``h]j)}(hj[h]hsrcu}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK4hjUubj)}(hhh]h)}(h$The SRCU struct for synchronization.h]h$The SRCU struct for synchronization.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK4hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphK4hjRubj)}(hB``head`` List-head for notifier blocks registered under this head.h](j)}(h``head``h]j)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK4hjubj)}(hhh]h)}(h9List-head for notifier blocks registered under this head.h]h9List-head for notifier blocks registered under this head.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjRubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf (C struct) c.ssam_nfhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssam_nfh]j)}(hstruct ssam_nfh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK;ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhK;ubjF)}(hssam_nfh]jL)}(hjh]hssam_nf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhK;ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhK;ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhK;hjhhubjx)}(hhh]h)}(h;Notifier callback- and activation-registry for SSAM events.h]h;Notifier callback- and activation-registry for SSAM events.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK@hjubj)}(h_``refcount`` The root of the RB-tree used for reference-counting enabled events/notifications. h](j)}(h ``refcount``h]j)}(hj׏h]hrefcount}(hjُhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjՏubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKBhjяubj)}(hhh]h)}(hQThe root of the RB-tree used for reference-counting enabled events/notifications.h]hQThe root of the RB-tree used for reference-counting enabled events/notifications.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKAhjubah}(h]h ]h"]h$]h&]uh1jhjяubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubj)}(hE``head`` The list of notifier heads for event/notification callbacks.h](j)}(h``head``h]j)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKBhj ubj)}(hhh]h)}(h` performing completion work for this queue.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKghjubj)}(hstruct ssam_event_queue { struct ssam_cplt *cplt; spinlock_t lock; struct list_head head; struct work_struct work; };h]hstruct ssam_event_queue { struct ssam_cplt *cplt; spinlock_t lock; struct list_head head; struct work_struct work; };}hjגsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKihjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKphjubj)}(hhh](j)}(hK``cplt`` Reference to the completion system on which this queue is active. h](j)}(h``cplt``h]j)}(hjh]hcplt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKehjubj)}(hhh]h)}(hAReference to the completion system on which this queue is active.h]hAReference to the completion system on which this queue is active.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKehjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKehjubj)}(h2``lock`` The lock for any operation on the queue. h](j)}(h``lock``h]j)}(hj@h]hlock}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKfhj:ubj)}(hhh]h)}(h(The lock for any operation on the queue.h]h(The lock for any operation on the queue.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKfhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKfhjubj)}(h%``head`` The list-head of the queue. h](j)}(h``head``h]j)}(hjyh]hhead}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKghjsubj)}(hhh]h)}(hThe list-head of the queue.h]hThe list-head of the queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKghjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKghjubj)}(hb``work`` The :c:type:`struct work_struct ` performing completion work for this queue.h](j)}(h``work``h]j)}(hjh]hwork}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKghjubj)}(hhh]h)}(hYThe :c:type:`struct work_struct ` performing completion work for this queue.h](hThe }(hj˓hhhNhNubh)}(h*:c:type:`struct work_struct `h]j)}(hjՓh]hstruct work_struct}(hjדhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjӓubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ: work_structuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhhj˓ubh+ performing completion work for this queue.}(hj˓hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhhjȓubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǓhKghjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_event_target (C struct)c.ssam_event_targethNtauh1jhjphhhNhNubj)}(hhh](j)}(hssam_event_targeth]j)}(hstruct ssam_event_targeth](j#)}(hj&h]hstruct}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKnubj5)}(h h]h }(hj=hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+hhhj<hKnubjF)}(hssam_event_targeth]jL)}(hj)h]hssam_event_target}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjKubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj+hhhj<hKnubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj'hhhj<hKnubah}(h]j"ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj<hKnhj$hhubjx)}(hhh]h)}(h)Set of queues for a single SSH target ID.h]h)Set of queues for a single SSH target ID.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKrhjnhhubah}(h]h ]h"]h$]h&]uh1jwhj$hhhj<hKnubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Definition**:: struct ssam_event_target { struct ssam_event_queue queue[SSH_NUM_EVENTS]; }; **Members** ``queue`` The array of queues, one queue per event ID.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKvhjubj)}(hPstruct ssam_event_target { struct ssam_event_queue queue[SSH_NUM_EVENTS]; };h]hPstruct ssam_event_target { struct ssam_event_queue queue[SSH_NUM_EVENTS]; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKxhjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK|hjubj)}(hhh]j)}(h6``queue`` The array of queues, one queue per event ID.h](j)}(h ``queue``h]j)}(hjޔh]hqueue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjܔubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKshjؔubj)}(hhh]h)}(h,The array of queues, one queue per event ID.h]h,The array of queues, one queue per event ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKthjubah}(h]h ]h"]h$]h&]uh1jhjؔubeh}(h]h ]h"]h$]h&]uh1jhjhKshjՔubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cplt (C struct) c.ssam_cplthNtauh1jhjphhhNhNubj)}(hhh](j)}(h ssam_cplth]j)}(hstruct ssam_cplth](j#)}(hj&h]hstruct}(hj8hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj4hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKzubj5)}(h h]h }(hjFhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj4hhhjEhKzubjF)}(h ssam_cplth]jL)}(hj2h]h ssam_cplt}(hjXhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjTubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj4hhhjEhKzubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj0hhhjEhKzubah}(h]j+ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjEhKzhj-hhubjx)}(hhh]h)}(h+SSAM event/async request completion system.h]h+SSAM event/async request completion system.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKzhjwhhubah}(h]h ]h"]h$]h&]uh1jwhj-hhhjEhKzubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Definition**:: struct ssam_cplt { struct device *dev; struct workqueue_struct *wq; struct { struct ssam_event_target target[SSH_NUM_TARGETS]; struct ssam_nf notif; } event; }; **Members** ``dev`` The device with which this system is associated. Only used for logging. ``wq`` The :c:type:`struct workqueue_struct ` on which all completion work items are queued. ``event`` Event completion management. ``event.target`` Array of :c:type:`struct ssam_event_target `, one for each target. ``event.notif`` Notifier callbacks and event activation reference counting.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK~hjubj)}(hstruct ssam_cplt { struct device *dev; struct workqueue_struct *wq; struct { struct ssam_event_target target[SSH_NUM_TARGETS]; struct ssam_nf notif; } event; };h]hstruct ssam_cplt { struct device *dev; struct workqueue_struct *wq; struct { struct ssam_event_target target[SSH_NUM_TARGETS]; struct ssam_nf notif; } event; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubh)}(h **Members**h]j)}(hjȕh]hMembers}(hjʕhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjƕubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj)}(hhh](j)}(hP``dev`` The device with which this system is associated. Only used for logging. h](j)}(h``dev``h]j)}(hjh]hdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK}hjubj)}(hhh]h)}(hGThe device with which this system is associated. Only used for logging.h]hGThe device with which this system is associated. Only used for logging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjޕubj)}(ho``wq`` The :c:type:`struct workqueue_struct ` on which all completion work items are queued. h](j)}(h``wq``h]j)}(hj!h]hwq}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj)}(hhh]h)}(hgThe :c:type:`struct workqueue_struct ` on which all completion work items are queued.h](hThe }(hj:hhhNhNubh)}(h4:c:type:`struct workqueue_struct `h]j)}(hjDh]hstruct workqueue_struct}(hjFhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ:workqueue_structuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK~hj:ubh/ on which all completion work items are queued.}(hj:hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjahK~hj7ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj6hKhjޕubj)}(h'``event`` Event completion management. h](j)}(h ``event``h]j)}(hj~h]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjxubj)}(hhh]h)}(hEvent completion management.h]hEvent completion management.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]uh1jhjhKhjޕubj)}(hg``event.target`` Array of :c:type:`struct ssam_event_target `, one for each target. h](j)}(h``event.target``h]j)}(hjh]h event.target}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj)}(hhh]h)}(hUArray of :c:type:`struct ssam_event_target `, one for each target.h](h Array of }(hjЖhhhNhNubh)}(h6:c:type:`struct ssam_event_target `h]j)}(hjږh]hstruct ssam_event_target}(hjܖhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjؖubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ:ssam_event_targetuh1hhj̖hKhjЖubh, one for each target.}(hjЖhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj̖hKhj͖ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj̖hKhjޕubj)}(hK``event.notif`` Notifier callbacks and event activation reference counting.h](j)}(h``event.notif``h]j)}(hjh]h event.notif}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhj ubj)}(hhh]h)}(h;Notifier callbacks and event activation reference counting.h]h;Notifier callbacks and event activation reference counting.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhjޕubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_controller_state (C enum)c.ssam_controller_statehNtauh1jhjphhhNhNubj)}(hhh](j)}(hssam_controller_stateh]j)}(henum ssam_controller_stateh](j#)}(hj9h]henum}(hjmhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjihhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKubj5)}(h h]h }(hj{hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjihhhjzhKubjF)}(hssam_controller_stateh]jL)}(hjgh]hssam_controller_state}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjihhhjzhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjehhhjzhKubah}(h]j`ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjzhKhjbhhubjx)}(hhh]h)}(hDState values for :c:type:`struct ssam_controller `.h](hState values for }(hjhhhNhNubh)}(h2:c:type:`struct ssam_controller `h]j)}(hjh]hstruct ssam_controller}(hjhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjK)}jN]jQ)}jDjgsbc.ssam_controller_stateasbjZ:ssam_controlleruh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jwhjbhhhjzhKubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Constants** ``SSAM_CONTROLLER_UNINITIALIZED`` The controller has not been initialized yet or has been deinitialized. ``SSAM_CONTROLLER_INITIALIZED`` The controller is initialized, but has not been started yet. ``SSAM_CONTROLLER_STARTED`` The controller has been started and is ready to use. ``SSAM_CONTROLLER_STOPPED`` The controller has been stopped. ``SSAM_CONTROLLER_SUSPENDED`` The controller has been suspended.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj)}(hhh](j)}(hi``SSAM_CONTROLLER_UNINITIALIZED`` The controller has not been initialized yet or has been deinitialized. h](j)}(h!``SSAM_CONTROLLER_UNINITIALIZED``h]j)}(hjh]hSSAM_CONTROLLER_UNINITIALIZED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj)}(hhh]h)}(hFThe controller has not been initialized yet or has been deinitialized.h]hFThe controller has not been initialized yet or has been deinitialized.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjubj)}(h]``SSAM_CONTROLLER_INITIALIZED`` The controller is initialized, but has not been started yet. h](j)}(h``SSAM_CONTROLLER_INITIALIZED``h]j)}(hjTh]hSSAM_CONTROLLER_INITIALIZED}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjNubj)}(hhh]h)}(hubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhj:ubj)}(hhh]h)}(h)The event data provided to the callbacks.h]h)The event data provided to the callbacks.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj{h]h Description}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubh)}(hX Call all registered notifier callbacks in order of their priority until either no notifier is left or a notifier returns a value with the ``SSAM_NOTIF_STOP`` bit set. Note that this bit is automatically set via ssam_notifier_from_errno() on any non-zero error value.h](hCall all registered notifier callbacks in order of their priority until either no notifier is left or a notifier returns a value with the }(hjhhhNhNubj)}(h``SSAM_NOTIF_STOP``h]hSSAM_NOTIF_STOP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhm bit set. Note that this bit is automatically set via ssam_notifier_from_errno() on any non-zero error value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubh)}(hX!Returns the notifier status value, which contains the notifier status bits (``SSAM_NOTIF_HANDLED`` and ``SSAM_NOTIF_STOP``) as well as a potential error value returned from the last executed notifier callback. Use ssam_notifier_to_errno() to convert this value to the original error value.h](hLReturns the notifier status value, which contains the notifier status bits (}(hjʭhhhNhNubj)}(h``SSAM_NOTIF_HANDLED``h]hSSAM_NOTIF_HANDLED}(hjҭhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʭubh and }(hjʭhhhNhNubj)}(h``SSAM_NOTIF_STOP``h]hSSAM_NOTIF_STOP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjʭubh) as well as a potential error value returned from the last executed notifier callback. Use ssam_notifier_to_errno() to convert this value to the original error value.}(hjʭhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nfblk_insert (C function)c.ssam_nfblk_inserthNtauh1jhjphhhNhNubj)}(hhh](j)}(hOint ssam_nfblk_insert (struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h]j)}(hNint ssam_nfblk_insert(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKubj5)}(h h]h }(hj,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj+hKubjF)}(hssam_nfblk_inserth]jL)}(hssam_nfblk_inserth]hssam_nfblk_insert}(hj>hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj:ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj+hKubj)}(h9(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j )}(hstruct ssam_nf_head *nhh](j#)}(hj&h]hstruct}(hjZhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjVubj5)}(h h]h }(hjghhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjVubh)}(hhh]jL)}(h ssam_nf_headh]h ssam_nf_head}(hjxhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjuubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjzmodnameN classnameNjHjK)}jN]jQ)}jDj@sbc.ssam_nfblk_insertasbuh1hhjVubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjVubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjVubjL)}(hnhh]hnh}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjVubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjRubj )}(hstruct ssam_notifier_block *nbh](j#)}(hj&h]hstruct}(hj̮hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjȮubj5)}(h h]h }(hjٮhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjȮubh)}(hhh]jL)}(hssam_notifier_blockh]hssam_notifier_block}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_nfblk_insertasbuh1hhjȮubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjȮubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjȮubjL)}(hnbh]hnb}(hj#hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjȮubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjRubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj+hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhj+hKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj+hKhjhhubjx)}(hhh]h)}(h9Insert a new notifier block into the given notifier list.h]h9Insert a new notifier block into the given notifier list.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjJhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhj+hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_nf_head *nh`` The notifier head into which the block should be inserted. ``struct ssam_notifier_block *nb`` The notifier block to add. **Note** This function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``. **Return** Returns zero on success, ``-EEXIST`` if the notifier block has already been registered.h](h)}(h**Parameters**h]j)}(hjoh]h Parameters}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjiubj)}(hhh](j)}(hW``struct ssam_nf_head *nh`` The notifier head into which the block should be inserted. h](j)}(h``struct ssam_nf_head *nh``h]j)}(hjh]hstruct ssam_nf_head *nh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj)}(hhh]h)}(h:The notifier head into which the block should be inserted.h]h:The notifier head into which the block should be inserted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h>``struct ssam_notifier_block *nb`` The notifier block to add. h](j)}(h"``struct ssam_notifier_block *nb``h]j)}(hjǯh]hstruct ssam_notifier_block *nb}(hjɯhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjůubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj)}(hhh]h)}(hThe notifier block to add.h]hThe notifier block to add.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjܯhKhjݯubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjܯhKhjubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjiubh)}(hThis function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``.h](htThis function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding }(hjhhhNhNubj)}(h``struct ssam_nf.lock``h]hstruct ssam_nf.lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjiubh)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjiubh)}(hWReturns zero on success, ``-EEXIST`` if the notifier block has already been registered.xh](hReturns zero on success, }(hjQhhhNhNubj)}(h ``-EEXIST``h]h-EEXIST}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh3 if the notifier block has already been registered.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nfblk_find (C function)c.ssam_nfblk_findhNtauh1jhjphhhNhNubj)}(hhh](j)}(hNbool ssam_nfblk_find (struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h]j)}(hMbool ssam_nfblk_find(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhKubjF)}(hssam_nfblk_findh]jL)}(hssam_nfblk_findh]hssam_nfblk_find}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhKubj)}(h9(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j )}(hstruct ssam_nf_head *nhh](j#)}(hj&h]hstruct}(hjΰhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjʰubj5)}(h h]h }(hj۰hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjʰubh)}(hhh]jL)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nfblk_findasbuh1hhjʰubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjʰubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjʰubjL)}(hnhh]hnh}(hj'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjʰubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjưubj )}(hstruct ssam_notifier_block *nbh](j#)}(hj&h]hstruct}(hj@hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj<ubj5)}(h h]h }(hjMhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj<ubh)}(hhh]jL)}(hssam_notifier_blockh]hssam_notifier_block}(hj^hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj[ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj`modnameN classnameNjHjK)}jN]jc.ssam_nfblk_findasbuh1hhj<ubj5)}(h h]h }(hj|hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj<ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj<ubjL)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjưubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjhhubjx)}(hhh]h)}(hICheck if a notifier block is registered on the given notifier head. list.h]hICheck if a notifier block is registered on the given notifier head. list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjٱjjٱjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_nf_head *nh`` The notifier head on which to search. ``struct ssam_notifier_block *nb`` The notifier block to search for. **Note** This function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``. **Return** Returns true if the given notifier block is registered on the given notifier head, false otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjݱubj)}(hhh](j)}(hB``struct ssam_nf_head *nh`` The notifier head on which to search. h](j)}(h``struct ssam_nf_head *nh``h]j)}(hjh]hstruct ssam_nf_head *nh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj)}(hhh]h)}(h%The notifier head on which to search.h]h%The notifier head on which to search.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hE``struct ssam_notifier_block *nb`` The notifier block to search for. h](j)}(h"``struct ssam_notifier_block *nb``h]j)}(hj;h]hstruct ssam_notifier_block *nb}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhj5ubj)}(hhh]h)}(h!The notifier block to search for.h]h!The notifier block to search for.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhKhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhKhjubeh}(h]h ]h"]h$]h&]uh1jhjݱubh)}(h**Note**h]j)}(hjvh]hNote}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjݱubh)}(hThis function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``.h](htThis function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding }(hjhhhNhNubj)}(h``struct ssam_nf.lock``h]hstruct ssam_nf.lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjݱubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjݱubh)}(hcReturns true if the given notifier block is registered on the given notifier head, false otherwise.h]hcReturns true if the given notifier block is registered on the given notifier head, false otherwise.}(hjŲhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjݱubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nfblk_remove (C function)c.ssam_nfblk_removehNtauh1jhjphhhNhNubj)}(hhh](j)}(h7void ssam_nfblk_remove (struct ssam_notifier_block *nb)h]j)}(h6void ssam_nfblk_remove(struct ssam_notifier_block *nb)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhKubjF)}(hssam_nfblk_removeh]jL)}(hssam_nfblk_removeh]hssam_nfblk_remove}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhKubj)}(h (struct ssam_notifier_block *nb)h]j )}(hstruct ssam_notifier_block *nbh](j#)}(hj&h]hstruct}(hj1hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj-ubj5)}(h h]h }(hj>hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-ubh)}(hhh]jL)}(hssam_notifier_blockh]hssam_notifier_block}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjLubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjQmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nfblk_removeasbuh1hhj-ubj5)}(h h]h }(hjohhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-ubje)}(hjhh]h*}(hj}hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj-ubjL)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj)ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjhhubjx)}(hhh]h)}(h/Remove a notifier block from its notifier list.h]h/Remove a notifier block from its notifier list.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj̳jj̳jjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_notifier_block *nb`` The notifier block to be removed. **Note** This function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``. Furthermore, the caller _must_ ensure SRCU synchronization by calling synchronize_srcu() with ``nh->srcu`` after leaving the critical section, to ensure that the removed notifier block is not in use any more.h](h)}(h**Parameters**h]j)}(hjֳh]h Parameters}(hjسhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԳubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjгubj)}(hhh]j)}(hE``struct ssam_notifier_block *nb`` The notifier block to be removed. h](j)}(h"``struct ssam_notifier_block *nb``h]j)}(hjh]hstruct ssam_notifier_block *nb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj)}(hhh]h)}(h!The notifier block to be removed.h]h!The notifier block to be removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKhjubah}(h]h ]h"]h$]h&]uh1jhjгubh)}(h**Note**h]j)}(hj0h]hNote}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjгubh)}(hX]This function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding ``struct ssam_nf.lock``. Furthermore, the caller _must_ ensure SRCU synchronization by calling synchronize_srcu() with ``nh->srcu`` after leaving the critical section, to ensure that the removed notifier block is not in use any more.h](htThis function must be synchronized by the caller with respect to other insert, find, and/or remove calls by holding }(hjFhhhNhNubj)}(h``struct ssam_nf.lock``h]hstruct ssam_nf.lock}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh`. Furthermore, the caller _must_ ensure SRCU synchronization by calling synchronize_srcu() with }(hjFhhhNhNubj)}(h ``nh->srcu``h]hnh->srcu}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubhf after leaving the critical section, to ensure that the removed notifier block is not in use any more.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjгubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_head_init (C function)c.ssam_nf_head_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(h/int ssam_nf_head_init (struct ssam_nf_head *nh)h]j)}(h.int ssam_nf_head_init(struct ssam_nf_head *nh)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhKubjF)}(hssam_nf_head_inith]jL)}(hssam_nf_head_inith]hssam_nf_head_init}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhKubj)}(h(struct ssam_nf_head *nh)h]j )}(hstruct ssam_nf_head *nhh](j#)}(hj&h]hstruct}(hjִhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjҴubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjҴubh)}(hhh]jL)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nf_head_initasbuh1hhjҴubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjҴubje)}(hjhh]h*}(hj"hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjҴubjL)}(hnhh]hnh}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjҴubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjδubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjhhubjx)}(hhh]h)}(h#Initialize the given notifier head.h]h#Initialize the given notifier head.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjVhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjqjjqjjjuh1jhhhjphNhNubj)}(hN**Parameters** ``struct ssam_nf_head *nh`` The notifier head to initialize.h](h)}(h**Parameters**h]j)}(hj{h]h Parameters}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjuubj)}(hhh]j)}(h<``struct ssam_nf_head *nh`` The notifier head to initialize.h](j)}(h``struct ssam_nf_head *nh``h]j)}(hjh]hstruct ssam_nf_head *nh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj)}(hhh]h)}(h The notifier head to initialize.h]h The notifier head to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_nf_head_destroy (C function)c.ssam_nf_head_destroyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h3void ssam_nf_head_destroy (struct ssam_nf_head *nh)h]j)}(h2void ssam_nf_head_destroy(struct ssam_nf_head *nh)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_nf_head_destroyh]jL)}(hssam_nf_head_destroyh]hssam_nf_head_destroy}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_nf_head *nh)h]j )}(hstruct ssam_nf_head *nhh](j#)}(hj&h]hstruct}(hj1hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj-ubj5)}(h h]h }(hj>hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-ubh)}(hhh]jL)}(h ssam_nf_headh]h ssam_nf_head}(hjOhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjLubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjQmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nf_head_destroyasbuh1hhj-ubj5)}(h h]h }(hjohhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-ubje)}(hjhh]h*}(hj}hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj-ubjL)}(hnhh]hnh}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj)ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h%Deinitialize the given notifier head.h]h%Deinitialize the given notifier head.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj̶jj̶jjjuh1jhhhjphNhNubj)}(hP**Parameters** ``struct ssam_nf_head *nh`` The notifier head to deinitialize.h](h)}(h**Parameters**h]j)}(hjֶh]h Parameters}(hjضhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjԶubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjжubj)}(hhh]j)}(h>``struct ssam_nf_head *nh`` The notifier head to deinitialize.h](j)}(h``struct ssam_nf_head *nh``h]j)}(hjh]hstruct ssam_nf_head *nh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h"The notifier head to deinitialize.h]h"The notifier head to deinitialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubah}(h]h ]h"]h$]h&]uh1jhjжubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_refcount_key (C struct)c.ssam_nf_refcount_keyhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssam_nf_refcount_keyh]j)}(hstruct ssam_nf_refcount_keyh](j#)}(hj&h]hstruct}(hjOhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjKhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hj]hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjKhhhj\hM ubjF)}(hssam_nf_refcount_keyh]jL)}(hjIh]hssam_nf_refcount_key}(hjohhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjkubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjKhhhj\hM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjGhhhj\hM ubah}(h]jBah ](jojpeh"]h$]h&]jtju)jvhuh1jhj\hM hjDhhubjx)}(hhh]h)}(h1Key used for event activation reference counting.h]h1Key used for event activation reference counting.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjDhhhj\hM ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Definition**:: struct ssam_nf_refcount_key { struct ssam_event_registry reg; struct ssam_event_id id; }; **Members** ``reg`` The registry via which the event is enabled/disabled. ``id`` The ID uniquely describing the event.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hastruct ssam_nf_refcount_key { struct ssam_event_registry reg; struct ssam_event_id id; };h]hastruct ssam_nf_refcount_key { struct ssam_event_registry reg; struct ssam_event_id id; };}hjηsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Members**h]j)}(hj߷h]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjݷubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h>``reg`` The registry via which the event is enabled/disabled. h](j)}(h``reg``h]j)}(hjh]hreg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h5The registry via which the event is enabled/disabled.h]h5The registry via which the event is enabled/disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h,``id`` The ID uniquely describing the event.h](j)}(h``id``h]j)}(hj7h]hid}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj1ubj)}(hhh]h)}(h%The ID uniquely describing the event.h]h%The ID uniquely describing the event.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_nf_refcount_entry (C struct)c.ssam_nf_refcount_entryhNtauh1jhjphhhNhNubj)}(hhh](j)}(hssam_nf_refcount_entryh]j)}(hstruct ssam_nf_refcount_entryh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_nf_refcount_entryh]jL)}(hjh]hssam_nf_refcount_entry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h7RB-tree entry for reference counting event activations.h]h7RB-tree entry for reference counting event activations.}(hjӸhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjиhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hXf**Definition**:: struct ssam_nf_refcount_entry { struct rb_node node; struct ssam_nf_refcount_key key; int refcount; u8 flags; }; **Members** ``node`` The node of this entry in the rb-tree. ``key`` The key of the event. ``refcount`` The reference-count of the event. ``flags`` The flags used when enabling the event.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hstruct ssam_nf_refcount_entry { struct rb_node node; struct ssam_nf_refcount_key key; int refcount; u8 flags; };h]hstruct ssam_nf_refcount_entry { struct rb_node node; struct ssam_nf_refcount_key key; int refcount; u8 flags; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM!hjubh)}(h **Members**h]j)}(hj!h]hMembers}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM(hjubj)}(hhh](j)}(h0``node`` The node of this entry in the rb-tree. h](j)}(h``node``h]j)}(hj@h]hnode}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj:ubj)}(hhh]h)}(h&The node of this entry in the rb-tree.h]h&The node of this entry in the rb-tree.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhMhj7ubj)}(h``key`` The key of the event. h](j)}(h``key``h]j)}(hjyh]hkey}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjsubj)}(hhh]h)}(hThe key of the event.h]hThe key of the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhMhj7ubj)}(h/``refcount`` The reference-count of the event. h](j)}(h ``refcount``h]j)}(hjh]hrefcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h!The reference-count of the event.h]h!The reference-count of the event.}(hj˹hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjǹhM hjȹubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjǹhM hj7ubj)}(h1``flags`` The flags used when enabling the event.h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(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&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM!hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj7ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_nf_refcount_inc (C function)c.ssam_nf_refcount_inchNtauh1jhjphhhNhNubj)}(hhh](j)}(hstruct ssam_nf_refcount_entry * ssam_nf_refcount_inc (struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h]j)}(hstruct ssam_nf_refcount_entry *ssam_nf_refcount_inc(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j#)}(hj&h]hstruct}(hjEhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjAhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM:ubj5)}(h h]h }(hjShhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjAhhhjRhM:ubh)}(hhh]jL)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hjdhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjaubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjfmodnameN classnameNjHjK)}jN]jQ)}jDssam_nf_refcount_incsbc.ssam_nf_refcount_incasbuh1hhjAhhhjRhM:ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjAhhhjRhM:ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjAhhhjRhM:ubjF)}(hssam_nf_refcount_inch]jL)}(hjh]hssam_nf_refcount_inc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjAhhhjRhM:ubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj̺hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjݺhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjںubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjߺmodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_incasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_registry regh](j#)}(hj&h]hstruct}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+ubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubh)}(hhh]jL)}(hssam_event_registryh]hssam_event_registry}(hjMhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjOmodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_incasbuh1hhj+ubj5)}(h h]h }(hjkhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubjL)}(hregh]hreg}(hjyhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_id idh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_event_idh]h ssam_event_id}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_incasbuh1hhjubj5)}(h h]h }(hjλhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hidh]hid}(hjܻhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjAhhhjRhM:ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj=hhhjRhM:ubah}(h]j8ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjRhM:hj:hhubjx)}(hhh]h)}(h9Increment reference-/activation-count of the given event.h]h9Increment reference-/activation-count of the given event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM*hjhhubah}(h]h ]h"]h$]h&]uh1jwhj:hhhjRhM:ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_nf *nf`` The notifier system reference. ``struct ssam_event_registry reg`` The registry used to enable/disable the event. ``struct ssam_event_id id`` The event ID. **Description** Increments the reference-/activation-count associated with the specified event type/ID, allocating a new entry for this event ID if necessary. A newly allocated entry will have a refcount of one. **Note** ``nf->lock`` must be held when calling this function. **Return** Returns the refcount entry on success. Returns an error pointer with ``-ENOSPC`` if there have already been ``INT_MAX`` events of the specified ID and type registered, or ``-ENOMEM`` if the entry could not be allocated.h](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM.hj"ubj)}(hhh](j)}(h6``struct ssam_nf *nf`` The notifier system reference. h](j)}(h``struct ssam_nf *nf``h]j)}(hjGh]hstruct ssam_nf *nf}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM,hjAubj)}(hhh]h)}(hThe notifier system reference.h]hThe notifier system reference.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hM,hj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hM,hj>ubj)}(hR``struct ssam_event_registry reg`` The registry used to enable/disable the event. h](j)}(h"``struct ssam_event_registry reg``h]j)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM-hjzubj)}(hhh]h)}(h.The registry used to enable/disable the event.h]h.The registry used to enable/disable the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM-hjubah}(h]h ]h"]h$]h&]uh1jhjzubeh}(h]h ]h"]h$]h&]uh1jhjhM-hj>ubj)}(h*``struct ssam_event_id id`` The event ID. h](j)}(h``struct ssam_event_id id``h]j)}(hjh]hstruct ssam_event_id id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM.hjubj)}(hhh]h)}(h The event ID.h]h The event ID.}(hjҼhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjμhM.hjϼubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjμhM.hj>ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM0hj"ubh)}(hIncrements the reference-/activation-count associated with the specified event type/ID, allocating a new entry for this event ID if necessary. A newly allocated entry will have a refcount of one.h]hIncrements the reference-/activation-count associated with the specified event type/ID, allocating a new entry for this event ID if necessary. A newly allocated entry will have a refcount of one.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM0hj"ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM4hj"ubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubh) must be held when calling this function.}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM4hj"ubh)}(h **Return**h]j)}(hjPh]hReturn}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM6hj"ubh)}(hReturns the refcount entry on success. Returns an error pointer with ``-ENOSPC`` if there have already been ``INT_MAX`` events of the specified ID and type registered, or ``-ENOMEM`` if the entry could not be allocated.h](hEReturns the refcount entry on success. Returns an error pointer with }(hjfhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh if there have already been }(hjfhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh4 events of the specified ID and type registered, or }(hjfhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubh% if the entry could not be allocated.}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM6hj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_nf_refcount_dec (C function)c.ssam_nf_refcount_dechNtauh1jhjphhhNhNubj)}(hhh](j)}(hstruct ssam_nf_refcount_entry * ssam_nf_refcount_dec (struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h]j)}(hstruct ssam_nf_refcount_entry *ssam_nf_refcount_dec(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j#)}(hj&h]hstruct}(hj˽hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjǽhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMxubj5)}(h h]h }(hjٽhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjǽhhhjؽhMxubh)}(hhh]jL)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDssam_nf_refcount_decsbc.ssam_nf_refcount_decasbuh1hhjǽhhhjؽhMxubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjǽhhhjؽhMxubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjǽhhhjؽhMxubjF)}(hssam_nf_refcount_dech]jL)}(hjh]hssam_nf_refcount_dec}(hj*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj&ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjǽhhhjؽhMxubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjEhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjAubj5)}(h h]h }(hjRhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjAubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjchhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj`ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjemodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_decasbuh1hhjAubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjAubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjAubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjAubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubj )}(hstruct ssam_event_registry regh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj¾hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_registryh]hssam_event_registry}(hjӾhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjоubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjվmodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_decasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubj )}(hstruct ssam_event_id idh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_event_idh]h ssam_event_id}(hj6hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj3ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj8modnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_decasbuh1hhjubj5)}(h h]h }(hjThhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hidh]hid}(hjbhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj=ubeh}(h]h ]h"]h$]h&]hhuh1jhjǽhhhjؽhMxubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjýhhhjؽhMxubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjؽhMxhjhhubjx)}(hhh]h)}(h9Decrement reference-/activation-count of the given event.h]h9Decrement reference-/activation-count of the given event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMihjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjؽhMxubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX:**Parameters** ``struct ssam_nf *nf`` The notifier system reference. ``struct ssam_event_registry reg`` The registry used to enable/disable the event. ``struct ssam_event_id id`` The event ID. **Description** Decrements the reference-/activation-count of the specified event, returning its entry. If the returned entry has a refcount of zero, the caller is responsible for freeing it using kfree(). **Note** ``nf->lock`` must be held when calling this function. **Return** Returns the refcount entry on success or ``NULL`` if the entry has not been found.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMmhjubj)}(hhh](j)}(h6``struct ssam_nf *nf`` The notifier system reference. h](j)}(h``struct ssam_nf *nf``h]j)}(hjͿh]hstruct ssam_nf *nf}(hjϿhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˿ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMkhjǿubj)}(hhh]h)}(hThe notifier system reference.h]hThe notifier system reference.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMkhjubah}(h]h ]h"]h$]h&]uh1jhjǿubeh}(h]h ]h"]h$]h&]uh1jhjhMkhjĿubj)}(hR``struct ssam_event_registry reg`` The registry used to enable/disable the event. h](j)}(h"``struct ssam_event_registry reg``h]j)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMlhjubj)}(hhh]h)}(h.The registry used to enable/disable the event.h]h.The registry used to enable/disable the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMlhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMlhjĿubj)}(h*``struct ssam_event_id id`` The event ID. h](j)}(h``struct ssam_event_id id``h]j)}(hj?h]hstruct ssam_event_id id}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMmhj9ubj)}(hhh]h)}(h The event ID.h]h The event ID.}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThMmhjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1jhjThMmhjĿubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjzh]h Description}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMohjubh)}(hDecrements the reference-/activation-count of the specified event, returning its entry. If the returned entry has a refcount of zero, the caller is responsible for freeing it using kfree().h]hDecrements the reference-/activation-count of the specified event, returning its entry. If the returned entry has a refcount of zero, the caller is responsible for freeing it using kfree().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMohjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMshjubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) must be held when calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMshjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMuhjubh)}(hRReturns the refcount entry on success or ``NULL`` if the entry has not been found.h](h)Returns the refcount entry on success or }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! if the entry has not been found.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMuhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_nf_refcount_dec_free (C function)c.ssam_nf_refcount_dec_freehNtauh1jhjphhhNhNubj)}(hhh](j)}(hlvoid ssam_nf_refcount_dec_free (struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h]j)}(hkvoid ssam_nf_refcount_dec_free(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j)}(hvoidh]hvoid}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj)hhhj;hMubjF)}(hssam_nf_refcount_dec_freeh]jL)}(hssam_nf_refcount_dec_freeh]hssam_nf_refcount_dec_free}(hjNhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj)hhhj;hMubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjfubj5)}(h h]h }(hjwhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjfubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjPsbc.ssam_nf_refcount_dec_freeasbuh1hhjfubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjfubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjfubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjfubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjbubj )}(hstruct ssam_event_registry regh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_dec_freeasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hregh]hreg}(hj&hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjbubj )}(hstruct ssam_event_id idh](j#)}(hj&h]hstruct}(hj?hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj;ubj5)}(h h]h }(hjLhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;ubh)}(hhh]jL)}(h ssam_event_idh]h ssam_event_id}(hj]hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjZubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj_modnameN classnameNjHjK)}jN]jc.ssam_nf_refcount_dec_freeasbuh1hhj;ubj5)}(h h]h }(hj{hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj;ubjL)}(hidh]hid}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj;ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjbubeh}(h]h ]h"]h$]h&]hhuh1jhj)hhhj;hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj%hhhj;hMubah}(h]j ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj;hMhj"hhubjx)}(hhh]h)}(hpDecrement reference-/activation-count of the given event and free its entry if the reference count reaches zero.h]hpDecrement reference-/activation-count of the given event and free its entry if the reference count reaches zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhj"hhhj;hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_nf *nf`` The notifier system reference. ``struct ssam_event_registry reg`` The registry used to enable/disable the event. ``struct ssam_event_id id`` The event ID. **Description** Decrements the reference-/activation-count of the specified event, freeing its entry if it reaches zero. **Note** ``nf->lock`` must be held when calling this function.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h6``struct ssam_nf *nf`` The notifier system reference. h](j)}(h``struct ssam_nf *nf``h]j)}(hjh]hstruct ssam_nf *nf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe notifier system reference.h]hThe notifier system reference.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubj)}(hR``struct ssam_event_registry reg`` The registry used to enable/disable the event. h](j)}(h"``struct ssam_event_registry reg``h]j)}(hj-h]hstruct ssam_event_registry reg}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj'ubj)}(hhh]h)}(h.The registry used to enable/disable the event.h]h.The registry used to enable/disable the event.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjCubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjubj)}(h*``struct ssam_event_id id`` The event ID. h](j)}(h``struct ssam_event_id id``h]j)}(hjfh]hstruct ssam_event_id id}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj`ubj)}(hhh]h)}(h The event ID.h]h The event ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hMhj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hhDecrements the reference-/activation-count of the specified event, freeing its entry if it reaches zero.h]hhDecrements the reference-/activation-count of the specified event, freeing its entry if it reaches zero.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) must be held when calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_nf_refcount_empty (C function)c.ssam_nf_refcount_emptyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h0bool ssam_nf_refcount_empty (struct ssam_nf *nf)h]j)}(h/bool ssam_nf_refcount_empty(struct ssam_nf *nf)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.c;hMubj5)}(h h]h }(hj)hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj(hMubjF)}(hssam_nf_refcount_emptyh]jL)}(hssam_nf_refcount_emptyh]hssam_nf_refcount_empty}(hj;hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj7ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj(hMubj)}(h(struct ssam_nf *nf)h]j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjWhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjSubj5)}(h h]h }(hjdhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjSubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjuhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjrubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjwmodnameN classnameNjHjK)}jN]jQ)}jDj=sbc.ssam_nf_refcount_emptyasbuh1hhjSubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjSubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjSubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjOubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhj(hMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj(hMhjhhubjx)}(hhh]h)}(h>Test if the notification system has any enabled/active events.h]h>Test if the notification system has any enabled/active events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhj(hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hA**Parameters** ``struct ssam_nf *nf`` The notification system.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]j)}(h/``struct ssam_nf *nf`` The notification system.h](j)}(h``struct ssam_nf *nf``h]j)}(hjh]hstruct ssam_nf *nf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe notification system.h]hThe notification system.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_call (C function)c.ssam_nf_callhNtauh1jhjphhhNhNubj)}(hhh](j)}(h^void ssam_nf_call (struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)h]j)}(h]void ssam_nf_call(struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)h](j)}(hvoidh]hvoid}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjqhhhjhMubjF)}(h ssam_nf_callh]jL)}(h ssam_nf_callh]h ssam_nf_call}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjqhhhjhMubj)}(hL(struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)h](j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nf_callasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hnfh]hnf}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct device *devh](j#)}(hj&h]hstruct}(hj$hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hdeviceh]hdevice}(hjBhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjDmodnameN classnameNjHjK)}jN]jc.ssam_nf_callasbuh1hhj ubj5)}(h h]h }(hj`hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hjnhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hdevh]hdev}(hj{hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu16 rqidh](h)}(hhh]jL)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_nf_callasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hrqidh]hrqid}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event *eventh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_eventh]h ssam_event}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_nf_callasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj&hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(heventh]hevent}(hj3hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjqhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjmhhhjhMubah}(h]jhah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjjhhubjx)}(hhh]h)}(h3Call notification callbacks for the provided event.h]h3Call notification callbacks for the provided event.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjZhhubah}(h]h ]h"]h$]h&]uh1jwhjjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1jhhhjphNhNubj)}(hXq**Parameters** ``struct ssam_nf *nf`` The notifier system ``struct device *dev`` The associated device, only used for logging. ``u16 rqid`` The request ID of the event. ``struct ssam_event *event`` The event provided to the callbacks. **Description** Execute registered callbacks in order of their priority until either no callback is left or a callback returns a value with the ``SSAM_NOTIF_STOP`` bit set. Note that this bit is set automatically when converting non-zero error values via ssam_notifier_from_errno() to notifier values. Also note that any callback that could handle an event should return a value with bit ``SSAM_NOTIF_HANDLED`` set, indicating that the event does not go unhandled/ignored. In case no registered callback could handle an event, this function will emit a warning. In case a callback failed, this function will emit an error message.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubj)}(hhh](j)}(h+``struct ssam_nf *nf`` The notifier system h](j)}(h``struct ssam_nf *nf``h]j)}(hjh]hstruct ssam_nf *nf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe notifier systemh]hThe notifier system}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hE``struct device *dev`` The associated device, only used for logging. h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h-The associated device, only used for logging.h]h-The associated device, only used for logging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``u16 rqid`` The request ID of the event. h](j)}(h ``u16 rqid``h]j)}(hjh]hu16 rqid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj)}(hhh]h)}(hThe request ID of the event.h]hThe request ID of the event.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(hB``struct ssam_event *event`` The event provided to the callbacks. h](j)}(h``struct ssam_event *event``h]j)}(hjIh]hstruct ssam_event *event}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjCubj)}(hhh]h)}(h$The event provided to the callbacks.h]h$The event provided to the callbacks.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubeh}(h]h ]h"]h$]h&]uh1jhjyubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubh)}(hXExecute registered callbacks in order of their priority until either no callback is left or a callback returns a value with the ``SSAM_NOTIF_STOP`` bit set. Note that this bit is set automatically when converting non-zero error values via ssam_notifier_from_errno() to notifier values.h](hExecute registered callbacks in order of their priority until either no callback is left or a callback returns a value with the }(hjhhhNhNubj)}(h``SSAM_NOTIF_STOP``h]hSSAM_NOTIF_STOP}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh bit set. Note that this bit is set automatically when converting non-zero error values via ssam_notifier_from_errno() to notifier values.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubh)}(hXAlso note that any callback that could handle an event should return a value with bit ``SSAM_NOTIF_HANDLED`` set, indicating that the event does not go unhandled/ignored. In case no registered callback could handle an event, this function will emit a warning.h](hVAlso note that any callback that could handle an event should return a value with bit }(hjhhhNhNubj)}(h``SSAM_NOTIF_HANDLED``h]hSSAM_NOTIF_HANDLED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh set, indicating that the event does not go unhandled/ignored. In case no registered callback could handle an event, this function will emit a warning.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubh)}(hDIn case a callback failed, this function will emit an error message.h]hDIn case a callback failed, this function will emit an error message.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_init (C function)c.ssam_nf_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(h%int ssam_nf_init (struct ssam_nf *nf)h]j)}(h$int ssam_nf_init(struct ssam_nf *nf)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(h ssam_nf_inith]jL)}(h ssam_nf_inith]h ssam_nf_init}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_nf *nf)h]j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjHhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjDubj5)}(h h]h }(hjUhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjfhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjcubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjhmodnameN classnameNjHjK)}jN]jQ)}jDj.sbc.ssam_nf_initasbuh1hhjDubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjDubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj@ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(hInitialize the notifier system.h]hInitialize the notifier system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hK**Parameters** ``struct ssam_nf *nf`` The notifier system to initialize.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]j)}(h9``struct ssam_nf *nf`` The notifier system to initialize.h](j)}(h``struct ssam_nf *nf``h]j)}(hj h]hstruct ssam_nf *nf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h"The notifier system to initialize.h]h"The notifier system to initialize.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_nf_destroy (C function)c.ssam_nf_destroyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h)void ssam_nf_destroy (struct ssam_nf *nf)h]j)}(h(void ssam_nf_destroy(struct ssam_nf *nf)h](j)}(hvoidh]hvoid}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hjuhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjbhhhjthM ubjF)}(hssam_nf_destroyh]jL)}(hssam_nf_destroyh]hssam_nf_destroy}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjbhhhjthM ubj)}(h(struct ssam_nf *nf)h]j )}(hstruct ssam_nf *nfh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_nf_destroyasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjbhhhjthM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj^hhhjthM ubah}(h]jYah ](jojpeh"]h$]h&]jtju)jvhuh1jhjthM hj[hhubjx)}(hhh]h)}(h!Deinitialize the notifier system.h]h!Deinitialize the notifier system.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj#hhubah}(h]h ]h"]h$]h&]uh1jwhj[hhhjthM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj>jj>jjjuh1jhhhjphNhNubj)}(hM**Parameters** ``struct ssam_nf *nf`` The notifier system to deinitialize.h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjBubj)}(hhh]j)}(h;``struct ssam_nf *nf`` The notifier system to deinitialize.h](j)}(h``struct ssam_nf *nf``h]j)}(hjgh]hstruct ssam_nf *nf}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjaubj)}(hhh]h)}(h$The notifier system to deinitialize.h]h$The notifier system to deinitialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj}ubah}(h]h ]h"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM hj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'ssam_event_item_cache_init (C function)c.ssam_event_item_cache_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(h%int ssam_event_item_cache_init (void)h]j)}(h$int ssam_event_item_cache_init(void)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM.ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM.ubjF)}(hssam_event_item_cache_inith]jL)}(hssam_event_item_cache_inith]hssam_event_item_cache_init}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM.ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM.ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM.ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM.hjhhubjx)}(hhh]h)}(h Initialize the event item cache.h]h Initialize the event item cache.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM,hj%hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM.ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj@jj@jjjuh1jhhhjphNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjJh]h Parameters}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM0hjDubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hjih]hvoid}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM2hjcubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM3hjubah}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ]h"]h$]h&]uh1jhj~hM2hj`ubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j *ssam_event_item_cache_destroy (C function)c.ssam_event_item_cache_destroyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h)void ssam_event_item_cache_destroy (void)h]j)}(h(void ssam_event_item_cache_destroy(void)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM@ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM@ubjF)}(hssam_event_item_cache_destroyh]jL)}(hssam_event_item_cache_destroyh]hssam_event_item_cache_destroy}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM@ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM@ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM@ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM@hjhhubjx)}(hhh]h)}(h"Deinitialize the event item cache.h]h"Deinitialize the event item cache.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM>hj'hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1jhhhjphNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMBhjFubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hjkh]hvoid}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMDhjeubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_event_item_free (C function)c.ssam_event_item_freehNtauh1jhjphhhNhNubj)}(hhh](j)}(h8void ssam_event_item_free (struct ssam_event_item *item)h]j)}(h7void ssam_event_item_free(struct ssam_event_item *item)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMTubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMTubjF)}(hssam_event_item_freeh]jL)}(hssam_event_item_freeh]hssam_event_item_free}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMTubj)}(h(struct ssam_event_item *item)h]j )}(hstruct ssam_event_item *itemh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_itemh]hssam_event_item}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj"modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_event_item_freeasbuh1hhjubj5)}(h h]h }(hj@hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjNhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hitemh]hitem}(hj[hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMTubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMTubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMThjhhubjx)}(hhh]h)}(hFree the provided event item.h]hFree the provided event item.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMQhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMTubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hJ**Parameters** ``struct ssam_event_item *item`` The event item to free.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMUhjubj)}(hhh]j)}(h8``struct ssam_event_item *item`` The event item to free.h](j)}(h ``struct ssam_event_item *item``h]j)}(hjh]hstruct ssam_event_item *item}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMWhjubj)}(hhh]h)}(hThe event item to free.h]hThe event item to free.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_event_item_alloc (C function)c.ssam_event_item_allochNtauh1jhjphhhNhNubj)}(hhh](j)}(hHstruct ssam_event_item * ssam_event_item_alloc (size_t len, gfp_t flags)h]j)}(hFstruct ssam_event_item *ssam_event_item_alloc(size_t len, gfp_t flags)h](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMgubj5)}(h h]h }(hj.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj-hMgubh)}(hhh]jL)}(hssam_event_itemh]hssam_event_item}(hj?hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjAmodnameN classnameNjHjK)}jN]jQ)}jDssam_event_item_allocsbc.ssam_event_item_allocasbuh1hhjhhhj-hMgubj5)}(h h]h }(hj`hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj-hMgubje)}(hjhh]h*}(hjnhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhj-hMgubjF)}(hssam_event_item_alloch]jL)}(hj]h]hssam_event_item_alloc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj{ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj-hMgubj)}(h(size_t len, gfp_t flags)h](j )}(h size_t lenh](h)}(hhh]jL)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]j[c.ssam_event_item_allocasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h gfp_t flagsh](h)}(hhh]jL)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]j[c.ssam_event_item_allocasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj-hMgubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhj-hMgubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj-hMghjhhubjx)}(hhh]h)}(h3Allocate an event item with the given payload size.h]h3Allocate an event item with the given payload size.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM[hj8hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhj-hMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``size_t len`` The event payload length. ``gfp_t flags`` The flags used for allocation. **Description** Allocate an event item with the given payload size, preferring allocation from the event item cache if the payload is small enough (i.e. smaller than ``SSAM_EVENT_ITEM_CACHE_PAYLOAD_LEN``). Sets the item operations and payload length values. The item free callback (``ops.free``) should not be overwritten after this call. **Return** Returns the newly allocated event item.h](h)}(h**Parameters**h]j)}(hj]h]h Parameters}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM_hjWubj)}(hhh](j)}(h)``size_t len`` The event payload length. h](j)}(h``size_t len``h]j)}(hj|h]h size_t len}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM\hjvubj)}(hhh]h)}(hThe event payload length.h]hThe event payload length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjsubj)}(h/``gfp_t flags`` The flags used for allocation. h](j)}(h``gfp_t flags``h]j)}(hjh]h gfp_t flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM]hjubj)}(hhh]h)}(hThe flags used for allocation.h]hThe flags used for allocation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjsubeh}(h]h ]h"]h$]h&]uh1jhjWubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM_hjWubh)}(hXBAllocate an event item with the given payload size, preferring allocation from the event item cache if the payload is small enough (i.e. smaller than ``SSAM_EVENT_ITEM_CACHE_PAYLOAD_LEN``). Sets the item operations and payload length values. The item free callback (``ops.free``) should not be overwritten after this call.h](hAllocate an event item with the given payload size, preferring allocation from the event item cache if the payload is small enough (i.e. smaller than }(hjhhhNhNubj)}(h%``SSAM_EVENT_ITEM_CACHE_PAYLOAD_LEN``h]h!SSAM_EVENT_ITEM_CACHE_PAYLOAD_LEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhO). Sets the item operations and payload length values. The item free callback (}(hjhhhNhNubj)}(h ``ops.free``h]hops.free}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh,) should not be overwritten after this call.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM_hjWubh)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMehjWubh)}(h'Returns the newly allocated event item.h]h'Returns the newly allocated event item.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMehjWubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_event_queue_push (C function)c.ssam_event_queue_pushhNtauh1jhjphhhNhNubj)}(hhh](j)}(hUvoid ssam_event_queue_push (struct ssam_event_queue *q, struct ssam_event_item *item)h]j)}(hTvoid ssam_event_queue_push(struct ssam_event_queue *q, struct ssam_event_item *item)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj|hhhjhMubjF)}(hssam_event_queue_pushh]jL)}(hssam_event_queue_pushh]hssam_event_queue_push}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj|hhhjhMubj)}(h:(struct ssam_event_queue *q, struct ssam_event_item *item)h](j )}(hstruct ssam_event_queue *qh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_event_queue_pushasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hqh]hq}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_item *itemh](j#)}(hj&h]hstruct}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+ubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubh)}(hhh]jL)}(hssam_event_itemh]hssam_event_item}(hjMhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjOmodnameN classnameNjHjK)}jN]jc.ssam_event_queue_pushasbuh1hhj+ubj5)}(h h]h }(hjkhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubje)}(hjhh]h*}(hjyhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubjL)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhj|hhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjxhhhjhMubah}(h]jsah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjuhhubjx)}(hhh]h)}(h&Push an event item to the event queue.h]h&Push an event item to the event queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjuhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hv**Parameters** ``struct ssam_event_queue *q`` The event queue. ``struct ssam_event_item *item`` The item to add.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h0``struct ssam_event_queue *q`` The event queue. h](j)}(h``struct ssam_event_queue *q``h]j)}(hjh]hstruct ssam_event_queue *q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe event queue.h]hThe event queue.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h1``struct ssam_event_item *item`` The item to add.h](j)}(h ``struct ssam_event_item *item``h]j)}(hj*h]hstruct ssam_event_item *item}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj$ubj)}(hhh]h)}(hThe item to add.h]hThe item to add.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj@ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj?hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_event_queue_pop (C function)c.ssam_event_queue_pophNtauh1jhjphhhNhNubj)}(hhh](j)}(hJstruct ssam_event_item * ssam_event_queue_pop (struct ssam_event_queue *q)h]j)}(hHstruct ssam_event_item *ssam_event_queue_pop(struct ssam_event_queue *q)h](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubh)}(hhh]jL)}(hssam_event_itemh]hssam_event_item}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDssam_event_queue_popsbc.ssam_event_queue_popasbuh1hhjhhhjhMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhMubjF)}(hssam_event_queue_poph]jL)}(hjh]hssam_event_queue_pop}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_event_queue *q)h]j )}(hstruct ssam_event_queue *qh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_event_queue_popasbuh1hhjubj5)}(h h]h }(hj:hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjHhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hjh]hq}(hjUhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj|hhhjhMubah}(h]jwah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjyhhubjx)}(hhh]h)}(h-Pop the next event item from the event queue.h]h-Pop the next event item from the event queue.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj{hhubah}(h]h ]h"]h$]h&]uh1jwhjyhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_event_queue *q`` The event queue. **Description** Returns and removes the next event item from the queue. Returns ``NULL`` If there is no event item left.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]j)}(h0``struct ssam_event_queue *q`` The event queue. h](j)}(h``struct ssam_event_queue *q``h]j)}(hjh]hstruct ssam_event_queue *q}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe event queue.h]hThe event queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hhReturns and removes the next event item from the queue. Returns ``NULL`` If there is no event item left.h](h@Returns and removes the next event item from the queue. Returns }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh If there is no event item left.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_event_queue_is_empty (C function)c.ssam_event_queue_is_emptyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h;bool ssam_event_queue_is_empty (struct ssam_event_queue *q)h]j)}(h:bool ssam_event_queue_is_empty(struct ssam_event_queue *q)h](j)}(hjh]hbool}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hj_hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjMhhhj^hMubjF)}(hssam_event_queue_is_emptyh]jL)}(hssam_event_queue_is_emptyh]hssam_event_queue_is_empty}(hjqhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjmubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjMhhhj^hMubj)}(h(struct ssam_event_queue *q)h]j )}(hstruct ssam_event_queue *qh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjssbc.ssam_event_queue_is_emptyasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hjh]hq}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjMhhhj^hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjIhhhj^hMubah}(h]jDah ](jojpeh"]h$]h&]jtju)jvhuh1jhj^hMhjFhhubjx)}(hhh]h)}(h"Check if the event queue is empty.h]h"Check if the event queue is empty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj hhubah}(h]h ]h"]h$]h&]uh1jwhjFhhhj^hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhjphNhNubj)}(hA**Parameters** ``struct ssam_event_queue *q`` The event queue.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj+ubj)}(hhh]j)}(h/``struct ssam_event_queue *q`` The event queue.h](j)}(h``struct ssam_event_queue *q``h]j)}(hjPh]hstruct ssam_event_queue *q}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjJubj)}(hhh]h)}(hThe event queue.h]hThe event queue.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjfubah}(h]h ]h"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_cplt_get_event_queue (C function)c.ssam_cplt_get_event_queuehNtauh1jhjphhhNhNubj)}(hhh](j)}(h^struct ssam_event_queue * ssam_cplt_get_event_queue (struct ssam_cplt *cplt, u8 tid, u16 rqid)h]j)}(h\struct ssam_event_queue *ssam_cplt_get_event_queue(struct ssam_cplt *cplt, u8 tid, u16 rqid)h](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubh)}(hhh]jL)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDssam_cplt_get_event_queuesbc.ssam_cplt_get_event_queueasbuh1hhjhhhjhMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjhhhjhMubjF)}(hssam_cplt_get_event_queueh]jL)}(hjh]hssam_cplt_get_event_queue}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h*(struct ssam_cplt *cplt, u8 tid, u16 rqid)h](j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hj$hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjBhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj?ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjDmodnameN classnameNjHjK)}jN]jc.ssam_cplt_get_event_queueasbuh1hhj ubj5)}(h h]h }(hj`hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hjnhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hcplth]hcplt}(hj{hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu8 tidh](h)}(hhh]jL)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_cplt_get_event_queueasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(htidh]htid}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu16 rqidh](h)}(hhh]jL)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_cplt_get_event_queueasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hrqidh]hrqid}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h-Get the event queue for the given parameters.h]h-Get the event queue for the given parameters.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_cplt *cplt`` The completion system on which to look for the queue. ``u8 tid`` The target ID of the queue. ``u16 rqid`` The request ID representing the event ID for which to get the queue. **Return** Returns the event queue corresponding to the event type described by the given parameters. If the request ID does not represent an event, this function returns ``NULL``. If the target ID is not supported, this function will fall back to the default target ID (``tid = 1``).h](h)}(h**Parameters**h]j)}(hjWh]h Parameters}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjQubj)}(hhh](j)}(hQ``struct ssam_cplt *cplt`` The completion system on which to look for the queue. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjvh]hstruct ssam_cplt *cplt}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjpubj)}(hhh]h)}(h5The completion system on which to look for the queue.h]h5The completion system on which to look for the queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(h'``u8 tid`` The target ID of the queue. h](j)}(h ``u8 tid``h]j)}(hjh]hu8 tid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe target ID of the queue.h]hThe target ID of the queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(hR``u16 rqid`` The request ID representing the event ID for which to get the queue. h](j)}(h ``u16 rqid``h]j)}(hjh]hu16 rqid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hDThe request ID representing the event ID for which to get the queue.h]hDThe request ID representing the event ID for which to get the queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubeh}(h]h ]h"]h$]h&]uh1jhjQubh)}(h **Return**h]j)}(hj#h]hReturn}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjQubh)}(hXReturns the event queue corresponding to the event type described by the given parameters. If the request ID does not represent an event, this function returns ``NULL``. If the target ID is not supported, this function will fall back to the default target ID (``tid = 1``).h](hReturns the event queue corresponding to the event type described by the given parameters. If the request ID does not represent an event, this function returns }(hj9hhhNhNubj)}(h``NULL``h]hNULL}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh\. If the target ID is not supported, this function will fall back to the default target ID (}(hj9hhhNhNubj)}(h ``tid = 1``h]htid = 1}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubh).}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cplt_submit (C function)c.ssam_cplt_submithNtauh1jhjphhhNhNubj)}(hhh](j)}(hHbool ssam_cplt_submit (struct ssam_cplt *cplt, struct work_struct *work)h]j)}(hGbool ssam_cplt_submit(struct ssam_cplt *cplt, struct work_struct *work)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_cplt_submith]jL)}(hssam_cplt_submith]hssam_cplt_submit}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h2(struct ssam_cplt *cplt, struct work_struct *work)h](j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_cplt_submitasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcplth]hcplt}(hj!hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct work_struct *workh](j#)}(hj&h]hstruct}(hj:hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj6ubj5)}(h h]h }(hjGhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj6ubh)}(hhh]jL)}(h work_structh]h work_struct}(hjXhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjUubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjZmodnameN classnameNjHjK)}jN]jc.ssam_cplt_submitasbuh1hhj6ubj5)}(h h]h }(hjvhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj6ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj6ubjL)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h6Submit a work item to the completion system workqueue.h]h6Submit a work item to the completion system workqueue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h|**Parameters** ``struct ssam_cplt *cplt`` The completion system. ``struct work_struct *work`` The work item to submit.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h2``struct ssam_cplt *cplt`` The completion system. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe completion system.h]hThe completion system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h5``struct work_struct *work`` The work item to submit.h](j)}(h``struct work_struct *work``h]j)}(hj5h]hstruct work_struct *work}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj/ubj)}(hhh]h)}(hThe work item to submit.h]hThe work item to submit.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjKubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_cplt_submit_event (C function)c.ssam_cplt_submit_eventhNtauh1jhjphhhNhNubj)}(hhh](j)}(hQint ssam_cplt_submit_event (struct ssam_cplt *cplt, struct ssam_event_item *item)h]j)}(hPint ssam_cplt_submit_event(struct ssam_cplt *cplt, struct ssam_event_item *item)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_cplt_submit_eventh]jL)}(hssam_cplt_submit_eventh]hssam_cplt_submit_event}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h6(struct ssam_cplt *cplt, struct ssam_event_item *item)h](j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_cplt_submit_eventasbuh1hhjubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcplth]hcplt}(hj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_item *itemh](j#)}(hj&h]hstruct}(hj>hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj:ubj5)}(h h]h }(hjKhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:ubh)}(hhh]jL)}(hssam_event_itemh]hssam_event_item}(hj\hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjYubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj^modnameN classnameNjHjK)}jN]jc.ssam_cplt_submit_eventasbuh1hhj:ubj5)}(h h]h }(hjzhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:ubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj:ubjL)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h)Submit an event to the completion system.h]h)Submit an event to the completion system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_cplt *cplt`` The completion system. ``struct ssam_event_item *item`` The event item to submit. **Description** Submits the event to the completion system by queuing it on the event item queue and queuing the respective event queue work item on the completion workqueue, which will eventually complete the event. **Return** Returns zero on success, ``-EINVAL`` if there is no event queue that can handle the given event item.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h2``struct ssam_cplt *cplt`` The completion system. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe completion system.h]hThe completion system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h;``struct ssam_event_item *item`` The event item to submit. h](j)}(h ``struct ssam_event_item *item``h]j)}(hj9h]hstruct ssam_event_item *item}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj3ubj)}(hhh]h)}(hThe event item to submit.h]hThe event item to submit.}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjth]h Description}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hSubmits the event to the completion system by queuing it on the event item queue and queuing the respective event queue work item on the completion workqueue, which will eventually complete the event.h]hSubmits the event to the completion system by queuing it on the event item queue and queuing the respective event queue work item on the completion workqueue, which will eventually complete the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(heReturns zero on success, ``-EINVAL`` if there is no event queue that can handle the given event item.h](hReturns zero on success, }(hjhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhA if there is no event queue that can handle the given event item.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cplt_flush (C function)c.ssam_cplt_flushhNtauh1jhjphhhNhNubj)}(hhh](j)}(h-void ssam_cplt_flush (struct ssam_cplt *cplt)h]j)}(h,void ssam_cplt_flush(struct ssam_cplt *cplt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_cplt_flushh]jL)}(hssam_cplt_flushh]hssam_cplt_flush}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_cplt *cplt)h]j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj+ubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjMhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjOmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_cplt_flushasbuh1hhj+ubj5)}(h h]h }(hjmhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+ubje)}(hjhh]h*}(hj{hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj+ubjL)}(hcplth]hcplt}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj'ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(hFlush the completion system.h]hFlush the completion system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_cplt *cplt`` The completion system. **Description** Flush the completion system by waiting until all currently submitted work items have been completed. This operation is only intended to, during normal operation prior to shutdown, try to complete most events and requests to get them out of the system while the system is still fully operational. It does not aim to provide any guarantee that all of them have been handled. **Note** This function does not guarantee that all events will have been handled once this call terminates. In case of a larger number of to-be-completed events, the event queue work function may re-schedule its work item, which this flush operation will ignore.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]j)}(h2``struct ssam_cplt *cplt`` The completion system. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe completion system.h]hThe completion system.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj.h]h Description}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hdFlush the completion system by waiting until all currently submitted work items have been completed.h]hdFlush the completion system by waiting until all currently submitted work items have been completed.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hXThis operation is only intended to, during normal operation prior to shutdown, try to complete most events and requests to get them out of the system while the system is still fully operational. It does not aim to provide any guarantee that all of them have been handled.h]hXThis operation is only intended to, during normal operation prior to shutdown, try to complete most events and requests to get them out of the system while the system is still fully operational. It does not aim to provide any guarantee that all of them have been handled.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h**Note**h]j)}(hjdh]hNote}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hThis function does not guarantee that all events will have been handled once this call terminates. In case of a larger number of to-be-completed events, the event queue work function may re-schedule its work item, which this flush operation will ignore.h]hThis function does not guarantee that all events will have been handled once this call terminates. In case of a larger number of to-be-completed events, the event queue work function may re-schedule its work item, which this flush operation will ignore.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_event_queue_init (C function)c.ssam_event_queue_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(hQvoid ssam_event_queue_init (struct ssam_cplt *cplt, struct ssam_event_queue *evq)h]j)}(hPvoid ssam_event_queue_init(struct ssam_cplt *cplt, struct ssam_event_queue *evq)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM'ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM'ubjF)}(hssam_event_queue_inith]jL)}(hssam_event_queue_inith]hssam_event_queue_init}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM'ubj)}(h6(struct ssam_cplt *cplt, struct ssam_event_queue *evq)h](j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_event_queue_initasbuh1hhjubj5)}(h h]h }(hj$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj2hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcplth]hcplt}(hj?hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_queue *evqh](j#)}(hj&h]hstruct}(hjXhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjTubj5)}(h h]h }(hjehhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjTubh)}(hhh]jL)}(hssam_event_queueh]hssam_event_queue}(hjvhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjsubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjxmodnameN classnameNjHjK)}jN]j c.ssam_event_queue_initasbuh1hhjTubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjTubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjTubjL)}(hevqh]hevq}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjTubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM'ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM'ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM'hjhhubjx)}(hhh]h)}(hInitialize an event queue.h]hInitialize an event queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM#hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_cplt *cplt`` The completion system on which the queue resides. ``struct ssam_event_queue *evq`` The event queue to initialize.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM'hjubj)}(hhh](j)}(hM``struct ssam_cplt *cplt`` The completion system on which the queue resides. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM$hjubj)}(hhh]h)}(h1The completion system on which the queue resides.h]h1The completion system on which the queue resides.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM$hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM$hjubj)}(h?``struct ssam_event_queue *evq`` The event queue to initialize.h](j)}(h ``struct ssam_event_queue *evq``h]j)}(hjSh]hstruct ssam_event_queue *evq}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM&hjMubj)}(hhh]h)}(hThe event queue to initialize.h]hThe event queue to initialize.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM%hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM&hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cplt_init (C function)c.ssam_cplt_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(h?int ssam_cplt_init (struct ssam_cplt *cplt, struct device *dev)h]j)}(h>int ssam_cplt_init(struct ssam_cplt *cplt, struct device *dev)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM5ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM5ubjF)}(hssam_cplt_inith]jL)}(hssam_cplt_inith]hssam_cplt_init}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM5ubj)}(h,(struct ssam_cplt *cplt, struct device *dev)h](j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_cplt_initasbuh1hhjubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj6hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcplth]hcplt}(hjChhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct device *devh](j#)}(hj&h]hstruct}(hj\hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjXubj5)}(h h]h }(hjihhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjXubh)}(hhh]jL)}(hdeviceh]hdevice}(hjzhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjwubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj|modnameN classnameNjHjK)}jN]j$c.ssam_cplt_initasbuh1hhjXubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjXubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjXubjL)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjXubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM5ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM5hjhhubjx)}(hhh]h)}(hInitialize completion system.h]hInitialize completion system.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM1hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_cplt *cplt`` The completion system to initialize. ``struct device *dev`` The device used for logging.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM5hjubj)}(hhh](j)}(h@``struct ssam_cplt *cplt`` The completion system to initialize. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM2hjubj)}(hhh]h)}(h$The completion system to initialize.h]h$The completion system to initialize.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM2hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM2hjubj)}(h3``struct device *dev`` The device used for logging.h](j)}(h``struct device *dev``h]j)}(hjWh]hstruct device *dev}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM4hjQubj)}(hhh]h)}(hThe device used for logging.h]hThe device used for logging.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM3hjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhM4hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_cplt_destroy (C function)c.ssam_cplt_destroyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h/void ssam_cplt_destroy (struct ssam_cplt *cplt)h]j)}(h.void ssam_cplt_destroy(struct ssam_cplt *cplt)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMUubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMUubjF)}(hssam_cplt_destroyh]jL)}(hssam_cplt_destroyh]hssam_cplt_destroy}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMUubj)}(h(struct ssam_cplt *cplt)h]j )}(hstruct ssam_cplt *cplth](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_cplth]h ssam_cplt}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_cplt_destroyasbuh1hhjubj5)}(h h]h }(hj,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj:hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcplth]hcplt}(hjGhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMUubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMUubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMUhjhhubjx)}(hhh]h)}(h#Deinitialize the completion system.h]h#Deinitialize the completion system.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMOhjnhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_cplt *cplt`` The completion system to deinitialize. **Description** Deinitialize the given completion system and ensure that all pending, i.e. yet-to-be-completed, event items and requests have been handled.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMShjubj)}(hhh]j)}(hB``struct ssam_cplt *cplt`` The completion system to deinitialize. h](j)}(h``struct ssam_cplt *cplt``h]j)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMPhjubj)}(hhh]h)}(h&The completion system to deinitialize.h]h&The completion system to deinitialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMPhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMRhjubh)}(hDeinitialize the given completion system and ensure that all pending, i.e. yet-to-be-completed, event items and requests have been handled.h]hDeinitialize the given completion system and ensure that all pending, i.e. yet-to-be-completed, event items and requests have been handled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_controller_lock (C function)c.ssam_controller_lockhNtauh1jhjphhhNhNubj)}(hhh](j)}(h5void ssam_controller_lock (struct ssam_controller *c)h]j)}(h4void ssam_controller_lock(struct ssam_controller *c)h](j)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjAhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj.hhhj@hMubjF)}(hssam_controller_lockh]jL)}(hssam_controller_lockh]hssam_controller_lock}(hjShhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjOubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj.hhhj@hMubj)}(h(struct ssam_controller *c)h]j )}(hstruct ssam_controller *ch](j#)}(hj&h]hstruct}(hjohhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjkubj5)}(h h]h }(hj|hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjkubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjUsbc.ssam_controller_lockasbuh1hhjkubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjkubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjkubjL)}(hjh]hc}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjkubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjgubah}(h]h ]h"]h$]h&]hhuh1jhj.hhhj@hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj*hhhj@hMubah}(h]j%ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj@hMhj'hhubjx)}(hhh]h)}(h!Acquire the main controller lock.h]h!Acquire the main controller lock.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhj'hhhj@hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjphNhNubj)}(hX\**Parameters** ``struct ssam_controller *c`` The controller to lock. **Description** This lock must be held for any state transitions, including transition to suspend/resumed states and during shutdown. See ssam_controller_statelock() for more details on controller locking. See ssam_controller_unlock() for the corresponding unlock function.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj)}(hhh]j)}(h6``struct ssam_controller *c`` The controller to lock. h](j)}(h``struct ssam_controller *c``h]j)}(hj2h]hstruct ssam_controller *c}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj,ubj)}(hhh]h)}(hThe controller to lock.h]hThe controller to lock.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjHubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhMhj)ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjmh]h Description}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(hThis lock must be held for any state transitions, including transition to suspend/resumed states and during shutdown. See ssam_controller_statelock() for more details on controller locking.h]hThis lock must be held for any state transitions, including transition to suspend/resumed states and during shutdown. See ssam_controller_statelock() for more details on controller locking.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(hCSee ssam_controller_unlock() for the corresponding unlock function.h]hCSee ssam_controller_unlock() for the corresponding unlock function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 0ssam_controller_caps_load_from_acpi (C function)%c.ssam_controller_caps_load_from_acpihNtauh1jhjphhhNhNubj)}(hhh](j)}(h_int ssam_controller_caps_load_from_acpi (acpi_handle handle, struct ssam_controller_caps *caps)h]j)}(h^int ssam_controller_caps_load_from_acpi(acpi_handle handle, struct ssam_controller_caps *caps)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMKubjF)}(h#ssam_controller_caps_load_from_acpih]jL)}(h#ssam_controller_caps_load_from_acpih]h#ssam_controller_caps_load_from_acpi}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMKubj)}(h7(acpi_handle handle, struct ssam_controller_caps *caps)h](j )}(hacpi_handle handleh](h)}(hhh]jL)}(h acpi_handleh]h acpi_handle}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsb%c.ssam_controller_caps_load_from_acpiasbuh1hhjubj5)}(h h]h }(hj!hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hhandleh]hhandle}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h!struct ssam_controller_caps *capsh](j#)}(hj&h]hstruct}(hjHhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjDubj5)}(h h]h }(hjUhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubh)}(hhh]jL)}(hssam_controller_capsh]hssam_controller_caps}(hjfhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjcubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjhmodnameN classnameNjHjK)}jN]j%c.ssam_controller_caps_load_from_acpiasbuh1hhjDubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjDubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjDubjL)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMKhjhhubjx)}(hhh]h)}(h,Load controller capabilities from ACPI _DSM.h]h,Load controller capabilities from ACPI _DSM.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM@hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``acpi_handle handle`` The handle of the ACPI controller/SSH device. ``struct ssam_controller_caps *caps`` Where to store the capabilities in. **Description** Initializes the given controller capabilities with default values, then checks and, if the respective _DSM functions are available, loads the actual capabilities from the _DSM. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMDhjubj)}(hhh](j)}(hE``acpi_handle handle`` The handle of the ACPI controller/SSH device. h](j)}(h``acpi_handle handle``h]j)}(hj h]hacpi_handle handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMBhjubj)}(hhh]h)}(h-The handle of the ACPI controller/SSH device.h]h-The handle of the ACPI controller/SSH device.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMBhjubj)}(hJ``struct ssam_controller_caps *caps`` Where to store the capabilities in. h](j)}(h%``struct ssam_controller_caps *caps``h]j)}(hjCh]h!struct ssam_controller_caps *caps}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMChj=ubj)}(hhh]h)}(h#Where to store the capabilities in.h]h#Where to store the capabilities in.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMChjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhMChjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj~h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjubh)}(hInitializes the given controller capabilities with default values, then checks and, if the respective _DSM functions are available, loads the actual capabilities from the _DSM.h]hInitializes the given controller capabilities with default values, then checks and, if the respective _DSM functions are available, loads the actual capabilities from the _DSM.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMIhjubh)}(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/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMIhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j .ssam_controller_caps_load_from_of (C function)#c.ssam_controller_caps_load_from_ofhNtauh1jhjphhhNhNubj)}(hhh](j)}(h]int ssam_controller_caps_load_from_of (struct device *dev, struct ssam_controller_caps *caps)h]j)}(h\int ssam_controller_caps_load_from_of(struct device *dev, struct ssam_controller_caps *caps)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(h!ssam_controller_caps_load_from_ofh]jL)}(h!ssam_controller_caps_load_from_ofh]h!ssam_controller_caps_load_from_of}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h7(struct device *dev, struct ssam_controller_caps *caps)h](j )}(hstruct device *devh](j#)}(hj&h]hstruct}(hj'hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj#ubj5)}(h h]h }(hj4hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj#ubh)}(hhh]jL)}(hdeviceh]hdevice}(hjEhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjBubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjGmodnameN classnameNjHjK)}jN]jQ)}jDj sb#c.ssam_controller_caps_load_from_ofasbuh1hhj#ubj5)}(h h]h }(hjehhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj#ubje)}(hjhh]h*}(hjshhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj#ubjL)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h!struct ssam_controller_caps *capsh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controller_capsh]hssam_controller_caps}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]ja#c.ssam_controller_caps_load_from_ofasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h(Load controller capabilities from OF/DT.h]h(Load controller capabilities from OF/DT.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMzhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct device *dev`` A pointer to the controller device ``struct ssam_controller_caps *caps`` Where to store the capabilities in. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM~hj6ubj)}(hhh](j)}(h:``struct device *dev`` A pointer to the controller device h](j)}(h``struct device *dev``h]j)}(hj[h]hstruct device *dev}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM{hjUubj)}(hhh]h)}(h"A pointer to the controller deviceh]h"A pointer to the controller device}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM{hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphM{hjRubj)}(hJ``struct ssam_controller_caps *caps`` Where to store the capabilities in. h](j)}(h%``struct ssam_controller_caps *caps``h]j)}(hjh]h!struct ssam_controller_caps *caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM|hjubj)}(hhh]h)}(h#Where to store the capabilities in.h]h#Where to store the capabilities in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM|hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM~hj6ubh)}(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/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM~hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_controller_caps_load (C function)c.ssam_controller_caps_loadhNtauh1jhjphhhNhNubj)}(hhh](j)}(hUint ssam_controller_caps_load (struct device *dev, struct ssam_controller_caps *caps)h]j)}(hTint ssam_controller_caps_load(struct device *dev, struct ssam_controller_caps *caps)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hj#hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj"hMubjF)}(hssam_controller_caps_loadh]jL)}(hssam_controller_caps_loadh]hssam_controller_caps_load}(hj5hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj1ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj"hMubj)}(h7(struct device *dev, struct ssam_controller_caps *caps)h](j )}(hstruct device *devh](j#)}(hj&h]hstruct}(hjQhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjMubj5)}(h h]h }(hj^hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjMubh)}(hhh]jL)}(hdeviceh]hdevice}(hjohhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjlubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjqmodnameN classnameNjHjK)}jN]jQ)}jDj7sbc.ssam_controller_caps_loadasbuh1hhjMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjMubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjMubjL)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjMubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjIubj )}(h!struct ssam_controller_caps *capsh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controller_capsh]hssam_controller_caps}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_controller_caps_loadasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjIubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj"hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj hhhj"hMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhj"hMhj hhubjx)}(hhh]h)}(hLoad controller capabilitiesh]hLoad controller capabilities}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jwhj hhhj"hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj\jj\jjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct device *dev`` A pointer to the controller device ``struct ssam_controller_caps *caps`` Where to store the capabilities in. **Return** Returns zero on success, a negative error code on failure.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj`ubj)}(hhh](j)}(h:``struct device *dev`` A pointer to the controller device h](j)}(h``struct device *dev``h]j)}(hjh]hstruct device *dev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h"A pointer to the controller deviceh]h"A pointer to the controller device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubj)}(hJ``struct ssam_controller_caps *caps`` Where to store the capabilities in. h](j)}(h%``struct ssam_controller_caps *caps``h]j)}(hjh]h!struct ssam_controller_caps *caps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h#Where to store the capabilities in.h]h#Where to store the capabilities in.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj`ubh)}(h:Returns zero on success, a negative error code on failure.h]h:Returns zero on success, a negative error code on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j !ssam_controller_init (C function)c.ssam_controller_inithNtauh1jhjphhhNhNubj)}(hhh](j)}(hUint ssam_controller_init (struct ssam_controller *ctrl, struct serdev_device *serdev)h]j)}(hTint ssam_controller_init(struct ssam_controller *ctrl, struct serdev_device *serdev)h](j)}(hinth]hint}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjMhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj:hhhjLhMubjF)}(hssam_controller_inith]jL)}(hssam_controller_inith]hssam_controller_init}(hj_hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj[ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj:hhhjLhMubj)}(h<(struct ssam_controller *ctrl, struct serdev_device *serdev)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hj{hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjwubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjwubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjasbc.ssam_controller_initasbuh1hhjwubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjwubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjwubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjsubj )}(hstruct serdev_device *serdevh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h serdev_deviceh]h serdev_device}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jc.ssam_controller_initasbuh1hhjubj5)}(h h]h }(hj)hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj7hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hserdevh]hserdev}(hjDhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjsubeh}(h]h ]h"]h$]h&]hhuh1jhj:hhhjLhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj6hhhjLhMubah}(h]j1ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjLhMhj3hhubjx)}(hhh]h)}(hInitialize SSAM controller.h]hInitialize SSAM controller.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjkhhubah}(h]h ]h"]h$]h&]uh1jwhj3hhhjLhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller to initialize. ``struct serdev_device *serdev`` The serial device representing the underlying data transport. **Description** Initializes the given controller. Does neither start receiver nor transmitter threads. After this call, the controller has to be hooked up to the serdev core separately via :c:type:`struct serdev_device_ops `, relaying calls to ssam_controller_receive_buf() and ssam_controller_write_wakeup(). Once the controller has been hooked up, transmitter and receiver threads may be started via ssam_controller_start(). These setup steps need to be completed before controller can be used for requests.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h?``struct ssam_controller *ctrl`` The controller to initialize. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe controller to initialize.h]hThe controller to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h_``struct serdev_device *serdev`` The serial device representing the underlying data transport. h](j)}(h ``struct serdev_device *serdev``h]j)}(hjh]hstruct serdev_device *serdev}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h=The serial device representing the underlying data transport.h]h=The serial device representing the underlying data transport.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hXInitializes the given controller. Does neither start receiver nor transmitter threads. After this call, the controller has to be hooked up to the serdev core separately via :c:type:`struct serdev_device_ops `, relaying calls to ssam_controller_receive_buf() and ssam_controller_write_wakeup(). Once the controller has been hooked up, transmitter and receiver threads may be started via ssam_controller_start(). These setup steps need to be completed before controller can be used for requests.h](hInitializes the given controller. Does neither start receiver nor transmitter threads. After this call, the controller has to be hooked up to the serdev core separately via }(hj9hhhNhNubh)}(h6:c:type:`struct serdev_device_ops `h]j)}(hjCh]hstruct serdev_device_ops}(hjEhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ:serdev_device_opsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj9ubhX, relaying calls to ssam_controller_receive_buf() and ssam_controller_write_wakeup(). Once the controller has been hooked up, transmitter and receiver threads may be started via ssam_controller_start(). These setup steps need to be completed before controller can be used for requests.}(hj9hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`hMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_controller_start (C function)c.ssam_controller_starthNtauh1jhjphhhNhNubj)}(hhh](j)}(h8int ssam_controller_start (struct ssam_controller *ctrl)h]j)}(h7int ssam_controller_start(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_controller_starth]jL)}(hssam_controller_starth]hssam_controller_start}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_controller_startasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hj!hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]j~ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h=Start the receiver and transmitter threads of the controller.h]h=Start the receiver and transmitter threads of the controller.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjHhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjcjjcjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller. **Note** When this function is called, the controller should be properly hooked up to the serdev core via :c:type:`struct serdev_device_ops `. Please refer to ssam_controller_init() for more details on controller initialization. **Description** This function must be called with the main controller lock held (i.e. by calling ssam_controller_lock()).h](h)}(h**Parameters**h]j)}(hjmh]h Parameters}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjgubj)}(hhh]j)}(h1``struct ssam_controller *ctrl`` The controller. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe controller.h]hThe controller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjgubh)}(hWhen this function is called, the controller should be properly hooked up to the serdev core via :c:type:`struct serdev_device_ops `. Please refer to ssam_controller_init() for more details on controller initialization.h](haWhen this function is called, the controller should be properly hooked up to the serdev core via }(hjhhhNhNubh)}(h6:c:type:`struct serdev_device_ops `h]j)}(hjh]hstruct serdev_device_ops}(hjhhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ:serdev_device_opsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubhW. Please refer to ssam_controller_init() for more details on controller initialization.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjgubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjgubh)}(hiThis function must be called with the main controller lock held (i.e. by calling ssam_controller_lock()).h]hiThis function must be called with the main controller lock held (i.e. by calling ssam_controller_lock()).}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j %ssam_controller_shutdown (C function)c.ssam_controller_shutdownhNtauh1jhjphhhNhNubj)}(hhh](j)}(h``flags`` Flags determining how notifications are being sent. h](j)}(h ``flags``h]j)}(hjh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMDhj ubj)}(hhh]h)}(h3Flags determining how notifications are being sent.h]h3Flags determining how notifications are being sent.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMDhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMDhjubj)}(hH``request_id`` The request ID that is used to send these notifications. h](j)}(h``request_id``h]j)}(hjKh]h request_id}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjEubj)}(hhh]h)}(h8The request ID that is used to send these notifications.h]h8The request ID that is used to send these notifications.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMEhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMEhjubj)}(hm``instance_id`` The specific instance in the given target category for which notifications should be enabled.h](j)}(h``instance_id``h]j)}(hjh]h instance_id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMFhj~ubj)}(hhh]h)}(h]The specific instance in the given target category for which notifications should be enabled.h]h]The specific instance in the given target category for which notifications should be enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_ssh_event_enable (C function)c.ssam_ssh_event_enablehNtauh1jhjphhhNhNubj)}(hhh](j)}(h{int ssam_ssh_event_enable (struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h]j)}(hzint ssam_ssh_event_enable(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/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_ssh_event_enableh]jL)}(hssam_ssh_event_enableh]hssam_ssh_event_enable}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj8hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj5ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj:modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_ssh_event_enableasbuh1hhjubj5)}(h h]h }(hjXhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjfhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjshhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_registry regh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jTc.ssam_ssh_event_enableasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_id idh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(h ssam_event_idh]h ssam_event_id}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jTc.ssam_ssh_event_enableasbuh1hhjubj5)}(h h]h }(hj+hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hidh]hid}(hj9hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu8 flagsh](h)}(hhh]jL)}(hu8h]hu8}(hjUhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjRubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjWmodnameN classnameNjHjK)}jN]jTc.ssam_ssh_event_enableasbuh1hhjNubj5)}(h h]h }(hjshhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjNubjL)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(hEnable SSH event.h]hEnable SSH event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMyhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller for which to enable the event. ``struct ssam_event_registry reg`` The event registry describing what request to use for enabling and disabling the event. ``struct ssam_event_id id`` The event identifier. ``u8 flags`` The event flags. **Description** Enables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already enabled, the EC will ignore this request. **Return** Returns the status of the executed SAM request (zero on success and negative on direct failure) or ``-EPROTO`` if the request response indicates a failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM}hjubj)}(hhh](j)}(hO``struct ssam_controller *ctrl`` The controller for which to enable the event. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMzhjubj)}(hhh]h)}(h-The controller for which to enable the event.h]h-The controller for which to enable the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMzhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMzhjubj)}(h{``struct ssam_event_registry reg`` The event registry describing what request to use for enabling and disabling the event. h](j)}(h"``struct ssam_event_registry reg``h]j)}(hj%h]hstruct ssam_event_registry reg}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM|hjubj)}(hhh]h)}(hWThe event registry describing what request to use for enabling and disabling the event.h]hWThe event registry describing what request to use for enabling and disabling the event.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM{hj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj:hM|hjubj)}(h2``struct ssam_event_id id`` The event identifier. h](j)}(h``struct ssam_event_id id``h]j)}(hj_h]hstruct ssam_event_id id}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM}hjYubj)}(hhh]h)}(hThe event identifier.h]hThe event identifier.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM}hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM}hjubj)}(h``u8 flags`` The event flags. h](j)}(h ``u8 flags``h]j)}(hjh]hu8 flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM~hjubj)}(hhh]h)}(hThe event flags.h]hThe event flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hEnables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already enabled, the EC will ignore this request.h]hEnables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already enabled, the EC will ignore this request.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hReturns the status of the executed SAM request (zero on success and negative on direct failure) or ``-EPROTO`` if the request response indicates a failure.h](hcReturns the status of the executed SAM request (zero on success and negative on direct failure) or }(hjhhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- if the request response indicates a failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_ssh_event_disable (C function)c.ssam_ssh_event_disablehNtauh1jhjphhhNhNubj)}(hhh](j)}(h|int ssam_ssh_event_disable (struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h]j)}(h{int ssam_ssh_event_disable(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hj`hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjMhhhj_hMubjF)}(hssam_ssh_event_disableh]jL)}(hssam_ssh_event_disableh]hssam_ssh_event_disable}(hjrhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjnubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjMhhhj_hMubj)}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjtsbc.ssam_ssh_event_disableasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_registry regh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jc.ssam_ssh_event_disableasbuh1hhjubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hregh]hreg}(hjJhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_event_id idh](j#)}(hj&h]hstruct}(hjchhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj_ubj5)}(h h]h }(hjphhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj_ubh)}(hhh]jL)}(h ssam_event_idh]h ssam_event_id}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj~ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_ssh_event_disableasbuh1hhj_ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj_ubjL)}(hidh]hid}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hu8 flagsh](h)}(hhh]jL)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jc.ssam_ssh_event_disableasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjMhhhj_hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjIhhhj_hMubah}(h]jDah ](jojpeh"]h$]h&]jtju)jvhuh1jhj_hMhjFhhubjx)}(hhh]h)}(hDisable SSH event.h]hDisable SSH event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjFhhhj_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjZjuh1jhhhjphNhNubj)}(hX:**Parameters** ``struct ssam_controller *ctrl`` The controller for which to disable the event. ``struct ssam_event_registry reg`` The event registry describing what request to use for enabling and disabling the event (must be same as used when enabling the event). ``struct ssam_event_id id`` The event identifier. ``u8 flags`` The event flags (likely ignored for disabling of events). **Description** Disables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already disabled, the EC will ignore this request. **Return** Returns the status of the executed SAM request (zero on success and negative on direct failure) or ``-EPROTO`` if the request response indicates a failure.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj;ubj)}(hhh](j)}(hP``struct ssam_controller *ctrl`` The controller for which to disable the event. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hj`h]hstruct ssam_controller *ctrl}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjZubj)}(hhh]h)}(h.The controller for which to disable the event.h]h.The controller for which to disable the event.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubj)}(h``struct ssam_event_registry reg`` The event registry describing what request to use for enabling and disabling the event (must be same as used when enabling the event). h](j)}(h"``struct ssam_event_registry reg``h]j)}(hjh]hstruct ssam_event_registry reg}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe event registry describing what request to use for enabling and disabling the event (must be same as used when enabling the event).h]hThe event registry describing what request to use for enabling and disabling the event (must be same as used when enabling the event).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubj)}(h2``struct ssam_event_id id`` The event identifier. h](j)}(h``struct ssam_event_id id``h]j)}(hjh]hstruct ssam_event_id id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe event identifier.h]hThe event identifier.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjWubj)}(hG``u8 flags`` The event flags (likely ignored for disabling of events). h](j)}(h ``u8 flags``h]j)}(hj h]hu8 flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h9The event flags (likely ignored for disabling of events).h]h9The event flags (likely ignored for disabling of events).}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hMhj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hMhjWubeh}(h]h ]h"]h$]h&]uh1jhj;ubh)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj;ubh)}(hDisables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already disabled, the EC will ignore this request.h]hDisables the specified event on the EC. This function does not manage reference counting of enabled events and is basically only a wrapper for the raw EC request. If the specified event is already disabled, the EC will ignore this request.}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj;ubh)}(h **Return**h]j)}(hjnh]hReturn}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj;ubh)}(hReturns the status of the executed SAM request (zero on success and negative on direct failure) or ``-EPROTO`` if the request response indicates a failure.h](hcReturns the status of the executed SAM request (zero on success and negative on direct failure) or }(hjhhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh- if the request response indicates a failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_get_firmware_version (C function)c.ssam_get_firmware_versionhNtauh1jhjphhhNhNubj)}(hhh](j)}(hJint ssam_get_firmware_version (struct ssam_controller *ctrl, u32 *version)h]j)}(hIint ssam_get_firmware_version(struct ssam_controller *ctrl, u32 *version)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_get_firmware_versionh]jL)}(hssam_get_firmware_versionh]hssam_get_firmware_version}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h,(struct ssam_controller *ctrl, u32 *version)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj"modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_get_firmware_versionasbuh1hhjubj5)}(h h]h }(hj@hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjNhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hj[hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(h u32 *versionh](h)}(hhh]jL)}(hu32h]hu32}(hjwhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjymodnameN classnameNjHjK)}jN]j<c.ssam_get_firmware_versionasbuh1hhjpubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjpubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjpubjL)}(hversionh]hversion}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjpubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h Get the SAM/EC firmware version.h]h Get the SAM/EC firmware version.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_controller *ctrl`` The controller. ``u32 *version`` Where to store the version number. **Return** Returns zero on success or the status of the executed SAM request if that request failed.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh](j)}(h1``struct ssam_controller *ctrl`` The controller. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe controller.h]hThe controller.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubj)}(h4``u32 *version`` Where to store the version number. h](j)}(h``u32 *version``h]j)}(hjTh]h u32 *version}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjNubj)}(hhh]h)}(h"Where to store the version number.h]h"Where to store the version number.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hYReturns zero on success or the status of the executed SAM request if that request failed.h]hYReturns zero on success or the status of the executed SAM request if that request failed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j (ssam_ctrl_notif_display_off (C function)c.ssam_ctrl_notif_display_offhNtauh1jhjphhhNhNubj)}(hhh](j)}(h>int ssam_ctrl_notif_display_off (struct ssam_controller *ctrl)h]j)}(h=int ssam_ctrl_notif_display_off(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMubjF)}(hssam_ctrl_notif_display_offh]jL)}(hssam_ctrl_notif_display_offh]hssam_ctrl_notif_display_off}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj1modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_ctrl_notif_display_offasbuh1hhj ubj5)}(h h]h }(hjOhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hj]hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hctrlh]hctrl}(hjjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMhjhhubjx)}(hhh]h)}(h/Notify EC that the display has been turned off.h]h/Notify EC that the display has been turned off.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller. **Description** Notify the EC that the display has been turned off and the driver may enter a lower-power state. This will prevent events from being sent directly. Rather, the EC signals an event by pulling the wakeup GPIO high for as long as there are pending events. The events then need to be manually released, one by one, via the GPIO callback request. All pending events accumulated during this state can also be released by issuing the display-on notification, e.g. via ssam_ctrl_notif_display_on(), which will also reset the GPIO. On some devices, specifically ones with an integrated keyboard, the keyboard backlight will be turned off by this call. This function will only send the display-off notification command if display notifications are supported by the EC. Currently all known devices support these notifications. Use ssam_ctrl_notif_display_on() to reverse the effects of this function. **Return** Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]j)}(h1``struct ssam_controller *ctrl`` The controller. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hThe controller.h]hThe controller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hX Notify the EC that the display has been turned off and the driver may enter a lower-power state. This will prevent events from being sent directly. Rather, the EC signals an event by pulling the wakeup GPIO high for as long as there are pending events. The events then need to be manually released, one by one, via the GPIO callback request. All pending events accumulated during this state can also be released by issuing the display-on notification, e.g. via ssam_ctrl_notif_display_on(), which will also reset the GPIO.h]hX Notify the EC that the display has been turned off and the driver may enter a lower-power state. This will prevent events from being sent directly. Rather, the EC signals an event by pulling the wakeup GPIO high for as long as there are pending events. The events then need to be manually released, one by one, via the GPIO callback request. All pending events accumulated during this state can also be released by issuing the display-on notification, e.g. via ssam_ctrl_notif_display_on(), which will also reset the GPIO.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hwOn some devices, specifically ones with an integrated keyboard, the keyboard backlight will be turned off by this call.h]hwOn some devices, specifically ones with an integrated keyboard, the keyboard backlight will be turned off by this call.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hThis function will only send the display-off notification command if display notifications are supported by the EC. Currently all known devices support these notifications.h]hThis function will only send the display-off notification command if display notifications are supported by the EC. Currently all known devices support these notifications.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hIUse ssam_ctrl_notif_display_on() to reverse the effects of this function.h]hIUse ssam_ctrl_notif_display_on() to reverse the effects of this function.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(h **Return**h]j)}(hjdh]hReturn}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubh)}(hReturns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h~Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or }(hjzhhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh- if an unexpected response has been received.}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'ssam_ctrl_notif_display_on (C function)c.ssam_ctrl_notif_display_onhNtauh1jhjphhhNhNubj)}(hhh](j)}(h=int ssam_ctrl_notif_display_on (struct ssam_controller *ctrl)h]j)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hReturns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h~Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or }(hjRhhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh- if an unexpected response has been received.}(hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $ssam_ctrl_notif_d0_exit (C function)c.ssam_ctrl_notif_d0_exithNtauh1jhjphhhNhNubj)}(hhh](j)}(h:int ssam_ctrl_notif_d0_exit (struct ssam_controller *ctrl)h]j)}(h9int ssam_ctrl_notif_d0_exit(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMKubjF)}(hssam_ctrl_notif_d0_exith]jL)}(hssam_ctrl_notif_d0_exith]hssam_ctrl_notif_d0_exit}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMKubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_ctrl_notif_d0_exitasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hj)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMKhjhhubjx)}(hhh]h)}(h:Notify EC that the driver/device exits the D0 power state.h]h:Notify EC that the driver/device exits the D0 power state.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM9hjPhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjkjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller **Description** Notifies the EC that the driver prepares to exit the D0 power state in favor of a lower-power state. Exact effects of this function related to the EC are currently unknown. This function will only send the D0-exit notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications. Use ssam_ctrl_notif_d0_entry() to reverse the effects of this function. **Return** Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h)}(h**Parameters**h]j)}(hjuh]h Parameters}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM=hjoubj)}(hhh]j)}(h0``struct ssam_controller *ctrl`` The controller h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM;hjubj)}(hhh]h)}(hThe controllerh]hThe controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjoubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM=hjoubh)}(hNotifies the EC that the driver prepares to exit the D0 power state in favor of a lower-power state. Exact effects of this function related to the EC are currently unknown.h]hNotifies the EC that the driver prepares to exit the D0 power state in favor of a lower-power state. Exact effects of this function related to the EC are currently unknown.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM=hjoubh)}(hThis function will only send the D0-exit notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications.h]hThis function will only send the D0-exit notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMAhjoubh)}(hGUse ssam_ctrl_notif_d0_entry() to reverse the effects of this function.h]hGUse ssam_ctrl_notif_d0_entry() to reverse the effects of this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjoubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMGhjoubh)}(hReturns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h~Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or }(hj*hhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh- if an unexpected response has been received.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMGhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j %ssam_ctrl_notif_d0_entry (C function)c.ssam_ctrl_notif_d0_entryhNtauh1jhjphhhNhNubj)}(hhh](j)}(h;int ssam_ctrl_notif_d0_entry (struct ssam_controller *ctrl)h]j)}(h:int ssam_ctrl_notif_d0_entry(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMuubj5)}(h h]h }(hjzhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjghhhjyhMuubjF)}(hssam_ctrl_notif_d0_entryh]jL)}(hssam_ctrl_notif_d0_entryh]hssam_ctrl_notif_d0_entry}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjghhhjyhMuubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_ctrl_notif_d0_entryasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjghhhjyhMuubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjchhhjyhMuubah}(h]j^ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjyhMuhj`hhubjx)}(hhh]h)}(h;Notify EC that the driver/device enters the D0 power state.h]h;Notify EC that the driver/device enters the D0 power state.}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMchj( hhubah}(h]h ]h"]h$]h&]uh1jwhj`hhhjyhMuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjC jjC jjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller **Description** Notifies the EC that the driver has exited a lower-power state and entered the D0 power state. Exact effects of this function related to the EC are currently unknown. This function will only send the D0-entry notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications. See ssam_ctrl_notif_d0_exit() for more details. **Return** Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h)}(h**Parameters**h]j)}(hjM h]h Parameters}(hjO hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMghjG ubj)}(hhh]j)}(h0``struct ssam_controller *ctrl`` The controller h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjl h]hstruct ssam_controller *ctrl}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMehjf ubj)}(hhh]h)}(hThe controllerh]hThe controller}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMehj ubah}(h]h ]h"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]uh1jhj hMehjc ubah}(h]h ]h"]h$]h&]uh1jhjG ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMghjG ubh)}(hNotifies the EC that the driver has exited a lower-power state and entered the D0 power state. Exact effects of this function related to the EC are currently unknown.h]hNotifies the EC that the driver has exited a lower-power state and entered the D0 power state. Exact effects of this function related to the EC are currently unknown.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMghjG ubh)}(hThis function will only send the D0-entry notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications.h]hThis function will only send the D0-entry notification command if D0-state notifications are supported by the EC. Only newer Surface generations support these notifications.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMkhjG ubh)}(h/See ssam_ctrl_notif_d0_exit() for more details.h]h/See ssam_ctrl_notif_d0_exit() for more details.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMohjG ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMqhjG ubh)}(hReturns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or ``-EPROTO`` if an unexpected response has been received.h](h~Returns zero on success or if no request has been executed, the status of the executed SAM request if that request failed, or }(hj hhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh- if an unexpected response has been received.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMqhjG ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $ssam_nf_refcount_enable (C function)c.ssam_nf_refcount_enablehNtauh1jhjphhhNhNubj)}(hhh](j)}(hjint ssam_nf_refcount_enable (struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags)h]j)}(hiint ssam_nf_refcount_enable(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags)h](j)}(hinth]hint}(hjC hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj? hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjR hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj? hhhjQ hMubjF)}(hssam_nf_refcount_enableh]jL)}(hssam_nf_refcount_enableh]hssam_nf_refcount_enable}(hjd hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj` ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj? hhhjQ hMubj)}(hN(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj| ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj| ubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jQ)}jDjf sbc.ssam_nf_refcount_enableasbuh1hhj| ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj| ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj| ubjL)}(hctrlh]hctrl}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj| ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjx ubj )}(h$struct ssam_nf_refcount_entry *entryh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]j c.ssam_nf_refcount_enableasbuh1hhj ubj5)}(h h]h }(hj. hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hj< hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hentryh]hentry}(hjI hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjx ubj )}(hu8 flagsh](h)}(hhh]jL)}(hu8h]hu8}(hje hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjb ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjg modnameN classnameNjHjK)}jN]j c.ssam_nf_refcount_enableasbuh1hhj^ ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj^ ubjL)}(hflagsh]hflags}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj^ ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjx ubeh}(h]h ]h"]h$]h&]hhuh1jhj? hhhjQ hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj; hhhjQ hMubah}(h]j6 ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjQ hMhj8 hhubjx)}(hhh]h)}(hJEnable event for reference count entry if it has not already been enabled.h]hJEnable event for reference count entry if it has not already been enabled.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj hhubah}(h]h ]h"]h$]h&]uh1jwhj8 hhhjQ hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjphNhNubj)}(hXy**Parameters** ``struct ssam_controller *ctrl`` The controller to enable the event on. ``struct ssam_nf_refcount_entry *entry`` The reference count entry for the event to be enabled. ``u8 flags`` The flags used for enabling the event on the EC. **Description** Enable the event associated with the given reference count entry if the reference count equals one, i.e. the event has not previously been enabled. If the event has already been enabled (i.e. reference count not equal to one), check that the flags used for enabling match and warn about this if they do not. This does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec(). **Note** ``nf->lock`` must be held when calling this function. **Return** Returns zero on success. If the event is enabled by this call, returns the status of the event-enable EC command.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj)}(hhh](j)}(hH``struct ssam_controller *ctrl`` The controller to enable the event on. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hj h]hstruct ssam_controller *ctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj)}(hhh]h)}(h&The controller to enable the event on.h]h&The controller to enable the event on.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h```struct ssam_nf_refcount_entry *entry`` The reference count entry for the event to be enabled. h](j)}(h(``struct ssam_nf_refcount_entry *entry``h]j)}(hj5 h]h$struct ssam_nf_refcount_entry *entry}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3 ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj/ ubj)}(hhh]h)}(h6The reference count entry for the event to be enabled.h]h6The reference count entry for the event to be enabled.}(hjN hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ hMhjK ubah}(h]h ]h"]h$]h&]uh1jhj/ ubeh}(h]h ]h"]h$]h&]uh1jhjJ hMhj ubj)}(h>``u8 flags`` The flags used for enabling the event on the EC. h](j)}(h ``u8 flags``h]j)}(hjn h]hu8 flags}(hjp hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjh ubj)}(hhh]h)}(h0The flags used for enabling the event on the EC.h]h0The flags used for enabling the event on the EC.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhjh ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(hX3Enable the event associated with the given reference count entry if the reference count equals one, i.e. the event has not previously been enabled. If the event has already been enabled (i.e. reference count not equal to one), check that the flags used for enabling match and warn about this if they do not.h]hX3Enable the event associated with the given reference count entry if the reference count equals one, i.e. the event has not previously been enabled. If the event has already been enabled (i.e. reference count not equal to one), check that the flags used for enabling match and warn about this if they do not.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(htThis does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec().h]htThis does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(h**Note**h]j)}(hj h]hNote}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh) must be held when calling this function.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubh)}(hqReturns zero on success. If the event is enabled by this call, returns the status of the event-enable EC command.h]hqReturns zero on success. If the event is enabled by this call, returns the status of the event-enable EC command.}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j *ssam_nf_refcount_disable_free (C function)c.ssam_nf_refcount_disable_freehNtauh1jhjphhhNhNubj)}(hhh](j)}(hyint ssam_nf_refcount_disable_free (struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)h]j)}(hxint ssam_nf_refcount_disable_free(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)h](j)}(hinth]hint}(hjY hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubj5)}(h h]h }(hjh hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjU hhhjg hMubjF)}(hssam_nf_refcount_disable_freeh]jL)}(hssam_nf_refcount_disable_freeh]hssam_nf_refcount_disable_free}(hjz hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjv ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjU hhhjg hMubj)}(hW(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)h](j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj modnameN classnameNjHjK)}jN]jQ)}jDj| sbc.ssam_nf_refcount_disable_freeasbuh1hhj ubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj ubje)}(hjhh]h*}(hj hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj ubjL)}(hctrlh]hctrl}(hj hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(h$struct ssam_nf_refcount_entry *entryh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hj&hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj#ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj(modnameN classnameNjHjK)}jN]j c.ssam_nf_refcount_disable_freeasbuh1hhjubj5)}(h h]h }(hjDhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjRhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hentryh]hentry}(hj_hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hu8 flagsh](h)}(hhh]jL)}(hu8h]hu8}(hj{hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjxubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj}modnameN classnameNjHjK)}jN]j c.ssam_nf_refcount_disable_freeasbuh1hhjtubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjtubjL)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjtubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hbool ech](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubjL)}(hech]hec}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1jhjU hhhjg hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjQ hhhjg hMubah}(h]jL ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjg hMhjN hhubjx)}(hhh]h)}(hcDisable event for reference count entry if it is no longer in use and free the corresponding entry.h]hcDisable event for reference count entry if it is no longer in use and free the corresponding entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjhhubah}(h]h ]h"]h$]h&]uh1jwhjN hhhjg hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller to disable the event on. ``struct ssam_nf_refcount_entry *entry`` The reference count entry for the event to be disabled. ``u8 flags`` The flags used for enabling the event on the EC. ``bool ec`` Flag specifying if the event should actually be disabled on the EC. **Description** If ``ec`` equals ``true`` and the reference count equals zero (i.e. the event is no longer requested by any client), the specified event will be disabled on the EC via the corresponding request. If ``ec`` equals ``false``, no request will be sent to the EC and the event can be considered in a detached state (i.e. no longer used but still enabled). Disabling an event via this method may be required for hot-removable devices, where event disable requests may time out after the device has been physically removed. In both cases, if the reference count equals zero, the corresponding reference count entry will be freed. The reference count entry must not be used any more after a call to this function. Also checks if the flags used for disabling the event match the flags used for enabling the event and warns if they do not (regardless of reference count). This does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec(). **Note** ``nf->lock`` must be held when calling this function. **Return** Returns zero on success. If the event is disabled by this call, returns the status of the event-enable EC command.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubj)}(hhh](j)}(hI``struct ssam_controller *ctrl`` The controller to disable the event on. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjFh]hstruct ssam_controller *ctrl}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj@ubj)}(hhh]h)}(h'The controller to disable the event on.h]h'The controller to disable the event on.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=ubj)}(ha``struct ssam_nf_refcount_entry *entry`` The reference count entry for the event to be disabled. h](j)}(h(``struct ssam_nf_refcount_entry *entry``h]j)}(hjh]h$struct ssam_nf_refcount_entry *entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjyubj)}(hhh]h)}(h7The reference count entry for the event to be disabled.h]h7The reference count entry for the event to be disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(h>``u8 flags`` The flags used for enabling the event on the EC. h](j)}(h ``u8 flags``h]j)}(hjh]hu8 flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(h0The flags used for enabling the event on the EC.h]h0The flags used for enabling the event on the EC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubj)}(hP``bool ec`` Flag specifying if the event should actually be disabled on the EC. h](j)}(h ``bool ec``h]j)}(hjh]hbool ec}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj)}(hhh]h)}(hCFlag specifying if the event should actually be disabled on the EC.h]hCFlag specifying if the event should actually be disabled on the EC.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj=ubeh}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h**Description**h]j)}(hj,h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(hIf ``ec`` equals ``true`` and the reference count equals zero (i.e. the event is no longer requested by any client), the specified event will be disabled on the EC via the corresponding request.h](hIf }(hjBhhhNhNubj)}(h``ec``h]hec}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh equals }(hjBhhhNhNubj)}(h``true``h]htrue}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubh and the reference count equals zero (i.e. the event is no longer requested by any client), the specified event will be disabled on the EC via the corresponding request.}(hjBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(hX@If ``ec`` equals ``false``, no request will be sent to the EC and the event can be considered in a detached state (i.e. no longer used but still enabled). Disabling an event via this method may be required for hot-removable devices, where event disable requests may time out after the device has been physically removed.h](hIf }(hjuhhhNhNubj)}(h``ec``h]hec}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubh equals }(hjuhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubhX&, no request will be sent to the EC and the event can be considered in a detached state (i.e. no longer used but still enabled). Disabling an event via this method may be required for hot-removable devices, where event disable requests may time out after the device has been physically removed.}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(hIn both cases, if the reference count equals zero, the corresponding reference count entry will be freed. The reference count entry must not be used any more after a call to this function.h]hIn both cases, if the reference count equals zero, the corresponding reference count entry will be freed. The reference count entry must not be used any more after a call to this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(hAlso checks if the flags used for disabling the event match the flags used for enabling the event and warns if they do not (regardless of reference count).h]hAlso checks if the flags used for disabling the event match the flags used for enabling the event and warns if they do not (regardless of reference count).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(htThis does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec().h]htThis does not modify the reference count itself, which is done with ssam_nf_refcount_inc() / ssam_nf_refcount_dec().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh) must be held when calling this function.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(h **Return**h]j)}(hj h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubh)}(hrReturns zero on success. If the event is disabled by this call, returns the status of the event-enable EC command.h]hrReturns zero on success. If the event is disabled by this call, returns the status of the event-enable EC command.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j -ssam_notifier_disable_registered (C function)"c.ssam_notifier_disable_registeredhNtauh1jhjphhhNhNubj)}(hhh](j)}(hCint ssam_notifier_disable_registered (struct ssam_controller *ctrl)h]j)}(hBint ssam_notifier_disable_registered(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hj`hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjMhhhj_hM ubjF)}(h ssam_notifier_disable_registeredh]jL)}(h ssam_notifier_disable_registeredh]h ssam_notifier_disable_registered}(hjrhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjnubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjMhhhj_hM ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjtsb"c.ssam_notifier_disable_registeredasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjMhhhj_hM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjIhhhj_hM ubah}(h]jDah ](jojpeh"]h$]h&]jtju)jvhuh1jhj_hM hjFhhubjx)}(hhh]h)}(h,Disable events for all registered notifiers.h]h,Disable events for all registered notifiers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjhhubah}(h]h ]h"]h$]h&]uh1jwhjFhhhj_hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhjphNhNubj)}(hXm**Parameters** ``struct ssam_controller *ctrl`` The controller for which to disable the notifiers/events. **Description** Disables events for all currently registered notifiers. In case of an error (EC command failing), all previously disabled events will be restored and the error code returned. This function is intended to disable all events prior to hibernation entry. See ssam_notifier_restore_registered() to restore/re-enable all events disabled with this function. Note that this function will not disable events for notifiers registered after calling this function. It should thus be made sure that no new notifiers are going to be added after this call and before the corresponding call to ssam_notifier_restore_registered(). **Return** Returns zero on success. In case of failure returns the error code returned by the failed EC command to disable an event.h](h)}(h**Parameters**h]j)}(hj3h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubj)}(hhh]j)}(h[``struct ssam_controller *ctrl`` The controller for which to disable the notifiers/events. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjRh]hstruct ssam_controller *ctrl}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjLubj)}(hhh]h)}(h9The controller for which to disable the notifiers/events.h]h9The controller for which to disable the notifiers/events.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM hjIubah}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubh)}(hDisables events for all currently registered notifiers. In case of an error (EC command failing), all previously disabled events will be restored and the error code returned.h]hDisables events for all currently registered notifiers. In case of an error (EC command failing), all previously disabled events will be restored and the error code returned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubh)}(hThis function is intended to disable all events prior to hibernation entry. See ssam_notifier_restore_registered() to restore/re-enable all events disabled with this function.h]hThis function is intended to disable all events prior to hibernation entry. See ssam_notifier_restore_registered() to restore/re-enable all events disabled with this function.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubh)}(hXNote that this function will not disable events for notifiers registered after calling this function. It should thus be made sure that no new notifiers are going to be added after this call and before the corresponding call to ssam_notifier_restore_registered().h]hXNote that this function will not disable events for notifiers registered after calling this function. It should thus be made sure that no new notifiers are going to be added after this call and before the corresponding call to ssam_notifier_restore_registered().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubh)}(hyReturns zero on success. In case of failure returns the error code returned by the failed EC command to disable an event.h]hyReturns zero on success. In case of failure returns the error code returned by the failed EC command to disable an event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j -ssam_notifier_restore_registered (C function)"c.ssam_notifier_restore_registeredhNtauh1jhjphhhNhNubj)}(hhh](j)}(hDvoid ssam_notifier_restore_registered (struct ssam_controller *ctrl)h]j)}(hCvoid ssam_notifier_restore_registered(struct ssam_controller *ctrl)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM3 ubj5)}(h h]h }(hj&hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhj%hM3 ubjF)}(h ssam_notifier_restore_registeredh]jL)}(h ssam_notifier_restore_registeredh]h ssam_notifier_restore_registered}(hj8hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj4ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhj%hM3 ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjThhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjPubj5)}(h h]h }(hjahhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjPubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjrhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjoubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjtmodnameN classnameNjHjK)}jN]jQ)}jDj:sb"c.ssam_notifier_restore_registeredasbuh1hhjPubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjPubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjPubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjPubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjLubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj%hM3 ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhj%hM3 ubah}(h]j ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj%hM3 hj hhubjx)}(hhh]h)}(h6Restore/re-enable events for all registered notifiers.h]h6Restore/re-enable events for all registered notifiers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM' hjhhubah}(h]h ]h"]h$]h&]uh1jwhj hhhj%hM3 ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX**Parameters** ``struct ssam_controller *ctrl`` The controller for which to restore the notifiers/events. **Description** Restores/re-enables all events for which notifiers have been registered on the given controller. In case of a failure, the error is logged and the function continues to try and enable the remaining events. This function is intended to restore/re-enable all registered events after hibernation. See ssam_notifier_disable_registered() for the counter part disabling the events and more details.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM+ hjubj)}(hhh]j)}(h[``struct ssam_controller *ctrl`` The controller for which to restore the notifiers/events. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM) hjubj)}(hhh]h)}(h9The controller for which to restore the notifiers/events.h]h9The controller for which to restore the notifiers/events.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hM) hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM) hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjSh]h Description}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM+ hjubh)}(hRestores/re-enables all events for which notifiers have been registered on the given controller. In case of a failure, the error is logged and the function continues to try and enable the remaining events.h]hRestores/re-enables all events for which notifiers have been registered on the given controller. In case of a failure, the error is logged and the function continues to try and enable the remaining events.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM+ hjubh)}(hThis function is intended to restore/re-enable all registered events after hibernation. See ssam_notifier_disable_registered() for the counter part disabling the events and more details.h]hThis function is intended to restore/re-enable all registered events after hibernation. See ssam_notifier_disable_registered() for the counter part disabling the events and more details.}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM/ hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_notifier_is_empty (C function)c.ssam_notifier_is_emptyhNtauh1jhjphhhNhNubj)}(hhh](j)}(h:bool ssam_notifier_is_empty (struct ssam_controller *ctrl)h]j)}(h9bool ssam_notifier_is_empty(struct ssam_controller *ctrl)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMK ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhMK ubjF)}(hssam_notifier_is_emptyh]jL)}(hssam_notifier_is_emptyh]hssam_notifier_is_empty}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhMK ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_notifier_is_emptyasbuh1hhjubj5)}(h h]h }(hj!hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj/hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hj<hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMK ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhMK ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhMK hjhhubjx)}(hhh]h)}(h,Check if there are any registered notifiers.h]h,Check if there are any registered notifiers.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chME hjchhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhMK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~jj~jjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_controller *ctrl`` The controller to check on. **Return** Returns ``true`` if there are currently no notifiers registered on the controller, ``false`` otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMI hjubj)}(hhh]j)}(h=``struct ssam_controller *ctrl`` The controller to check on. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMF hjubj)}(hhh]h)}(hThe controller to check on.h]hThe controller to check on.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMF hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMF hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMH hjubh)}(hgReturns ``true`` if there are currently no notifiers registered on the controller, ``false`` otherwise.h](hReturns }(hjhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhC if there are currently no notifiers registered on the controller, }(hjhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh otherwise.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMH hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j )ssam_notifier_unregister_all (C function)c.ssam_notifier_unregister_allhNtauh1jhjphhhNhNubj)}(hhh](j)}(h@void ssam_notifier_unregister_all (struct ssam_controller *ctrl)h]j)}(h?void ssam_notifier_unregister_all(struct ssam_controller *ctrl)h](j)}(hvoidh]hvoid}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM` ubj5)}(h h]h }(hjZhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjGhhhjYhM` ubjF)}(hssam_notifier_unregister_allh]jL)}(hssam_notifier_unregister_allh]hssam_notifier_unregister_all}(hjlhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjhubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjGhhhjYhM` ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjnsbc.ssam_notifier_unregister_allasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjGhhhjYhM` ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjChhhjYhM` ubah}(h]j>ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjYhM` hj@hhubjx)}(hhh]h)}(h.Unregister all currently registered notifiers.h]h.Unregister all currently registered notifiers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMX hjhhubah}(h]h ]h"]h$]h&]uh1jwhj@hhhjYhM` ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjphNhNubj)}(hX:**Parameters** ``struct ssam_controller *ctrl`` The controller to unregister the notifiers on. **Description** Unregisters all currently registered notifiers. This function is used to ensure that all notifiers will be unregistered and associated entries/resources freed when the controller is being shut down.h](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM\ hj'ubj)}(hhh]j)}(hP``struct ssam_controller *ctrl`` The controller to unregister the notifiers on. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjLh]hstruct ssam_controller *ctrl}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMZ hjFubj)}(hhh]h)}(h.The controller to unregister the notifiers on.h]h.The controller to unregister the notifiers on.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMZ hjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahMZ hjCubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM\ hj'ubh)}(hUnregisters all currently registered notifiers. This function is used to ensure that all notifiers will be unregistered and associated entries/resources freed when the controller is being shut down.h]hUnregisters all currently registered notifiers. This function is used to ensure that all notifiers will be unregistered and associated entries/resources freed when the controller is being shut down.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM\ hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_irq_setup (C function)c.ssam_irq_setuphNtauh1jhjphhhNhNubj)}(hhh](j)}(h1int ssam_irq_setup (struct ssam_controller *ctrl)h]j)}(h0int ssam_irq_setup(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM ubjF)}(hssam_irq_setuph]jL)}(hssam_irq_setuph]hssam_irq_setup}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hj hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj$ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj)modnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_irq_setupasbuh1hhjubj5)}(h h]h }(hjGhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjUhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjbhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM hjhhubjx)}(hhh]h)}(h$Set up SAM EC wakeup-GPIO interrupt.h]h$Set up SAM EC wakeup-GPIO interrupt.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX]**Parameters** ``struct ssam_controller *ctrl`` The controller for which the IRQ should be set up. **Description** Set up an IRQ for the wakeup-GPIO pin of the SAM EC. This IRQ can be used to wake the device from a low power state. Note that this IRQ can only be triggered while the EC is in the display-off state. In this state, events are not sent to the host in the usual way. Instead the wakeup-GPIO gets pulled to "high" as long as there are pending events and these events need to be released one-by-one via the GPIO callback request, either until there are no events left and the GPIO is reset, or all at once by transitioning the EC out of the display-off state, which will also clear the GPIO. Not all events, however, should trigger a full system wakeup. Instead the driver should, if necessary, inspect and forward each event to the corresponding subsystem, which in turn should decide if the system needs to be woken up. This logic has not been implemented yet, thus wakeup by this IRQ should be disabled by default to avoid spurious wake-ups, caused, for example, by the remaining battery percentage changing. Refer to comments in this function and comments in the corresponding IRQ handler for more details on how this should be implemented. See also ssam_ctrl_notif_display_off() and ssam_ctrl_notif_display_off() for functions to transition the EC into and out of the display-off state as well as more details on it. The IRQ is disabled by default and has to be enabled before it can wake up the device from suspend via ssam_irq_arm_for_wakeup(). On teardown, the IRQ should be freed via ssam_irq_free().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]j)}(hT``struct ssam_controller *ctrl`` The controller for which the IRQ should be set up. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h2The controller for which the IRQ should be set up.h]h2The controller for which the IRQ should be set up.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(htSet up an IRQ for the wakeup-GPIO pin of the SAM EC. This IRQ can be used to wake the device from a low power state.h]htSet up an IRQ for the wakeup-GPIO pin of the SAM EC. This IRQ can be used to wake the device from a low power state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hXNote that this IRQ can only be triggered while the EC is in the display-off state. In this state, events are not sent to the host in the usual way. Instead the wakeup-GPIO gets pulled to "high" as long as there are pending events and these events need to be released one-by-one via the GPIO callback request, either until there are no events left and the GPIO is reset, or all at once by transitioning the EC out of the display-off state, which will also clear the GPIO.h]hXNote that this IRQ can only be triggered while the EC is in the display-off state. In this state, events are not sent to the host in the usual way. Instead the wakeup-GPIO gets pulled to “high” as long as there are pending events and these events need to be released one-by-one via the GPIO callback request, either until there are no events left and the GPIO is reset, or all at once by transitioning the EC out of the display-off state, which will also clear the GPIO.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hX(Not all events, however, should trigger a full system wakeup. Instead the driver should, if necessary, inspect and forward each event to the corresponding subsystem, which in turn should decide if the system needs to be woken up. This logic has not been implemented yet, thus wakeup by this IRQ should be disabled by default to avoid spurious wake-ups, caused, for example, by the remaining battery percentage changing. Refer to comments in this function and comments in the corresponding IRQ handler for more details on how this should be implemented.h]hX(Not all events, however, should trigger a full system wakeup. Instead the driver should, if necessary, inspect and forward each event to the corresponding subsystem, which in turn should decide if the system needs to be woken up. This logic has not been implemented yet, thus wakeup by this IRQ should be disabled by default to avoid spurious wake-ups, caused, for example, by the remaining battery percentage changing. Refer to comments in this function and comments in the corresponding IRQ handler for more details on how this should be implemented.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hSee also ssam_ctrl_notif_display_off() and ssam_ctrl_notif_display_off() for functions to transition the EC into and out of the display-off state as well as more details on it.h]hSee also ssam_ctrl_notif_display_off() and ssam_ctrl_notif_display_off() for functions to transition the EC into and out of the display-off state as well as more details on it.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hThe IRQ is disabled by default and has to be enabled before it can wake up the device from suspend via ssam_irq_arm_for_wakeup(). On teardown, the IRQ should be freed via ssam_irq_free().h]hThe IRQ is disabled by default and has to be enabled before it can wake up the device from suspend via ssam_irq_arm_for_wakeup(). On teardown, the IRQ should be freed via ssam_irq_free().}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_irq_free (C function)c.ssam_irq_freehNtauh1jhjphhhNhNubj)}(hhh](j)}(h1void ssam_irq_free (struct ssam_controller *ctrl)h]j)}(h0void ssam_irq_free(struct ssam_controller *ctrl)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM ubjF)}(h ssam_irq_freeh]jL)}(h ssam_irq_freeh]h ssam_irq_free}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_irq_freeasbuh1hhjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM ubah}(h]j|ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM hj~hhubjx)}(hhh]h)}(h"Free SAM EC wakeup-GPIO interrupt.h]h"Free SAM EC wakeup-GPIO interrupt.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjFhhubah}(h]h ]h"]h$]h&]uh1jwhj~hhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1jhhhjphNhNubj)}(h**Parameters** ``struct ssam_controller *ctrl`` The controller for which the IRQ should be freed. **Description** Free the wakeup-GPIO IRQ previously set-up via ssam_irq_setup().h](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjeubj)}(hhh]j)}(hS``struct ssam_controller *ctrl`` The controller for which the IRQ should be freed. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h1The controller for which the IRQ should be freed.h]h1The controller for which the IRQ should be freed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjeubh)}(h@Free the wakeup-GPIO IRQ previously set-up via ssam_irq_setup().h]h@Free the wakeup-GPIO IRQ previously set-up via ssam_irq_setup().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $ssam_irq_arm_for_wakeup (C function)c.ssam_irq_arm_for_wakeuphNtauh1jhjphhhNhNubj)}(hhh](j)}(h:int ssam_irq_arm_for_wakeup (struct ssam_controller *ctrl)h]j)}(h9int ssam_irq_arm_for_wakeup(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM ubjF)}(hssam_irq_arm_for_wakeuph]jL)}(hssam_irq_arm_for_wakeuph]hssam_irq_arm_for_wakeup}(hj+hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj'ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjGhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjCubj5)}(h h]h }(hjThhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjCubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjehhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjbubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjgmodnameN classnameNjHjK)}jN]jQ)}jDj-sbc.ssam_irq_arm_for_wakeupasbuh1hhjCubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjCubje)}(hjhh]h*}(hjhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjCubjL)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj?ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM hjhhubjx)}(hhh]h)}(h&Arm the EC IRQ for wakeup, if enabled.h]h&Arm the EC IRQ for wakeup, if enabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hX'**Parameters** ``struct ssam_controller *ctrl`` The controller for which the IRQ should be armed. **Description** Sets up the IRQ so that it can be used to wake the device. Specifically, this function enables the irq and then, if the device is allowed to wake up the system, calls enable_irq_wake(). See ssam_irq_disarm_wakeup() for the corresponding function to disable the IRQ. This function is intended to arm the IRQ before entering S2idle suspend. **Note** calls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]j)}(hS``struct ssam_controller *ctrl`` The controller for which the IRQ should be armed. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hj h]hstruct ssam_controller *ctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h1The controller for which the IRQ should be armed.h]h1The controller for which the IRQ should be armed.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hX Sets up the IRQ so that it can be used to wake the device. Specifically, this function enables the irq and then, if the device is allowed to wake up the system, calls enable_irq_wake(). See ssam_irq_disarm_wakeup() for the corresponding function to disable the IRQ.h]hX Sets up the IRQ so that it can be used to wake the device. Specifically, this function enables the irq and then, if the device is allowed to wake up the system, calls enable_irq_wake(). See ssam_irq_disarm_wakeup() for the corresponding function to disable the IRQ.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hHThis function is intended to arm the IRQ before entering S2idle suspend.h]hHThis function is intended to arm the IRQ before entering S2idle suspend.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(h**Note**h]j)}(hj|h]hNote}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hQcalls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.h]hQcalls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_irq_disarm_wakeup (C function)c.ssam_irq_disarm_wakeuphNtauh1jhjphhhNhNubj)}(hhh](j)}(h:void ssam_irq_disarm_wakeup (struct ssam_controller *ctrl)h]j)}(h9void ssam_irq_disarm_wakeup(struct ssam_controller *ctrl)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhM ubjF)}(hssam_irq_disarm_wakeuph]jL)}(hssam_irq_disarm_wakeuph]hssam_irq_disarm_wakeup}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hj hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_irq_disarm_wakeupasbuh1hhjubj5)}(h h]h }(hj<hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hjJhhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hctrlh]hctrl}(hjWhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhM ubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhM hjhhubjx)}(hhh]h)}(hDisarm the wakeup IRQ.h]hDisarm the wakeup IRQ.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hj~hhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjphNhNubj)}(hXj**Parameters** ``struct ssam_controller *ctrl`` The controller for which the IRQ should be disarmed. **Description** Disarm the IRQ previously set up for wake via ssam_irq_arm_for_wakeup(). This function is intended to disarm the IRQ after exiting S2idle suspend. **Note** calls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]j)}(hV``struct ssam_controller *ctrl`` The controller for which the IRQ should be disarmed. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjh]hstruct ssam_controller *ctrl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubj)}(hhh]h)}(h4The controller for which the IRQ should be disarmed.h]h4The controller for which the IRQ should be disarmed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hHDisarm the IRQ previously set up for wake via ssam_irq_arm_for_wakeup().h]hHDisarm the IRQ previously set up for wake via ssam_irq_arm_for_wakeup().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hIThis function is intended to disarm the IRQ after exiting S2idle suspend.h]hIThis function is intended to disarm the IRQ after exiting S2idle suspend.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(h**Note**h]j)}(hj3h]hNote}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubh)}(hQcalls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.h]hQcalls to ssam_irq_arm_for_wakeup() and ssam_irq_disarm_wakeup() must be balanced.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjphhhNhNubeh}(h]jaah ]h"] controllerah$]h&]uh1hhhhhhhhK)ubh)}(hhh](h)}(hClient Device Bush]hClient Device Bus}(hjihhhNhNubah}(h]h ]h"]h$]h&]hj}uh1hhjfhhhhhK3ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_device_id_compatible (C function)c.ssam_device_id_compatiblehNtauh1jhjfhhhNhNubj)}(hhh](j)}(h\bool ssam_device_id_compatible (const struct ssam_device_id *id, struct ssam_device_uid uid)h]j)}(h[bool ssam_device_id_compatible(const struct ssam_device_id *id, struct ssam_device_uid uid)h](j)}(hjh]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjhhhjhKubjF)}(hssam_device_id_compatibleh]jL)}(hssam_device_id_compatibleh]hssam_device_id_compatible}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjhhhjhKubj)}(h=(const struct ssam_device_id *id, struct ssam_device_uid uid)h](j )}(hconst struct ssam_device_id *idh](j#)}(hjRh]hconst}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubj#)}(hj&h]hstruct}(hjhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubh)}(hhh]jL)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjmodnameN classnameNjHjK)}jN]jQ)}jDjsbc.ssam_device_id_compatibleasbuh1hhjubj5)}(h h]h }(hj%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjubje)}(hjhh]h*}(hj3hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjubjL)}(hidh]hid}(hj@hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubj )}(hstruct ssam_device_uid uidh](j#)}(hj&h]hstruct}(hjYhhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjUubj5)}(h h]h }(hjfhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjUubh)}(hhh]jL)}(hssam_device_uidh]hssam_device_uid}(hjwhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjtubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjymodnameN classnameNjHjK)}jN]j!c.ssam_device_id_compatibleasbuh1hhjUubj5)}(h h]h }(hjhhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjUubjL)}(huidh]huid}(hjhhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjUubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjhhhjhKubah}(h]jah ](jojpeh"]h$]h&]jtju)jvhuh1jhjhKhjhhubjx)}(hhh]h)}(h#Check if a device ID matches a UID.h]h#Check if a device ID matches a UID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjhhubah}(h]h ]h"]h$]h&]uh1jwhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhjfhNhNubj)}(hX **Parameters** ``const struct ssam_device_id *id`` The device ID as potential match. ``struct ssam_device_uid uid`` The device UID matching against. **Description** Check if the given ID is a match for the given UID, i.e. if a device with the provided UID is compatible to the given ID following the match rules described in its :c:type:`ssam_device_id.match_flags ` member. **Return** Returns ``true`` if the given UID is compatible to the match rule described by the given ID, ``false`` otherwise.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjubj)}(hhh](j)}(hF``const struct ssam_device_id *id`` The device ID as potential match. h](j)}(h#``const struct ssam_device_id *id``h]j)}(hj h]hconst struct ssam_device_id *id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj ubj)}(hhh]h)}(h!The device ID as potential match.h]h!The device ID as potential match.}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj# hKhj$ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj# hKhj ubj)}(h@``struct ssam_device_uid uid`` The device UID matching against. h](j)}(h``struct ssam_device_uid uid``h]j)}(hjG h]hstruct ssam_device_uid uid}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.c6hKhjA ubj)}(hhh]h)}(h The device UID matching against.h]h The device UID matching against.}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ hKhj] ubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1jhj\ hKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjubh)}(hCheck if the given ID is a match for the given UID, i.e. if a device with the provided UID is compatible to the given ID following the match rules described in its :c:type:`ssam_device_id.match_flags ` member.h](hCheck if the given ID is a match for the given UID, i.e. if a device with the provided UID is compatible to the given ID following the match rules described in its }(hj hhhNhNubh)}(h5:c:type:`ssam_device_id.match_flags `h]j)}(hj h]hssam_device_id.match_flags}(hj hhhNhNubah}(h]h ](jA:jc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocjM: refdomainjreftypetype refexplicitrefwarnjHjcwjZ:ssam_device_iduh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj ubh member.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKhjubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjubh)}(hqReturns ``true`` if the given UID is compatible to the match rule described by the given ID, ``false`` otherwise.h](hReturns }(hj hhhNhNubj)}(h``true``h]htrue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhM if the given UID is compatible to the match rule described by the given ID, }(hj hhhNhNubj)}(h ``false``h]hfalse}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh otherwise.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j #ssam_device_id_is_null (C function)c.ssam_device_id_is_nullhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h=bool ssam_device_id_is_null (const struct ssam_device_id *id)h]j)}(h**Parameters** ``const struct ssam_device_id *id`` The device ID to check. **Description** Check if a given device ID is null, i.e. all zeros. Used to check for the end of ``MODULE_DEVICE_TABLE(ssam, ...)`` or similar lists. **Return** Returns ``true`` if the given ID represents a null ID, ``false`` otherwise.h](h)}(h**Parameters**h]j)}(hj1"h]h Parameters}(hj3"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/"ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj+"ubj)}(hhh]j)}(h<``const struct ssam_device_id *id`` The device ID to check. h](j)}(h#``const struct ssam_device_id *id``h]j)}(hjP"h]hconst struct ssam_device_id *id}(hjR"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN"ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjJ"ubj)}(hhh]h)}(hThe device ID to check.h]hThe device ID to check.}(hji"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje"hKhjf"ubah}(h]h ]h"]h$]h&]uh1jhjJ"ubeh}(h]h ]h"]h$]h&]uh1jhje"hKhjG"ubah}(h]h ]h"]h$]h&]uh1jhj+"ubh)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj+"ubh)}(hCheck if a given device ID is null, i.e. all zeros. Used to check for the end of ``MODULE_DEVICE_TABLE(ssam, ...)`` or similar lists.h](hQCheck if a given device ID is null, i.e. all zeros. Used to check for the end of }(hj"hhhNhNubj)}(h"``MODULE_DEVICE_TABLE(ssam, ...)``h]hMODULE_DEVICE_TABLE(ssam, ...)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh or similar lists.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj+"ubh)}(h **Return**h]j)}(hj"h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj+"ubh)}(hKReturns ``true`` if the given ID represents a null ID, ``false`` otherwise.h](hReturns }(hj"hhhNhNubj)}(h``true``h]htrue}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh' if the given ID represents a null ID, }(hj"hhhNhNubj)}(h ``false``h]hfalse}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh otherwise.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhj+"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_bus_register (C function)c.ssam_bus_registerhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hint ssam_bus_register (void)h]j)}(hint ssam_bus_register(void)h](j)}(hinth]hint}(hj-#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)#hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chM{ubj5)}(h h]h }(hj<#hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj)#hhhj;#hM{ubjF)}(hssam_bus_registerh]jL)}(hssam_bus_registerh]hssam_bus_register}(hjN#hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJ#ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj)#hhhj;#hM{ubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf#ubah}(h]h ]h"]h$]h&]noemphhhuh1j hjb#ubah}(h]h ]h"]h$]h&]hhuh1jhj)#hhhj;#hM{ubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj%#hhhj;#hM{ubah}(h]j #ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj;#hM{hj"#hhubjx)}(hhh]h)}(h/Register and set-up the SSAM client device bus.h]h/Register and set-up the SSAM client device bus.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMyhj#hhubah}(h]h ]h"]h$]h&]uh1jwhj"#hhhj;#hM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1jhhhjfhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chM}hj#ubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hj#h]hvoid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj#ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j  ssam_bus_unregister (C function)c.ssam_bus_unregisterhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hvoid ssam_bus_unregister (void)h]j)}(hvoid ssam_bus_unregister(void)h](j)}(hvoidh]hvoid}(hj/$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+$hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMubj5)}(h h]h }(hj>$hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+$hhhj=$hMubjF)}(hssam_bus_unregisterh]jL)}(hssam_bus_unregisterh]hssam_bus_unregister}(hjP$hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjL$ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj+$hhhj=$hMubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hjl$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh$ubah}(h]h ]h"]h$]h&]noemphhhuh1j hjd$ubah}(h]h ]h"]h$]h&]hhuh1jhj+$hhhj=$hMubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj'$hhhj=$hMubah}(h]j"$ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj=$hMhj$$hhubjx)}(hhh]h)}(h&Unregister the SSAM client device bus.h]h&Unregister the SSAM client device bus.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj$hhubah}(h]h ]h"]h$]h&]uh1jwhj$$hhhj=$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1jhhhjfhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj$ubj)}(hhh]j)}(h``void`` no argumentsh](j)}(h``void``h]j)}(hj$h]hvoid}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj$ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubeh}(h]jah ]h"]client device busah$]h&]uh1hhhhhhhhK3ubh)}(hhh](h)}(hCoreh]hCore}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj%hhhhhK:ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j $ssam_try_set_controller (C function)c.ssam_try_set_controllerhNtauh1jhj%hhhNhNubj)}(hhh](j)}(h:int ssam_try_set_controller (struct ssam_controller *ctrl)h]j)}(h9int ssam_try_set_controller(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjI%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE%hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKTubj5)}(h h]h }(hjX%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjE%hhhjW%hKTubjF)}(hssam_try_set_controllerh]jL)}(hssam_try_set_controllerh]hssam_try_set_controller}(hjj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjf%ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjE%hhhjW%hKTubj)}(h(struct ssam_controller *ctrl)h]j )}(hstruct ssam_controller *ctrlh](j#)}(hj&h]hstruct}(hj%hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj%ubj5)}(h h]h }(hj%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj%ubh)}(hhh]jL)}(hssam_controllerh]hssam_controller}(hj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj%modnameN classnameNjHjK)}jN]jQ)}jDjl%sbc.ssam_try_set_controllerasbuh1hhj%ubj5)}(h h]h }(hj%hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj%ubje)}(hjhh]h*}(hj%hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj%ubjL)}(hctrlh]hctrl}(hj%hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj~%ubah}(h]h ]h"]h$]h&]hhuh1jhjE%hhhjW%hKTubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjA%hhhjW%hKTubah}(h]j<%ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjW%hKThj>%hhubjx)}(hhh]h)}(h)Try to set the main controller reference.h]h)Try to set the main controller reference.}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKKhj&hhubah}(h]h ]h"]h$]h&]uh1jwhj>%hhhjW%hKTubeh}(h]h ](jfunctioneh"]h$]h&]jjjj!&jj!&jjjuh1jhhhj%hNhNubj)}(hX4**Parameters** ``struct ssam_controller *ctrl`` The controller to which the reference should point. **Description** Set the main controller reference to the given pointer if the reference hasn't been set already. **Return** Returns zero on success or ``-EEXIST`` if the reference has already been set.h](h)}(h**Parameters**h]j)}(hj+&h]h Parameters}(hj-&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKOhj%&ubj)}(hhh]j)}(hU``struct ssam_controller *ctrl`` The controller to which the reference should point. h](j)}(h ``struct ssam_controller *ctrl``h]j)}(hjJ&h]hstruct ssam_controller *ctrl}(hjL&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH&ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKLhjD&ubj)}(hhh]h)}(h3The controller to which the reference should point.h]h3The controller to which the reference should point.}(hjc&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_&hKLhj`&ubah}(h]h ]h"]h$]h&]uh1jhjD&ubeh}(h]h ]h"]h$]h&]uh1jhj_&hKLhjA&ubah}(h]h ]h"]h$]h&]uh1jhj%&ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKNhj%&ubh)}(h`Set the main controller reference to the given pointer if the reference hasn't been set already.h]hbSet the main controller reference to the given pointer if the reference hasn’t been set already.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKNhj%&ubh)}(h **Return**h]j)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKQhj%&ubh)}(hMReturns zero on success or ``-EEXIST`` if the reference has already been set.h](hReturns zero on success or }(hj&hhhNhNubj)}(h ``-EEXIST``h]h-EEXIST}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh' if the reference has already been set.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKQhj%&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj%hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j "ssam_clear_controller (C function)c.ssam_clear_controllerhNtauh1jhj%hhhNhNubj)}(hhh](j)}(h!void ssam_clear_controller (void)h]j)}(h void ssam_clear_controller(void)h](j)}(hvoidh]hvoid}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKhubj5)}(h h]h }(hj'hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj&hhhj'hKhubjF)}(hssam_clear_controllerh]jL)}(hssam_clear_controllerh]hssam_clear_controller}(hj$'hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj 'ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj&hhhj'hKhubj)}(h(void)h]j )}(hvoidh]j)}(hvoidh]hvoid}(hj@'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<'ubah}(h]h ]h"]h$]h&]noemphhhuh1j hj8'ubah}(h]h ]h"]h$]h&]hhuh1jhj&hhhj'hKhubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj&hhhj'hKhubah}(h]j&ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj'hKhhj&hhubjx)}(hhh]h)}(h+Remove/clear the main controller reference.h]h+Remove/clear the main controller reference.}(hjj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKchjg'hhubah}(h]h ]h"]h$]h&]uh1jwhj&hhhj'hKhubeh}(h]h ](jfunctioneh"]h$]h&]jjjj'jj'jjjuh1jhhhj%hNhNubj)}(h**Parameters** ``void`` no arguments **Description** Clears the main controller reference, i.e. sets it to ``NULL``. This function should be called before the controller is shut down.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKghj'ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj'h]hvoid}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKjhj'ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKjhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKjhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]j)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKlhj'ubh)}(hClears the main controller reference, i.e. sets it to ``NULL``. This function should be called before the controller is shut down.h](h6Clears the main controller reference, i.e. sets it to }(hj'hhhNhNubj)}(h``NULL``h]hNULL}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubhD. This function should be called before the controller is shut down.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKdhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj%hhhNhNubeh}(h]jah ]h"]coreah$]h&]uh1hhhhhhhhK:ubh)}(hhh](h)}(h Trace Helpersh]h Trace Helpers}(hj.(hhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhj+(hhhhhKAubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j ssam_trace_ptr_uid (C function)c.ssam_trace_ptr_uidhNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h8void ssam_trace_ptr_uid (const void *ptr, char *uid_str)h]j)}(h7void ssam_trace_ptr_uid(const void *ptr, char *uid_str)h](j)}(hvoidh]hvoid}(hjU(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ(hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKpubj5)}(h h]h }(hjd(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjQ(hhhjc(hKpubjF)}(hssam_trace_ptr_uidh]jL)}(hssam_trace_ptr_uidh]hssam_trace_ptr_uid}(hjv(hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjr(ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjQ(hhhjc(hKpubj)}(h (const void *ptr, char *uid_str)h](j )}(hconst void *ptrh](j#)}(hjRh]hconst}(hj(hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj(ubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj(ubj)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj(ubje)}(hjhh]h*}(hj(hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj(ubjL)}(hptrh]hptr}(hj(hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubj )}(h char *uid_strh](j)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj5)}(h h]h }(hj(hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj(ubje)}(hjhh]h*}(hj )hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj(ubjL)}(huid_strh]huid_str}(hj)hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubeh}(h]h ]h"]h$]h&]hhuh1jhjQ(hhhjc(hKpubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjM(hhhjc(hKpubah}(h]jH(ah ](jojpeh"]h$]h&]jtju)jvhuh1jhjc(hKphjJ(hhubjx)}(hhh]h)}(h0Convert the pointer to a non-pointer UID string.h]h0Convert the pointer to a non-pointer UID string.}(hjB)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKihj?)hhubah}(h]h ]h"]h$]h&]uh1jwhjJ(hhhjc(hKpubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZ)jjZ)jjjuh1jhhhj+(hNhNubj)}(hX7**Parameters** ``const void *ptr`` The pointer to convert. ``char *uid_str`` A buffer of length SSAM_PTR_UID_LEN where the UID will be stored. **Description** Converts the given pointer into a UID string that is safe to be shared with userspace and logs, i.e. doesn't give away the real memory location.h](h)}(h**Parameters**h]j)}(hjd)h]h Parameters}(hjf)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb)ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKmhj^)ubj)}(hhh](j)}(h,``const void *ptr`` The pointer to convert. h](j)}(h``const void *ptr``h]j)}(hj)h]hconst void *ptr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKjhj})ubj)}(hhh]h)}(hThe pointer to convert.h]hThe pointer to convert.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKjhj)ubah}(h]h ]h"]h$]h&]uh1jhj})ubeh}(h]h ]h"]h$]h&]uh1jhj)hKjhjz)ubj)}(hT``char *uid_str`` A buffer of length SSAM_PTR_UID_LEN where the UID will be stored. h](j)}(h``char *uid_str``h]j)}(hj)h]h char *uid_str}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKkhj)ubj)}(hhh]h)}(hAA buffer of length SSAM_PTR_UID_LEN where the UID will be stored.h]hAA buffer of length SSAM_PTR_UID_LEN where the UID will be stored.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKkhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKkhjz)ubeh}(h]h ]h"]h$]h&]uh1jhj^)ubh)}(h**Description**h]j)}(hj)h]h Description}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKmhj^)ubh)}(hConverts the given pointer into a UID string that is safe to be shared with userspace and logs, i.e. doesn't give away the real memory location.h]hConverts the given pointer into a UID string that is safe to be shared with userspace and logs, i.e. doesn’t give away the real memory location.}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKmhj^)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_trace_get_packet_seq (C function)c.ssam_trace_get_packet_seqhNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h:u16 ssam_trace_get_packet_seq (const struct ssh_packet *p)h]j)}(h9u16 ssam_trace_get_packet_seq(const struct ssh_packet *p)h](h)}(hhh]jL)}(hu16h]hu16}(hj?*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<*ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjA*modnameN classnameNjHjK)}jN]jQ)}jDssam_trace_get_packet_seqsbc.ssam_trace_get_packet_seqasbuh1hhj8*hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubj5)}(h h]h }(hja*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj8*hhhj`*hKubjF)}(hssam_trace_get_packet_seqh]jL)}(hj]*h]hssam_trace_get_packet_seq}(hjs*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjo*ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj8*hhhj`*hKubj)}(h(const struct ssh_packet *p)h]j )}(hconst struct ssh_packet *ph](j#)}(hjRh]hconst}(hj*hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj*ubj5)}(h h]h }(hj*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*ubj#)}(hj&h]hstruct}(hj*hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj*ubj5)}(h h]h }(hj*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj*hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj*ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj*modnameN classnameNjHjK)}jN]j[*c.ssam_trace_get_packet_seqasbuh1hhj*ubj5)}(h h]h }(hj*hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj*ubje)}(hjhh]h*}(hj*hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj*ubjL)}(hjqh]hp}(hj+hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubah}(h]h ]h"]h$]h&]hhuh1jhj8*hhhj`*hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj4*hhhj`*hKubah}(h]j/*ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj`*hKhj1*hhubjx)}(hhh]h)}(hRead the packet's sequence ID.h]h Read the packet’s sequence ID.}(hj)+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhK|hj&+hhubah}(h]h ]h"]h$]h&]uh1jwhj1*hhhj`*hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjA+jjA+jjjuh1jhhhj+(hNhNubj)}(h**Parameters** ``const struct ssh_packet *p`` The packet. **Return** Returns the packet's sequence ID (SEQ) field if present, or ``SSAM_SEQ_NOT_APPLICABLE`` if not (e.g. flush packet).h](h)}(h**Parameters**h]j)}(hjK+h]h Parameters}(hjM+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI+ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE+ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j)}(h``const struct ssh_packet *p``h]j)}(hjj+h]hconst struct ssh_packet *p}(hjl+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh+ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhK}hjd+ubj)}(hhh]h)}(h The packet.h]h The packet.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hK}hj+ubah}(h]h ]h"]h$]h&]uh1jhjd+ubeh}(h]h ]h"]h$]h&]uh1jhj+hK}hja+ubah}(h]h ]h"]h$]h&]uh1jhjE+ubh)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE+ubh)}(hsReturns the packet's sequence ID (SEQ) field if present, or ``SSAM_SEQ_NOT_APPLICABLE`` if not (e.g. flush packet).h](h>Returns the packet’s sequence ID (SEQ) field if present, or }(hj+hhhNhNubj)}(h``SSAM_SEQ_NOT_APPLICABLE``h]hSSAM_SEQ_NOT_APPLICABLE}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh if not (e.g. flush packet).}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_trace_get_request_id (C function)c.ssam_trace_get_request_idhNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h:u32 ssam_trace_get_request_id (const struct ssh_packet *p)h]j)}(h9u32 ssam_trace_get_request_id(const struct ssh_packet *p)h](h)}(hhh]jL)}(hu32h]hu32}(hj+hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj,modnameN classnameNjHjK)}jN]jQ)}jDssam_trace_get_request_idsbc.ssam_trace_get_request_idasbuh1hhj+hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubj5)}(h h]h }(hj!,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj+hhhj ,hKubjF)}(hssam_trace_get_request_idh]jL)}(hj,h]hssam_trace_get_request_id}(hj3,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj/,ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj+hhhj ,hKubj)}(h(const struct ssh_packet *p)h]j )}(hconst struct ssh_packet *ph](j#)}(hjRh]hconst}(hjN,hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjJ,ubj5)}(h h]h }(hj[,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjJ,ubj#)}(hj&h]hstruct}(hji,hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hjJ,ubj5)}(h h]h }(hjv,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjJ,ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj,modnameN classnameNjHjK)}jN]j,c.ssam_trace_get_request_idasbuh1hhjJ,ubj5)}(h h]h }(hj,hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjJ,ubje)}(hjhh]h*}(hj,hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhjJ,ubjL)}(hjqh]hp}(hj,hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjJ,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjF,ubah}(h]h ]h"]h$]h&]hhuh1jhj+hhhj ,hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj+hhhj ,hKubah}(h]j+ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj ,hKhj+hhubjx)}(hhh]h)}(hRead the packet's request ID.h]hRead the packet’s request ID.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj,hhubah}(h]h ]h"]h$]h&]uh1jwhj+hhhj ,hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1jhhhj+(hNhNubj)}(h**Parameters** ``const struct ssh_packet *p`` The packet. **Return** Returns the packet's request ID (RQID) field if the packet represents a request with command data, or ``SSAM_RQID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](h)}(h**Parameters**h]j)}(hj -h]h Parameters}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj -ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj-ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j)}(h``const struct ssh_packet *p``h]j)}(hj*-h]hconst struct ssh_packet *p}(hj,-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(-ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj$-ubj)}(hhh]h)}(h The packet.h]h The packet.}(hjC-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?-hKhj@-ubah}(h]h ]h"]h$]h&]uh1jhj$-ubeh}(h]h ]h"]h$]h&]uh1jhj?-hKhj!-ubah}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h **Return**h]j)}(hje-h]hReturn}(hjg-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc-ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj-ubh)}(hReturns the packet's request ID (RQID) field if the packet represents a request with command data, or ``SSAM_RQID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](hhReturns the packet’s request ID (RQID) field if the packet represents a request with command data, or }(hj{-hhhNhNubj)}(h``SSAM_RQID_NOT_APPLICABLE``h]hSSAM_RQID_NOT_APPLICABLE}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{-ubh- if not (e.g. flush request, control packet).}(hj{-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'ssam_trace_get_request_tid (C function)c.ssam_trace_get_request_tidhNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h;u32 ssam_trace_get_request_tid (const struct ssh_packet *p)h]j)}(h:u32 ssam_trace_get_request_tid(const struct ssh_packet *p)h](h)}(hhh]jL)}(hu32h]hu32}(hj-hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj-modnameN classnameNjHjK)}jN]jQ)}jDssam_trace_get_request_tidsbc.ssam_trace_get_request_tidasbuh1hhj-hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubj5)}(h h]h }(hj-hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj-hhhj-hKubjF)}(hssam_trace_get_request_tidh]jL)}(hj-h]hssam_trace_get_request_tid}(hj-hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj-ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj-hhhj-hKubj)}(h(const struct ssh_packet *p)h]j )}(hconst struct ssh_packet *ph](j#)}(hjRh]hconst}(hj.hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj .ubj5)}(h h]h }(hj.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj .ubj#)}(hj&h]hstruct}(hj).hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj .ubj5)}(h h]h }(hj6.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj .ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hjG.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjD.ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjI.modnameN classnameNjHjK)}jN]j-c.ssam_trace_get_request_tidasbuh1hhj .ubj5)}(h h]h }(hje.hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj .ubje)}(hjhh]h*}(hjs.hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj .ubjL)}(hjqh]hp}(hj.hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj .ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubah}(h]h ]h"]h$]h&]hhuh1jhj-hhhj-hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj-hhhj-hKubah}(h]j-ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj-hKhj-hhubjx)}(hhh]h)}(h$Read the packet's request target ID.h]h&Read the packet’s request target ID.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj.hhubah}(h]h ]h"]h$]h&]uh1jwhj-hhhj-hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhj+(hNhNubj)}(hX**Parameters** ``const struct ssh_packet *p`` The packet. **Return** Returns the packet's request target ID (TID) field if the packet represents a request with command data, or ``SSAM_SSH_TID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj.ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j)}(h``const struct ssh_packet *p``h]j)}(hj.h]hconst struct ssh_packet *p}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj.ubj)}(hhh]h)}(h The packet.h]h The packet.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h **Return**h]j)}(hj%/h]hReturn}(hj'/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#/ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj.ubh)}(hReturns the packet's request target ID (TID) field if the packet represents a request with command data, or ``SSAM_SSH_TID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](hnReturns the packet’s request target ID (TID) field if the packet represents a request with command data, or }(hj;/hhhNhNubj)}(h``SSAM_SSH_TID_NOT_APPLICABLE``h]hSSAM_SSH_TID_NOT_APPLICABLE}(hjC/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;/ubh- if not (e.g. flush request, control packet).}(hj;/hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j 'ssam_trace_get_request_sid (C function)c.ssam_trace_get_request_sidhNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h;u32 ssam_trace_get_request_sid (const struct ssh_packet *p)h]j)}(h:u32 ssam_trace_get_request_sid(const struct ssh_packet *p)h](h)}(hhh]jL)}(hu32h]hu32}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj|/ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj/modnameN classnameNjHjK)}jN]jQ)}jDssam_trace_get_request_sidsbc.ssam_trace_get_request_sidasbuh1hhjx/hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubj5)}(h h]h }(hj/hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hjx/hhhj/hKubjF)}(hssam_trace_get_request_sidh]jL)}(hj/h]hssam_trace_get_request_sid}(hj/hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj/ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhjx/hhhj/hKubj)}(h(const struct ssh_packet *p)h]j )}(hconst struct ssh_packet *ph](j#)}(hjRh]hconst}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj/ubj5)}(h h]h }(hj/hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubj#)}(hj&h]hstruct}(hj/hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj/ubj5)}(h h]h }(hj/hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj0hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj0ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj 0modnameN classnameNjHjK)}jN]j/c.ssam_trace_get_request_sidasbuh1hhj/ubj5)}(h h]h }(hj%0hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj/ubje)}(hjhh]h*}(hj30hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj/ubjL)}(hjqh]hp}(hj@0hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubah}(h]h ]h"]h$]h&]hhuh1jhjx/hhhj/hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhjt/hhhj/hKubah}(h]jo/ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj/hKhjq/hhubjx)}(hhh]h)}(h$Read the packet's request source ID.h]h&Read the packet’s request source ID.}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjf0hhubah}(h]h ]h"]h$]h&]uh1jwhjq/hhhj/hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1jhhhj+(hNhNubj)}(hX**Parameters** ``const struct ssh_packet *p`` The packet. **Return** Returns the packet's request source ID (SID) field if the packet represents a request with command data, or ``SSAM_SSH_TID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj0ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j)}(h``const struct ssh_packet *p``h]j)}(hj0h]hconst struct ssh_packet *p}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj0ubj)}(hhh]h)}(h The packet.h]h The packet.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhj0hKhj0ubah}(h]h ]h"]h$]h&]uh1jhj0ubh)}(h **Return**h]j)}(hj0h]hReturn}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj0ubh)}(hReturns the packet's request source ID (SID) field if the packet represents a request with command data, or ``SSAM_SSH_TID_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](hnReturns the packet’s request source ID (SID) field if the packet represents a request with command data, or }(hj0hhhNhNubj)}(h``SSAM_SSH_TID_NOT_APPLICABLE``h]hSSAM_SSH_TID_NOT_APPLICABLE}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh- if not (e.g. flush request, control packet).}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j &ssam_trace_get_request_tc (C function)c.ssam_trace_get_request_tchNtauh1jhj+(hhhNhNubj)}(hhh](j)}(h:u32 ssam_trace_get_request_tc (const struct ssh_packet *p)h]j)}(h9u32 ssam_trace_get_request_tc(const struct ssh_packet *p)h](h)}(hhh]jL)}(hu32h]hu32}(hj?1hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj<1ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetjA1modnameN classnameNjHjK)}jN]jQ)}jDssam_trace_get_request_tcsbc.ssam_trace_get_request_tcasbuh1hhj81hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubj5)}(h h]h }(hja1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj81hhhj`1hKubjF)}(hssam_trace_get_request_tch]jL)}(hj]1h]hssam_trace_get_request_tc}(hjs1hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhjo1ubah}(h]h ](j^j_eh"]h$]h&]hhuh1jEhj81hhhj`1hKubj)}(h(const struct ssh_packet *p)h]j )}(hconst struct ssh_packet *ph](j#)}(hjRh]hconst}(hj1hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj1ubj5)}(h h]h }(hj1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj1ubj#)}(hj&h]hstruct}(hj1hhhNhNubah}(h]h ]j/ah"]h$]h&]uh1j"hj1ubj5)}(h h]h }(hj1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj1ubh)}(hhh]jL)}(h ssh_packeth]h ssh_packet}(hj1hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejD reftargetj1modnameN classnameNjHjK)}jN]j[1c.ssam_trace_get_request_tcasbuh1hhj1ubj5)}(h h]h }(hj1hhhNhNubah}(h]h ]jAah"]h$]h&]uh1j4hj1ubje)}(hjhh]h*}(hj1hhhNhNubah}(h]h ]jqah"]h$]h&]uh1jdhj1ubjL)}(hjqh]hp}(hj2hhhNhNubah}(h]h ]jWah"]h$]h&]uh1jKhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj1ubah}(h]h ]h"]h$]h&]hhuh1jhj81hhhj`1hKubeh}(h]h ]h"]h$]h&]hhjiuh1jjjjkhj41hhhj`1hKubah}(h]j/1ah ](jojpeh"]h$]h&]jtju)jvhuh1jhj`1hKhj11hhubjx)}(hhh]h)}(h*Read the packet's request target category.h]h,Read the packet’s request target category.}(hj)2hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj&2hhubah}(h]h ]h"]h$]h&]uh1jwhj11hhhj`1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjA2jjA2jjjuh1jhhhj+(hNhNubj)}(hX**Parameters** ``const struct ssh_packet *p`` The packet. **Return** Returns the packet's request target category (TC) field if the packet represents a request with command data, or ``SSAM_SSH_TC_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](h)}(h**Parameters**h]j)}(hjK2h]h Parameters}(hjM2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjI2ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE2ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j)}(h``const struct ssh_packet *p``h]j)}(hjj2h]hconst struct ssh_packet *p}(hjl2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh2ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjd2ubj)}(hhh]h)}(h The packet.h]h The packet.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jhjd2ubeh}(h]h ]h"]h$]h&]uh1jhj2hKhja2ubah}(h]h ]h"]h$]h&]uh1jhjE2ubh)}(h **Return**h]j)}(hj2h]hReturn}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE2ubh)}(hReturns the packet's request target category (TC) field if the packet represents a request with command data, or ``SSAM_SSH_TC_NOT_APPLICABLE`` if not (e.g. flush request, control packet).h](hsReturns the packet’s request target category (TC) field if the packet represents a request with command data, or }(hj2hhhNhNubj)}(h``SSAM_SSH_TC_NOT_APPLICABLE``h]hSSAM_SSH_TC_NOT_APPLICABLE}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubh- if not (e.g. flush request, control packet).}(hj2hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjE2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj+(hhhNhNubeh}(h]jah ]h"] trace helpersah$]h&]uh1hhhhhhhhKAubeh}(h]hah ]h"]internal 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_handlerj3error_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}(j2hjjj mjjmj?jcjaj%jj((jj2ju nametypes}(j2jj mjmjcj%j((j2uh}(hhjhjjjjjjjbjgj0 j5 j j j j j:j?jj jjjBjGj\jajqjvj"j"jK$jP$j&j&jd(ji(j@*jE*j+j+j .j%.j0j0j3j3j_5jd5j6j6j9j9j:j:j;j;j4Cj9CjDjDjqFjvFjGjGjHjHjIjIjKjKj5Lj:Lj\MjaMjNjNjQjQjRjRjSjSjVjVjFXjKXjYjYjH[jM[j\j\jO_jT_j`j`jnbjsbjcjcjfjfjhjhjkjkj?jmj,mj1mj3nj8njNojSojsjsjujujwjwjxjxj3{j8{j}j}j$j)j9j>jjj;j@jjƉjajpjjjjjjjjj^jcjKjPj"j'j+j0j`jejLjQj`jejܞjjҡjסj-j2jjjjjtjyjj jjjjjjjjjjjjjBjGjjj8j=jjýj j%jjjhjmjjjYj^jjjjjjjjjsjxjwj|jDjIjjjjjjjjjjjjjjj%j*jjjjjj j1j6j~jjIjNj jjjjbjgjj!jjjDjIjjjjjjjjj^jcj6 j; jL jQ jDjIj jjjj>jCjjj|jjjjjjjfjjj(!j-!j #j%#j"$j'$jj%j<%jA%j&j&jj+(jH(jM(j/*j4*j+j+j-j-jo/jt/j/1j41hhjjj9j0j[jRj}jtjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j"3KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.