€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/driver-api/tty/n_tty”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒB/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒN_TTY”h]”hŒN_TTY”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒtopic”“”)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hhh]”hŒ paragraph”“”)�”}”(hhh]”hŒ reference”“”)�”}”(hhh]”hŒExternal Functions”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œexternal-functions”uh1hñhhîubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhhéubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒInternal Functions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œinternal-functions”uh1hñhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâhhßh²hh³Nh´Nubah}”(h]”Œcontents”ah ]”(Œcontents”Œlocal”eh"]”Œcontents”ah$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhí)�”}”(hŒnThe default (and fallback) :doc:`TTY line discipline `. It tries to handle characters as per POSIX.”h]”(hŒThe default (and fallback) ”…”�”}”(hjAh²hh³Nh´Nubh)�”}”(hŒ&:doc:`TTY line discipline `”h]”hŒinline”“”)�”}”(hjKh]”hŒTTY line discipline”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jMhjIubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/tty/n_tty”Œ refdomain”jZŒreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ tty_ldisc”uh1hh³hÇh´K hjAubhŒ-. It tries to handle characters as per POSIX.”…”�”}”(hjAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒExternal Functions”h]”hŒExternal Functions”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”hüuh1hÍhjxh²hh³hÇh´K ubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œn_tty_inherit_ops (C function)”Œc.n_tty_inherit_ops”hNt”auh1jŠhjxh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ2void n_tty_inherit_ops (struct tty_ldisc_ops *ops)”h]”hŒdesc_signature_line”“”)�”}”(hŒ1void n_tty_inherit_ops(struct tty_ldisc_ops *ops)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j¬hj¨h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´M× ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j¾hj¨h²hh³j½h´M× ubhŒ desc_name”“”)�”}”(hŒn_tty_inherit_ops”h]”hŒ desc_sig_name”“”)�”}”(hŒn_tty_inherit_ops”h]”hŒn_tty_inherit_ops”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jÕhjÑubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jÏhj¨h²hh³j½h´M× ubhŒdesc_parameterlist”“”)�”}”(hŒ(struct tty_ldisc_ops *ops)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct tty_ldisc_ops *ops”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1júhjöubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjöubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_ldisc_ops”h]”hŒ tty_ldisc_ops”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j8Œ ASTIdentifier”“”)�”}”j3jÙsbŒc.n_tty_inherit_ops”†”asbuh1hhjöubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjöubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jShjöubjÖ)�”}”(hŒops”h]”hŒops”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjðubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj¨h²hh³j½h´M× ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j¦Œsphinx_line_type”Œ declarator”hj¢h²hh³j½h´M× ubah}”(h]”j™ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j h³j½h´M× hj�h²hubhŒ desc_content”“”)�”}”(hhh]”hí)�”}”(hŒinherit N_TTY methods”h]”hŒinherit N_TTY methods”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´M× hj•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj�h²hh³j½h´M× ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”Œdomain”j1Œobjtype”j°Œdesctype”j°Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j›h²hhjxh³Nh´NubhŒ container”“”)�”}”(hŒ¸**Parameters** ``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods **Description** Enables a 'subclass' line discipline to 'inherit' N_TTY methods.”h]”(hí)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjÂh]”hŒ Parameters”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´MÛ hj¼ubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒO``struct tty_ldisc_ops *ops`` struct tty_ldisc_ops where to save N_TTY methods ”h]”(hŒterm”“”)�”}”(hŒ``struct tty_ldisc_ops *ops``”h]”hŒliteral”“”)�”}”(hjéh]”hŒstruct tty_ldisc_ops *ops”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´MØ hjáubhŒ definition”“”)�”}”(hhh]”hí)�”}”(hŒ0struct tty_ldisc_ops where to save N_TTY methods”h]”hŒ0struct tty_ldisc_ops where to save N_TTY methods”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jh´MØ hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jh´MØ hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj¼ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj(h]”hŒ Description”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´MÚ hj¼ubhŒ block_quote”“”)�”}”(hŒ@Enables a 'subclass' line discipline to 'inherit' N_TTY methods.”h]”hí)�”}”(hjBh]”hŒHEnables a ‘subclass’ line discipline to ‘inherit’ N_TTY methods.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:15: ./drivers/tty/n_tty.c”h´MÙ hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j>h³jQh´MÙ hj¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjxh²hh³Nh´Nubeh}”(h]”jah ]”h"]”Œexternal functions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒInternal Functions”h]”hŒInternal Functions”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‰juh1hÍhjfh²hh³hÇh´Kubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_kick_worker (C function)”Œc.n_tty_kick_worker”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ5void n_tty_kick_worker (const struct tty_struct *tty)”h]”j§)�”}”(hŒ4void n_tty_kick_worker(const struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjŒh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K·ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjŒh²hh³jžh´K·ubjÐ)�”}”(hŒn_tty_kick_worker”h]”jÖ)�”}”(hŒn_tty_kick_worker”h]”hŒn_tty_kick_worker”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj­ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjŒh²hh³jžh´K·ubjï)�”}”(hŒ(const struct tty_struct *tty)”h]”jõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjÉubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÉubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjÉubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÉubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j³sbŒc.n_tty_kick_worker”†”asbuh1hhjÉubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÉubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÉubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjÅubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjŒh²hh³jžh´K·ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjˆh²hh³jžh´K·ubah}”(h]”jƒah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jžh´K·hj…h²hubj”)�”}”(hhh]”hí)�”}”(hŒ start input worker (if required)”h]”hŒ start input worker (if required)”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K·hjih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj…h²hh³jžh´K·ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj„j¶j„j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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Å)�”}”(hjŽh]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K»hjˆubjÛ)�”}”(hhh]”jà)�”}”(hŒ*``const struct tty_struct *tty`` terminal ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hj­h]”hŒconst struct tty_struct *tty”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K¸hj§ubj)�”}”(hhh]”hí)�”}”(hŒterminal”h]”hŒterminal”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÂh´K¸hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÂh´K¸hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjˆubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjèh]”hŒ Description”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Kºhjˆubhí)�”}”(hŒ9Re-schedules the flip buffer work if it may have stopped.”h]”hŒ9Re-schedules the flip buffer work if it may have stopped.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K¹hjˆubjÛ)�”}”(hhh]”jà)�”}”(hŒLocking: * Caller holds exclusive ``termios_rwsem``, or * n_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K½hjubj)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ,Caller holds exclusive ``termios_rwsem``, or”h]”hí)�”}”(hj+h]”(hŒCaller holds exclusive ”…”�”}”(hj-h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj-ubhŒ, or”…”�”}”(hj-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K¼hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj&ubhè)�”}”(hŒCn_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``”h]”jÛ)�”}”(hhh]”jà)�”}”(hŒAn_tty_read()/consumer path: holds non-exclusive ``termios_rwsem``”h]”(jæ)�”}”(hŒn_tty_read()/consumer path:”h]”hŒn_tty_read()/consumer path:”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³j"h´K½hjZubj)�”}”(hhh]”hí)�”}”(hŒ%holds non-exclusive ``termios_rwsem``”h]”(hŒholds non-exclusive ”…”�”}”(hjoh²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´K¾hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j"h´K½hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”jWuh1hâh³jLh´K¼hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j"h´K½hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_write_wakeup (C function)”Œc.n_tty_write_wakeup”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ0void n_tty_write_wakeup (struct tty_struct *tty)”h]”j§)�”}”(hŒ/void n_tty_write_wakeup(struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjÙh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´KÞubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÙh²hh³jëh´KÞubjÐ)�”}”(hŒn_tty_write_wakeup”h]”jÖ)�”}”(hŒn_tty_write_wakeup”h]”hŒn_tty_write_wakeup”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjúubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjÙh²hh³jëh´KÞubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j:Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jsbŒc.n_tty_write_wakeup”†”asbuh1hhjubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjÙh²hh³jëh´KÞubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjÕh²hh³jëh´KÞubah}”(h]”jÐah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jëh´KÞhjÒh²hubj”)�”}”(hhh]”hí)�”}”(hŒasynchronous I/O notifier”h]”hŒasynchronous I/O notifier”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´KÞhjšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÒh²hh³jëh´KÞubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjµj¶jµj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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Å)�”}”(hj¿h]”hŒ Parameters”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Kâhj¹ubjÛ)�”}”(hhh]”jà)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hjÞh]”hŒstruct tty_struct *tty”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´KßhjØubj)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jóh´Kßhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jóh´KßhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj¹ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Káhj¹ubhí)�”}”(hŒ…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Œ…Required for the ptys, serial driver etc. since processes that attach themselves to the master and rely on ASYNC IO must be woken up.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Kàhj¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œput_tty_queue (C function)”Œc.put_tty_queue”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ3void put_tty_queue (u8 c, struct n_tty_data *ldata)”h]”j§)�”}”(hŒ2void put_tty_queue(u8 c, struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjZh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjZh²hh³jlh´MubjÐ)�”}”(hŒ put_tty_queue”h]”jÖ)�”}”(hŒ put_tty_queue”h]”hŒ put_tty_queue”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj{ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjZh²hh³jlh´Mubjï)�”}”(hŒ (u8 c, struct n_tty_data *ldata)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j�sbŒc.put_tty_queue”†”asbuh1hhj—ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj—ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj“ubjõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjàubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjàubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jŒmodname”NŒ classname”Nj7j:)�”}”j=]”jºŒc.put_tty_queue”†”asbuh1hhjàubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjàubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjàubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj“ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjZh²hh³jlh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjVh²hh³jlh´Mubah}”(h]”jQah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jlh´MhjSh²hubj”)�”}”(hhh]”hí)�”}”(hŒadd character to tty”h]”hŒadd character to tty”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhjbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjSh²hh³jlh´Mubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj}j¶j}j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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Å)�”}”(hj‡h]”hŒ Parameters”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M!hj�ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` character ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hj¦h]”hŒu8 c”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj ubj)�”}”(hhh]”hí)�”}”(hŒ character”h]”hŒ character”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j»h´Mhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j»h´Mhj�ubjà)�”}”(hŒ(``struct n_tty_data *ldata`` n_tty data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjßh]”hŒstruct n_tty_data *ldata”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MhjÙubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jôh´Mhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jôh´Mhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj�ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M!hj�ubhí)�”}”(hŒ*Add a character to the tty read_buf queue.”h]”hŒ*Add a character to the tty read_buf queue.”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj�ubjÛ)�”}”(hhh]”jà)�”}”(hŒ^Locking: * n_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M#hjB ubj)�”}”(hhh]”hã)�”}”(hhh]”hè)�”}”(hŒQn_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``”h]”jÛ)�”}”(hhh]”jà)�”}”(hŒOn_tty_receive_buf()/producer path: caller holds non-exclusive ``termios_rwsem``”h]”(jæ)�”}”(hŒ"n_tty_receive_buf()/producer path:”h]”hŒ"n_tty_receive_buf()/producer path:”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³jT h´M#hjb ubj)�”}”(hhh]”hí)�”}”(hŒ,caller holds non-exclusive ``termios_rwsem``”h]”(hŒcaller holds non-exclusive ”…”�”}”(hjw h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjw ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M$hjt ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jT h´M#hj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjX ubah}”(h]”h ]”h"]”h$]”h&]”jªjWuh1hâh³jT h´M#hjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jT h´M#hj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œreset_buffer_flags (C function)”Œc.reset_buffer_flags”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ2void reset_buffer_flags (struct n_tty_data *ldata)”h]”j§)�”}”(hŒ1void reset_buffer_flags(struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjà h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M.ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjà h²hh³jò h´M.ubjÐ)�”}”(hŒreset_buffer_flags”h]”jÖ)�”}”(hŒreset_buffer_flags”h]”hŒreset_buffer_flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjà h²hh³jò h´M.ubjï)�”}”(hŒ(struct n_tty_data *ldata)”h]”jõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj ubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj< ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jA Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j sbŒc.reset_buffer_flags”†”asbuh1hhj ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjà h²hh³jò h´M.ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjÜ h²hh³jò h´M.ubah}”(h]”j× ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jò h´M.hjÙ h²hubj”)�”}”(hhh]”hí)�”}”(hŒreset buffer state”h]”hŒreset buffer state”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M.hj¡ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÙ h²hh³jò h´M.ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj¼ j¶j¼ j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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È h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÄ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M2hjÀ ubjÛ)�”}”(hhh]”jà)�”}”(hŒ5``struct n_tty_data *ldata`` line disc data to reset ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjå h]”hŒstruct n_tty_data *ldata”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M/hjß ubj)�”}”(hhh]”hí)�”}”(hŒline disc data to reset”h]”hŒline disc data to reset”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jú h´M/hjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jú h´M/hjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÀ ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj h]”hŒ Description”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M1hjÀ ubhí)�”}”(hŒfReset the read buffer counters and clear the flags. Called from n_tty_open() and n_tty_flush_buffer().”h]”hŒfReset the read buffer counters and clear the flags. Called from n_tty_open() and n_tty_flush_buffer().”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M0hjÀ ubjÛ)�”}”(hhh]”jà)�”}”(hŒSLocking: * caller holds exclusive ``termios_rwsem``, or * (locking is not required)”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M4hjH ubj)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ,caller holds exclusive ``termios_rwsem``, or”h]”hí)�”}”(hjc h]”(hŒcaller holds exclusive ”…”�”}”(hje h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhje ubhŒ, or”…”�”}”(hje h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jZ h´M4hja ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj^ ubhè)�”}”(hŒ(locking is not required)”h]”hí)�”}”(hjŒ h]”hŒ(locking is not required)”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M5hjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj^ ubeh}”(h]”h ]”h"]”h$]”h&]”jªjWuh1hâh³jZ h´M4hj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jZ h´M4hjE ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÀ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_flush_buffer (C function)”Œc.n_tty_flush_buffer”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ0void n_tty_flush_buffer (struct tty_struct *tty)”h]”j§)�”}”(hŒ/void n_tty_flush_buffer(struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjÖ h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MOubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÖ h²hh³jè h´MOubjÐ)�”}”(hŒn_tty_flush_buffer”h]”jÖ)�”}”(hŒn_tty_flush_buffer”h]”hŒn_tty_flush_buffer”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj÷ ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjÖ h²hh³jè h´MOubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj2 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j7 Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jý sbŒc.n_tty_flush_buffer”†”asbuh1hhj ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjÖ h²hh³jè h´MOubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjÒ h²hh³jè h´MOubah}”(h]”jÍ ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jè h´MOhjÏ h²hubj”)�”}”(hhh]”hí)�”}”(hŒclean input queue”h]”hŒclean input queue”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MOhj— h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÏ h²hh³jè h´MOubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj² j¶j² j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjº ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MShj¶ ubjÛ)�”}”(hhh]”jà)�”}”(hŒ+``struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hjÛ h]”hŒstruct tty_struct *tty”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MPhjÕ ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jð h´MPhjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jð h´MPhjÒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj¶ ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MRhj¶ ubhí)�”}”(hŒÅ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).”h]”(hŒfFlush the input buffer. Called when the tty layer wants the buffer flushed (eg at hangup) or when the ”…”�”}”(hj, h²hh³Nh´Nubjì)�”}”(hŒ ``N_TTY``”h]”hŒN_TTY”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj, ubhŒV line discipline internally has to clean the pending queue (for example some signals).”…”�”}”(hj, h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MQhj¶ ubhí)�”}”(hŒTHolds ``termios_rwsem`` to exclude producer/consumer while buffer indices are reset.”h]”(hŒHolds ”…”�”}”(hjM h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjM ubhŒ= to exclude producer/consumer while buffer indices are reset.”…”�”}”(hjM h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MUhj¶ ubhí)�”}”(hŒ3Locking: ``ctrl``.lock, exclusive ``termios_rwsem``”h]”(hŒ Locking: ”…”�”}”(hjn h²hh³Nh´Nubjì)�”}”(hŒ``ctrl``”h]”hŒctrl”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjn ubhŒ.lock, exclusive ”…”�”}”(hjn h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjn ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MXhj¶ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œ!is_utf8_continuation (C function)”Œc.is_utf8_continuation”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒint is_utf8_continuation (u8 c)”h]”j§)�”}”(hŒint is_utf8_continuation(u8 c)”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj¹ h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mfubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¹ h²hh³jË h´MfubjÐ)�”}”(hŒis_utf8_continuation”h]”jÖ)�”}”(hŒis_utf8_continuation”h]”hŒis_utf8_continuation”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÚ ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj¹ h²hh³jË h´Mfubjï)�”}”(hŒ(u8 c)”h]”jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjú ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÿ Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jà sbŒc.is_utf8_continuation”†”asbuh1hhjö ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjö ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjö ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjò ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj¹ h²hh³jË h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjµ h²hh³jË h´Mfubah}”(h]”j° ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jË h´Mfhj² h²hubj”)�”}”(hhh]”hí)�”}”(hŒutf8 multibyte check”h]”hŒutf8 multibyte check”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MfhjQh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj² h²hh³jË h´Mfubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjlj¶jlj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hŒÑ**Parameters** ``u8 c`` byte to check **Return** true if the utf8 character **c** is a multibyte continuation character. We use this to correctly compute the on-screen size of the character when printing.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjvh]”hŒ Parameters”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MjhjpubjÛ)�”}”(hhh]”jà)�”}”(hŒ``u8 c`` byte to check ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hj•h]”hŒu8 c”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mghj�ubj)�”}”(hhh]”hí)�”}”(hŒ byte to check”h]”hŒ byte to check”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jªh´Mghj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jªh´MghjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjpubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hjÐh]”hŒReturn”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mihjpubhí)�”}”(hŒ›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Œtrue if the utf8 character ”…”�”}”(hjæh²hh³Nh´NubjÅ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjæubhŒ{ is a multibyte continuation character. We use this to correctly compute the on-screen size of the character when printing.”…”�”}”(hjæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mihjpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œis_continuation (C function)”Œc.is_continuation”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ8int is_continuation (u8 c, const struct tty_struct *tty)”h]”j§)�”}”(hŒ7int is_continuation(u8 c, const struct tty_struct *tty)”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj#h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Msubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj#h²hh³j5h´MsubjÐ)�”}”(hŒis_continuation”h]”jÖ)�”}”(hŒis_continuation”h]”hŒis_continuation”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjDubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj#h²hh³j5h´Msubjï)�”}”(hŒ$(u8 c, const struct tty_struct *tty)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jiŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jJsbŒc.is_continuation”†”asbuh1hhj`ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj`ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj\ubjõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj©ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj©ubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj©ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj©ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jèŒmodname”NŒ classname”Nj7j:)�”}”j=]”jƒŒc.is_continuation”†”asbuh1hhj©ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj©ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj©ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj\ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj#h²hh³j5h´Msubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjh²hh³j5h´Msubah}”(h]”jah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j5h´Mshjh²hubj”)�”}”(hhh]”hí)�”}”(hŒmultibyte check”h]”hŒmultibyte check”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MshjFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjh²hh³j5h´Msubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjaj¶jaj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hŒÕ**Parameters** ``u8 c`` byte to check ``const struct tty_struct *tty`` terminal device **Return** true if the utf8 character **c** is a multibyte continuation character and the terminal is in unicode mode.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjkh]”hŒ Parameters”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MwhjeubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` byte to check ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hjŠh]”hŒu8 c”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mthj„ubj)�”}”(hhh]”hí)�”}”(hŒ byte to check”h]”hŒ byte to check”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŸh´Mthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jŸh´Mthj�ubjà)�”}”(hŒ1``const struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hjÃh]”hŒconst struct tty_struct *tty”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Muhj½ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jØh´MuhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jØh´Muhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjeubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hjþh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mwhjeubhí)�”}”(hŒktrue if the utf8 character **c** is a multibyte continuation character and the terminal is in unicode mode.”h]”(hŒtrue if the utf8 character ”…”�”}”(hjh²hh³Nh´NubjÅ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjubhŒK is a multibyte continuation character and the terminal is in unicode mode.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mwhjeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œdo_output_char (C function)”Œc.do_output_char”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒubj)�”}”(hhh]”hí)�”}”(hŒ*space available in tty driver write buffer”h]”hŒ*space available in tty driver write buffer”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jYh´MƒhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jYh´MƒhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj­ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjh]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M…hj­ubhí)�”}”(hŒÃThis is a helper function that handles one output character (including special characters like TAB, CR, LF, etc.), doing OPOST processing and putting the results in the tty driver's write buffer.”h]”hŒÅThis is a helper function that handles one output character (including special characters like TAB, CR, LF, etc.), doing OPOST processing and putting the results in the tty driver’s write buffer.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M„hj­ubhí)�”}”(hŒžNote that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY and NLDLY. They simply aren't relevant in the world today. If you ever need them, add them here.”h]”hŒ Note that Linux currently ignores TABDLY, CRDLY, VTDLY, FFDLY and NLDLY. They simply aren’t relevant in the world today. If you ever need them, add them here.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mˆhj­ubhí)�”}”(hŒmLocking: should be called under the ``output_lock`` to protect the column state and space left in the buffer.”h]”(hŒ$Locking: should be called under the ”…”�”}”(hj³h²hh³Nh´Nubjì)�”}”(hŒ``output_lock``”h]”hŒ output_lock”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj³ubhŒ: to protect the column state and space left in the buffer.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj­ubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hjÖh]”hŒReturn”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj­ubhí)�”}”(hŒ@the number of bytes of buffer space used or -1 if no space left.”h]”hŒ@the number of bytes of buffer space used or -1 if no space left.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œprocess_output (C function)”Œc.process_output”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ1int process_output (u8 c, struct tty_struct *tty)”h]”j§)�”}”(hŒ0int process_output(u8 c, struct tty_struct *tty)”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÐubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjh²hh³j)h´MÐubjÐ)�”}”(hŒprocess_output”h]”jÖ)�”}”(hŒprocess_output”h]”hŒprocess_output”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj8ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjh²hh³j)h´MÐubjï)�”}”(hŒ(u8 c, struct tty_struct *tty)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j]Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j>sbŒc.process_output”†”asbuh1hhjTubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjTubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjPubjõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj�ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj�ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÁŒmodname”NŒ classname”Nj7j:)�”}”j=]”jwŒc.process_output”†”asbuh1hhj�ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj�ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjPubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjh²hh³j)h´MÐubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjh²hh³j)h´MÐubah}”(h]”jah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j)h´MÐhjh²hubj”)�”}”(hhh]”hí)�”}”(hŒoutput post processor”h]”hŒoutput post processor”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÐhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjh²hh³j)h´MÐubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj:j¶j:j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hXŠ**Parameters** ``u8 c`` character (or partial unicode symbol) ``struct tty_struct *tty`` terminal device **Description** Output one character with OPOST processing. Locking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock). **Return** -1 when the output device is full and the character must be retried.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjDh]”hŒ Parameters”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÔhj>ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ/``u8 c`` character (or partial unicode symbol) ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hjch]”hŒu8 c”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÑhj]ubj)�”}”(hhh]”hí)�”}”(hŒ%character (or partial unicode symbol)”h]”hŒ%character (or partial unicode symbol)”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jxh´MÑhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jxh´MÑhjZubjà)�”}”(hŒ+``struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hjœh]”hŒstruct tty_struct *tty”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÒhj–ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j±h´MÒhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j±h´MÒhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj>ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj×h]”hŒ Description”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÔhj>ubhí)�”}”(hŒ+Output one character with OPOST processing.”h]”hŒ+Output one character with OPOST processing.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÓhj>ubhí)�”}”(hŒ‰Locking: ``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: ”…”�”}”(hjüh²hh³Nh´Nubjì)�”}”(hŒ``output_lock``”h]”hŒ output_lock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjüubhŒq to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).”…”�”}”(hjüh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÖhj>ubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hjh]”hŒReturn”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÙhj>ubhí)�”}”(hŒD-1 when the output device is full and the character must be retried.”h]”hŒD-1 when the output device is full and the character must be retried.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÖhj>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œ!process_output_block (C function)”Œc.process_output_block”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒUssize_t process_output_block (struct tty_struct *tty, const u8 *buf, unsigned int nr)”h]”j§)�”}”(hŒTssize_t process_output_block(struct tty_struct *tty, const u8 *buf, unsigned int nr)”h]”(h)�”}”(hhh]”jÖ•)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jiŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œprocess_output_block”sbŒc.process_output_block”†”asbuh1hhj`h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Méubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj`h²hh³jˆh´MéubjÐ)�”}”(hŒprocess_output_block”h]”jÖ)�”}”(hj…h]”hŒprocess_output_block”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj—ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj`h²hh³jˆh´Méubjï)�”}”(hŒ8(struct tty_struct *tty, const u8 *buf, unsigned int nr)”h]”(jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj²ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj²ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÖŒmodname”NŒ classname”Nj7j:)�”}”j=]”jƒŒc.process_output_block”†”asbuh1hhj²ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj²ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj²ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj®ubjõ)�”}”(hŒ const u8 *buf”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj"ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj"ubh)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jFŒmodname”NŒ classname”Nj7j:)�”}”j=]”jƒŒc.process_output_block”†”asbuh1hhj"ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj"ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj"ubjÖ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj®ubjõ)�”}”(hŒunsigned int nr”h]”(j­)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj’ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj’ubj­)�”}”(hŒint”h]”hŒint”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj’ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj’ubjÖ)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj®ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj`h²hh³jˆh´Méubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj\h²hh³jˆh´Méubah}”(h]”jWah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jˆh´MéhjYh²hubj”)�”}”(hhh]”hí)�”}”(hŒblock post processor”h]”hŒblock post processor”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Méhjõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjYh²hh³jˆh´Méubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjj¶jj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX�**Parameters** ``struct tty_struct *tty`` terminal device ``const u8 *buf`` character buffer ``unsigned int nr`` number of bytes to output **Description** Output a block of characters with OPOST processing. This path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance. Locking: ``output_lock`` to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock). **Return** the number of characters output.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MíhjubjÛ)�”}”(hhh]”(jà)�”}”(hŒ+``struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj9h]”hŒstruct tty_struct *tty”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mêhj3ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jNh´MêhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jNh´Mêhj0ubjà)�”}”(hŒ#``const u8 *buf`` character buffer ”h]”(jæ)�”}”(hŒ``const u8 *buf``”h]”jì)�”}”(hjrh]”hŒ const u8 *buf”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mëhjlubj)�”}”(hhh]”hí)�”}”(hŒcharacter buffer”h]”hŒcharacter buffer”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‡h´Mëhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j‡h´Mëhj0ubjà)�”}”(hŒ.``unsigned int nr`` number of bytes to output ”h]”(jæ)�”}”(hŒ``unsigned int nr``”h]”jì)�”}”(hj«h]”hŒunsigned int nr”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mìhj¥ubj)�”}”(hhh]”hí)�”}”(hŒnumber of bytes to output”h]”hŒnumber of bytes to output”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÀh´MìhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÀh´Mìhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjæh]”hŒ Description”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mîhjubhí)�”}”(hŒ3Output a block of characters with OPOST processing.”h]”hŒ3Output a block of characters with OPOST processing.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Míhjubhí)�”}”(hŒúThis path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance.”h]”hŒúThis path is used to speed up block console writes, among other things when processing blocks of output data. It handles only the simple cases normally found and helps to generate blocks of symbols for the console driver and thus improve performance.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mïhjubhí)�”}”(hŒ‰Locking: ``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: ”…”�”}”(hjh²hh³Nh´Nubjì)�”}”(hŒ``output_lock``”h]”hŒ output_lock”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjubhŒq to protect column state and space left (also, this is called from n_tty_write() under the tty layer write lock).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mõhjubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hj=h]”hŒReturn”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Møhjubhí)�”}”(hŒ the number of characters output.”h]”hŒ the number of characters output.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mõhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œ__process_echoes (C function)”Œc.__process_echoes”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ0size_t __process_echoes (struct tty_struct *tty)”h]”j§)�”}”(hŒ/size_t __process_echoes(struct tty_struct *tty)”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j‡Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ__process_echoes”sbŒc.__process_echoes”†”asbuh1hhj~h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj~h²hh³j¦h´M�ubjÐ)�”}”(hŒ__process_echoes”h]”jÖ)�”}”(hj£h]”hŒ__process_echoes”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjµubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj~h²hh³j¦h´M�ubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjÐubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÐubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jôŒmodname”NŒ classname”Nj7j:)�”}”j=]”j¡Œc.__process_echoes”†”asbuh1hhjÐubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÐubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÐubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjÌubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj~h²hh³j¦h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjzh²hh³j¦h´M�ubah}”(h]”juah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j¦h´M�hjwh²hubj”)�”}”(hhh]”hí)�”}”(hŒwrite pending echo characters”h]”hŒwrite pending echo characters”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hjRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjwh²hh³j¦h´M�ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjmj¶jmj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX‡**Parameters** ``struct tty_struct *tty`` terminal device **Description** Write previously buffered echo (and other ldisc-generated) characters to the tty. Characters generated by the ldisc (including echoes) need to be buffered because the driver's write buffer can fill during heavy program output. Echoing straight to the driver will often fail under these conditions, causing lost characters and resulting mismatches of ldisc state information. Since the ldisc state must represent the characters actually sent to the driver at the time of the write, operations like certain changes in column state are also saved in the buffer and executed here. A circular fifo buffer is used so that the most recent characters are prioritized. Also, when control characters are echoed with a prefixed "^", the pair is treated atomically and thus not separated. Locking: callers must hold ``output_lock``.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjwh]”hŒ Parameters”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M“hjqubjÛ)�”}”(hhh]”jà)�”}”(hŒ+``struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj–h]”hŒstruct tty_struct *tty”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj�ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j«h´M�hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j«h´M�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjqubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjÑh]”hŒ Description”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M’hjqubhí)�”}”(hŒQWrite previously buffered echo (and other ldisc-generated) characters to the tty.”h]”hŒQWrite previously buffered echo (and other ldisc-generated) characters to the tty.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M‘hjqubhí)�”}”(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.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M”hjqubhí)�”}”(hŒÉ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.”h]”hŒÉ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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M™hjqubhí)�”}”(hŒÇ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.”h]”hŒË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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hjqubhí)�”}”(hŒ+Locking: callers must hold ``output_lock``.”h]”(hŒLocking: callers must hold ”…”�”}”(hj#h²hh³Nh´Nubjì)�”}”(hŒ``output_lock``”h]”hŒ output_lock”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj#ubhŒ.”…”�”}”(hj#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M¡hjqubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œadd_echo_byte (C function)”Œc.add_echo_byte”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ3void add_echo_byte (u8 c, struct n_tty_data *ldata)”h]”j§)�”}”(hŒ2void add_echo_byte(u8 c, struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj`h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj`h²hh³jrh´MubjÐ)�”}”(hŒ add_echo_byte”h]”jÖ)�”}”(hŒ add_echo_byte”h]”hŒ add_echo_byte”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj`h²hh³jrh´Mubjï)�”}”(hŒ (u8 c, struct n_tty_data *ldata)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j¦Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j‡sbŒc.add_echo_byte”†”asbuh1hhj�ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj�ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj™ubjõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjæubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjæubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j Œmodname”NŒ classname”Nj7j:)�”}”j=]”jÀŒc.add_echo_byte”†”asbuh1hhjæubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjæubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjæubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj™ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj`h²hh³jrh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj\h²hh³jrh´Mubah}”(h]”jWah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jrh´MhjYh²hubj”)�”}”(hhh]”hí)�”}”(hŒadd a byte to the echo buffer”h]”hŒadd a byte to the echo buffer”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhjhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjYh²hh³jrh´Mubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjƒj¶jƒj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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Å)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj‡ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` unicode byte to echo ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hj¬h]”hŒu8 c”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj¦ubj)�”}”(hhh]”hí)�”}”(hŒunicode byte to echo”h]”hŒunicode byte to echo”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÁh´MhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÁh´Mhj£ubjà)�”}”(hŒ(``struct n_tty_data *ldata`` n_tty data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjåh]”hŒstruct n_tty_data *ldata”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhjßubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³júh´Mhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³júh´Mhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj‡ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj h]”hŒ Description”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj‡ubhí)�”}”(hŒ5Add a character or operation byte to the echo buffer.”h]”hŒ5Add a character or operation byte to the echo buffer.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œecho_move_back_col (C function)”Œc.echo_move_back_col”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ2void echo_move_back_col (struct n_tty_data *ldata)”h]”j§)�”}”(hŒ1void echo_move_back_col(struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjah²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M#ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjah²hh³jsh´M#ubjÐ)�”}”(hŒecho_move_back_col”h]”jÖ)�”}”(hŒecho_move_back_col”h]”hŒecho_move_back_col”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj‚ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjah²hh³jsh´M#ubjï)�”}”(hŒ(struct n_tty_data *ldata)”h]”jõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjžubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjžubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÂŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jˆsbŒc.echo_move_back_col”†”asbuh1hhjžubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjžubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjžubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjšubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjah²hh³jsh´M#ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj]h²hh³jsh´M#ubah}”(h]”jXah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jsh´M#hjZh²hubj”)�”}”(hhh]”hí)�”}”(hŒ#add operation to move back a column”h]”hŒ#add operation to move back a column”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M#hj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjZh²hh³jsh´M#ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj=j¶j=j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hŒˆ**Parameters** ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to move back one column.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjGh]”hŒ Parameters”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M'hjAubjÛ)�”}”(hhh]”jà)�”}”(hŒ(``struct n_tty_data *ldata`` n_tty data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjfh]”hŒstruct n_tty_data *ldata”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M$hj`ubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j{h´M$hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j{h´M$hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjAubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj¡h]”hŒ Description”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M&hjAubhí)�”}”(hŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jCŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j sbŒc.echo_set_canon_col”†”asbuh1hhjubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjâh²hh³jôh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjÞh²hh³jôh´M/ubah}”(h]”jÙah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jôh´M/hjÛh²hubj”)�”}”(hhh]”hí)�”}”(hŒ%add operation to set the canon column”h]”hŒ%add operation to set the canon column”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M/hj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÛh²hh³jôh´M/ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj¾j¶j¾j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hŒž**Parameters** ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to set the canon column to the current column.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjÈh]”hŒ Parameters”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M3hjÂubjÛ)�”}”(hhh]”jà)�”}”(hŒ(``struct n_tty_data *ldata`` n_tty data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjçh]”hŒstruct n_tty_data *ldata”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M0hjáubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jüh´M0hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jüh´M0hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÂubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj" h]”hŒ Description”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M2hjÂubhí)�”}”(hŒRAdd an operation to the echo buffer to set the canon column to the current column.”h]”hŒRAdd an operation to the echo buffer to set the canon column to the current column.”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M1hjÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œecho_erase_tab (C function)”Œc.echo_erase_tab”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒUvoid echo_erase_tab (unsigned int num_chars, int after_tab, struct n_tty_data *ldata)”h]”j§)�”}”(hŒTvoid echo_erase_tab(unsigned int num_chars, int after_tab, struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjc h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M<ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjc h²hh³ju h´M<ubjÐ)�”}”(hŒecho_erase_tab”h]”jÖ)�”}”(hŒecho_erase_tab”h]”hŒecho_erase_tab”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj„ ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjc h²hh³ju h´M<ubjï)�”}”(hŒA(unsigned int num_chars, int after_tab, struct n_tty_data *ldata)”h]”(jõ)�”}”(hŒunsigned int num_chars”h]”(j­)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj  ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj  ubj­)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj  ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj  ubjÖ)�”}”(hŒ num_chars”h]”hŒ num_chars”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj  ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjœ ubjõ)�”}”(hŒ int after_tab”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjñ ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjñ ubjÖ)�”}”(hŒ after_tab”h]”hŒ after_tab”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjñ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjœ ubjõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj*!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj&!ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7!h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj&!ubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hjH!h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjE!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jJ!Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jŠ sbŒc.echo_erase_tab”†”asbuh1hhj&!ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh!h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj&!ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjv!h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj&!ubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hjƒ!h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj&!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjœ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjc h²hh³ju h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj_ h²hh³ju h´M<ubah}”(h]”jZ ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³ju h´M<hj\ h²hubj”)�”}”(hhh]”hí)�”}”(hŒadd operation to erase a tab”h]”hŒadd operation to erase a tab”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M<hjª!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj\ h²hh³ju h´M<ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjÅ!j¶jÅ!j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX **Parameters** ``unsigned int num_chars`` number of character columns already used ``int after_tab`` true if num_chars starts after a previous tab ``struct n_tty_data *ldata`` n_tty data **Description** Add an operation to the echo buffer to erase a tab. Called by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjÏ!h]”hŒ Parameters”…”�”}”(hjÑ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÍ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M@hjÉ!ubjÛ)�”}”(hhh]”(jà)�”}”(hŒD``unsigned int num_chars`` number of character columns already used ”h]”(jæ)�”}”(hŒ``unsigned int num_chars``”h]”jì)�”}”(hjî!h]”hŒunsigned int num_chars”…”�”}”(hjð!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjì!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M=hjè!ubj)�”}”(hhh]”hí)�”}”(hŒ(number of character columns already used”h]”hŒ(number of character columns already used”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j"h´M=hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjè!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j"h´M=hjå!ubjà)�”}”(hŒ@``int after_tab`` true if num_chars starts after a previous tab ”h]”(jæ)�”}”(hŒ``int after_tab``”h]”jì)�”}”(hj'"h]”hŒ int after_tab”…”�”}”(hj)"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj%"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M>hj!"ubj)�”}”(hhh]”hí)�”}”(hŒ-true if num_chars starts after a previous tab”h]”hŒ-true if num_chars starts after a previous tab”…”�”}”(hj@"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j<"h´M>hj="ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j<"h´M>hjå!ubjà)�”}”(hŒ(``struct n_tty_data *ldata`` n_tty data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hj`"h]”hŒstruct n_tty_data *ldata”…”�”}”(hjb"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj^"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M?hjZ"ubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ju"h´M?hjv"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³ju"h´M?hjå!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÉ!ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj›"h]”hŒ Description”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj™"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MAhjÉ!ubhí)�”}”(hŒ3Add an operation to the echo buffer to erase a tab.”h]”hŒ3Add an operation to the echo buffer to erase a tab.”…”�”}”(hj±"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M@hjÉ!ubhí)�”}”(hŒÿCalled by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.”h]”hŒÿCalled by the eraser function, which knows how many character columns have been used since either a previous tab or the start of input. This information will be used later, along with canon column (if applicable), to go back the correct number of columns.”…”�”}”(hjÀ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MBhjÉ!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œecho_char_raw (C function)”Œc.echo_char_raw”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ3void echo_char_raw (u8 c, struct n_tty_data *ldata)”h]”j§)�”}”(hŒ2void echo_char_raw(u8 c, struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjë"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MYubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ"h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjë"h²hh³jý"h´MYubjÐ)�”}”(hŒ echo_char_raw”h]”jÖ)�”}”(hŒ echo_char_raw”h]”hŒ echo_char_raw”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj #ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjë"h²hh³jý"h´MYubjï)�”}”(hŒ (u8 c, struct n_tty_data *ldata)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj/#h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj,#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j1#Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j#sbŒc.echo_char_raw”†”asbuh1hhj(#ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO#h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj(#ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj]#h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj(#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj$#ubjõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hju#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjq#ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚#h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjq#ubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hj“#h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j•#Œmodname”NŒ classname”Nj7j:)�”}”j=]”jK#Œc.echo_char_raw”†”asbuh1hhjq#ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±#h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjq#ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj¿#h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjq#ubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hjÌ#h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjq#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj$#ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjë"h²hh³jý"h´MYubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjç"h²hh³jý"h´MYubah}”(h]”jâ"ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jý"h´MYhjä"h²hubj”)�”}”(hhh]”hí)�”}”(hŒecho a character raw”h]”hŒecho a character raw”…”�”}”(hjö#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MYhjó#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjä"h²hh³jý"h´MYubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj$j¶j$j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hXL**Parameters** ``u8 c`` unicode byte to echo ``struct n_tty_data *ldata`` line disc data **Description** Echo user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path. This variant does not treat control characters specially.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj$h]”hŒ Parameters”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M]hj$ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` unicode byte to echo ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hj7$h]”hŒu8 c”…”�”}”(hj9$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj5$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MZhj1$ubj)�”}”(hhh]”hí)�”}”(hŒunicode byte to echo”h]”hŒunicode byte to echo”…”�”}”(hjP$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jL$h´MZhjM$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jL$h´MZhj.$ubjà)�”}”(hŒ,``struct n_tty_data *ldata`` line disc data ”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjp$h]”hŒstruct n_tty_data *ldata”…”�”}”(hjr$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjn$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M[hjj$ubj)�”}”(hhh]”hí)�”}”(hŒline disc data”h]”hŒline disc data”…”�”}”(hj‰$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j…$h´M[hj†$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j…$h´M[hj.$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj$ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj«$h]”hŒ Description”…”�”}”(hj­$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj©$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M]hj$ubhí)�”}”(hŒ 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.”h]”(hŒiEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the ”…”�”}”(hjÁ$h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`tty_driver.receive_buf\(\) `”h]”jì)�”}”(hjË$h]”hŒtty_driver.receive_buf()”…”�”}”(hjÍ$h²hh³Nh´Nubah}”(h]”h ]”(jYj1Œc-type”eh"]”h$]”h&]”uh1jëhjÉ$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jfŒ refdomain”j1Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j7j:)�”}”j=]”sbjlŒ tty_driver”uh1hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M\hjÁ$ubhŒ path.”…”�”}”(hjÁ$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jë$h´M\hj$ubhí)�”}”(hŒ9This variant does not treat control characters specially.”h]”hŒ9This variant does not treat control characters specially.”…”�”}”(hjö$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M_hj$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œecho_char (C function)”Œ c.echo_char”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ3void echo_char (u8 c, const struct tty_struct *tty)”h]”j§)�”}”(hŒ2void echo_char(u8 c, const struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%%h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj!%h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mmubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4%h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj!%h²hh³j3%h´MmubjÐ)�”}”(hŒ echo_char”h]”jÖ)�”}”(hŒ echo_char”h]”hŒ echo_char”…”�”}”(hjF%h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjB%ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj!%h²hh³j3%h´Mmubjï)�”}”(hŒ$(u8 c, const struct tty_struct *tty)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hje%h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjb%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jg%Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jH%sbŒ c.echo_char”†”asbuh1hhj^%ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…%h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj^%ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj“%h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj^%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjZ%ubjõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hj«%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj§%ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸%h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj§%ubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjÆ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj§%ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ%h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj§%ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjä%h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjá%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jæ%Œmodname”NŒ classname”Nj7j:)�”}”j=]”j�%Œ c.echo_char”†”asbuh1hhj§%ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj§%ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj§%ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj§%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjZ%ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj!%h²hh³j3%h´Mmubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj%h²hh³j3%h´Mmubah}”(h]”j%ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j3%h´Mmhj%h²hubj”)�”}”(hhh]”hí)�”}”(hŒecho a character”h]”hŒecho a character”…”�”}”(hjG&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MmhjD&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj%h²hh³j3%h´Mmubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj_&j¶j_&j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hXˆ**Parameters** ``u8 c`` unicode byte to echo ``const struct tty_struct *tty`` terminal device **Description** Echo user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the :c:type:`tty_driver.receive_buf\(\) ` path. This variant tags control characters to be echoed as "^X" (where X is the letter representing the control char).”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hji&h]”hŒ Parameters”…”�”}”(hjk&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjg&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mqhjc&ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` unicode byte to echo ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hjˆ&h]”hŒu8 c”…”�”}”(hjŠ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj†&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mnhj‚&ubj)�”}”(hhh]”hí)�”}”(hŒunicode byte to echo”h]”hŒunicode byte to echo”…”�”}”(hj¡&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j�&h´Mnhjž&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j�&h´Mnhj&ubjà)�”}”(hŒ1``const struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hjÁ&h]”hŒconst struct tty_struct *tty”…”�”}”(hjÃ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¿&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mohj»&ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjÚ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÖ&h´Mohj×&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÖ&h´Mohj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjc&ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjü&h]”hŒ Description”…”�”}”(hjþ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjú&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mqhjc&ubhí)�”}”(hŒ 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.”h]”(hŒiEcho user input back onto the screen. This must be called only when L_ECHO(tty) is true. Called from the ”…”�”}”(hj'h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`tty_driver.receive_buf\(\) `”h]”jì)�”}”(hj'h]”hŒtty_driver.receive_buf()”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”(jYj1Œc-type”eh"]”h$]”h&]”uh1jëhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jfŒ refdomain”j1Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j7jç$jlŒ tty_driver”uh1hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mphj'ubhŒ path.”…”�”}”(hj'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j9'h´Mphjc&ubhí)�”}”(hŒpThis variant tags control characters to be echoed as "^X" (where X is the letter representing the control char).”h]”hŒtThis variant tags control characters to be echoed as “^Xâ€� (where X is the letter representing the control char).”…”�”}”(hjD'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mshjc&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œfinish_erasing (C function)”Œc.finish_erasing”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ.void finish_erasing (struct n_tty_data *ldata)”h]”j§)�”}”(hŒ-void finish_erasing(struct n_tty_data *ldata)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjs'h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjo'h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M†ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚'h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjo'h²hh³j�'h´M†ubjÐ)�”}”(hŒfinish_erasing”h]”jÖ)�”}”(hŒfinish_erasing”h]”hŒfinish_erasing”…”�”}”(hj”'h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�'ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjo'h²hh³j�'h´M†ubjï)�”}”(hŒ(struct n_tty_data *ldata)”h]”jõ)�”}”(hŒstruct n_tty_data *ldata”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj°'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj¬'ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½'h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¬'ubh)�”}”(hhh]”jÖ)�”}”(hŒ n_tty_data”h]”hŒ n_tty_data”…”�”}”(hjÎ'h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjË'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÐ'Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j–'sbŒc.finish_erasing”†”asbuh1hhj¬'ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî'h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj¬'ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjü'h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj¬'ubjÖ)�”}”(hŒldata”h]”hŒldata”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj¬'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj¨'ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjo'h²hh³j�'h´M†ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjk'h²hh³j�'h´M†ubah}”(h]”jf'ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j�'h´M†hjh'h²hubj”)�”}”(hhh]”hí)�”}”(hŒcomplete erase”h]”hŒcomplete erase”…”�”}”(hj3(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M†hj0(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjh'h²hh³j�'h´M†ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjK(j¶jK(j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hŒ9**Parameters** ``struct n_tty_data *ldata`` n_tty data”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjU(h]”hŒ Parameters”…”�”}”(hjW(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjS(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MŠhjO(ubjÛ)�”}”(hhh]”jà)�”}”(hŒ'``struct n_tty_data *ldata`` n_tty data”h]”(jæ)�”}”(hŒ``struct n_tty_data *ldata``”h]”jì)�”}”(hjt(h]”hŒstruct n_tty_data *ldata”…”�”}”(hjv(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjr(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MŒhjn(ubj)�”}”(hhh]”hí)�”}”(hŒ n_tty data”h]”hŒ n_tty data”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M‡hjŠ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjn(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j‰(h´MŒhjk(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjO(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œeraser (C function)”Œc.eraser”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ0void eraser (u8 c, const struct tty_struct *tty)”h]”j§)�”}”(hŒ/void eraser(u8 c, const struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎ(h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjÊ(h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M’ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ(h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÊ(h²hh³jÜ(h´M’ubjÐ)�”}”(hŒeraser”h]”jÖ)�”}”(hŒeraser”h]”hŒeraser”…”�”}”(hjï(h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjë(ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjÊ(h²hh³jÜ(h´M’ubjï)�”}”(hŒ$(u8 c, const struct tty_struct *tty)”h]”(jõ)�”}”(hŒu8 c”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj )ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j)Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jñ(sbŒc.eraser”†”asbuh1hhj)ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.)h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj)ubjÖ)�”}”(hj1h]”hŒc”…”�”}”(hj<)h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj)ubjõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hjT)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjP)ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja)h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjP)ubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjo)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjP)ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|)h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjP)ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjŠ)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j�)Œmodname”NŒ classname”Nj7j:)�”}”j=]”j*)Œc.eraser”†”asbuh1hhjP)ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«)h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjP)ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj¹)h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjP)ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjÆ)h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjP)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjÊ(h²hh³jÜ(h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjÆ(h²hh³jÜ(h´M’ubah}”(h]”jÁ(ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jÜ(h´M’hjÃ(h²hubj”)�”}”(hhh]”hí)�”}”(hŒhandle erase function”h]”hŒhandle erase function”…”�”}”(hjð)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M’hjí)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjÃ(h²hh³jÜ(h´M’ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj*j¶j*j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M–hj *ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``u8 c`` character input ”h]”(jæ)�”}”(hŒ``u8 c``”h]”jì)�”}”(hj1*h]”hŒu8 c”…”�”}”(hj3*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj/*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M“hj+*ubj)�”}”(hhh]”hí)�”}”(hŒcharacter input”h]”hŒcharacter input”…”�”}”(hjJ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jF*h´M“hjG*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jF*h´M“hj(*ubjà)�”}”(hŒ1``const struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hjj*h]”hŒconst struct tty_struct *tty”…”�”}”(hjl*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjh*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M”hjd*ubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjƒ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j*h´M”hj€*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j*h´M”hj(*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj *ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj¥*h]”hŒ Description”…”�”}”(hj§*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj£*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M–hj *ubhí)�”}”(hŒŸ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.”h]”hŒŸ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.”…”�”}”(hj»*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M•hj *ubjÛ)�”}”(hhh]”jà)�”}”(hŒXLocking: 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Ñ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M™hjÍ*ubj)�”}”(hhh]”hí)�”}”(hŒ,caller holds non-exclusive ``termios_rwsem``”h]”(hŒcaller holds non-exclusive ”…”�”}”(hjã*h²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjë*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjã*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mšhjà*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jß*h´M™hjÊ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj *ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œisig (C function)”Œc.isig”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ+void isig (int sig, struct tty_struct *tty)”h]”j§)�”}”(hŒ*void isig(int sig, struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2+h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj.+h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA+h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj.+h²hh³j@+h´MubjÐ)�”}”(hŒisig”h]”jÖ)�”}”(hŒisig”h]”hŒisig”…”�”}”(hjS+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjO+ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj.+h²hh³j@+h´Mubjï)�”}”(hŒ!(int sig, struct tty_struct *tty)”h]”(jõ)�”}”(hŒint sig”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hjo+h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjk+ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}+h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjk+ubjÖ)�”}”(hŒsig”h]”hŒsig”…”�”}”(hj‹+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjk+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjg+ubjõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj¤+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj +ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±+h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj +ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj¿+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÄ+Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jU+sbŒc.isig”†”asbuh1hhj +ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ+h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj +ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjð+h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj +ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjý+h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj +ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjg+ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj.+h²hh³j@+h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj*+h²hh³j@+h´Mubah}”(h]”j%+ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j@+h´Mhj'+h²hubj”)�”}”(hhh]”hí)�”}”(hŒhandle the ISIG optio”h]”hŒhandle the ISIG optio”…”�”}”(hj',h²h•h³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj$,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj'+h²hh³j@+h´Mubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj?,j¶j?,j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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``.lock”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjI,h]”hŒ Parameters”…”�”}”(hjK,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjG,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M"hjC,ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``int sig`` signal ”h]”(jæ)�”}”(hŒ ``int sig``”h]”jì)�”}”(hjh,h]”hŒint sig”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjf,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhjb,ubj)�”}”(hhh]”hí)�”}”(hŒsignal”h]”hŒsignal”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j},h´Mhj~,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j},h´Mhj_,ubjà)�”}”(hŒ$``struct tty_struct *tty`` terminal ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj¡,h]”hŒstruct tty_struct *tty”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjŸ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj›,ubj)�”}”(hhh]”hí)�”}”(hŒterminal”h]”hŒterminal”…”�”}”(hjº,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¶,h´M hj·,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j¶,h´M hj_,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjC,ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjÜ,h]”hŒ Description”…”�”}”(hjÞ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÚ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M"hjC,ubhí)�”}”(hŒ�Called when a signal is being sent due to terminal input. Called from the :c:type:`tty_driver.receive_buf\(\) ` path, so serialized.”h]”(hŒJCalled when a signal is being sent due to terminal input. Called from the ”…”�”}”(hjò,h²hh³Nh´Nubh)�”}”(hŒ1:c:type:`tty_driver.receive_buf\(\) `”h]”jì)�”}”(hjü,h]”hŒtty_driver.receive_buf()”…”�”}”(hjþ,h²hh³Nh´Nubah}”(h]”h ]”(jYj1Œc-type”eh"]”h$]”h&]”uh1jëhjú,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jfŒ refdomain”j1Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j7jç$jlŒ tty_driver”uh1hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M!hjò,ubhŒ path, so serialized.”…”�”}”(hjò,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j-h´M!hjC,ubhí)�”}”(hŒÈ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.”h]”hŒÌ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.”…”�”}”(hj$-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M$hjC,ubhí)�”}”(hŒLocking: ``ctrl``.lock”h]”(hŒ Locking: ”…”�”}”(hj3-h²hh³Nh´Nubjì)�”}”(hŒ``ctrl``”h]”hŒctrl”…”�”}”(hj;-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj3-ubhŒ.lock”…”�”}”(hj3-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M(hjC,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œ n_tty_receive_break (C function)”Œc.n_tty_receive_break”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ1void n_tty_receive_break (struct tty_struct *tty)”h]”j§)�”}”(hŒ0void n_tty_receive_break(struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjt-h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjp-h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MNubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ-h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjp-h²hh³j‚-h´MNubjÐ)�”}”(hŒn_tty_receive_break”h]”jÖ)�”}”(hŒn_tty_receive_break”h]”hŒn_tty_receive_break”…”�”}”(hj•-h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj‘-ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjp-h²hh³j‚-h´MNubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj±-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj­-ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾-h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj­-ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÏ-h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÌ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÑ-Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j—-sbŒc.n_tty_receive_break”†”asbuh1hhj­-ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï-h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj­-ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjý-h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj­-ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj­-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj©-ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjp-h²hh³j‚-h´MNubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjl-h²hh³j‚-h´MNubah}”(h]”jg-ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j‚-h´MNhji-h²hubj”)�”}”(hhh]”hí)�”}”(hŒ handle break”h]”hŒ handle break”…”�”}”(hj4.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MNhj1.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hji-h²hh³j‚-h´MNubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjL.j¶jL.j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(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 buffer”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjV.h]”hŒ Parameters”…”�”}”(hjX.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjT.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MRhjP.ubjÛ)�”}”(hhh]”jà)�”}”(hŒ$``struct tty_struct *tty`` terminal ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hju.h]”hŒstruct tty_struct *tty”…”�”}”(hjw.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjs.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MOhjo.ubj)�”}”(hhh]”hí)�”}”(hŒterminal”h]”hŒterminal”…”�”}”(hjŽ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŠ.h´MOhj‹.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jŠ.h´MOhjl.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjP.ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj°.h]”hŒ Description”…”�”}”(hj².h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj®.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MQhjP.ubhí)�”}”(hŒ„An RS232 break event has been hit in the incoming bitstream. This can cause a variety of events depending upon the termios settings.”h]”hŒ„An RS232 break event has been hit in the incoming bitstream. This can cause a variety of events depending upon the termios settings.”…”�”}”(hjÆ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MPhjP.ubjÛ)�”}”(hhh]”jà)�”}”(hŒULocking: 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Ü.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MThjØ.ubj)�”}”(hhh]”hí)�”}”(hŒ(caller holds non-exclusive termios_rwsem”h]”hŒ(caller holds non-exclusive termios_rwsem”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jê.h´MThjë.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jê.h´MThjÕ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjP.ubhí)�”}”(hŒ**Note**”h]”jÅ)�”}”(hj/h]”hŒNote”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MVhjP.ubhí)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjý=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j>Œmodname”NŒ classname”Nj7j:)�”}”j=]”j�=Œc.n_tty_set_termios”†”asbuh1hhjÃ=ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÃ=ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj,>h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjÃ=ubjÖ)�”}”(hŒold”h]”hŒold”…”�”}”(hj9>h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÃ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjM=ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj=h²hh³j&=h´Mãubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj=h²hh³j&=h´Mãubah}”(h]”j =ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j&=h´Mãhj =h²hubj”)�”}”(hhh]”hí)�”}”(hŒtermios data changed”h]”hŒtermios data changed”…”�”}”(hjc>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mãhj`>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj =h²hh³j&=h´Mãubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj{>j¶j{>j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hXÃ**Parameters** ``struct tty_struct *tty`` terminal ``const struct ktermios *old`` previous data **Description** Called by the tty layer when the user changes termios flags so that the line discipline can plan ahead. This function cannot sleep and is protected from re-entry by the tty layer. The user is guaranteed that this function will not be re-entered or in progress when the ldisc is closed. Locking: Caller holds **tty->termios_rwsem**”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj…>h]”hŒ Parameters”…”�”}”(hj‡>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjƒ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mçhj>ubjÛ)�”}”(hhh]”(jà)�”}”(hŒ$``struct tty_struct *tty`` terminal ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj¤>h]”hŒstruct tty_struct *tty”…”�”}”(hj¦>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¢>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mähjž>ubj)�”}”(hhh]”hí)�”}”(hŒterminal”h]”hŒterminal”…”�”}”(hj½>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¹>h´Mähjº>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j¹>h´Mähj›>ubjà)�”}”(hŒ-``const struct ktermios *old`` previous data ”h]”(jæ)�”}”(hŒ``const struct ktermios *old``”h]”jì)�”}”(hjÝ>h]”hŒconst struct ktermios *old”…”�”}”(hjß>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÛ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Måhj×>ubj)�”}”(hhh]”hí)�”}”(hŒ previous data”h]”hŒ previous data”…”�”}”(hjö>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jò>h´Måhjó>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jò>h´Måhj›>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj>ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj?h]”hŒ Description”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mçhj>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.?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mæhj>ubhí)�”}”(hŒ,Locking: Caller holds **tty->termios_rwsem**”h]”(hŒLocking: Caller holds ”…”�”}”(hj=?h²hh³Nh´NubjÅ)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(hjE?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj=?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mëhj>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_close (C function)”Œ c.n_tty_close”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ)void n_tty_close (struct tty_struct *tty)”h]”j§)�”}”(hŒ(void n_tty_close(struct tty_struct *tty)”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjz?h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjv?h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MBubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰?h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjv?h²hh³jˆ?h´MBubjÐ)�”}”(hŒ n_tty_close”h]”jÖ)�”}”(hŒ n_tty_close”h]”hŒ n_tty_close”…”�”}”(hj›?h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj—?ubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjv?h²hh³jˆ?h´MBubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj·?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj³?ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ?h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj³?ubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÕ?h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÒ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j×?Œmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3j�?sbŒ c.n_tty_close”†”asbuh1hhj³?ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ?h²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj³?ubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj³?ubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj³?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj¯?ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjv?h²hh³jˆ?h´MBubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjr?h²hh³jˆ?h´MBubah}”(h]”jm?ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jˆ?h´MBhjo?h²hubj”)�”}”(hhh]”hí)�”}”(hŒclose the ldisc for this tty”h]”hŒclose the ldisc for this tty”…”�”}”(hj:@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MBhj7@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjo?h²hh³jˆ?h´MBubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjR@j¶jR@j·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX**Parameters** ``struct tty_struct *tty`` device **Description** Called from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj\@h]”hŒ Parameters”…”�”}”(hj^@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjZ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MFhjV@ubjÛ)�”}”(hhh]”jà)�”}”(hŒ"``struct tty_struct *tty`` device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj{@h]”hŒstruct tty_struct *tty”…”�”}”(hj}@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjy@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MChju@ubj)�”}”(hhh]”hí)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj”@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j�@h´MChj‘@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j�@h´MChjr@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjV@ubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj¶@h]”hŒ Description”…”�”}”(hj¸@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj´@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MEhjV@ubhí)�”}”(hŒÔCalled from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.”h]”hŒÔCalled from the terminal layer when this line discipline is being shut down, either because of a close or becsuse of a discipline change. The function will not be called while other ldisc methods are in progress.”…”�”}”(hjÌ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MDhjV@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—•Œn_tty_open (C function)”Œ c.n_tty_open”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ'int n_tty_open (struct tty_struct *tty)”h]”j§)�”}”(hŒ&int n_tty_open(struct tty_struct *tty)”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hjû@h²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj÷@h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MVubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj÷@h²hh³j Ah´MVubjÐ)�”}”(hŒ n_tty_open”h]”jÖ)�”}”(hŒ n_tty_open”h]”hŒ n_tty_open”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjAubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj÷@h²hh³j Ah´MVubjï)�”}”(hŒ(struct tty_struct *tty)”h]”jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj8Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj4Aubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEAh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj4Aubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjVAh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjSAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jXAŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jAsbŒ c.n_tty_open”†”asbuh1hhj4Aubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvAh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj4AubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj„Ah²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj4AubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj‘Ah²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj4Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj0Aubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj÷@h²hh³j Ah´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjó@h²hh³j Ah´MVubah}”(h]”jî@ah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j Ah´MVhjð@h²hubj”)�”}”(hhh]”hí)�”}”(hŒ open an ldisc”h]”hŒ open an ldisc”…”�”}”(hj»Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MVhj¸Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjð@h²hh³j Ah´MVubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjÓAj¶jÓAj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX**Parameters** ``struct tty_struct *tty`` terminal to open **Description** Called when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjÝAh]”hŒ Parameters”…”�”}”(hjßAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÛAubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MZhj×AubjÛ)�”}”(hhh]”jà)�”}”(hŒ,``struct tty_struct *tty`` terminal to open ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hjüAh]”hŒstruct tty_struct *tty”…”�”}”(hjþAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjúAubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MWhjöAubj)�”}”(hhh]”hí)�”}”(hŒterminal to open”h]”hŒterminal to open”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jBh´MWhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jBh´MWhjóAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj×Aubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj7Bh]”hŒ Description”…”�”}”(hj9Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj5Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MYhj×Aubhí)�”}”(hŒÁCalled when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.”h]”hŒÁCalled when this line discipline is being attached to the terminal device. Can sleep. Called serialized so that no other events will occur in parallel. No further open will occur until a close.”…”�”}”(hjMBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MXhj×Aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œcopy_from_read_buf (C function)”Œc.copy_from_read_buf”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒLbool copy_from_read_buf (const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”j§)�”}”(hŒKbool copy_from_read_buf(const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”(j­)�”}”(hjx3h]”hŒbool”…”�”}”(hj|Bh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjxBh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠBh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjxBh²hh³j‰Bh´MubjÐ)�”}”(hŒcopy_from_read_buf”h]”jÖ)�”}”(hŒcopy_from_read_buf”h]”hŒcopy_from_read_buf”…”�”}”(hjœBh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj˜Bubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjxBh²hh³j‰Bh´Mubjï)�”}”(hŒ4(const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”(jõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hj¸Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj´Bubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅBh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj´Bubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjÓBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj´Bubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàBh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj´Bubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjñBh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjîBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jóBŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jžBsbŒc.copy_from_read_buf”†”asbuh1hhj´Bubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj´BubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj´BubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj,Ch²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj´Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj°Bubjõ)�”}”(hŒu8 **kbp”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjHCh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjECubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jJCŒmodname”NŒ classname”Nj7j:)�”}”j=]”j CŒc.copy_from_read_buf”†”asbuh1hhjACubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfCh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjACubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjtCh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjACubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjACubjÖ)�”}”(hŒkbp”h]”hŒkbp”…”�”}”(hjŽCh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjACubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj°Bubjõ)�”}”(hŒ size_t *nr”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjªCh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj§Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j¬CŒmodname”NŒ classname”Nj7j:)�”}”j=]”j CŒc.copy_from_read_buf”†”asbuh1hhj£Cubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈCh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj£CubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjÖCh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj£CubjÖ)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjãCh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj£Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj°Bubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjxBh²hh³j‰Bh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjtBh²hh³j‰Bh´Mubah}”(h]”joBah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j‰Bh´MhjqBh²hubj”)�”}”(hhh]”hí)�”}”(hŒcopy read data directly”h]”hŒcopy read data directly”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjqBh²hh³j‰Bh´Mubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj%Dj¶j%Dj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX"**Parameters** ``const struct tty_struct *tty`` terminal device ``u8 **kbp`` data ``size_t *nr`` size of data **Description** Helper function to speed up n_tty_read(). It is only called when ``ICANON`` is off; it copies characters straight from the tty queue. Locking: * called under the **ldata->atomic_read_lock** sem * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published **Return** true if it successfully copied data, but there is still more data to be had.”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj/Dh]”hŒ Parameters”…”�”}”(hj1Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj-Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mƒhj)DubjÛ)�”}”(hhh]”(jà)�”}”(hŒ1``const struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hjNDh]”hŒconst struct tty_struct *tty”…”�”}”(hjPDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjLDubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M€hjHDubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjgDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jcDh´M€hjdDubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jcDh´M€hjEDubjà)�”}”(hŒ``u8 **kbp`` data ”h]”(jæ)�”}”(hŒ ``u8 **kbp``”h]”jì)�”}”(hj‡Dh]”hŒu8 **kbp”…”�”}”(hj‰Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj…Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj�Dubj)�”}”(hhh]”hí)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jœDh´M�hj�Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jœDh´M�hjEDubjà)�”}”(hŒ``size_t *nr`` size of data ”h]”(jæ)�”}”(hŒ``size_t *nr``”h]”jì)�”}”(hjÀDh]”hŒ size_t *nr”…”�”}”(hjÂDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¾Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M‚hjºDubj)�”}”(hhh]”hí)�”}”(hŒ size of data”h]”hŒ size of data”…”�”}”(hjÙDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÕDh´M‚hjÖDubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÕDh´M‚hjEDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj)Dubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjûDh]”hŒ Description”…”�”}”(hjýDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjùDubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M„hj)Dubhí)�”}”(hŒ…Helper function to speed up n_tty_read(). It is only called when ``ICANON`` is off; it copies characters straight from the tty queue.”h]”(hŒAHelper function to speed up n_tty_read(). It is only called when ”…”�”}”(hjEh²hh³Nh´Nubjì)�”}”(hŒ ``ICANON``”h]”hŒICANON”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjEubhŒ: is off; it copies characters straight from the tty queue.”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mƒhj)DubjÛ)�”}”(hhh]”jà)�”}”(hŒ´Locking: * called under the **ldata->atomic_read_lock** sem * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published ”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj9Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M‹hj5Eubj)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ0called under the **ldata->atomic_read_lock** sem”h]”hí)�”}”(hjPEh]”(hŒcalled under the ”…”�”}”(hjREh²hh³Nh´NubjÅ)�”}”(hŒ**ldata->atomic_read_lock**”h]”hŒldata->atomic_read_lock”…”�”}”(hjYEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjREubhŒ sem”…”�”}”(hjREh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MˆhjNEubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjKEubhè)�”}”(hŒrn_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æ)�”}”(hŒn_tty_read()/consumer path:”h]”hŒn_tty_read()/consumer path:”…”�”}”(hjƒEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³jGEh´M‹hjEubj)�”}”(hhh]”hí)�”}”(hŒAcaller holds non-exclusive ``termios_rwsem``; read_tail published”h]”(hŒcaller holds non-exclusive ”…”�”}”(hj”Eh²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hjœEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj”EubhŒ; read_tail published”…”�”}”(hj”Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MŠhj‘Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jGEh´M‹hj|Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjxEubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjKEubeh}”(h]”h ]”h"]”h$]”h&]”jªjWuh1hâh³jqEh´MˆhjHEubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jGEh´M‹hj2Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj)Dubhí)�”}”(hŒ **Return**”h]”jÅ)�”}”(hjçEh]”hŒReturn”…”�”}”(hjéEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjåEubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj)Dubhí)�”}”(hŒLtrue if it successfully copied data, but there is still more data to be had.”h]”hŒLtrue if it successfully copied data, but there is still more data to be had.”…”�”}”(hjýEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M‡hj)Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œ%canon_copy_from_read_buf (C function)”Œc.canon_copy_from_read_buf”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒRbool canon_copy_from_read_buf (const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”j§)�”}”(hŒQbool canon_copy_from_read_buf(const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”(j­)�”}”(hjx3h]”hŒbool”…”�”}”(hj,Fh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj(Fh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M²ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Fh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj(Fh²hh³j9Fh´M²ubjÐ)�”}”(hŒcanon_copy_from_read_buf”h]”jÖ)�”}”(hŒcanon_copy_from_read_buf”h]”hŒcanon_copy_from_read_buf”…”�”}”(hjLFh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjHFubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj(Fh²hh³j9Fh´M²ubjï)�”}”(hŒ4(const struct tty_struct *tty, u8 **kbp, size_t *nr)”h]”(jõ)�”}”(hŒconst struct tty_struct *tty”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hjhFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjdFubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuFh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjdFubjû)�”}”(hjþh]”hŒstruct”…”�”}”(hjƒFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjdFubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjdFubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj¡Fh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjžFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j£FŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jNFsbŒc.canon_copy_from_read_buf”†”asbuh1hhjdFubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁFh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjdFubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjÏFh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjdFubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjÜFh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjdFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj`Fubjõ)�”}”(hŒu8 **kbp”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjøFh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjõFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”júFŒmodname”NŒ classname”Nj7j:)�”}”j=]”j½FŒc.canon_copy_from_read_buf”†”asbuh1hhjñFubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjñFubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj$Gh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjñFubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj1Gh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjñFubjÖ)�”}”(hŒkbp”h]”hŒkbp”…”�”}”(hj>Gh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjñFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj`Fubjõ)�”}”(hŒ size_t *nr”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjZGh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjWGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j\GŒmodname”NŒ classname”Nj7j:)�”}”j=]”j½FŒc.canon_copy_from_read_buf”†”asbuh1hhjSGubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxGh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjSGubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj†Gh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjSGubjÖ)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj“Gh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjSGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj`Fubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhj(Fh²hh³j9Fh´M²ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj$Fh²hh³j9Fh´M²ubah}”(h]”jFah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j9Fh´M²hj!Fh²hubj”)�”}”(hhh]”hí)�”}”(hŒ copy read data in canonical mode”h]”hŒ copy read data in canonical mode”…”�”}”(hj½Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M²hjºGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj!Fh²hh³j9Fh´M²ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµjÕGj¶jÕGj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX3**Parameters** ``const struct tty_struct *tty`` terminal device ``u8 **kbp`` data ``size_t *nr`` size of data **Description** Helper function for n_tty_read(). It is only called when ``ICANON`` is on; it copies one line of input up to and including the line-delimiting character into the result buffer. **Note** When termios is changed from non-canonical to canonical mode and the read buffer contains data, n_tty_set_termios() simulates an EOF push (as if C-d were input) _without_ the ``DISABLED_CHAR`` in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received. Locking: * called under the ``atomic_read_lock`` mutex * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjßGh]”hŒ Parameters”…”�”}”(hjáGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÝGubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M¶hjÙGubjÛ)�”}”(hhh]”(jà)�”}”(hŒ1``const struct tty_struct *tty`` terminal device ”h]”(jæ)�”}”(hŒ ``const struct tty_struct *tty``”h]”jì)�”}”(hjþGh]”hŒconst struct tty_struct *tty”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjüGubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M³hjøGubj)�”}”(hhh]”hí)�”}”(hŒterminal device”h]”hŒterminal device”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jHh´M³hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jHh´M³hjõGubjà)�”}”(hŒ``u8 **kbp`` data ”h]”(jæ)�”}”(hŒ ``u8 **kbp``”h]”jì)�”}”(hj7Hh]”hŒu8 **kbp”…”�”}”(hj9Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj5Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M´hj1Hubj)�”}”(hhh]”hí)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjPHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jLHh´M´hjMHubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jLHh´M´hjõGubjà)�”}”(hŒ``size_t *nr`` size of data ”h]”(jæ)�”}”(hŒ``size_t *nr``”h]”jì)�”}”(hjpHh]”hŒ size_t *nr”…”�”}”(hjrHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjnHubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MµhjjHubj)�”}”(hhh]”hí)�”}”(hŒ size of data”h]”hŒ size of data”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j…Hh´Mµhj†Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j…Hh´MµhjõGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÙGubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hj«Hh]”hŒ Description”…”�”}”(hj­Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj©Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M·hjÙGubhí)�”}”(hŒ°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.”h]”(hŒ9Helper function for n_tty_read(). It is only called when ”…”�”}”(hjÁHh²hh³Nh´Nubjì)�”}”(hŒ ``ICANON``”h]”hŒICANON”…”�”}”(hjÉHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjÁHubhŒm is on; it copies one line of input up to and including the line-delimiting character into the result buffer.”…”�”}”(hjÁHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M¶hjÙGubhí)�”}”(hŒ**Note**”h]”jÅ)�”}”(hjäHh]”hŒNote”…”�”}”(hjæHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjâHubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MºhjÙGubhí)�”}”(hXJWhen termios is changed from non-canonical to canonical mode and the read buffer contains data, n_tty_set_termios() simulates an EOF push (as if C-d were input) _without_ the ``DISABLED_CHAR`` in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received.”h]”(hŒ¯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 ”…”�”}”(hjúHh²hh³Nh´Nubjì)�”}”(hŒ``DISABLED_CHAR``”h]”hŒ DISABLED_CHAR”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjúHubhŒŠ in the buffer. This causes data already processed as input to be immediately available as input although a newline has not been received.”…”�”}”(hjúHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M»hjÙGubjÛ)�”}”(hhh]”jà)�”}”(hŒžLocking: * called under the ``atomic_read_lock`` mutex * n_tty_read()/consumer path: caller holds non-exclusive ``termios_rwsem``; read_tail published”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj"Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÄhjIubj)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ+called under the ``atomic_read_lock`` mutex”h]”hí)�”}”(hj9Ih]”(hŒcalled under the ”…”�”}”(hj;Ih²hh³Nh´Nubjì)�”}”(hŒ``atomic_read_lock``”h]”hŒatomic_read_lock”…”�”}”(hjBIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj;IubhŒ mutex”…”�”}”(hj;Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MÂhj7Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj4Iubhè)�”}”(hŒan_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æ)�”}”(hŒn_tty_read()/consumer path:”h]”hŒn_tty_read()/consumer path:”…”�”}”(hjlIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³j0Ih´MÄhjhIubj)�”}”(hhh]”hí)�”}”(hŒAcaller holds non-exclusive ``termios_rwsem``; read_tail published”h]”(hŒcaller holds non-exclusive ”…”�”}”(hj}Ih²hh³Nh´Nubjì)�”}”(hŒ``termios_rwsem``”h]”hŒ termios_rwsem”…”�”}”(hj…Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj}IubhŒ; read_tail published”…”�”}”(hj}Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j0Ih´MÄhjzIubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j0Ih´MÄhjeIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjaIubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj4Iubeh}”(h]”h ]”h"]”h$]”h&]”jªjWuh1hâh³jZIh´MÂhj1Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j0Ih´MÄhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhjÙGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œjob_control (C function)”Œ c.job_control”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒ;int job_control (struct tty_struct *tty, struct file *file)”h]”j§)�”}”(hŒ:int job_control(struct tty_struct *tty, struct file *file)”h]”(j­)�”}”(hŒint”h]”hŒint”…”�”}”(hjíIh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjéIh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüIh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjéIh²hh³jûIh´MubjÐ)�”}”(hŒ job_control”h]”jÖ)�”}”(hŒ job_control”h]”hŒ job_control”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj Jubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjéIh²hh³jûIh´Mubjï)�”}”(hŒ+(struct tty_struct *tty, struct file *file)”h]”(jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj*Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj&Jubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Jh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj&Jubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjHJh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjEJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jJJŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3jJsbŒ c.job_control”†”asbuh1hhj&Jubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhJh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj&JubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjvJh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj&JubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjƒJh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj&Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj"Jubjõ)�”}”(hŒstruct file *file”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjœJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj˜Jubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Jh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj˜Jubh)�”}”(hhh]”jÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjºJh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj·Jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j¼JŒmodname”NŒ classname”Nj7j:)�”}”j=]”jdJŒ c.job_control”†”asbuh1hhj˜Jubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØJh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj˜JubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjæJh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj˜JubjÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjóJh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj˜Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhj"Jubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjéIh²hh³jûIh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjåIh²hh³jûIh´Mubah}”(h]”jàIah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jûIh´MhjâIh²hubj”)�”}”(hhh]”hí)�”}”(hŒcheck job control”h]”hŒcheck job control”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MhjKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjâIh²hh³jûIh´Mubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj5Kj¶j5Kj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX�**Parameters** ``struct tty_struct *tty`` tty ``struct file *file`` file handle **Description** Perform job control management checks on this **file**/**tty** descriptor and if appropriate send any needed signals and return a negative error code if action should be taken. Locking: * redirected write test is safe * current->signal->tty check is safe * ctrl.lock to safely reference **tty->ctrl.pgrp**”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj?Kh]”hŒ Parameters”…”�”}”(hjAKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj=Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M!hj9KubjÛ)�”}”(hhh]”(jà)�”}”(hŒ``struct tty_struct *tty`` tty ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj^Kh]”hŒstruct tty_struct *tty”…”�”}”(hj`Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj\Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MhjXKubj)�”}”(hhh]”hí)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjwKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jsKh´MhjtKubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jsKh´MhjUKubjà)�”}”(hŒ"``struct file *file`` file handle ”h]”(jæ)�”}”(hŒ``struct file *file``”h]”jì)�”}”(hj—Kh]”hŒstruct file *file”…”�”}”(hj™Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj•Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mhj‘Kubj)�”}”(hhh]”hí)�”}”(hŒ file handle”h]”hŒ file handle”…”�”}”(hj°Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¬Kh´Mhj­Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j¬Kh´MhjUKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj9Kubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjÒKh]”hŒ Description”…”�”}”(hjÔKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÐKubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M!hj9Kubhí)�”}”(hŒ°Perform job control management checks on this **file**/**tty** descriptor and if appropriate send any needed signals and return a negative error code if action should be taken.”h]”(hŒ.Perform job control management checks on this ”…”�”}”(hjèKh²hh³Nh´NubjÅ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hjðKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjèKubhŒ/”…”�”}”(hjèKh²hh³Nh´NubjÅ)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjèKubhŒr descriptor and if appropriate send any needed signals and return a negative error code if action should be taken.”…”�”}”(hjèKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj9KubjÛ)�”}”(hhh]”jà)�”}”(hŒ€Locking: * redirected write test is safe * current->signal->tty check is safe * ctrl.lock to safely reference **tty->ctrl.pgrp**”h]”(jæ)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj"Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M&hjLubj)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒredirected write test is safe”h]”hí)�”}”(hj9Lh]”hŒredirected write test is safe”…”�”}”(hj;Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M%hj7Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj4Lubhè)�”}”(hŒ"current->signal->tty check is safe”h]”hí)�”}”(hjQLh]”hŒ"current->signal->tty check is safe”…”�”}”(hjSLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j0Lh´M&hjOLubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj4Lubhè)�”}”(hŒ0ctrl.lock to safely reference **tty->ctrl.pgrp**”h]”hí)�”}”(hjhLh]”(hŒctrl.lock to safely reference ”…”�”}”(hjjLh²hh³Nh´NubjÅ)�”}”(hŒ**tty->ctrl.pgrp**”h]”hŒtty->ctrl.pgrp”…”�”}”(hjqLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M'hjfLubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj4Lubeh}”(h]”h ]”h"]”h$]”h&]”jªjWuh1hâh³jHLh´M%hj1Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j0Lh´M&hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj9Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_read (C function)”Œ c.n_tty_read”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒxssize_t n_tty_read (struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)”h]”j§)�”}”(hŒwssize_t n_tty_read(struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjÇLh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÄLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÉLŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ n_tty_read”sbŒ c.n_tty_read”†”asbuh1hhjÀLh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Muubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéLh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÀLh²hh³jèLh´MuubjÐ)�”}”(hŒ n_tty_read”h]”jÖ)�”}”(hjåLh]”hŒ n_tty_read”…”�”}”(hjûLh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj÷Lubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhjÀLh²hh³jèLh´Muubjï)�”}”(hŒe(struct tty_struct *tty, struct file *file, u8 *kbuf, size_t nr, void **cookie, unsigned long offset)”h]”(jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjMubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Mh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjMubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj4Mh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj1Mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j6MŒmodname”NŒ classname”Nj7j:)�”}”j=]”jãLŒ c.n_tty_read”†”asbuh1hhjMubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRMh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjMubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj`Mh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjMubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjmMh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubjõ)�”}”(hŒstruct file *file”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj†Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj‚Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Mh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj‚Mubh)�”}”(hhh]”jÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¤Mh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj¡Mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j¦MŒmodname”NŒ classname”Nj7j:)�”}”j=]”jãLŒ c.n_tty_read”†”asbuh1hhj‚Mubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂMh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj‚MubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjÐMh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj‚MubjÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÝMh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj‚Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubjõ)�”}”(hŒu8 *kbuf”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjùMh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjöMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jûMŒmodname”NŒ classname”Nj7j:)�”}”j=]”jãLŒ c.n_tty_read”†”asbuh1hhjòMubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjòMubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj%Nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjòMubjÖ)�”}”(hŒkbuf”h]”hŒkbuf”…”�”}”(hj2Nh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjòMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubjõ)�”}”(hŒ size_t nr”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjNNh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjKNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jPNŒmodname”NŒ classname”Nj7j:)�”}”j=]”jãLŒ c.n_tty_read”†”asbuh1hhjGNubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlNh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjGNubjÖ)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjzNh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjGNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubjõ)�”}”(hŒ void **cookie”h]”(j­)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj“Nh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hj�Nubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡Nh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj�NubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj¯Nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�NubjT)�”}”(hjWh]”hŒ*”…”�”}”(hj¼Nh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj�NubjÖ)�”}”(hŒcookie”h]”hŒcookie”…”�”}”(hjÉNh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj�Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubjõ)�”}”(hŒunsigned long offset”h]”(j­)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjâNh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjÞNubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðNh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÞNubj­)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjþNh²hh³Nh´Nubah}”(h]”h ]”j¹ah"]”h$]”h&]”uh1j¬hjÞNubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjÞNubjÖ)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÞNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjÀLh²hh³jèLh´Muubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hj¼Lh²hh³jèLh´Muubah}”(h]”j·Lah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³jèLh´Muhj¹Lh²hubj”)�”}”(hhh]”hí)�”}”(hŒread function for tty”h]”hŒread function for tty”…”�”}”(hjDOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MuhjAOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hj¹Lh²hh³jèLh´Muubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj\Oj¶j\Oj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hXá**Parameters** ``struct tty_struct *tty`` tty device ``struct file *file`` file object ``u8 *kbuf`` kernelspace buffer pointer ``size_t nr`` size of I/O ``void **cookie`` if non-``NULL``, this is a continuation read ``unsigned long offset`` where to continue reading from (unused in n_tty) **Description** Perform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep. This code must be sure never to sleep through a hangup. Locking: n_tty_read()/consumer path: claims non-exclusive termios_rwsem; publishes read_tail”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hjfOh]”hŒ Parameters”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjdOubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Myhj`OubjÛ)�”}”(hhh]”(jà)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj…Oh]”hŒstruct tty_struct *tty”…”�”}”(hj‡Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjƒOubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MvhjOubj)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjžOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jšOh´Mvhj›Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jšOh´Mvhj|Oubjà)�”}”(hŒ"``struct file *file`` file object ”h]”(jæ)�”}”(hŒ``struct file *file``”h]”jì)�”}”(hj¾Oh]”hŒstruct file *file”…”�”}”(hjÀOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¼Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mwhj¸Oubj)�”}”(hhh]”hí)�”}”(hŒ file object”h]”hŒ file object”…”�”}”(hj×Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÓOh´MwhjÔOubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÓOh´Mwhj|Oubjà)�”}”(hŒ(``u8 *kbuf`` kernelspace buffer pointer ”h]”(jæ)�”}”(hŒ ``u8 *kbuf``”h]”jì)�”}”(hj÷Oh]”hŒu8 *kbuf”…”�”}”(hjùOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjõOubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MxhjñOubj)�”}”(hhh]”hí)�”}”(hŒkernelspace buffer pointer”h]”hŒkernelspace buffer pointer”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j Ph´Mxhj Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j Ph´Mxhj|Oubjà)�”}”(hŒ``size_t nr`` size of I/O ”h]”(jæ)�”}”(hŒ ``size_t nr``”h]”jì)�”}”(hj0Ph]”hŒ size_t nr”…”�”}”(hj2Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj.Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Myhj*Pubj)�”}”(hhh]”hí)�”}”(hŒ size of I/O”h]”hŒ size of I/O”…”�”}”(hjIPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jEPh´MyhjFPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jEPh´Myhj|Oubjà)�”}”(hŒ?``void **cookie`` if non-``NULL``, this is a continuation read ”h]”(jæ)�”}”(hŒ``void **cookie``”h]”jì)�”}”(hjiPh]”hŒ void **cookie”…”�”}”(hjkPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjgPubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´MzhjcPubj)�”}”(hhh]”hí)�”}”(hŒ,if non-``NULL``, this is a continuation read”h]”(hŒif non-”…”�”}”(hj‚Ph²hh³Nh´Nubjì)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjŠPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj‚PubhŒ, this is a continuation read”…”�”}”(hj‚Ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j~Ph´MzhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j~Ph´Mzhj|Oubjà)�”}”(hŒJ``unsigned long offset`` where to continue reading from (unused in n_tty) ”h]”(jæ)�”}”(hŒ``unsigned long offset``”h]”jì)�”}”(hj´Ph]”hŒunsigned long offset”…”�”}”(hj¶Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj²Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M{hj®Pubj)�”}”(hhh]”hí)�”}”(hŒ0where to continue reading from (unused in n_tty)”h]”hŒ0where to continue reading from (unused in n_tty)”…”�”}”(hjÍPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÉPh´M{hjÊPubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÉPh´M{hj|Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj`Oubhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjïPh]”hŒ Description”…”�”}”(hjñPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjíPubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M}hj`Oubhí)�”}”(hŒúPerform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep.”h]”hŒúPerform reads for the line discipline. We are guaranteed that the line discipline will not be closed under us but we may get multiple parallel readers and must handle this ourselves. We may also get a hangup. Always called in user context, may sleep.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M|hj`Oubhí)�”}”(hŒ7This code must be sure never to sleep through a hangup.”h]”hŒ7This code must be sure never to sleep through a hangup.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M�hj`OubjÛ)�”}”(hhh]”jà)�”}”(hŒ\Locking: n_tty_read()/consumer path: claims non-exclusive termios_rwsem; publishes read_tail”h]”(jæ)�”}”(hŒ$Locking: n_tty_read()/consumer path:”h]”hŒ$Locking: n_tty_read()/consumer path:”…”�”}”(hj*Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M„hj&Qubj)�”}”(hhh]”hí)�”}”(hŒ7claims non-exclusive termios_rwsem; publishes read_tail”h]”hŒ7claims non-exclusive termios_rwsem; publishes read_tail”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj:Rubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKRh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj:Rubh)�”}”(hhh]”jÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj\Rh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjYRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j^RŒmodname”NŒ classname”Nj7j:)�”}”j=]”j›QŒ c.n_tty_write”†”asbuh1hhj:Rubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzRh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj:RubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjˆRh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShj:RubjÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj•Rh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj:Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjÆQubjõ)�”}”(hŒ const u8 *buf”h]”(jû)�”}”(hjÏh]”hŒconst”…”�”}”(hj®Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjªRubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Rh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjªRubh)�”}”(hhh]”jÖ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÌRh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjÉRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jÎRŒmodname”NŒ classname”Nj7j:)�”}”j=]”j›QŒ c.n_tty_write”†”asbuh1hhjªRubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêRh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjªRubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjøRh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjªRubjÖ)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjªRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjÆQubjõ)�”}”(hŒ size_t nr”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj!Sh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j#SŒmodname”NŒ classname”Nj7j:)�”}”j=]”j›QŒ c.n_tty_write”†”asbuh1hhjSubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Sh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjSubjÖ)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjMSh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjÆQubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jîhjxQh²hh³j Qh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj…ˆuh1j¦j†j‡hjtQh²hh³j Qh´M ubah}”(h]”joQah ]”(j‹jŒeh"]”h$]”h&]”j�ˆj‘)j’huh1j h³j Qh´M hjqQh²hubj”)�”}”(hhh]”hí)�”}”(hŒwrite function for tty”h]”hŒwrite function for tty”…”�”}”(hjwSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hjtSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j“hjqQh²hh³j Qh´M ubeh}”(h]”h ]”(j1Œfunction”eh"]”h$]”h&]”j´j1jµj�Sj¶j�Sj·‰j¸‰j¹‰uh1j›h²hhjfh³Nh´Nubj»)�”}”(hX**Parameters** ``struct tty_struct *tty`` tty device ``struct file *file`` file object ``const u8 *buf`` userspace buffer pointer ``size_t nr`` size of I/O **Description** Write function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the ``output_lock`` is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer. This code must be sure never to sleep through a hangup. Locking: output_lock to protect column state and space left (note that the process_output*() functions take this lock themselves)”h]”(hí)�”}”(hŒ**Parameters**”h]”jÅ)�”}”(hj™Sh]”hŒ Parameters”…”�”}”(hj›Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj—Subah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj“SubjÛ)�”}”(hhh]”(jà)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jæ)�”}”(hŒ``struct tty_struct *tty``”h]”jì)�”}”(hj¸Sh]”hŒstruct tty_struct *tty”…”�”}”(hjºSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj¶Subah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj²Subj)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjÑSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÍSh´M hjÎSubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jÍSh´M hj¯Subjà)�”}”(hŒ"``struct file *file`` file object ”h]”(jæ)�”}”(hŒ``struct file *file``”h]”jì)�”}”(hjñSh]”hŒstruct file *file”…”�”}”(hjóSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjïSubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hjëSubj)�”}”(hhh]”hí)�”}”(hŒ file object”h]”hŒ file object”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jTh´M hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jTh´M hj¯Subjà)�”}”(hŒ+``const u8 *buf`` userspace buffer pointer ”h]”(jæ)�”}”(hŒ``const u8 *buf``”h]”jì)�”}”(hj*Th]”hŒ const u8 *buf”…”�”}”(hj,Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj(Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj$Tubj)�”}”(hhh]”hí)�”}”(hŒuserspace buffer pointer”h]”hŒuserspace buffer pointer”…”�”}”(hjCTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j?Th´M hj@Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³j?Th´M hj¯Subjà)�”}”(hŒ``size_t nr`` size of I/O ”h]”(jæ)�”}”(hŒ ``size_t nr``”h]”jì)�”}”(hjcTh]”hŒ size_t nr”…”�”}”(hjeTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhjaTubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj]Tubj)�”}”(hhh]”hí)�”}”(hŒ size of I/O”h]”hŒ size of I/O”…”�”}”(hj|Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jxTh´M hjyTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jxTh´M hj¯Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj“Subhí)�”}”(hŒ**Description**”h]”jÅ)�”}”(hjžTh]”hŒ Description”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjœTubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj“Subhí)�”}”(hX–Write function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the ``output_lock`` is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer.”h]”(hŒëWrite function of the terminal device. This is serialized with respect to other write callers but not to termios changes, reads and other such events. Since the receive code will echo characters, thus calling driver write methods, the ”…”�”}”(hj´Th²hh³Nh´Nubjì)�”}”(hŒ``output_lock``”h]”hŒ output_lock”…”�”}”(hj¼Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jëhj´TubhŒœ is used in the output processing functions called here as well as in the echo processing function to protect the column state and space left in the buffer.”…”�”}”(hj´Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj“Subhí)�”}”(hŒ7This code must be sure never to sleep through a hangup.”h]”hŒ7This code must be sure never to sleep through a hangup.”…”�”}”(hjÕTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hj“SubjÛ)�”}”(hhh]”jà)�”}”(hŒ�Locking: output_lock to protect column state and space left (note that the process_output*() functions take this lock themselves)”h]”(jæ)�”}”(hŒ;Locking: output_lock to protect column state and space left”h]”hŒ;Locking: output_lock to protect column state and space left”…”�”}”(hjëTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hjçTubj)�”}”(hhh]”hí)�”}”(hŒE(note that the process_output*() functions take this lock themselves)”h]”hŒE(note that the process_output*() functions take this lock themselves)”…”�”}”(hjýTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´M hjúTubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jßh³jùTh´M hjäTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÚhj“Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jºhjfh²hh³Nh´Nubj‹)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j—Œn_tty_poll (C function)”Œ c.n_tty_poll”hNt”auh1jŠhjfh²hh³Nh´Nubjœ)�”}”(hhh]”(j¡)�”}”(hŒQ__poll_t n_tty_poll (struct tty_struct *tty, struct file *file, poll_table *wait)”h]”j§)�”}”(hŒP__poll_t n_tty_poll(struct tty_struct *tty, struct file *file, poll_table *wait)”h]”(h)�”}”(hhh]”jÖ)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hjAUh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj>Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”jCUŒmodname”NŒ classname”Nj7j:)�”}”j=]”j@)�”}”j3Œ n_tty_poll”sbŒ c.n_tty_poll”†”asbuh1hhj:Uh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/driver-api/tty/n_tty:21: ./drivers/tty/n_tty.c”h´Mt ubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcUh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hj:Uh²hh³jbUh´Mt ubjÐ)�”}”(hŒ n_tty_poll”h]”jÖ)�”}”(hj_Uh]”hŒ n_tty_poll”…”�”}”(hjuUh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjqUubah}”(h]”h ]”(jéjêeh"]”h$]”h&]”hÅhÆuh1jÏhj:Uh²hh³jbUh´Mt ubjï)�”}”(hŒ=(struct tty_struct *tty, struct file *file, poll_table *wait)”h]”(jõ)�”}”(hŒstruct tty_struct *tty”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjŒUubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjŒUubh)�”}”(hhh]”jÖ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj®Uh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhj«Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j°UŒmodname”NŒ classname”Nj7j:)�”}”j=]”j]UŒ c.n_tty_poll”†”asbuh1hhjŒUubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌUh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjŒUubjT)�”}”(hjWh]”hŒ*”…”�”}”(hjÚUh²hh³Nh´Nubah}”(h]”h ]”j`ah"]”h$]”h&]”uh1jShjŒUubjÖ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjçUh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjŒUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jôhjˆUubjõ)�”}”(hŒstruct file *file”h]”(jû)�”}”(hjþh]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhjüUubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Vh²hh³Nh´Nubah}”(h]”h ]”jËah"]”h$]”h&]”uh1j¾hjüUubh)�”}”(hhh]”jÖ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jâah"]”h$]”h&]”uh1jÕhjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j1Œreftype”j3Œ reftarget”j VŒmodname”NŒ classname”Nj7j:)�”}”j=]”j]UŒ c.n_tty_poll”†”asbuh1hhjüUubj¿)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj9jcjjXj$uŒ nametypes”}”(jX‰j>‰jc‰jX‰uh}”(jXhÊj9hßjjxj™j¢j$jfjƒjˆjÐjÕjQjVj× jÜ jÍ jÒ j° jµ jjjHjMjjjWj\jujzjWj\jXj]jÙjÞjZ j_ jâ"jç"j%j%jf'jk'jÁ(jÆ(j%+j*+jg-jl-jZ/j_/j1j 1ji3jn3j6j 6jS8jX8j =j=jm?jr?jî@jó@joBjtBjFj$FjàIjåIj·Lj¼LjoQjtQj1Uj6UhühójjuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jNXKs…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.