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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget>/translations/pt_BR/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}(hjhhhNhNubah}(h]hah ]h"]h$]h&]refidinternal-api-documentationuh1jhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]h)}(hhh]j)}(hhh]hPacket Transport Layer}(hj"hhhNhNubah}(h]id2ah ]h"]h$]h&]refidpacket-transport-layeruh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]hRequest Transport Layer}(hjDhhhNhNubah}(h]id3ah ]h"]h$]h&]refidrequest-transport-layeruh1jhjAubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]h Controller}(hjfhhhNhNubah}(h]id4ah ]h"]h$]h&]refid controlleruh1jhjcubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]hClient Device Bus}(hjhhhNhNubah}(h]id5ah ]h"]h$]h&]refidclient-device-busuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]hCore}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refidcoreuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]h)}(hhh]j)}(hhh]h Trace Helpers}(hjhhhNhNubah}(h]id7ah ]h"]h$]h&]refid trace-helpersuh1jhjubah}(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&]hj+uh1hhjhhhhhK 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}(hj8hhhNhNubah}(h]h ]kah"]h$]h&]uh1j6hj2hhh/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 }(hjJhhhNhNubah}(h]h ]wah"]h$]h&]uh1jHhj2hhhjGhKubh desc_name)}(hsshp_bufh]h desc_sig_name)}(hj.h]hsshp_buf}(hjahhhNhNubah}(h]h ]nah"]h$]h&]uh1j_hj[ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jYhj2hhhjGhKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j0sphinx_line_type declaratorhj,hhhjGhKubah}(h]j#ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j*hjGhKhj'hhubh desc_content)}(hhh]h)}(hParser buffer for SSH messages.h]hParser buffer for SSH messages.}(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.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhjGhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j%hhhjhNhNubh 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&]uh1j h/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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj*ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj'hKhjubj)}(h,``len`` Number of bytes used in the buffer. h](j )}(h``len``h]j)}(hjMh]hlen}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjGubj))}(hhh]h)}(h#Number of bytes used in the buffer.h]h#Number of bytes used in the buffer.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhKhjcubah}(h]h ]h"]h$]h&]uh1j(hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhKhjubj)}(h'``cap`` Maximum capacity of the buffer.h](j )}(h``cap``h]j)}(hjh]hcap}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhjubj))}(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&]uh1j(hjubeh}(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]j1)}(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.hhKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(h sshp_buf_inith]j`)}(h sshp_buf_inith]h sshp_buf_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubhdesc_parameterlist)}(h+(struct sshp_buf *buf, u8 *ptr, size_t cap)h](hdesc_parameter)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hj$hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hj1hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hjBhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjDmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j] ASTIdentifier)}jXjsbc.sshp_buf_initasbuh1hhj ubjI)}(h h]h }(hjjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubhdesc_sig_punctuation)}(h*h]h*}(hjzhhhNhNubah}(h]h ]pah"]h$]h&]uh1jxhj ubj`)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hu8 *ptrh](h)}(hhh]j`)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jfc.sshp_buf_initasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hptrh]hptr}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t caph](h)}(hhh]j`)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jfc.sshp_buf_initasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hcaph]hcap}(hj&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(hhh]h)}(hInitialize a SSH parser buffer.h]hInitialize a SSH parser buffer.}(hjPhhhNhNubah}(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.hhKhjMhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhjjhjjjuh1j%hhhjhNhNubj)}(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)}(hjrh]h Parameters}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(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#hjlubj)}(hhh](j)}(h3``struct sshp_buf *buf`` The buffer to initialize. 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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK hjubj))}(hhh]h)}(hThe buffer to initialize.h]hThe buffer to initialize.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK hjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK hjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK!hjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK"hjubeh}(h]h ]h"]h$]h&]uh1jhjlubh)}(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$hjlubh)}(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.}(hjThhhNhNubah}(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#hjlubeh}(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]j1)}(hAint sshp_buf_alloc(struct sshp_buf *buf, size_t cap, gfp_t flags)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK/ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhK/ubjZ)}(hsshp_buf_alloch]j`)}(hsshp_buf_alloch]hsshp_buf_alloc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhK/ubj)}(h/(struct sshp_buf *buf, size_t cap, gfp_t flags)h](j)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.sshp_buf_allocasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t caph](h)}(hhh]j`)}(hsize_th]hsize_t}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj2ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj7modnameN classnameNj\j_)}jb]jc.sshp_buf_allocasbuh1hhj.ubjI)}(h h]h }(hjShhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubj`)}(hcaph]hcap}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h gfp_t flagsh](h)}(hhh]j`)}(hgfp_th]hgfp_t}(hj}hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjzubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.sshp_buf_allocasbuh1hhjvubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjvubj`)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjvubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK/ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj{hhhjhK/ubah}(h]jvah ](jjeh"]h$]h&]jj)jhuh1j*hjhK/hjxhhubj)}(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&]uh1jhjxhhhjhK/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hK0hj*ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj)hK0hj ubj)}(h3``size_t cap`` The desired capacity of the buffer. h](j )}(h``size_t cap``h]j)}(hjMh]h size_t cap}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK1hjGubj))}(hhh]h)}(h#The desired capacity of the buffer.h]h#The desired capacity of the buffer.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhK1hjcubah}(h]h ]h"]h$]h&]uh1j(hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhK1hj ubj)}(h:``gfp_t flags`` The flags used for allocating the memory. 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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK2hjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK2hj ubeh}(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.hhK3hjubh)}(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.hhK6hjubh)}(h=Returns zero on success and ``-ENOMEM`` if allocation failed.h](hReturns zero on success and }(hj hhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh if allocation failed.}(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.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]j1)}(h(void sshp_buf_free(struct sshp_buf *buf)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:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKFubjI)}(h h]h }(hj` hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjM hhhj_ hKFubjZ)}(h sshp_buf_freeh]j`)}(h sshp_buf_freeh]h sshp_buf_free}(hjr hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjn ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjM hhhj_ hKFubj)}(h(struct sshp_buf *buf)h]j)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hj hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjt sbc.sshp_buf_freeasbuh1hhj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj ubj`)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjM hhhj_ hKFubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjI hhhj_ hKFubah}(h]jD ah ](jjeh"]h$]h&]jj)jhuh1j*hj_ hKFhjF hhubj)}(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&]uh1jhjF hhhj_ hKFubeh}(h]h ](jfunctioneh"]h$]h&]jjjj) jj) jjjuh1j%hhhjhNhNubj)}(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)}(hj3 h]h Parameters}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1 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)}(hjR h]hstruct sshp_buf *buf}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKGhjL ubj))}(hhh]h)}(hThe buffer to free.h]hThe buffer to free.}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg hKGhjh ubah}(h]h ]h"]h$]h&]uh1j(hjL ubeh}(h]h ]h"]h$]h&]uh1jhjg hKGhjI 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: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.hhKHhj- 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]j1)}(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.hhKVubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj hhhj hKVubjZ)}(h sshp_buf_droph]j`)}(h sshp_buf_droph]h sshp_buf_drop}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj hhhj hKVubj)}(h (struct sshp_buf *buf, size_t n)h](j)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hj! hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hj. hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hj? hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj< ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjA modnameN classnameNj\j_)}jb]je)}jXj sbc.sshp_buf_dropasbuh1hhj ubjI)}(h h]h }(hj_ hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubjy)}(hj|h]h*}(hjm hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj ubj`)}(hbufh]hbuf}(hjz hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hsize_t nh](h)}(hhh]j`)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]j[ c.sshp_buf_dropasbuh1hhj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubj`)}(hjkh]hn}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hKVubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj hhhj hKVubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j*hj hKVhj hhubj)}(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&]uh1jhj hhhj hKVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA hKWhjB ubah}(h]h ]h"]h$]h&]uh1j(hj& ubeh}(h]h ]h"]h$]h&]uh1jhjA hKWhj# ubj)}(h*``size_t n`` The number of bytes to drop. h](j )}(h ``size_t n``h]j)}(hje h]hsize_t n}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKXhj_ ubj))}(hhh]h)}(hThe number of bytes to drop.h]hThe number of bytes to drop.}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz hKXhj{ ubah}(h]h ]h"]h$]h&]uh1j(hj_ ubeh}(h]h ]h"]h$]h&]uh1jhjz 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.hhKYhj 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]j1)}(hHsize_t sshp_buf_read_from_fifo(struct sshp_buf *buf, struct kfifo *fifo)h](h)}(hhh]j`)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXsshp_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.hhKdubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj hhhj hKdubjZ)}(hsshp_buf_read_from_fifoh]j`)}(hj h]hsshp_buf_read_from_fifo}(hj. hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj* ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj hhhj hKdubj)}(h*(struct sshp_buf *buf, struct kfifo *fifo)h](j)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hjI hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjE ubjI)}(h h]h }(hjV hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjE ubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hjg hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjd ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetji modnameN classnameNj\j_)}jb]j c.sshp_buf_read_from_fifoasbuh1hhjE ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjE ubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjE ubj`)}(hbufh]hbuf}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjE ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubj)}(hstruct kfifo *fifoh](j7)}(hj:h]hstruct}(hj hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hkfifoh]hkfifo}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]j c.sshp_buf_read_from_fifoasbuh1hhj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj ubj`)}(hfifoh]hfifo}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hKdubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj hhhj hKdubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j*hj hKdhj hhubj)}(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.hhKdhj7hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hKdubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j%hhhjhNhNubj)}(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)}(hj\h]h Parameters}(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:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKhhjVubj)}(hhh](j)}(h<``struct sshp_buf *buf`` The buffer to write the data into. h](j )}(h``struct sshp_buf *buf``h]j)}(hj{h]hstruct sshp_buf *buf}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhKehjuubj))}(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&]uh1hhjhKehjubah}(h]h ]h"]h$]h&]uh1j(hjuubeh}(h]h ]h"]h$]h&]uh1jhjhKehjrubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKfhjrubeh}(h]h ]h"]h$]h&]uh1jhjVubh)}(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.hhKhhjVubh)}(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.hhKghjVubh)}(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.hhKlhjVubh)}(h(Returns the number of bytes transferred.h]h(Returns the number of bytes transferred.}(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.hhKmhjVubeh}(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]j1)}(hTvoid sshp_buf_span_from(struct sshp_buf *buf, size_t offset, struct ssam_span *span)h](j)}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK{ubjI)}(h h]h }(hjjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjWhhhjihK{ubjZ)}(hsshp_buf_span_fromh]j`)}(hsshp_buf_span_fromh]hsshp_buf_span_from}(hj|hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjxubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjWhhhjihK{ubj)}(h=(struct sshp_buf *buf, size_t offset, struct ssam_span *span)h](j)}(hstruct sshp_buf *bufh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hsshp_bufh]hsshp_buf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXj~sbc.sshp_buf_span_fromasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hbufh]hbuf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h size_t offseth](h)}(hhh]j`)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.sshp_buf_span_fromasbuh1hhjubjI)}(h h]h }(hj+hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hoffseth]hoffset}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_span *spanh](j7)}(hj:h]hstruct}(hjRhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjNubjI)}(h h]h }(hj_hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjphhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjmubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjrmodnameN classnameNj\j_)}jb]jc.sshp_buf_span_fromasbuh1hhjNubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjNubj`)}(hspanh]hspan}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjWhhhjihK{ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjShhhjihK{ubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1j*hjihK{hjPhhubj)}(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&]uh1jhjPhhhjihK{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hK|hj*ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj)hK|hj ubj)}(hK``size_t offset`` The offset in the buffer at which the span should start. h](j )}(h``size_t offset``h]j)}(hjMh]h size_t offset}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:14: ./drivers/platform/surface/aggregator/ssh_parser.hhK}hjGubj))}(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.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhK}hjcubah}(h]h ]h"]h$]h&]uh1j(hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhK}hj ubj)}(h<``struct ssam_span *span`` The span to initialize (output). h](j )}(h``struct ssam_span *span``h]j)}(hjh]hstruct ssam_span *span}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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 span to initialize (output).h]h The span to initialize (output).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK~hjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK~hj ubeh}(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]j1)}(hBbool sshp_validate_crc(const struct ssam_span *src, const u8 *crc)h](j)}(hboolh]hbool}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chKubjI)}(h h]h }(hj6hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj#hhhj5hKubjZ)}(hsshp_validate_crch]j`)}(hsshp_validate_crch]hsshp_validate_crc}(hjHhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjDubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj#hhhj5hKubj)}(h,(const struct ssam_span *src, const u8 *crc)h](j)}(hconst struct ssam_span *srch](j7)}(hconsth]hconst}(hjdhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjrhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubj7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjJsbc.sshp_validate_crcasbuh1hhj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj`ubj`)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubj)}(h const u8 *crch](j7)}(hjfh]hconst}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.sshp_validate_crcasbuh1hhjubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcrch]hcrc}(hjIhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubeh}(h]h ]h"]h$]h&]hhuh1jhj#hhhj5hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhj5hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj5hKhjhhubj)}(hhh]h)}(h#Validate a CRC in raw message data.h]h#Validate a CRC in raw message data.}(hjshhhNhNubah}(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.chKhjphhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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.chKhjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(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:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhjubh)}(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}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh7), compares it to the CRC stored at the given address (}(hj>hhhNhNubj)}(h**crc**h]hcrc}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh3), and returns the result of this comparison, i.e. }(hj>hhhNhNubj)}(h``true``h]htrue}(hjjhhhNhNubah}(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.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:17: ./drivers/platform/surface/aggregator/ssh_parser.chKhjubh)}(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.chKhjubeh}(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]j1)}(h6bool sshp_starts_with_syn(const struct ssam_span *src)h](j)}(hj)h]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&ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhK&ubjZ)}(hsshp_starts_with_synh]j`)}(hsshp_starts_with_synh]hsshp_starts_with_syn}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhK&ubj)}(h(const struct ssam_span *src)h]j)}(hconst struct ssam_span *srch](j7)}(hjfh]hconst}(hj*hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj&ubjI)}(h h]h }(hj7hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj&ubj7)}(hj:h]hstruct}(hjEhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj&ubjI)}(h h]h }(hjRhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj&ubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjchhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXjsbc.sshp_starts_with_synasbuh1hhj&ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj&ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj&ubj`)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj"ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhK&ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhK&ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhK&hjhhubj)}(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&]uh1jhjhhhjhK&ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(hj h]hconst struct ssam_span *src}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(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.chK'hjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK,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]j1)}(hFbool sshp_find_syn(const struct ssam_span *src, struct ssam_span *rem)h](j)}(hj)h]hbool}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:17: ./drivers/platform/surface/aggregator/ssh_parser.chK/ubjI)}(h h]h }(hjqhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj_hhhjphK/ubjZ)}(h sshp_find_synh]j`)}(h sshp_find_synh]h sshp_find_syn}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj_hhhjphK/ubj)}(h4(const struct ssam_span *src, struct ssam_span *rem)h](j)}(hconst struct ssam_span *srch](j7)}(hjfh]hconst}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.sshp_find_synasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hsrch]hsrc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_span *remh](j7)}(hj:h]hstruct}(hj,hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj(ubjI)}(h h]h }(hj9hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjJhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjGubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjLmodnameN classnameNj\j_)}jb]jc.sshp_find_synasbuh1hhj(ubjI)}(h h]h }(hjhhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubjy)}(hj|h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj(ubj`)}(hremh]hrem}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj_hhhjphK/ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj[hhhjphK/ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1j*hjphK/hjXhhubj)}(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&]uh1jhjXhhhjphK/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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)}(hj'h]hstruct ssam_span *rem}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hK2hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjch]h Description}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(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 }(hjyhhhNhNubj)}(h**rem**h]hrem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubhp span to the remaining data, starting with the first SYN bytes and capped by the source span length, and return }(hjyhhhNhNubj)}(h``true``h]htrue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubhz. This function does not copy any data, but rather only sets pointers to the respective start addresses and length values.}(hjyhhhNhNubeh}(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.chK3hjubh)}(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.chK9hjubh)}(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 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcommandh]hcommand}(hjK hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_span *command_datah](j7)}(hj:h]hstruct}(hjd hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj` ubjI)}(h h]h }(hjq hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj` ubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]j$c.sshp_parse_commandasbuh1hhj` ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj` ubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj` ubj`)}(h command_datah]h command_data}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj` ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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``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&]uh1j h/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&]uh1j(hj!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&]uh1j h/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&]uh1j(hj!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 }(hjU"hhhNhNubj)}(h **source**h]hsource}(hj]"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU"ubha parameter should be the complete frame payload, e.g. returned by the sshp_parse_frame() command.}(hjU"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.}(hjv"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)}(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: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]j1)}(h struct msgbufh](j7)}(hj:h]hstruct}(hj"hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj"hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKubjI)}(h h]h }(hj"hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj"hhhj"hKubjZ)}(hmsgbufh]j`)}(hj"h]hmsgbuf}(hj#hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj #ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj"hhhj"hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj"hhhj"hKubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1j*hj"hKhj"hhubj)}(hhh]h)}(h(Buffer struct to construct SSH messages.h]h(Buffer struct to construct SSH messages.}(hj2#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&]uh1jhj"hhhj"hKubeh}(h]h ](jstructeh"]h$]h&]jjjjJ#jjJ#jjjuh1j%hhhjhNhNubj)}(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}(hjV#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR#ubh:}(hjR#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.hhKhjN#ubj)}(h;struct msgbuf { u8 *begin; u8 *end; u8 *ptr; };h]h;struct msgbuf { u8 *begin; u8 *end; u8 *ptr; };}hjo#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.hhKhjN#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:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKhjN#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&]uh1j h/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&]uh1j(hj#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&]uh1j h/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&]uh1j(hj#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&]uh1j h/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&]uh1j(hj $ubeh}(h]h ]h"]h$]h&]uh1jhj'$hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhjN#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]j1)}(h8void msgb_init(struct msgbuf *msgb, u8 *ptr, size_t cap)h](j)}(hvoidh]hvoid}(hjl$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh$hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKubjI)}(h h]h }(hj{$hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjh$hhhjz$hKubjZ)}(h msgb_inith]j`)}(h msgb_inith]h msgb_init}(hj$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjh$hhhjz$hKubj)}(h*(struct msgbuf *msgb, u8 *ptr, size_t cap)h](j)}(hstruct msgbuf *msgbh](j7)}(hj:h]hstruct}(hj$hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj$ubjI)}(h h]h }(hj$hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj$ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj$modnameN classnameNj\j_)}jb]je)}jXj$sb c.msgb_initasbuh1hhj$ubjI)}(h h]h }(hj$hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj$ubjy)}(hj|h]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj$ubj`)}(hmsgbh]hmsgb}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$ubj)}(hu8 *ptrh](h)}(hhh]j`)}(hu8h]hu8}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj %modnameN classnameNj\j_)}jb]j$ c.msgb_initasbuh1hhj%ubjI)}(h h]h }(hj<%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj%ubjy)}(hj|h]h*}(hjJ%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj%ubj`)}(hptrh]hptr}(hjW%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$ubj)}(h size_t caph](h)}(hhh]j`)}(hsize_th]hsize_t}(hjs%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjp%ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetju%modnameN classnameNj\j_)}jb]j$ c.msgb_initasbuh1hhjl%ubjI)}(h h]h }(hj%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjl%ubj`)}(hcaph]hcap}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjl%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$ubeh}(h]h ]h"]h$]h&]hhuh1jhjh$hhhjz$hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjd$hhhjz$hKubah}(h]j_$ah ](jjeh"]h$]h&]jj)jhuh1j*hjz$hKhja$hhubj)}(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&]uh1jhja$hhhjz$hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hj&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)}(hjC&h]hu8 *ptr}(hjE&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA&ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj\&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX&hK!hjY&ubah}(h]h ]h"]h$]h&]uh1j(hj=&ubeh}(h]h ]h"]h$]h&]uh1jhjX&hK!hj&ubj)}(h.``size_t cap`` Size of the underlying memory. h](j )}(h``size_t cap``h]j)}(hj|&h]h size_t cap}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjz&ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK"hjv&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&]uh1j(hjv&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]j1)}(h1size_t msgb_bytes_used(const struct msgbuf *msgb)h](h)}(hhh]j`)}(hsize_th]hsize_t}(hj&hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj'modnameN classnameNj\j_)}jb]je)}jXmsgb_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.hhK/ubjI)}(h h]h }(hj!'hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj&hhhj 'hK/ubjZ)}(hmsgb_bytes_usedh]j`)}(hj'h]hmsgb_bytes_used}(hj3'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj/'ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj&hhhj 'hK/ubj)}(h(const struct msgbuf *msgb)h]j)}(hconst struct msgbuf *msgbh](j7)}(hjfh]hconst}(hjN'hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjJ'ubjI)}(h h]h }(hj['hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJ'ubj7)}(hj:h]hstruct}(hji'hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjJ'ubjI)}(h h]h }(hjv'hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJ'ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj'modnameN classnameNj\j_)}jb]j'c.msgb_bytes_usedasbuh1hhjJ'ubjI)}(h h]h }(hj'hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJ'ubjy)}(hj|h]h*}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjJ'ubj`)}(hmsgbh]hmsgb}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjJ'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjF'ubah}(h]h ]h"]h$]h&]hhuh1jhj&hhhj 'hK/ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj&hhhj 'hK/ubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j*hj 'hK/hj&hhubj)}(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&]uh1jhj&hhhj 'hK/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hjD(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.hhK0hjA(ubah}(h]h ]h"]h$]h&]uh1j(hj%(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]j1)}(h2void msgb_push_u16(struct msgbuf *msgb, u16 value)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.hhKDubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(hhhj(hKDubjZ)}(h msgb_push_u16h]j`)}(h msgb_push_u16h]h msgb_push_u16}(hj(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj(hhhj(hKDubj)}(h (struct msgbuf *msgb, u16 value)h](j)}(hstruct msgbuf *msgbh](j7)}(hj:h]hstruct}(hj(hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj(ubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj(modnameN classnameNj\j_)}jb]je)}jXj(sbc.msgb_push_u16asbuh1hhj(ubjI)}(h h]h }(hj)hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubjy)}(hj|h]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj(ubj`)}(hmsgbh]hmsgb}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubj)}(h u16 valueh](h)}(hhh]j`)}(hu16h]hu16}(hj7)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj4)ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj9)modnameN classnameNj\j_)}jb]j(c.msgb_push_u16asbuh1hhj0)ubjI)}(h h]h }(hjU)hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj0)ubj`)}(hvalueh]hvalue}(hjc)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj0)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubeh}(h]h ]h"]h$]h&]hhuh1jhj(hhhj(hKDubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj}(hhhj(hKDubah}(h]jx(ah ](jjeh"]h$]h&]jj)jhuh1j*hj(hKDhjz(hhubj)}(hhh]h)}(hPush a u16 value to the buffer.h]hPush a u16 value 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.hhKDhj)hhubah}(h]h ]h"]h$]h&]uh1jhjz(hhhj(hKDubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hj)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&]uh1j h/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&]uh1j(hj*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]j1)}(h'void msgb_push_syn(struct msgbuf *msgb)h](j)}(hvoidh]hvoid}(hja*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.hhKQubjI)}(h h]h }(hjp*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj]*hhhjo*hKQubjZ)}(h msgb_push_synh]j`)}(h msgb_push_synh]h msgb_push_syn}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~*ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj]*hhhjo*hKQubj)}(h(struct msgbuf *msgb)h]j)}(hstruct msgbuf *msgbh](j7)}(hj:h]hstruct}(hj*hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj*ubjI)}(h h]h }(hj*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj*ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj*modnameN classnameNj\j_)}jb]je)}jXj*sbc.msgb_push_synasbuh1hhj*ubjI)}(h h]h }(hj*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj*ubjy)}(hj|h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj*ubj`)}(hmsgbh]hmsgb}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubah}(h]h ]h"]h$]h&]hhuh1jhj]*hhhjo*hKQubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjY*hhhjo*hKQubah}(h]jT*ah ](jjeh"]h$]h&]jj)jhuh1j*hjo*hKQhjV*hhubj)}(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&]uh1jhjV*hhhjo*hKQubeh}(h]h ](jfunctioneh"]h$]h&]jjjj9+jj9+jjjuh1j%hhhjhNhNubj)}(h=**Parameters** ``struct msgbuf *msgb`` The message buffer.h](h)}(h**Parameters**h]j)}(hjC+h]h Parameters}(hjE+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA+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)}(hjb+h]hstruct msgbuf *msgb}(hjd+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`+ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKWhj\+ubj))}(hhh]h)}(hThe message buffer.h]hThe message 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.hhKRhjx+ubah}(h]h ]h"]h$]h&]uh1j(hj\+ubeh}(h]h ]h"]h$]h&]uh1jhjw+hKWhjY+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]j1)}(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.hhKZubjI)}(h h]h }(hj+hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj+hhhj+hKZubjZ)}(h msgb_push_bufh]j`)}(h msgb_push_bufh]h msgb_push_buf}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj+hhhj+hKZubj)}(h0(struct msgbuf *msgb, const u8 *buf, size_t len)h](j)}(hstruct msgbuf *msgbh](j7)}(hj:h]hstruct}(hj+hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj+ubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj+ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj,modnameN classnameNj\j_)}jb]je)}jXj+sbc.msgb_push_bufasbuh1hhj+ubjI)}(h h]h }(hj7,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj+ubjy)}(hj|h]h*}(hjE,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj+ubj`)}(hmsgbh]hmsgb}(hjR,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(h const u8 *bufh](j7)}(hjfh]hconst}(hjk,hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjg,ubjI)}(h h]h }(hjx,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjg,ubh)}(hhh]j`)}(hu8h]hu8}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj,modnameN classnameNj\j_)}jb]j3,c.msgb_push_bufasbuh1hhjg,ubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjg,ubjy)}(hj|h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjg,ubj`)}(hbufh]hbuf}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjg,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(h size_t lenh](h)}(hhh]j`)}(hsize_th]hsize_t}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj,modnameN classnameNj\j_)}jb]j3,c.msgb_push_bufasbuh1hhj,ubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj,ubj`)}(hlenh]hlen}(hj -hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubeh}(h]h ]h"]h$]h&]hhuh1jhj+hhhj+hKZubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj+hhhj+hKZubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j*hj+hKZhj+hhubj)}(hhh]h)}(hPush raw data to the buffer.h]hPush raw data to the buffer.}(hj4-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.hhKZhj1-hhubah}(h]h ]h"]h$]h&]uh1jhj+hhhj+hKZubeh}(h]h ](jfunctioneh"]h$]h&]jjjjL-jjL-jjjuh1j%hhhjhNhNubj)}(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)}(hjV-h]h Parameters}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT-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^hjP-ubj)}(hhh](j)}(h,``struct msgbuf *msgb`` The message buffer. h](j )}(h``struct msgbuf *msgb``h]j)}(hju-h]hstruct msgbuf *msgb}(hjw-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs-ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhK[hjo-ubj))}(hhh]h)}(hThe message buffer.h]hThe message buffer.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hK[hj-ubah}(h]h ]h"]h$]h&]uh1j(hjo-ubeh}(h]h ]h"]h$]h&]uh1jhj-hK[hjl-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&]uh1j h/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&]uh1j(hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hK\hjl-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&]uh1j h/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&]uh1j(hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hK^hjl-ubeh}(h]h ]h"]h$]h&]uh1jhjP-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]j1)}(hBvoid msgb_push_crc(struct msgbuf *msgb, const u8 *buf, size_t len)h](j)}(hvoidh]hvoid}(hjA.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.hhKeubjI)}(h h]h }(hjP.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj=.hhhjO.hKeubjZ)}(h msgb_push_crch]j`)}(h msgb_push_crch]h msgb_push_crc}(hjb.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^.ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj=.hhhjO.hKeubj)}(h0(struct msgbuf *msgb, const u8 *buf, size_t len)h](j)}(hstruct msgbuf *msgbh](j7)}(hj:h]hstruct}(hj~.hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjz.ubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjz.ubh)}(hhh]j`)}(hmsgbufh]hmsgbuf}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj.modnameN classnameNj\j_)}jb]je)}jXjd.sbc.msgb_push_crcasbuh1hhjz.ubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjz.ubjy)}(hj|h]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjz.ubj`)}(hmsgbh]hmsgb}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjz.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjv.ubj)}(h const u8 *bufh](j7)}(hjfh]hconst}(hj.hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj.ubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubh)}(hhh]j`)}(hu8h]hu8}(hj/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj /ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj/modnameN classnameNj\j_)}jb]j.c.msgb_push_crcasbuh1hhj.ubjI)}(h h]h }(hj,/hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubjy)}(hj|h]h*}(hj:/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj.ubj`)}(hbufh]hbuf}(hjG/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjv.ubj)}(h size_t lenh](h)}(hhh]j`)}(hsize_th]hsize_t}(hjc/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`/ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetje/modnameN classnameNj\j_)}jb]j.c.msgb_push_crcasbuh1hhj\/ubjI)}(h h]h }(hj/hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj\/ubj`)}(hlenh]hlen}(hj/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj\/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjv.ubeh}(h]h ]h"]h$]h&]hhuh1jhj=.hhhjO.hKeubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj9.hhhjO.hKeubah}(h]j4.ah ](jjeh"]h$]h&]jj)jhuh1j*hjO.hKehj6.hhubj)}(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&]uh1jhj6.hhhjO.hKeubeh}(h]h ](jfunctioneh"]h$]h&]jjjj/jj/jjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKfhj0ubah}(h]h ]h"]h$]h&]uh1j(hj/ubeh}(h]h ]h"]h$]h&]uh1jhj0hKfhj/ubj)}(hA``const u8 *buf`` The data for which the CRC should be computed. h](j )}(h``const u8 *buf``h]j)}(hj30h]h const u8 *buf}(hj50hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj10ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKghj-0ubj))}(hhh]h)}(h.The data for which the CRC should be computed.h]h.The data for which the CRC should be computed.}(hjL0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH0hKghjI0ubah}(h]h ]h"]h$]h&]uh1j(hj-0ubeh}(h]h ]h"]h$]h&]uh1jhjH0hKghj/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)}(hjl0h]h size_t len}(hjn0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj0ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:20: ./drivers/platform/surface/aggregator/ssh_msgb.hhKihjf0ubj))}(hhh]h)}(h`.h](hState-flags for }(hj?:hhhNhNubh)}(h":c:type:`struct ssh_ptl `h]j)}(hjI:h]hstruct ssh_ptl}(hjK:hhhNhNubah}(h]h ](xrefjc-typeeh"]h$]h&]uh1jhjG:ubah}(h]h ]h"]h$]h&]refdoc*driver-api/surface_aggregator/internal-api refdomainjreftypetype refexplicitrefwarnj\j_)}jb]je)}jXj9sbc.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&]uh1jhj9hhhj :hKubeh}(h]h ](jenumeh"]h$]h&]jjjj:jj:jjjuh1j%hhhjhNhNubj)}(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&]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.hhKhj: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&]uh1j h/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&]uh1j(hj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hK hj:ubah}(h]h ]h"]h$]h&]uh1jhj: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]j1)}(hstruct ssh_ptl_opsh](j7)}(hj:h]hstruct}(hj;hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj;hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK&ubjI)}(h h]h }(hj;hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj;hhhj;hK&ubjZ)}(h ssh_ptl_opsh]j`)}(hj;h]h ssh_ptl_ops}(hj';hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#;ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj;hhhj;hK&ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj:hhhj;hK&ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1j*hj;hK&hj:hhubj)}(hhh]h)}(h/Callback operations for packet transport layer.h]h/Callback operations for packet transport layer.}(hjI;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$hjF;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj;hK&ubeh}(h]h ](jstructeh"]h$]h&]jjjja;jja;jjjuh1j%hhhjhNhNubj)}(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}(hjm;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji;ubh:}(hji;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(hje;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); };}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.hhK*hje;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.hje;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&]uh1j h/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&]uh1j(hj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hK'hj;ubah}(h]h ]h"]h$]h&]uh1jhje;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]j1)}(hstruct ssh_ptlh](j7)}(hj:h]hstruct}(hj<hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj <hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK.ubjI)}(h h]h }(hj<hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj <hhhj<hK.ubjZ)}(hssh_ptlh]j`)}(hj <h]hssh_ptl}(hj0<hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,<ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj <hhhj<hK.ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj<hhhj<hK.ubah}(h]j<ah ](jjeh"]h$]h&]jj)jhuh1j*hj<hK.hj<hhubj)}(hhh]h)}(hSSH packet transport layer.h]hSSH packet transport layer.}(hjR<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.hjO<hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj<hK.ubeh}(h]h ](jstructeh"]h$]h&]jjjjj<jjj<jjjuh1j%hhhjhNhNubj)}(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}(hjv<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr<ubh:}(hjr<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.hhK2hjn<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.hhK4hjn<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.hhKZhjn<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&]uh1j h/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&]uh1j(hj<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&]uh1j h/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&]uh1j(hj<ubeh}(h]h ]h"]h$]h&]uh1jhj =hK1hj<ubj)}(h#``queue`` Packet submission queue. h](j )}(h ``queue``h]j)}(hj1=h]hqueue}(hj3=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/=ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjJ=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF=hK2hjG=ubah}(h]h ]h"]h$]h&]uh1j(hj+=ubeh}(h]h ]h"]h$]h&]uh1jhjF=hK2hj<ubj)}(h?``queue.lock`` Lock for modifying the packet submission queue. h](j )}(h``queue.lock``h]j)}(hjj=h]h queue.lock}(hjl=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh=ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK3hjd=ubj))}(hhh]h)}(h/Lock for modifying the packet submission queue.h]h/Lock for modifying the packet submission queue.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hK3hj=ubah}(h]h ]h"]h$]h&]uh1j(hjd=ubeh}(h]h ]h"]h$]h&]uh1jhj=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&]uh1j h/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&]uh1j(hj=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&]uh1j h/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&]uh1j(hj=ubeh}(h]h ]h"]h$]h&]uh1j<hj=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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK6hj>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&]uh1j(hj>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)}(hjN>h]h pending.head}(hjP>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL>ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK7hjH>ubj))}(hhh]h)}(h"List-head of the pending set/list.h]h"List-head of the pending set/list.}(hjg>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjc>hK7hjd>ubah}(h]h ]h"]h$]h&]uh1j(hjH>ubeh}(h]h ]h"]h$]h&]uh1jhjc>hK7hj<ubj)}(h7``pending.count`` Number of currently pending packets. h](j )}(h``pending.count``h]j)}(hj>h]h pending.count}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK8hj>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&]uh1j(hj>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&]uh1j h/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&]uh1j(hj>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&]uh1j h/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&]uh1j(hj>ubeh}(h]h ]h"]h$]h&]uh1jhj?hK:hj<ubj)}(h"``tx.thread`` Transmitter thread. h](j )}(h ``tx.thread``h]j)}(hj2?h]h tx.thread}(hj4?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0?ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjK?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG?hK;hjH?ubah}(h]h ]h"]h$]h&]uh1j(hj,?ubeh}(h]h ]h"]h$]h&]uh1jhjG?hK;hj<ubj)}(hM``tx.thread_cplt_tx`` Completion for transmitter thread waiting on transfer. h](j )}(h``tx.thread_cplt_tx``h]j)}(hjk?h]htx.thread_cplt_tx}(hjm?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji?ubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hj?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&]uh1j h/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&]uh1j(hj@ubeh}(h]h ]h"]h$]h&]uh1jhj+@hK?hj<ubj)}(h``rx.thread`` Receiver thread. h](j )}(h ``rx.thread``h]j)}(hjO@h]h rx.thread}(hjQ@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM@ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhK@hjI@ubj))}(hhh]h)}(hReceiver thread.h]hReceiver thread.}(hjh@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd@hK@hje@ubah}(h]h ]h"]h$]h&]uh1j(hjI@ubeh}(h]h ]h"]h$]h&]uh1jhjd@hK@hj<ubj)}(h.``rx.wq`` Waitqueue-head for receiver thread. h](j )}(h ``rx.wq``h]j)}(hj@h]hrx.wq}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKAhj@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&]uh1j(hj@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&]uh1j h/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&]uh1j(hj@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&]uh1j h/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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKChjAubah}(h]h ]h"]h$]h&]uh1j(hj@ubeh}(h]h ]h"]h$]h&]uh1jhjAhKChj<ubj)}(hM``rx.blocked`` List of recent/blocked sequence IDs to detect retransmission. h](j )}(h``rx.blocked``h]j)}(hj3Ah]h rx.blocked}(hj5AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Aubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKDhj-Aubj))}(hhh]h)}(h=List of recent/blocked sequence IDs to detect retransmission.h]h=List of recent/blocked sequence IDs to detect retransmission.}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHAhKDhjIAubah}(h]h ]h"]h$]h&]uh1j(hj-Aubeh}(h]h ]h"]h$]h&]uh1jhjHAhKDhj<ubj)}(h3``rx.blocked.seqs`` Array of blocked sequence IDs. h](j )}(h``rx.blocked.seqs``h]j)}(hjlAh]hrx.blocked.seqs}(hjnAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjAubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKEhjfAubj))}(hhh]h)}(hArray of blocked sequence IDs.h]hArray of blocked sequence IDs.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKEhjAubah}(h]h ]h"]h$]h&]uh1j(hjfAubeh}(h]h ]h"]h$]h&]uh1jhjAhKEhj<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&]uh1j h/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&]uh1j(hjAubeh}(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&]uh1j h/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&]uh1j(hjAubeh}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKHhjBubj))}(hhh]h)}(h5Lock for modifying the retransmission timeout reaper.h]h5Lock for modifying the retransmission timeout reaper.}(hj0BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,BhKHhj-Bubah}(h]h ]h"]h$]h&]uh1j(hjBubeh}(h]h ]h"]h$]h&]uh1jhj,BhKHhj<ubj)}(h=``rtx_timeout.timeout`` Timeout interval for retransmission. h](j )}(h``rtx_timeout.timeout``h]j)}(hjPBh]hrtx_timeout.timeout}(hjRBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNBubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKIhjJBubj))}(hhh]h)}(h$Timeout interval for retransmission.h]h$Timeout interval for retransmission.}(hjiBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeBhKIhjfBubah}(h]h ]h"]h$]h&]uh1j(hjJBubeh}(h]h ]h"]h$]h&]uh1jhjeBhKIhj<ubj)}(hP``rtx_timeout.expires`` Time specifying when the reaper work is next scheduled. h](j )}(h``rtx_timeout.expires``h]j)}(hjBh]hrtx_timeout.expires}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKJhjBubj))}(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&]uh1j(hjBubeh}(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&]uh1j h/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&]uh1j(hjBubeh}(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&]uh1j h/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.hhKLhjCubah}(h]h ]h"]h$]h&]uh1j(hjBubeh}(h]h ]h"]h$]h&]uh1jhjChKKhj<ubeh}(h]h ]h"]h$]h&]uh1jhjn<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]j1)}(h6struct device *ssh_ptl_get_device(struct ssh_ptl *ptl)h](j7)}(hj:h]hstruct}(hjUChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjQChhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKubjI)}(h h]h }(hjcChhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjQChhhjbChKubh)}(hhh]j`)}(hdeviceh]hdevice}(hjtChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjqCubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjvCmodnameN classnameNj\j_)}jb]je)}jXssh_ptl_get_devicesbc.ssh_ptl_get_deviceasbuh1hhjQChhhjbChKubjI)}(h h]h }(hjChhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjQChhhjbChKubjy)}(hj|h]h*}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjQChhhjbChKubjZ)}(hssh_ptl_get_deviceh]j`)}(hjCh]hssh_ptl_get_device}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjQChhhjbChKubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjCubjI)}(h h]h }(hjChhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjCubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjCmodnameN classnameNj\j_)}jb]jCc.ssh_ptl_get_deviceasbuh1hhjCubjI)}(h h]h }(hj DhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjCubjy)}(hj|h]h*}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjCubj`)}(hptlh]hptl}(hj&DhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjCubah}(h]h ]h"]h$]h&]hhuh1jhjQChhhjbChKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjMChhhjbChKubah}(h]jHCah ](jjeh"]h$]h&]jj)jhuh1j*hjbChKhjJChhubj)}(hhh]h)}(h2Get device associated with packet transport layer.h]h2Get device associated with packet transport layer.}(hjPDhhhNhNubah}(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.hhKhjMDhhubah}(h]h ]h"]h$]h&]uh1jhjJChhhjbChKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjhDjjhDjjjuh1j%hhhjhNhNubj)}(h**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Return** Returns the device on which the given packet transport layer builds upon.h](h)}(h**Parameters**h]j)}(hjrDh]h Parameters}(hjtDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpDubah}(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.hhKhjlDubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjDh]hstruct ssh_ptl *ptl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhjDubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjDubah}(h]h ]h"]h$]h&]uh1j(hjDubeh}(h]h ]h"]h$]h&]uh1jhjDhKhjDubah}(h]h ]h"]h$]h&]uh1jhjlDubh)}(h **Return**h]j)}(hjDh]hReturn}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(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.hhKhjlDubh)}(hIReturns the device on which the given packet transport layer builds upon.h]hIReturns the device on which the given packet transport layer builds upon.}(hjDhhhNhNubah}(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.hhKhjlDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!'ssh_ptl_tx_wakeup_transfer (C function)c.ssh_ptl_tx_wakeup_transferhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h5void ssh_ptl_tx_wakeup_transfer (struct ssh_ptl *ptl)h]j1)}(h4void ssh_ptl_tx_wakeup_transfer(struct ssh_ptl *ptl)h](j)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Ehhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKubjI)}(h h]h }(hj EhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj EhhhjEhKubjZ)}(hssh_ptl_tx_wakeup_transferh]j`)}(hssh_ptl_tx_wakeup_transferh]hssh_ptl_tx_wakeup_transfer}(hj2EhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.Eubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj EhhhjEhKubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjNEhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjJEubjI)}(h h]h }(hj[EhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJEubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjlEhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiEubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjnEmodnameN classnameNj\j_)}jb]je)}jXj4Esbc.ssh_ptl_tx_wakeup_transferasbuh1hhjJEubjI)}(h h]h }(hjEhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJEubjy)}(hj|h]h*}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjJEubj`)}(hptlh]hptl}(hjEhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjJEubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjFEubah}(h]h ]h"]h$]h&]hhuh1jhj EhhhjEhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj EhhhjEhKubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1j*hjEhKhjEhhubj)}(hhh]h)}(h/Wake up packet transmitter thread for transfer.h]h/Wake up packet transmitter thread for transfer.}(hjEhhhNhNubah}(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.hhKhjEhhubah}(h]h ]h"]h$]h&]uh1jhjEhhhjEhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1j%hhhjhNhNubj)}(hX/**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Description** Wakes up the packet transmitter thread, notifying it that the underlying transport has more space for data to be transmitted. If the packet transport layer has been shut down, calls to this function will be ignored.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:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhjEubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjFh]hstruct ssh_ptl *ptl}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:23: ./drivers/platform/surface/aggregator/ssh_packet_layer.hhKhj Fubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hj+FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'FhKhj(Fubah}(h]h ]h"]h$]h&]uh1j(hj Fubeh}(h]h ]h"]h$]h&]uh1jhj'FhKhj Fubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hjMFh]h Description}(hjOFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKFubah}(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.hhKhjEubh)}(hWakes up the packet transmitter thread, notifying it that the underlying transport has more space for data to be transmitted. 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 the underlying transport has more space for data to be transmitted. If the packet transport layer has been shut down, calls to this function will be ignored.}(hjcFhhhNhNubah}(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.hhKhjEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!+ssh_ptl_should_drop_ack_packet (C function) c.ssh_ptl_should_drop_ack_packethNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h*bool ssh_ptl_should_drop_ack_packet (void)h]j1)}(h)bool ssh_ptl_should_drop_ack_packet(void)h](j)}(hj)h]hbool}(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.chKubjI)}(h h]h }(hjFhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjFhhhjFhKubjZ)}(hssh_ptl_should_drop_ack_packeth]j`)}(hssh_ptl_should_drop_ack_packeth]hssh_ptl_should_drop_ack_packet}(hjFhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjFubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjFhhhjFhKubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]noemphhhuh1jhjFubah}(h]h ]h"]h$]h&]hhuh1jhjFhhhjFhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjFhhhjFhKubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1j*hjFhKhjFhhubj)}(hhh]h)}(h)Error injection hook to drop ACK packets.h]h)Error injection hook to drop ACK packets.}(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.chKhjFhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjFhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1j%hhhjhNhNubj)}(hX**Parameters** ``void`` no arguments **Description** Useful 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](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(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.chKhjGubj)}(hhh]j)}(h``void`` no arguments h](j )}(h``void``h]j)}(hj9Gh]hvoid}(hj;GhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7Gubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhj3Gubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjRGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNGhKhjOGubah}(h]h ]h"]h$]h&]uh1j(hj3Gubeh}(h]h ]h"]h$]h&]uh1jhjNGhKhj0Gubah}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjtGh]h Description}(hjvGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrGubah}(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.}(hjGhhhNhNubah}(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]j1)}(h)bool ssh_ptl_should_drop_nak_packet(void)h](j)}(hj)h]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.chKubjI)}(h h]h }(hjGhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjGhhhjGhKubjZ)}(hssh_ptl_should_drop_nak_packeth]j`)}(hssh_ptl_should_drop_nak_packeth]hssh_ptl_should_drop_nak_packet}(hjGhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjGubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjGhhhjGhKubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]noemphhhuh1jhjGubah}(h]h ]h"]h$]h&]hhuh1jhjGhhhjGhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjGhhhjGhKubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1j*hjGhKhjGhhubj)}(hhh]h)}(h)Error injection hook to drop NAK packets.h]h)Error injection hook to drop NAK packets.}(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.chKhjHhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7Hjj7Hjjjuh1j%hhhjhNhNubj)}(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)}(hjAHh]h Parameters}(hjCHhhhNhNubah}(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)}(hj`Hh]hvoid}(hjbHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Hubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhjZHubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjyHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuHhKhjvHubah}(h]h ]h"]h$]h&]uh1j(hjZHubeh}(h]h ]h"]h$]h&]uh1jhjuHhKhjWHubah}(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.chKhj;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]j1)}(h)bool ssh_ptl_should_drop_dsq_packet(void)h](j)}(hj)h]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.chMubjI)}(h h]h }(hjHhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjHhhhjHhMubjZ)}(hssh_ptl_should_drop_dsq_packeth]j`)}(hssh_ptl_should_drop_dsq_packeth]hssh_ptl_should_drop_dsq_packet}(hjIhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjHubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjHhhhjHhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]noemphhhuh1jhjIubah}(h]h ]h"]h$]h&]hhuh1jhjHhhhjHhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjHhhhjHhMubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1j*hjHhMhjHhhubj)}(hhh]h)}(h3Error injection hook to drop sequenced data packet.h]h3Error injection hook to drop sequenced data packet.}(hjFIhhhNhNubah}(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.chMhjCIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^Ijj^Ijjjuh1j%hhhjhNhNubj)}(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)}(hjhIh]h Parameters}(hjjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfIubah}(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 hjbIubj)}(hhh]j)}(h``void`` no arguments h](j )}(h``void``h]j)}(hjIh]hvoid}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chKhjIubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhKhjIubah}(h]h ]h"]h$]h&]uh1j(hjIubeh}(h]h ]h"]h$]h&]uh1jhjIhKhj~Iubah}(h]h ]h"]h$]h&]uh1jhjbIubh)}(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.chKhjbIubh)}(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.chMhjbIubeh}(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]j1)}(h#int ssh_ptl_should_fail_write(void)h](j)}(hinth]hint}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubjI)}(h h]h }(hjJhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJhhhjJhMubjZ)}(hssh_ptl_should_fail_writeh]j`)}(hssh_ptl_should_fail_writeh]hssh_ptl_should_fail_write}(hj(JhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$Jubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjJhhhjJhMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjDJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@Jubah}(h]h ]h"]h$]h&]noemphhhuh1jhjhjMubeh}(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]j1)}(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.chM0ubjI)}(h h]h }(hjNhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNhhhjNhM0ubjZ)}(hssh_packet_inith]j`)}(hssh_packet_inith]hssh_packet_init}(hjNhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjNhhhjNhM0ubj)}(h^(struct ssh_packet *packet, unsigned long type, u8 priority, const struct ssh_packet_ops *ops)h](j)}(hstruct ssh_packet *packeth](j7)}(hj:h]hstruct}(hjNhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjNubjI)}(h h]h }(hjNhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hjNhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjOmodnameN classnameNj\j_)}jb]je)}jXjNsbc.ssh_packet_initasbuh1hhjNubjI)}(h h]h }(hjOhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubjy)}(hj|h]h*}(hj-OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjNubj`)}(hpacketh]hpacket}(hj:OhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubj)}(hunsigned long typeh](j)}(hunsignedh]hunsigned}(hjSOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOOubjI)}(h h]h }(hjaOhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOOubj)}(hlongh]hlong}(hjoOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOOubjI)}(h h]h }(hj}OhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOOubj`)}(htypeh]htype}(hjOhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjOOubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubj)}(h u8 priorityh](h)}(hhh]j`)}(hu8h]hu8}(hjOhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjOubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjOmodnameN classnameNj\j_)}jb]jOc.ssh_packet_initasbuh1hhjOubjI)}(h h]h }(hjOhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubj`)}(hpriorityh]hpriority}(hjOhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubj)}(h const struct ssh_packet_ops *opsh](j7)}(hjfh]hconst}(hjOhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjOubjI)}(h h]h }(hjOhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubj7)}(hj:h]hstruct}(hjPhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjOubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubh)}(hhh]j`)}(hssh_packet_opsh]hssh_packet_ops}(hj%PhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj"Pubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj'PmodnameN classnameNj\j_)}jb]jOc.ssh_packet_initasbuh1hhjOubjI)}(h h]h }(hjCPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubjy)}(hj|h]h*}(hjQPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjOubj`)}(hopsh]hops}(hj^PhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjNubeh}(h]h ]h"]h$]h&]hhuh1jhjNhhhjNhM0ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjNhhhjNhM0ubah}(h]jNah ](jjeh"]h$]h&]jj)jhuh1j*hjNhM0hjNhhubj)}(hhh]h)}(hInitialize SSH packet.h]hInitialize SSH packet.}(hjPhhhNhNubah}(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.chM0hjPhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjNhM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjPjjPjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM1hjPubj)}(h1``unsigned long type`` Type-flags of the packet. h](j )}(h``unsigned long type``h]j)}(hjQh]hunsigned long type}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hjPubeh}(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&]uh1jhj9Qubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM3hj5Qubj))}(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.}(hjTQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPQhM3hjQQubah}(h]h ]h"]h$]h&]uh1j(hj5Qubeh}(h]h ]h"]h$]h&]uh1jhjPQhM3hjPubj)}(h8``const struct ssh_packet_ops *ops`` Packet operations. h](j )}(h$``const struct ssh_packet_ops *ops``h]j)}(hjtQh]h const struct ssh_packet_ops *ops}(hjvQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrQubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM4hjnQubj))}(hhh]h)}(hPacket operations.h]hPacket operations.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhM4hjQubah}(h]h ]h"]h$]h&]uh1j(hjnQubeh}(h]h ]h"]h$]h&]uh1jhjQhM4hjPubeh}(h]h ]h"]h$]h&]uh1jhjPubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(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.chM6hjPubh)}(hX;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](hJInitializes the given SSH packet. Sets the transmission buffer pointer to }(hjQhhhNhNubj)}(h``NULL``h]hNULL}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh 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.}(hjQhhhNhNubeh}(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.chM5hjPubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!'ssh_ctrl_packet_cache_init (C function)c.ssh_ctrl_packet_cache_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h%int ssh_ctrl_packet_cache_init (void)h]j1)}(h$int ssh_ctrl_packet_cache_init(void)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMRubjI)}(h h]h }(hjRhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjRhhhjRhMRubjZ)}(hssh_ctrl_packet_cache_inith]j`)}(hssh_ctrl_packet_cache_inith]hssh_ctrl_packet_cache_init}(hj'RhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#Rubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjRhhhjRhMRubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjCRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Rubah}(h]h ]h"]h$]h&]noemphhhuh1jhj;Rubah}(h]h ]h"]h$]h&]hhuh1jhjRhhhjRhMRubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjQhhhjRhMRubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1j*hjRhMRhjQhhubj)}(hhh]h)}(h$Initialize the control packet cache.h]h$Initialize the control packet cache.}(hjmRhhhNhNubah}(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.chMRhjjRhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjRhMRubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j%hhhjhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjRh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(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.chMVhjRubj)}(hhh]j)}(h``void`` no argumentsh](j )}(h``void``h]j)}(hjRh]hvoid}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMXhjRubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjRhhhNhNubah}(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.chKhjRubah}(h]h ]h"]h$]h&]uh1j(hjRubeh}(h]h ]h"]h$]h&]uh1jhjRhMXhjRubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!*ssh_ctrl_packet_cache_destroy (C function)c.ssh_ctrl_packet_cache_destroyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h)void ssh_ctrl_packet_cache_destroy (void)h]j1)}(h(void ssh_ctrl_packet_cache_destroy(void)h](j)}(hvoidh]hvoid}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMcubjI)}(h h]h }(hjShhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjShhhjShMcubjZ)}(hssh_ctrl_packet_cache_destroyh]j`)}(hssh_ctrl_packet_cache_destroyh]hssh_ctrl_packet_cache_destroy}(hj)ShhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%Subah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjShhhjShMcubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjEShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjASubah}(h]h ]h"]h$]h&]noemphhhuh1jhj=Subah}(h]h ]h"]h$]h&]hhuh1jhjShhhjShMcubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjShhhjShMcubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1j*hjShMchjRhhubj)}(hhh]h)}(h&Deinitialize the control packet cache.h]h&Deinitialize the control packet cache.}(hjoShhhNhNubah}(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.chMchjlShhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjShMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1j%hhhjhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(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.chMghjSubj)}(hhh]j)}(h``void`` no argumentsh](j )}(h``void``h]j)}(hjSh]hvoid}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMihjSubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjShhhNhNubah}(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.chKhjSubah}(h]h ]h"]h$]h&]uh1j(hjSubeh}(h]h ]h"]h$]h&]uh1jhjShMihjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssh_ctrl_packet_alloc (C function)c.ssh_ctrl_packet_allochNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h]int ssh_ctrl_packet_alloc (struct ssh_packet **packet, struct ssam_span *buffer, gfp_t flags)h]j1)}(h\int ssh_ctrl_packet_alloc(struct ssh_packet **packet, struct ssam_span *buffer, gfp_t flags)h](j)}(hinth]hint}(hj ThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjThhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMlubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjThhhjThMlubjZ)}(hssh_ctrl_packet_alloch]j`)}(hssh_ctrl_packet_alloch]hssh_ctrl_packet_alloc}(hj+ThhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'Tubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjThhhjThMlubj)}(hC(struct ssh_packet **packet, struct ssam_span *buffer, gfp_t flags)h](j)}(hstruct ssh_packet **packeth](j7)}(hj:h]hstruct}(hjGThhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjCTubjI)}(h h]h }(hjTThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjCTubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hjeThhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbTubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjgTmodnameN classnameNj\j_)}jb]je)}jXj-Tsbc.ssh_ctrl_packet_allocasbuh1hhjCTubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjCTubjy)}(hj|h]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjCTubjy)}(hj|h]h*}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjCTubj`)}(hpacketh]hpacket}(hjThhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCTubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?Tubj)}(hstruct ssam_span *bufferh](j7)}(hj:h]hstruct}(hjThhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjTubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjTubh)}(hhh]j`)}(h ssam_spanh]h ssam_span}(hjThhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjTubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjTmodnameN classnameNj\j_)}jb]jTc.ssh_ctrl_packet_allocasbuh1hhjTubjI)}(h h]h }(hjUhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjTubjy)}(hj|h]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjTubj`)}(hbufferh]hbuffer}(hjUhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjTubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?Tubj)}(h gfp_t flagsh](h)}(hhh]j`)}(hgfp_th]hgfp_t}(hj9UhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6Uubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj;UmodnameN classnameNj\j_)}jb]jTc.ssh_ctrl_packet_allocasbuh1hhj2UubjI)}(h h]h }(hjWUhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj2Uubj`)}(hflagsh]hflags}(hjeUhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj2Uubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?Tubeh}(h]h ]h"]h$]h&]hhuh1jhjThhhjThMlubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjThhhjThMlubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1j*hjThMlhjShhubj)}(hhh]h)}(h*Allocate packet from control packet cache.h]h*Allocate packet from control packet cache.}(hjUhhhNhNubah}(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.chMlhjUhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjThMlubeh}(h]h ](jfunctioneh"]h$]h&]jjjjUjjUjjjuh1j%hhhjhNhNubj)}(hX**Parameters** ``struct ssh_packet **packet`` Where the pointer to the newly allocated packet should be stored. ``struct ssam_span *buffer`` The buffer corresponding to this packet. ``gfp_t flags`` Flags used for allocation. **Description** Allocates a packet and corresponding transport buffer from the control packet cache. Sets the packet's buffer reference to the allocated buffer. The packet must be freed via ssh_ctrl_packet_free(), which will also free the corresponding buffer. The corresponding buffer must not be freed separately. Intended to be used with ``ssh_ptl_ctrl_packet_ops`` as packet operations. **Return** Returns zero on success, ``-ENOMEM`` if the allocation failed.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:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMphjUubj)}(hhh](j)}(ha``struct ssh_packet **packet`` Where the pointer to the newly allocated packet should be stored. h](j )}(h``struct ssh_packet **packet``h]j)}(hjUh]hstruct ssh_packet **packet}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMmhjUubj))}(hhh]h)}(hAWhere the pointer to the newly allocated packet should be stored.h]hAWhere the pointer to the newly allocated packet should be stored.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhMmhjUubah}(h]h ]h"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]uh1jhjUhMmhjUubj)}(hF``struct ssam_span *buffer`` The buffer corresponding to this packet. h](j )}(h``struct ssam_span *buffer``h]j)}(hj Vh]hstruct ssam_span *buffer}(hj VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMnhjVubj))}(hhh]h)}(h(The buffer corresponding to this packet.h]h(The buffer corresponding to this packet.}(hj"VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMnhjVubah}(h]h ]h"]h$]h&]uh1j(hjVubeh}(h]h ]h"]h$]h&]uh1jhjVhMnhjUubj)}(h+``gfp_t flags`` Flags used for allocation. h](j )}(h``gfp_t flags``h]j)}(hjBVh]h gfp_t flags}(hjDVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@Vubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMohjReturns 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]j1)}(h/void ssh_ctrl_packet_free(struct ssh_packet *p)h](j)}(hvoidh]hvoid}(hj WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Whhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubjI)}(h h]h }(hjWhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj WhhhjWhMubjZ)}(hssh_ctrl_packet_freeh]j`)}(hssh_ctrl_packet_freeh]hssh_ctrl_packet_free}(hj.WhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*Wubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj WhhhjWhMubj)}(h(struct ssh_packet *p)h]j)}(hstruct ssh_packet *ph](j7)}(hj:h]hstruct}(hjJWhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjFWubjI)}(h h]h }(hjWWhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjFWubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hjhWhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjeWubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjjWmodnameN classnameNj\j_)}jb]je)}jXj0Wsbc.ssh_ctrl_packet_freeasbuh1hhjFWubjI)}(h h]h }(hjWhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjFWubjy)}(hj|h]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjFWubj`)}(hjh]hp}(hjWhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjFWubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjBWubah}(h]h ]h"]h$]h&]hhuh1jhj WhhhjWhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjWhhhjWhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1j*hjWhMhjWhhubj)}(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&]uh1jhjWhhhjWhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjWjjWjjjuh1j%hhhjhNhNubj)}(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)}(hj Xh]hstruct ssh_packet *p}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Xubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjXubj))}(hhh]h)}(hThe packet to free.h]hThe packet to free.}(hj&XhhhNhNubah}(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#Xubah}(h]h ]h"]h$]h&]uh1j(hjXubeh}(h]h ]h"]h$]h&]uh1jhj"XhMhjXubah}(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]j1)}(h2void ssh_ptl_tx_wakeup_packet(struct ssh_ptl *ptl)h](j)}(hvoidh]hvoid}(hjgXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjcXhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMjubjI)}(h h]h }(hjvXhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjcXhhhjuXhMjubjZ)}(hssh_ptl_tx_wakeup_packeth]j`)}(hssh_ptl_tx_wakeup_packeth]hssh_ptl_tx_wakeup_packet}(hjXhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjcXhhhjuXhMjubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjXhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjXubjI)}(h h]h }(hjXhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjXhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjXmodnameN classnameNj\j_)}jb]je)}jXjXsbc.ssh_ptl_tx_wakeup_packetasbuh1hhjXubjI)}(h h]h }(hjXhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubjy)}(hj|h]h*}(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjXubj`)}(hptlh]hptl}(hjXhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjXubah}(h]h ]h"]h$]h&]hhuh1jhjcXhhhjuXhMjubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj_XhhhjuXhMjubah}(h]jZXah ](jjeh"]h$]h&]jj)jhuh1j*hjuXhMjhj\Xhhubj)}(hhh]h)}(h1Wake up packet transmitter thread for new packet.h]h1Wake up packet transmitter thread for new packet.}(hj'YhhhNhNubah}(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.chMjhj$Yhhubah}(h]h ]h"]h$]h&]uh1jhj\XhhhjuXhMjubeh}(h]h ](jfunctioneh"]h$]h&]jjjj?Yjj?Yjjjuh1j%hhhjhNhNubj)}(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)}(hjIYh]h Parameters}(hjKYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGYubah}(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.chMnhjCYubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjhYh]hstruct ssh_ptl *ptl}(hjjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfYubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMlhjbYubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}YhMlhj~Yubah}(h]h ]h"]h$]h&]uh1j(hjbYubeh}(h]h ]h"]h$]h&]uh1jhj}YhMlhj_Yubah}(h]h ]h"]h$]h&]uh1jhjCYubh)}(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.chMnhjCYubh)}(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.chMmhjCYubeh}(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]j1)}(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.chM{ubjI)}(h h]h }(hjYhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjYhhhjYhM{ubjZ)}(hssh_ptl_tx_starth]j`)}(hssh_ptl_tx_starth]hssh_ptl_tx_start}(hj ZhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjZubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjYhhhjYhM{ubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hj%ZhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj!ZubjI)}(h h]h }(hj2ZhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj!Zubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjCZhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj@Zubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjEZmodnameN classnameNj\j_)}jb]je)}jXj Zsbc.ssh_ptl_tx_startasbuh1hhj!ZubjI)}(h h]h }(hjcZhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj!Zubjy)}(hj|h]h*}(hjqZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj!Zubj`)}(hptlh]hptl}(hj~ZhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj!Zubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZubah}(h]h ]h"]h$]h&]hhuh1jhjYhhhjYhM{ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjYhhhjYhM{ubah}(h]jYah ](jjeh"]h$]h&]jj)jhuh1j*hjYhM{hjYhhubj)}(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&]uh1jhjYhhhjYhM{ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjZjjZjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhM|hjZubah}(h]h ]h"]h$]h&]uh1j(hjZubeh}(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]j1)}(h(int ssh_ptl_tx_stop(struct ssh_ptl *ptl)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:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubjI)}(h h]h }(hjx[hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhje[hhhjw[hMubjZ)}(hssh_ptl_tx_stoph]j`)}(hssh_ptl_tx_stoph]hssh_ptl_tx_stop}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj[ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhje[hhhjw[hMubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hj[hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj[ubjI)}(h h]h }(hj[hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj[ubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj[ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj[modnameN classnameNj\j_)}jb]je)}jXj[sbc.ssh_ptl_tx_stopasbuh1hhj[ubjI)}(h h]h }(hj[hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj[ubjy)}(hj|h]h*}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj[ubj`)}(hptlh]hptl}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj[ubah}(h]h ]h"]h$]h&]hhuh1jhje[hhhjw[hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhja[hhhjw[hMubah}(h]j\[ah ](jjeh"]h$]h&]jj)jhuh1j*hjw[hMhj^[hhubj)}(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&]uh1jhj^[hhhjw[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjA\jjA\jjjuh1j%hhhjhNhNubj)}(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)}(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:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjE\ubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjj\h]hstruct ssh_ptl *ptl}(hjl\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh\ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjd\ubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj\ubah}(h]h ]h"]h$]h&]uh1j(hjd\ubeh}(h]h ]h"]h$]h&]uh1jhj\hMhja\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:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjE\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.chMhjE\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]j1)}(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.chMubjI)}(h h]h }(hj\hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj\hhhj\hMubjZ)}(hssh_ptl_submith]j`)}(hssh_ptl_submith]hssh_ptl_submit}(hj ]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj]ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj\hhhj\hMubj)}(h+(struct ssh_ptl *ptl, struct ssh_packet *p)h](j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hj']hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj#]ubjI)}(h h]h }(hj4]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj#]ubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjE]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjB]ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjG]modnameN classnameNj\j_)}jb]je)}jXj ]sbc.ssh_ptl_submitasbuh1hhj#]ubjI)}(h h]h }(hje]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj#]ubjy)}(hj|h]h*}(hjs]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj#]ubj`)}(hptlh]hptl}(hj]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#]ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubj)}(hstruct ssh_packet *ph](j7)}(hj:h]hstruct}(hj]hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj]ubjI)}(h h]h }(hj]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj]ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj]ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj]modnameN classnameNj\j_)}jb]ja]c.ssh_ptl_submitasbuh1hhj]ubjI)}(h h]h }(hj]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj]ubjy)}(hj|h]h*}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj]ubj`)}(hjh]hp}(hj]hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubeh}(h]h ]h"]h$]h&]hhuh1jhj\hhhj\hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj\hhhj\hMubah}(h]j\ah ](jjeh"]h$]h&]jj)jhuh1j*hj\hMhj\hhubj)}(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&]uh1jhj\hhhj\hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj1^jj1^jjjuh1j%hhhjhNhNubj)}(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&]uh1jhj9^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.chMhj5^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)}(hjZ^h]hstruct ssh_ptl *ptl}(hj\^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX^ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjT^ubj))}(hhh]h)}(h3The packet transport layer to submit the packet to.h]h3The packet transport layer to submit the packet to.}(hjs^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo^hMhjp^ubah}(h]h ]h"]h$]h&]uh1j(hjT^ubeh}(h]h ]h"]h$]h&]uh1jhjo^hMhjQ^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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhj^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&]uh1j(hj^ubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjQ^ubeh}(h]h ]h"]h$]h&]uh1jhj5^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.chMhj5^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.chMhj5^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.chMhj5^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}(hj7_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.chMhj5^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]j1)}(h)void ssh_ptl_cancel(struct ssh_packet *p)h](j)}(hvoidh]hvoid}(hjp_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl_hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMubjI)}(h h]h }(hj_hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjl_hhhj~_hMubjZ)}(hssh_ptl_cancelh]j`)}(hssh_ptl_cancelh]hssh_ptl_cancel}(hj_hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjl_hhhj~_hMubj)}(h(struct ssh_packet *p)h]j)}(hstruct ssh_packet *ph](j7)}(hj:h]hstruct}(hj_hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj_ubjI)}(h h]h }(hj_hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj_ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj_hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj_modnameN classnameNj\j_)}jb]je)}jXj_sbc.ssh_ptl_cancelasbuh1hhj_ubjI)}(h h]h }(hj_hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj_ubjy)}(hj|h]h*}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj_ubj`)}(hjh]hp}(hj`hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj_ubah}(h]h ]h"]h$]h&]hhuh1jhjl_hhhj~_hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjh_hhhj~_hMubah}(h]jc_ah ](jjeh"]h$]h&]jj)jhuh1j*hj~_hMhje_hhubj)}(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&]uh1jhje_hhhj~_hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjG`jjG`jjjuh1j%hhhjhNhNubj)}(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)}(hjQ`h]h Parameters}(hjS`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO`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.chMhjK`ubj)}(hhh]j)}(h/``struct ssh_packet *p`` The packet to cancel. h](j )}(h``struct ssh_packet *p``h]j)}(hjp`h]hstruct ssh_packet *p}(hjr`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn`ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjj`ubj))}(hhh]h)}(hThe packet to cancel.h]hThe packet to cancel.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1j(hjj`ubeh}(h]h ]h"]h$]h&]uh1jhj`hMhjg`ubah}(h]h ]h"]h$]h&]uh1jhjK`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.chMhjK`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.chMhjK`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.chMhjK`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.chMhjK`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]j1)}(h)int ssh_ptl_rx_start(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ahhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM0ubjI)}(h h]h }(hjahhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ahhhjahM0ubjZ)}(hssh_ptl_rx_starth]j`)}(hssh_ptl_rx_starth]hssh_ptl_rx_start}(hj/ahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+aubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj ahhhjahM0ubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjKahhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjGaubjI)}(h h]h }(hjXahhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjGaubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjiahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjfaubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjkamodnameN classnameNj\j_)}jb]je)}jXj1asbc.ssh_ptl_rx_startasbuh1hhjGaubjI)}(h h]h }(hjahhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjGaubjy)}(hj|h]h*}(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjGaubj`)}(hptlh]hptl}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjGaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjCaubah}(h]h ]h"]h$]h&]hhuh1jhj ahhhjahM0ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjahhhjahM0ubah}(h]jaah ](jjeh"]h$]h&]jj)jhuh1j*hjahM0hjahhubj)}(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&]uh1jhjahhhjahM0ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1j%hhhjhNhNubj)}(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)}(hjbh]hstruct ssh_ptl *ptl}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj bubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chM1hj bubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hj(bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$bhM1hj%bubah}(h]h ]h"]h$]h&]uh1j(hj bubeh}(h]h ]h"]h$]h&]uh1jhj$bhM1hjbubah}(h]h ]h"]h$]h&]uh1jhjaubh)}(h **Return**h]j)}(hjJbh]hReturn}(hjLbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHbubah}(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.}(hj`bhhhNhNubah}(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]j1)}(h(int ssh_ptl_rx_stop(struct ssh_ptl *ptl)h](j)}(hinth]hint}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMCubjI)}(h h]h }(hjbhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjbhhhjbhMCubjZ)}(hssh_ptl_rx_stoph]j`)}(hssh_ptl_rx_stoph]hssh_ptl_rx_stop}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjbhhhjbhMCubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjbhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjbubjI)}(h h]h }(hjbhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjbubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjbmodnameN classnameNj\j_)}jb]je)}jXjbsbc.ssh_ptl_rx_stopasbuh1hhjbubjI)}(h h]h }(hj chhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjbubjy)}(hj|h]h*}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjbubj`)}(hptlh]hptl}(hj%chhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjbubah}(h]h ]h"]h$]h&]hhuh1jhjbhhhjbhMCubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjbhhhjbhMCubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1j*hjbhMChjbhhubj)}(hhh]h)}(h,Stop packet transport layer receiver thread.h]h,Stop packet transport layer receiver thread.}(hjOchhhNhNubah}(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.chMChjLchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMCubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgcjjgcjjjuh1j%hhhjhNhNubj)}(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)}(hjqch]h Parameters}(hjschhhNhNubah}(h]h ]h"]h$]h&]uh1jhjocubah}(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.chMGhjkcubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjch]hstruct ssh_ptl *ptl}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMDhjcubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMDhjcubah}(h]h ]h"]h$]h&]uh1j(hjcubeh}(h]h ]h"]h$]h&]uh1jhjchMDhjcubah}(h]h ]h"]h$]h&]uh1jhjkcubh)}(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.chMFhjkcubh)}(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.chMFhjkcubeh}(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]j1)}(hGssize_t ssh_ptl_rx_rcvbuf(struct ssh_ptl *ptl, const u8 *buf, size_t n)h](h)}(hhh]j`)}(hssize_th]hssize_t}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjdubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjdmodnameN classnameNj\j_)}jb]je)}jXssh_ptl_rx_rcvbufsbc.ssh_ptl_rx_rcvbufasbuh1hhj dhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMUubjI)}(h h]h }(hj5dhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj dhhhj4dhMUubjZ)}(hssh_ptl_rx_rcvbufh]j`)}(hj1dh]hssh_ptl_rx_rcvbuf}(hjGdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjCdubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj dhhhj4dhMUubj)}(h.(struct ssh_ptl *ptl, const u8 *buf, size_t n)h](j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjbdhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj^dubjI)}(h h]h }(hjodhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj^dubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj}dubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjdmodnameN classnameNj\j_)}jb]j/dc.ssh_ptl_rx_rcvbufasbuh1hhj^dubjI)}(h h]h }(hjdhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj^dubjy)}(hj|h]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj^dubj`)}(hptlh]hptl}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^dubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZdubj)}(h const u8 *bufh](j7)}(hjfh]hconst}(hjdhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjdubjI)}(h h]h }(hjdhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjdubh)}(hhh]j`)}(hu8h]hu8}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjdubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjdmodnameN classnameNj\j_)}jb]j/dc.ssh_ptl_rx_rcvbufasbuh1hhjdubjI)}(h h]h }(hjehhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjdubjy)}(hj|h]h*}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjdubj`)}(hbufh]hbuf}(hj)ehhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjdubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZdubj)}(hsize_t nh](h)}(hhh]j`)}(hsize_th]hsize_t}(hjEehhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjBeubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjGemodnameN classnameNj\j_)}jb]j/dc.ssh_ptl_rx_rcvbufasbuh1hhj>eubjI)}(h h]h }(hjcehhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj>eubj`)}(hjkh]hn}(hjqehhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj>eubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZdubeh}(h]h ]h"]h$]h&]hhuh1jhj dhhhj4dhMUubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjdhhhj4dhMUubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1j*hj4dhMUhjdhhubj)}(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&]uh1jhjdhhhj4dhMUubeh}(h]h ](jfunctioneh"]h$]h&]jjjjejjejjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjeubeh}(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&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMXhjfubj))}(hhh]h)}(h)Pointer to the data to push to the layer.h]h)Pointer to the data to push to the layer.}(hj-fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)fhMXhj*fubah}(h]h ]h"]h$]h&]uh1j(hjfubeh}(h]h ]h"]h$]h&]uh1jhj)fhMXhjeubj)}(h>``size_t n`` Size of the data to push to the layer, in bytes. h](j )}(h ``size_t n``h]j)}(hjMfh]hsize_t n}(hjOfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKfubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMYhjGfubj))}(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.}(hjffhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbfhMYhjcfubah}(h]h ]h"]h$]h&]uh1j(hjGfubeh}(h]h ]h"]h$]h&]uh1jhjbfhMYhjeubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjfh]h Description}(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)}(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.chMZhjeubh)}(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]j1)}(h*void ssh_ptl_shutdown(struct ssh_ptl *ptl)h](j)}(hvoidh]hvoid}(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.chMqubjI)}(h h]h }(hjghhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjghhhjghMqubjZ)}(hssh_ptl_shutdownh]j`)}(hssh_ptl_shutdownh]hssh_ptl_shutdown}(hj'ghhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#gubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjghhhjghMqubj)}(h(struct ssh_ptl *ptl)h]j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjCghhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?gubjI)}(h h]h }(hjPghhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?gubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjaghhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^gubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjcgmodnameN classnameNj\j_)}jb]je)}jXj)gsbc.ssh_ptl_shutdownasbuh1hhj?gubjI)}(h h]h }(hjghhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?gubjy)}(hj|h]h*}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj?gubj`)}(hptlh]hptl}(hjghhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?gubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;gubah}(h]h ]h"]h$]h&]hhuh1jhjghhhjghMqubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjfhhhjghMqubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1j*hjghMqhjfhhubj)}(hhh]h)}(h%Shut down the packet transport layer.h]h%Shut down the packet transport layer.}(hjghhhNhNubah}(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.chMqhjghhubah}(h]h ]h"]h$]h&]uh1jhjfhhhjghMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1j%hhhjhNhNubj)}(hX**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer. **Description** Shuts down the packet transport layer, removing and canceling all queued and pending packets. Packets canceled by this operation will be completed with ``-ESHUTDOWN`` as status. Receiver and transmitter threads will be stopped. As a result of this function, the transport layer will be marked as shut down. Submission of packets after the transport layer has been shut down will fail with ``-ESHUTDOWN``.h](h)}(h**Parameters**h]j)}(hjgh]h Parameters}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(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.chMuhjgubj)}(hhh]j)}(h4``struct ssh_ptl *ptl`` The packet transport layer. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjhh]hstruct ssh_ptl *ptl}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMrhjhubj))}(hhh]h)}(hThe packet transport layer.h]hThe packet transport layer.}(hj hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMrhjhubah}(h]h ]h"]h$]h&]uh1j(hjhubeh}(h]h ]h"]h$]h&]uh1jhjhhMrhjgubah}(h]h ]h"]h$]h&]uh1jhjgubh)}(h**Description**h]j)}(hjBhh]h Description}(hjDhhhhNhNubah}(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.chMthjgubh)}(hShuts down the packet transport layer, removing and canceling all queued and pending packets. Packets canceled by this operation will be completed with ``-ESHUTDOWN`` as status. Receiver and transmitter threads will be stopped.h](hShuts down the packet transport layer, removing and canceling all queued and pending packets. Packets canceled by this operation will be completed with }(hjXhhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj`hhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXhubh= as status. Receiver and transmitter threads will be stopped.}(hjXhhhhNhNubeh}(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.chMshjgubh)}(hAs a result of this function, the transport layer will be marked as shut down. Submission of packets 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 packets after the transport layer has been shut down will fail with }(hjyhhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyhubh.}(hjyhhhhNhNubeh}(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.chMxhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_ptl_init (C function)c.ssh_ptl_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h]int ssh_ptl_init (struct ssh_ptl *ptl, struct serdev_device *serdev, struct ssh_ptl_ops *ops)h]j1)}(h\int ssh_ptl_init(struct ssh_ptl *ptl, struct serdev_device *serdev, struct ssh_ptl_ops *ops)h](j)}(hinth]hint}(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.chMubjI)}(h h]h }(hjhhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhhjhhMubjZ)}(h ssh_ptl_inith]j`)}(h ssh_ptl_inith]h ssh_ptl_init}(hjhhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjhubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhhjhhMubj)}(hL(struct ssh_ptl *ptl, struct serdev_device *serdev, struct ssh_ptl_ops *ops)h](j)}(hstruct ssh_ptl *ptlh](j7)}(hj:h]hstruct}(hjhhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhubjI)}(h h]h }(hjihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhubh)}(hhh]j`)}(hssh_ptlh]hssh_ptl}(hjihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjimodnameN classnameNj\j_)}jb]je)}jXjhsbc.ssh_ptl_initasbuh1hhjhubjI)}(h h]h }(hj5ihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhubjy)}(hj|h]h*}(hjCihhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjhubj`)}(hptlh]hptl}(hjPihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjhubj)}(hstruct serdev_device *serdevh](j7)}(hj:h]hstruct}(hjiihhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjeiubjI)}(h h]h }(hjvihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjeiubh)}(hhh]j`)}(h serdev_deviceh]h serdev_device}(hjihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjimodnameN classnameNj\j_)}jb]j1ic.ssh_ptl_initasbuh1hhjeiubjI)}(h h]h }(hjihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjeiubjy)}(hj|h]h*}(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjeiubj`)}(hserdevh]hserdev}(hjihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjeiubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjhubj)}(hstruct ssh_ptl_ops *opsh](j7)}(hj:h]hstruct}(hjihhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjiubjI)}(h h]h }(hjihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjiubh)}(hhh]j`)}(h ssh_ptl_opsh]h ssh_ptl_ops}(hjihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjimodnameN classnameNj\j_)}jb]j1ic.ssh_ptl_initasbuh1hhjiubjI)}(h h]h }(hjjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjiubjy)}(hj|h]h*}(hj#jhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjiubj`)}(hopsh]hops}(hj0jhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjhubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhhjhhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhhjhhMubah}(h]jhah ](jjeh"]h$]h&]jj)jhuh1j*hjhhMhjhhhubj)}(hhh]h)}(h"Initialize packet transport layer.h]h"Initialize packet transport layer.}(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&]uh1jhjhhhhjhhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjrjjjrjjjjuh1j%hhhjhNhNubj)}(hXC**Parameters** ``struct ssh_ptl *ptl`` The packet transport layer to initialize. ``struct serdev_device *serdev`` The underlying serial device, i.e. the lower-level transport. ``struct ssh_ptl_ops *ops`` Packet layer operations. **Description** Initializes the given packet transport layer. Transmitter and receiver threads must be started separately via ssh_ptl_tx_start() and ssh_ptl_rx_start(), after the packet-layer has been initialized and the lower-level transport layer has been set up. **Return** Returns zero on success and a nonzero error code on failure.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)}(hB``struct ssh_ptl *ptl`` The packet transport layer to initialize. h](j )}(h``struct ssh_ptl *ptl``h]j)}(hjjh]hstruct ssh_ptl *ptl}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjjubj))}(hhh]h)}(h)The packet transport layer to initialize.h]h)The packet transport layer to initialize.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1j(hjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(h_``struct serdev_device *serdev`` The underlying serial device, i.e. the lower-level transport. h](j )}(h ``struct serdev_device *serdev``h]j)}(hjjh]hstruct serdev_device *serdev}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjjubj))}(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.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjhMhjjubah}(h]h ]h"]h$]h&]uh1j(hjjubeh}(h]h ]h"]h$]h&]uh1jhjjhMhjjubj)}(h5``struct ssh_ptl_ops *ops`` Packet layer operations. h](j )}(h``struct ssh_ptl_ops *ops``h]j)}(hj kh]hstruct ssh_ptl_ops *ops}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj kubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:26: ./drivers/platform/surface/aggregator/ssh_packet_layer.chMhjkubj))}(hhh]h)}(hPacket layer operations.h]hPacket layer operations.}(hj&khhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"khMhj#kubah}(h]h ]h"]h$]h&]uh1j(hjkubeh}(h]h ]h"]h$]h&]uh1jhj"khMhjjubeh}(h]h ]h"]h$]h&]uh1jhjvjubh)}(h**Description**h]j)}(hjHkh]h Description}(hjJkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFkubah}(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)}(hInitializes the given packet transport layer. Transmitter and receiver threads must be started separately via ssh_ptl_tx_start() and ssh_ptl_rx_start(), after the packet-layer has been initialized and the lower-level transport layer has been set up.h]hInitializes the given packet transport layer. Transmitter and receiver threads must be started separately via ssh_ptl_tx_start() and ssh_ptl_rx_start(), after the packet-layer has been initialized and the lower-level transport layer has been set up.}(hj^khhhNhNubah}(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)}(h **Return**h]j)}(hjokh]hReturn}(hjqkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmkubah}(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)}(h`.h](hState-flags for }(hjmhhhNhNubh)}(h":c:type:`struct ssh_rtl `h]j)}(hjmh]hstruct ssh_rtl}(hjmhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\j_)}jb]je)}jXjGmsbc.ssh_rtl_state_flagsasbjn:ssh_rtluh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhjmubh.}(hjmhhhNhNubeh}(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.hhKhjmhhubah}(h]h ]h"]h$]h&]uh1jhjBmhhhjZmhKubeh}(h]h ](jenumeh"]h$]h&]jjjjmjjmjjjuh1j%hhhj#mhNhNubj)}(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&]uh1j h/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&]uh1hhjnhKhjnubah}(h]h ]h"]h$]h&]uh1j(hjmubeh}(h]h ]h"]h$]h&]uh1jhjnhKhjmubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_ops (C struct) c.ssh_rtl_opshNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h ssh_rtl_opsh]j1)}(hstruct ssh_rtl_opsh](j7)}(hj:h]hstruct}(hjTnhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjPnhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK$ubjI)}(h h]h }(hjbnhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjPnhhhjanhK$ubjZ)}(h ssh_rtl_opsh]j`)}(hjNnh]h ssh_rtl_ops}(hjtnhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjpnubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjPnhhhjanhK$ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjLnhhhjanhK$ubah}(h]jGnah ](jjeh"]h$]h&]jj)jhuh1j*hjanhK$hjInhhubj)}(hhh]h)}(h0Callback operations for request transport layer.h]h0Callback operations for request transport layer.}(hjnhhhNhNubah}(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"hjnhhubah}(h]h ]h"]h$]h&]uh1jhjInhhhjanhK$ubeh}(h]h ](jstructeh"]h$]h&]jjjjnjjnjjjuh1j%hhhj#mhNhNubj)}(hX**Definition**:: struct ssh_rtl_ops { void (*handle_event)(struct ssh_rtl *rtl, const struct ssh_command *cmd, const struct ssam_span *data); }; **Members** ``handle_event`` Function called when a SSH event has been received. The specified function takes the request layer, received command struct, and corresponding payload as arguments. If the event has no payload, the payload span is empty (not ``NULL``).h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubh:}(hjnhhhNhNubeh}(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&hjnubj)}(hstruct ssh_rtl_ops { void (*handle_event)(struct ssh_rtl *rtl, const struct ssh_command *cmd, const struct ssam_span *data); };h]hstruct ssh_rtl_ops { void (*handle_event)(struct ssh_rtl *rtl, const struct ssh_command *cmd, const struct ssam_span *data); };}hjnsbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK(hjnubh)}(h **Members**h]j)}(hjnh]hMembers}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(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,hjnubj)}(hhh]j)}(h``handle_event`` Function called when a SSH event has been received. The specified function takes the request layer, received command struct, and corresponding payload as arguments. If the event has no payload, the payload span is empty (not ``NULL``).h](j )}(h``handle_event``h]j)}(hjoh]h handle_event}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK&hjnubj))}(hhh]h)}(hFunction called when a SSH event has been received. The specified function takes the request layer, received command struct, and corresponding payload as arguments. If the event has no payload, the payload span is empty (not ``NULL``).h](hFunction called when a SSH event has been received. The specified function takes the request layer, received command struct, and corresponding payload as arguments. If the event has no payload, the payload span is empty (not }(hjohhhNhNubj)}(h``NULL``h]hNULL}(hj$ohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh).}(hjohhhNhNubeh}(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$hjoubah}(h]h ]h"]h$]h&]uh1j(hjnubeh}(h]h ]h"]h$]h&]uh1jhjohK&hjnubah}(h]h ]h"]h$]h&]uh1jhjnubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl (C struct) c.ssh_rtlhNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(hssh_rtlh]j1)}(hstruct ssh_rtlh](j7)}(hj:h]hstruct}(hjoohhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjkohhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK-ubjI)}(h h]h }(hj}ohhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjkohhhj|ohK-ubjZ)}(hssh_rtlh]j`)}(hjioh]hssh_rtl}(hjohhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjoubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjkohhhj|ohK-ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjgohhhj|ohK-ubah}(h]jboah ](jjeh"]h$]h&]jj)jhuh1j*hj|ohK-hjdohhubj)}(hhh]h)}(hSSH request transport layer.h]hSSH request transport layer.}(hjohhhNhNubah}(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.hjohhubah}(h]h ]h"]h$]h&]uh1jhjdohhhj|ohK-ubeh}(h]h ](jstructeh"]h$]h&]jjjjojjojjjuh1j%hhhj#mhNhNubj)}(hX**Definition**:: struct ssh_rtl { struct ssh_ptl ptl; 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 { struct work_struct work; } tx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_rtl_ops ops; }; **Members** ``ptl`` Underlying packet transport layer. ``state`` State(-flags) of the transport layer. ``queue`` Request submission queue. ``queue.lock`` Lock for modifying the request submission queue. ``queue.head`` List-head of the request submission queue. ``pending`` Set/list of pending requests. ``pending.lock`` Lock for modifying the request set. ``pending.head`` List-head of the pending set/list. ``pending.count`` Number of currently pending requests. ``tx`` Transmitter subsystem. ``tx.work`` Transmitter work item. ``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`` Request layer operations.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubh:}(hjohhhNhNubeh}(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.hhK2hjoubj)}(hXstruct ssh_rtl { struct ssh_ptl ptl; 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 { struct work_struct work; } tx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_rtl_ops ops; };h]hXstruct ssh_rtl { struct ssh_ptl ptl; 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 { struct work_struct work; } tx; struct { spinlock_t lock; ktime_t timeout; ktime_t expires; struct delayed_work reaper; } rtx_timeout; struct ssh_rtl_ops ops; };}hjosbah}(h]h ]h"]h$]h&]hhuh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK4hjoubh)}(h **Members**h]j)}(hjoh]hMembers}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(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.hhKLhjoubj)}(hhh](j)}(h+``ptl`` Underlying packet transport layer. h](j )}(h``ptl``h]j)}(hjph]hptl}(hj phhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK0hjpubj))}(hhh]h)}(h"Underlying packet transport layer.h]h"Underlying packet transport layer.}(hj7phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3phK0hj4pubah}(h]h ]h"]h$]h&]uh1j(hjpubeh}(h]h ]h"]h$]h&]uh1jhj3phK0hjpubj)}(h0``state`` State(-flags) of the transport layer. h](j )}(h ``state``h]j)}(hjWph]hstate}(hjYphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUpubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK1hjQpubj))}(hhh]h)}(h%State(-flags) of the transport layer.h]h%State(-flags) of the transport layer.}(hjpphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlphK1hjmpubah}(h]h ]h"]h$]h&]uh1j(hjQpubeh}(h]h ]h"]h$]h&]uh1jhjlphK1hjpubj)}(h$``queue`` Request submission queue. h](j )}(h ``queue``h]j)}(hjph]hqueue}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK2hjpubj))}(hhh]h)}(hRequest submission queue.h]hRequest submission queue.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK2hjpubah}(h]h ]h"]h$]h&]uh1j(hjpubeh}(h]h ]h"]h$]h&]uh1jhjphK2hjpubj)}(h@``queue.lock`` Lock for modifying the request submission queue. h](j )}(h``queue.lock``h]j)}(hjph]h queue.lock}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK3hjpubj))}(hhh]h)}(h0Lock for modifying the request submission queue.h]h0Lock for modifying the request submission queue.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK3hjpubah}(h]h ]h"]h$]h&]uh1j(hjpubeh}(h]h ]h"]h$]h&]uh1jhjphK3hjpubj)}(h:``queue.head`` List-head of the request submission queue. h](j )}(h``queue.head``h]j)}(hjqh]h queue.head}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK4hjpubj))}(hhh]h)}(h*List-head of the request submission queue.h]h*List-head of the request submission queue.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhK4hjqubah}(h]h ]h"]h$]h&]uh1j(hjpubeh}(h]h ]h"]h$]h&]uh1jhjqhK4hjpubj)}(h*``pending`` Set/list of pending requests. h](j )}(h ``pending``h]j)}(hj;qh]hpending}(hj=qhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9qubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK5hj5qubj))}(hhh]h)}(hSet/list of pending requests.h]hSet/list of pending requests.}(hjTqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPqhK5hjQqubah}(h]h ]h"]h$]h&]uh1j(hj5qubeh}(h]h ]h"]h$]h&]uh1jhjPqhK5hjpubj)}(h5``pending.lock`` Lock for modifying the request set. h](j )}(h``pending.lock``h]j)}(hjtqh]h pending.lock}(hjvqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrqubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK6hjnqubj))}(hhh]h)}(h#Lock for modifying the request set.h]h#Lock for modifying the request set.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhK6hjqubah}(h]h ]h"]h$]h&]uh1j(hjnqubeh}(h]h ]h"]h$]h&]uh1jhjqhK6hjpubj)}(h4``pending.head`` List-head of the pending set/list. h](j )}(h``pending.head``h]j)}(hjqh]h pending.head}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK7hjqubj))}(hhh]h)}(h"List-head of the pending set/list.h]h"List-head of the pending set/list.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhK7hjqubah}(h]h ]h"]h$]h&]uh1j(hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhK7hjpubj)}(h8``pending.count`` Number of currently pending requests. h](j )}(h``pending.count``h]j)}(hjqh]h pending.count}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK8hjqubj))}(hhh]h)}(h%Number of currently pending requests.h]h%Number of currently pending requests.}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhK8hjqubah}(h]h ]h"]h$]h&]uh1j(hjqubeh}(h]h ]h"]h$]h&]uh1jhjqhK8hjpubj)}(h``tx`` Transmitter subsystem. h](j )}(h``tx``h]j)}(hjrh]htx}(hj!rhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK9hjrubj))}(hhh]h)}(hTransmitter subsystem.h]hTransmitter subsystem.}(hj8rhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4rhK9hj5rubah}(h]h ]h"]h$]h&]uh1j(hjrubeh}(h]h ]h"]h$]h&]uh1jhj4rhK9hjpubj)}(h#``tx.work`` Transmitter work item. h](j )}(h ``tx.work``h]j)}(hjXrh]htx.work}(hjZrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVrubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK:hjRrubj))}(hhh]h)}(hTransmitter work item.h]hTransmitter work item.}(hjqrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmrhK:hjnrubah}(h]h ]h"]h$]h&]uh1j(hjRrubeh}(h]h ]h"]h$]h&]uh1jhjmrhK:hjpubj)}(h2``rtx_timeout`` Retransmission timeout subsystem. h](j )}(h``rtx_timeout``h]j)}(hjrh]h rtx_timeout}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK;hjrubj))}(hhh]h)}(h!Retransmission timeout subsystem.h]h!Retransmission timeout subsystem.}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhK;hjrubah}(h]h ]h"]h$]h&]uh1j(hjrubeh}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKshhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:subah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK>hj6subj))}(hhh]h)}(h7Time specifying when the reaper work is next scheduled.h]h7Time specifying when the reaper work is next scheduled.}(hjUshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQshK>hjRsubah}(h]h ]h"]h$]h&]uh1j(hj6subeh}(h]h ]h"]h$]h&]uh1jhjQshK>hjpubj)}(hN``rtx_timeout.reaper`` Work performing timeout checks and subsequent actions. h](j )}(h``rtx_timeout.reaper``h]j)}(hjush]hrtx_timeout.reaper}(hjwshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjssubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhK?hjosubj))}(hhh]h)}(h6Work performing timeout checks and subsequent actions.h]h6Work performing timeout checks and subsequent actions.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshK?hjsubah}(h]h ]h"]h$]h&]uh1j(hjosubeh}(h]h ]h"]h$]h&]uh1jhjshK?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&]uh1j h/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&]uh1j(hjsubeh}(h]h ]h"]h$]h&]uh1jhjshK?hjpubeh}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_get_device (C function)c.ssh_rtl_get_devicehNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h8struct device * ssh_rtl_get_device (struct ssh_rtl *rtl)h]j1)}(h6struct device *ssh_rtl_get_device(struct ssh_rtl *rtl)h](j7)}(hj:h]hstruct}(hjthhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjthhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKhubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjthhhjthKhubh)}(hhh]j`)}(hdeviceh]hdevice}(hj'thhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj$tubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj)tmodnameN classnameNj\j_)}jb]je)}jXssh_rtl_get_devicesbc.ssh_rtl_get_deviceasbuh1hhjthhhjthKhubjI)}(h h]h }(hjHthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjthhhjthKhubjy)}(hj|h]h*}(hjVthhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjthhhjthKhubjZ)}(hssh_rtl_get_deviceh]j`)}(hjEth]hssh_rtl_get_device}(hjgthhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjctubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjthhhjthKhubj)}(h(struct ssh_rtl *rtl)h]j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hjthhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj~tubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~tubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hjthhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjtubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjtmodnameN classnameNj\j_)}jb]jCtc.ssh_rtl_get_deviceasbuh1hhj~tubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~tubjy)}(hj|h]h*}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj~tubj`)}(hrtlh]hrtl}(hjthhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~tubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjztubah}(h]h ]h"]h$]h&]hhuh1jhjthhhjthKhubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjthhhjthKhubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1j*hjthKhhjshhubj)}(hhh]h)}(h3Get device associated with request transport layer.h]h3Get device associated with request transport layer.}(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.hhKhhjuhhubah}(h]h ]h"]h$]h&]uh1jhjshhhjthKhubeh}(h]h ](jfunctioneh"]h$]h&]jjjjujjujjjuh1j%hhhj#mhNhNubj)}(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)}(hj%uh]h Parameters}(hj'uhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#uubah}(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.hhKlhjuubj)}(hhh]j)}(h5``struct ssh_rtl *rtl`` The request transport layer. h](j )}(h``struct ssh_rtl *rtl``h]j)}(hjDuh]hstruct ssh_rtl *rtl}(hjFuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBuubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj]uhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYuhKihjZuubah}(h]h ]h"]h$]h&]uh1j(hj>uubeh}(h]h ]h"]h$]h&]uh1jhjYuhKihj;uubah}(h]h ]h"]h$]h&]uh1jhjuubh)}(h **Return**h]j)}(hjuh]hReturn}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}uubah}(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.hhKkhjuubh)}(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.hhKkhjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_request_rtl (C function)c.ssh_request_rtlhNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h;struct ssh_rtl * ssh_request_rtl (struct ssh_request *rqst)h]j1)}(h9struct ssh_rtl *ssh_request_rtl(struct ssh_request *rqst)h](j7)}(hj:h]hstruct}(hjuhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjuhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKtubjI)}(h h]h }(hjuhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjuhhhjuhKtubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hjuhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjuubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjumodnameN classnameNj\j_)}jb]je)}jXssh_request_rtlsbc.ssh_request_rtlasbuh1hhjuhhhjuhKtubjI)}(h h]h }(hjvhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjuhhhjuhKtubjy)}(hj|h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjuhhhjuhKtubjZ)}(hssh_request_rtlh]j`)}(hjvh]hssh_request_rtl}(hj#vhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjvubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjuhhhjuhKtubj)}(h(struct ssh_request *rqst)h]j)}(hstruct ssh_request *rqsth](j7)}(hj:h]hstruct}(hj>vhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj:vubjI)}(h h]h }(hjKvhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj:vubh)}(hhh]j`)}(h ssh_requesth]h ssh_request}(hj\vhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjYvubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj^vmodnameN classnameNj\j_)}jb]juc.ssh_request_rtlasbuh1hhj:vubjI)}(h h]h }(hjzvhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj:vubjy)}(hj|h]h*}(hjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj:vubj`)}(hrqsth]hrqst}(hjvhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj:vubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj6vubah}(h]h ]h"]h$]h&]hhuh1jhjuhhhjuhKtubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjuhhhjuhKtubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1j*hjuhKthjuhhubj)}(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&]uh1jhjuhhhjuhKtubeh}(h]h ](jfunctioneh"]h$]h&]jjjjvjjvjjjuh1j%hhhj#mhNhNubj)}(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)}(hjwh]hstruct ssh_request *rqst}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hjvubeh}(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&]uh1jhj9wubah}(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 }(hjQwhhhNhNubh)}(h":c:type:`struct ssh_rtl `h]j)}(hj[wh]hstruct ssh_rtl}(hj]whhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjYwubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\j_)}jb]sbjn:ssh_rtluh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:33: ./drivers/platform/surface/aggregator/ssh_request_layer.hhKwhjQwubh' associated with the given SSH request.}(hjQwhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{whKwhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!)ssh_rtl_should_drop_response (C function)c.ssh_rtl_should_drop_responsehNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h(bool ssh_rtl_should_drop_response (void)h]j1)}(h'bool ssh_rtl_should_drop_response(void)h](j)}(hj)h]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.chKAubjI)}(h h]h }(hjwhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjwhhhjwhKAubjZ)}(hssh_rtl_should_drop_responseh]j`)}(hssh_rtl_should_drop_responseh]hssh_rtl_should_drop_response}(hjwhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjwubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjwhhhjwhKAubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]noemphhhuh1jhjwubah}(h]h ]h"]h$]h&]hhuh1jhjwhhhjwhKAubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjwhhhjwhKAubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1j*hjwhKAhjwhhubj)}(hhh]h)}(h/Error injection hook to drop request responses.h]h/Error injection hook to drop request responses.}(hj xhhhNhNubah}(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.chKAhj xhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjwhKAubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$xjj$xjjjuh1j%hhhj#mhNhNubj)}(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)}(hj.xh]h Parameters}(hj0xhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,xubah}(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.chKEhj(xubj)}(hhh]j)}(h``void`` no arguments h](j )}(h``void``h]j)}(hjMxh]hvoid}(hjOxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKxubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chKhjGxubj))}(hhh]h)}(h no argumentsh]h no arguments}(hjfxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbxhKhjcxubah}(h]h ]h"]h$]h&]uh1j(hjGxubeh}(h]h ]h"]h$]h&]uh1jhjbxhKhjDxubah}(h]h ]h"]h$]h&]uh1jhj(xubh)}(h**Description**h]j)}(hjxh]h Description}(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.chKhj(xubh)}(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.chKBhj(xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_submit (C function)c.ssh_rtl_submithNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(hBint ssh_rtl_submit (struct ssh_rtl *rtl, struct ssh_request *rqst)h]j1)}(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.chM]ubjI)}(h h]h }(hjxhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjxhhhjxhM]ubjZ)}(hssh_rtl_submith]j`)}(hssh_rtl_submith]hssh_rtl_submit}(hjxhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjxubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjxhhhjxhM]ubj)}(h/(struct ssh_rtl *rtl, struct ssh_request *rqst)h](j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hj yhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjyubjI)}(h h]h }(hjyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjyubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hj(yhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%yubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj*ymodnameN classnameNj\j_)}jb]je)}jXjxsbc.ssh_rtl_submitasbuh1hhjyubjI)}(h h]h }(hjHyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjyubjy)}(hj|h]h*}(hjVyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjyubj`)}(hrtlh]hrtl}(hjcyhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjyubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjyubj)}(hstruct ssh_request *rqsth](j7)}(hj:h]hstruct}(hj|yhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjxyubjI)}(h h]h }(hjyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjxyubh)}(hhh]j`)}(h ssh_requesth]h ssh_request}(hjyhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjyubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjymodnameN classnameNj\j_)}jb]jDyc.ssh_rtl_submitasbuh1hhjxyubjI)}(h h]h }(hjyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjxyubjy)}(hj|h]h*}(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjxyubj`)}(hrqsth]hrqst}(hjyhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjxyubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjyubeh}(h]h ]h"]h$]h&]hhuh1jhjxhhhjxhM]ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjxhhhjxhM]ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j*hjxhM]hjxhhubj)}(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&]uh1jhjxhhhjxhM]ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1j%hhhj#mhNhNubj)}(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)}(hjzh]h Parameters}(hj!zhhhNhNubah}(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.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}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh is }hj}sbj)}(h``true``h]htrue}(hjP}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhF, this will cancel the given request regardless of the state it is in.}(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.chMhjc|ubh)}(hXIf the request has been canceled by calling this function, both completion and release callbacks of the request will be executed in a reasonable time-frame. This may happen during execution of this function, however, there is no guarantee for this. For example, a request currently transmitting will be canceled/completed only after transmission has completed, and the respective callbacks will be executed on the transmitter thread, which may happen during, but also some time after execution of the cancel function.h]hXIf the request has been canceled by calling this function, both completion and release callbacks of the request will be executed in a reasonable time-frame. This may happen during execution of this function, however, there is no guarantee for this. For example, a request currently transmitting will be canceled/completed only after transmission has completed, and the respective callbacks will be executed on the transmitter thread, which may happen during, but also some time after execution of the cancel function.}(hji}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.chMhjc|ubh)}(h **Return**h]j)}(hjz}h]hReturn}(hj|}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx}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.chMhjc|ubh)}(hReturns ``true`` if the given request has been canceled or completed, either by this function or prior to calling this function, ``false`` otherwise. If **pending** is ``true``, this function will always return ``true``.h](hReturns }(hj}hhhNhNubj)}(h``true``h]htrue}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhq if the given request has been canceled or completed, either by this function or prior to calling this function, }(hj}hhhNhNubj)}(h ``false``h]hfalse}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh otherwise. If }(hj}hhhNhNubj)}(h **pending**h]hpending}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh is }(hj}hhhNhNubj)}(h``true``h]htrue}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh#, this function will always return }(hj}hhhNhNubj)}(h``true``h]htrue}(hj}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:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjc|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_request_init (C function)c.ssh_request_inithNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(hqint ssh_request_init (struct ssh_request *rqst, enum ssam_request_flags flags, const struct ssh_request_ops *ops)h]j1)}(hpint ssh_request_init(struct ssh_request *rqst, enum ssam_request_flags flags, const struct ssh_request_ops *ops)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:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMubjI)}(h h]h }(hj(~hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~hhhj'~hMubjZ)}(hssh_request_inith]j`)}(hssh_request_inith]hssh_request_init}(hj:~hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj6~ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj~hhhj'~hMubj)}(h\(struct ssh_request *rqst, enum ssam_request_flags flags, const struct ssh_request_ops *ops)h](j)}(hstruct ssh_request *rqsth](j7)}(hj:h]hstruct}(hjV~hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjR~ubjI)}(h h]h }(hjc~hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjR~ubh)}(hhh]j`)}(h ssh_requesth]h ssh_request}(hjt~hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjq~ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjv~modnameN classnameNj\j_)}jb]je)}jXj<~sbc.ssh_request_initasbuh1hhjR~ubjI)}(h h]h }(hj~hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjR~ubjy)}(hj|h]h*}(hj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjR~ubj`)}(hrqsth]hrqst}(hj~hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjR~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjN~ubj)}(henum ssam_request_flags flagsh](j7)}(hj9h]henum}(hj~hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj~ubjI)}(h h]h }(hj~hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~ubh)}(hhh]j`)}(hssam_request_flagsh]hssam_request_flags}(hj~hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj~modnameN classnameNj\j_)}jb]j~c.ssh_request_initasbuh1hhj~ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~ubj`)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjN~ubj)}(h!const struct ssh_request_ops *opsh](j7)}(hjfh]hconst}(hj+hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj'ubjI)}(h h]h }(hj8hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj'ubj7)}(hj:h]hstruct}(hjFhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj'ubjI)}(h h]h }(hjShhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj'ubh)}(hhh]j`)}(hssh_request_opsh]hssh_request_ops}(hjdhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjaubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjfmodnameN classnameNj\j_)}jb]j~c.ssh_request_initasbuh1hhj'ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj'ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj'ubj`)}(hopsh]hops}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjN~ubeh}(h]h ]h"]h$]h&]hhuh1jhj~hhhj'~hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj~hhhj'~hMubah}(h]j ~ah ](jjeh"]h$]h&]jj)jhuh1j*hj'~hMhj~hhubj)}(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&]uh1jhj~hhhj'~hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhj#mhNhNubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hV``enum ssam_request_flags flags`` Request flags, determining the type of the request. h](j )}(h!``enum ssam_request_flags flags``h]j)}(hjAh]henum ssam_request_flags flags}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1j(hj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubj)}(h:``const struct ssh_request_ops *ops`` Request operations. h](j )}(h%``const struct ssh_request_ops *ops``h]j)}(hjzh]h!const struct ssh_request_ops *ops}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjtubj))}(hhh]h)}(hRequest operations.h]hRequest operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(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 }(hjˀhhhNhNubj)}(h``NULL``h]hNULL}(hjӀhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjˀubh 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.}(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)}(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)}(hFReturns zero on success or ``-EINVAL`` if the given flags are invalid.h](hReturns zero on success or }(hjhhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hj hhhNhNubah}(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&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_init (C function)c.ssh_rtl_inithNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(hcint ssh_rtl_init (struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h]j1)}(hbint ssh_rtl_init(struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h](j)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjAhhhjShMubjZ)}(h ssh_rtl_inith]j`)}(h ssh_rtl_inith]h ssh_rtl_init}(hjfhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjbubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjAhhhjShMubj)}(hR(struct ssh_rtl *rtl, struct serdev_device *serdev, const struct ssh_rtl_ops *ops)h](j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj~ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~ubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjhsbc.ssh_rtl_initasbuh1hhj~ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~ubjy)}(hj|h]h*}(hj΁hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj~ubj`)}(hrtlh]hrtl}(hjہhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzubj)}(hstruct serdev_device *serdevh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h serdev_deviceh]h serdev_device}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssh_rtl_initasbuh1hhjubjI)}(h h]h }(hj0hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hserdevh]hserdev}(hjKhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzubj)}(hconst struct ssh_rtl_ops *opsh](j7)}(hjfh]hconst}(hjdhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjqhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubj7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubh)}(hhh]j`)}(h ssh_rtl_opsh]h ssh_rtl_ops}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssh_rtl_initasbuh1hhj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubjy)}(hj|h]h*}(hjɂhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj`ubj`)}(hopsh]hops}(hjւhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzubeh}(h]h ]h"]h$]h&]hhuh1jhjAhhhjShMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj=hhhjShMubah}(h]j8ah ](jjeh"]h$]h&]jj)jhuh1j*hjShMhj:hhubj)}(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&]uh1jhj:hhhjShMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhj#mhNhNubj)}(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)}(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.chMhjubj)}(hhh](j)}(hC``struct ssh_rtl *rtl`` The request transport layer to initialize. h](j )}(h``struct ssh_rtl *rtl``h]j)}(hjAh]hstruct ssh_rtl *rtl}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1j(hj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhj8ubj)}(h_``struct serdev_device *serdev`` The underlying serial device, i.e. the lower-level transport. h](j )}(h ``struct serdev_device *serdev``h]j)}(hjzh]hstruct serdev_device *serdev}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMhjtubj))}(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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhj8ubj)}(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&]uh1j h/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.}(hj̃hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjȃhMhjɃubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjȃhMhj8ubeh}(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 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)}(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:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM%hj6ubj)}(hhh]j)}(hE``struct ssh_rtl *rtl`` The request transport layer to deinitialize. h](j )}(h``struct ssh_rtl *rtl``h]j)}(hj[h]hstruct ssh_rtl *rtl}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM"hjUubj))}(hhh]h)}(h,The request transport layer to deinitialize.h]h,The request transport layer to deinitialize.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM"hjqubah}(h]h ]h"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]uh1jhjphM"hjRubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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$hj6ubh)}(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#hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_start (C function)c.ssh_rtl_starthNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h'int ssh_rtl_start (struct ssh_rtl *rtl)h]j1)}(h&int ssh_rtl_start(struct ssh_rtl *rtl)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:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM/ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjׅhhhjhM/ubjZ)}(h ssh_rtl_starth]j`)}(h ssh_rtl_starth]h ssh_rtl_start}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjׅhhhjhM/ubj)}(h(struct ssh_rtl *rtl)h]j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hj6hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj3ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj8modnameN classnameNj\j_)}jb]je)}jXjsbc.ssh_rtl_startasbuh1hhjubjI)}(h h]h }(hjVhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hrtlh]hrtl}(hjqhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjׅhhhjhM/ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjӅhhhjhM/ubah}(h]j΅ah ](jjeh"]h$]h&]jj)jhuh1j*hjhM/hjЅhhubj)}(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&]uh1jhjЅhhhjhM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhj#mhNhNubj)}(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&]uh1j h/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&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1j(hjֆubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjӆubah}(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.}(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.chM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_flush (C function)c.ssh_rtl_flushhNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h>int ssh_rtl_flush (struct ssh_rtl *rtl, unsigned long timeout)h]j1)}(h=int ssh_rtl_flush(struct ssh_rtl *rtl, unsigned long timeout)h](j)}(hinth]hint}(hj\hhhNhNubah}(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.chMgubjI)}(h h]h }(hjkhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXhhhjjhMgubjZ)}(h ssh_rtl_flushh]j`)}(h ssh_rtl_flushh]h ssh_rtl_flush}(hj}hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjyubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjXhhhjjhMgubj)}(h,(struct ssh_rtl *rtl, unsigned long timeout)h](j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssh_rtl_flushasbuh1hhjubjI)}(h h]h }(hjׇhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hrtlh]hrtl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hunsigned long timeouth](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj)}(hlongh]hlong}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h h]h }(hj5hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(htimeouth]htimeout}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjXhhhjjhMgubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjThhhjjhMgubah}(h]jOah ](jjeh"]h$]h&]jj)jhuh1j*hjjhMghjQhhubj)}(hhh]h)}(h"Flush the request transport layer.h]h"Flush the request transport layer.}(hjmhhhNhNubah}(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.chMghjjhhubah}(h]h ]h"]h$]h&]uh1jhjQhhhjjhMgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhj#mhNhNubj)}(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)}(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.chMkhjubj)}(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&]uh1j h/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}(hjLjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjÈhMhhjĈubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjÈhMhhjubj)}(hE``unsigned long timeout`` timeout for the flush operation in jiffies h](j )}(h``unsigned long timeout``h]j)}(hjh]hunsigned long timeout}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chMihjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMihjubeh}(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.chMkhjubh)}(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.}(hj8hhhNhNubah}(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.chMjhjubh)}(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.}(hjGhhhNhNubah}(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.chMphjubh)}(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.}(hjVhhhNhNubah}(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.chMuhjubh)}(h **Return**h]j)}(hjgh]hReturn}(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:36: ./drivers/platform/surface/aggregator/ssh_request_layer.chM{hjubh)}(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, }(hj}hhhNhNubj)}(h``-ETIMEDOUT``h]h -ETIMEDOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhM if the flush timed out and has been canceled as a result of the timeout, or }(hj}hhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubhc if the packet and/or request transport layer has been shut down before this call. May also return }(hj}hhhNhNubj)}(h ``-EINTR``h]h-EINTR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubh< if the underlying packet transmission has been interrupted.}(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.chM|hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj#mhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rtl_shutdown (C function)c.ssh_rtl_shutdownhNtauh1jhj#mhhhNhNubj&)}(hhh](j+)}(h+void ssh_rtl_shutdown (struct ssh_rtl *rtl)h]j1)}(h*void ssh_rtl_shutdown(struct ssh_rtl *rtl)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjމhhhjhMubjZ)}(hssh_rtl_shutdownh]j`)}(hssh_rtl_shutdownh]hssh_rtl_shutdown}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjމhhhjhMubj)}(h(struct ssh_rtl *rtl)h]j)}(hstruct ssh_rtl *rtlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssh_rtlh]hssh_rtl}(hj=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj:ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj?modnameN classnameNj\j_)}jb]je)}jXjsbc.ssh_rtl_shutdownasbuh1hhjubjI)}(h h]h }(hj]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hrtlh]hrtl}(hjxhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjމhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjډhhhjhMubah}(h]jՉah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhj׉hhubj)}(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&]uh1jhj׉hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhj#mhNhNubj)}(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)}(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.chMhjubj)}(hhh]j)}(h5``struct ssh_rtl *rtl`` The 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&]uh1j h/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&]uh1j(hj݊ubeh}(h]h ]h"]h$]h&]uh1jhjhMhjڊubah}(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: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 }(hj4hhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubhl as status. Receiver and transmitter threads will be stopped, the lower-level packet layer will be shutdown.}(hj4hhhNhNubeh}(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 }(hjUhhhNhNubj)}(h``-ESHUTDOWN``h]h -ESHUTDOWN}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubh.}(hjUhhhNhNubeh}(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&]uh1jhj#mhhhNhNubeh}(h]jSah ]h"]request transport layerah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Controllerh]h Controller}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjouh1hhjhhhhhK)ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_seq_counter (C struct)c.ssh_seq_counterhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssh_seq_counterh]j1)}(hstruct ssh_seq_counterh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssh_seq_counterh]j`)}(hjh]hssh_seq_counter}(hj΋hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjʋubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(hhh]h)}(h"Safe counter for SSH sequence IDs.h]h"Safe counter for SSH sequence 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.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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#hj ubj)}(h)struct ssh_seq_counter { u8 value; };h]h)struct ssh_seq_counter { u8 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%hj 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$``value`` The current counter value.h](j )}(h ``value``h]j)}(hj]h]hvalue}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK hjWubj))}(hhh]h)}(hThe current counter value.h]hThe current counter value.}(hjvhhhNhNubah}(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!hjsubah}(h]h ]h"]h$]h&]uh1j(hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhK hjTubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssh_rqid_counter (C struct)c.ssh_rqid_counterhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssh_rqid_counterh]j1)}(hstruct ssh_rqid_counterh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK'ubjI)}(h h]h }(hjŌhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjČhK'ubjZ)}(hssh_rqid_counterh]j`)}(hjh]hssh_rqid_counter}(hj׌hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjӌubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjČhK'ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjČhK'ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjČhK'hjhhubj)}(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&]uh1jhjhhhjČhK'ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(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_rqid_counter { u16 value; };h]h+struct ssh_rqid_counter { u16 value; };}hj6sbah}(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)}(hjGh]hMembers}(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:43: ./drivers/platform/surface/aggregator/controller.hhK1hjubj)}(hhh]j)}(h$``value`` The current counter value.h](j )}(h ``value``h]j)}(hjfh]hvalue}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK(hj`ubj))}(hhh]h)}(hThe current counter value.h]hThe current counter value.}(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)hj|ubah}(h]h ]h"]h$]h&]uh1j(hj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hK(hj]ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_head (C struct)c.ssam_nf_headhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h ssam_nf_headh]j1)}(hstruct ssam_nf_headh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK/ubjI)}(h h]h }(hj΍hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhj͍hK/ubjZ)}(h ssam_nf_headh]j`)}(hjh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj܍ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhj͍hK/ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhj͍hK/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj͍hK/hjhhubj)}(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&]uh1jhjhhhj͍hK/ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(hj&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:43: ./drivers/platform/surface/aggregator/controller.hhK6hjubj)}(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.hhK8hjubh)}(h **Members**h]j)}(hjPh]hMembers}(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:43: ./drivers/platform/surface/aggregator/controller.hhK=hjubj)}(hhh](j)}(h.``srcu`` The SRCU struct for synchronization. h](j )}(h``srcu``h]j)}(hjoh]hsrcu}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK4hjiubj))}(hhh]h)}(h$The SRCU struct for synchronization.h]h$The SRCU struct for synchronization.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1j(hjiubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjfubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjfubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf (C struct) c.ssam_nfhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_nfh]j1)}(hstruct ssam_nfh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK;ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhK;ubjZ)}(hssam_nfh]j`)}(hjh]hssam_nf}(hj"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhK;ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhK;ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhK;hjhhubj)}(hhh]h)}(h;Notifier callback- and activation-registry for SSAM events.h]h;Notifier callback- and activation-registry for SSAM events.}(hjDhhhNhNubah}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjƏhK@hjubj)}(h_``refcount`` The root of the RB-tree used for reference-counting enabled events/notifications. h](j )}(h ``refcount``h]j)}(hjh]hrefcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKBhjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKBhjubj)}(hE``head`` The list of notifier heads for event/notification callbacks.h](j )}(h``head``h]j)}(hj%h]hhead}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKBhjubj))}(hhh]h)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKChj;ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj:hKBhjubeh}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_event_item (C struct)c.ssam_event_itemhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_event_itemh]j1)}(hstruct ssam_event_itemh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj{hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKIubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj{hhhjhKIubjZ)}(hssam_event_itemh]j`)}(hjyh]hssam_event_item}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj{hhhjhKIubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjwhhhjhKIubah}(h]jrah ](jjeh"]h$]h&]jj)jhuh1j*hjhKIhjthhubj)}(hhh]h)}(h(Struct for event queuing and completion.h]h(Struct for event queuing and completion.}(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.hhKPhjhhubah}(h]h ]h"]h$]h&]uh1jhjthhhjhKIubeh}(h]h ](jstructeh"]h$]h&]jjjjِjjِjjjuh1j%hhhjhNhNubj)}(hX**Definition**:: struct ssam_event_item { struct list_head node; u16 rqid; struct { void (*free)(struct ssam_event_item *event); } ops; struct ssam_event event; }; **Members** ``node`` The node in the queue. ``rqid`` The request ID of the event. ``ops`` Instance specific functions. ``ops.free`` Callback for freeing this event item. ``event`` Actual event data.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.hhKThjݐubj)}(hstruct ssam_event_item { struct list_head node; u16 rqid; struct { void (*free)(struct ssam_event_item *event); } ops; struct ssam_event event; };h]hstruct ssam_event_item { struct list_head node; u16 rqid; struct { void (*free)(struct ssam_event_item *event); } ops; struct ssam_event 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.hhKVhjݐubh)}(h **Members**h]j)}(hjh]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:43: ./drivers/platform/surface/aggregator/controller.hhK_hjݐubj)}(hhh](j)}(h ``node`` The node in the queue. h](j )}(h``node``h]j)}(hj.h]hnode}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKRhj(ubj))}(hhh]h)}(hThe node in the queue.h]hThe node in the queue.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChKRhjDubah}(h]h ]h"]h$]h&]uh1j(hj(ubeh}(h]h ]h"]h$]h&]uh1jhjChKRhj%ubj)}(h&``rqid`` The request ID of the event. h](j )}(h``rqid``h]j)}(hjgh]hrqid}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKShjaubj))}(hhh]h)}(hThe request ID of the event.h]hThe request ID of the event.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|hKShj}ubah}(h]h ]h"]h$]h&]uh1j(hjaubeh}(h]h ]h"]h$]h&]uh1jhj|hKShj%ubj)}(h%``ops`` Instance specific functions. h](j )}(h``ops``h]j)}(hjh]hops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKThjubj))}(hhh]h)}(hInstance specific functions.h]hInstance specific functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKThj%ubj)}(h3``ops.free`` Callback for freeing this event item. h](j )}(h ``ops.free``h]j)}(hjّh]hops.free}(hjۑhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjבubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKUhjӑubj))}(hhh]h)}(h%Callback for freeing this event item.h]h%Callback for freeing this event item.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKUhjubah}(h]h ]h"]h$]h&]uh1j(hjӑubeh}(h]h ]h"]h$]h&]uh1jhjhKUhj%ubj)}(h``event`` Actual event data.h](j )}(h ``event``h]j)}(hjh]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKUhj ubj))}(hhh]h)}(hActual event data.h]hActual event data.}(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.hhKVhj(ubah}(h]h ]h"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKUhj%ubeh}(h]h ]h"]h$]h&]uh1jhjݐubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_event_queue (C struct)c.ssam_event_queuehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_event_queueh]j1)}(hstruct ssam_event_queueh](j7)}(hj:h]hstruct}(hjlhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK\ubjI)}(h h]h }(hjzhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhhjyhK\ubjZ)}(hssam_event_queueh]j`)}(hjfh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhhjyhK\ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjdhhhjyhK\ubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j*hjyhK\hjahhubj)}(hhh]h)}(h%Queue for completing received events.h]h%Queue for completing received 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.hhKchjhhubah}(h]h ]h"]h$]h&]uh1jhjahhhjyhK\ubeh}(h]h ](jstructeh"]h$]h&]jjjjƒjjƒjjjuh1j%hhhjhNhNubj)}(hX**Definition**:: struct ssam_event_queue { struct ssam_cplt *cplt; spinlock_t lock; struct list_head head; struct work_struct work; }; **Members** ``cplt`` Reference to the completion system on which this queue is active. ``lock`` The lock for any operation on the queue. ``head`` The list-head of the queue. ``work`` The :c:type:`struct work_struct ` performing completion work for this queue.h](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjҒ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:43: ./drivers/platform/surface/aggregator/controller.hhKghjʒubj)}(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; };}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.hhKihjʒubh)}(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.hhKphjʒubj)}(hhh](j)}(hK``cplt`` Reference to the completion system on which this queue is active. h](j )}(h``cplt``h]j)}(hjh]hcplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKehj1ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj0hKehjubj)}(h2``lock`` The lock for any operation on the queue. h](j )}(h``lock``h]j)}(hjTh]hlock}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKfhjNubj))}(hhh]h)}(h(The lock for any operation on the queue.h]h(The lock for any operation on the queue.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKfhjjubah}(h]h ]h"]h$]h&]uh1j(hjNubeh}(h]h ]h"]h$]h&]uh1jhjihKfhjubj)}(h%``head`` The list-head of the queue. h](j )}(h``head``h]j)}(hjh]hhead}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKghjubj))}(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&]uh1j(hjubeh}(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)}(hjƓh]hwork}(hjȓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjēubah}(h]h ]h"]h$]h&]uh1j h/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)}(hjh]hstruct work_struct}(hjhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn: 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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjۓhKghjubeh}(h]h ]h"]h$]h&]uh1jhjʒubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_event_target (C struct)c.ssam_event_targethNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_event_targeth]j1)}(hstruct ssam_event_targeth](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKnubjI)}(h h]h }(hjQhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?hhhjPhKnubjZ)}(hssam_event_targeth]j`)}(hj=h]hssam_event_target}(hjchhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj_ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj?hhhjPhKnubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj;hhhjPhKnubah}(h]j6ah ](jjeh"]h$]h&]jj)jhuh1j*hjPhKnhj8hhubj)}(hhh]h)}(h)Set of queues for a single SSH target ID.h]h)Set of queues for a single SSH target 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.hhKrhjhhubah}(h]h ]h"]h$]h&]uh1jhj8hhhjPhKnubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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]; };}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.hhKxhjubh)}(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)}(h6``queue`` The array of queues, one queue per event ID.h](j )}(h ``queue``h]j)}(hjh]hqueue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKshjubj))}(hhh]h)}(h,The array of queues, one queue per event ID.h]h,The array of queues, one queue per event ID.}(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.hhKthjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKshjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_cplt (C struct) c.ssam_cplthNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h ssam_cplth]j1)}(hstruct ssam_cplth](j7)}(hj:h]hstruct}(hjLhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjHhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKzubjI)}(h h]h }(hjZhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjHhhhjYhKzubjZ)}(h ssam_cplth]j`)}(hjFh]h ssam_cplt}(hjlhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjhubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjHhhhjYhKzubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjDhhhjYhKzubah}(h]j?ah ](jjeh"]h$]h&]jj)jhuh1j*hjYhKzhjAhhubj)}(hhh]h)}(h+SSAM event/async request completion system.h]h+SSAM event/async request completion system.}(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.hhKzhjhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjYhKzubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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; };}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.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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhK}hjubj)}(ho``wq`` The :c:type:`struct workqueue_struct ` on which all completion work items are queued. h](j )}(h``wq``h]j)}(hj5h]hwq}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhj/ubj))}(hhh]h)}(hgThe :c:type:`struct workqueue_struct ` on which all completion work items are queued.h](hThe }(hjNhhhNhNubh)}(h4:c:type:`struct workqueue_struct `h]j)}(hjXh]hstruct workqueue_struct}(hjZhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn:workqueue_structuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhK~hjNubh/ on which all completion work items are queued.}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjuhK~hjKubah}(h]h ]h"]h$]h&]uh1j(hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhKhjubj)}(h'``event`` Event completion management. h](j )}(h ``event``h]j)}(hjh]hevent}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjubj))}(hhh]h)}(hEvent completion management.h]hEvent completion management.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hg``event.target`` Array of :c:type:`struct ssam_event_target `, one for each target. h](j )}(h``event.target``h]j)}(hj˖h]h event.target}(hj͖hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjɖubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjŖubj))}(hhh]h)}(hUArray of :c:type:`struct ssam_event_target `, one for each target.h](h Array of }(hjhhhNhNubh)}(h6:c:type:`struct ssam_event_target `h]j)}(hjh]hstruct ssam_event_target}(hjhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn:ssam_event_targetuh1hhjhKhjubh, one for each target.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j(hjŖubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(hK``event.notif`` Notifier callbacks and event activation reference counting.h](j )}(h``event.notif``h]j)}(hj'h]h event.notif}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_controller_state (C enum)c.ssam_controller_statehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_controller_stateh]j1)}(henum ssam_controller_stateh](j7)}(hj9h]henum}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj}hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj}hhhjhKubjZ)}(hssam_controller_stateh]j`)}(hj{h]hssam_controller_state}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj}hhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjyhhhjhKubah}(h]jtah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjvhhubj)}(hhh]h)}(hDState values for :c:type:`struct ssam_controller `.h](hState values for }(hj×hhhNhNubh)}(h2:c:type:`struct ssam_controller `h]j)}(hj͗h]hstruct ssam_controller}(hjϗhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhj˗ubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\j_)}jb]je)}jXj{sbc.ssam_controller_stateasbjn:ssam_controlleruh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhj×ubh.}(hj×hhhNhNubeh}(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&]uh1jhjvhhhjhKubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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.hhKhj ubj)}(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)}(hj/h]hSSAM_CONTROLLER_UNINITIALIZED}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhj)ubj))}(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.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhKhjEubah}(h]h ]h"]h$]h&]uh1j(hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhKhj&ubj)}(h]``SSAM_CONTROLLER_INITIALIZED`` The controller is initialized, but has not been started yet. h](j )}(h``SSAM_CONTROLLER_INITIALIZED``h]j)}(hjhh]hSSAM_CONTROLLER_INITIALIZED}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:43: ./drivers/platform/surface/aggregator/controller.hhKhjbubj))}(hhh]h)}(hhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjߧubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKOubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKOhjhhubj)}(hhh]h)}(hGet next request ID.h]hGet next request ID.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKOhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(h**Parameters** ``struct ssh_rqid_counter *c`` The counter providing the request IDs. **Return** Returns the next request ID of the counter, skipping any reserved request IDs.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.chKShjubj)}(hhh]j)}(hF``struct ssh_rqid_counter *c`` The counter providing the request IDs. h](j )}(h``struct ssh_rqid_counter *c``h]j)}(hjh]hstruct ssh_rqid_counter *c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKPhjubj))}(hhh]h)}(h&The counter providing the request IDs.h]h&The counter providing the request IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKPhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKPhjubah}(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.chKRhjubh)}(hNReturns the next request ID of the counter, skipping any reserved request IDs.h]hNReturns the next request ID of the counter, skipping any reserved request IDs.}(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.chKRhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!(ssam_event_matches_notifier (C function)c.ssam_event_matches_notifierhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hfbool ssam_event_matches_notifier (const struct ssam_event_notifier *n, const struct ssam_event *event)h]j1)}(hebool ssam_event_matches_notifier(const struct ssam_event_notifier *n, const struct ssam_event *event)h](j)}(hj)h]hbool}(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.chKoubjI)}(h h]h }(hj6hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj$hhhj5hKoubjZ)}(hssam_event_matches_notifierh]j`)}(hssam_event_matches_notifierh]hssam_event_matches_notifier}(hjHhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjDubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj$hhhj5hKoubj)}(hE(const struct ssam_event_notifier *n, const struct ssam_event *event)h](j)}(h#const struct ssam_event_notifier *nh](j7)}(hjfh]hconst}(hjdhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjqhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubj7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubh)}(hhh]j`)}(hssam_event_notifierh]hssam_event_notifier}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjJsbc.ssam_event_matches_notifierasbuh1hhj`ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj`ubjy)}(hj|h]h*}(hj˩hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj`ubj`)}(hjkh]hn}(hjةhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubj)}(hconst struct ssam_event *eventh](j7)}(hjfh]hconst}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj7)}(hj:h]hstruct}(hj hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_eventh]h ssam_event}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj&ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj+modnameN classnameNj\j_)}jb]jc.ssam_event_matches_notifierasbuh1hhjubjI)}(h h]h }(hjGhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(heventh]hevent}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubeh}(h]h ]h"]h$]h&]hhuh1jhj$hhhj5hKoubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj hhhj5hKoubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj5hKohjhhubj)}(hhh]h)}(h$Test if an event matches a notifier.h]h$Test if an event matches a notifier.}(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.chKohjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hKoubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(hX0**Parameters** ``const struct ssam_event_notifier *n`` The event notifier to test against. ``const struct ssam_event *event`` The event to test. **Return** Returns ``true`` if the given event matches the given notifier according to the rules set in the notifier's event mask, ``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.chKshjubj)}(hhh](j)}(hL``const struct ssam_event_notifier *n`` The event notifier to test against. h](j )}(h'``const struct ssam_event_notifier *n``h]j)}(hjͪh]h#const struct ssam_event_notifier *n}(hjϪhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˪ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKphjǪubj))}(hhh]h)}(h#The event notifier to test against.h]h#The event notifier to test against.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKphjubah}(h]h ]h"]h$]h&]uh1j(hjǪubeh}(h]h ]h"]h$]h&]uh1jhjhKphjĪubj)}(h6``const struct ssam_event *event`` The event to test. h](j )}(h"``const struct ssam_event *event``h]j)}(hjh]hconst struct ssam_event *event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKqhjubj))}(hhh]h)}(hThe event to test.h]hThe event to test.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKqhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKqhjĪubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjAh]hReturn}(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.chKshjubh)}(hReturns ``true`` if the given event matches the given notifier according to the rules set in the notifier's event mask, ``false`` otherwise.h](hReturns }(hjWhhhNhNubj)}(h``true``h]htrue}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubhj if the given event matches the given notifier according to the rules set in the notifier’s event mask, }(hjWhhhNhNubj)}(h ``false``h]hfalse}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh otherwise.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKshjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_nfblk_call_chain (C function)c.ssam_nfblk_call_chainhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hMint ssam_nfblk_call_chain (struct ssam_nf_head *nh, struct ssam_event *event)h]j1)}(hLint ssam_nfblk_call_chain(struct ssam_nf_head *nh, struct ssam_event *event)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.chKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssam_nfblk_call_chainh]j`)}(hssam_nfblk_call_chainh]hssam_nfblk_call_chain}(hj˫hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjǫubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h3(struct ssam_nf_head *nh, struct ssam_event *event)h](j)}(hstruct ssam_nf_head *nhh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjͫsbc.ssam_nfblk_call_chainasbuh1hhjubjI)}(h h]h }(hj%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hnhh]hnh}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj߫ubj)}(hstruct ssam_event *eventh](j7)}(hj:h]hstruct}(hjYhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjUubjI)}(h h]h }(hjfhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUubh)}(hhh]j`)}(h ssam_eventh]h ssam_event}(hjwhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjtubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjymodnameN classnameNj\j_)}jb]j!c.ssam_nfblk_call_chainasbuh1hhjUubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjUubj`)}(heventh]hevent}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj߫ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(hhh]h)}(h1Call event notifier callbacks of the given chain.h]h1Call event notifier callbacks of the given chain.}(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׬hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(hX**Parameters** ``struct ssam_nf_head *nh`` The notifier head for which the notifier callbacks should be called. ``struct ssam_event *event`` The event data provided to the callbacks. **Description** 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. **Return** 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](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.chKhjubj)}(hhh](j)}(ha``struct ssam_nf_head *nh`` The notifier head for which the notifier callbacks should be called. 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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjubj))}(hhh]h)}(hDThe notifier head for which the notifier callbacks should be called.h]hDThe notifier head for which the notifier callbacks should be called.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hKhj1ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj0hKhjubj)}(hG``struct ssam_event *event`` The event data provided to the callbacks. h](j )}(h``struct ssam_event *event``h]j)}(hjTh]hstruct ssam_event *event}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjNubj))}(hhh]h)}(h)The event data provided to the callbacks.h]h)The event data provided to the callbacks.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1j(hjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjubeh}(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.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)}(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.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}(hjhhhNhNubah}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nfblk_insert (C function)c.ssam_nfblk_inserthNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hOint ssam_nfblk_insert (struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h]j1)}(hNint ssam_nfblk_insert(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hinth]hint}(hj1hhhNhNubah}(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.chKubjI)}(h h]h }(hj@hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj-hhhj?hKubjZ)}(hssam_nfblk_inserth]j`)}(hssam_nfblk_inserth]hssam_nfblk_insert}(hjRhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj-hhhj?hKubj)}(h9(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hstruct ssam_nf_head *nhh](j7)}(hj:h]hstruct}(hjnhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjjubjI)}(h h]h }(hj{hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjjubh)}(hhh]j`)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjTsbc.ssam_nfblk_insertasbuh1hhjjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjjubj`)}(hnhh]hnh}(hjǮhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjfubj)}(hstruct ssam_notifier_block *nbh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjܮubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjܮubh)}(hhh]j`)}(hssam_notifier_blockh]hssam_notifier_block}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nfblk_insertasbuh1hhjܮubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjܮubjy)}(hj|h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjܮubj`)}(hnbh]hnb}(hj7hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjܮubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjfubeh}(h]h ]h"]h$]h&]hhuh1jhj-hhhj?hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj)hhhj?hKubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1j*hj?hKhj&hhubj)}(hhh]h)}(h9Insert a new notifier block into the given notifier list.h]h9Insert a new notifier block into the given notifier list.}(hjahhhNhNubah}(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^hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj?hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjyjjyjjjuh1j%hhhjhNhNubj)}(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)}(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)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjկubj))}(hhh]h)}(hThe notifier block to add.h]hThe notifier block to add.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j(hjկubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj}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.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 }(hj,hhhNhNubj)}(h``struct ssam_nf.lock``h]hstruct ssam_nf.lock}(hj4hhhNhNubah}(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:46: ./drivers/platform/surface/aggregator/controller.chKhj}ubh)}(h **Return**h]j)}(hjOh]hReturn}(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.chKhj}ubh)}(hWReturns zero on success, ``-EEXIST`` if the notifier block has already been registered.xh](hReturns zero on success, }(hjehhhNhNubj)}(h ``-EEXIST``h]h-EEXIST}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubh3 if the notifier block has already been registered.}(hjehhhNhNubeh}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nfblk_find (C function)c.ssam_nfblk_findhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hNbool ssam_nfblk_find (struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h]j1)}(hMbool ssam_nfblk_find(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hj)h]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.chKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssam_nfblk_findh]j`)}(hssam_nfblk_findh]hssam_nfblk_find}(hjưhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj°ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h9(struct ssam_nf_head *nh, struct ssam_notifier_block *nb)h](j)}(hstruct ssam_nf_head *nhh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjްubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjްubh)}(hhh]j`)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjȰsbc.ssam_nfblk_findasbuh1hhjްubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjްubjy)}(hj|h]h*}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjްubj`)}(hnhh]hnh}(hj;hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjްubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjڰubj)}(hstruct ssam_notifier_block *nbh](j7)}(hj:h]hstruct}(hjThhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjPubjI)}(h h]h }(hjahhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjPubh)}(hhh]j`)}(hssam_notifier_blockh]hssam_notifier_block}(hjrhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjoubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjtmodnameN classnameNj\j_)}jb]jc.ssam_nfblk_findasbuh1hhjPubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjPubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjPubj`)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjPubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjڰubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(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.}(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ұhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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.chKhjubj)}(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&]uh1j h/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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj,ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj ubj)}(hE``struct ssam_notifier_block *nb`` The notifier block to search for. h](j )}(h"``struct ssam_notifier_block *nb``h]j)}(hjOh]hstruct ssam_notifier_block *nb}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chKhjIubj))}(hhh]h)}(h!The notifier block to search for.h]h!The notifier block to search for.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhKhjeubah}(h]h ]h"]h$]h&]uh1j(hjIubeh}(h]h ]h"]h$]h&]uh1jhjdhKhj ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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.chKhjubh)}(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.chKhjubh)}(h **Return**h]j)}(hjòh]hReturn}(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.chKhjubh)}(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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nfblk_remove (C function)c.ssam_nfblk_removehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h7void ssam_nfblk_remove (struct ssam_notifier_block *nb)h]j1)}(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.chKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssam_nfblk_removeh]j`)}(hssam_nfblk_removeh]hssam_nfblk_remove}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h (struct ssam_notifier_block *nb)h]j)}(hstruct ssam_notifier_block *nbh](j7)}(hj:h]hstruct}(hjEhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjAubjI)}(h h]h }(hjRhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjAubh)}(hhh]j`)}(hssam_notifier_blockh]hssam_notifier_block}(hjchhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXj+sbc.ssam_nfblk_removeasbuh1hhjAubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjAubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjAubj`)}(hnbh]hnb}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(hhh]h)}(h/Remove a notifier block from its notifier list.h]h/Remove a notifier block from its notifier list.}(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ųhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(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.chKhjubj)}(hhh]j)}(hE``struct ssam_notifier_block *nb`` The notifier block to be removed. h](j )}(h"``struct ssam_notifier_block *nb``h]j)}(hj h]hstruct ssam_notifier_block *nb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(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.chKhjubh)}(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 }(hjZhhhNhNubj)}(h``struct ssam_nf.lock``h]hstruct ssam_nf.lock}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubh`. Furthermore, the caller _must_ ensure SRCU synchronization by calling synchronize_srcu() with }(hjZhhhNhNubj)}(h ``nh->srcu``h]hnh->srcu}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubhf after leaving the critical section, to ensure that the removed notifier block is not in use any more.}(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.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_head_init (C function)c.ssam_nf_head_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h/int ssam_nf_head_init (struct ssam_nf_head *nh)h]j1)}(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.chKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssam_nf_head_inith]j`)}(hssam_nf_head_inith]hssam_nf_head_init}(hjδhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjʴubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h(struct ssam_nf_head *nh)h]j)}(hstruct ssam_nf_head *nhh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_nf_headh]h ssam_nf_head}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjдsbc.ssam_nf_head_initasbuh1hhjubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hnhh]hnh}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(hhh]h)}(h#Initialize the given notifier head.h]h#Initialize the given notifier head.}(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&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(hN**Parameters** ``struct ssam_nf_head *nh`` The notifier head 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.chKhjubj)}(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&]uh1j h/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.}(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ĵubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjõhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_nf_head_destroy (C function)c.ssam_nf_head_destroyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h3void ssam_nf_head_destroy (struct ssam_nf_head *nh)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_nf_head_destroyh]j`)}(hssam_nf_head_destroyh]hssam_nf_head_destroy}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h(struct ssam_nf_head *nh)h]j)}(hstruct ssam_nf_head *nhh](j7)}(hj:h]hstruct}(hjEhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjAubjI)}(h h]h }(hjRhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjAubh)}(hhh]j`)}(h ssam_nf_headh]h ssam_nf_head}(hjchhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj`ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjemodnameN classnameNj\j_)}jb]je)}jXj+sbc.ssam_nf_head_destroyasbuh1hhjAubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjAubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjAubj`)}(hnhh]hnh}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjAubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(hhh]h)}(h%Deinitialize the given notifier head.h]h%Deinitialize the given notifier head.}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(hP**Parameters** ``struct ssam_nf_head *nh`` The notifier head to deinitialize.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_head *nh`` The notifier head to deinitialize.h](j )}(h``struct ssam_nf_head *nh``h]j)}(hj h]hstruct ssam_nf_head *nh}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(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.chMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_refcount_key (C struct)c.ssam_nf_refcount_keyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_nf_refcount_keyh]j1)}(hstruct ssam_nf_refcount_keyh](j7)}(hj:h]hstruct}(hjchhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj_hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubjI)}(h h]h }(hjqhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj_hhhjphM ubjZ)}(hssam_nf_refcount_keyh]j`)}(hj]h]hssam_nf_refcount_key}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj_hhhjphM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj[hhhjphM ubah}(h]jVah ](jjeh"]h$]h&]jj)jhuh1j*hjphM hjXhhubj)}(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&]uh1jhjXhhhjphM ubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(hjɷ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: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; };}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.chMhjubh)}(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: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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj))}(hhh]h)}(h5The registry via which the event is enabled/disabled.h]h5The registry via which the event is enabled/disabled.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj ubj)}(h,``id`` The ID uniquely describing the event.h](j )}(h``id``h]j)}(hjKh]hid}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjEubj))}(hhh]h)}(h%The ID uniquely describing the event.h]h%The ID uniquely describing the event.}(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.chMhjaubah}(h]h ]h"]h$]h&]uh1j(hjEubeh}(h]h ]h"]h$]h&]uh1jhj`hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_nf_refcount_entry (C struct)c.ssam_nf_refcount_entryhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hssam_nf_refcount_entryh]j1)}(hstruct ssam_nf_refcount_entryh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_nf_refcount_entryh]j`)}(hjh]hssam_nf_refcount_entry}(hjŸhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(hhh]h)}(h7RB-tree entry for reference counting event activations.h]h7RB-tree entry for reference counting event activations.}(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&]uh1jhjhhhjhMubeh}(h]h ](jstructeh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(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.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; };}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.chM!hjubh)}(h **Members**h]j)}(hj5h]hMembers}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(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)}(hjTh]hnode}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjNubj))}(hhh]h)}(h&The node of this entry in the rb-tree.h]h&The node of this entry in the rb-tree.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMhjjubah}(h]h ]h"]h$]h&]uh1j(hjNubeh}(h]h ]h"]h$]h&]uh1jhjihMhjKubj)}(h``key`` The key of the event. h](j )}(h``key``h]j)}(hjh]hkey}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjKubj)}(h/``refcount`` The reference-count of the event. h](j )}(h ``refcount``h]j)}(hjƹh]hrefcount}(hjȹhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjĹubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj۹hM hjKubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjKubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_nf_refcount_inc (C function)c.ssam_nf_refcount_inchNtauh1jhjhhhNhNubj&)}(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]j1)}(hstruct ssam_nf_refcount_entry *ssam_nf_refcount_inc(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j7)}(hj:h]hstruct}(hjYhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjUhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM*ubjI)}(h h]h }(hjghhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUhhhjfhM*ubh)}(hhh]j`)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hjxhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjuubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjzmodnameN classnameNj\j_)}jb]je)}jXssam_nf_refcount_incsbc.ssam_nf_refcount_incasbuh1hhjUhhhjfhM*ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUhhhjfhM*ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjUhhhjfhM*ubjZ)}(hssam_nf_refcount_inch]j`)}(hjh]hssam_nf_refcount_inc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjUhhhjfhM*ubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hjӺhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjϺubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjϺubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_incasbuh1hhjϺubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjϺubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjϺubj`)}(hnfh]hnf}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjϺubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj˺ubj)}(hstruct ssam_event_registry regh](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?ubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubh)}(hhh]j`)}(hssam_event_registryh]hssam_event_registry}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjcmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_incasbuh1hhj?ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubj`)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj˺ubj)}(hstruct ssam_event_id idh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_event_idh]h ssam_event_id}(hjĻhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjƻmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_incasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hidh]hid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj˺ubeh}(h]h ]h"]h$]h&]hhuh1jhjUhhhjfhM*ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjQhhhjfhM*ubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1j*hjfhM*hjNhhubj)}(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&]uh1jhjNhhhjfhM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1j%hhhjhNhNubj)}(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.hj6ubj)}(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&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM,hjUubj))}(hhh]h)}(hThe notifier system reference.h]hThe notifier system reference.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM,hjqubah}(h]h ]h"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]uh1jhjphM,hjRubj)}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM-hjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM-hjRubj)}(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}(hjϼhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj˼ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM.hjǼubj))}(hhh]h)}(h The event ID.h]h The event ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM.hjubah}(h]h ]h"]h$]h&]uh1j(hjǼubeh}(h]h ]h"]h$]h&]uh1jhjhM.hjRubeh}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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.chM0hj6ubh)}(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.}(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/hj6ubh)}(h**Note**h]j)}(hj/h]hNote}(hj1hhhNhNubah}(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.chM3hj6ubh)}(h5``nf->lock`` must be held when calling this function.h](j)}(h ``nf->lock``h]hnf->lock}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh) must be held when calling this function.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM4hj6ubh)}(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.chM6hj6ubh)}(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 }(hjzhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh if there have already been }(hjzhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh4 events of the specified ID and type registered, or }(hjzhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubh% if the entry could not be allocated.}(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.chM6hj6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_nf_refcount_dec (C function)c.ssam_nf_refcount_dechNtauh1jhjhhhNhNubj&)}(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]j1)}(hstruct ssam_nf_refcount_entry *ssam_nf_refcount_dec(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j7)}(hj:h]hstruct}(hj߽hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj۽hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMiubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj۽hhhjhMiubh)}(hhh]j`)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXssam_nf_refcount_decsbc.ssam_nf_refcount_decasbuh1hhj۽hhhjhMiubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj۽hhhjhMiubjy)}(hj|h]h*}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj۽hhhjhMiubjZ)}(hssam_nf_refcount_dech]j`)}(hjh]hssam_nf_refcount_dec}(hj>hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj:ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj۽hhhjhMiubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hjYhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjUubjI)}(h h]h }(hjfhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjwhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjtubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjymodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_decasbuh1hhjUubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjUubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjUubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubj)}(hstruct ssam_event_registry regh](j7)}(hj:h]hstruct}(hjɾhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjžubjI)}(h h]h }(hj־hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjžubh)}(hhh]j`)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_decasbuh1hhjžubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjžubj`)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjžubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubj)}(hstruct ssam_event_id idh](j7)}(hj:h]hstruct}(hj,hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj(ubjI)}(h h]h }(hj9hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubh)}(hhh]j`)}(h ssam_event_idh]h ssam_event_id}(hjJhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjGubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjLmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_decasbuh1hhj(ubjI)}(h h]h }(hjhhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubj`)}(hidh]hid}(hjvhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubeh}(h]h ]h"]h$]h&]hhuh1jhj۽hhhjhMiubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj׽hhhjhMiubah}(h]jҽah ](jjeh"]h$]h&]jj)jhuh1j*hjhMihjԽhhubj)}(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&]uh1jhjԽhhhjhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(hj¿h]h Parameters}(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.chMmhjubj)}(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&]uh1jhj߿ubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1j(hjۿ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&]uh1j h/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.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMlhj0ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj/hMlhjؿubj)}(h*``struct ssam_event_id id`` The event ID. h](j )}(h``struct ssam_event_id id``h]j)}(hjSh]hstruct ssam_event_id id}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMmhjMubj))}(hhh]h)}(h The event ID.h]h The event ID.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMmhjiubah}(h]h ]h"]h$]h&]uh1j(hjMubeh}(h]h ]h"]h$]h&]uh1jhjhhMmhjؿubeh}(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.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.chMnhjubh)}(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.chMrhjubh)}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_nf_refcount_dec_free (C function)c.ssam_nf_refcount_dec_freehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hlvoid ssam_nf_refcount_dec_free (struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h]j1)}(hkvoid ssam_nf_refcount_dec_free(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j)}(hvoidh]hvoid}(hjAhhhNhNubah}(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.chMubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj=hhhjOhMubjZ)}(hssam_nf_refcount_dec_freeh]j`)}(hssam_nf_refcount_dec_freeh]hssam_nf_refcount_dec_free}(hjbhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj=hhhjOhMubj)}(hM(struct ssam_nf *nf, struct ssam_event_registry reg, struct ssam_event_id id)h](j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hj~hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjzubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjzubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjdsbc.ssam_nf_refcount_dec_freeasbuh1hhjzubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjzubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjzubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjzubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvubj)}(hstruct ssam_event_registry regh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_dec_freeasbuh1hhjubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hregh]hreg}(hj:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvubj)}(hstruct ssam_event_id idh](j7)}(hj:h]hstruct}(hjShhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjOubjI)}(h h]h }(hj`hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubh)}(hhh]j`)}(h ssam_event_idh]h ssam_event_id}(hjqhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjnubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjsmodnameN classnameNj\j_)}jb]jc.ssam_nf_refcount_dec_freeasbuh1hhjOubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjOubj`)}(hidh]hid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjOubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjvubeh}(h]h ]h"]h$]h&]hhuh1jhj=hhhjOhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj9hhhjOhMubah}(h]j4ah ](jjeh"]h$]h&]jj)jhuh1j*hjOhMhj6hhubj)}(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&]uh1jhj6hhhjOhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hR``struct ssam_event_registry reg`` The registry used to enable/disable the event. h](j )}(h"``struct ssam_event_registry reg``h]j)}(hjAh]hstruct ssam_event_registry reg}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1j(hj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhMhjubj)}(h*``struct ssam_event_id id`` The event ID. h](j )}(h``struct ssam_event_id id``h]j)}(hjzh]hstruct ssam_event_id id}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjtubj))}(hhh]h)}(h The event ID.h]h The event ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjtubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_nf_refcount_empty (C function)c.ssam_nf_refcount_emptyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h0bool ssam_nf_refcount_empty (struct ssam_nf *nf)h]j1)}(h/bool ssam_nf_refcount_empty(struct ssam_nf *nf)h](j)}(hj)h]hbool}(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.c9hMubjI)}(h h]h }(hj=hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj+hhhj<hMubjZ)}(hssam_nf_refcount_emptyh]j`)}(hssam_nf_refcount_emptyh]hssam_nf_refcount_empty}(hjOhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjKubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj+hhhj<hMubj)}(h(struct ssam_nf *nf)h]j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hjkhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjgubjI)}(h h]h }(hjxhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjgubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjQsbc.ssam_nf_refcount_emptyasbuh1hhjgubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjgubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjgubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjgubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjcubah}(h]h ]h"]h$]h&]hhuh1jhj+hhhj<hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj'hhhj<hMubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1j*hj<hMhj$hhubj)}(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&]uh1jhj$hhhj<hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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.chMhj ubj)}(hhh]j)}(h/``struct ssam_nf *nf`` The notification system.h](j )}(h``struct ssam_nf *nf``h]j)}(hj/h]hstruct ssam_nf *nf}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj)ubj))}(hhh]h)}(hThe notification system.h]hThe notification system.}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjEubah}(h]h ]h"]h$]h&]uh1j(hj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_call (C function)c.ssam_nf_callhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h^void ssam_nf_call (struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)h]j1)}(h]void ssam_nf_call(struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(h ssam_nf_callh]j`)}(h ssam_nf_callh]h ssam_nf_call}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(hL(struct ssam_nf *nf, struct device *dev, u16 rqid, struct ssam_event *event)h](j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_nf_callasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct device *devh](j7)}(hj:h]hstruct}(hj8hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj4ubjI)}(h h]h }(hjEhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj4ubh)}(hhh]j`)}(hdeviceh]hdevice}(hjVhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjSubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjXmodnameN classnameNj\j_)}jb]jc.ssam_nf_callasbuh1hhj4ubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj4ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj4ubj`)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hu16 rqidh](h)}(hhh]j`)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nf_callasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hrqidh]hrqid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event *eventh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_eventh]h ssam_event}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_nf_callasbuh1hhjubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(heventh]hevent}(hjGhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]j|ah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhj~hhubj)}(hhh]h)}(h3Call notification callbacks for the provided event.h]h3Call notification callbacks for the provided event.}(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.chMhjnhhubah}(h]h ]h"]h$]h&]uh1jhj~hhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]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 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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h*``u16 rqid`` The request ID of the event. h](j )}(h ``u16 rqid``h]j)}(hj$h]hu16 rqid}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj))}(hhh]h)}(hThe request ID of the event.h]hThe request ID of the event.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hMhj:ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj9hMhjubj)}(hB``struct ssam_event *event`` The event provided to the callbacks. h](j )}(h``struct ssam_event *event``h]j)}(hj]h]hstruct ssam_event *event}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjWubj))}(hhh]h)}(h$The event provided to the callbacks.h]h$The event provided to the callbacks.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhMhjsubah}(h]h ]h"]h$]h&]uh1j(hjWubeh}(h]h ]h"]h$]h&]uh1jhjrhMhjubeh}(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)}(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.chMhjubh)}(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.chMhjubh)}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_init (C function)c.ssam_nf_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h%int ssam_nf_init (struct ssam_nf *nf)h]j1)}(h$int ssam_nf_init(struct ssam_nf *nf)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.chMubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhj-hMubjZ)}(h ssam_nf_inith]j`)}(h ssam_nf_inith]h ssam_nf_init}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj<ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhj-hMubj)}(h(struct ssam_nf *nf)h]j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hj\hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjXubjI)}(h h]h }(hjihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjzhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjwubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj|modnameN classnameNj\j_)}jb]je)}jXjBsbc.ssam_nf_initasbuh1hhjXubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjXubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjTubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj-hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhj-hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj-hMhjhhubj)}(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&]uh1jhjhhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj6ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj5hMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_nf_destroy (C function)c.ssam_nf_destroyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h)void ssam_nf_destroy (struct ssam_nf *nf)h]j1)}(h(void ssam_nf_destroy(struct ssam_nf *nf)h](j)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjvhhhjhMubjZ)}(hssam_nf_destroyh]j`)}(hssam_nf_destroyh]hssam_nf_destroy}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjvhhhjhMubj)}(h(struct ssam_nf *nf)h]j)}(hstruct ssam_nf *nfh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_nfh]hssam_nf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_nf_destroyasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hnfh]hnf}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjvhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjrhhhjhMubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjohhubj)}(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.chMhj7hhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j%hhhjhNhNubj)}(hM**Parameters** ``struct ssam_nf *nf`` The notifier system to deinitialize.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(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 hjVubj)}(hhh]j)}(h;``struct ssam_nf *nf`` The notifier system to deinitialize.h](j )}(h``struct ssam_nf *nf``h]j)}(hj{h]hstruct ssam_nf *nf}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjuubj))}(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.chMhjubah}(h]h ]h"]h$]h&]uh1j(hjuubeh}(h]h ]h"]h$]h&]uh1jhjhM hjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!'ssam_event_item_cache_init (C function)c.ssam_event_item_cache_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h%int ssam_event_item_cache_init (void)h]j1)}(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,ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM,ubjZ)}(hssam_event_item_cache_inith]j`)}(hssam_event_item_cache_inith]hssam_event_item_cache_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM,ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM,ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM,ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM,hjhhubj)}(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,hj9hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjTjjTjjjuh1j%hhhjhNhNubj)}(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:46: ./drivers/platform/surface/aggregator/controller.chM0hjXubj)}(hhh]j)}(h``void`` no argumentsh](j )}(h``void``h]j)}(hj}h]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM2hjwubj))}(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.chKhjubah}(h]h ]h"]h$]h&]uh1j(hjwubeh}(h]h ]h"]h$]h&]uh1jhjhM2hjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!*ssam_event_item_cache_destroy (C function)c.ssam_event_item_cache_destroyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h)void ssam_event_item_cache_destroy (void)h]j1)}(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>ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM>ubjZ)}(hssam_event_item_cache_destroyh]j`)}(hssam_event_item_cache_destroyh]hssam_event_item_cache_destroy}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM>ubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM>ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM>ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM>hjhhubj)}(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&]uh1jhjhhhjhM>ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1j%hhhjhNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hj`h]h Parameters}(hjbhhhNhNubah}(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.chMBhjZubj)}(hhh]j)}(h``void`` no argumentsh](j )}(h``void``h]j)}(hjh]hvoid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMDhjyubj))}(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.chKhjubah}(h]h ]h"]h$]h&]uh1j(hjyubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_event_item_free (C function)c.ssam_event_item_freehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h8void ssam_event_item_free (struct ssam_event_item *item)h]j1)}(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.chMQubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMQubjZ)}(hssam_event_item_freeh]j`)}(hssam_event_item_freeh]hssam_event_item_free}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMQubj)}(h(struct ssam_event_item *item)h]j)}(hstruct ssam_event_item *itemh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj#hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_itemh]hssam_event_item}(hj4hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj6modnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_event_item_freeasbuh1hhjubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hitemh]hitem}(hjohhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMQubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMQubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMQhjhhubj)}(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&]uh1jhjhhhjhMQubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMWhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_event_item_alloc (C function)c.ssam_event_item_allochNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hHstruct ssam_event_item * ssam_event_item_alloc (size_t len, gfp_t flags)h]j1)}(hFstruct ssam_event_item *ssam_event_item_alloc(size_t len, gfp_t flags)h](j7)}(hj:h]hstruct}(hj4hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj0hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM[ubjI)}(h h]h }(hjBhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj0hhhjAhM[ubh)}(hhh]j`)}(hssam_event_itemh]hssam_event_item}(hjShhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjPubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjUmodnameN classnameNj\j_)}jb]je)}jXssam_event_item_allocsbc.ssam_event_item_allocasbuh1hhj0hhhjAhM[ubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj0hhhjAhM[ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj0hhhjAhM[ubjZ)}(hssam_event_item_alloch]j`)}(hjqh]hssam_event_item_alloc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj0hhhjAhM[ubj)}(h(size_t len, gfp_t flags)h](j)}(h size_t lenh](h)}(hhh]j`)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]joc.ssam_event_item_allocasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hlenh]hlen}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h gfp_t flagsh](h)}(hhh]j`)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]joc.ssam_event_item_allocasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hflagsh]hflags}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj0hhhjAhM[ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj,hhhjAhM[ubah}(h]j'ah ](jjeh"]h$]h&]jj)jhuh1j*hjAhM[hj)hhubj)}(hhh]h)}(h3Allocate an event item with the given payload size.h]h3Allocate an event item with the given payload size.}(hjOhhhNhNubah}(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[hjLhhubah}(h]h ]h"]h$]h&]uh1jhj)hhhjAhM[ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjgjjgjjjuh1j%hhhjhNhNubj)}(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)}(hjqh]h Parameters}(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:46: ./drivers/platform/surface/aggregator/controller.chM_hjkubj)}(hhh](j)}(h)``size_t len`` The event payload length. h](j )}(h``size_t len``h]j)}(hjh]h size_t len}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM\hjubj))}(hhh]h)}(hThe event payload length.h]hThe event payload length.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM\hjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM\hjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjkubh)}(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_hjkubh)}(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}(hj"hhhNhNubah}(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}(hj4hhhNhNubah}(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^hjkubh)}(h **Return**h]j)}(hjOh]hReturn}(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.chMdhjkubh)}(h'Returns the newly allocated event item.h]h'Returns the newly allocated event item.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMehjkubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_event_queue_push (C function)c.ssam_event_queue_pushhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hUvoid ssam_event_queue_push (struct ssam_event_queue *q, struct ssam_event_item *item)h]j1)}(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&]uh1jhjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_event_queue_pushh]j`)}(hssam_event_queue_pushh]hssam_event_queue_push}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h:(struct ssam_event_queue *q, struct ssam_event_item *item)h](j)}(hstruct ssam_event_queue *qh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_event_queue_pushasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hqh]hq}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_item *itemh](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?ubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubh)}(hhh]j`)}(hssam_event_itemh]hssam_event_item}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjcmodnameN classnameNj\j_)}jb]j c.ssam_event_queue_pushasbuh1hhj?ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj?ubj`)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj8ubj))}(hhh]h)}(hThe item to add.h]hThe item to add.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjTubah}(h]h ]h"]h$]h&]uh1j(hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_event_queue_pop (C function)c.ssam_event_queue_pophNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hJstruct ssam_event_item * ssam_event_queue_pop (struct ssam_event_queue *q)h]j1)}(hHstruct ssam_event_item *ssam_event_queue_pop(struct ssam_event_queue *q)h](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubh)}(hhh]j`)}(hssam_event_itemh]hssam_event_item}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXssam_event_queue_popsbc.ssam_event_queue_popasbuh1hhjhhhjhMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjhhhjhMubjZ)}(hssam_event_queue_poph]j`)}(hjh]hssam_event_queue_pop}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h(struct ssam_event_queue *q)h]j)}(hstruct ssam_event_queue *qh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_queueh]hssam_event_queue}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj2modnameN classnameNj\j_)}jb]jc.ssam_event_queue_popasbuh1hhjubjI)}(h h]h }(hjNhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hj,h]hq}(hjihhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(hhh]h)}(h-Pop the next event item from the event queue.h]h-Pop the next event item from 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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]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)}(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 }(hj$hhhNhNubj)}(h``NULL``h]hNULL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh If there is no event item left.}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_event_queue_is_empty (C function)c.ssam_event_queue_is_emptyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h;bool ssam_event_queue_is_empty (struct ssam_event_queue *q)h]j1)}(h:bool ssam_event_queue_is_empty(struct ssam_event_queue *q)h](j)}(hj)h]hbool}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjshhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjahhhjrhMubjZ)}(hssam_event_queue_is_emptyh]j`)}(hssam_event_queue_is_emptyh]hssam_event_queue_is_empty}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjahhhjrhMubj)}(h(struct ssam_event_queue *q)h]j)}(hstruct ssam_event_queue *qh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_event_queue_is_emptyasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hj,h]hq}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjahhhjrhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj]hhhjrhMubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1j*hjrhMhjZhhubj)}(hhh]h)}(h"Check if the event queue is empty.h]h"Check if the event queue is empty.}(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&]uh1jhjZhhhjrhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1j%hhhjhNhNubj)}(hA**Parameters** ``struct ssam_event_queue *q`` The event queue.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(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)}(hjdh]hstruct ssam_event_queue *q}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj^ubj))}(hhh]h)}(hThe event queue.h]hThe 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.chMhjzubah}(h]h ]h"]h$]h&]uh1j(hj^ubeh}(h]h ]h"]h$]h&]uh1jhjyhMhj[ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_cplt_get_event_queue (C function)c.ssam_cplt_get_event_queuehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h^struct ssam_event_queue * ssam_cplt_get_event_queue (struct ssam_cplt *cplt, u8 tid, u16 rqid)h]j1)}(h\struct ssam_event_queue *ssam_cplt_get_event_queue(struct ssam_cplt *cplt, u8 tid, u16 rqid)h](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubh)}(hhh]j`)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXssam_cplt_get_event_queuesbc.ssam_cplt_get_event_queueasbuh1hhjhhhjhMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjhhhjhMubjZ)}(hssam_cplt_get_event_queueh]j`)}(hjh]hssam_cplt_get_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h*(struct ssam_cplt *cplt, u8 tid, u16 rqid)h](j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hj8hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj4ubjI)}(h h]h }(hjEhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj4ubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjVhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjSubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjXmodnameN classnameNj\j_)}jb]jc.ssam_cplt_get_event_queueasbuh1hhj4ubjI)}(h h]h }(hjthhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj4ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj4ubj`)}(hcplth]hcplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hu8 tidh](h)}(hhh]j`)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_cplt_get_event_queueasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(htidh]htid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(hu16 rqidh](h)}(hhh]j`)}(hu16h]hu16}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_cplt_get_event_queueasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hrqidh]hrqid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(hhh]h)}(h-Get the event queue for the given parameters.h]h-Get the event queue for the given parameters.}(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.chMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1j%hhhjhNhNubj)}(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)}(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.chMhjeubj)}(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)}(hjh]hstruct ssam_cplt *cplt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjubj))}(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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h **Return**h]j)}(hj7h]hReturn}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjeubh)}(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 }(hjMhhhNhNubj)}(h``NULL``h]hNULL}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh\. If the target ID is not supported, this function will fall back to the default target ID (}(hjMhhhNhNubj)}(h ``tid = 1``h]htid = 1}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh).}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_cplt_submit (C function)c.ssam_cplt_submithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hHbool ssam_cplt_submit (struct ssam_cplt *cplt, struct work_struct *work)h]j1)}(hGbool ssam_cplt_submit(struct ssam_cplt *cplt, struct work_struct *work)h](j)}(hj)h]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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_cplt_submith]j`)}(hssam_cplt_submith]hssam_cplt_submit}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h2(struct ssam_cplt *cplt, struct work_struct *work)h](j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_cplt_submitasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcplth]hcplt}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct work_struct *workh](j7)}(hj:h]hstruct}(hjNhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjJubjI)}(h h]h }(hj[hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJubh)}(hhh]j`)}(h work_structh]h work_struct}(hjlhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjiubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjnmodnameN classnameNj\j_)}jb]jc.ssam_cplt_submitasbuh1hhjJubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjJubj`)}(hworkh]hwork}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjJubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj ubj))}(hhh]h)}(hThe completion system.h]hThe completion system.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1j(hj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubj)}(h5``struct work_struct *work`` The work item to submit.h](j )}(h``struct work_struct *work``h]j)}(hjIh]hstruct work_struct *work}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjCubj))}(hhh]h)}(hThe work item to submit.h]hThe work item to submit.}(hjbhhhNhNubah}(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&]uh1j(hjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_cplt_submit_event (C function)c.ssam_cplt_submit_eventhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hQint ssam_cplt_submit_event (struct ssam_cplt *cplt, struct ssam_event_item *item)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_cplt_submit_eventh]j`)}(hssam_cplt_submit_eventh]hssam_cplt_submit_event}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h6(struct ssam_cplt *cplt, struct ssam_event_item *item)h](j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_cplt_submit_eventasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcplth]hcplt}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_item *itemh](j7)}(hj:h]hstruct}(hjRhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjNubjI)}(h h]h }(hj_hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubh)}(hhh]j`)}(hssam_event_itemh]hssam_event_item}(hjphhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjmubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjrmodnameN classnameNj\j_)}jb]jc.ssam_cplt_submit_eventasbuh1hhjNubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjNubj`)}(hitemh]hitem}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1hhj)hMhj*ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj)hMhj ubj)}(h;``struct ssam_event_item *item`` The event item to submit. h](j )}(h ``struct ssam_event_item *item``h]j)}(hjMh]hstruct ssam_event_item *item}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjGubj))}(hhh]h)}(hThe event item to submit.h]hThe event item to submit.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhMhjcubah}(h]h ]h"]h$]h&]uh1j(hjGubeh}(h]h ]h"]h$]h&]uh1jhjbhMhj ubeh}(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)}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_cplt_flush (C function)c.ssam_cplt_flushhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h-void ssam_cplt_flush (struct ssam_cplt *cplt)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_cplt_flushh]j`)}(hssam_cplt_flushh]hssam_cplt_flush}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h(struct ssam_cplt *cplt)h]j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?ubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjcmodnameN classnameNj\j_)}jb]je)}jXj)sbc.ssam_cplt_flushasbuh1hhj?ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj?ubj`)}(hcplth]hcplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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. **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. 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.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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(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.}(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.chMhjubh)}(h**Note**h]j)}(hjih]hNote}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(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.}(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)}(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.}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_event_queue_init (C function)c.ssam_event_queue_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hQvoid ssam_event_queue_init (struct ssam_cplt *cplt, struct ssam_event_queue *evq)h]j1)}(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#ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM#ubjZ)}(hssam_event_queue_inith]j`)}(hssam_event_queue_inith]hssam_event_queue_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM#ubj)}(h6(struct ssam_cplt *cplt, struct ssam_event_queue *evq)h](j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_event_queue_initasbuh1hhjubjI)}(h h]h }(hj8hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcplth]hcplt}(hjShhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_queue *evqh](j7)}(hj:h]hstruct}(hjlhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjhubjI)}(h h]h }(hjyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhubh)}(hhh]j`)}(hssam_event_queueh]hssam_event_queue}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]j4c.ssam_event_queue_initasbuh1hhjhubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjhubj`)}(hevqh]hevq}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM#ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM#ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM#hjhhubj)}(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&]uh1jhjhhhjhM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]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)}(hM``struct ssam_cplt *cplt`` The completion system on which the queue resides. h](j )}(h``struct ssam_cplt *cplt``h]j)}(hj.h]hstruct ssam_cplt *cplt}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM$hj(ubj))}(hhh]h)}(h1The completion system on which the queue resides.h]h1The completion system on which the queue resides.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM$hjDubah}(h]h ]h"]h$]h&]uh1j(hj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM$hj%ubj)}(h?``struct ssam_event_queue *evq`` The event queue to initialize.h](j )}(h ``struct ssam_event_queue *evq``h]j)}(hjgh]hstruct ssam_event_queue *evq}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM&hjaubj))}(hhh]h)}(hThe event queue to initialize.h]hThe event queue 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.chM%hj}ubah}(h]h ]h"]h$]h&]uh1j(hjaubeh}(h]h ]h"]h$]h&]uh1jhj|hM&hj%ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_cplt_init (C function)c.ssam_cplt_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h?int ssam_cplt_init (struct ssam_cplt *cplt, struct device *dev)h]j1)}(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.chM1ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM1ubjZ)}(hssam_cplt_inith]j`)}(hssam_cplt_inith]hssam_cplt_init}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM1ubj)}(h,(struct ssam_cplt *cplt, struct device *dev)h](j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_cplt_initasbuh1hhjubjI)}(h h]h }(hj<hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcplth]hcplt}(hjWhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct device *devh](j7)}(hj:h]hstruct}(hjphhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjlubjI)}(h h]h }(hj}hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjlubh)}(hhh]j`)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]j8c.ssam_cplt_initasbuh1hhjlubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjlubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjlubj`)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjlubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM1ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM1ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM1hjhhubj)}(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&]uh1jhjhhhjhM1ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j%hhhjhNhNubj)}(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.chM5hj ubj)}(hhh](j)}(h@``struct ssam_cplt *cplt`` The completion system to initialize. h](j )}(h``struct ssam_cplt *cplt``h]j)}(hj2h]hstruct ssam_cplt *cplt}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM2hj,ubj))}(hhh]h)}(h$The completion system to initialize.h]h$The completion system to initialize.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhM2hjHubah}(h]h ]h"]h$]h&]uh1j(hj,ubeh}(h]h ]h"]h$]h&]uh1jhjGhM2hj)ubj)}(h3``struct device *dev`` The device used for logging.h](j )}(h``struct device *dev``h]j)}(hjkh]hstruct device *dev}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM4hjeubj))}(hhh]h)}(hThe device used for logging.h]hThe device used for logging.}(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&]uh1j(hjeubeh}(h]h ]h"]h$]h&]uh1jhjhM4hj)ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_cplt_destroy (C function)c.ssam_cplt_destroyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h/void ssam_cplt_destroy (struct ssam_cplt *cplt)h]j1)}(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.chMOubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMOubjZ)}(hssam_cplt_destroyh]j`)}(hssam_cplt_destroyh]hssam_cplt_destroy}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMOubj)}(h(struct ssam_cplt *cplt)h]j)}(hstruct ssam_cplt *cplth](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_cplth]h ssam_cplt}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj"modnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_cplt_destroyasbuh1hhjubjI)}(h h]h }(hj@hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcplth]hcplt}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMOubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMOubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMOhjhhubj)}(hhh]h)}(h#Deinitialize the completion system.h]h#Deinitialize 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.chMOhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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.chMQhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_controller_lock (C function)c.ssam_controller_lockhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h5void ssam_controller_lock (struct ssam_controller *c)h]j1)}(h4void ssam_controller_lock(struct ssam_controller *c)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.chMubjI)}(h h]h }(hjUhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjBhhhjThMubjZ)}(hssam_controller_lockh]j`)}(hssam_controller_lockh]hssam_controller_lock}(hjghhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjcubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjBhhhjThMubj)}(h(struct ssam_controller *c)h]j)}(hstruct ssam_controller *ch](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjisbc.ssam_controller_lockasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hjh]hc}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubah}(h]h ]h"]h$]h&]hhuh1jhjBhhhjThMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj>hhhjThMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1j*hjThMhj;hhubj)}(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&]uh1jhj;hhhjThMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(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)}(h6``struct ssam_controller *c`` The controller to lock. h](j )}(h``struct ssam_controller *c``h]j)}(hjFh]hstruct ssam_controller *c}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[hMhj\ubah}(h]h ]h"]h$]h&]uh1j(hj@ubeh}(h]h ]h"]h$]h&]uh1jhj[hMhj=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: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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!0ssam_controller_caps_load_from_acpi (C function)%c.ssam_controller_caps_load_from_acpihNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h_int ssam_controller_caps_load_from_acpi (acpi_handle handle, struct ssam_controller_caps *caps)h]j1)}(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.chM@ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM@ubjZ)}(h#ssam_controller_caps_load_from_acpih]j`)}(h#ssam_controller_caps_load_from_acpih]h#ssam_controller_caps_load_from_acpi}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM@ubj)}(h7(acpi_handle handle, struct ssam_controller_caps *caps)h](j)}(hacpi_handle handleh](h)}(hhh]j`)}(h acpi_handleh]h acpi_handle}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsb%c.ssam_controller_caps_load_from_acpiasbuh1hhjubjI)}(h h]h }(hj5hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hhandleh]hhandle}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h!struct ssam_controller_caps *capsh](j7)}(hj:h]hstruct}(hj\hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjXubjI)}(h h]h }(hjihhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubh)}(hhh]j`)}(hssam_controller_capsh]hssam_controller_caps}(hjzhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjwubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj|modnameN classnameNj\j_)}jb]j1%c.ssam_controller_caps_load_from_acpiasbuh1hhjXubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjXubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjXubj`)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjXubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM@ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM@ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM@hjhhubj)}(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&]uh1jhjhhhjhM@ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(hjh]hacpi_handle handle}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMBhj4ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj3hMBhjubj)}(hJ``struct ssam_controller_caps *caps`` Where to store the capabilities in. h](j )}(h%``struct ssam_controller_caps *caps``h]j)}(hjWh]h!struct ssam_controller_caps *caps}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMChjQubj))}(hhh]h)}(h#Where to store the capabilities in.h]h#Where to store the capabilities in.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlhMChjmubah}(h]h ]h"]h$]h&]uh1j(hjQubeh}(h]h ]h"]h$]h&]uh1jhjlhMChjubeh}(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.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.chMDhjubh)}(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.chMHhjubh)}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!.ssam_controller_caps_load_from_of (C function)#c.ssam_controller_caps_load_from_ofhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h]int ssam_controller_caps_load_from_of (struct device *dev, struct ssam_controller_caps *caps)h]j1)}(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.chMzubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhj hMzubjZ)}(h!ssam_controller_caps_load_from_ofh]j`)}(h!ssam_controller_caps_load_from_ofh]h!ssam_controller_caps_load_from_of}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhj hMzubj)}(h7(struct device *dev, struct ssam_controller_caps *caps)h](j)}(hstruct device *devh](j7)}(hj:h]hstruct}(hj;hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj7ubjI)}(h h]h }(hjHhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj7ubh)}(hhh]j`)}(hdeviceh]hdevice}(hjYhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjVubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj[modnameN classnameNj\j_)}jb]je)}jXj!sb#c.ssam_controller_caps_load_from_ofasbuh1hhj7ubjI)}(h h]h }(hjyhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj7ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj7ubj`)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3ubj)}(h!struct ssam_controller_caps *capsh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controller_capsh]hssam_controller_caps}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]ju#c.ssam_controller_caps_load_from_ofasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcapsh]hcaps}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj hMzubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhj hMzubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj hMzhjhhubj)}(hhh]h)}(h(Load controller capabilities from OF/DT.h]h(Load controller capabilities from OF/DT.}(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.chMzhj+hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1j%hhhjhNhNubj)}(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)}(hjPh]h Parameters}(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.chM~hjJubj)}(hhh](j)}(h:``struct device *dev`` A pointer to the controller device h](j )}(h``struct device *dev``h]j)}(hjoh]hstruct device *dev}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM{hjiubj))}(hhh]h)}(h"A pointer to the controller deviceh]h"A pointer to the controller device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM{hjubah}(h]h ]h"]h$]h&]uh1j(hjiubeh}(h]h ]h"]h$]h&]uh1jhjhM{hjfubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM|hjfubeh}(h]h ]h"]h$]h&]uh1jhjJubh)}(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~hjJubh)}(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~hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_controller_caps_load (C function)c.ssam_controller_caps_loadhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hUint ssam_controller_caps_load (struct device *dev, struct ssam_controller_caps *caps)h]j1)}(hTint ssam_controller_caps_load(struct device *dev, struct ssam_controller_caps *caps)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.chMubjI)}(h h]h }(hj7hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj$hhhj6hMubjZ)}(hssam_controller_caps_loadh]j`)}(hssam_controller_caps_loadh]hssam_controller_caps_load}(hjIhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjEubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj$hhhj6hMubj)}(h7(struct device *dev, struct ssam_controller_caps *caps)h](j)}(hstruct device *devh](j7)}(hj:h]hstruct}(hjehhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjaubjI)}(h h]h }(hjrhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjaubh)}(hhh]j`)}(hdeviceh]hdevice}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjKsbc.ssam_controller_caps_loadasbuh1hhjaubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjaubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjaubj`)}(hdevh]hdev}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubj)}(h!struct ssam_controller_caps *capsh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controller_capsh]hssam_controller_caps}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_controller_caps_loadasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hcapsh]hcaps}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubeh}(h]h ]h"]h$]h&]hhuh1jhj$hhhj6hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj hhhj6hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj6hMhjhhubj)}(hhh]h)}(hLoad controller capabilitiesh]hLoad controller capabilities}(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.chMhjUhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjpjjpjjjuh1j%hhhjhNhNubj)}(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)}(hjzh]h Parameters}(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.chMhjtubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjtubh)}(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.chMhjtubh)}(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:46: ./drivers/platform/surface/aggregator/controller.chMhjtubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!!ssam_controller_init (C function)c.ssam_controller_inithNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hUint ssam_controller_init (struct ssam_controller *ctrl, struct serdev_device *serdev)h]j1)}(hTint ssam_controller_init(struct ssam_controller *ctrl, struct serdev_device *serdev)h](j)}(hinth]hint}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjahhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjNhhhj`hMubjZ)}(hssam_controller_inith]j`)}(hssam_controller_inith]hssam_controller_init}(hjshhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjoubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjNhhhj`hMubj)}(h<(struct ssam_controller *ctrl, struct serdev_device *serdev)h](j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjusbc.ssam_controller_initasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct serdev_device *serdevh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h serdev_deviceh]h serdev_device}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj!modnameN classnameNj\j_)}jb]jc.ssam_controller_initasbuh1hhjubjI)}(h h]h }(hj=hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hserdevh]hserdev}(hjXhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjNhhhj`hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjJhhhj`hMubah}(h]jEah ](jjeh"]h$]h&]jj)jhuh1j*hj`hMhjGhhubj)}(hhh]h)}(hInitialize SSAM controller.h]hInitialize SSAM controller.}(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&]uh1jhjGhhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(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 }(hjMhhhNhNubh)}(h6:c:type:`struct serdev_device_ops `h]j)}(hjWh]hstruct serdev_device_ops}(hjYhhhNhNubah}(h]h ](jU:jc-typeeh"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn:serdev_device_opsuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjMubhX, 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.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjthMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_controller_start (C function)c.ssam_controller_starthNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h8int ssam_controller_start (struct ssam_controller *ctrl)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_controller_starth]j`)}(hssam_controller_starth]hssam_controller_start}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_controller_startasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(hhh]h)}(h=Start the receiver and transmitter threads of the controller.h]h=Start the receiver and transmitter threads of the controller.}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjwjjwjjjuh1j%hhhjhNhNubj)}(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. This function must be called with the main controller lock held (i.e. by calling ssam_controller_lock()).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)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhj{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)}(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 ](jU:jc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn: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&]uh1hhjhMhj{ubh)}(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.chMhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!%ssam_controller_shutdown (C function)c.ssam_controller_shutdownhNtauh1jhjhhhNhNubj&)}(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&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMDhjubj))}(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&]uh1j(hjubeh}(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)}(hjGh]h request_id}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMEhjAubj))}(hhh]h)}(h8The request ID that is used to send these notifications.h]h8The request ID that is used to send these notifications.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMEhj]ubah}(h]h ]h"]h$]h&]uh1j(hjAubeh}(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&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMFhjzubj))}(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&]uh1j(hjzubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!"ssam_ssh_event_enable (C function)c.ssam_ssh_event_enablehNtauh1jhjhhhNhNubj&)}(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]j1)}(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.chMyubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMyubjZ)}(hssam_ssh_event_enableh]j`)}(hssam_ssh_event_enableh]hssam_ssh_event_enable}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMyubj)}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj#hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hj4hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj6modnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_ssh_event_enableasbuh1hhjubjI)}(h h]h }(hjThhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjohhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_registry regh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jPc.ssam_ssh_event_enableasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hregh]hreg}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_id idh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(h ssam_event_idh]h ssam_event_id}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]jPc.ssam_ssh_event_enableasbuh1hhjubjI)}(h h]h }(hj'hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hidh]hid}(hj5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hu8 flagsh](h)}(hhh]j`)}(hu8h]hu8}(hjQhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjNubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjSmodnameN classnameNj\j_)}jb]jPc.ssam_ssh_event_enableasbuh1hhjJubjI)}(h h]h }(hjohhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjJubj`)}(hflagsh]hflags}(hj}hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjJubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMyubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMyubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMyhjhhubj)}(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&]uh1jhjhhhjhMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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{hj7ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj6hM|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}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM}hjUubj))}(hhh]h)}(hThe event identifier.h]hThe event identifier.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM}hjqubah}(h]h ]h"]h$]h&]uh1j(hjUubeh}(h]h ]h"]h$]h&]uh1jhjphM}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&]uh1j h/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&]uh1j(hjubeh}(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 }(hj hhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh- if the request response indicates a failure.}(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.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_ssh_event_disable (C function)c.ssam_ssh_event_disablehNtauh1jhjhhhNhNubj&)}(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]j1)}(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}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hj\hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjIhhhj[hMubjZ)}(hssam_ssh_event_disableh]j`)}(hssam_ssh_event_disableh]hssam_ssh_event_disable}(hjnhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjIhhhj[hMubj)}(ha(struct ssam_controller *ctrl, struct ssam_event_registry reg, struct ssam_event_id id, u8 flags)h](j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjpsbc.ssam_ssh_event_disableasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_registry regh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_event_registryh]hssam_event_registry}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_ssh_event_disableasbuh1hhjubjI)}(h h]h }(hj8hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hregh]hreg}(hjFhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_event_id idh](j7)}(hj:h]hstruct}(hj_hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj[ubjI)}(h h]h }(hjlhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj[ubh)}(hhh]j`)}(h ssam_event_idh]h ssam_event_id}(hj}hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjzubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_ssh_event_disableasbuh1hhj[ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj[ubj`)}(hidh]hid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hu8 flagsh](h)}(hhh]j`)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]jc.ssam_ssh_event_disableasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjIhhhj[hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjEhhhj[hMubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1j*hj[hMhjBhhubj)}(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&]uh1jhjBhhhj[hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj3jj3jjjuh1j%hhhjhNhNubj)}(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)}(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.chMhj7ubj)}(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}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjVubj))}(hhh]h)}(h.The controller for which to disable the event.h]h.The controller for which to disable the event.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMhjrubah}(h]h ]h"]h$]h&]uh1j(hjVubeh}(h]h ]h"]h$]h&]uh1jhjqhMhjSubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubj)}(hG``u8 flags`` The event flags (likely ignored for disabling of events). h](j )}(h ``u8 flags``h]j)}(hjh]hu8 flags}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjSubeh}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]j)}(hjCh]h Description}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhj7ubh)}(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.}(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.chMhj7ubh)}(h **Return**h]j)}(hjjh]hReturn}(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.chMhj7ubh)}(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.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_get_firmware_version (C function)c.ssam_get_firmware_versionhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hJint ssam_get_firmware_version (struct ssam_controller *ctrl, u32 *version)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_get_firmware_versionh]j`)}(hssam_get_firmware_versionh]hssam_get_firmware_version}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h,(struct ssam_controller *ctrl, u32 *version)h](j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_get_firmware_versionasbuh1hhjubjI)}(h h]h }(hj<hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjWhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h u32 *versionh](h)}(hhh]j`)}(hu32h]hu32}(hjshhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjpubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjumodnameN classnameNj\j_)}jb]j8c.ssam_get_firmware_versionasbuh1hhjlubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjlubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjlubj`)}(hversionh]hversion}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjlubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMhj-ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj,hMhjubj)}(h4``u32 *version`` Where to store the version number. h](j )}(h``u32 *version``h]j)}(hjPh]h u32 *version}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjJubj))}(hhh]h)}(h"Where to store the version number.h]h"Where to store the version number.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjfubah}(h]h ]h"]h$]h&]uh1j(hjJubeh}(h]h ]h"]h$]h&]uh1jhjehMhjubeh}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!(ssam_ctrl_notif_display_off (C function)c.ssam_ctrl_notif_display_offhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h>int ssam_ctrl_notif_display_off (struct ssam_controller *ctrl)h]j1)}(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.chMubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhMubjZ)}(hssam_ctrl_notif_display_offh]j`)}(hssam_ctrl_notif_display_offh]hssam_ctrl_notif_display_off}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhMubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hj hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj-modnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_ctrl_notif_display_offasbuh1hhj ubjI)}(h h]h }(hjKhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubjy)}(hj|h]h*}(hjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj ubj`)}(hctrlh]hctrl}(hjfhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhMhjhhubj)}(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&]uh1jhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(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.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.}(hj1hhhNhNubah}(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.}(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)}(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.}(hjOhhhNhNubah}(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)}(hj`h]hReturn}(hjbhhhNhNubah}(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)}(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 }(hjvhhhNhNubj)}(h ``-EPROTO``h]h-EPROTO}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubh- if an unexpected response has been received.}(hjvhhhNhNubeh}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!'ssam_ctrl_notif_display_on (C function)c.ssam_ctrl_notif_display_onhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h=int ssam_ctrl_notif_display_on (struct ssam_controller *ctrl)h]j1)}(hlock`` 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&]uh1j h/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&]uh1j(hj 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)}(hj1 h]h$struct ssam_nf_refcount_entry *entry}(hj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ ubah}(h]h ]h"]h$]h&]uh1j h/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.}(hjJ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF hMhjG ubah}(h]h ]h"]h$]h&]uh1j(hj+ ubeh}(h]h ]h"]h$]h&]uh1jhjF hMhj ubj)}(h>``u8 flags`` The flags used for enabling the event on the EC. h](j )}(h ``u8 flags``h]j)}(hjj h]hu8 flags}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjd 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&]uh1j(hjd 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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!*ssam_nf_refcount_disable_free (C function)c.ssam_nf_refcount_disable_freehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hyint ssam_nf_refcount_disable_free (struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)h]j1)}(hxint ssam_nf_refcount_disable_free(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)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:46: ./drivers/platform/surface/aggregator/controller.chMubjI)}(h h]h }(hjd hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjQ hhhjc hMubjZ)}(hssam_nf_refcount_disable_freeh]j`)}(hssam_nf_refcount_disable_freeh]hssam_nf_refcount_disable_free}(hjv hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjr ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjQ hhhjc hMubj)}(hW(struct ssam_controller *ctrl, struct ssam_nf_refcount_entry *entry, u8 flags, bool ec)h](j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hj hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj modnameN classnameNj\j_)}jb]je)}jXjx sbc.ssam_nf_refcount_disable_freeasbuh1hhj ubjI)}(h h]h }(hj hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj ubjy)}(hj|h]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj ubj`)}(hctrlh]hctrl}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h$struct ssam_nf_refcount_entry *entryh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_nf_refcount_entryh]hssam_nf_refcount_entry}(hj"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj$modnameN classnameNj\j_)}jb]j c.ssam_nf_refcount_disable_freeasbuh1hhjubjI)}(h h]h }(hj@hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hentryh]hentry}(hj[hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hu8 flagsh](h)}(hhh]j`)}(hu8h]hu8}(hjwhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjtubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjymodnameN classnameNj\j_)}jb]j c.ssam_nf_refcount_disable_freeasbuh1hhjpubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjpubj`)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjpubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hbool ech](j)}(hj)h]hbool}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj`)}(hech]hec}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjQ hhhjc hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjM hhhjc hMubah}(h]jH ah ](jjeh"]h$]h&]jj)jhuh1j*hjc hMhjJ hhubj)}(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&]uh1jhjJ hhhjc hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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.chMhjubj)}(hhh](j)}(hI``struct ssam_controller *ctrl`` The controller to disable the event on. h](j )}(h ``struct ssam_controller *ctrl``h]j)}(hjBh]hstruct ssam_controller *ctrl}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjWhMhjXubah}(h]h ]h"]h$]h&]uh1j(hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhj9ubj)}(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)}(hj{h]h$struct ssam_nf_refcount_entry *entry}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMhjuubj))}(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&]uh1j(hjuubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubj)}(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&]uh1j h/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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj9ubeh}(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)}(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 }(hj>hhhNhNubj)}(h``ec``h]hec}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh equals }(hj>hhhNhNubj)}(h``true``h]htrue}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh 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.}(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.chMhjubh)}(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 }(hjqhhhNhNubj)}(h``ec``h]hec}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh equals }(hjqhhhNhNubj)}(h ``false``h]hfalse}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubhX&, 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.}(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.chMhjubh)}(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.chMhjubh)}(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.chMhjubh)}(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.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.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(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.chMhjubh)}(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.}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!-ssam_notifier_disable_registered (C function)"c.ssam_notifier_disable_registeredhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hCint ssam_notifier_disable_registered (struct ssam_controller *ctrl)h]j1)}(hBint ssam_notifier_disable_registered(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM ubjI)}(h h]h }(hj\hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjIhhhj[hM ubjZ)}(h ssam_notifier_disable_registeredh]j`)}(h ssam_notifier_disable_registeredh]h ssam_notifier_disable_registered}(hjnhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjIhhhj[hM ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjpsb"c.ssam_notifier_disable_registeredasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjIhhhj[hM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjEhhhj[hM ubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1j*hj[hM hjBhhubj)}(hhh]h)}(h,Disable events for all registered notifiers.h]h,Disable events for all 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.chM hj hhubah}(h]h ]h"]h$]h&]uh1jhjBhhhj[hM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj%jj%jjjuh1j%hhhjhNhNubj)}(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)}(hj/h]h Parameters}(hj1hhhNhNubah}(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)}(h[``struct ssam_controller *ctrl`` The controller for which to disable the notifiers/events. h](j )}(h ``struct ssam_controller *ctrl``h]j)}(hjNh]hstruct ssam_controller *ctrl}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chM hjHubj))}(hhh]h)}(h9The controller for which to disable the notifiers/events.h]h9The controller for which to disable the notifiers/events.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchM hjdubah}(h]h ]h"]h$]h&]uh1j(hjHubeh}(h]h ]h"]h$]h&]uh1jhjchM hjEubah}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!-ssam_notifier_restore_registered (C function)"c.ssam_notifier_restore_registeredhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(hDvoid ssam_notifier_restore_registered (struct ssam_controller *ctrl)h]j1)}(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.chM' ubjI)}(h h]h }(hj"hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhj!hM' ubjZ)}(h ssam_notifier_restore_registeredh]j`)}(h ssam_notifier_restore_registeredh]h ssam_notifier_restore_registered}(hj4hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj0ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhj!hM' ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjPhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjLubjI)}(h h]h }(hj]hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjLubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjnhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjkubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjpmodnameN classnameNj\j_)}jb]je)}jXj6sb"c.ssam_notifier_restore_registeredasbuh1hhjLubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjLubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjLubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjLubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjHubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj!hM' ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj hhhj!hM' ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hj!hM' hjhhubj)}(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&]uh1jhjhhhj!hM' ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM) hj*ubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhj)hM) hj ubah}(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: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.}(hjehhhNhNubah}(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.}(hjthhhNhNubah}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_notifier_is_empty (C function)c.ssam_notifier_is_emptyhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h:bool ssam_notifier_is_empty (struct ssam_controller *ctrl)h]j1)}(h9bool ssam_notifier_is_empty(struct ssam_controller *ctrl)h](j)}(hj)h]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.chME ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhME ubjZ)}(hssam_notifier_is_emptyh]j`)}(hssam_notifier_is_emptyh]hssam_notifier_is_empty}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhME ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_notifier_is_emptyasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hj8hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhME ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhME ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhME hjhhubj)}(hhh]h)}(h,Check if there are any registered notifiers.h]h,Check if there are any registered notifiers.}(hjbhhhNhNubah}(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 hj_hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhME ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjzjjzjjjuh1j%hhhjhNhNubj)}(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 hj~ubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhMF hjubah}(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.chMH hj~ubh)}(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 hj~ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!)ssam_notifier_unregister_all (C function)c.ssam_notifier_unregister_allhNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h@void ssam_notifier_unregister_all (struct ssam_controller *ctrl)h]j1)}(h?void ssam_notifier_unregister_all(struct ssam_controller *ctrl)h](j)}(hvoidh]hvoid}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMX ubjI)}(h h]h }(hjVhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjChhhjUhMX ubjZ)}(hssam_notifier_unregister_allh]j`)}(hssam_notifier_unregister_allh]hssam_notifier_unregister_all}(hjhhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjdubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjChhhjUhMX ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjjsbc.ssam_notifier_unregister_allasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj|ubah}(h]h ]h"]h$]h&]hhuh1jhjChhhjUhMX ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj?hhhjUhMX ubah}(h]j:ah ](jjeh"]h$]h&]jj)jhuh1j*hjUhMX hj<hhubj)}(hhh]h)}(h.Unregister all currently registered notifiers.h]h.Unregister all currently 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.chMX hjhhubah}(h]h ]h"]h$]h&]uh1jhj<hhhjUhMX ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(hjHh]hstruct ssam_controller *ctrl}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:46: ./drivers/platform/surface/aggregator/controller.chMZ hjBubj))}(hhh]h)}(h.The controller to unregister the notifiers on.h]h.The controller to unregister the notifiers on.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMZ hj^ubah}(h]h ]h"]h$]h&]uh1j(hjBubeh}(h]h ]h"]h$]h&]uh1jhj]hMZ 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: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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_irq_setup (C function)c.ssam_irq_setuphNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h1int ssam_irq_setup (struct ssam_controller *ctrl)h]j1)}(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 ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM ubjZ)}(hssam_irq_setuph]j`)}(hssam_irq_setuph]hssam_irq_setup}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hj#hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj%modnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_irq_setupasbuh1hhjubjI)}(h h]h }(hjChhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hj^hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM hjhhubj)}(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&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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)}(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.}(hj8hhhNhNubah}(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.}(hjGhhhNhNubah}(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().}(hjVhhhNhNubah}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_irq_free (C function)c.ssam_irq_freehNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h1void ssam_irq_free (struct ssam_controller *ctrl)h]j1)}(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 ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM ubjZ)}(h ssam_irq_freeh]j`)}(h ssam_irq_freeh]h ssam_irq_free}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_irq_freeasbuh1hhjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj}hhhjhM ubah}(h]jxah ](jjeh"]h$]h&]jj)jhuh1j*hjhM hjzhhubj)}(hhh]h)}(h"Free SAM EC wakeup-GPIO interrupt.h]h"Free SAM EC wakeup-GPIO interrupt.}(hjEhhhNhNubah}(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 hjBhhubah}(h]h ]h"]h$]h&]uh1jhjzhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj]jj]jjjuh1j%hhhjhNhNubj)}(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)}(hjgh]h Parameters}(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.chM hjaubj)}(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&]uh1j h/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&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj}ubah}(h]h ]h"]h$]h&]uh1jhjaubh)}(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 hjaubh)}(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 hjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!$ssam_irq_arm_for_wakeup (C function)c.ssam_irq_arm_for_wakeuphNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h:int ssam_irq_arm_for_wakeup (struct ssam_controller *ctrl)h]j1)}(h9int ssam_irq_arm_for_wakeup(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 ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM ubjZ)}(hssam_irq_arm_for_wakeuph]j`)}(hssam_irq_arm_for_wakeuph]hssam_irq_arm_for_wakeup}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj#ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjChhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj?ubjI)}(h h]h }(hjPhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjahhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj^ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjcmodnameN classnameNj\j_)}jb]je)}jXj)sbc.ssam_irq_arm_for_wakeupasbuh1hhj?ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj?ubjy)}(hj|h]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj?ubj`)}(hctrlh]hctrl}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj;ubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM hjhhubj)}(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&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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)}(hjh]hstruct ssam_controller *ctrl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1j h/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&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j(hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjBh]h Description}(hjDhhhNhNubah}(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)}(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.}(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 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.}(hjghhhNhNubah}(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)}(hjxh]hNote}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(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&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_irq_disarm_wakeup (C function)c.ssam_irq_disarm_wakeuphNtauh1jhjhhhNhNubj&)}(hhh](j+)}(h:void ssam_irq_disarm_wakeup (struct ssam_controller *ctrl)h]j1)}(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 ubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhM ubjZ)}(hssam_irq_disarm_wakeuph]j`)}(hssam_irq_disarm_wakeuph]hssam_irq_disarm_wakeup}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhM ubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_irq_disarm_wakeupasbuh1hhjubjI)}(h h]h }(hj8hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hctrlh]hctrl}(hjShhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhM hjhhubj)}(hhh]h)}(hDisarm the wakeup IRQ.h]hDisarm the wakeup 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 hjzhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjhNhNubj)}(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&]uh1j h/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&]uh1j(hjubeh}(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.}(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)}(h**Note**h]j)}(hj/h]hNote}(hj1hhhNhNubah}(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)}(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.}(hjEhhhNhNubah}(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&]uh1jhjhhhNhNubeh}(h]juah ]h"] controllerah$]h&]uh1hhhhhhhhK)ubh)}(hhh](h)}(hClient Device Bush]hClient Device Bus}(hjehhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjbhhhhhK3ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!&ssam_device_id_compatible (C function)c.ssam_device_id_compatiblehNtauh1jhjbhhhNhNubj&)}(hhh](j+)}(h\bool ssam_device_id_compatible (const struct ssam_device_id *id, struct ssam_device_uid uid)h]j1)}(h[bool ssam_device_id_compatible(const struct ssam_device_id *id, struct ssam_device_uid uid)h](j)}(hj)h]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.chKubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjhhhjhKubjZ)}(hssam_device_id_compatibleh]j`)}(hssam_device_id_compatibleh]hssam_device_id_compatible}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjhhhjhKubj)}(h=(const struct ssam_device_id *id, struct ssam_device_uid uid)h](j)}(hconst struct ssam_device_id *idh](j7)}(hjfh]hconst}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubj7)}(hj:h]hstruct}(hjhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubh)}(hhh]j`)}(hssam_device_idh]hssam_device_id}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjmodnameN classnameNj\j_)}jb]je)}jXjsbc.ssam_device_id_compatibleasbuh1hhjubjI)}(h h]h }(hj!hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjubjy)}(hj|h]h*}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjubj`)}(hidh]hid}(hj<hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct ssam_device_uid uidh](j7)}(hj:h]hstruct}(hjUhhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjQubjI)}(h h]h }(hjbhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjQubh)}(hhh]j`)}(hssam_device_uidh]hssam_device_uid}(hjshhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjpubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjumodnameN classnameNj\j_)}jb]jc.ssam_device_id_compatibleasbuh1hhjQubjI)}(h h]h }(hjhhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjQubj`)}(huidh]huid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j*hjhKhjhhubj)}(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&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j%hhhjbhNhNubj)}(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&]uh1j h/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&]uh1j(hj 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)}(hjC h]hstruct ssam_device_uid uid}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1j h/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 UID matching against.h]h The device UID matching against.}(hj\ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX hKhjY ubah}(h]h ]h"]h$]h&]uh1j(hj= ubeh}(h]h ]h"]h$]h&]uh1jhjX 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 ](jU:jc-typeeh"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]refdocja: refdomainjreftypetype refexplicitrefwarnj\jwwjn: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&]uh1jhjbhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!#ssam_device_id_is_null (C function)c.ssam_device_id_is_nullhNtauh1jhjbhhhNhNubj&)}(hhh](j+)}(h=bool ssam_device_id_is_null (const struct ssam_device_id *id)h]j1)}(h!hKubjZ)}(hssam_device_id_is_nullh]j`)}(hssam_device_id_is_nullh]hssam_device_id_is_null}(hjQ!hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjM!ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj-!hhhj>!hKubj)}(h!(const struct ssam_device_id *id)h]j)}(hconst struct ssam_device_id *idh](j7)}(hjfh]hconst}(hjm!hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hji!ubjI)}(h h]h }(hjz!hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhji!ubj7)}(hj:h]hstruct}(hj!hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hji!ubjI)}(h h]h }(hj!hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhji!ubh)}(hhh]j`)}(hssam_device_idh]hssam_device_id}(hj!hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj!ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj!modnameN classnameNj\j_)}jb]je)}jXjS!sbc.ssam_device_id_is_nullasbuh1hhji!ubjI)}(h h]h }(hj!hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhji!ubjy)}(hj|h]h*}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhji!ubj`)}(hidh]hid}(hj!hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hji!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhje!ubah}(h]h ]h"]h$]h&]hhuh1jhj-!hhhj>!hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj)!hhhj>!hKubah}(h]j$!ah ](jjeh"]h$]h&]jj)jhuh1j*hj>!hKhj&!hhubj)}(hhh]h)}(hCheck if a device ID is null.h]hCheck if a device ID is null.}(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.chKhj"hhubah}(h]h ]h"]h$]h&]uh1jhj&!hhhj>!hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#"jj#"jjjuh1j%hhhjbhNhNubj)}(hX>**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)}(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.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)}(hjL"h]hconst struct ssam_device_id *id}(hjN"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJ"ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:53: ./drivers/platform/surface/aggregator/bus.chKhjF"ubj))}(hhh]h)}(hThe device ID to check.h]hThe device ID to check.}(hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja"hKhjb"ubah}(h]h ]h"]h$]h&]uh1j(hjF"ubeh}(h]h ]h"]h$]h&]uh1jhja"hKhjC"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&]uh1jhjbhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!ssam_bus_register (C function)c.ssam_bus_registerhNtauh1jhjbhhhNhNubj&)}(hhh](j+)}(hint ssam_bus_register (void)h]j1)}(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.chMyubjI)}(h h]h }(hj8#hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj%#hhhj7#hMyubjZ)}(hssam_bus_registerh]j`)}(hssam_bus_registerh]hssam_bus_register}(hjJ#hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjF#ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj%#hhhj7#hMyubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjf#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb#ubah}(h]h ]h"]h$]h&]noemphhhuh1jhj^#ubah}(h]h ]h"]h$]h&]hhuh1jhj%#hhhj7#hMyubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj!#hhhj7#hMyubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1j*hj7#hMyhj#hhubj)}(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&]uh1jhj#hhhj7#hMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#jj#jjjuh1j%hhhjbhNhNubj)}(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&]uh1j h/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.chKhj#ubah}(h]h ]h"]h$]h&]uh1j(hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hMhj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j! ssam_bus_unregister (C function)c.ssam_bus_unregisterhNtauh1jhjbhhhNhNubj&)}(hhh](j+)}(hvoid ssam_bus_unregister (void)h]j1)}(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.chMubjI)}(h h]h }(hj:$hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj'$hhhj9$hMubjZ)}(hssam_bus_unregisterh]j`)}(hssam_bus_unregisterh]hssam_bus_unregister}(hjL$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjH$ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj'$hhhj9$hMubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hjh$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjd$ubah}(h]h ]h"]h$]h&]noemphhhuh1jhj`$ubah}(h]h ]h"]h$]h&]hhuh1jhj'$hhhj9$hMubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj#$hhhj9$hMubah}(h]j$ah ](jjeh"]h$]h&]jj)jhuh1j*hj9$hMhj $hhubj)}(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&]uh1jhj $hhhj9$hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj$jj$jjjuh1j%hhhjbhNhNubj)}(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&]uh1j h/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.chKhj$ubah}(h]h ]h"]h$]h&]uh1j(hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hMhj$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjbhhhNhNubeh}(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]j1)}(h9int ssam_try_set_controller(struct ssam_controller *ctrl)h](j)}(hinth]hint}(hjE%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjA%hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKKubjI)}(h h]h }(hjT%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjA%hhhjS%hKKubjZ)}(hssam_try_set_controllerh]j`)}(hssam_try_set_controllerh]hssam_try_set_controller}(hjf%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjb%ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjA%hhhjS%hKKubj)}(h(struct ssam_controller *ctrl)h]j)}(hstruct ssam_controller *ctrlh](j7)}(hj:h]hstruct}(hj%hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj~%ubjI)}(h h]h }(hj%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~%ubh)}(hhh]j`)}(hssam_controllerh]hssam_controller}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj%ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj%modnameN classnameNj\j_)}jb]je)}jXjh%sbc.ssam_try_set_controllerasbuh1hhj~%ubjI)}(h h]h }(hj%hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj~%ubjy)}(hj|h]h*}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj~%ubj`)}(hctrlh]hctrl}(hj%hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj~%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjz%ubah}(h]h ]h"]h$]h&]hhuh1jhjA%hhhjS%hKKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj=%hhhjS%hKKubah}(h]j8%ah ](jjeh"]h$]h&]jj)jhuh1j*hjS%hKKhj:%hhubj)}(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&]uh1jhj:%hhhjS%hKKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj&jj&jjjuh1j%hhhj%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)}(hjF&h]hstruct ssam_controller *ctrl}(hjH&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjD&ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKLhj@&ubj))}(hhh]h)}(h3The controller to which the reference should point.h]h3The controller to which the reference should point.}(hj_&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[&hKLhj\&ubah}(h]h ]h"]h$]h&]uh1j(hj@&ubeh}(h]h ]h"]h$]h&]uh1jhj[&hKLhj=&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.chKMhj!&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.chKPhj!&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]j1)}(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.chKcubjI)}(h h]h }(hj'hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj&hhhj 'hKcubjZ)}(hssam_clear_controllerh]j`)}(hssam_clear_controllerh]hssam_clear_controller}(hj 'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj'ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj&hhhj 'hKcubj)}(h(void)h]j)}(hvoidh]j)}(hvoidh]hvoid}(hj<'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8'ubah}(h]h ]h"]h$]h&]noemphhhuh1jhj4'ubah}(h]h ]h"]h$]h&]hhuh1jhj&hhhj 'hKcubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj&hhhj 'hKcubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1j*hj 'hKchj&hhubj)}(hhh]h)}(h+Remove/clear the main controller reference.h]h+Remove/clear the main controller reference.}(hjf'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.chKchjc'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj 'hKcubeh}(h]h ](jfunctioneh"]h$]h&]jjjj~'jj~'jjjuh1j%hhhj%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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:60: ./drivers/platform/surface/aggregator/core.chKhj'ubj))}(hhh]h)}(h no argumentsh]h no arguments}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1j(hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj'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.chKhj'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]j1)}(h7void ssam_trace_ptr_uid(const void *ptr, char *uid_str)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:67: ./drivers/platform/surface/aggregator/trace.hhKiubjI)}(h h]h }(hj`(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjM(hhhj_(hKiubjZ)}(hssam_trace_ptr_uidh]j`)}(hssam_trace_ptr_uidh]hssam_trace_ptr_uid}(hjr(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjn(ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjM(hhhj_(hKiubj)}(h (const void *ptr, char *uid_str)h](j)}(hconst void *ptrh](j7)}(hjfh]hconst}(hj(hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj(ubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubj)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubjy)}(hj|h]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj(ubj`)}(hptrh]hptr}(hj(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubj)}(h char *uid_strh](j)}(hcharh]hchar}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjI)}(h h]h }(hj(hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj(ubjy)}(hj|h]h*}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj(ubj`)}(huid_strh]huid_str}(hj)hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubeh}(h]h ]h"]h$]h&]hhuh1jhjM(hhhj_(hKiubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjI(hhhj_(hKiubah}(h]jD(ah ](jjeh"]h$]h&]jj)jhuh1j*hj_(hKihjF(hhubj)}(hhh]h)}(h0Convert the pointer to a non-pointer UID string.h]h0Convert the pointer to a non-pointer UID string.}(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.hhKihj;)hhubah}(h]h ]h"]h$]h&]uh1jhjF(hhhj_(hKiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjV)jjV)jjjuh1j%hhhj'(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)}(hj`)h]h Parameters}(hjb)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.hhKmhjZ)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&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKjhjy)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&]uh1j(hjy)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKjhjv)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&]uh1j h/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&]uh1j(hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKkhjv)ubeh}(h]h ]h"]h$]h&]uh1jhjZ)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.hhKmhjZ)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.hhKlhjZ)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]j1)}(h9u16 ssam_trace_get_packet_seq(const struct ssh_packet *p)h](h)}(hhh]j`)}(hu16h]hu16}(hj;*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj8*ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj=*modnameN classnameNj\j_)}jb]je)}jXssam_trace_get_packet_seqsbc.ssam_trace_get_packet_seqasbuh1hhj4*hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhK|ubjI)}(h h]h }(hj]*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj4*hhhj\*hK|ubjZ)}(hssam_trace_get_packet_seqh]j`)}(hjY*h]hssam_trace_get_packet_seq}(hjo*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjk*ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj4*hhhj\*hK|ubj)}(h(const struct ssh_packet *p)h]j)}(hconst struct ssh_packet *ph](j7)}(hjfh]hconst}(hj*hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj*ubjI)}(h h]h }(hj*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj*ubj7)}(hj:h]hstruct}(hj*hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj*ubjI)}(h h]h }(hj*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj*ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj*modnameN classnameNj\j_)}jb]jW*c.ssam_trace_get_packet_seqasbuh1hhj*ubjI)}(h h]h }(hj*hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj*ubjy)}(hj|h]h*}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj*ubj`)}(hjh]hp}(hj*hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*ubah}(h]h ]h"]h$]h&]hhuh1jhj4*hhhj\*hK|ubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj0*hhhj\*hK|ubah}(h]j+*ah ](jjeh"]h$]h&]jj)jhuh1j*hj\*hK|hj-*hhubj)}(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&]uh1jhj-*hhhj\*hK|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=+jj=+jjjuh1j%hhhj'(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)}(hjG+h]h Parameters}(hjI+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE+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.hhKhjA+ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j )}(h``const struct ssh_packet *p``h]j)}(hjf+h]hconst struct ssh_packet *p}(hjh+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhK}hj`+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&]uh1j(hj`+ubeh}(h]h ]h"]h$]h&]uh1jhj{+hK}hj]+ubah}(h]h ]h"]h$]h&]uh1jhjA+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.hhKhjA+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.hhKhjA+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]j1)}(h9u32 ssam_trace_get_request_id(const struct ssh_packet *p)h](h)}(hhh]j`)}(hu32h]hu32}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj+modnameN classnameNj\j_)}jb]je)}jXssam_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.hhKubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj+hhhj,hKubjZ)}(hssam_trace_get_request_idh]j`)}(hj,h]hssam_trace_get_request_id}(hj/,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj+,ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj+hhhj,hKubj)}(h(const struct ssh_packet *p)h]j)}(hconst struct ssh_packet *ph](j7)}(hjfh]hconst}(hjJ,hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjF,ubjI)}(h h]h }(hjW,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjF,ubj7)}(hj:h]hstruct}(hje,hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hjF,ubjI)}(h h]h }(hjr,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjF,ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj,ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj,modnameN classnameNj\j_)}jb]j,c.ssam_trace_get_request_idasbuh1hhjF,ubjI)}(h h]h }(hj,hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjF,ubjy)}(hj|h]h*}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhjF,ubj`)}(hjh]hp}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjF,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjB,ubah}(h]h ]h"]h$]h&]hhuh1jhj+hhhj,hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj+hhhj,hKubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j*hj,hKhj+hhubj)}(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&]uh1jhj+hhhj,hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj,jj,jjjuh1j%hhhj'(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&]uh1j h/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&]uh1j(hj -ubeh}(h]h ]h"]h$]h&]uh1jhj;-hKhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h **Return**h]j)}(hja-h]hReturn}(hjc-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 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 }(hjw-hhhNhNubj)}(h``SSAM_RQID_NOT_APPLICABLE``h]hSSAM_RQID_NOT_APPLICABLE}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw-ubh- if not (e.g. flush request, control packet).}(hjw-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]j1)}(h:u32 ssam_trace_get_request_tid(const struct ssh_packet *p)h](h)}(hhh]j`)}(hu32h]hu32}(hj-hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj-ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj-modnameN classnameNj\j_)}jb]je)}jXssam_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.hhKubjI)}(h h]h }(hj-hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj-hhhj-hKubjZ)}(hssam_trace_get_request_tidh]j`)}(hj-h]hssam_trace_get_request_tid}(hj-hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj-ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj-hhhj-hKubj)}(h(const struct ssh_packet *p)h]j)}(hconst struct ssh_packet *ph](j7)}(hjfh]hconst}(hj .hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj.ubjI)}(h h]h }(hj.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubj7)}(hj:h]hstruct}(hj%.hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj.ubjI)}(h h]h }(hj2.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hjC.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj@.ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetjE.modnameN classnameNj\j_)}jb]j-c.ssam_trace_get_request_tidasbuh1hhj.ubjI)}(h h]h }(hja.hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj.ubjy)}(hj|h]h*}(hjo.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj.ubj`)}(hjh]hp}(hj|.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj.ubah}(h]h ]h"]h$]h&]hhuh1jhj-hhhj-hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj-hhhj-hKubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1j*hj-hKhj-hhubj)}(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&]uh1jhj-hhhj-hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1j%hhhj'(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&]uh1j h/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&]uh1j(hj.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 }(hj7/hhhNhNubj)}(h``SSAM_SSH_TID_NOT_APPLICABLE``h]hSSAM_SSH_TID_NOT_APPLICABLE}(hj?/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7/ubh- if not (e.g. flush request, control packet).}(hj7/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]j1)}(h:u32 ssam_trace_get_request_sid(const struct ssh_packet *p)h](h)}(hhh]j`)}(hu32h]hu32}(hj{/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjx/ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj}/modnameN classnameNj\j_)}jb]je)}jXssam_trace_get_request_sidsbc.ssam_trace_get_request_sidasbuh1hhjt/hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubjI)}(h h]h }(hj/hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhjt/hhhj/hKubjZ)}(hssam_trace_get_request_sidh]j`)}(hj/h]hssam_trace_get_request_sid}(hj/hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj/ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhjt/hhhj/hKubj)}(h(const struct ssh_packet *p)h]j)}(hconst struct ssh_packet *ph](j7)}(hjfh]hconst}(hj/hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj/ubjI)}(h h]h }(hj/hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj/ubj7)}(hj:h]hstruct}(hj/hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj/ubjI)}(h h]h }(hj/hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj/ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj0ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj0modnameN classnameNj\j_)}jb]j/c.ssam_trace_get_request_sidasbuh1hhj/ubjI)}(h h]h }(hj!0hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj/ubjy)}(hj|h]h*}(hj/0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj/ubj`)}(hjh]hp}(hj<0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj/ubah}(h]h ]h"]h$]h&]hhuh1jhjt/hhhj/hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhjp/hhhj/hKubah}(h]jk/ah ](jjeh"]h$]h&]jj)jhuh1j*hj/hKhjm/hhubj)}(hhh]h)}(h$Read the packet's request source ID.h]h&Read the packet’s request source ID.}(hje0hhhNhNubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjb0hhubah}(h]h ]h"]h$]h&]uh1jhjm/hhhj/hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj}0jj}0jjjuh1j%hhhj'(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&]uh1j h/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&]uh1j(hj0ubeh}(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}(hj0hhhNhNubah}(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]j1)}(h9u32 ssam_trace_get_request_tc(const struct ssh_packet *p)h](h)}(hhh]j`)}(hu32h]hu32}(hj;1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj81ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj=1modnameN classnameNj\j_)}jb]je)}jXssam_trace_get_request_tcsbc.ssam_trace_get_request_tcasbuh1hhj41hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKubjI)}(h h]h }(hj]1hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj41hhhj\1hKubjZ)}(hssam_trace_get_request_tch]j`)}(hjY1h]hssam_trace_get_request_tc}(hjo1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hjk1ubah}(h]h ](jrjseh"]h$]h&]hhuh1jYhj41hhhj\1hKubj)}(h(const struct ssh_packet *p)h]j)}(hconst struct ssh_packet *ph](j7)}(hjfh]hconst}(hj1hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj1ubjI)}(h h]h }(hj1hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj1ubj7)}(hj:h]hstruct}(hj1hhhNhNubah}(h]h ]jCah"]h$]h&]uh1j6hj1ubjI)}(h h]h }(hj1hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj1ubh)}(hhh]j`)}(h ssh_packeth]h ssh_packet}(hj1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypejX reftargetj1modnameN classnameNj\j_)}jb]jW1c.ssam_trace_get_request_tcasbuh1hhj1ubjI)}(h h]h }(hj1hhhNhNubah}(h]h ]jUah"]h$]h&]uh1jHhj1ubjy)}(hj|h]h*}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jxhj1ubj`)}(hjh]hp}(hj1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j_hj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj1ubah}(h]h ]h"]h$]h&]hhuh1jhj41hhhj\1hKubeh}(h]h ]h"]h$]h&]hhj}uh1j0j~jhj01hhhj\1hKubah}(h]j+1ah ](jjeh"]h$]h&]jj)jhuh1j*hj\1hKhj-1hhubj)}(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&]uh1jhj-1hhhj\1hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj=2jj=2jjjuh1j%hhhj'(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)}(hjG2h]h Parameters}(hjI2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE2ubah}(h]h ]h"]h$]h&]uh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhjA2ubj)}(hhh]j)}(h+``const struct ssh_packet *p`` The packet. h](j )}(h``const struct ssh_packet *p``h]j)}(hjf2h]hconst struct ssh_packet *p}(hjh2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd2ubah}(h]h ]h"]h$]h&]uh1j h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/internal-api:67: ./drivers/platform/surface/aggregator/trace.hhKhj`2ubj))}(hhh]h)}(h The packet.h]h The packet.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{2hKhj|2ubah}(h]h ]h"]h$]h&]uh1j(hj`2ubeh}(h]h ]h"]h$]h&]uh1jhj{2hKhj]2ubah}(h]h ]h"]h$]h&]uh1jhjA2ubh)}(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.hhKhjA2ubh)}(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.hhKhjA2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj'(hhhNhNubeh}(h]jah ]h"] trace helpersah$]h&]uh1hhhhhhhhKAubeh}(h]jah ]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_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j2jjjj mj1jjSj_juj%jj$(jj2ju nametypes}(j2jj mjj_j%j$(j2uh}(jhjhj1jj#j,jjjvj{jD jI j j j j jNjSjjjjjVj[jpjujjj"j"j_$jd$j&j&jx(j}(jT*jY*j+j+j4.j9.j0j0j3j3js5jx5j6j6j9j9j:j:j<j<jHCjMCjEj EjFjFjGjGjHjHjIjIj"Kj'KjILjNLjpMjuMjNjNjQjQjRjSjSjTjWjWjZXj_XjYjYj\[ja[j\j\jc_jh_jajajbjbjdjdjfjfjhjhjkjkjSj#mj@mjEmjGnjLnjbojgojsjtjujujwjwjxjxjG{jL{j ~j~j8j=jMjRj΅jӅjOjTjՉjډjujjjjjjjjjjrjwj_jdj6j;j?jDjtjyj`jejtjyjjjjjAjFjjj.j3jjjj jjj$j)jjjjjjjjjVj[jjjLjQjҽj׽j4j9j"j'j|jjjjmjrjjjjjjj'j,jjjjjXj]jjjjjjjjjjjjjjj9j>jjjjjj jEjJjjjEjJjj jjj^jcjjjjj@jEjjjjjjjjjZj_j2 j7 jH jM j@jEjj jjj:j?jjjxj}jjjjjjbjjj$!j)!j#j!#j$j#$jj%j8%j=%j&j&jj'(jD(jI(j+*j0*j+j+j-j-jk/jp/j+1j01hjj+j"jMjDjojfjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j3KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.