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]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-functionsuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(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) }(hj-hhhNhNubh)}(h&:doc:`TTY line discipline `h]hinline)}(hj7h]hTTY line discipline}(hj;hhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1j9hj5ubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/n_tty refdomainjFreftypedoc refexplicitrefwarn reftarget tty_ldiscuh1hhhhK hj-ubh-. It tries to handle characters as per POSIX.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hExternal Functionsh]hExternal Functions}(hjghhhNhNubah}(h]h ]h"]h$]h&]refidhuh1hhjdhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlen_tty_inherit_ops (C function)c.n_tty_inherit_opshNtauh1jvhjdhhhNhNubhdesc)}(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 }(hjhhhNhNubah}(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 reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j$ ASTIdentifier)}jjsbc.n_tty_inherit_opsasbuh1hhjubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjAhhhNhNubah}(h]h ]pah"]h$]h&]uh1j?hjubj)}(hopsh]hops}(hjPhhhNhNubah}(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 ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjdhNhNubh container)}(h**Parameters** ``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods 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)}(h``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods Enables a 'subclass' line discipline to 'inherit' 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&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.chM hjubh)}(h@Enables a 'subclass' line discipline to 'inherit' N_TTY methods.h]hHEnables a ‘subclass’ line discipline to ‘inherit’ 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 hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjdhhhNhNubeh}(h]hah ]h"]external functionsah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(hInternal Functionsh]hInternal Functions}(hj3hhhNhNubah}(h]h ]h"]h$]h&]juj uh1hhj0hhhhhKubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_kick_worker (C function)c.n_tty_kick_workerhNtauh1jvhj0hhhNhNubj)}(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}(hjZhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKubj)}(h h]h }(hjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVhhhjhhKubj)}(hn_tty_kick_workerh]j)}(hn_tty_kick_workerh]hn_tty_kick_worker}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubah}(h]h ](jjeh"]h$]h&]hhuh1jhjVhhhjhhKubj)}(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&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]j,)}jj}sbc.n_tty_kick_workerasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjVhhhjhhKubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjRhhhjhhKubah}(h]jMah ](jwjxeh"]h$]h&]j|j})j~huh1jhjhhKhjOhhubj)}(hhh]h)}(h start input worker (if required)h]h start input worker (if required)}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jhjOhhhjhhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNjjNjjjuh1jhhhj0hNhNubj)}(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)}(hjXh]h Parameters}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjRubj)}(hhh]j)}(h*``const struct tty_struct *tty`` terminal h](j)}(h ``const struct tty_struct *tty``h]j)}(hjwh]hconst struct tty_struct *tty}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjqubj)}(hhh]h)}(hterminalh]hterminal}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]uh1jhjhKhjnubah}(h]h ]h"]h$]h&]uh1jhjRubh)}(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.chKhjRubh)}(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.chKhjRubj)}(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)}(hjh](hCaller holds exclusive }(hjhhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, or}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(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&]uh1jhjhKhj$ubj)}(hhh]h)}(h%holds non-exclusive ``termios_rwsem``h](hholds non-exclusive }(hj9hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhj6ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj!ubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]bulletjCuh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjRubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_write_wakeup (C function)c.n_tty_write_wakeuphNtauh1jvhj0hhhNhNubj)}(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 }(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&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]j,)}jjsbc.n_tty_write_wakeupasbuh1hhjubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hjCh]h*}(hj0hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjubj)}(httyh]htty}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjhhhjhKubah}(h]jah ](jwjxeh"]h$]h&]j|j})j~huh1jhjhKhjhhubj)}(hhh]h)}(hasynchronous I/O notifierh]hasynchronous I/O notifier}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chKhjdhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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.}(hjhhhNhNubah}(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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jput_tty_queue (C function)c.put_tty_queuehNtauh1jvhj0hhhNhNubj)}(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&]uh1jhj$hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM'ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj6hM'ubj)}(h put_tty_queueh]j)}(h put_tty_queueh]h put_tty_queue}(hjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEubah}(h]h ](jjeh"]h$]h&]hhuh1jhj$hhhj6hM'ubj)}(h (u8 c, struct n_tty_data *ldata)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjjmodnameN classnameNj#j&)}j)]j,)}jjKsbc.put_tty_queueasbuh1hhjaubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubj)}(hjh]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubj)}(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&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]jc.put_tty_queueasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjubj)}(hldatah]hldata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj]ubeh}(h]h ]h"]h$]h&]hhuh1jhj$hhhj6hM'ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj hhhj6hM'ubah}(h]jah ](jwjxeh"]h$]h&]j|j})j~huh1jhj6hM'hjhhubj)}(hhh]h)}(hadd character to ttyh]hadd character to 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.chMhj,hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj6hM'ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jhhhj0hNhNubj)}(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)}(hjQh]h Parameters}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hjKubj)}(hhh](j)}(h``u8 c`` character h](j)}(h``u8 c``h]j)}(hjph]hu8 c}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjjubj)}(hhh]h)}(h characterh]h character}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjgubj)}(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&]uh1jhjhMhjgubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hjKubh)}(h*Add a character to the tty read_buf queue.h]h*Add a character to the tty read_buf queue.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM!hjKubj)}(hhh]j)}(h^Locking: * n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``h](j)}(hLocking:h]hLocking:}(hj hhhNhNubah}(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)}(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:}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hM$hj, ubj)}(hhh]h)}(h,caller holds non-exclusive ``termios_rwsem``h](hcaller holds non-exclusive }(hjA hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM%hj> ubah}(h]h ]h"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]uh1jhj hM$hj) ubah}(h]h ]h"]h$]h&]uh1jhj% ubah}(h]h ]h"]h$]h&]uh1hhj" ubah}(h]h ]h"]h$]h&]jtjCuh1hhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jreset_buffer_flags (C function)c.reset_buffer_flagshNtauh1jvhj0hhhNhNubj)}(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.chM8ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM8ubj)}(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 hM8ubj)}(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&] refdomainjreftypej reftargetj modnameN classnameNj#j&)}j)]j,)}jj sbc.reset_buffer_flagsasbuh1hhj ubj)}(h h]h }(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj@)}(hjCh]h*}(hj7 hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj ubj)}(hldatah]hldata}(hjD hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hM8ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj hhhj hM8ubah}(h]j ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj hM8hj hhubj)}(hhh]h)}(hreset buffer stateh]hreset buffer state}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM.hjk hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM8ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhj0hNhNubj)}(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().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM1hj ubj)}(hhh]j)}(hSLocking: * caller holds exclusive ``termios_rwsem``, or * (locking is not required)h](j)}(hLocking:h]hLocking:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM5hj ubj)}(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}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ ubh, or}(hj/ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$ hM5hj+ ubah}(h]h ]h"]h$]h&]uh1hhj( ubh)}(h(locking is not required)h]h)}(hjV h]h(locking is not required)}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM6hjT ubah}(h]h ]h"]h$]h&]uh1hhj( ubeh}(h]h ]h"]h$]h&]jtjCuh1hhj$ hM5hj% ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj$ hM5hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_flush_buffer (C function)c.n_tty_flush_bufferhNtauh1jvhj0hhhNhNubj)}(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.chM^ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hM^ubj)}(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 hM^ubj)}(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&] refdomainjreftypej reftargetj modnameN classnameNj#j&)}j)]j,)}jj sbc.n_tty_flush_bufferasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj@)}(hjCh]h*}(hj- hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj ubj)}(httyh]htty}(hj: 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&]hhjquh1jjrjshj hhhj hM^ubah}(h]j ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj hM^hj hhubj)}(hhh]h)}(hclean input queueh]hclean input queue}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMRhja hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM^ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj| jj| jjjuh1jhhhj0hNhNubj)}(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.chMVhj 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.chMShj ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMShj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMShj 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.chMUhj 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}(hj 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.chMUhj ubh)}(hTHolds ``termios_rwsem`` to exclude producer/consumer while buffer indices are reset.h](hHolds }(hj hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh= to exclude producer/consumer while buffer indices are reset.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMYhj ubh)}(h3Locking: ``ctrl``.lock, exclusive ``termios_rwsem``h](h Locking: }(hj8 hhhNhNubj)}(h``ctrl``h]hctrl}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubh.lock, exclusive }(hj8 hhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8 ubeh}(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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](j!is_utf8_continuation (C function)c.is_utf8_continuationhNtauh1jvhj0hhhNhNubj)}(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.chMqubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMqubj)}(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 hMqubj)}(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&] refdomainjreftypej reftargetj modnameN classnameNj#j&)}j)]j,)}jj sbc.is_utf8_continuationasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hc}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMqubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj hhhj hMqubah}(h]jz ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj hMqhj| hhubj)}(hhh]h)}(hutf8 multibyte checkh]hutf8 multibyte check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMjhjhhubah}(h]h ]h"]h$]h&]uh1jhj| hhhj hMqubeh}(h]h ](jfunctioneh"]h$]h&]jjjj6jj6jjjuh1jhhhj0hNhNubj)}(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)}(hj@h]h Parameters}(hjBhhhNhNubah}(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.chMnhj:ubj)}(hhh]j)}(h``u8 c`` byte to check h](j)}(h``u8 c``h]j)}(hj_h]hu8 c}(hjahhhNhNubah}(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.chMkhjYubj)}(hhh]h)}(h byte to checkh]h byte to check}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMkhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthMkhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMmhj:ubh)}(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.chMmhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jis_continuation (C function)c.is_continuationhNtauh1jvhj0hhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM~ubj)}(his_continuationh]j)}(his_continuationh]his_continuation}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhM~ubj)}(h$(u8 c, const struct tty_struct *tty)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj3modnameN classnameNj#j&)}j)]j,)}jjsbc.is_continuationasbuh1hhj*ubj)}(h h]h }(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hjh]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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]jMc.is_continuationasbuh1hhjsubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjsubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj&ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM~ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjhhhjhM~ubah}(h]jah ](jwjxeh"]h$]h&]j|j})j~huh1jhjhM~hjhhubj)}(hhh]h)}(hmultibyte checkh]hmultibyte check}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMwhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhj0hNhNubj)}(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)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(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`` byte to check h](j)}(h``u8 c``h]j)}(hjTh]hu8 c}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMxhjNubj)}(hhh]h)}(h byte to checkh]h byte to check}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihMxhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihMxhjKubj)}(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.chMyhjubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMyhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMyhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM{hj/ubh)}(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.chM{hj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jdo_output_char (C function)c.do_output_charhNtauh1jvhj0hhhNhNubj)}(hhh](j)}(hhhhNhNubah}(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.chMhj6ubj)}(hhh]h)}(hcharacter bufferh]hcharacter buffer}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhjQhMhjubj)}(h.``unsigned int nr`` number of bytes to output h](j)}(h``unsigned int nr``h]j)}(hjuh]hunsigned int nr}(hjwhhhNhNubah}(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.chMhjoubj)}(hhh]h)}(hnumber of bytes to outputh]hnumber of bytes to output}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjoubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]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.}(hjhhhNhNubah}(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}(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.chMhjubh)}(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.chMhjubh)}(h the number of characters output.h]h the number of characters output.}(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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](j__process_echoes (C function)c.__process_echoeshNtauh1jvhj0hhhNhNubj)}(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}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjQmodnameN classnameNj#j&)}j)]j,)}j__process_echoessbc.__process_echoesasbuh1hhjHhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHhhhjphMubj)}(h__process_echoesh]j)}(hjmh]h__process_echoes}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjHhhhjphMubj)}(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&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]jkc.__process_echoesasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjHhhhjphMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjDhhhjphMubah}(h]j?ah ](jwjxeh"]h$]h&]j|j})j~huh1jhjphMhjAhhubj)}(hhh]h)}(hwrite pending echo charactersh]hwrite pending echo characters}(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&]uh1jhjAhhhjphMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7jj7jjjuh1jhhhj0hNhNubj)}(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)}(hjAh]h Parameters}(hjChhhNhNubah}(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 device h](j)}(h``struct tty_struct *tty``h]j)}(hj`h]hstruct tty_struct *tty}(hjbhhhNhNubah}(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.chMhjZubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhMhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhMhjWubah}(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)}(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.chMhj;ubh)}(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.chMhj;ubh)}(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.chMhj;ubh)}(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.chMhj;ubh)}(h+Locking: callers must hold ``output_lock``.h](hLocking: callers must hold }(hjhhhNhNubj)}(h``output_lock``h]h output_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh.}(hjhhhNhNubeh}(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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jadd_echo_byte (C function)c.add_echo_bytehNtauh1jvhj0hhhNhNubj)}(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}(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)}(h add_echo_byteh]j)}(h add_echo_byteh]h add_echo_byte}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj<hM"ubj)}(h (u8 c, struct n_tty_data *ldata)h](j)}(hu8 ch](h)}(hhh]j)}(hu8h]hu8}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjpmodnameN classnameNj#j&)}j)]j,)}jjQsbc.add_echo_byteasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hjh]hc}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjcubj)}(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&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]jc.add_echo_byteasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjubj)}(hldatah]hldata}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjcubeh}(h]h ]h"]h$]h&]hhuh1jhj*hhhj<hM"ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj&hhhj<hM"ubah}(h]j!ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj<hM"hj#hhubj)}(hhh]h)}(hadd a byte to the echo bufferh]hadd a byte to the echo buffer}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj#hhhj<hM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjMjjMjjjuh1jhhhj0hNhNubj)}(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)}(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.chM hjQubj)}(hhh](j)}(h``u8 c`` unicode byte to echo h](j)}(h``u8 c``h]j)}(hjvh]hu8 c}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjpubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhMhjmubj)}(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&]uh1jhjhMhjmubeh}(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.chM hjQubh)}(h5Add a character or operation byte to the echo buffer.h]h5Add a character or operation byte to the echo buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_move_back_col (C function)c.echo_move_back_colhNtauh1jvhj0hhhNhNubj)}(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}(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)}(hecho_move_back_colh]j)}(hecho_move_back_colh]hecho_move_back_col}(hjPhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(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}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj)}(h h]h }(hjyhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubh)}(hhh]j)}(h n_tty_datah]h n_tty_data}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj#j&)}j)]j,)}jjRsbc.echo_move_back_colasbuh1hhjhubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubj@)}(hjCh]h*}(hjhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjhubj)}(hldatah]hldata}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjdubah}(h]h ]h"]h$]h&]hhuh1jhj+hhhj=hM/ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj'hhhj=hM/ubah}(h]j"ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj=hM/hj$hhubj)}(hhh]h)}(h#add operation to move back a columnh]h#add operation to move back a 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&]uh1jhj$hhhj=hM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1jhhhj0hNhNubj)}(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)}(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.hj ubj)}(hhh]j)}(h(``struct n_tty_data *ldata`` n_tty data h](j)}(h``struct n_tty_data *ldata``h]j)}(hj0h]hstruct n_tty_data *ldata}(hj2hhhNhNubah}(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 n_tty datah]h n_tty data}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEhM+hjFubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhjEhM+hj'ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjkh]h Description}(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.chM-hj ubh)}(h` 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.chMdhj#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.chMahj#ubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hMahj$ubah}(h]h ]h"]h$]h&]uh1jhj#ubeh}(h]h ]h"]h$]h&]uh1jhj$hMahj#ubj)}(h,``struct n_tty_data *ldata`` line disc data h](j)}(h``struct n_tty_data *ldata``h]j)}(hj:$h]hstruct n_tty_data *ldata}(hj<$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8$ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMbhj4$ubj)}(hhh]h)}(hline disc datah]hline disc data}(hjS$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO$hMbhjP$ubah}(h]h ]h"]h$]h&]uh1jhj4$ubeh}(h]h ]h"]h$]h&]uh1jhjO$hMbhj#ubeh}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h**Description**h]j)}(hju$h]h Description}(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.chMdhj#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 ](jEjc-typeeh"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]refdocjR refdomainjreftypetype refexplicitrefwarnj#j&)}j)]sbjX tty_driveruh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMdhj$ubh path.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj$hMdhj#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.chMghj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jecho_char (C function) c.echo_charhNtauh1jvhj0hhhNhNubj)}(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.chM~ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$hhhj$hM~ubj)}(h echo_charh]j)}(h echo_charh]h echo_char}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj %ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj$hhhj$hM~ubj)}(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&] refdomainjreftypej reftargetj1%modnameN classnameNj#j&)}j)]j,)}jj%sb c.echo_charasbuh1hhj(%ubj)}(h h]h }(hjO%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(%ubj)}(hjh]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}(hju%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubj)}(hjh]hstruct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNj#j&)}j)]jK% c.echo_charasbuh1hhjq%ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubj@)}(hjCh]h*}(hj%hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjq%ubj)}(httyh]htty}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjq%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj$%ubeh}(h]h ]h"]h$]h&]hhuh1jhj$hhhj$hM~ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj$hhhj$hM~ubah}(h]j$ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj$hM~hj$hhubj)}(hhh]h)}(hecho a characterh]hecho a character}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMthj&hhubah}(h]h ]h"]h$]h&]uh1jhj$hhhj$hM~ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)&jj)&jjjuh1jhhhj0hNhNubj)}(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)}(hj3&h]h Parameters}(hj5&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1&ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMxhj-&ubj)}(hhh](j)}(h``u8 c`` unicode byte to echo h](j)}(h``u8 c``h]j)}(hjR&h]hu8 c}(hjT&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP&ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMuhjL&ubj)}(hhh]h)}(hunicode byte to echoh]hunicode byte to echo}(hjk&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg&hMuhjh&ubah}(h]h ]h"]h$]h&]uh1jhjL&ubeh}(h]h ]h"]h$]h&]uh1jhjg&hMuhjI&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.chMvhj&ubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMvhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hMvhjI&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.chMxhj-&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 ](jEjc-typeeh"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]refdocjR refdomainjreftypetype refexplicitrefwarnj#j$jX tty_driveruh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMxhj&ubh path.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hMxhj-&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).}(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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jfinish_erasing (C function)c.finish_erasinghNtauh1jvhj0hhhNhNubj)}(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}(hj='hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjL'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9'hhhjK'hMubj)}(hfinish_erasingh]j)}(hfinish_erasingh]hfinish_erasing}(hj^'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZ'ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj9'hhhjK'hMubj)}(h(struct n_tty_data *ldata)h]j)}(hstruct n_tty_data *ldatah](j)}(hjh]hstruct}(hjz'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv'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&] refdomainjreftypej reftargetj'modnameN classnameNj#j&)}j)]j,)}jj`'sbc.finish_erasingasbuh1hhjv'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv'ubj@)}(hjCh]h*}(hj'hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjv'ubj)}(hldatah]hldata}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjr'ubah}(h]h ]h"]h$]h&]hhuh1jhj9'hhhjK'hMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj5'hhhjK'hMubah}(h]j0'ah ](jwjxeh"]h$]h&]j|j})j~huh1jhjK'hMhj2'hhubj)}(hhh]h)}(hcomplete eraseh]hcomplete erase}(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&]uh1jhj2'hhhjK'hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj(jj(jjjuh1jhhhj0hNhNubj)}(h9**Parameters** ``struct n_tty_data *ldata`` n_tty datah](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 n_tty_data *ldata`` n_tty datah](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.chMhj8(ubj)}(hhh]h)}(h n_tty datah]h n_tty data}(hjW(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjT(ubah}(h]h ]h"]h$]h&]uh1jhj8(ubeh}(h]h ]h"]h$]h&]uh1jhjS(hMhj5(ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jeraser (C function)c.eraserhNtauh1jvhj0hhhNhNubj)}(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&] refdomainjreftypej reftargetj(modnameN classnameNj#j&)}j)]j,)}jj(sbc.eraserasbuh1hhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]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}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj+)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(hjh]hstruct}(hj9)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hjF)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjW)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjY)modnameN classnameNj#j&)}j)]j(c.eraserasbuh1hhj)ubj)}(h h]h }(hju)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj@)}(hjCh]h*}(hj)hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj)ubj)}(httyh]htty}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj(ubeh}(h]h ]h"]h$]h&]hhuh1jhj(hhhj(hMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj(hhhj(hMubah}(h]j(ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj(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 ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1jhhhj0hNhNubj)}(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)}(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.chMhj)ubj)}(hhh]h)}(hcharacter inputh]hcharacter input}(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)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hj4*h]hconst struct tty_struct *tty}(hj6*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2*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)}(hterminal deviceh]hterminal device}(hjM*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI*hMhjJ*ubah}(h]h ]h"]h$]h&]uh1jhj.*ubeh}(h]h ]h"]h$]h&]uh1jhjI*hMhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)ubh)}(h**Description**h]j)}(hjo*h]h Description}(hjq*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm*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&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jisig (C function)c.isighNtauh1jvhj0hhhNhNubj)}(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}(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.chM2ubj)}(h h]h }(hj +hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhhj +hM2ubj)}(hisigh]j)}(hisigh]hisig}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj +hM2ubj)}(h!(int sig, struct tty_struct *tty)h](j)}(hint sigh](j)}(hinth]hint}(hj9+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5+ubj)}(h h]h }(hjG+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5+ubj)}(hsigh]hsig}(hjU+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj1+ubj)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjn+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj+ubj)}(h h]h }(hj{+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj+ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+modnameN classnameNj#j&)}j)]j,)}jj+sbc.isigasbuh1hhjj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj+ubj@)}(hjCh]h*}(hj+hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjj+ubj)}(httyh]htty}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj1+ubeh}(h]h ]h"]h$]h&]hhuh1jhj*hhhj +hM2ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj*hhhj +hM2ubah}(h]j*ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj +hM2hj*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.chM%hj+hhubah}(h]h ]h"]h$]h&]uh1jhj*hhhj +hM2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj ,jj ,jjjuh1jhhhj0hNhNubj)}(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)}(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``int sig`` signal h](j)}(h ``int sig``h]j)}(hj2,h]hint sig}(hj4,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0,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)}(hsignalh]hsignal}(hjK,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjG,hM&hjH,ubah}(h]h ]h"]h$]h&]uh1jhj,,ubeh}(h]h ]h"]h$]h&]uh1jhjG,hM&hj),ubj)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j)}(hjk,h]hstruct tty_struct *tty}(hjm,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji,ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM'hje,ubj)}(hhh]h)}(hterminalh]hterminal}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hM'hj,ubah}(h]h ]h"]h$]h&]uh1jhje,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)}(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 ](jEjc-typeeh"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]refdocjR refdomainjreftypetype refexplicitrefwarnj#j$jX 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)hj ,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,hj ,ubh)}(hLocking: ``ctrl``.lockh](h Locking: }(hj,hhhNhNubj)}(h``ctrl``h]hctrl}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh.lock}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM0hj ,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](j n_tty_receive_break (C function)c.n_tty_receive_breakhNtauh1jvhj0hhhNhNubj)}(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}(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.chMaubj)}(h h]h }(hjM-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:-hhhjL-hMaubj)}(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&]hhuh1jhj:-hhhjL-hMaubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj{-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw-ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj-modnameN classnameNj#j&)}j)]j,)}jja-sbc.n_tty_receive_breakasbuh1hhjw-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw-ubj@)}(hjCh]h*}(hj-hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjw-ubj)}(httyh]htty}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw-ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjs-ubah}(h]h ]h"]h$]h&]hhuh1jhj:-hhhjL-hMaubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj6-hhhjL-hMaubah}(h]j1-ah ](jwjxeh"]h$]h&]j|j})j~huh1jhjL-hMahj3-hhubj)}(hhh]h)}(h handle breakh]h handle break}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMVhj-hhubah}(h]h ]h"]h$]h&]uh1jhj3-hhhjL-hMaubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1jhhhj0hNhNubj)}(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)}(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.chMZhj.ubj)}(hhh]j)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j)}(hj?.h]hstruct tty_struct *tty}(hjA.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.chMWhj9.ubj)}(hhh]h)}(hterminalh]hterminal}(hjX.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT.hMWhjU.ubah}(h]h ]h"]h$]h&]uh1jhj9.ubeh}(h]h ]h"]h$]h&]uh1jhjT.hMWhj6.ubah}(h]h ]h"]h$]h&]uh1jhj.ubh)}(h**Description**h]j)}(hjz.h]h Description}(hj|.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx.ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMYhj.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.chMYhj.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.chM]hj.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.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**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.chM_hj.ubh)}(hhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj=ubeh}(h]h ]h"]h$]h&]hhuh1jhj<hhhj<hMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj<hhhj<hMubah}(h]j<ah ](jwjxeh"]h$]h&]j|j})j~huh1jhj<hMhj<hhubj)}(hhh]h)}(htermios data changedh]htermios data changed}(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 ](jfunctioneh"]h$]h&]jjjjE>jjE>jjjuh1jhhhj0hNhNubj)}(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)}(hjO>h]h Parameters}(hjQ>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM>ubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjI>ubj)}(hhh](j)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j)}(hjn>h]hstruct tty_struct *tty}(hjp>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl>ubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjh>ubj)}(hhh]h)}(hterminalh]hterminal}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhjh>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhje>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>hMhje>ubeh}(h]h ]h"]h$]h&]uh1jhjI>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.chMhjI>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.chMhjI>ubh)}(h,Locking: Caller holds **tty->termios_rwsem**h](hLocking: Caller holds }(hj?hhhNhNubj)}(h**tty->termios_rwsem**h]htty->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.chMhjI>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](jn_tty_close (C function) c.n_tty_closehNtauh1jvhj0hhhNhNubj)}(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}(hjD?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 }(hjS?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@?hhhjR?hMSubj)}(h n_tty_closeh]j)}(h n_tty_closeh]h n_tty_close}(hje?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja?ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj@?hhhjR?hMSubj)}(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&] refdomainjreftypej reftargetj?modnameN classnameNj#j&)}j)]j,)}jjg?sb c.n_tty_closeasbuh1hhj}?ubj)}(h h]h }(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}?ubj@)}(hjCh]h*}(hj?hhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj}?ubj)}(httyh]htty}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}?ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjy?ubah}(h]h ]h"]h$]h&]hhuh1jhj@?hhhjR?hMSubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjChhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj Cubj@)}(hjCh]h*}(hjKChhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj Cubj)}(hkbph]hkbp}(hjXChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Cubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzBubj)}(h size_t *nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hjtChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjvCmodnameN classnameNj#j&)}j)]jBc.copy_from_read_bufasbuh1hhjmCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmCubj@)}(hjCh]h*}(hjChhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjmCubj)}(hnrh]hnr}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzBubeh}(h]h ]h"]h$]h&]hhuh1jhjBBhhhjSBhMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshj>BhhhjSBhMubah}(h]j9Bah ](jwjxeh"]h$]h&]j|j})j~huh1jhjSBhMhj;Bhhubj)}(hhh]h)}(hcopy read data directlyh]hcopy read data directly}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjChhubah}(h]h ]h"]h$]h&]uh1jhj;BhhhjSBhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjCjjCjjjuh1jhhhj0hNhNubj)}(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)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjCubj)}(hhh](j)}(h1``const struct tty_struct *tty`` terminal device h](j)}(h ``const struct tty_struct *tty``h]j)}(hjDh]hconst struct tty_struct *tty}(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)}(hterminal deviceh]hterminal device}(hj1DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-DhMhj.Dubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhj-DhMhjDubj)}(h``u8 **kbp`` data h](j)}(h ``u8 **kbp``h]j)}(hjQDh]hu8 **kbp}(hjSDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjODubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjKDubj)}(hhh]h)}(hdatah]hdata}(hjjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfDhMhjgDubah}(h]h ]h"]h$]h&]uh1jhjKDubeh}(h]h ]h"]h$]h&]uh1jhjfDhMhjDubj)}(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&]uh1jhjDhMhjDubeh}(h]h ]h"]h$]h&]uh1jhjCubh)}(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.chMhjCubh)}(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 }(hjDhhhNhNubj)}(h ``ICANON``h]hICANON}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubh: is off; it copies characters straight from the tty queue.}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhjCubj)}(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:}(hjEhhhNhNubah}(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)}(hhh](h)}(h0called under the **ldata->atomic_read_lock** semh]h)}(hjEh](hcalled under the }(hjEhhhNhNubj)}(h**ldata->atomic_read_lock**h]hldata->atomic_read_lock}(hj#EhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh sem}(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&]uh1hhjEubh)}(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:}(hjMEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEhMhjIEubj)}(hhh]h)}(hAcaller holds non-exclusive ``termios_rwsem``; read_tail publishedh](hcaller holds non-exclusive }(hj^EhhhNhNubj)}(h``termios_rwsem``h]h termios_rwsem}(hjfEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Eubh; read_tail published}(hj^EhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMhj[Eubah}(h]h ]h"]h$]h&]uh1jhjIEubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjFEubah}(h]h ]h"]h$]h&]uh1jhjBEubah}(h]h ]h"]h$]h&]uh1hhjEubeh}(h]h ]h"]h$]h&]jtjCuh1hhj;EhMhjEubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjEhMhjDubah}(h]h ]h"]h$]h&]uh1jhjCubh)}(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.chMhjCubh)}(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.chMhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubjw)}(hhh]h}(h]h ]h"]h$]h&]entries](j%canon_copy_from_read_buf (C function)c.canon_copy_from_read_bufhNtauh1jvhj0hhhNhNubj)}(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)}(hjB3h]hbool}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chMubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjEhhhjFhMubj)}(hcanon_copy_from_read_bufh]j)}(hcanon_copy_from_read_bufh]hcanon_copy_from_read_buf}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubah}(h]h ](jjeh"]h$]h&]hhuh1jhjEhhhjFhMubj)}(h4(const struct tty_struct *tty, u8 **kbp, size_t *nr)h](j)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hj2FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubj)}(h h]h }(hj?FhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubj)}(hjh]hstruct}(hjMFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubj)}(h h]h }(hjZFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjkFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhFubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmFmodnameN classnameNj#j&)}j)]j,)}jjFsbc.canon_copy_from_read_bufasbuh1hhj.Fubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubj@)}(hjCh]h*}(hjFhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj.Fubj)}(httyh]htty}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.Fubeh}(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&] refdomainjreftypej reftargetjFmodnameN classnameNj#j&)}j)]jFc.canon_copy_from_read_bufasbuh1hhjFubj)}(h h]h }(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj@)}(hjCh]h*}(hjFhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjFubj@)}(hjCh]h*}(hjFhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjFubj)}(hkbph]hkbp}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*Fubj)}(h size_t *nrh](h)}(hhh]j)}(hsize_th]hsize_t}(hj$GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!Gubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&GmodnameN classnameNj#j&)}j)]jFc.canon_copy_from_read_bufasbuh1hhjGubj)}(h h]h }(hjBGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj@)}(hjCh]h*}(hjPGhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hjGubj)}(hnrh]hnr}(hj]GhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj*Fubeh}(h]h ]h"]h$]h&]hhuh1jhjEhhhjFhMubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjEhhhjFhMubah}(h]jEah ](jwjxeh"]h$]h&]j|j})j~huh1jhjFhMhjEhhubj)}(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&]uh1jhjEhhhjFhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjGjjGjjjuh1jhhhj0hNhNubj)}(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. Locking: * called under the ``atomic_read_lock`` mutex * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published **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.h](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}(hjGhhhNhNubah}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjGhMhjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjGhMhjGubj)}(h``u8 **kbp`` data h](j)}(h ``u8 **kbp``h]j)}(hjHh]hu8 **kbp}(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)}(hdatah]hdata}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhMhjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMhjGubj)}(h``size_t *nr`` size of data h](j)}(h``size_t *nr``h]j)}(hj:Hh]h size_t *nr}(hjsignal->tty check is safe * ctrl.lock to safely reference **tty->ctrl.pgrp**h](h)}(h**Parameters**h]j)}(hj Kh]h Parameters}(hj KhhhNhNubah}(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,hjKubj)}(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.chM)hj#Kubj)}(hhh]h)}(httyh]htty}(hjBKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>KhM)hj?Kubah}(h]h ]h"]h$]h&]uh1jhj#Kubeh}(h]h ]h"]h$]h&]uh1jhj>KhM)hj Kubj)}(h"``struct file *file`` file handle h](j)}(h``struct file *file``h]j)}(hjbKh]hstruct file *file}(hjdKhhhNhNubah}(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.chM*hj\Kubj)}(hhh]h)}(h file handleh]h file handle}(hj{KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjwKhM*hjxKubah}(h]h ]h"]h$]h&]uh1jhj\Kubeh}(h]h ]h"]h$]h&]uh1jhjwKhM*hj Kubeh}(h]h ]h"]h$]h&]uh1jhjKubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM,hjKubh)}(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}(hjKhhhNhNubah}(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,hjKubj)}(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:}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM2hjKubj)}(hhh]h)}(hhh](h)}(hredirected write test is safeh]h)}(hjLh]hredirected write test is safe}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM1hjLubah}(h]h ]h"]h$]h&]uh1hhjKubh)}(h"current->signal->tty check is safeh]h)}(hjLh]h"current->signal->tty check is safe}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM2hjLubah}(h]h ]h"]h$]h&]uh1hhjKubh)}(h0ctrl.lock to safely reference **tty->ctrl.pgrp**h]h)}(hj3Lh](hctrl.lock to safely reference }(hj5LhhhNhNubj)}(h**tty->ctrl.pgrp**h]htty->ctrl.pgrp}(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj;Vubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@VmodnameN classnameNj#j&)}j)]j(U c.n_tty_pollasbuh1hhj7Vubj)}(h h]h }(hj\VhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Vubj@)}(hjCh]h*}(hjjVhhhNhNubah}(h]h ]jLah"]h$]h&]uh1j?hj7Vubj)}(hwaith]hwait}(hjwVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Vubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjSUubeh}(h]h ]h"]h$]h&]hhuh1jhjUhhhj-UhM ubeh}(h]h ]h"]h$]h&]hhjquh1jjrjshjUhhhj-UhM ubah}(h]jTah ](jwjxeh"]h$]h&]j|j})j~huh1jhj-UhM hjThhubj)}(hhh]h)}(hpoll method for N_TTYh]hpoll method for N_TTY}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVhhubah}(h]h ]h"]h$]h&]uh1jhjThhhj-UhM ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVjjVjjjuh1jhhhj0hNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` terminal device ``struct file *file`` file accessing it ``poll_table *wait`` poll table **Description** Called when the line discipline is asked to poll() for data or for special events. This code is not serialized with respect to other events save open/close. This code must be sure never to sleep through a hangup. Locking: called without the kernel lock held -- fine.h](h)}(h**Parameters**h]j)}(hjVh]h Parameters}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubj)}(hhh](j)}(h+``struct tty_struct *tty`` terminal device h](j)}(h``struct tty_struct *tty``h]j)}(hjVh]hstruct tty_struct *tty}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubj)}(hhh]h)}(hterminal deviceh]hterminal device}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM hjVubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhjVhM hjVubj)}(h(``struct file *file`` file accessing it h](j)}(h``struct file *file``h]j)}(hjWh]hstruct file *file}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjWubj)}(hhh]h)}(hfile accessing ith]hfile accessing it}(hj4WhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0WhM hj1Wubah}(h]h ]h"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]u/h1jhj0WhM hjVubj)}(h ``poll_table *wait`` poll table h](j)}(h``poll_table *wait``h]j)}(hjTWh]hpoll_table *wait}(hjVWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRWubah}(h]h ]h"]h$]h&]uh1jhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjNWubj)}(hhh]h)}(h poll tableh]h poll table}(hjmWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiWhM hjjWubah}(h]h ]h"]h$]h&]uh1jhjNWubeh}(h]h ]h"]h$]h&]uh1jhjiWhM hjVubeh}(h]h ]h"]h$]h&]uh1jhjVubh)}(h**Description**h]j)}(hjWh]h Description}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubh)}(hCalled when the line discipline is asked to poll() for data or for special events. This code is not serialized with respect to other events save open/close.h]hCalled when the line discipline is asked to poll() for data or for special events. This code is not serialized with respect to other events save open/close.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubh)}(h7This code must be sure never to sleep through a hangup.h]h7This code must be sure never to sleep through a hangup.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubh)}(h5Locking: called without the kernel lock held -- fine.h]h5Locking: called without the kernel lock held -- fine.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.chM hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj0hhhNhNubeh}(h]jah ]h"]internal functionsah$]h&]uh1hhhhhhhhKubeh}(h]n-ttyah ]h"]n_ttyah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj Xerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jWjWj*j%j-hjWju nametypes}(jWj*j-jWuh}(jWhj%hhjdjjjj0jMjRjjjj j j j j jz j jjjjjjj!j&j?jDj!j&j"j'jjj$ j) j"j"j$j$j0'j5'j(j(j*j*j1-j6-j$/j)/j0j0j33j83j5j5j8j"8j<j<j7?jBjEjEjIjIjLjLj:Qj?QjTjUhhj ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jXKsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.