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/n_ttymodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/driver-api/tty/n_ttymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/driver-api/tty/n_ttymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/driver-api/tty/n_ttymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/driver-api/tty/n_ttymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/pt_BR/driver-api/tty/n_ttymodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/driver-api/tty/n_ttymodnameN 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:spacepreserveuh1hhhhhhB/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty.rsthKubhsection)}(hhh](htitle)}(hN_TTYh]hN_TTY}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(hhh]h bullet_list)}(hhh](h list_item)}(hhh]h paragraph)}(hhh]h reference)}(hhh]hExternal Functions}(hhhhhNhNubah}(h]id1ah ]h"]h$]h&]refidexternal-functionsuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hInternal Functions}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidinternal-functionsuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhNhNubah}(h]contentsah ](contentslocaleh"]contentsah$]h&]uh1hhhhKhhhhubh)}(hnThe default (and fallback) :doc:`TTY line discipline `. It tries to handle characters as per POSIX.h](hThe default (and fallback) }(hjAhhhNhNubh)}(h&:doc:`TTY line discipline `h]hinline)}(hjKh]hTTY line discipline}(hjOhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jMhjIubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/n_tty refdomainjZreftypedoc refexplicitrefwarn reftarget tty_ldiscuh1hhhhK hjAubh-. It tries to handle characters as per POSIX.}(hjAhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hExternal Functionsh]hExternal Functions}(hj{hhhNhNubah}(h]h ]h"]h$]h&]refidhuh1hhjxhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlen_tty_inherit_ops (C function)c.n_tty_inherit_opshNtauh1jhjxhhhNhNubhdesc)}(hhh](hdesc_signature)}(h2void n_tty_inherit_ops (struct tty_ldisc_ops *ops)h]hdesc_signature_line)}(h1void n_tty_inherit_ops(struct tty_ldisc_ops *ops)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM ubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhM ubh desc_name)}(hn_tty_inherit_opsh]h desc_sig_name)}(hn_tty_inherit_opsh]hn_tty_inherit_ops}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhM ubhdesc_parameterlist)}(h(struct tty_ldisc_ops *ops)h]hdesc_parameter)}(hstruct tty_ldisc_ops *opsh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_ldisc_opsh]h tty_ldisc_ops}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j8 ASTIdentifier)}j3jsbc.n_tty_inherit_opsasbuh1hhjubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjUhhhNhNubah}(h]h ]pah"]h$]h&]uh1jShjubj)}(hopsh]hops}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM ubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhjhM ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhM hjhhubh desc_content)}(hhh]h)}(hinherit N_TTY methodsh]hinherit N_TTY methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM ubeh}(h]h ](j1functioneh"]h$]h&]domainj1objtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjxhNhNubh container)}(h**Parameters** ``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods **Description** Enables a 'subclass' line discipline to 'inherit' N_TTY methods.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hjubhdefinition_list)}(hhh]hdefinition_list_item)}(hO``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods h](hterm)}(h``struct tty_ldisc_ops *ops``h]hliteral)}(hjh]hstruct tty_ldisc_ops *ops}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hjubh definition)}(hhh]h)}(h0struct tty_ldisc_ops where to save N_TTY methodsh]h0struct tty_ldisc_ops where to save N_TTY methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj(h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hjubh block_quote)}(h@Enables a 'subclass' line discipline to 'inherit' N_TTY methods.h]h)}(hjBh]hHEnables a ‘subclass’ line discipline to ‘inherit’ N_TTY methods.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hj@ubah}(h]h ]h"]h$]h&]uh1j>hjQhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjxhhhNhNubeh}(h]jah ]h"]external functionsah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hjihhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjfhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_kick_worker (C function)c.n_tty_kick_workerhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h5void n_tty_kick_worker (const struct tty_struct *tty)h]j)}(h4void n_tty_kick_worker(const struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hn_tty_kick_workerh]j)}(hn_tty_kick_workerh]hn_tty_kick_worker}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj)}(h(const struct tty_struct *tty)h]j)}(hconst struct tty_struct *ttyh](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj modnameN classnameNj7j:)}j=]j@)}j3jsbc.n_tty_kick_workerasbuh1hhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hj5hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(h start input worker (if required)h]h start input worker (if required)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j1functioneh"]h$]h&]jj1jjjjjjjuh1jhhhjfhNhNubj)}(hX **Parameters** ``const struct tty_struct *tty`` terminal **Description** Re-schedules the flip buffer work if it may have stopped. Locking: * Caller holds exclusive ``termios_rwsem``, or * n_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]j)}(h*``const struct tty_struct *tty`` terminal h](j)}(h ``const struct tty_struct *tty``h]j)}(hjh]hconst struct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]h)}(hterminalh]hterminal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubh)}(h9Re-schedules the flip buffer work if it may have stopped.h]h9Re-schedules the flip buffer work if it may have stopped.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]j)}(hLocking: * Caller holds exclusive ``termios_rwsem``, or * n_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``h](j)}(hLocking:h]hLocking:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]h)}(hhh](h)}(h,Caller holds exclusive ``termios_rwsem``, orh]h)}(hj+h](hCaller holds exclusive }(hj-hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh, or}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhj)ubah}(h]h ]h"]h$]h&]uh1hhj&ubh)}(hCn_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``h]j)}(hhh]j)}(hAn_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``h](j)}(hn_tty_read()/consumer path:h]hn_tty_read()/consumer path:}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"hKhjZubj)}(hhh]h)}(h%holds non-exclusive ``termios_rwsem``h](hholds non-exclusive }(hjohhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjlubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhj"hKhjWubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhj&ubeh}(h]h ]h"]h$]h&]bulletjWuh1hhjLhKhj#ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj"hKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_write_wakeup (C function)c.n_tty_write_wakeuphNtauh1jhjfhhhNhNubj)}(hhh](j)}(h0void n_tty_write_wakeup (struct tty_struct *tty)h]j)}(h/void n_tty_write_wakeup(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hn_tty_write_wakeuph]j)}(hn_tty_write_wakeuph]hn_tty_write_wakeup}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj:modnameN classnameNj7j:)}j=]j@)}j3jsbc.n_tty_write_wakeupasbuh1hhjubj)}(h h]h }(hjXhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjfhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hasynchronous I/O notifierh]hasynchronous I/O notifier}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j1functioneh"]h$]h&]jj1jjjjjjjuh1jhhhjfhNhNubj)}(h**Parameters** ``struct tty_struct *tty`` tty device **Description** Required for the ptys, serial driver etc. since processes that attach themselves to the master and rely on ASYNC IO must be woken up.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubj)}(hhh]h)}(h tty deviceh]h tty device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubh)}(hRequired for the ptys, serial driver etc. since processes that attach themselves to the master and rely on ASYNC IO must be woken up.h]hRequired for the ptys, serial driver etc. since processes that attach themselves to the master and rely on ASYNC IO must be woken up.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jput_tty_queue (C function)c.put_tty_queuehNtauh1jhjfhhhNhNubj)}(hhh](j)}(h3void put_tty_queue (u8 c, struct n_tty_data *ldata)h]j)}(h2void put_tty_queue(u8 c, struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhjlhMubj)}(h put_tty_queueh]j)}(h put_tty_queueh]h put_tty_queue}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjZhhhjlhMubj)}(h (u8 c, struct n_tty_data *ldata)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]j@)}j3jsbc.put_tty_queueasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj1h]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]jc.put_tty_queueasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hj.hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(hldatah]hldata}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjZhhhjlhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjVhhhjlhMubah}(h]jQah ](jjeh"]h$]h&]jj)jhuh1jhjlhMhjShhubj)}(hhh]h)}(hadd character to ttyh]hadd character to tty}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjbhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjlhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj}jj}jjjuh1jhhhjfhNhNubj)}(h**Parameters** ``u8 c`` character ``struct n_tty_data *ldata`` n_tty data **Description** Add a character to the tty read_buf queue. Locking: * n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hjubj)}(hhh](j)}(h``u8 c`` character h](j)}(h``u8 c``h]j)}(hjh]hu8 c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(h characterh]h character}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hjh]hstruct n_tty_data *ldata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hjubh)}(h*Add a character to the tty read_buf queue.h]h*Add a character to the tty read_buf queue.}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjubj)}(hhh]j)}(h^Locking: * n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](j)}(hLocking:h]hLocking:}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM#hjB ubj)}(hhh]h)}(hhh]h)}(hQn_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h]j)}(hhh]j)}(hOn_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](j)}(h"n_tty_receive_buf()/producer path:h]h"n_tty_receive_buf()/producer path:}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT hM#hjb ubj)}(hhh]h)}(h,caller holds non-exclusive ``termios_rwsem``h](hcaller holds non-exclusive }(hjw hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM$hjt ubah}(h]h ]h"]h$]h&]uh1jhjb ubeh}(h]h ]h"]h$]h&]uh1jhjT hM#hj_ ubah}(h]h ]h"]h$]h&]uh1jhj[ ubah}(h]h ]h"]h$]h&]uh1hhjX ubah}(h]h ]h"]h$]h&]jjWuh1hhjT hM#hjU ubah}(h]h ]h"]h$]h&]uh1jhjB ubeh}(h]h ]h"]h$]h&]uh1jhjT hM#hj? ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jreset_buffer_flags (C function)c.reset_buffer_flagshNtauh1jhjfhhhNhNubj)}(hhh](j)}(h2void reset_buffer_flags (struct n_tty_data *ldata)h]j)}(h1void reset_buffer_flags(struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM.ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM.ubj)}(hreset_buffer_flagsh]j)}(hreset_buffer_flagsh]hreset_buffer_flags}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hM.ubj)}(h(struct n_tty_data *ldata)h]j)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hj? hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj< ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjA modnameN classnameNj7j:)}j=]j@)}j3j sbc.reset_buffer_flagsasbuh1hhj ubj)}(h h]h }(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjT)}(hjWh]h*}(hjm hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj ubj)}(hldatah]hldata}(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hM.ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hM.ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hM.hj hhubj)}(hhh]h)}(hreset buffer stateh]hreset buffer state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM.hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM.ubeh}(h]h ](j1functioneh"]h$]h&]jj1jj jj jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct n_tty_data *ldata`` line disc data to reset **Description** Reset the read buffer counters and clear the flags. Called from n_tty_open() and n_tty_flush_buffer(). Locking: * caller holds exclusive ``termios_rwsem``, or * (locking is not 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM2hj ubj)}(hhh]j)}(h5``struct n_tty_data *ldata`` line disc data to reset h](j)}(h``struct n_tty_data *ldata``h]j)}(hj h]hstruct n_tty_data *ldata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM/hj ubj)}(hhh]h)}(hline disc data to reseth]hline disc data to reset}(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 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM1hj ubh)}(hfReset the read buffer counters and clear the flags. Called from n_tty_open() and n_tty_flush_buffer().h]hfReset the read buffer counters and clear the flags. Called from n_tty_open() and n_tty_flush_buffer().}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM0hj ubj)}(hhh]j)}(hSLocking: * caller holds exclusive ``termios_rwsem``, or * (locking is not required)h](j)}(hLocking:h]hLocking:}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM4hjH ubj)}(hhh]h)}(hhh](h)}(h,caller holds exclusive ``termios_rwsem``, orh]h)}(hjc h](hcaller holds exclusive }(hje hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje ubh, or}(hje hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjZ hM4hja ubah}(h]h ]h"]h$]h&]uh1hhj^ ubh)}(h(locking is not required)h]h)}(hj h]h(locking is not required)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM5hj ubah}(h]h ]h"]h$]h&]uh1hhj^ ubeh}(h]h ]h"]h$]h&]jjWuh1hhjZ hM4hj[ ubah}(h]h ]h"]h$]h&]uh1jhjH ubeh}(h]h ]h"]h$]h&]uh1jhjZ hM4hjE ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_flush_buffer (C function)c.n_tty_flush_bufferhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h0void n_tty_flush_buffer (struct tty_struct *tty)h]j)}(h/void n_tty_flush_buffer(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMOubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMOubj)}(hn_tty_flush_bufferh]j)}(hn_tty_flush_bufferh]hn_tty_flush_buffer}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hMOubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj$ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2 ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj7 modnameN classnameNj7j:)}j=]j@)}j3j sbc.n_tty_flush_bufferasbuh1hhj ubj)}(h h]h }(hjU hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjT)}(hjWh]h*}(hjc hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj ubj)}(httyh]htty}(hjp hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMOubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMOubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMOhj hhubj)}(hhh]h)}(hclean input queueh]hclean input queue}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMOhj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMOubeh}(h]h ](j1functioneh"]h$]h&]jj1jj jj jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal device **Description** Flush the input buffer. Called when the tty layer wants the buffer flushed (eg at hangup) or when the ``N_TTY`` line discipline internally has to clean the pending queue (for example some signals). Holds ``termios_rwsem`` to exclude producer/consumer while buffer indices are reset. Locking: ``ctrl``.lock, exclusive ``termios_rwsem``h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMShj ubj)}(hhh]j)}(h+``struct tty_struct *tty`` terminal device 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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMPhj ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMPhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMPhj 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMRhj ubh)}(hFlush the input buffer. Called when the tty layer wants the buffer flushed (eg at hangup) or when the ``N_TTY`` line discipline internally has to clean the pending queue (for example some signals).h](hfFlush the input buffer. Called when the tty layer wants the buffer flushed (eg at hangup) or when the }(hj, hhhNhNubj)}(h ``N_TTY``h]hN_TTY}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj, ubhV line discipline internally has to clean the pending queue (for example some signals).}(hj, hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMQhj ubh)}(hTHolds ``termios_rwsem`` to exclude producer/consumer while buffer indices are reset.h](hHolds }(hjM hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubh= to exclude producer/consumer while buffer indices are reset.}(hjM hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMUhj ubh)}(h3Locking: ``ctrl``.lock, exclusive ``termios_rwsem``h](h Locking: }(hjn hhhNhNubj)}(h``ctrl``h]hctrl}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubh.lock, exclusive }(hjn hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMXhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!is_utf8_continuation (C function)c.is_utf8_continuationhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hint is_utf8_continuation (u8 c)h]j)}(hint is_utf8_continuation(u8 c)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMfubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMfubj)}(his_utf8_continuationh]j)}(his_utf8_continuationh]his_utf8_continuation}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hMfubj)}(h(u8 c)h]j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj modnameN classnameNj7j:)}j=]j@)}j3j sbc.is_utf8_continuationasbuh1hhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hj1h]hc}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMfubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMfubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMfhj hhubj)}(hhh]h)}(hutf8 multibyte checkh]hutf8 multibyte check}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMfhjQhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMfubeh}(h]h ](j1functioneh"]h$]h&]jj1jjljjljjjuh1jhhhjfhNhNubj)}(h**Parameters** ``u8 c`` byte to check **Return** true if the utf8 character **c** is a multibyte continuation character. We use this to correctly compute the on-screen size of the character when printing.h](h)}(h**Parameters**h]j)}(hjvh]h Parameters}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMjhjpubj)}(hhh]j)}(h``u8 c`` byte to check h](j)}(h``u8 c``h]j)}(hjh]hu8 c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMghjubj)}(hhh]h)}(h byte to checkh]h byte to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMghjubah}(h]h ]h"]h$]h&]uh1jhjpubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMihjpubh)}(htrue if the utf8 character **c** is a multibyte continuation character. We use this to correctly compute the on-screen size of the character when printing.h](htrue if the utf8 character }(hjhhhNhNubj)}(h**c**h]hc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh{ is a multibyte continuation character. We use this to correctly compute the on-screen size of the character when printing.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMihjpubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jis_continuation (C function)c.is_continuationhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h8int is_continuation (u8 c, const struct tty_struct *tty)h]j)}(h7int is_continuation(u8 c, const struct tty_struct *tty)h](j)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMsubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj5hMsubj)}(his_continuationh]j)}(his_continuationh]his_continuation}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ](jjeh"]h$]h&]hhuh1jhj#hhhj5hMsubj)}(h$(u8 c, const struct tty_struct *tty)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjimodnameN classnameNj7j:)}j=]j@)}j3jJsbc.is_continuationasbuh1hhj`ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubj)}(hj1h]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubj)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]jc.is_continuationasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj\ubeh}(h]h ]h"]h$]h&]hhuh1jhj#hhhj5hMsubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj5hMsubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj5hMshjhhubj)}(hhh]h)}(hmultibyte checkh]hmultibyte check}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMshjFhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj5hMsubeh}(h]h ](j1functioneh"]h$]h&]jj1jjajjajjjuh1jhhhjfhNhNubj)}(h**Parameters** ``u8 c`` byte to check ``const struct tty_struct *tty`` terminal device **Return** true if the utf8 character **c** is a multibyte continuation character and the terminal is in unicode mode.h](h)}(h**Parameters**h]j)}(hjkh]h Parameters}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMwhjeubj)}(hhh](j)}(h``u8 c`` byte to check h](j)}(h``u8 c``h]j)}(hjh]hu8 c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMthjubj)}(hhh]h)}(h byte to checkh]h byte to check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMthjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMthjubj)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hjh]hconst struct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMuhjubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMuhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMuhjubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMwhjeubh)}(hktrue if the utf8 character **c** is a multibyte continuation character and the terminal is in unicode mode.h](htrue if the utf8 character }(hjhhhNhNubj)}(h**c**h]hc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK is a multibyte continuation character and the terminal is in unicode mode.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMwhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jdo_output_char (C function)c.do_output_charhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hubj)}(hhh]h)}(h*space available in tty driver write bufferh]h*space available in tty driver write buffer}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhMhjZubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhjYhMhjubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(hThis is a helper function that handles one output character (including special characters like TAB, CR, LF, etc.), doing OPOST processing and putting the results in the tty driver's write buffer.h]hThis is a helper function that handles one output character (including special characters like TAB, CR, LF, etc.), doing OPOST processing and putting the results in the tty driver’s write buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(hNote that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY and NLDLY. They simply aren't relevant in the world today. If you ever need them, add them here.h]hNote that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY and NLDLY. They simply aren’t relevant in the world today. If you ever need them, add them here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(hmLocking: should be called under the ``output_lock`` to protect the column state and space left in the buffer.h](h$Locking: should be called under the }(hjhhhNhNubj)}(h``output_lock``h]h output_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: to protect the column state and space left in the buffer.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h@the number of bytes of buffer space used or -1 if no space left.h]h@the number of bytes of buffer space used or -1 if no space left.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jprocess_output (C function)c.process_outputhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h1int process_output (u8 c, struct tty_struct *tty)h]j)}(h0int process_output(u8 c, struct tty_struct *tty)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj)hMubj)}(hprocess_outputh]j)}(hprocess_outputh]hprocess_output}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj)hMubj)}(h(u8 c, struct tty_struct *tty)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj]modnameN classnameNj7j:)}j=]j@)}j3j>sbc.process_outputasbuh1hhjTubj)}(h h]h }(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubj)}(hj1h]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjPubj)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]jwc.process_outputasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjPubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj)hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj)hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj)hMhjhhubj)}(hhh]h)}(houtput post processorh]houtput post processor}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj)hMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj:jj:jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``u8 c`` character (or partial unicode symbol) ``struct tty_struct *tty`` terminal device **Description** Output one character with OPOST processing. Locking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock). **Return** -1 when the output device is full and the character must be retried.h](h)}(h**Parameters**h]j)}(hjDh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubj)}(hhh](j)}(h/``u8 c`` character (or partial unicode symbol) h](j)}(h``u8 c``h]j)}(hjch]hu8 c}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj]ubj)}(hhh]h)}(h%character (or partial unicode symbol)h]h%character (or partial unicode symbol)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jhj]ubeh}(h]h ]h"]h$]h&]uh1jhjxhMhjZubj)}(h+``struct tty_struct *tty`` terminal device h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjZubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(h+Output one character with OPOST processing.h]h+Output one character with OPOST processing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(hLocking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).h](h Locking: }(hjhhhNhNubj)}(h``output_lock``h]h output_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(h **Return**h]j)}(hjh]hReturn}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(hD-1 when the output device is full and the character must be retried.h]hD-1 when the output device is full and the character must be retried.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!process_output_block (C function)c.process_output_blockhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hUssize_t process_output_block (struct tty_struct *tty, const u8 *buf, unsigned int nr)h]j)}(hTssize_t process_output_block(struct tty_struct *tty, const u8 *buf, unsigned int nr)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjimodnameN classnameNj7j:)}j=]j@)}j3process_output_blocksbc.process_output_blockasbuh1hhj`hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjhMubj)}(hprocess_output_blockh]j)}(hjh]hprocess_output_block}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj`hhhjhMubj)}(h8(struct tty_struct *tty, const u8 *buf, unsigned int nr)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]jc.process_output_blockasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h const u8 *bufh](j)}(hjh]hconst}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hu8h]hu8}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjFmodnameN classnameNj7j:)}j=]jc.process_output_blockasbuh1hhj"ubj)}(h h]h }(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubjT)}(hjWh]h*}(hjphhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj"ubj)}(hbufh]hbuf}(hj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hunsigned int nrh](j)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnrh]hnr}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj`hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj\hhhjhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjYhhubj)}(hhh]h)}(hblock post processorh]hblock post processor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jjjjjjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal device ``const u8 *buf`` character buffer ``unsigned int nr`` number of bytes to output **Description** Output a block of characters with OPOST processing. This path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance. Locking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock). **Return** the number of characters output.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh](j)}(h+``struct tty_struct *tty`` terminal device h](j)}(h``struct tty_struct *tty``h]j)}(hj9h]hstruct tty_struct *tty}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj3ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhMhj0ubj)}(h#``const u8 *buf`` character buffer h](j)}(h``const u8 *buf``h]j)}(hjrh]h const u8 *buf}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjlubj)}(hhh]h)}(hcharacter bufferh]hcharacter buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhMhj0ubj)}(h.``unsigned int nr`` number of bytes to output h](j)}(h``unsigned int nr``h]j)}(hjh]hunsigned int nr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(hnumber of bytes to outputh]hnumber of bytes to output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj0ubeh}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h3Output a block of characters with OPOST processing.h]h3Output a block of characters with OPOST processing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(hThis path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance.h]hThis path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(hLocking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).h](h Locking: }(hjhhhNhNubj)}(h``output_lock``h]h output_lock}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhq to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h **Return**h]j)}(hj=h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h the number of characters output.h]h the number of characters output.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__process_echoes (C function)c.__process_echoeshNtauh1jhjfhhhNhNubj)}(hhh](j)}(h0size_t __process_echoes (struct tty_struct *tty)h]j)}(h/size_t __process_echoes(struct tty_struct *tty)h](h)}(hhh]j)}(hsize_th]hsize_t}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]j@)}j3__process_echoessbc.__process_echoesasbuh1hhj~hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~hhhjhMubj)}(h__process_echoesh]j)}(hjh]h__process_echoes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj~hhhjhMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]jc.__process_echoesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(httyh]htty}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhj~hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjzhhhjhMubah}(h]juah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjwhhubj)}(hhh]h)}(hwrite pending echo charactersh]hwrite pending echo characters}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjwhhhjhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jjmjjmjjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal device **Description** Write previously buffered echo (and other ldisc-generated) characters to the tty. Characters generated by the ldisc (including echoes) need to be buffered because the driver's write buffer can fill during heavy program output. Echoing straight to the driver will often fail under these conditions, causing lost characters and resulting mismatches of ldisc state information. Since the ldisc state must represent the characters actually sent to the driver at the time of the write, operations like certain changes in column state are also saved in the buffer and executed here. A circular fifo buffer is used so that the most recent characters are prioritized. Also, when control characters are echoed with a prefixed "^", the pair is treated atomically and thus not separated. Locking: callers must hold ``output_lock``.h](h)}(h**Parameters**h]j)}(hjwh]h Parameters}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubj)}(hhh]j)}(h+``struct tty_struct *tty`` terminal device h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjqubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubh)}(hQWrite previously buffered echo (and other ldisc-generated) characters to the tty.h]hQWrite previously buffered echo (and other ldisc-generated) characters to the tty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubh)}(hX$Characters generated by the ldisc (including echoes) need to be buffered because the driver's write buffer can fill during heavy program output. Echoing straight to the driver will often fail under these conditions, causing lost characters and resulting mismatches of ldisc state information.h]hX&Characters generated by the ldisc (including echoes) need to be buffered because the driver’s write buffer can fill during heavy program output. Echoing straight to the driver will often fail under these conditions, causing lost characters and resulting mismatches of ldisc state information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubh)}(hSince the ldisc state must represent the characters actually sent to the driver at the time of the write, operations like certain changes in column state are also saved in the buffer and executed here.h]hSince the ldisc state must represent the characters actually sent to the driver at the time of the write, operations like certain changes in column state are also saved in the buffer and executed here.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubh)}(hA circular fifo buffer is used so that the most recent characters are prioritized. Also, when control characters are echoed with a prefixed "^", the pair is treated atomically and thus not separated.h]hA circular fifo buffer is used so that the most recent characters are prioritized. Also, when control characters are echoed with a prefixed “^”, the pair is treated atomically and thus not separated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubh)}(h+Locking: callers must hold ``output_lock``.h](hLocking: callers must hold }(hj#hhhNhNubj)}(h``output_lock``h]h output_lock}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jadd_echo_byte (C function)c.add_echo_bytehNtauh1jhjfhhhNhNubj)}(hhh](j)}(h3void add_echo_byte (u8 c, struct n_tty_data *ldata)h]j)}(h2void add_echo_byte(u8 c, struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhjrhMubj)}(h add_echo_byteh]j)}(h add_echo_byteh]h add_echo_byte}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj`hhhjrhMubj)}(h (u8 c, struct n_tty_data *ldata)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]j@)}j3jsbc.add_echo_byteasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hj1h]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj modnameN classnameNj7j:)}j=]jc.add_echo_byteasbuh1hhjubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hj4hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(hldatah]hldata}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj`hhhjrhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj\hhhjrhMubah}(h]jWah ](jjeh"]h$]h&]jj)jhuh1jhjrhMhjYhhubj)}(hhh]h)}(hadd a byte to the echo bufferh]hadd a byte to the echo buffer}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjhhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhjrhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jjjjjjjuh1jhhhjfhNhNubj)}(h**Parameters** ``u8 c`` unicode byte to echo ``struct n_tty_data *ldata`` n_tty data **Description** Add a character or operation byte to the echo buffer.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh](j)}(h``u8 c`` unicode byte to echo h](j)}(h``u8 c``h]j)}(hjh]hu8 c}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hjh]hstruct n_tty_data *ldata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubh)}(h5Add a character or operation byte to the echo buffer.h]h5Add a character or operation byte to the echo buffer.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_move_back_col (C function)c.echo_move_back_colhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h2void echo_move_back_col (struct n_tty_data *ldata)h]j)}(h1void echo_move_back_col(struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM#ubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjahhhjshM#ubj)}(hecho_move_back_colh]j)}(hecho_move_back_colh]hecho_move_back_col}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjahhhjshM#ubj)}(h(struct n_tty_data *ldata)h]j)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjmodnameN classnameNj7j:)}j=]j@)}j3jsbc.echo_move_back_colasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(hldatah]hldata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjahhhjshM#ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj]hhhjshM#ubah}(h]jXah ](jjeh"]h$]h&]jj)jhuh1jhjshM#hjZhhubj)}(hhh]h)}(h#add operation to move back a columnh]h#add operation to move back a column}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM#hj"hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhjshM#ubeh}(h]h ](j1functioneh"]h$]h&]jj1jj=jj=jjjuh1jhhhjfhNhNubj)}(h**Parameters** ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to move back one column.h](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM'hjAubj)}(hhh]j)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hjfh]hstruct n_tty_data *ldata}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM$hj`ubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{hM$hj|ubah}(h]h ]h"]h$]h&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhj{hM$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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM&hjAubh)}(hubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjCmodnameN classnameNj7j:)}j=]j@)}j3j sbc.echo_set_canon_colasbuh1hhjubj)}(h h]h }(hjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjT)}(hjWh]h*}(hjohhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjubj)}(hldatah]hldata}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM/ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhM/ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhM/hjhhubj)}(hhh]h)}(h%add operation to set the canon columnh]h%add operation to set the canon column}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM/hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM/ubeh}(h]h ](j1functioneh"]h$]h&]jj1jjjjjjjuh1jhhhjfhNhNubj)}(h**Parameters** ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to set the canon column to the current column.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM3hjubj)}(hhh]j)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hjh]hstruct n_tty_data *ldata}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM0hjubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM0hjubah}(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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM2hjubh)}(hRAdd an operation to the echo buffer to set the canon column to the current column.h]hRAdd an operation to the echo buffer to set the canon column to the current column.}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM1hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_erase_tab (C function)c.echo_erase_tabhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hUvoid echo_erase_tab (unsigned int num_chars, int after_tab, struct n_tty_data *ldata)h]j)}(hTvoid echo_erase_tab(unsigned int num_chars, int after_tab, struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hjg hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM<ubj)}(h h]h }(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc hhhju hM<ubj)}(hecho_erase_tabh]j)}(hecho_erase_tabh]hecho_erase_tab}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjc hhhju hM<ubj)}(hA(unsigned int num_chars, int after_tab, struct n_tty_data *ldata)h](j)}(hunsigned int num_charsh](j)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h num_charsh]h num_chars}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(h int after_tabh](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h after_tabh]h after_tab}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hj*!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!ubj)}(h h]h }(hj7!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!ubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hjH!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE!ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjJ!modnameN classnameNj7j:)}j=]j@)}j3j sbc.echo_erase_tabasbuh1hhj&!ubj)}(h h]h }(hjh!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!ubjT)}(hjWh]h*}(hjv!hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj&!ubj)}(hldatah]hldata}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&!ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjc hhhju hM<ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj_ hhhju hM<ubah}(h]jZ ah ](jjeh"]h$]h&]jj)jhuh1jhju hM<hj\ hhubj)}(hhh]h)}(hadd operation to erase a tabh]hadd operation to erase a tab}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM<hj!hhubah}(h]h ]h"]h$]h&]uh1jhj\ hhhju hM<ubeh}(h]h ](j1functioneh"]h$]h&]jj1jj!jj!jjjuh1jhhhjfhNhNubj)}(hX **Parameters** ``unsigned int num_chars`` number of character columns already used ``int after_tab`` true if num_chars starts after a previous tab ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to erase a tab. Called by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.h](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM@hj!ubj)}(hhh](j)}(hD``unsigned int num_chars`` number of character columns already used h](j)}(h``unsigned int num_chars``h]j)}(hj!h]hunsigned int num_chars}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM=hj!ubj)}(hhh]h)}(h(number of character columns already usedh]h(number of character columns already used}(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!ubj)}(h@``int after_tab`` true if num_chars starts after a previous tab h](j)}(h``int after_tab``h]j)}(hj'"h]h int after_tab}(hj)"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%"ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM>hj!"ubj)}(hhh]h)}(h-true if num_chars starts after a previous tabh]h-true if num_chars starts after a previous tab}(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!ubj)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hj`"h]hstruct n_tty_data *ldata}(hjb"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^"ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM?hjZ"ubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hjy"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju"hM?hjv"ubah}(h]h ]h"]h$]h&]uh1jhjZ"ubeh}(h]h ]h"]h$]h&]uh1jhju"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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMAhj!ubh)}(h3Add an operation to the echo buffer to erase a tab.h]h3Add an operation to the echo buffer to erase a tab.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM@hj!ubh)}(hCalled by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.h]hCalled by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMBhj!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_char_raw (C function)c.echo_char_rawhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h3void echo_char_raw (u8 c, struct n_tty_data *ldata)h]j)}(h2void echo_char_raw(u8 c, struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMYubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hMYubj)}(h echo_char_rawh]j)}(h echo_char_rawh]h echo_char_raw}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj #ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj"hhhj"hMYubj)}(h (u8 c, struct n_tty_data *ldata)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hj/#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,#ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj1#modnameN classnameNj7j:)}j=]j@)}j3j#sbc.echo_char_rawasbuh1hhj(#ubj)}(h h]h }(hjO#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(#ubj)}(hj1h]hc}(hj]#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$#ubj)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hju#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq#ubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj#modnameN classnameNj7j:)}j=]jK#c.echo_char_rawasbuh1hhjq#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq#ubjT)}(hjWh]h*}(hj#hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjq#ubj)}(hldatah]hldata}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$#ubeh}(h]h ]h"]h$]h&]hhuh1jhj"hhhj"hMYubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj"hhhj"hMYubah}(h]j"ah ](jjeh"]h$]h&]jj)jhuh1jhj"hMYhj"hhubj)}(hhh]h)}(hecho a character rawh]hecho a character raw}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMYhj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hMYubeh}(h]h ](j1functioneh"]h$]h&]jj1jj$jj$jjjuh1jhhhjfhNhNubj)}(hXL**Parameters** ``u8 c`` unicode byte to echo ``struct n_tty_data *ldata`` line disc data **Description** Echo user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path. This variant does not treat control characters specially.h](h)}(h**Parameters**h]j)}(hj$h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM]hj$ubj)}(hhh](j)}(h``u8 c`` unicode byte to echo h](j)}(h``u8 c``h]j)}(hj7$h]hu8 c}(hj9$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMZhj1$ubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hjP$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjL$hMZhjM$ubah}(h]h ]h"]h$]h&]uh1jhj1$ubeh}(h]h ]h"]h$]h&]uh1jhjL$hMZhj.$ubj)}(h,``struct n_tty_data *ldata`` line disc data h](j)}(h``struct n_tty_data *ldata``h]j)}(hjp$h]hstruct n_tty_data *ldata}(hjr$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjn$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM[hjj$ubj)}(hhh]h)}(hline disc datah]hline disc data}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hM[hj$ubah}(h]h ]h"]h$]h&]uh1jhjj$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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM]hj$ubh)}(hEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path.h](hiEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the }(hj$hhhNhNubh)}(h1:c:type:`tty_driver.receive_buf\(\) `h]j)}(hj$h]htty_driver.receive_buf()}(hj$hhhNhNubah}(h]h ](jYj1c-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocjf refdomainj1reftypetype refexplicitrefwarnj7j:)}j=]sbjl tty_driveruh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM\hj$ubh path.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hM\hj$ubh)}(h9This variant does not treat control characters specially.h]h9This variant does not treat control characters specially.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM_hj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_char (C function) c.echo_charhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h3void echo_char (u8 c, const struct tty_struct *tty)h]j)}(h2void echo_char(u8 c, const struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hj%%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!%hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMmubj)}(h h]h }(hj4%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!%hhhj3%hMmubj)}(h echo_charh]j)}(h echo_charh]h echo_char}(hjF%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB%ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj!%hhhj3%hMmubj)}(h$(u8 c, const struct tty_struct *tty)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hje%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb%ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjg%modnameN classnameNj7j:)}j=]j@)}j3jH%sb c.echo_charasbuh1hhj^%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^%ubj)}(hj1h]hc}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZ%ubj)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj%modnameN classnameNj7j:)}j=]j% c.echo_charasbuh1hhj%ubj)}(h h]h }(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubjT)}(hjWh]h*}(hj&hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj%ubj)}(httyh]htty}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZ%ubeh}(h]h ]h"]h$]h&]hhuh1jhj!%hhhj3%hMmubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj%hhhj3%hMmubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1jhj3%hMmhj%hhubj)}(hhh]h)}(hecho a characterh]hecho a character}(hjG&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMmhjD&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj3%hMmubeh}(h]h ](j1functioneh"]h$]h&]jj1jj_&jj_&jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``u8 c`` unicode byte to echo ``const struct tty_struct *tty`` terminal device **Description** Echo user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path. This variant tags control characters to be echoed as "^X" (where X is the letter representing the control char).h](h)}(h**Parameters**h]j)}(hji&h]h Parameters}(hjk&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMqhjc&ubj)}(hhh](j)}(h``u8 c`` unicode byte to echo h](j)}(h``u8 c``h]j)}(hj&h]hu8 c}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMnhj&ubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMnhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMnhj&ubj)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hj&h]hconst struct tty_struct *tty}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMohj&ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMohj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMohj&ubeh}(h]h ]h"]h$]h&]uh1jhjc&ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMqhjc&ubh)}(hEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path.h](hiEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the }(hj'hhhNhNubh)}(h1:c:type:`tty_driver.receive_buf\(\) `h]j)}(hj'h]htty_driver.receive_buf()}(hj'hhhNhNubah}(h]h ](jYj1c-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocjf refdomainj1reftypetype refexplicitrefwarnj7j$jl tty_driveruh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMphj'ubh path.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj9'hMphjc&ubh)}(hpThis variant tags control characters to be echoed as "^X" (where X is the letter representing the control char).h]htThis variant tags control characters to be echoed as “^X” (where X is the letter representing the control char).}(hjD'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMshjc&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jfinish_erasing (C function)c.finish_erasinghNtauh1jhjfhhhNhNubj)}(hhh](j)}(h.void finish_erasing (struct n_tty_data *ldata)h]j)}(h-void finish_erasing(struct n_tty_data *ldata)h](j)}(hvoidh]hvoid}(hjs'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo'hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjo'hhhj'hMubj)}(hfinish_erasingh]j)}(hfinish_erasingh]hfinish_erasing}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjo'hhhj'hMubj)}(h(struct n_tty_data *ldata)h]j)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj'modnameN classnameNj7j:)}j=]j@)}j3j'sbc.finish_erasingasbuh1hhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjT)}(hjWh]h*}(hj'hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj'ubj)}(hldatah]hldata}(hj (hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubah}(h]h ]h"]h$]h&]hhuh1jhjo'hhhj'hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjk'hhhj'hMubah}(h]jf'ah ](jjeh"]h$]h&]jj)jhuh1jhj'hMhjh'hhubj)}(hhh]h)}(hcomplete eraseh]hcomplete erase}(hj3(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj0(hhubah}(h]h ]h"]h$]h&]uh1jhjh'hhhj'hMubeh}(h]h ](j1functioneh"]h$]h&]jj1jjK(jjK(jjjuh1jhhhjfhNhNubj)}(h9**Parameters** ``struct n_tty_data *ldata`` n_tty datah](h)}(h**Parameters**h]j)}(hjU(h]h Parameters}(hjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS(ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjO(ubj)}(hhh]j)}(h'``struct n_tty_data *ldata`` n_tty datah](j)}(h``struct n_tty_data *ldata``h]j)}(hjt(h]hstruct n_tty_data *ldata}(hjv(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr(ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjn(ubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj(ubah}(h]h ]h"]h$]h&]uh1jhjn(ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhjk(ubah}(h]h ]h"]h$]h&]uh1jhjO(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jeraser (C function)c.eraserhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h0void eraser (u8 c, const struct tty_struct *tty)h]j)}(h/void eraser(u8 c, const struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(hhhj(hMubj)}(heraserh]j)}(heraserh]heraser}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj(hhhj(hMubj)}(h$(u8 c, const struct tty_struct *tty)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj )ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj)modnameN classnameNj7j:)}j=]j@)}j3j(sbc.eraserasbuh1hhj)ubj)}(h h]h }(hj.)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hj1h]hc}(hj<)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj)ubj)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hjT)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubj)}(h h]h }(hja)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubj)}(hjh]hstruct}(hjo)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubj)}(h h]h }(hj|)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj)modnameN classnameNj7j:)}j=]j*)c.eraserasbuh1hhjP)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubjT)}(hjWh]h*}(hj)hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjP)ubj)}(httyh]htty}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj)ubeh}(h]h ]h"]h$]h&]hhuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj(hhhj(hMubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhj(hhubj)}(hhh]h)}(hhandle erase functionh]hhandle erase function}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj*jj*jjjuh1jhhhjfhNhNubj)}(hXo**Parameters** ``u8 c`` character input ``const struct tty_struct *tty`` terminal device **Description** Perform erase and necessary output when an erase character is present in the stream from the driver layer. Handles the complexities of UTF-8 multibyte symbols. Locking: n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj *ubj)}(hhh](j)}(h``u8 c`` character input h](j)}(h``u8 c``h]j)}(hj1*h]hu8 c}(hj3*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj+*ubj)}(hhh]h)}(hcharacter inputh]hcharacter input}(hjJ*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjF*hMhjG*ubah}(h]h ]h"]h$]h&]uh1jhj+*ubeh}(h]h ]h"]h$]h&]uh1jhjF*hMhj(*ubj)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hjj*h]hconst struct tty_struct *tty}(hjl*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh*ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjd*ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhjd*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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj *ubh)}(hPerform erase and necessary output when an erase character is present in the stream from the driver layer. Handles the complexities of UTF-8 multibyte symbols.h]hPerform erase and necessary output when an erase character is present in the stream from the driver layer. Handles the complexities of UTF-8 multibyte symbols.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj *ubj)}(hhh]j)}(hXLocking: n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](j)}(h+Locking: n_tty_receive_buf()/producer path:h]h+Locking: n_tty_receive_buf()/producer path:}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj*ubj)}(hhh]h)}(h,caller holds non-exclusive ``termios_rwsem``h](hcaller holds non-exclusive }(hj*hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hMhj*ubah}(h]h ]h"]h$]h&]uh1jhj *ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jisig (C function)c.isighNtauh1jhjfhhhNhNubj)}(hhh](j)}(h+void isig (int sig, struct tty_struct *tty)h]j)}(h*void isig(int sig, struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hj2+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.+hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjA+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.+hhhj@+hMubj)}(hisigh]j)}(hisigh]hisig}(hjS+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO+ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj.+hhhj@+hMubj)}(h!(int sig, struct tty_struct *tty)h](j)}(hint sigh](j)}(hinth]hint}(hjo+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk+ubj)}(h h]h }(hj}+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk+ubj)}(hsigh]hsig}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjk+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjg+ubj)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj+modnameN classnameNj7j:)}j=]j@)}j3jU+sbc.isigasbuh1hhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubjT)}(hjWh]h*}(hj+hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj+ubj)}(httyh]htty}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjg+ubeh}(h]h ]h"]h$]h&]hhuh1jhj.+hhhj@+hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj*+hhhj@+hMubah}(h]j%+ah ](jjeh"]h$]h&]jj)jhuh1jhj@+hMhj'+hhubj)}(hhh]h)}(hhandle the ISIG optioh]hhandle the ISIG optio}(hj',hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj$,hhubah}(h]h ]h"]h$]h&]uh1jhj'+hhhj@+hMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj?,jj?,jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``int sig`` signal ``struct tty_struct *tty`` terminal **Description** Called when a signal is being sent due to terminal input. Called from the :c:type:`tty_driver.receive_buf\(\) ` path, so serialized. Performs input and output flush if !NOFLSH. In this context, the echo buffer is 'output'. The signal is processed first to alert any current readers or writers to discontinue and exit their i/o loops. Locking: ``ctrl``.lockh](h)}(h**Parameters**h]j)}(hjI,h]h Parameters}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG,ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM"hjC,ubj)}(hhh](j)}(h``int sig`` signal h](j)}(h ``int sig``h]j)}(hjh,h]hint sig}(hjj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf,ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjb,ubj)}(hhh]h)}(hsignalh]hsignal}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj},hMhj~,ubah}(h]h ]h"]h$]h&]uh1jhjb,ubeh}(h]h ]h"]h$]h&]uh1jhj},hMhj_,ubj)}(h$``struct tty_struct *tty`` terminal 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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hj,ubj)}(hhh]h)}(hterminalh]hterminal}(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&]uh1jhjC,ubh)}(h**Description**h]j)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM"hjC,ubh)}(hCalled when a signal is being sent due to terminal input. Called from the :c:type:`tty_driver.receive_buf\(\) ` path, so serialized.h](hJCalled when a signal is being sent due to terminal input. Called from the }(hj,hhhNhNubh)}(h1:c:type:`tty_driver.receive_buf\(\) `h]j)}(hj,h]htty_driver.receive_buf()}(hj,hhhNhNubah}(h]h ](jYj1c-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjf refdomainj1reftypetype refexplicitrefwarnj7j$jl tty_driveruh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hj,ubh path, so serialized.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hM!hjC,ubh)}(hPerforms input and output flush if !NOFLSH. In this context, the echo buffer is 'output'. The signal is processed first to alert any current readers or writers to discontinue and exit their i/o loops.h]hPerforms input and output flush if !NOFLSH. In this context, the echo buffer is ‘output’. The signal is processed first to alert any current readers or writers to discontinue and exit their i/o loops.}(hj$-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM$hjC,ubh)}(hLocking: ``ctrl``.lockh](h Locking: }(hj3-hhhNhNubj)}(h``ctrl``h]hctrl}(hj;-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3-ubh.lock}(hj3-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM(hjC,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j n_tty_receive_break (C function)c.n_tty_receive_breakhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h1void n_tty_receive_break (struct tty_struct *tty)h]j)}(h0void n_tty_receive_break(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjt-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMNubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp-hhhj-hMNubj)}(hn_tty_receive_breakh]j)}(hn_tty_receive_breakh]hn_tty_receive_break}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjp-hhhj-hMNubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj-modnameN classnameNj7j:)}j=]j@)}j3j-sbc.n_tty_receive_breakasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubjT)}(hjWh]h*}(hj-hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj-ubj)}(httyh]htty}(hj .hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj-ubah}(h]h ]h"]h$]h&]hhuh1jhjp-hhhj-hMNubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjl-hhhj-hMNubah}(h]jg-ah ](jjeh"]h$]h&]jj)jhuh1jhj-hMNhji-hhubj)}(hhh]h)}(h handle breakh]h handle break}(hj4.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMNhj1.hhubah}(h]h ]h"]h$]h&]uh1jhji-hhhj-hMNubeh}(h]h ](j1functioneh"]h$]h&]jj1jjL.jjL.jjjuh1jhhhjfhNhNubj)}(hXo**Parameters** ``struct tty_struct *tty`` terminal **Description** An RS232 break event has been hit in the incoming bitstream. This can cause a variety of events depending upon the termios settings. Locking: n_tty_receive_buf()/producer path: caller holds non-exclusive termios_rwsem **Note** may get exclusive ``termios_rwsem`` if flushing input bufferh](h)}(h**Parameters**h]j)}(hjV.h]h Parameters}(hjX.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT.ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMRhjP.ubj)}(hhh]j)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j)}(hju.h]hstruct tty_struct *tty}(hjw.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs.ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMOhjo.ubj)}(hhh]h)}(hterminalh]hterminal}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMOhj.ubah}(h]h ]h"]h$]h&]uh1jhjo.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMOhjl.ubah}(h]h ]h"]h$]h&]uh1jhjP.ubh)}(h**Description**h]j)}(hj.h]h Description}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMQhjP.ubh)}(hAn RS232 break event has been hit in the incoming bitstream. This can cause a variety of events depending upon the termios settings.h]hAn RS232 break event has been hit in the incoming bitstream. This can cause a variety of events depending upon the termios settings.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMPhjP.ubj)}(hhh]j)}(hULocking: n_tty_receive_buf()/producer path: caller holds non-exclusive termios_rwsem h](j)}(h+Locking: n_tty_receive_buf()/producer path:h]h+Locking: n_tty_receive_buf()/producer path:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMThj.ubj)}(hhh]h)}(h(caller holds non-exclusive termios_rwsemh]h(caller holds non-exclusive termios_rwsem}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hMThj.ubah}(h]h ]h"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]uh1jhj.hMThj.ubah}(h]h ]h"]h$]h&]uh1jhjP.ubh)}(h**Note**h]j)}(hj/h]hNote}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMVhjP.ubh)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj>modnameN classnameNj7j:)}j=]j=c.n_tty_set_termiosasbuh1hhj=ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubjT)}(hjWh]h*}(hj,>hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj=ubj)}(holdh]hold}(hj9>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjM=ubeh}(h]h ]h"]h$]h&]hhuh1jhj=hhhj&=hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj=hhhj&=hMubah}(h]j =ah ](jjeh"]h$]h&]jj)jhuh1jhj&=hMhj =hhubj)}(hhh]h)}(htermios data changedh]htermios data changed}(hjc>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj`>hhubah}(h]h ]h"]h$]h&]uh1jhj =hhhj&=hMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj{>jj{>jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal ``const struct ktermios *old`` previous data **Description** Called by the tty layer when the user changes termios flags so that the line discipline can plan ahead. This function cannot sleep and is protected from re-entry by the tty layer. The user is guaranteed that this function will not be re-entered or in progress when the ldisc is closed. Locking: Caller holds **tty->termios_rwsem**h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubj)}(hhh](j)}(h$``struct tty_struct *tty`` terminal 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&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubj)}(hhh]h)}(hterminalh]hterminal}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj>ubj)}(h-``const struct ktermios *old`` previous data h](j)}(h``const struct ktermios *old``h]j)}(hj>h]hconst struct ktermios *old}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubj)}(hhh]h)}(h previous datah]h previous data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(hXCalled by the tty layer when the user changes termios flags so that the line discipline can plan ahead. This function cannot sleep and is protected from re-entry by the tty layer. The user is guaranteed that this function will not be re-entered or in progress when the ldisc is closed.h]hXCalled by the tty layer when the user changes termios flags so that the line discipline can plan ahead. This function cannot sleep and is protected from re-entry by the tty layer. The user is guaranteed that this function will not be re-entered or in progress when the ldisc is closed.}(hj.?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubh)}(h,Locking: Caller holds **tty->termios_rwsem**h](hLocking: Caller holds }(hj=?hhhNhNubj)}(h**tty->termios_rwsem**h]htty->termios_rwsem}(hjE?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=?ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_close (C function) c.n_tty_closehNtauh1jhjfhhhNhNubj)}(hhh](j)}(h)void n_tty_close (struct tty_struct *tty)h]j)}(h(void n_tty_close(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjz?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv?hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMBubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv?hhhj?hMBubj)}(h n_tty_closeh]j)}(h n_tty_closeh]h n_tty_close}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjv?hhhj?hMBubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj?modnameN classnameNj7j:)}j=]j@)}j3j?sb c.n_tty_closeasbuh1hhj?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubjT)}(hjWh]h*}(hj@hhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj?ubj)}(httyh]htty}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj?ubah}(h]h ]h"]h$]h&]hhuh1jhjv?hhhj?hMBubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjr?hhhj?hMBubah}(h]jm?ah ](jjeh"]h$]h&]jj)jhuh1jhj?hMBhjo?hhubj)}(hhh]h)}(hclose the ldisc for this ttyh]hclose the ldisc for this tty}(hj:@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMBhj7@hhubah}(h]h ]h"]h$]h&]uh1jhjo?hhhj?hMBubeh}(h]h ](j1functioneh"]h$]h&]jj1jjR@jjR@jjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` device **Description** Called from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.h](h)}(h**Parameters**h]j)}(hj\@h]h Parameters}(hj^@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMFhjV@ubj)}(hhh]j)}(h"``struct tty_struct *tty`` device h](j)}(h``struct tty_struct *tty``h]j)}(hj{@h]hstruct tty_struct *tty}(hj}@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy@ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMChju@ubj)}(hhh]h)}(hdeviceh]hdevice}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMChj@ubah}(h]h ]h"]h$]h&]uh1jhju@ubeh}(h]h ]h"]h$]h&]uh1jhj@hMChjr@ubah}(h]h ]h"]h$]h&]uh1jhjV@ubh)}(h**Description**h]j)}(hj@h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMEhjV@ubh)}(hCalled from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.h]hCalled from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMDhjV@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_open (C function) c.n_tty_openhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h'int n_tty_open (struct tty_struct *tty)h]j)}(h&int n_tty_open(struct tty_struct *tty)h](j)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMVubj)}(h h]h }(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@hhhj AhMVubj)}(h n_tty_openh]j)}(h n_tty_openh]h n_tty_open}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAubah}(h]h ](jjeh"]h$]h&]hhuh1jhj@hhhj AhMVubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj8AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Aubj)}(h h]h }(hjEAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Aubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjVAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSAubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjXAmodnameN classnameNj7j:)}j=]j@)}j3jAsb c.n_tty_openasbuh1hhj4Aubj)}(h h]h }(hjvAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4AubjT)}(hjWh]h*}(hjAhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj4Aubj)}(httyh]htty}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4Aubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0Aubah}(h]h ]h"]h$]h&]hhuh1jhj@hhhj AhMVubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj@hhhj AhMVubah}(h]j@ah ](jjeh"]h$]h&]jj)jhuh1jhj AhMVhj@hhubj)}(hhh]h)}(h open an ldisch]h open an ldisc}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMVhjAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj AhMVubeh}(h]h ](j1functioneh"]h$]h&]jj1jjAjjAjjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal to open **Description** Called when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMZhjAubj)}(hhh]j)}(h,``struct tty_struct *tty`` terminal to open h](j)}(h``struct tty_struct *tty``h]j)}(hjAh]hstruct tty_struct *tty}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMWhjAubj)}(hhh]h)}(hterminal to openh]hterminal to open}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMWhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMWhjAubah}(h]h ]h"]h$]h&]uh1jhjAubh)}(h**Description**h]j)}(hj7Bh]h Description}(hj9BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Bubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMYhjAubh)}(hCalled when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.h]hCalled when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.}(hjMBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMXhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcopy_from_read_buf (C function)c.copy_from_read_bufhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hLbool copy_from_read_buf (const struct tty_struct *tty, u8 **kbp, size_t *nr)h]j)}(hKbool copy_from_read_buf(const struct tty_struct *tty, u8 **kbp, size_t *nr)h](j)}(hjx3h]hbool}(hj|BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxBhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjxBhhhjBhMubj)}(hcopy_from_read_bufh]j)}(hcopy_from_read_bufh]hcopy_from_read_buf}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]hhuh1jhjxBhhhjBhMubj)}(h4(const struct tty_struct *tty, u8 **kbp, size_t *nr)h](j)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(hjh]hstruct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjBmodnameN classnameNj7j:)}j=]j@)}j3jBsbc.copy_from_read_bufasbuh1hhjBubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubjT)}(hjWh]h*}(hjChhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjBubj)}(httyh]htty}(hj,ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjBubj)}(hu8 **kbph](h)}(hhh]j)}(hu8h]hu8}(hjHChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjECubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjJCmodnameN classnameNj7j:)}j=]j Cc.copy_from_read_bufasbuh1hhjACubj)}(h h]h }(hjfChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjACubjT)}(hjWh]h*}(hjtChhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjACubjT)}(hjWh]h*}(hjChhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjACubj)}(hkbph]hkbp}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjACubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjBubj)}(h size_t *nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjCmodnameN classnameNj7j:)}j=]j Cc.copy_from_read_bufasbuh1hhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjT)}(hjWh]h*}(hjChhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjCubj)}(hnrh]hnr}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjBubeh}(h]h ]h"]h$]h&]hhuh1jhjxBhhhjBhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjtBhhhjBhMubah}(h]joBah ](jjeh"]h$]h&]jj)jhuh1jhjBhMhjqBhhubj)}(hhh]h)}(hcopy read data directlyh]hcopy read data directly}(hj DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj Dhhubah}(h]h ]h"]h$]h&]uh1jhjqBhhhjBhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj%Djj%Djjjuh1jhhhjfhNhNubj)}(hX"**Parameters** ``const struct tty_struct *tty`` terminal device ``u8 **kbp`` data ``size_t *nr`` size of data **Description** Helper function to speed up n_tty_read(). It is only called when ``ICANON`` is off; it copies characters straight from the tty queue. Locking: * called under the **ldata->atomic_read_lock** sem * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published **Return** true if it successfully copied data, but there is still more data to be had.h](h)}(h**Parameters**h]j)}(hj/Dh]h Parameters}(hj1DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-Dubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)Dubj)}(hhh](j)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hjNDh]hconst struct tty_struct *tty}(hjPDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjHDubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjgDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcDhMhjdDubah}(h]h ]h"]h$]h&]uh1jhjHDubeh}(h]h ]h"]h$]h&]uh1jhjcDhMhjEDubj)}(h``u8 **kbp`` data h](j)}(h ``u8 **kbp``h]j)}(hjDh]hu8 **kbp}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjDubj)}(hhh]h)}(hdatah]hdata}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjEDubj)}(h``size_t *nr`` size of data h](j)}(h``size_t *nr``h]j)}(hjDh]h size_t *nr}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjDubj)}(hhh]h)}(h size of datah]h size of data}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhMhjEDubeh}(h]h ]h"]h$]h&]uh1jhj)Dubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)Dubh)}(hHelper function to speed up n_tty_read(). It is only called when ``ICANON`` is off; it copies characters straight from the tty queue.h](hAHelper function to speed up n_tty_read(). It is only called when }(hjEhhhNhNubj)}(h ``ICANON``h]hICANON}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh: is off; it copies characters straight from the tty queue.}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)Dubj)}(hhh]j)}(hLocking: * called under the **ldata->atomic_read_lock** sem * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published h](j)}(hLocking:h]hLocking:}(hj9EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj5Eubj)}(hhh]h)}(hhh](h)}(h0called under the **ldata->atomic_read_lock** semh]h)}(hjPEh](hcalled under the }(hjREhhhNhNubj)}(h**ldata->atomic_read_lock**h]hldata->atomic_read_lock}(hjYEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjREubh sem}(hjREhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjNEubah}(h]h ]h"]h$]h&]uh1hhjKEubh)}(hrn_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published h]j)}(hhh]j)}(h^n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published h](j)}(hn_tty_read()/consumer path:h]hn_tty_read()/consumer path:}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGEhMhjEubj)}(hhh]h)}(hAcaller holds non-exclusive ``termios_rwsem``; read_tail publishedh](hcaller holds non-exclusive }(hjEhhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh; read_tail published}(hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjEubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhjGEhMhj|Eubah}(h]h ]h"]h$]h&]uh1jhjxEubah}(h]h ]h"]h$]h&]uh1hhjKEubeh}(h]h ]h"]h$]h&]jjWuh1hhjqEhMhjHEubah}(h]h ]h"]h$]h&]uh1jhj5Eubeh}(h]h ]h"]h$]h&]uh1jhjGEhMhj2Eubah}(h]h ]h"]h$]h&]uh1jhj)Dubh)}(h **Return**h]j)}(hjEh]hReturn}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)Dubh)}(hLtrue if it successfully copied data, but there is still more data to be had.h]hLtrue if it successfully copied data, but there is still more data to be had.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj)Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%canon_copy_from_read_buf (C function)c.canon_copy_from_read_bufhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hRbool canon_copy_from_read_buf (const struct tty_struct *tty, u8 **kbp, size_t *nr)h]j)}(hQbool canon_copy_from_read_buf(const struct tty_struct *tty, u8 **kbp, size_t *nr)h](j)}(hjx3h]hbool}(hj,FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(FhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hj:FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Fhhhj9FhMubj)}(hcanon_copy_from_read_bufh]j)}(hcanon_copy_from_read_bufh]hcanon_copy_from_read_buf}(hjLFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHFubah}(h]h ](jjeh"]h$]h&]hhuh1jhj(Fhhhj9FhMubj)}(h4(const struct tty_struct *tty, u8 **kbp, size_t *nr)h](j)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hjhFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubj)}(h h]h }(hjuFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubj)}(hjh]hstruct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjFmodnameN classnameNj7j:)}j=]j@)}j3jNFsbc.canon_copy_from_read_bufasbuh1hhjdFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubjT)}(hjWh]h*}(hjFhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjdFubj)}(httyh]htty}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdFubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`Fubj)}(hu8 **kbph](h)}(hhh]j)}(hu8h]hu8}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjFmodnameN classnameNj7j:)}j=]jFc.canon_copy_from_read_bufasbuh1hhjFubj)}(h h]h }(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubjT)}(hjWh]h*}(hj$GhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjFubjT)}(hjWh]h*}(hj1GhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjFubj)}(hkbph]hkbp}(hj>GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`Fubj)}(h size_t *nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hjZGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWGubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj\GmodnameN classnameNj7j:)}j=]jFc.canon_copy_from_read_bufasbuh1hhjSGubj)}(h h]h }(hjxGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSGubjT)}(hjWh]h*}(hjGhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjSGubj)}(hnrh]hnr}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSGubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj`Fubeh}(h]h ]h"]h$]h&]hhuh1jhj(Fhhhj9FhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj$Fhhhj9FhMubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1jhj9FhMhj!Fhhubj)}(hhh]h)}(h copy read data in canonical modeh]h copy read data in canonical mode}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGhhubah}(h]h ]h"]h$]h&]uh1jhj!Fhhhj9FhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jjGjjGjjjuh1jhhhjfhNhNubj)}(hX3**Parameters** ``const struct tty_struct *tty`` terminal device ``u8 **kbp`` data ``size_t *nr`` size of data **Description** Helper function for n_tty_read(). It is only called when ``ICANON`` is on; it copies one line of input up to and including the line-delimiting character into the result buffer. **Note** When termios is changed from non-canonical to canonical mode and the read buffer contains data, n_tty_set_termios() simulates an EOF push (as if C-d were input) _without_ the ``DISABLED_CHAR`` in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received. Locking: * called under the ``atomic_read_lock`` mutex * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail publishedh](h)}(h**Parameters**h]j)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubj)}(hhh](j)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hjGh]hconst struct tty_struct *tty}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubj)}(h``u8 **kbp`` data h](j)}(h ``u8 **kbp``h]j)}(hj7Hh]hu8 **kbp}(hj9HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5Hubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj1Hubj)}(hhh]h)}(hdatah]hdata}(hjPHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLHhMhjMHubah}(h]h ]h"]h$]h&]uh1jhj1Hubeh}(h]h ]h"]h$]h&]uh1jhjLHhMhjGubj)}(h``size_t *nr`` size of data h](j)}(h``size_t *nr``h]j)}(hjpHh]h size_t *nr}(hjrHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnHubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjjHubj)}(hhh]h)}(h size of datah]h size of data}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjjHubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubeh}(h]h ]h"]h$]h&]uh1jhjGubh)}(h**Description**h]j)}(hjHh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubh)}(hHelper function for n_tty_read(). It is only called when ``ICANON`` is on; it copies one line of input up to and including the line-delimiting character into the result buffer.h](h9Helper function for n_tty_read(). It is only called when }(hjHhhhNhNubj)}(h ``ICANON``h]hICANON}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubhm is on; it copies one line of input up to and including the line-delimiting character into the result buffer.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubh)}(h**Note**h]j)}(hjHh]hNote}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubh)}(hXJWhen termios is changed from non-canonical to canonical mode and the read buffer contains data, n_tty_set_termios() simulates an EOF push (as if C-d were input) _without_ the ``DISABLED_CHAR`` in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received.h](hWhen termios is changed from non-canonical to canonical mode and the read buffer contains data, n_tty_set_termios() simulates an EOF push (as if C-d were input) _without_ the }(hjHhhhNhNubj)}(h``DISABLED_CHAR``h]h DISABLED_CHAR}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjGubj)}(hhh]j)}(hLocking: * called under the ``atomic_read_lock`` mutex * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail publishedh](j)}(hLocking:h]hLocking:}(hj"IhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjIubj)}(hhh]h)}(hhh](h)}(h+called under the ``atomic_read_lock`` mutexh]h)}(hj9Ih](hcalled under the }(hj;IhhhNhNubj)}(h``atomic_read_lock``h]hatomic_read_lock}(hjBIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Iubh mutex}(hj;IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj7Iubah}(h]h ]h"]h$]h&]uh1hhj4Iubh)}(han_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail publishedh]j)}(hhh]j)}(h]n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail publishedh](j)}(hn_tty_read()/consumer path:h]hn_tty_read()/consumer path:}(hjlIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0IhMhjhIubj)}(hhh]h)}(hAcaller holds non-exclusive ``termios_rwsem``; read_tail publishedh](hcaller holds non-exclusive }(hj}IhhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Iubh; read_tail published}(hj}IhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0IhMhjzIubah}(h]h ]h"]h$]h&]uh1jhjhIubeh}(h]h ]h"]h$]h&]uh1jhj0IhMhjeIubah}(h]h ]h"]h$]h&]uh1jhjaIubah}(h]h ]h"]h$]h&]uh1hhj4Iubeh}(h]h ]h"]h$]h&]jjWuh1hhjZIhMhj1Iubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhj0IhMhjIubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jjob_control (C function) c.job_controlhNtauh1jhjfhhhNhNubj)}(hhh](j)}(h;int job_control (struct tty_struct *tty, struct file *file)h]j)}(h:int job_control(struct tty_struct *tty, struct file *file)h](j)}(hinth]hint}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIhhhjIhMubj)}(h job_controlh]j)}(h job_controlh]h job_control}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Jubah}(h]h ](jjeh"]h$]h&]hhuh1jhjIhhhjIhMubj)}(h+(struct tty_struct *tty, struct file *file)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj*JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Jubj)}(h h]h }(hj7JhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Jubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjHJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEJubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjJJmodnameN classnameNj7j:)}j=]j@)}j3jJsb c.job_controlasbuh1hhj&Jubj)}(h h]h }(hjhJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&JubjT)}(hjWh]h*}(hjvJhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj&Jubj)}(httyh]htty}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&Jubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj"Jubj)}(hstruct file *fileh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubh)}(hhh]j)}(hfileh]hfile}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjJmodnameN classnameNj7j:)}j=]jdJ c.job_controlasbuh1hhjJubj)}(h h]h }(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubjT)}(hjWh]h*}(hjJhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjJubj)}(hfileh]hfile}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj"Jubeh}(h]h ]h"]h$]h&]hhuh1jhjIhhhjIhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjIhhhjIhMubah}(h]jIah ](jjeh"]h$]h&]jj)jhuh1jhjIhMhjIhhubj)}(hhh]h)}(hcheck job controlh]hcheck job control}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjKhhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjIhMubeh}(h]h ](j1functioneh"]h$]h&]jj1jj5Kjj5Kjjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` tty ``struct file *file`` file handle **Description** Perform job control management checks on this **file**/**tty** descriptor and if appropriate send any needed signals and return a negative error code if action should be taken. Locking: * redirected write test is safe * current->signal->tty check is safe * ctrl.lock to safely reference **tty->ctrl.pgrp**h](h)}(h**Parameters**h]j)}(hj?Kh]h Parameters}(hjAKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Kubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hj9Kubj)}(hhh](j)}(h``struct tty_struct *tty`` tty h](j)}(h``struct tty_struct *tty``h]j)}(hj^Kh]hstruct tty_struct *tty}(hj`KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Kubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjXKubj)}(hhh]h)}(httyh]htty}(hjwKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsKhMhjtKubah}(h]h ]h"]h$]h&]uh1jhjXKubeh}(h]h ]h"]h$]h&]uh1jhjsKhMhjUKubj)}(h"``struct file *file`` file handle h](j)}(h``struct file *file``h]j)}(hjKh]hstruct file *file}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjKubj)}(hhh]h)}(h file handleh]h file handle}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhMhjKubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjKhMhjUKubeh}(h]h ]h"]h$]h&]uh1jhj9Kubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hj9Kubh)}(hPerform job control management checks on this **file**/**tty** descriptor and if appropriate send any needed signals and return a negative error code if action should be taken.h](h.Perform job control management checks on this }(hjKhhhNhNubj)}(h**file**h]hfile}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh/}(hjKhhhNhNubj)}(h**tty**h]htty}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubhr descriptor and if appropriate send any needed signals and return a negative error code if action should be taken.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hj9Kubj)}(hhh]j)}(hLocking: * redirected write test is safe * current->signal->tty check is safe * ctrl.lock to safely reference **tty->ctrl.pgrp**h](j)}(hLocking:h]hLocking:}(hj"LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM&hjLubj)}(hhh]h)}(hhh](h)}(hredirected write test is safeh]h)}(hj9Lh]hredirected write test is safe}(hj;LhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM%hj7Lubah}(h]h ]h"]h$]h&]uh1hhj4Lubh)}(h"current->signal->tty check is safeh]h)}(hjQLh]h"current->signal->tty check is safe}(hjSLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0LhM&hjOLubah}(h]h ]h"]h$]h&]uh1hhj4Lubh)}(h0ctrl.lock to safely reference **tty->ctrl.pgrp**h]h)}(hjhLh](hctrl.lock to safely reference }(hjjLhhhNhNubj)}(h**tty->ctrl.pgrp**h]htty->ctrl.pgrp}(hjqLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjLubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM'hjfLubah}(h]h ]h"]h$]h&]uh1hhj4Lubeh}(h]h ]h"]h$]h&]jjWuh1hhjHLhM%hj1Lubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhj0LhM&hjLubah}(h]h ]h"]h$]h&]uh1jhj9Kubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_read (C function) c.n_tty_readhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hxssize_t n_tty_read (struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)h]j)}(hwssize_t n_tty_read(struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)h](h)}(hhh]j)}(hssize_th]hssize_t}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjLmodnameN classnameNj7j:)}j=]j@)}j3 n_tty_readsb c.n_tty_readasbuh1hhjLhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMuubj)}(h h]h }(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLhhhjLhMuubj)}(h n_tty_readh]j)}(hjLh]h n_tty_read}(hjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ](jjeh"]h$]h&]hhuh1jhjLhhhjLhMuubj)}(he(struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj#MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj4MhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1Mubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj6MmodnameN classnameNj7j:)}j=]jL c.n_tty_readasbuh1hhjMubj)}(h h]h }(hjRMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjT)}(hjWh]h*}(hj`MhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjMubj)}(httyh]htty}(hjmMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubj)}(hstruct file *fileh](j)}(hjh]hstruct}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j)}(hfileh]hfile}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjMmodnameN classnameNj7j:)}j=]jL c.n_tty_readasbuh1hhjMubj)}(h h]h }(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjT)}(hjWh]h*}(hjMhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjMubj)}(hfileh]hfile}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubj)}(hu8 *kbufh](h)}(hhh]j)}(hu8h]hu8}(hjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjMmodnameN classnameNj7j:)}j=]jL c.n_tty_readasbuh1hhjMubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjT)}(hjWh]h*}(hj%NhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjMubj)}(hkbufh]hkbuf}(hj2NhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubj)}(h size_t nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hjNNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKNubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjPNmodnameN classnameNj7j:)}j=]jL c.n_tty_readasbuh1hhjGNubj)}(h h]h }(hjlNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGNubj)}(hnrh]hnr}(hjzNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubj)}(h void **cookieh](j)}(hvoidh]hvoid}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubjT)}(hjWh]h*}(hjNhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjNubjT)}(hjWh]h*}(hjNhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjNubj)}(hcookieh]hcookie}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubj)}(hunsigned long offseth](j)}(hunsignedh]hunsigned}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hlongh]hlong}(hjNhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(h h]h }(hj OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubj)}(hoffseth]hoffset}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjMubeh}(h]h ]h"]h$]h&]hhuh1jhjLhhhjLhMuubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjLhhhjLhMuubah}(h]jLah ](jjeh"]h$]h&]jj)jhuh1jhjLhMuhjLhhubj)}(hhh]h)}(hread function for ttyh]hread function for tty}(hjDOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMuhjAOhhubah}(h]h ]h"]h$]h&]uh1jhjLhhhjLhMuubeh}(h]h ](j1functioneh"]h$]h&]jj1jj\Ojj\Ojjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` tty device ``struct file *file`` file object ``u8 *kbuf`` kernelspace buffer pointer ``size_t nr`` size of I/O ``void **cookie`` if non-``NULL``, this is a continuation read ``unsigned long offset`` where to continue reading from (unused in n_tty) **Description** Perform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep. This code must be sure never to sleep through a hangup. Locking: n_tty_read()/consumer path: claims non-exclusive termios_rwsem; publishes read_tailh](h)}(h**Parameters**h]j)}(hjfOh]h Parameters}(hjhOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdOubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMyhj`Oubj)}(hhh](j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j)}(hjOh]hstruct tty_struct *tty}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMvhjOubj)}(hhh]h)}(h tty deviceh]h tty device}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMvhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMvhj|Oubj)}(h"``struct file *file`` file object h](j)}(h``struct file *file``h]j)}(hjOh]hstruct file *file}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMwhjOubj)}(hhh]h)}(h file objecth]h file object}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOhMwhjOubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjOhMwhj|Oubj)}(h(``u8 *kbuf`` kernelspace buffer pointer h](j)}(h ``u8 *kbuf``h]j)}(hjOh]hu8 *kbuf}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMxhjOubj)}(hhh]h)}(hkernelspace buffer pointerh]hkernelspace buffer pointer}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj PhMxhj Pubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhj PhMxhj|Oubj)}(h``size_t nr`` size of I/O h](j)}(h ``size_t nr``h]j)}(hj0Ph]h size_t nr}(hj2PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.Pubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMyhj*Pubj)}(hhh]h)}(h size of I/Oh]h size of I/O}(hjIPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEPhMyhjFPubah}(h]h ]h"]h$]h&]uh1jhj*Pubeh}(h]h ]h"]h$]h&]uh1jhjEPhMyhj|Oubj)}(h?``void **cookie`` if non-``NULL``, this is a continuation read h](j)}(h``void **cookie``h]j)}(hjiPh]h void **cookie}(hjkPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMzhjcPubj)}(hhh]h)}(h,if non-``NULL``, this is a continuation readh](hif non-}(hjPhhhNhNubj)}(h``NULL``h]hNULL}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubh, this is a continuation read}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj~PhMzhjPubah}(h]h ]h"]h$]h&]uh1jhjcPubeh}(h]h ]h"]h$]h&]uh1jhj~PhMzhj|Oubj)}(hJ``unsigned long offset`` where to continue reading from (unused in n_tty) h](j)}(h``unsigned long offset``h]j)}(hjPh]hunsigned long offset}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM{hjPubj)}(hhh]h)}(h0where to continue reading from (unused in n_tty)h]h0where to continue reading from (unused in n_tty)}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhM{hjPubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjPhM{hj|Oubeh}(h]h ]h"]h$]h&]uh1jhj`Oubh)}(h**Description**h]j)}(hjPh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM}hj`Oubh)}(hPerform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep.h]hPerform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM|hj`Oubh)}(h7This code must be sure never to sleep through a hangup.h]h7This code must be sure never to sleep through a hangup.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj`Oubj)}(hhh]j)}(h\Locking: n_tty_read()/consumer path: claims non-exclusive termios_rwsem; publishes read_tailh](j)}(h$Locking: n_tty_read()/consumer path:h]h$Locking: n_tty_read()/consumer path:}(hj*QhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj&Qubj)}(hhh]h)}(h7claims non-exclusive termios_rwsem; publishes read_tailh]h7claims non-exclusive termios_rwsem; publishes read_tail}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Rubj)}(h h]h }(hjKRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Rubh)}(hhh]j)}(hfileh]hfile}(hj\RhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYRubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj^RmodnameN classnameNj7j:)}j=]jQ c.n_tty_writeasbuh1hhj:Rubj)}(h h]h }(hjzRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:RubjT)}(hjWh]h*}(hjRhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShj:Rubj)}(hfileh]hfile}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:Rubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubj)}(h const u8 *bufh](j)}(hjh]hconst}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubh)}(hhh]j)}(hu8h]hu8}(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjRmodnameN classnameNj7j:)}j=]jQ c.n_tty_writeasbuh1hhjRubj)}(h h]h }(hjRhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubjT)}(hjWh]h*}(hjRhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjRubj)}(hbufh]hbuf}(hjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubj)}(h size_t nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hj!ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj#SmodnameN classnameNj7j:)}j=]jQ c.n_tty_writeasbuh1hhjSubj)}(h h]h }(hj?ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(hnrh]hnr}(hjMShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjQubeh}(h]h ]h"]h$]h&]hhuh1jhjxQhhhjQhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjtQhhhjQhM ubah}(h]joQah ](jjeh"]h$]h&]jj)jhuh1jhjQhM hjqQhhubj)}(hhh]h)}(hwrite function for ttyh]hwrite function for tty}(hjwShhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjtShhubah}(h]h ]h"]h$]h&]uh1jhjqQhhhjQhM ubeh}(h]h ](j1functioneh"]h$]h&]jj1jjSjjSjjjuh1jhhhjfhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` tty device ``struct file *file`` file object ``const u8 *buf`` userspace buffer pointer ``size_t nr`` size of I/O **Description** Write function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the ``output_lock`` is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer. This code must be sure never to sleep through a hangup. Locking: output_lock to protect column state and space left (note that the process_output*() functions take this lock themselves)h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubj)}(hhh](j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j)}(hjSh]hstruct tty_struct *tty}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubj)}(hhh]h)}(h tty deviceh]h tty device}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM hjSubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjShM hjSubj)}(h"``struct file *file`` file object h](j)}(h``struct file *file``h]j)}(hjSh]hstruct file *file}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubj)}(hhh]h)}(h file objecth]h file object}(hj ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]uh1jhjThM hjSubj)}(h+``const u8 *buf`` userspace buffer pointer h](j)}(h``const u8 *buf``h]j)}(hj*Th]h const u8 *buf}(hj,ThhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(Tubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hj$Tubj)}(hhh]h)}(huserspace buffer pointerh]huserspace buffer pointer}(hjCThhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?ThM hj@Tubah}(h]h ]h"]h$]h&]uh1jhj$Tubeh}(h]h ]h"]h$]h&]uh1jhj?ThM hjSubj)}(h``size_t nr`` size of I/O h](j)}(h ``size_t nr``h]j)}(hjcTh]h size_t nr}(hjeThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaTubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hj]Tubj)}(hhh]h)}(h size of I/Oh]h size of I/O}(hj|ThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxThM hjyTubah}(h]h ]h"]h$]h&]uh1jhj]Tubeh}(h]h ]h"]h$]h&]uh1jhjxThM hjSubeh}(h]h ]h"]h$]h&]uh1jhjSubh)}(h**Description**h]j)}(hjTh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubh)}(hXWrite function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the ``output_lock`` is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer.h](hWrite function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the }(hjThhhNhNubj)}(h``output_lock``h]h output_lock}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubh)}(h7This code must be sure never to sleep through a hangup.h]h7This code must be sure never to sleep through a hangup.}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjSubj)}(hhh]j)}(hLocking: output_lock to protect column state and space left (note that the process_output*() functions take this lock themselves)h](j)}(h;Locking: output_lock to protect column state and space lefth]h;Locking: output_lock to protect column state and space left}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjTubj)}(hhh]h)}(hE(note that the process_output*() functions take this lock themselves)h]hE(note that the process_output*() functions take this lock themselves)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjTubah}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ]h"]h$]h&]uh1jhjThM hjTubah}(h]h ]h"]h$]h&]uh1jhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjfhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_poll (C function) c.n_tty_pollhNtauh1jhjfhhhNhNubj)}(hhh](j)}(hQ__poll_t n_tty_poll (struct tty_struct *tty, struct file *file, poll_table *wait)h]j)}(hP__poll_t n_tty_poll(struct tty_struct *tty, struct file *file, poll_table *wait)h](h)}(hhh]j)}(h__poll_th]h__poll_t}(hjAUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>Uubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjCUmodnameN classnameNj7j:)}j=]j@)}j3 n_tty_pollsb c.n_tty_pollasbuh1hhj:UhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMt ubj)}(h h]h }(hjcUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:UhhhjbUhMt ubj)}(h n_tty_pollh]j)}(hj_Uh]h n_tty_poll}(hjuUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqUubah}(h]h ](jjeh"]h$]h&]hhuh1jhj:UhhhjbUhMt ubj)}(h=(struct tty_struct *tty, struct file *file, poll_table *wait)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetjUmodnameN classnameNj7j:)}j=]j]U c.n_tty_pollasbuh1hhjUubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubjT)}(hjWh]h*}(hjUhhhNhNubah}(h]h ]j`ah"]h$]h&]uh1jShjUubj)}(httyh]htty}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjUubj)}(hstruct file *fileh](j)}(hjh]hstruct}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubj)}(h h]h }(hj VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUubh)}(hhh]j)}(hfileh]hfile}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainj1reftypej3 reftargetj VmodnameN classnameNj7j:)}j=]j]U c.n_tty_pollasbuh1hhjUubj)}(h h]h }(hjj9jcjjXj$u nametypes}(jXj>jcjXuh}(jXhj9hjjxjjj$jfjjjjjQjVj j j j j j jjjHjMjjjWj\jujzjWj\jXj]jjjZ j_ j"j"j%j%jf'jk'j(j(j%+j*+jg-jl-jZ/j_/j1j 1ji3jn3j6j 6jS8jX8j =j=jm?jr?j@j@joBjtBjFj$FjIjIjLjLjoQjtQj1Uj6Uhhjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jNXKsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.