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/tty/tty_buffermodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/pt_BR/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/tty/tty_buffermodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer.rsthKubhsection)}(hhh](htitle)}(h TTY Bufferh]h TTY Buffer}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(hhh]h bullet_list)}(hhh](h list_item)}(hhh]h paragraph)}(hhh]h reference)}(hhh]hFlip Buffer Management}(hhhhhNhNubah}(h]id1ah ]h"]h$]h&]refidflip-buffer-managementuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hOther Functions}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidother-functionsuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hBuffer Locking}(hj7hhhNhNubah}(h]id3ah ]h"]h$]h&]refidbuffer-lockinguh1hhj4ubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hInternal Functions}(hjYhhhNhNubah}(h]id4ah ]h"]h$]h&]refidinternal-functionsuh1hhjVubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhNhNubah}(h]contentsah ](contentslocaleh"]contentsah$]h&]uh1hhhhKhhhhubh)}(hX Here, we document functions for taking care of tty buffer and their flipping. Drivers are supposed to fill the buffer by one of those functions below and then flip the buffer, so that the data are passed to :doc:`line discipline ` for further processing.h](hHere, we document functions for taking care of tty buffer and their flipping. Drivers are supposed to fill the buffer by one of those functions below and then flip the buffer, so that the data are passed to }(hjhhhNhNubh)}(h":doc:`line discipline `h]hinline)}(hjh]hline discipline}(hjhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/tty_buffer refdomainjreftypedoc refexplicitrefwarn reftarget tty_ldiscuh1hhhhK hjubh for further processing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hFlip Buffer Managementh]hFlip Buffer Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]refidhuh1hhjhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single$tty_prepare_flip_string (C function)c.tty_prepare_flip_stringhNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hOsize_t tty_prepare_flip_string (struct tty_port *port, u8 **chars, size_t size)h]hdesc_signature_line)}(hNsize_t tty_prepare_flip_string(struct tty_port *port, u8 **chars, size_t size)h](h)}(hhh]h desc_sig_name)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j tty_prepare_flip_stringsbc.tty_prepare_flip_stringasbuh1hhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM\ubhdesc_sig_space)}(h h]h }(hj#hhhNhNubah}(h]h ]wah"]h$]h&]uh1j!hjhhhj hM\ubh desc_name)}(htty_prepare_flip_stringh]j)}(hjh]htty_prepare_flip_string}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j2hjhhhj hM\ubhdesc_parameterlist)}(h0(struct tty_port *port, u8 **chars, size_t size)h](hdesc_parameter)}(hstruct tty_port *porth](hdesc_sig_keyword)}(hstructh]hstruct}(hj[hhhNhNubah}(h]h ]kah"]h$]h&]uh1jYhjUubj")}(h h]h }(hjjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjUubh)}(hhh]j)}(htty_porth]htty_port}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj}modnameN classnameNjj)}j]jc.tty_prepare_flip_stringasbuh1hhjUubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjUubhdesc_sig_punctuation)}(h*h]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjUubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjOubjT)}(h u8 **charsh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]jc.tty_prepare_flip_stringasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharsh]hchars}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjOubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj8modnameN classnameNjj)}j]jc.tty_prepare_flip_stringasbuh1hhj/ubj")}(h h]h }(hjThhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj/ubj)}(hsizeh]hsize}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjOubeh}(h]h ]h"]h$]h&]hhuh1jMhjhhhj hM\ubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhj hM\ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj hM\hjhhubh desc_content)}(hhh]h)}(hmake room for charactersh]hmake room for characters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM\hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hM\ubeh}(h]h ](j functioneh"]h$]h&]domainj objtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Parameters** ``struct tty_port *port`` tty port ``u8 **chars`` return pointer for character write area ``size_t size`` desired size **Description** Prepare a block of space in the buffer for data. This is used for drivers that need their own block copy routines into the buffer. There is no guarantee the buffer is a DMA target! **Return** the length available and buffer pointer (**chars**) to the space which is now allocated and accounted for as ready for normal characters.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM`hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h#``struct tty_port *port`` tty port h](hterm)}(h``struct tty_port *port``h]hliteral)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM]hjubh definition)}(hhh]h)}(htty porth]htty port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM]hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM]hjubj)}(h7``u8 **chars`` return pointer for character write area h](j)}(h``u8 **chars``h]j)}(hj$h]h u8 **chars}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM^hjubj)}(hhh]h)}(h'return pointer for character write areah]h'return pointer for character write area}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9hM^hj:ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj9hM^hjubj)}(h``size_t size`` desired size h](j)}(h``size_t size``h]j)}(hj]h]h size_t size}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM_hjWubj)}(hhh]h)}(h desired sizeh]h desired size}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrhM_hjsubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]uh1jhjrhM_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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMahjubh)}(h0Prepare a block of space in the buffer for data.h]h0Prepare a block of space in the buffer for data.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM`hjubh)}(hThis is used for drivers that need their own block copy routines into the buffer. There is no guarantee the buffer is a DMA target!h]hThis is used for drivers that need their own block copy routines into the buffer. There is no guarantee the buffer is a DMA target!}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMbhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMehjubh)}(hthe length available and buffer pointer (**chars**) to the space which is now allocated and accounted for as ready for normal characters.h](h)the length available and buffer pointer (}(hjhhhNhNubj)}(h **chars**h]hchars}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhW) to the space which is now allocated and accounted for as ready for normal characters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMfhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j"tty_ldisc_receive_buf (C function)c.tty_ldisc_receive_bufhNtauh1jhjhhhNhNubj)}(hhh](j)}(h[size_t tty_ldisc_receive_buf (struct tty_ldisc *ld, const u8 *p, const u8 *f, size_t count)h]j)}(hZsize_t tty_ldisc_receive_buf(struct tty_ldisc *ld, const u8 *p, const u8 *f, size_t count)h](h)}(hhh]j)}(hsize_th]hsize_t}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj*modnameN classnameNjj)}j]j)}j tty_ldisc_receive_bufsbc.tty_ldisc_receive_bufasbuh1hhj!hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM{ubj")}(h h]h }(hjJhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!hhhjIhM{ubj3)}(htty_ldisc_receive_bufh]j)}(hjFh]htty_ldisc_receive_buf}(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj!hhhjIhM{ubjN)}(h>(struct tty_ldisc *ld, const u8 *p, const u8 *f, size_t count)h](jT)}(hstruct tty_ldisc *ldh](jZ)}(hj]h]hstruct}(hjwhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjsubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjsubh)}(hhh]j)}(h tty_ldisch]h tty_ldisc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]jDc.tty_ldisc_receive_bufasbuh1hhjsubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjsubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hldh]hld}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjoubjT)}(h const u8 *ph](jZ)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]jDc.tty_ldisc_receive_bufasbuh1hhjubj")}(h h]h }(hj$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hp}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjoubjT)}(h const u8 *fh](jZ)}(hjh]hconst}(hjWhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjSubj")}(h h]h }(hjdhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSubh)}(hhh]j)}(hu8h]hu8}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjwmodnameN classnameNjj)}j]jDc.tty_ldisc_receive_bufasbuh1hhjSubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjSubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hfh]hf}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjoubjT)}(h size_t counth](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]jDc.tty_ldisc_receive_bufasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hcounth]hcount}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjoubeh}(h]h ]h"]h$]h&]hhuh1jMhj!hhhjIhM{ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjIhM{ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjIhM{hjhhubj)}(hhh]h)}(hforward data to line disciplineh]hforward data to line discipline}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM{hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjIhM{ubeh}(h]h ](j functioneh"]h$]h&]jj jj8jj8jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct tty_ldisc *ld`` line discipline to process input ``const u8 *p`` char buffer ``const u8 *f`` ``TTY_NORMAL``, ``TTY_BREAK``, etc. flags buffer ``size_t count`` number of bytes to process **Description** Callers other than flush_to_ldisc() need to exclude the kworker from concurrent use of the line discipline, see paste_selection(). **Return** the number of bytes processed.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj<ubj)}(hhh](j)}(h:``struct tty_ldisc *ld`` line discipline to process input h](j)}(h``struct tty_ldisc *ld``h]j)}(hjah]hstruct tty_ldisc *ld}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM|hj[ubj)}(hhh]h)}(h line discipline to process inputh]h line discipline to process input}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjvhM|hjwubah}(h]h ]h"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]uh1jhjvhM|hjXubj)}(h``const u8 *p`` char buffer h](j)}(h``const u8 *p``h]j)}(hjh]h const u8 *p}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM}hjubj)}(hhh]h)}(h char bufferh]h char buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM}hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM}hjXubj)}(hA``const u8 *f`` ``TTY_NORMAL``, ``TTY_BREAK``, etc. flags buffer h](j)}(h``const u8 *f``h]j)}(hjh]h const u8 *f}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chM~hjubj)}(hhh]h)}(h0``TTY_NORMAL``, ``TTY_BREAK``, etc. flags bufferh](j)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, }(hjhhhNhNubj)}(h ``TTY_BREAK``h]h TTY_BREAK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, etc. flags buffer}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM~hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM~hjXubj)}(h,``size_t count`` number of bytes to process h](j)}(h``size_t count``h]j)}(hj,h]h size_t count}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj&ubj)}(hhh]h)}(hnumber of bytes to processh]hnumber of bytes to process}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjXubeh}(h]h ]h"]h$]h&]uh1jhj<ubh)}(h**Description**h]j)}(hjgh]h Description}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj<ubh)}(hCallers other than flush_to_ldisc() need to exclude the kworker from concurrent use of the line discipline, see paste_selection().h]hCallers other than flush_to_ldisc() need to exclude the kworker from concurrent use of the line discipline, see paste_selection().}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj<ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj<ubh)}(hthe number of bytes processed.h]hthe number of bytes processed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!tty_flip_buffer_push (C function)c.tty_flip_buffer_pushhNtauh1jhjhhhNhNubj)}(hhh](j)}(h1void tty_flip_buffer_push (struct tty_port *port)h]j)}(h0void tty_flip_buffer_push(struct tty_port *port)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMubj3)}(htty_flip_buffer_pushh]j)}(htty_flip_buffer_pushh]htty_flip_buffer_push}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjhhhjhMubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubh)}(hhh]j)}(htty_porth]htty_port}(hj1 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj. ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj3 modnameN classnameNjj)}j]j)}j jsbc.tty_flip_buffer_pushasbuh1hhj ubj")}(h h]h }(hjQ hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj)}(hjh]h*}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hporth]hport}(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj ubah}(h]h ]h"]h$]h&]hhuh1jMhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hpush terminal buffersh]hpush terminal buffers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j functioneh"]h$]h&]jj jj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct tty_port *port`` tty port to push **Description** Queue a push of the terminal flip buffers to the line discipline. Can be called from IRQ/atomic context. In the event of the queue being busy for flipping the work will be held off and retried later.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj ubj)}(hhh]j)}(h+``struct tty_port *port`` tty port to push h](j)}(h``struct tty_port *port``h]j)}(hj h]hstruct tty_port *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj ubj)}(hhh]h)}(htty port to pushh]htty port to push}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj 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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj ubh)}(hhQueue a push of the terminal flip buffers to the line discipline. Can be called from IRQ/atomic context.h]hhQueue a push of the terminal flip buffers to the line discipline. Can be called from IRQ/atomic context.}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj ubh)}(h^In the event of the queue being busy for flipping the work will be held off and retried later.h]h^In the event of the queue being busy for flipping the work will be held off and retried later.}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:17: ./drivers/tty/tty_buffer.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.tty_insert_flip_string_fixed_flag (C function)#c.tty_insert_flip_string_fixed_flaghNtauh1jhjhhhNhNubj)}(hhh](j)}(hgsize_t tty_insert_flip_string_fixed_flag (struct tty_port *port, const u8 *chars, u8 flag, size_t size)h]j)}(hfsize_t tty_insert_flip_string_fixed_flag(struct tty_port *port, const u8 *chars, u8 flag, size_t size)h](h)}(hhh]j)}(hsize_th]hsize_t}(hji hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjf ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjk modnameN classnameNjj)}j]j)}j !tty_insert_flip_string_fixed_flagsb#c.tty_insert_flip_string_fixed_flagasbuh1hhjb hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjb hhhj hKubj3)}(h!tty_insert_flip_string_fixed_flagh]j)}(hj h]h!tty_insert_flip_string_fixed_flag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjb hhhj hKubjN)}(h>(struct tty_port *port, const u8 *chars, u8 flag, size_t size)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubh)}(hhh]j)}(htty_porth]htty_port}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj modnameN classnameNjj)}j]j #c.tty_insert_flip_string_fixed_flagasbuh1hhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hporth]hport}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj ubjT)}(hconst u8 *charsh](jZ)}(hjh]hconst}(hj( hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj$ ubj")}(h h]h }(hj5 hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj$ ubh)}(hhh]j)}(hu8h]hu8}(hjF hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjH modnameN classnameNjj)}j]j #c.tty_insert_flip_string_fixed_flagasbuh1hhj$ ubj")}(h h]h }(hjd hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj$ ubj)}(hjh]h*}(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ ubj)}(hcharsh]hchars}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj ubjT)}(hu8 flagh](h)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj modnameN classnameNjj)}j]j #c.tty_insert_flip_string_fixed_flagasbuh1hhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj)}(hflagh]hflag}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj ubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj modnameN classnameNjj)}j]j #c.tty_insert_flip_string_fixed_flagasbuh1hhj ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj)}(hsizeh]hsize}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj ubeh}(h]h ]h"]h$]h&]hhuh1jMhjb hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj^ hhhj hKubah}(h]jY ah ](jjeh"]h$]h&]jj)jhuh1jhj hKhj[ hhubj)}(hhh]h)}(h add characters to the tty bufferh]h add characters to the tty buffer}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhj6 hhubah}(h]h ]h"]h$]h&]uh1jhj[ hhhj hKubeh}(h]h ](j functioneh"]h$]h&]jj jjQ jjQ jjjuh1jhhhjhNhNubj)}(hX7**Parameters** ``struct tty_port *port`` tty port ``const u8 *chars`` characters ``u8 flag`` flag value for each character ``size_t size`` size **Description** Queue a series of bytes to the tty buffering. All the characters passed are marked with the supplied flag. **Return** the number added.h](h)}(h**Parameters**h]j)}(hj[ h]h Parameters}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjU ubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hjz h]hstruct tty_port *port}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjt ubj)}(hhh]h)}(htty porth]htty port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhjt ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjq ubj)}(h``const u8 *chars`` characters h](j)}(h``const u8 *chars``h]j)}(hj h]hconst u8 *chars}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhj ubj)}(hhh]h)}(h charactersh]h characters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjq ubj)}(h*``u8 flag`` flag value for each character h](j)}(h ``u8 flag``h]j)}(hj h]hu8 flag}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhj ubj)}(hhh]h)}(hflag value for each characterh]hflag value for each character}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhjq ubj)}(h``size_t size`` size h](j)}(h``size_t size``h]j)}(hj% h]h size_t size}(hj' hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj# ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhj ubj)}(hhh]h)}(hsizeh]hsize}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj: hKhj; ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj: hKhjq ubeh}(h]h ]h"]h$]h&]uh1jhjU ubh)}(h**Description**h]j)}(hj` h]h Description}(hjb hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjU ubh)}(hjQueue a series of bytes to the tty buffering. All the characters passed are marked with the supplied flag.h]hjQueue a series of bytes to the tty buffering. All the characters passed are marked with the supplied flag.}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjU ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjU ubh)}(hthe number added.h]hthe number added.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjU ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j)tty_insert_flip_string_flags (C function)c.tty_insert_flip_string_flagshNtauh1jhjhhhNhNubj)}(hhh](j)}(hjsize_t tty_insert_flip_string_flags (struct tty_port *port, const u8 *chars, const u8 *flags, size_t size)h]j)}(hisize_t tty_insert_flip_string_flags(struct tty_port *port, const u8 *chars, const u8 *flags, size_t size)h](h)}(hhh]j)}(hsize_th]hsize_t}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj modnameN classnameNjj)}j]j)}j tty_insert_flip_string_flagssbc.tty_insert_flip_string_flagsasbuh1hhj hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK'ubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj hhhj hK'ubj3)}(htty_insert_flip_string_flagsh]j)}(hj h]htty_insert_flip_string_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj hhhj hK'ubjN)}(hF(struct tty_port *port, const u8 *chars, const u8 *flags, size_t size)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hj+hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(htty_porth]htty_port}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj>modnameN classnameNjj)}j]j c.tty_insert_flip_string_flagsasbuh1hhjubj")}(h h]h }(hjZhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(hconst u8 *charsh](jZ)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j c.tty_insert_flip_string_flagsasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcharsh]hchars}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(hconst u8 *flagsh](jZ)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j c.tty_insert_flip_string_flagsasbuh1hhjubj")}(h h]h }(hj:hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hflagsh]hflags}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjsmodnameN classnameNjj)}j]j c.tty_insert_flip_string_flagsasbuh1hhjjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubeh}(h]h ]h"]h$]h&]hhuh1jMhj hhhj hK'ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hK'ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hK'hj hhubj)}(hhh]h)}(h add characters to the tty bufferh]h add characters to the tty buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK'hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK'ubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(hX9**Parameters** ``struct tty_port *port`` tty port ``const u8 *chars`` characters ``const u8 *flags`` flag bytes ``size_t size`` size **Description** Queue a series of bytes to the tty buffering. For each character the flags array indicates the status of the character. **Return** the number added.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK+hjubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK(hjubj)}(hhh]h)}(htty porth]htty port}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK(hjubj)}(h``const u8 *chars`` characters h](j)}(h``const u8 *chars``h]j)}(hjAh]hconst u8 *chars}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK)hj;ubj)}(hhh]h)}(h charactersh]h characters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhK)hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhjVhK)hjubj)}(h``const u8 *flags`` flag bytes h](j)}(h``const u8 *flags``h]j)}(hjzh]hconst u8 *flags}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK*hjtubj)}(hhh]h)}(h flag bytesh]h flag bytes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK*hjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjhK*hjubj)}(h``size_t size`` size h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK+hjubj)}(hhh]h)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK+hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK-hjubh)}(hwQueue a series of bytes to the tty buffering. For each character the flags array indicates the status of the character.h]hwQueue a series of bytes to the tty buffering. For each character the flags array indicates the status of the character.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK,hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK/hjubh)}(hthe number added.h]hthe number added.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK0hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!tty_insert_flip_char (C function)c.tty_insert_flip_charhNtauh1jhjhhhNhNubj)}(hhh](j)}(hCsize_t tty_insert_flip_char (struct tty_port *port, u8 ch, u8 flag)h]j)}(hBsize_t tty_insert_flip_char(struct tty_port *port, u8 ch, u8 flag)h](h)}(hhh]j)}(hsize_th]hsize_t}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj_modnameN classnameNjj)}j]j)}j tty_insert_flip_charsbc.tty_insert_flip_charasbuh1hhjVhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK:ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjVhhhj~hK:ubj3)}(htty_insert_flip_charh]j)}(hj{h]htty_insert_flip_char}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjVhhhj~hK:ubjN)}(h'(struct tty_port *port, u8 ch, u8 flag)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(htty_porth]htty_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]jyc.tty_insert_flip_charasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(hu8 chh](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj!modnameN classnameNjj)}j]jyc.tty_insert_flip_charasbuh1hhjubj")}(h h]h }(hj=hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hchh]hch}(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(hu8 flagh](h)}(hhh]j)}(hu8h]hu8}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjimodnameN classnameNjj)}j]jyc.tty_insert_flip_charasbuh1hhj`ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj`ubj)}(hflagh]hflag}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubeh}(h]h ]h"]h$]h&]hhuh1jMhjVhhhj~hK:ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjRhhhj~hK:ubah}(h]jMah ](jjeh"]h$]h&]jj)jhuh1jhj~hK:hjOhhubj)}(hhh]h)}(h#add one character to the tty bufferh]h#add one character to the tty buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK:hjhhubah}(h]h ]h"]h$]h&]uh1jhjOhhhj~hK:ubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port ``u8 ch`` character ``u8 flag`` flag byte **Description** Queue a single byte **ch** to the tty buffering, with an optional flag.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK>hjubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhK;hjubj)}(hhh]h)}(htty porth]htty port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK;hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK;hjubj)}(h``u8 ch`` character h](j)}(h ``u8 ch``h]j)}(hj7h]hu8 ch}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:21: ./include/linux/tty_flip.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]flip buffer managementah$]h&]uh1hhhhhhhhKubh transition)}(h----h]h}(h]h ]h"]h$]h&]uh1jhhhKhhhhubh)}(hhh](h)}(hOther Functionsh]hOther Functions}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j#tty_buffer_space_avail (C function)c.tty_buffer_space_availhNtauh1jhjhhhNhNubj)}(hhh](j)}(h;unsigned int tty_buffer_space_avail (struct tty_port *port)h]j)}(h:unsigned int tty_buffer_space_avail(struct tty_port *port)h](j)}(hunsignedh]hunsigned}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK[ubj")}(h h]h }(hj5hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj"hhhj4hK[ubj)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hK[ubj")}(h h]h }(hjQhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj"hhhj4hK[ubj3)}(htty_buffer_space_availh]j)}(htty_buffer_space_availh]htty_buffer_space_avail}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj"hhhj4hK[ubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj{ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj{ubh)}(hhh]j)}(htty_porth]htty_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j)}j jesbc.tty_buffer_space_availasbuh1hhj{ubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj{ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjwubah}(h]h ]h"]h$]h&]hhuh1jMhj"hhhj4hK[ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj4hK[ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj4hK[hjhhubj)}(hhh]h)}(hreturn unused buffer spaceh]hreturn unused buffer space}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK[hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hK[ubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(hX[**Parameters** ``struct tty_port *port`` tty port owning the flip buffer **Return** the # of bytes which can be written by the driver without reaching the buffer limit. **Note** this does not guarantee that memory is available to write the returned # of bytes (use tty_prepare_flip_string() to pre-allocate if memory guarantee is required).h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK_hjubj)}(hhh]j)}(h:``struct tty_port *port`` tty port owning the flip buffer h](j)}(h``struct tty_port *port``h]j)}(hjCh]hstruct tty_port *port}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK\hj=ubj)}(hhh]h)}(htty port owning the flip bufferh]htty port owning the flip buffer}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhK\hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhK\hj:ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hj~h]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK^hjubh)}(hTthe # of bytes which can be written by the driver without reaching the buffer limit.h]hTthe # of bytes which can be written by the driver without reaching the buffer limit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chK^hjubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chKahjubh)}(hthis does not guarantee that memory is available to write the returned # of bytes (use tty_prepare_flip_string() to pre-allocate if memory guarantee is required).h]hthis does not guarantee that memory is available to write the returned # of bytes (use tty_prepare_flip_string() to pre-allocate if memory guarantee is required).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chKahjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!tty_buffer_set_limit (C function)c.tty_buffer_set_limithNtauh1jhjhhhNhNubj)}(hhh](j)}(h;int tty_buffer_set_limit (struct tty_port *port, int limit)h]j)}(h:int tty_buffer_set_limit(struct tty_port *port, int limit)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMVubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhMVubj3)}(htty_buffer_set_limith]j)}(htty_buffer_set_limith]htty_buffer_set_limit}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjhhhjhMVubjN)}(h"(struct tty_port *port, int limit)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj'hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj#ubj")}(h h]h }(hj4hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj#ubh)}(hhh]j)}(htty_porth]htty_port}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjGmodnameN classnameNjj)}j]j)}j j sbc.tty_buffer_set_limitasbuh1hhj#ubj")}(h h]h }(hjehhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj#ubj)}(hjh]h*}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(h int limith](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hlimith]hlimit}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubeh}(h]h ]h"]h$]h&]hhuh1jMhjhhhjhMVubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMVubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMVhjhhubj)}(hhh]h)}(h"change the tty buffer memory limith]h"change the tty buffer memory limit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMVhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMVubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port to change ``int limit`` memory limit to set **Description** Change the tty buffer memory limit. Must be called before the other tty buffer functions are used.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMZhjubj)}(hhh](j)}(h-``struct tty_port *port`` tty port to change h](j)}(h``struct tty_port *port``h]j)}(hj h]hstruct tty_port *port}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMWhjubj )}(hhh]h)}(htty port to changeh]htty port to change}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMWhj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hMWhjubj)}(h"``int limit`` memory limit to set h](j)}(h ``int limit``h]j)}(hjYh]h int limit}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMXhjSubj)}(hhh]h)}(hmemory limit to seth]hmemory limit to set}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMXhjoubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjnhMXhjubeh}(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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMZhjubh)}(h#Change the tty buffer memory limit.h]h#Change the tty buffer memory limit.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chMYhjubh)}(h>Must be called before the other tty buffer functions are used.h]h>Must be called before the other tty buffer functions are used.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:30: ./drivers/tty/tty_buffer.chM[hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]j$ah ]h"]other functionsah$]h&]uh1hhhhhhhhKubj)}(h----h]h}(h]h ]h"]h$]h&]uh1jhhhK!hhhhubh)}(hhh](h)}(hBuffer Lockingh]hBuffer Locking}(hjhhhNhNubah}(h]h ]h"]h$]h&]jj@uh1hhjhhhhhK$ubh)}(h9These are used only in special circumstances. Avoid them.h]h9These are used only in special circumstances. Avoid them.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&tty_buffer_lock_exclusive (C function)c.tty_buffer_lock_exclusivehNtauh1jhjhhhNhNubj)}(hhh](j)}(h6void tty_buffer_lock_exclusive (struct tty_port *port)h]j)}(h5void tty_buffer_lock_exclusive(struct tty_port *port)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK,ubj")}(h h]h }(hj'hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhj&hK,ubj3)}(htty_buffer_lock_exclusiveh]j)}(htty_buffer_lock_exclusiveh]htty_buffer_lock_exclusive}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjhhhj&hK,ubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjUhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjQubj")}(h h]h }(hjbhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjQubh)}(hhh]j)}(htty_porth]htty_port}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjumodnameN classnameNjj)}j]j)}j j;sbc.tty_buffer_lock_exclusiveasbuh1hhjQubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjQubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjMubah}(h]h ]h"]h$]h&]hhuh1jMhjhhhj&hK,ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj&hK,ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj&hK,hj hhubj)}(hhh]h)}(hgain exclusive access to bufferh]hgain exclusive access to buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK,hjhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj&hK,ubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct tty_port *port`` tty port owning the flip buffer **Description** Guarantees safe use of the :c:type:`tty_ldisc_ops.receive_buf\(\) ` method by excluding the buffer work and any pending flush from using the flip buffer. Data can continue to be added concurrently to the flip buffer from the driver side. See also tty_buffer_unlock_exclusive().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK0hjubj)}(hhh]j)}(h:``struct tty_port *port`` tty port owning the flip buffer h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK-hjubj)}(hhh]h)}(htty port owning the flip bufferh]htty port owning the flip buffer}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hK-hj/ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj.hK-hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjTh]h Description}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK/hjubh)}(hGuarantees safe use of the :c:type:`tty_ldisc_ops.receive_buf\(\) ` method by excluding the buffer work and any pending flush from using the flip buffer. Data can continue to be added concurrently to the flip buffer from the driver side.h](hGuarantees safe use of the }(hjjhhhNhNubh)}(h7:c:type:`tty_ldisc_ops.receive_buf\(\) `h]j)}(hjth]htty_ldisc_ops.receive_buf()}(hjvhhhNhNubah}(h]h ](jj c-typeeh"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]refdocj refdomainj reftypetype refexplicitrefwarnjj)}j]sbj tty_ldisc_opsuh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK.hjjubh method by excluding the buffer work and any pending flush from using the flip buffer. Data can continue to be added concurrently to the flip buffer from the driver side.}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK.hjubh)}(h'See also tty_buffer_unlock_exclusive().h]h'See also tty_buffer_unlock_exclusive().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chK2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j(tty_buffer_unlock_exclusive (C function)c.tty_buffer_unlock_exclusivehNtauh1jhjhhhNhNubj)}(hhh](j)}(h8void tty_buffer_unlock_exclusive (struct tty_port *port)h]j)}(h7void tty_buffer_unlock_exclusive(struct tty_port *port)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKFubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhKFubj3)}(htty_buffer_unlock_exclusiveh]j)}(htty_buffer_unlock_exclusiveh]htty_buffer_unlock_exclusive}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjhhhjhKFubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(htty_porth]htty_port}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj+modnameN classnameNjj)}j]j)}j jsbc.tty_buffer_unlock_exclusiveasbuh1hhjubj")}(h h]h }(hjIhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubah}(h]h ]h"]h$]h&]hhuh1jMhjhhhjhKFubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKFubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKFhjhhubj)}(hhh]h)}(hrelease exclusive accessh]hrelease exclusive access}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKFhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKFubeh}(h]h ](j functioneh"]h$]h&]jj jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port owning the flip buffer **Description** The buffer work is restarted if there is data in the flip buffer. See also tty_buffer_lock_exclusive().h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKJhjubj)}(hhh]j)}(h:``struct tty_port *port`` tty port owning the flip buffer h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKGhjubj)}(hhh]h)}(htty port owning the flip bufferh]htty port owning the flip buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKGhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKIhjubh)}(hAThe buffer work is restarted if there is data in the flip buffer.h]hAThe buffer work is restarted if there is data in the flip buffer.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKHhjubh)}(h%See also tty_buffer_lock_exclusive().h]h%See also tty_buffer_lock_exclusive().}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:40: ./drivers/tty/tty_buffer.chKJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jFah ]h"]buffer lockingah$]h&]uh1hhhhhhhhK$ubj)}(h----h]h}(h]h ]h"]h$]h&]uh1jhhhK+hhhhubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hjYhhhNhNubah}(h]h ]h"]h$]h&]jjbuh1hhjVhhhhhK.ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j tty_buffer_free_all (C function)c.tty_buffer_free_allhNtauh1jhjVhhhNhNubj)}(hhh](j)}(h0void tty_buffer_free_all (struct tty_port *port)h]j)}(h/void tty_buffer_free_all(struct tty_port *port)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKyubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj|hhhjhKyubj3)}(htty_buffer_free_allh]j)}(htty_buffer_free_allh]htty_buffer_free_all}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj|hhhjhKyubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(htty_porth]htty_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j)}j jsbc.tty_buffer_free_allasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubah}(h]h ]h"]h$]h&]hhuh1jMhj|hhhjhKyubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjxhhhjhKyubah}(h]jsah ](jjeh"]h$]h&]jj)jhuh1jhjhKyhjuhhubj)}(hhh]h)}(hfree buffers used by a ttyh]hfree buffers used by a tty}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKyhj=hhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKyubeh}(h]h ](j functioneh"]h$]h&]jj jjXjjXjjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port to free from **Description** Remove all the buffers pending on a tty whether queued with data or in the free ring. Must be called when the tty is no longer in use.h](h)}(h**Parameters**h]j)}(hjbh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chK}hj\ubj)}(hhh]j)}(h0``struct tty_port *port`` tty port to free from h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKzhj{ubj)}(hhh]h)}(htty port to free fromh]htty port to free from}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKzhjubah}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKzhjxubah}(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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chK|hj\ubh)}(hRemove all the buffers pending on a tty whether queued with data or in the free ring. Must be called when the tty is no longer in use.h]hRemove all the buffers pending on a tty whether queued with data or in the free ring. Must be called when the tty is no longer in use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chK{hj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_buffer_alloc (C function)c.tty_buffer_allochNtauh1jhjVhhhNhNubj)}(hhh](j)}(hIstruct tty_buffer * tty_buffer_alloc (struct tty_port *port, size_t size)h]j)}(hGstruct tty_buffer *tty_buffer_alloc(struct tty_port *port, size_t size)h](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjhhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhKubh)}(hhh]j)}(h tty_bufferh]h tty_buffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj"modnameN classnameNjj)}j]j)}j tty_buffer_allocsbc.tty_buffer_allocasbuh1hhjhhhjhKubj")}(h h]h }(hjAhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjhhhjhKubj)}(hjh]h*}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj3)}(htty_buffer_alloch]j)}(hj>h]htty_buffer_alloc}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjhhhjhKubjN)}(h$(struct tty_port *port, size_t size)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj{hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjwubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjwubh)}(hhh]j)}(htty_porth]htty_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j<c.tty_buffer_allocasbuh1hhjwubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjwubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(hporth]hport}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjsubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j<c.tty_buffer_allocasbuh1hhjubj")}(h h]h }(hj hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hsizeh]hsize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjsubeh}(h]h ]h"]h$]h&]hhuh1jMhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hallocate a tty bufferh]hallocate a tty buffer}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhjAhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j functioneh"]h$]h&]jj jj\jj\jjjuh1jhhhjVhNhNubj)}(hXh**Parameters** ``struct tty_port *port`` tty port ``size_t size`` desired size (characters) **Description** Allocate a new tty buffer to hold the desired number of characters. We round our buffers off in 256 character chunks to get better allocation behaviour. **Return** ``NULL`` if out of memory or the allocation would exceed the per device queue.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj`ubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hjh]hstruct tty_port *port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhjubj)}(hhh]h)}(htty porth]htty port}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj|ubj)}(h*``size_t size`` desired size (characters) h](j)}(h``size_t size``h]j)}(hjh]h size_t size}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhjubj)}(hhh]h)}(hdesired size (characters)h]hdesired size (characters)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj|ubeh}(h]h ]h"]h$]h&]uh1jhj`ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj`ubh)}(hAllocate a new tty buffer to hold the desired number of characters. We round our buffers off in 256 character chunks to get better allocation behaviour.h]hAllocate a new tty buffer to hold the desired number of characters. We round our buffers off in 256 character chunks to get better allocation behaviour.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj`ubh)}(h **Return**h]j)}(hj h]hReturn}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj`ubh)}(hN``NULL`` if out of memory or the allocation would exceed the per device queue.h](j)}(h``NULL``h]hNULL}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubhF if out of memory or the allocation would exceed the per device queue.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj`ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_buffer_free (C function)c.tty_buffer_freehNtauh1jhjVhhhNhNubj)}(hhh](j)}(hBvoid tty_buffer_free (struct tty_port *port, struct tty_buffer *b)h]j)}(hAvoid tty_buffer_free(struct tty_port *port, struct tty_buffer *b)h](j)}(hvoidh]hvoid}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjohhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjohhhjhKubj3)}(htty_buffer_freeh]j)}(htty_buffer_freeh]htty_buffer_free}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjohhhjhKubjN)}(h-(struct tty_port *port, struct tty_buffer *b)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hjhhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubh)}(hhh]j)}(htty_porth]htty_port}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjmodnameN classnameNjj)}j]j)}j jsbc.tty_buffer_freeasbuh1hhjubj")}(h h]h }(hjhhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hporth]hport}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubjT)}(hstruct tty_buffer *bh](jZ)}(hj]h]hstruct}(hj" hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj ubj")}(h h]h }(hj/ hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubh)}(hhh]j)}(h tty_bufferh]h tty_buffer}(hj@ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj= ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjB modnameN classnameNjj)}j]jc.tty_buffer_freeasbuh1hhj ubj")}(h h]h }(hj^ hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj ubj)}(hjh]h*}(hjl hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hbh]hb}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShjubeh}(h]h ]h"]h$]h&]hhuh1jMhjohhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjkhhhjhKubah}(h]jfah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhhubj)}(hhh]h)}(hfree a tty bufferh]hfree a tty buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj hhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhKubeh}(h]h ](j functioneh"]h$]h&]jj jj jj jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port owning the buffer ``struct tty_buffer *b`` the buffer to free **Description** Free a tty buffer, or add it to the free list according to our internal strategy.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj ubj)}(hhh](j)}(h5``struct tty_port *port`` tty port owning the buffer h](j)}(h``struct tty_port *port``h]j)}(hj h]hstruct tty_port *port}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj ubj)}(hhh]h)}(htty port owning the bufferh]htty port owning the buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h,``struct tty_buffer *b`` the buffer to free h](j)}(h``struct tty_buffer *b``h]j)}(hj!h]hstruct tty_buffer *b}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj!ubj)}(hhh]h)}(hthe buffer to freeh]hthe buffer to free}(hj6!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2!hKhj3!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj2!hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjX!h]h Description}(hjZ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV!ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj ubh)}(hQFree a tty buffer, or add it to the free list according to our internal strategy.h]hQFree a tty buffer, or add it to the free list according to our internal strategy.}(hjn!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_buffer_flush (C function)c.tty_buffer_flushhNtauh1jhjVhhhNhNubj)}(hhh](j)}(hDvoid tty_buffer_flush (struct tty_struct *tty, struct tty_ldisc *ld)h]j)}(hCvoid tty_buffer_flush(struct tty_struct *tty, struct tty_ldisc *ld)h](j)}(hvoidh]hvoid}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKubj")}(h h]h }(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!hhhj!hKubj3)}(htty_buffer_flushh]j)}(htty_buffer_flushh]htty_buffer_flush}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj!hhhj!hKubjN)}(h.(struct tty_struct *tty, struct tty_ldisc *ld)h](jT)}(hstruct tty_struct *ttyh](jZ)}(hj]h]hstruct}(hj!hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj!ubj")}(h h]h }(hj!hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj!modnameN classnameNjj)}j]j)}j j!sbc.tty_buffer_flushasbuh1hhj!ubj")}(h h]h }(hj"hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj!ubj)}(hjh]h*}(hj&"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(httyh]htty}(hj3"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj!ubjT)}(hstruct tty_ldisc *ldh](jZ)}(hj]h]hstruct}(hjL"hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhjH"ubj")}(h h]h }(hjY"hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjH"ubh)}(hhh]j)}(h tty_ldisch]h tty_ldisc}(hjj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg"ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjl"modnameN classnameNjj)}j]j"c.tty_buffer_flushasbuh1hhjH"ubj")}(h h]h }(hj"hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjH"ubj)}(hjh]h*}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubj)}(hldh]hld}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjH"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj!ubeh}(h]h ]h"]h$]h&]hhuh1jMhj!hhhj!hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj!hhhj!hKubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj!hKhj!hhubj)}(hhh]h)}(hflush full tty buffersh]hflush full tty buffers}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj"hhubah}(h]h ]h"]h$]h&]uh1jhj!hhhj!hKubeh}(h]h ](j functioneh"]h$]h&]jj jj"jj"jjjuh1jhhhjVhNhNubj)}(hXA**Parameters** ``struct tty_struct *tty`` tty to flush ``struct tty_ldisc *ld`` optional ldisc ptr (must be referenced) **Description** Flush all the buffers containing receive data. If **ld** != ``NULL``, flush the ldisc input buffer. Locking: takes buffer lock to ensure single-threaded flip buffer 'consumer'.h](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj"ubj)}(hhh](j)}(h(``struct tty_struct *tty`` tty to flush h](j)}(h``struct tty_struct *tty``h]j)}(hj#h]hstruct tty_struct *tty}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj #ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj#ubj)}(hhh]h)}(h tty to flushh]h tty to flush}(hj'#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj##hKhj$#ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj##hKhj#ubj)}(hA``struct tty_ldisc *ld`` optional ldisc ptr (must be referenced) h](j)}(h``struct tty_ldisc *ld``h]j)}(hjG#h]hstruct tty_ldisc *ld}(hjI#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE#ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhjA#ubj)}(hhh]h)}(h'optional ldisc ptr (must be referenced)h]h'optional ldisc ptr (must be referenced)}(hj`#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\#hKhj]#ubah}(h]h ]h"]h$]h&]uh1jhjA#ubeh}(h]h ]h"]h$]h&]uh1jhj\#hKhj#ubeh}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hj#h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj"ubh)}(hcFlush all the buffers containing receive data. If **ld** != ``NULL``, flush the ldisc input buffer.h](h2Flush all the buffers containing receive data. If }(hj#hhhNhNubj)}(h**ld**h]hld}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh != }(hj#hhhNhNubj)}(h``NULL``h]hNULL}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh, flush the ldisc input buffer.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj"ubh)}(hLLocking: takes buffer lock to ensure single-threaded flip buffer 'consumer'.h]hPLocking: takes buffer lock to ensure single-threaded flip buffer ‘consumer’.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j&__tty_buffer_request_room (C function)c.__tty_buffer_request_roomhNtauh1jhjVhhhNhNubj)}(hhh](j)}(hNint __tty_buffer_request_room (struct tty_port *port, size_t size, bool flags)h]j)}(hMint __tty_buffer_request_room(struct tty_port *port, size_t size, bool flags)h](j)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKubj")}(h h]h }(hj $hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj#hhhj$hKubj3)}(h__tty_buffer_request_roomh]j)}(h__tty_buffer_request_roomh]h__tty_buffer_request_room}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj#hhhj$hKubjN)}(h0(struct tty_port *port, size_t size, bool flags)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj7$hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj3$ubj")}(h h]h }(hjD$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3$ubh)}(hhh]j)}(htty_porth]htty_port}(hjU$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR$ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetjW$modnameN classnameNjj)}j]j)}j j$sbc.__tty_buffer_request_roomasbuh1hhj3$ubj")}(h h]h }(hju$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj3$ubj)}(hjh]h*}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3$ubj)}(hporth]hport}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj/$ubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj$modnameN classnameNjj)}j]jq$c.__tty_buffer_request_roomasbuh1hhj$ubj")}(h h]h }(hj$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj$ubj)}(hsizeh]hsize}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj/$ubjT)}(h bool flagsh](j)}(hboolh]hbool}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj")}(h h]h }(hj$hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj$ubj)}(hflagsh]hflags}(hj %hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj/$ubeh}(h]h ]h"]h$]h&]hhuh1jMhj#hhhj$hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj#hhhj$hKubah}(h]j#ah ](jjeh"]h$]h&]jj)jhuh1jhj$hKhj#hhubj)}(hhh]h)}(hgrow tty buffer if neededh]hgrow tty buffer if needed}(hj7%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chKhj4%hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj$hKubeh}(h]h ](j functioneh"]h$]h&]jj jjO%jjO%jjjuh1jhhhjVhNhNubj)}(hX**Parameters** ``struct tty_port *port`` tty port ``size_t size`` size desired ``bool flags`` buffer has to store flags along character data **Description** Make at least **size** bytes of linear space available for the tty buffer. Will change over to a new buffer if the current buffer is encoded as ``TTY_NORMAL`` (so has no flags buffer) and the new buffer requires a flags buffer. **Return** the size we managed to find.h](h)}(h**Parameters**h]j)}(hjY%h]h Parameters}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW%ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhjS%ubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hjx%h]hstruct tty_port *port}(hjz%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjv%ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhjr%ubj)}(hhh]h)}(htty porth]htty port}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhjr%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjo%ubj)}(h``size_t size`` size desired h](j)}(h``size_t size``h]j)}(hj%h]h size_t size}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj%ubj)}(hhh]h)}(h size desiredh]h size desired}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjo%ubj)}(h>``bool flags`` buffer has to store flags along character data h](j)}(h``bool flags``h]j)}(hj%h]h bool flags}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj%ubj)}(hhh]h)}(h.buffer has to store flags along character datah]h.buffer has to store flags along character data}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjo%ubeh}(h]h ]h"]h$]h&]uh1jhjS%ubh)}(h**Description**h]j)}(hj%&h]h Description}(hj'&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#&ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhjS%ubh)}(hJMake at least **size** bytes of linear space available for the tty buffer.h](hMake at least }(hj;&hhhNhNubj)}(h**size**h]hsize}(hjC&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;&ubh4 bytes of linear space available for the tty buffer.}(hj;&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhjS%ubh)}(hWill change over to a new buffer if the current buffer is encoded as ``TTY_NORMAL`` (so has no flags buffer) and the new buffer requires a flags buffer.h](hEWill change over to a new buffer if the current buffer is encoded as }(hj\&hhhNhNubj)}(h``TTY_NORMAL``h]h TTY_NORMAL}(hjd&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\&ubhE (so has no flags buffer) and the new buffer requires a flags buffer.}(hj\&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhjS%ubh)}(h **Return**h]j)}(hj&h]hReturn}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}&ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM hjS%ubh)}(hthe size we managed to find.h]hthe size we managed to find.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM hjS%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jflush_to_ldisc (C function)c.flush_to_ldischNtauh1jhjVhhhNhNubj)}(hhh](j)}(h.void flush_to_ldisc (struct work_struct *work)h]j)}(h-void flush_to_ldisc(struct work_struct *work)h](j)}(hvoidh]hvoid}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMubj")}(h h]h }(hj&hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj&hhhj&hMubj3)}(hflush_to_ldisch]j)}(hflush_to_ldisch]hflush_to_ldisc}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj&hhhj&hMubjN)}(h(struct work_struct *work)h]jT)}(hstruct work_struct *workh](jZ)}(hj]h]hstruct}(hj'hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj&ubj")}(h h]h }(hj'hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj&ubh)}(hhh]j)}(h work_structh]h work_struct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj!'modnameN classnameNjj)}j]j)}j j&sbc.flush_to_ldiscasbuh1hhj&ubj")}(h h]h }(hj?'hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj&ubj)}(hjh]h*}(hjM'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubj)}(hworkh]hwork}(hjZ'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj&ubah}(h]h ]h"]h$]h&]hhuh1jMhj&hhhj&hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj&hhhj&hMubah}(h]j&ah ](jjeh"]h$]h&]jj)jhuh1jhj&hMhj&hhubj)}(hhh]h)}(hflush data from buffer to ldisch]hflush data from buffer to ldisc}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'hhubah}(h]h ]h"]h$]h&]uh1jhj&hhhj&hMubeh}(h]h ](j functioneh"]h$]h&]jj jj'jj'jjjuh1jhhhjVhNhNubj)}(hXi**Parameters** ``struct work_struct *work`` tty structure passed from work queue. **Description** This routine is called out of the software interrupt to flush data from the buffer chain to the line discipline. The receive_buf() method is single threaded for each tty instance. Locking: takes buffer lock to ensure single-threaded flip buffer 'consumer'.h](h)}(h**Parameters**h]j)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubj)}(hhh]j)}(hC``struct work_struct *work`` tty structure passed from work queue. h](j)}(h``struct work_struct *work``h]j)}(hj'h]hstruct work_struct *work}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubj)}(hhh]h)}(h%tty structure passed from work queue.h]h%tty structure passed from work queue.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hMhj'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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubh)}(hpThis routine is called out of the software interrupt to flush data from the buffer chain to the line discipline.h]hpThis routine is called out of the software interrupt to flush data from the buffer chain to the line discipline.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubh)}(hBThe receive_buf() method is single threaded for each tty instance.h]hBThe receive_buf() method is single threaded for each tty instance.}(hj%(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubh)}(hLLocking: takes buffer lock to ensure single-threaded flip buffer 'consumer'.h]hPLocking: takes buffer lock to ensure single-threaded flip buffer ‘consumer’.}(hj4(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j3tty_insert_flip_string_and_push_buffer (C function)(c.tty_insert_flip_string_and_push_bufferhNtauh1jhjVhhhNhNubj)}(hhh](j)}(h`int tty_insert_flip_string_and_push_buffer (struct tty_port *port, const u8 *chars, size_t size)h]j)}(h_int tty_insert_flip_string_and_push_buffer(struct tty_port *port, const u8 *chars, size_t size)h](j)}(hinth]hint}(hjc(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_(hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM!ubj")}(h h]h }(hjr(hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj_(hhhjq(hM!ubj3)}(h&tty_insert_flip_string_and_push_bufferh]j)}(h&tty_insert_flip_string_and_push_bufferh]h&tty_insert_flip_string_and_push_buffer}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hj_(hhhjq(hM!ubjN)}(h5(struct tty_port *port, const u8 *chars, size_t size)h](jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj(hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj(ubj")}(h h]h }(hj(hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj(ubh)}(hhh]j)}(htty_porth]htty_port}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj(modnameN classnameNjj)}j]j)}j j(sb(c.tty_insert_flip_string_and_push_bufferasbuh1hhj(ubj")}(h h]h }(hj(hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj(ubj)}(hjh]h*}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hporth]hport}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj(ubjT)}(hconst u8 *charsh](jZ)}(hjh]hconst}(hj)hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj)ubj")}(h h]h }(hj)hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj)ubh)}(hhh]j)}(hu8h]hu8}(hj0)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-)ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj2)modnameN classnameNjj)}j]j((c.tty_insert_flip_string_and_push_bufferasbuh1hhj)ubj")}(h h]h }(hjN)hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj)ubj)}(hjh]h*}(hj\)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hcharsh]hchars}(hji)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj(ubjT)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj)modnameN classnameNjj)}j]j((c.tty_insert_flip_string_and_push_bufferasbuh1hhj~)ubj")}(h h]h }(hj)hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj~)ubj)}(hsizeh]hsize}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj(ubeh}(h]h ]h"]h$]h&]hhuh1jMhj_(hhhjq(hM!ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj[(hhhjq(hM!ubah}(h]jV(ah ](jjeh"]h$]h&]jj)jhuh1jhjq(hM!hjX(hhubj)}(hhh]h)}(h)add characters to the tty buffer and pushh]h)add characters to the tty buffer and push}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM!hj)hhubah}(h]h ]h"]h$]h&]uh1jhjX(hhhjq(hM!ubeh}(h]h ](j functioneh"]h$]h&]jj jj)jj)jjjuh1jhhhjVhNhNubj)}(hXT**Parameters** ``struct tty_port *port`` tty port ``const u8 *chars`` characters ``size_t size`` size **Description** The function combines tty_insert_flip_string() and tty_flip_buffer_push() with the exception of properly holding the **port->lock**. To be used only internally (by pty currently). **Return** the number added.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM%hj)ubj)}(hhh](j)}(h#``struct tty_port *port`` tty port h](j)}(h``struct tty_port *port``h]j)}(hj*h]hstruct tty_port *port}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM#hj*ubj)}(hhh]h)}(htty porth]htty port}(hj5*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1*hM#hj2*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj1*hM#hj*ubj)}(h``const u8 *chars`` characters h](j)}(h``const u8 *chars``h]j)}(hjU*h]hconst u8 *chars}(hjW*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS*ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM$hjO*ubj)}(hhh]h)}(h charactersh]h characters}(hjn*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj*hM$hjk*ubah}(h]h ]h"]h$]h&]uh1jhjO*ubeh}(h]h ]h"]h$]h&]uh1jhjj*hM$hj*ubj)}(h``size_t size`` size h](j)}(h``size_t size``h]j)}(hj*h]h size_t size}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM%hj*ubj)}(hhh]h)}(hsizeh]hsize}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hM%hj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hM%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&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM'hj)ubh)}(hThe function combines tty_insert_flip_string() and tty_flip_buffer_push() with the exception of properly holding the **port->lock**.h](huThe function combines tty_insert_flip_string() and tty_flip_buffer_push() with the exception of properly holding the }(hj*hhhNhNubj)}(h**port->lock**h]h port->lock}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM&hj)ubh)}(h.To be used only internally (by pty currently).h]h.To be used only internally (by pty currently).}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM)hj)ubh)}(h **Return**h]j)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM+hj)ubh)}(hthe number added.h]hthe number added.}(hj'+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM,hj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_buffer_init (C function)c.tty_buffer_inithNtauh1jhjVhhhNhNubj)}(hhh](j)}(h,void tty_buffer_init (struct tty_port *port)h]j)}(h+void tty_buffer_init(struct tty_port *port)h](j)}(hvoidh]hvoid}(hjV+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjR+hhhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM@ubj")}(h h]h }(hje+hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hjR+hhhjd+hM@ubj3)}(htty_buffer_inith]j)}(htty_buffer_inith]htty_buffer_init}(hjw+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs+ubah}(h]h ](jHjIeh"]h$]h&]hhuh1j2hjR+hhhjd+hM@ubjN)}(h(struct tty_port *port)h]jT)}(hstruct tty_port *porth](jZ)}(hj]h]hstruct}(hj+hhhNhNubah}(h]h ]jfah"]h$]h&]uh1jYhj+ubj")}(h h]h }(hj+hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj+ubh)}(hhh]j)}(htty_porth]htty_port}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj reftypej  reftargetj+modnameN classnameNjj)}j]j)}j jy+sbc.tty_buffer_initasbuh1hhj+ubj")}(h h]h }(hj+hhhNhNubah}(h]h ]j.ah"]h$]h&]uh1j!hj+ubj)}(hjh]h*}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hporth]hport}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jShj+ubah}(h]h ]h"]h$]h&]hhuh1jMhjR+hhhjd+hM@ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjN+hhhjd+hM@ubah}(h]jI+ah ](jjeh"]h$]h&]jj)jhuh1jhjd+hM@hjK+hhubj)}(hhh]h)}(hprepare a tty buffer structureh]hprepare a tty buffer structure}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chM@hj,hhubah}(h]h ]h"]h$]h&]uh1jhjK+hhhjd+hM@ubeh}(h]h ](j functioneh"]h$]h&]jj jj.,jj.,jjjuh1jhhhjVhNhNubj)}(h**Parameters** ``struct tty_port *port`` tty port to initialise **Description** Set up the initial state of the buffer management for a tty device. Must be called before the other tty buffer functions are used.h](h)}(h**Parameters**h]j)}(hj8,h]h Parameters}(hj:,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6,ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMDhj2,ubj)}(hhh]j)}(h1``struct tty_port *port`` tty port to initialise h](j)}(h``struct tty_port *port``h]j)}(hjW,h]hstruct tty_port *port}(hjY,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU,ubah}(h]h ]h"]h$]h&]uh1jhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMAhjQ,ubj)}(hhh]h)}(htty port to initialiseh]htty port to initialise}(hjp,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl,hMAhjm,ubah}(h]h ]h"]h$]h&]uh1jhjQ,ubeh}(h]h ]h"]h$]h&]uh1jhjl,hMAhjN,ubah}(h]h ]h"]h$]h&]uh1jhj2,ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMChj2,ubh)}(hSet up the initial state of the buffer management for a tty device. Must be called before the other tty buffer functions are used.h]hSet up the initial state of the buffer management for a tty device. Must be called before the other tty buffer functions are used.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhb/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_buffer:48: ./drivers/tty/tty_buffer.chMBhj2,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjVhhhNhNubeh}(h]jhah ]h"]internal functionsah$]h&]uh1hhhhhhhhK.ubeh}(h] tty-bufferah ]h"] tty bufferah$]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_handlerj,error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j,j,jj}jjjj$jIjFj,jhu nametypes}(j,jjjjIj,uh}(j,hj}hjjjjjjjjjY j^ j j jMjRj$jjjjjjFjj jjjjhjVjsjxjjjfjkj!j!j#j#j&j&jV(j[(jI+jN+hhjjj@j7jbjYu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j,KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.