€•Œ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/tty_driver”Œ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/tty_driver”Œ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/tty_driver”Œ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/tty_driver”Œ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/tty_driver”Œ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/tty_driver”Œ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/tty_driver”Œ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³ŒG/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒTTY Driver and TTY Operations”h]”hŒTTY Driver and TTY Operations”…”�”}”(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Œ Allocation”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œ allocation”uh1hñhhîubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhhéubhã)�”}”(hhh]”hè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒTTY Driver Flags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œtty-driver-flags”uh1hñhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hâhhéubeh}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”(hí)�”}”(hhh]”hò)�”}”(hhh]”hŒ Registration”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œ registration”uh1hñhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj:ubhã)�”}”(hhh]”(hè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒRegistering Devices”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œregistering-devices”uh1hñhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjVubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒLinking Devices to Ports”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œlinking-devices-to-ports”uh1hñhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒTTY Driver Reference”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œtty-driver-reference”uh1hñhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒTTY Operations Reference”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œtty-operations-reference”uh1hñhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjËubah}”(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É)�”}”(hhh]”(hÎ)�”}”(hŒ Allocation”h]”hŒ Allocation”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”hüuh1hÍhjýh²hh³hÇh´K ubhí)�”}”(hX#The first thing a driver needs to do is to allocate a struct tty_driver. This is done by tty_alloc_driver() (or __tty_alloc_driver()). Next, the newly allocated structure is filled with information. See `TTY Driver Reference`_ at the end of this document on what actually shall be filled in.”h]”(hŒËThe first thing a driver needs to do is to allocate a struct tty_driver. This is done by tty_alloc_driver() (or __tty_alloc_driver()). Next, the newly allocated structure is filled with information. See ”…”�”}”(hjh²hh³Nh´Nubhò)�”}”(hŒ`TTY Driver Reference`_”h]”hŒTTY Driver Reference”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒTTY Driver Reference”jj¾uh1hñhjŒresolved”KubhŒA at the end of this document on what actually shall be filled in.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K hjýh²hubhí)�”}”(hŒ·The allocation routines expect a number of devices the driver can handle at most and flags. Flags are those starting ``TTY_DRIVER_`` listed and described in `TTY Driver Flags`_ below.”h]”(hŒuThe allocation routines expect a number of devices the driver can handle at most and flags. Flags are those starting ”…”�”}”(hj2h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``TTY_DRIVER_``”h]”hŒ TTY_DRIVER_”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj2ubhŒ listed and described in ”…”�”}”(hj2h²hh³Nh´Nubhò)�”}”(hŒ`TTY Driver Flags`_”h]”hŒTTY Driver Flags”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒTTY Driver Flags”jj!uh1hñhj2j'KubhŒ below.”…”�”}”(hj2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´Khjýh²hubhí)�”}”(hŒ¢When the driver is about to be freed, tty_driver_kref_put() is called on that. It will decrements the reference count and if it reaches zero, the driver is freed.”h]”hŒ¢When the driver is about to be freed, tty_driver_kref_put() is called on that. It will decrements the reference count and if it reaches zero, the driver is freed.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´Khjýh²hubhí)�”}”(hŒWFor reference, both allocation and deallocation functions are explained here in detail:”h]”hŒWFor reference, both allocation and deallocation functions are explained here in detail:”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´Khjýh²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œtty_alloc_driver (C macro)”Œc.tty_alloc_driver”hNt”auh1j„hjýh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒtty_alloc_driver”h]”hŒdesc_signature_line”“”)�”}”(hŒtty_alloc_driver”h]”hŒ desc_name”“”)�”}”(hŒtty_alloc_driver”h]”hŒ desc_sig_name”“”)�”}”(hjžh]”hŒtty_alloc_driver”…”�”}”(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³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MEubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j Œsphinx_line_type”Œ declarator”hjœh²hh³jÄh´MEubah}”(h]”j“ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jšh³jÄh´MEhj—h²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÙhj—h²hh³jÄh´MEubeh}”(h]”h ]”(Œc”Œmacro”eh"]”h$]”h&]”Œdomain”jçŒobjtype”jèŒdesctype”jèŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j•h²hhjýh³Nh´Nubhí)�”}”(hŒ#``tty_alloc_driver (lines, flags)``”h]”j;)�”}”(hjôh]”hŒtty_alloc_driver (lines, flags)”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MGhjýh²hubhŒ block_quote”“”)�”}”(hŒallocate tty driver ”h]”hí)�”}”(hŒallocate tty driver”h]”hŒallocate tty driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MEhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j h³jh´MEhjýh²hubhŒ container”“”)�”}”(hŒã**Parameters** ``lines`` count of lines this driver can handle at most ``flags`` some of enum tty_driver_flag, will be set in driver->flags **Return** struct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”h]”(hí)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj-h]”hŒ Parameters”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MIhj'ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ8``lines`` count of lines this driver can handle at most ”h]”(hŒterm”“”)�”}”(hŒ ``lines``”h]”j;)�”}”(hjTh]”hŒlines”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MFhjLubhŒ definition”“”)�”}”(hhh]”hí)�”}”(hŒ-count of lines this driver can handle at most”h]”hŒ-count of lines this driver can handle at most”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jih´MFhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jih´MFhjGubjK)�”}”(hŒE``flags`` some of enum tty_driver_flag, will be set in driver->flags ”h]”(jQ)�”}”(hŒ ``flags``”h]”j;)�”}”(hj�h]”hŒflags”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MGhj‰ubjk)�”}”(hhh]”hí)�”}”(hŒ:some of enum tty_driver_flag, will be set in driver->flags”h]”hŒ:some of enum tty_driver_flag, will be set in driver->flags”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¤h´MGhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j¤h´MGhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhj'ubhí)�”}”(hŒ **Return**”h]”j0)�”}”(hjÊh]”hŒReturn”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MIhj'ubhí)�”}”(hŒDstruct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”h]”hŒDstruct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:28: ./include/linux/tty_driver.h”h´MIhj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hjýh²hh³Nh´Nubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ__tty_alloc_driver (C function)”Œc.__tty_alloc_driver”hNt”auh1j„hjýh²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒfstruct tty_driver * __tty_alloc_driver (unsigned int lines, struct module *owner, unsigned long flags)”h]”j¡)�”}”(hŒdstruct tty_driver *__tty_alloc_driver(unsigned int lines, struct module *owner, unsigned long flags)”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jhj h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.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)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”Œ identifier”Œ reftarget”j7Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jPŒ ASTIdentifier”“”)�”}”jKŒ__tty_alloc_driver”sbŒc.__tty_alloc_driver”†”asbuh1hhj h²hh³j h´Mï ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj h²hh³j h´Mï ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jlhj h²hh³j h´Mï ubj§)�”}”(hŒ__tty_alloc_driver”h]”j­)�”}”(hj[h]”hŒ__tty_alloc_driver”…”�”}”(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ï ubhŒdesc_parameterlist”“”)�”}”(hŒ?(unsigned int lines, struct module *owner, unsigned long flags)”h]”(hŒdesc_parameter”“”)�”}”(hŒunsigned int lines”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”Œkt”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Œlines”h]”hŒlines”…”�”}”(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 module *owner”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjðubh)�”}”(hhh]”j­)�”}”(hŒmodule”h]”hŒmodule”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jŒmodname”NŒ classname”NjOjR)�”}”jU]”jYŒc.__tty_alloc_driver”†”asbuh1hhjðubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjðubjm)�”}”(hjph]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjðubj­)�”}”(hŒowner”h]”hŒowner”…”�”}”(hjKh²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 long flags”h]”(j¡)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hj`ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj`ubj¡)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Œflags”h]”hŒflags”…”�”}”(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Í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Œallocate tty driver”h]”hŒallocate tty driver”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mï hjÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjh²hh³j h´Mï ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjÞjîjÞjï‰jð‰jñ‰uh1j•h²hhjýh³Nh´Nubj&)�”}”(hX§**Parameters** ``unsigned int lines`` count of lines this driver can handle at most ``struct module *owner`` module which is responsible for this driver ``unsigned long flags`` some of enum tty_driver_flag, will be set in driver->flags **Description** This should not be called directly, tty_alloc_driver() should be used instead. **Return** struct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hjèh]”hŒ Parameters”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mó hjâubjF)�”}”(hhh]”(jK)�”}”(hŒE``unsigned int lines`` count of lines this driver can handle at most ”h]”(jQ)�”}”(hŒ``unsigned int lines``”h]”j;)�”}”(hjh]”hŒunsigned int lines”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mð hjubjk)�”}”(hhh]”hí)�”}”(hŒ-count of lines this driver can handle at most”h]”hŒ-count of lines this driver can handle at most”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jh´Mð hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jh´Mð hjþubjK)�”}”(hŒE``struct module *owner`` module which is responsible for this driver ”h]”(jQ)�”}”(hŒ``struct module *owner``”h]”j;)�”}”(hj@h]”hŒstruct module *owner”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mñ hj:ubjk)�”}”(hhh]”hí)�”}”(hŒ+module which is responsible for this driver”h]”hŒ+module which is responsible for this driver”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jUh´Mñ hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jUh´Mñ hjþubjK)�”}”(hŒS``unsigned long flags`` some of enum tty_driver_flag, will be set in driver->flags ”h]”(jQ)�”}”(hŒ``unsigned long flags``”h]”j;)�”}”(hjyh]”hŒunsigned long flags”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mò hjsubjk)�”}”(hhh]”hí)�”}”(hŒ:some of enum tty_driver_flag, will be set in driver->flags”h]”hŒ:some of enum tty_driver_flag, will be set in driver->flags”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŽh´Mò hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jŽh´Mò hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjâubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hj´h]”hŒ Description”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mô hjâubhí)�”}”(hŒNThis should not be called directly, tty_alloc_driver() should be used instead.”h]”hŒNThis should not be called directly, tty_alloc_driver() should be used instead.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mó hjâubhí)�”}”(hŒ **Return**”h]”j0)�”}”(hjÛh]”hŒReturn”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´Mö hjâubhí)�”}”(hŒDstruct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”h]”hŒDstruct tty_driver or a PTR-encoded error (use IS_ERR() and friends).”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´M÷ hjâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hjýh²hh³Nh´Nubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ tty_driver_kref_put (C function)”Œc.tty_driver_kref_put”hNt”auh1j„hjýh²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒ4void tty_driver_kref_put (struct tty_driver *driver)”h]”j¡)�”}”(hŒ3void tty_driver_kref_put(struct tty_driver *driver)”h]”(j¡)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hjh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´MK ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjh²hh³j.h´MK ubj§)�”}”(hŒtty_driver_kref_put”h]”j­)�”}”(hŒtty_driver_kref_put”h]”hŒtty_driver_kref_put”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj=ubah}”(h]”h ]”(j¿jÀeh"]”h$]”h&]”hÅhÆuh1j¦hjh²hh³j.h´MK ubj•)�”}”(hŒ(struct tty_driver *driver)”h]”j›)�”}”(hŒstruct tty_driver *driver”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjYubh)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j}Œmodname”NŒ classname”NjOjR)�”}”jU]”jX)�”}”jKjCsbŒc.tty_driver_kref_put”†”asbuh1hhjYubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjYubjm)�”}”(hjph]”hŒ*”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjYubj­)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjUubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjh²hh³j.h´MK ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhjh²hh³j.h´MK ubah}”(h]”jah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³j.h´MK hjh²hubjÚ)�”}”(hhh]”hí)�”}”(hŒ drop a reference to a tty driver”h]”hŒ drop a reference to a tty driver”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´MK hjÝh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjh²hh³j.h´MK ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjøjîjøjï‰jð‰jñ‰uh1j•h²hhjýh³Nh´Nubj&)�”}”(hŒš**Parameters** ``struct tty_driver *driver`` driver of which to drop the reference **Description** The final put will destroy and free up the driver.”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´MO hjüubjF)�”}”(hhh]”jK)�”}”(hŒD``struct tty_driver *driver`` driver of which to drop the reference ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hj!h]”hŒstruct tty_driver *driver”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´ML hjubjk)�”}”(hhh]”hí)�”}”(hŒ%driver of which to drop the reference”h]”hŒ%driver of which to drop the reference”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j6h´ML hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j6h´ML hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jEhjüubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hj\h]”hŒ Description”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´MN hjüubhí)�”}”(hŒ2The final put will destroy and free up the driver.”h]”hŒ2The final put will destroy and free up the driver.”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:30: ./drivers/tty/tty_io.c”h´MM hjüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hjýh²hh³Nh´NubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Driver Flags”h]”hŒTTY Driver Flags”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jjuh1hÍhjˆh²hh³hÇh´K"ubhí)�”}”(hŒ_Here comes the documentation of flags accepted by tty_alloc_driver() (or __tty_alloc_driver()):”h]”hŒ_Here comes the documentation of flags accepted by tty_alloc_driver() (or __tty_alloc_driver()):”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K$hjˆh²hubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œtty_driver_flag (C enum)”Œc.tty_driver_flag”hNt”auh1j„hjˆh²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Nubj–)�”}”(hhh]”(j›)�”}”(hŒtty_driver_flag”h]”j¡)�”}”(hŒenum tty_driver_flag”h]”(j)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½h²hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Kubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj½h²hh³jÏh´Kubj§)�”}”(hŒtty_driver_flag”h]”j­)�”}”(hj»h]”hŒtty_driver_flag”…”�”}”(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´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhj¹h²hh³jÏh´Kubah}”(h]”j³ah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³jÏh´Khj¶h²hubjÚ)�”}”(hhh]”hã)�”}”(hhh]”hè)�”}”(hŒTTY Driver Flags”h]”hí)�”}”(hj h]”hŒTTY Driver Flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Khj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj h²hh³j h´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hâh³j h´Khj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhj¶h²hh³jÏh´Kubeh}”(h]”h ]”(jçŒenum”eh"]”h$]”h&]”jìjçjíj0 jîj0 jï‰jð‰jñ‰uh1j•h²hhjˆh³jµh´Nubj&)�”}”(hXû**Constants** ``TTY_DRIVER_INSTALLED`` Whether this driver was succesfully installed. This is a tty internal flag. Do not touch. ``TTY_DRIVER_RESET_TERMIOS`` Requests the tty layer to reset the termios setting when the last process has closed the device. Used for PTYs, in particular. ``TTY_DRIVER_REAL_RAW`` Indicates that the driver will guarantee not to set any special character handling flags if this is set for the tty: ``TTY_DRIVER_DYNAMIC_DEV`` The individual tty devices need to be registered with a call to tty_register_device() when the device is found in the system and unregistered with a call to tty_unregister_device() so the devices will be show up properly in sysfs. If not set, all :c:type:`tty_driver.num ` entries will be created by the tty core in sysfs when tty_register_driver() is called. This is to be used by drivers that have tty devices that can appear and disappear while the main tty driver is registered with the tty core. ``TTY_DRIVER_DEVPTS_MEM`` Don't use the standard arrays (:c:type:`tty_driver.ttys ` and :c:type:`tty_driver.termios `), instead use dynamic memory keyed through the devpts filesystem. This is only applicable to the PTY driver. ``TTY_DRIVER_HARDWARE_BREAK`` Hardware handles break signals. Pass the requested timeout to the :c:type:`tty_operations.break_ctl ` instead of using a simple on/off interface. ``TTY_DRIVER_DYNAMIC_ALLOC`` Do not allocate structures which are needed per line for this driver (:c:type:`tty_driver.ports `) as it would waste memory. The driver will take care. This is only applicable to the PTY driver. ``TTY_DRIVER_UNNUMBERED_NODE`` Do not create numbered ``/dev`` nodes. For example, create ``/dev/ttyprintk`` and not ``/dev/ttyprintk0``. Applicable only when a driver for a single tty device is being allocated. ``TTY_DRIVER_NO_WORKQUEUE`` Do not create workqueue when tty_register_driver(). Whenever set, flip buffer workqueue can be set by tty_port_link_wq() for every port. ``TTY_DRIVER_RESET_SAVED_TERMIOS`` Reset any saved termios settings on device registration when reusing a minor number. Must only be set by drivers that guarantee that the minor number is no longer in use.”h]”(hí)�”}”(hŒ **Constants**”h]”j0)�”}”(hj: h]”hŒ Constants”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Khj4 ubjF)�”}”(hhh]”(jK)�”}”(hŒs``TTY_DRIVER_INSTALLED`` Whether this driver was succesfully installed. This is a tty internal flag. Do not touch. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_INSTALLED``”h]”j;)�”}”(hjY h]”hŒTTY_DRIVER_INSTALLED”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´KhjS ubjk)�”}”(hhh]”hí)�”}”(hŒYWhether this driver was succesfully installed. This is a tty internal flag. Do not touch.”h]”hŒYWhether this driver was succesfully installed. This is a tty internal flag. Do not touch.”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Khjo ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjS ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jn h´KhjP ubjK)�”}”(hŒœ``TTY_DRIVER_RESET_TERMIOS`` Requests the tty layer to reset the termios setting when the last process has closed the device. Used for PTYs, in particular. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_RESET_TERMIOS``”h]”j;)�”}”(hj“ h]”hŒTTY_DRIVER_RESET_TERMIOS”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj‘ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K hj� ubjk)�”}”(hhh]”hí)�”}”(hŒ~Requests the tty layer to reset the termios setting when the last process has closed the device. Used for PTYs, in particular.”h]”hŒ~Requests the tty layer to reset the termios setting when the last process has closed the device. Used for PTYs, in particular.”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´Khj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j¨ h´K hjP ubjK)�”}”(hŒ�``TTY_DRIVER_REAL_RAW`` Indicates that the driver will guarantee not to set any special character handling flags if this is set for the tty: ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_REAL_RAW``”h]”j;)�”}”(hjÍ h]”hŒTTY_DRIVER_REAL_RAW”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjË ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K$hjÇ ubjk)�”}”(hhh]”hí)�”}”(hŒtIndicates that the driver will guarantee not to set any special character handling flags if this is set for the tty:”h]”hŒtIndicates that the driver will guarantee not to set any special character handling flags if this is set for the tty:”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K#hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jâ h´K$hjP ubjK)�”}”(hX``TTY_DRIVER_DYNAMIC_DEV`` The individual tty devices need to be registered with a call to tty_register_device() when the device is found in the system and unregistered with a call to tty_unregister_device() so the devices will be show up properly in sysfs. If not set, all :c:type:`tty_driver.num ` entries will be created by the tty core in sysfs when tty_register_driver() is called. This is to be used by drivers that have tty devices that can appear and disappear while the main tty driver is registered with the tty core. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_DYNAMIC_DEV``”h]”j;)�”}”(hj h]”hŒTTY_DRIVER_DYNAMIC_DEV”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K.hj ubjk)�”}”(hhh]”hí)�”}”(hXThe individual tty devices need to be registered with a call to tty_register_device() when the device is found in the system and unregistered with a call to tty_unregister_device() so the devices will be show up properly in sysfs. If not set, all :c:type:`tty_driver.num ` entries will be created by the tty core in sysfs when tty_register_driver() is called. This is to be used by drivers that have tty devices that can appear and disappear while the main tty driver is registered with the tty core.”h]”(hŒøThe individual tty devices need to be registered with a call to tty_register_device() when the device is found in the system and unregistered with a call to tty_unregister_device() so the devices will be show up properly in sysfs. If not set, all ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ%:c:type:`tty_driver.num `”h]”j;)�”}”(hj* h]”hŒtty_driver.num”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”(Œxref”jçŒc-type”eh"]”h$]”h&]”uh1j:hj( ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/tty/tty_driver”Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjR)�”}”jU]”sbŒ reftarget”Œ tty_driver”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K'hj ubhŒå entries will be created by the tty core in sysfs when tty_register_driver() is called. This is to be used by drivers that have tty devices that can appear and disappear while the main tty driver is registered with the tty core.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jM h´K'hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j h´K.hjP ubjK)�”}”(hŒû``TTY_DRIVER_DEVPTS_MEM`` Don't use the standard arrays (:c:type:`tty_driver.ttys ` and :c:type:`tty_driver.termios `), instead use dynamic memory keyed through the devpts filesystem. This is only applicable to the PTY driver. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_DEVPTS_MEM``”h]”j;)�”}”(hjj h]”hŒTTY_DRIVER_DEVPTS_MEM”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K3hjd ubjk)�”}”(hhh]”hí)�”}”(hŒàDon't use the standard arrays (:c:type:`tty_driver.ttys ` and :c:type:`tty_driver.termios `), instead use dynamic memory keyed through the devpts filesystem. This is only applicable to the PTY driver.”h]”(hŒ!Don’t use the standard arrays (”…”�”}”(hjƒ h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`tty_driver.ttys `”h]”j;)�”}”(hj� h]”hŒtty_driver.ttys”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj‹ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_driver”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K1hjƒ ubhŒ and ”…”�”}”(hjƒ h²hh³Nh´Nubh)�”}”(hŒ):c:type:`tty_driver.termios `”h]”j;)�”}”(hj± h]”hŒtty_driver.termios”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj¯ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_driver”uh1hh³jª h´K1hjƒ ubhŒm), instead use dynamic memory keyed through the devpts filesystem. This is only applicable to the PTY driver.”…”�”}”(hjƒ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jª h´K1hj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjd ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j h´K3hjP ubjK)�”}”(hŒÀ``TTY_DRIVER_HARDWARE_BREAK`` Hardware handles break signals. Pass the requested timeout to the :c:type:`tty_operations.break_ctl ` instead of using a simple on/off interface. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_HARDWARE_BREAK``”h]”j;)�”}”(hjê h]”hŒTTY_DRIVER_HARDWARE_BREAK”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K7hjä ubjk)�”}”(hhh]”hí)�”}”(hŒ¡Hardware handles break signals. Pass the requested timeout to the :c:type:`tty_operations.break_ctl ` instead of using a simple on/off interface.”h]”(hŒBHardware handles break signals. Pass the requested timeout to the ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ3:c:type:`tty_operations.break_ctl `”h]”j;)�”}”(hj h]”hŒtty_operations.break_ctl”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œtty_operations”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K6hj ubhŒ, instead of using a simple on/off interface.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j* h´K6hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjä ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÿ h´K7hjP ubjK)�”}”(hŒì``TTY_DRIVER_DYNAMIC_ALLOC`` Do not allocate structures which are needed per line for this driver (:c:type:`tty_driver.ports `) as it would waste memory. The driver will take care. This is only applicable to the PTY driver. ”h]”(jQ)�”}”(hŒ``TTY_DRIVER_DYNAMIC_ALLOC``”h]”j;)�”}”(hjG h]”hŒTTY_DRIVER_DYNAMIC_ALLOC”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjE ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K`) as it would waste memory. The driver will take care. This is only applicable to the PTY driver.”h]”(hŒFDo not allocate structures which are needed per line for this driver (”…”�”}”(hj` h²hh³Nh´Nubh)�”}”(hŒ':c:type:`tty_driver.ports `”h]”j;)�”}”(hjj h]”hŒtty_driver.ports”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hjh ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_driver”uh1hh³Œd/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:39: ./include/linux/tty_driver.h”h´K:hj` ubhŒa) as it would waste memory. The driver will take care. This is only applicable to the PTY driver.”…”�”}”(hj` h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‡ h´K:hj] ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjA ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j\ h´Kh²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hj:ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj:ubj­)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjZh²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 device *device”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjoubh)�”}”(hhh]”j­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j“Œmodname”NŒ classname”NjOjR)�”}”jU]”j�Œc.tty_register_device”†”asbuh1hhjoubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjoubjm)�”}”(hjph]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjoubj­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjÆube•_h}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j”hjPh²hh³jah´Ma ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhjLh²hh³jah´Ma ubah}”(h]”jGah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³jah´Ma hjIh²hubjÚ)�”}”(hhh]”hí)�”}”(hŒregister a tty device”h]”hŒregister a tty device”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Ma hjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjIh²hh³jah´Ma ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíj jîj jï‰jð‰jñ‰uh1j•h²hhj]h³Nh´Nubj&)�”}”(hXÀ**Parameters** ``struct tty_driver *driver`` the tty driver that describes the tty device ``unsigned index`` the index in the tty driver for this tty device ``struct device *device`` a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to NULL safely. **Description** This call is required to be made to register an individual tty device if the tty driver's flags have the ``TTY_DRIVER_DYNAMIC_DEV`` bit set. If that bit is not set, this function should not be called by a tty driver. Locking: ?? **Return** A pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Me hjubjF)�”}”(hhh]”(jK)�”}”(hŒK``struct tty_driver *driver`` the tty driver that describes the tty device ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hj5h]”hŒstruct tty_driver *driver”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mb hj/ubjk)�”}”(hhh]”hí)�”}”(hŒ,the tty driver that describes the tty device”h]”hŒ,the tty driver that describes the tty device”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jJh´Mb hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jJh´Mb hj,ubjK)�”}”(hŒC``unsigned index`` the index in the tty driver for this tty device ”h]”(jQ)�”}”(hŒ``unsigned index``”h]”j;)�”}”(hjnh]”hŒunsigned index”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mc hjhubjk)�”}”(hhh]”hí)�”}”(hŒ/the index in the tty driver for this tty device”h]”hŒ/the index in the tty driver for this tty device”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jƒh´Mc hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jƒh´Mc hj,ubjK)�”}”(hŒÀ``struct device *device`` a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to NULL safely. ”h]”(jQ)�”}”(hŒ``struct device *device``”h]”j;)�”}”(hj§h]”hŒstruct device *device”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mf hj¡ubjk)�”}”(hhh]”hí)�”}”(hŒ¥a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to NULL safely.”h]”hŒ¥a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to NULL safely.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Md hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j¼h´Mf hj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hjãh]”hŒ Description”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mh hjubhí)�”}”(hŒÙThis call is required to be made to register an individual tty device if the tty driver's flags have the ``TTY_DRIVER_DYNAMIC_DEV`` bit set. If that bit is not set, this function should not be called by a tty driver.”h]”(hŒkThis call is required to be made to register an individual tty device if the tty driver’s flags have the ”…”�”}”(hjùh²hh³Nh´Nubj;)�”}”(hŒ``TTY_DRIVER_DYNAMIC_DEV``”h]”hŒTTY_DRIVER_DYNAMIC_DEV”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjùubhŒV bit set. If that bit is not set, this function should not be called by a tty driver.”…”�”}”(hjùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mg hjubhí)�”}”(hŒ Locking: ??”h]”hŒ Locking: ??”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Ml hjubhí)�”}”(hŒ **Return**”h]”j0)�”}”(hj+h]”hŒReturn”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mn hjubhí)�”}”(hŒPA pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”h]”hŒPA pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mo hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hj]h²hh³Nh´Nubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ%tty_register_device_attr (C function)”Œc.tty_register_device_attr”hNt”auh1j„hj]h²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒ£struct device * tty_register_device_attr (struct tty_driver *driver, unsigned index, struct device *device, void *drvdata, const struct attribute_group **attr_grp)”h]”j¡)�”}”(hŒ¡struct device *tty_register_device_attr(struct tty_driver *driver, unsigned index, struct device *device, void *drvdata, const struct attribute_group **attr_grp)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M€ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjlh²hh³j}h´M€ ubh)�”}”(hhh]”j­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j‘Œmodname”NŒ classname”NjOjR)�”}”jU]”jX)�”}”jKŒtty_register_device_attr”sbŒc.tty_register_device_attr”†”asbuh1hhjlh²hh³j}h´M€ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjlh²hh³j}h´M€ ubjm)�”}”(hjph]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjlh²hh³j}h´M€ ubj§)�”}”(hŒtty_register_device_attr”h]”j­)�”}”(hj­h]”hŒtty_register_device_attr”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjËubah}”(h]”h ]”(j¿jÀeh"]”h$]”h&]”hÅhÆuh1j¦hjlh²hh³j}h´M€ ubj•)�”}”(hŒz(struct tty_driver *driver, unsigned index, struct device *device, void *drvdata, const struct attribute_group **attr_grp)”h]”(j›)�”}”(hŒstruct tty_driver *driver”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjæubh)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j Œmodname”NŒ classname”NjOjR)�”}”jU]”j«Œc.tty_register_device_attr”†”asbuh1hhjæubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjæubjm)�”}”(hjph]”hŒ*”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjæubj­)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjAh²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 index”h]”(j¡)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hjVubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjVubj­)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjâubj›)�”}”(hŒstruct device *device”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj‹ubh)�”}”(hhh]”j­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j¯Œmodname”NŒ classname”NjOjR)�”}”jU]”j«Œc.tty_register_device_attr”†”asbuh1hhj‹ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj‹ubjm)�”}”(hjph]”hŒ*”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj‹ubj­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(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Œ void *drvdata”h]”(j¡)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ûubjm)�”}”(hjph]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjûubj­)�”}”(hŒdrvdata”h]”hŒdrvdata”…”�”}”(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 attribute_group **attr_grp”h]”(j)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj=ubj)�”}”(hjh]”hŒstruct”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj=ubh)�”}”(hhh]”j­)�”}”(hŒattribute_group”h]”hŒattribute_group”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j}Œmodname”NŒ classname”NjOjR)�”}”jU]”j«Œc.tty_register_device_attr”†”asbuh1hhj=ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj=ubjm)�”}”(hjph]”hŒ*”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj=ubjm)�”}”(hjph]”hŒ*”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj=ubj­)�”}”(hŒattr_grp”h]”hŒattr_grp”…”�”}”(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”hjlh²hh³j}h´M€ ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhjhh²hh³j}h´M€ ubah}”(h]”jcah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³j}h´M€ hjeh²hubjÚ)�”}”(hhh]”hí)�”}”(hŒregister a tty device”h]”hŒregister a tty device”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M€ hjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjeh²hh³j}h´M€ ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjjîjjï‰jð‰jñ‰uh1j•h²hhj]h³Nh´Nubj&)�”}”(hXM**Parameters** ``struct tty_driver *driver`` the tty driver that describes the tty device ``unsigned index`` the index in the tty driver for this tty device ``struct device *device`` a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to ``NULL`` safely. ``void *drvdata`` Driver data to be set to device. ``const struct attribute_group **attr_grp`` Attribute group to be set on device. **Description** This call is required to be made to register an individual tty device if the tty driver's flags have the ``TTY_DRIVER_DYNAMIC_DEV`` bit set. If that bit is not set, this function should not be called by a tty driver. Locking: ?? **Return** A pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hj h]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M„ hjubjF)�”}”(hhh]”(jK)�”}”(hŒK``struct tty_driver *driver`` the tty driver that describes the tty device ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hj,h]”hŒstruct tty_driver *driver”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M� hj&ubjk)�”}”(hhh]”hí)�”}”(hŒ,the tty driver that describes the tty device”h]”hŒ,the tty driver that describes the tty device”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jAh´M� hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jAh´M� hj#ubjK)�”}”(hŒC``unsigned index`` the index in the tty driver for this tty device ”h]”(jQ)�”}”(hŒ``unsigned index``”h]”j;)�”}”(hjeh]”hŒunsigned index”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M‚ hj_ubjk)�”}”(hhh]”hí)�”}”(hŒ/the index in the tty driver for this tty device”h]”hŒ/the index in the tty driver for this tty device”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jzh´M‚ hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jzh´M‚ hj#ubjK)�”}”(hŒÄ``struct device *device`` a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to ``NULL`` safely. ”h]”(jQ)�”}”(hŒ``struct device *device``”h]”j;)�”}”(hjžh]”hŒstruct device *device”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M… hj˜ubjk)�”}”(hhh]”hí)�”}”(hŒ©a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to ``NULL`` safely.”h]”(hŒ™a struct device that is associated with this tty device. This field is optional, if there is no known struct device for this tty device it can be set to ”…”�”}”(hj·h²hh³Nh´Nubj;)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj·ubhŒ safely.”…”�”}”(hj·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mƒ hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j³h´M… hj#ubjK)�”}”(hŒ3``void *drvdata`` Driver data to be set to device. ”h]”(jQ)�”}”(hŒ``void *drvdata``”h]”j;)�”}”(hjêh]”hŒ void *drvdata”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M† hjäubjk)�”}”(hhh]”hí)�”}”(hŒ Driver data to be set to device.”h]”hŒ Driver data to be set to device.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÿh´M† hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÿh´M† hj#ubjK)�”}”(hŒQ``const struct attribute_group **attr_grp`` Attribute group to be set on device. ”h]”(jQ)�”}”(hŒ+``const struct attribute_group **attr_grp``”h]”j;)�”}”(hj#h]”hŒ'const struct attribute_group **attr_grp”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M‡ hjubjk)�”}”(hhh]”hí)�”}”(hŒ$Attribute group to be set on device.”h]”hŒ$Attribute group to be set on device.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j8h´M‡ hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j8h´M‡ hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hj^h]”hŒ Description”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M‰ hjubhí)�”}”(hŒØThis call is required to be made to register an individual tty device if the tty driver's flags have the ``TTY_DRIVER_DYNAMIC_DEV`` bit set. If that bit is not set, this function should not be called by a tty driver.”h]”(hŒkThis call is required to be made to register an individual tty device if the tty driver’s flags have the ”…”�”}”(hjth²hh³Nh´Nubj;)�”}”(hŒ``TTY_DRIVER_DYNAMIC_DEV``”h]”hŒTTY_DRIVER_DYNAMIC_DEV”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjtubhŒU bit set. If that bit is not set, this function should not be called by a tty driver.”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mˆ hjubhí)�”}”(hŒ Locking: ??”h]”hŒ Locking: ??”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MŒ hjubhí)�”}”(hŒ **Return**”h]”j0)�”}”(hj¦h]”hŒReturn”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MŽ hjubhí)�”}”(hŒPA pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”h]”hŒPA pointer to the struct device for this tty device (or ERR_PTR(-EFOO) on error).”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´M� hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hj]h²hh³Nh´Nubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ"tty_unregister_device (C function)”Œc.tty_unregister_device”hNt”auh1j„hj]h²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒFvoid tty_unregister_device (struct tty_driver *driver, unsigned index)”h]”j¡)�”}”(hŒEvoid tty_unregister_device(struct tty_driver *driver, unsigned index)”h]”(j¡)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hjçh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.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Œtty_unregister_device”h]”j­)�”}”(hŒtty_unregister_device”h]”hŒtty_unregister_device”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjubah}”(h]”h ]”(j¿jÀeh"]”h$]”h&]”hÅhÆuh1j¦hjçh²hh³jùh´MÛ ubj•)�”}”(hŒ+(struct tty_driver *driver, unsigned index)”h]”(j›)�”}”(hŒstruct tty_driver *driver”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj$ubh)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jHŒmodname”NŒ classname”NjOjR)�”}”jU]”jX)�”}”jKjsbŒc.tty_unregister_device”†”asbuh1hhj$ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj$ubjm)�”}”(hjph]”hŒ*”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhj$ubj­)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(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 index”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Œindex”h]”hŒindex”…”�”}”(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]”jÞah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³jùh´MÛ hjàh²hubjÚ)�”}”(hhh]”hí)�”}”(hŒunregister a tty device”h]”hŒunregister a tty device”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MÛ hjÝh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjàh²hh³jùh´MÛ ubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjøjîjøjï‰jð‰jñ‰uh1j•h²hhj]h³Nh´Nubj&)�”}”(hXC**Parameters** ``struct tty_driver *driver`` the tty driver that describes the tty device ``unsigned index`` the index in the tty driver for this tty device **Description** If a tty device is registered with a call to tty_register_device() then this function must be called when the tty device is gone. Locking: ??”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mß hjüubjF)�”}”(hhh]”(jK)�”}”(hŒK``struct tty_driver *driver`` the tty driver that describes the tty device ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hj!h]”hŒstruct tty_driver *driver”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MÜ hjubjk)�”}”(hhh]”hí)�”}”(hŒ,the tty driver that describes the tty device”h]”hŒ,the tty driver that describes the tty device”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j6h´MÜ hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j6h´MÜ hjubjK)�”}”(hŒC``unsigned index`` the index in the tty driver for this tty device ”h]”(jQ)�”}”(hŒ``unsigned index``”h]”j;)�”}”(hjZh]”hŒunsigned index”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MÝ hjTubjk)�”}”(hhh]”hí)�”}”(hŒ/the index in the tty driver for this tty device”h]”hŒ/the index in the tty driver for this tty device”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³joh´MÝ hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³joh´MÝ hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjüubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hj•h]”hŒ Description”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Mß hjüubhí)�”}”(hŒ�If a tty device is registered with a call to tty_register_device() then this function must be called when the tty device is gone.”h]”hŒ�If a tty device is registered with a call to tty_register_device() then this function must be called when the tty device is gone.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´MÞ hjüubhí)�”}”(hŒ Locking: ??”h]”hŒ Locking: ??”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:82: ./drivers/tty/tty_io.c”h´Má hjüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hj]h²hh³Nh´Nubeh}”(h]”jnah ]”h"]”Œregistering devices”ah$]”h&]”uh1hÈhj h²hh³hÇh´K:jî Kubj÷ )�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jö h³hÇh´KVhj h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒLinking Devices to Ports”h]”hŒLinking Devices to Ports”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jjŠuh1hÍhjáh²hh³hÇh´KYubhí)�”}”(hX¼As stated earlier, every TTY device shall have a struct tty_port assigned to it. It must be known to the TTY layer at :c:member:`tty_driver.ops.install()` at latest. There are few helpers to *link* the two. Ideally, the driver uses tty_port_register_device() or tty_port_register_device_attr() instead of tty_register_device() and tty_register_device_attr() at the registration time. This way, the driver needs not care about linking later on.”h]”(hŒvAs stated earlier, every TTY device shall have a struct tty_port assigned to it. It must be known to the TTY layer at ”…”�”}”(hjòh²hh³Nh´Nubh)�”}”(hŒ$:c:member:`tty_driver.ops.install()`”h]”j;)�”}”(hjüh]”hŒtty_driver.ops.install()”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-member”eh"]”h$]”h&]”uh1j:hjúubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰jOjH jK Œtty_driver.ops.install()”uh1hh³hÇh´KZhjòubhŒ& at latest. There are few helpers to ”…”�”}”(hjòh²hh³Nh´Nubj. )�”}”(hŒ*link*”h]”hŒlink”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hjòubhŒö the two. Ideally, the driver uses tty_port_register_device() or tty_port_register_device_attr() instead of tty_register_device() and tty_register_device_attr() at the registration time. This way, the driver needs not care about linking later on.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´KZhjáh²hubhí)�”}”(hXtIf that is not possible, the driver still can link the tty_port to a specific index *before* the actual registration by tty_port_link_device(). If it still does not fit, tty_port_install() can be used from the :c:member:`tty_driver.ops.install` hook as a last resort. The last one is dedicated mostly for in-memory devices like PTY where tty_ports are allocated on demand.”h]”(hŒTIf that is not possible, the driver still can link the tty_port to a specific index ”…”�”}”(hj5h²hh³Nh´Nubj. )�”}”(hŒ*before*”h]”hŒbefore”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j- hj5ubhŒv the actual registration by tty_port_link_device(). If it still does not fit, tty_port_install() can be used from the ”…”�”}”(hj5h²hh³Nh´Nubh)�”}”(hŒ":c:member:`tty_driver.ops.install`”h]”j;)�”}”(hjQh]”hŒtty_driver.ops.install”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-member”eh"]”h$]”h&]”uh1j:hjOubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰jOjH jK Œtty_driver.ops.install”uh1hh³hÇh´Kahj5ubhŒ€ hook as a last resort. The last one is dedicated mostly for in-memory devices like PTY where tty_ports are allocated on demand.”…”�”}”(hj5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´Kahjáh²hubhí)�”}”(hŒ)The linking routines are documented here:”h]”hŒ)The linking routines are documented here:”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´Khhjáh²hubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ!tty_port_link_device (C function)”Œc.tty_port_link_device”hNt”auh1j„hjáh²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒ\void tty_port_link_device (struct tty_port *port, struct tty_driver *driver, unsigned index)”h]”j¡)�”}”(hŒ[void tty_port_link_device(struct tty_port *port, struct tty_driver *driver, unsigned index)”h]”(j¡)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j­ah"]”h$]”h&]”uh1j hj›h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´Kxubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj›h²hh³j­h´Kxubj§)�”}”(hŒtty_port_link_device”h]”j­)�”}”(hŒtty_port_link_device”h]”hŒtty_port_link_device”…”�”}”(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´Kxubj•)�”}”(hŒB(struct tty_port *port, struct tty_driver *driver, unsigned index)”h]”(j›)�”}”(hŒstruct tty_port *port”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjØubh)�”}”(hhh]”j­)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jüŒmodname”NŒ classname”NjOjR)�”}”jU]”jX)�”}”jKjÂsbŒc.tty_port_link_device”†”asbuh1hhjØubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjØubjm)�”}”(hjph]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjØubj­)�”}”(hŒport”h]”hŒport”…”�”}”(hj5h²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 tty_driver *driver”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjJubh)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jnŒmodname”NŒ classname”NjOjR)�”}”jU]”jŒc.tty_port_link_device”†”asbuh1hhjJubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjJubjm)�”}”(hjph]”hŒ*”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjJubj­)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjÔubj›)�”}”(hŒunsigned index”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Œindex”h]”hŒindex”…”�”}”(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´Kxubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhj—h²hh³j­h´Kxubah}”(h]”j’ah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³j­h´Kxhj”h²hubjÚ)�”}”(hhh]”hí)�”}”(hŒlink tty and tty_port”h]”hŒlink tty and tty_port”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´Kxhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhj”h²hh³j­h´Kxubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjjîjjï‰jð‰jñ‰uh1j•h²hhjáh³Nh´Nubj&)�”}”(hX¶**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_driver *driver`` tty_driver for this device ``unsigned index`` index of the tty **Description** Provide the tty layer with a link from a tty (specified by **index**) to a tty_port (**port**). Use this only if neither tty_port_register_device() nor tty_port_install() is used in the driver. If used, this has to be called before tty_register_driver().”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hj&h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K|hj ubjF)�”}”(hhh]”(jK)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jQ)�”}”(hŒ``struct tty_port *port``”h]”j;)�”}”(hjEh]”hŒstruct tty_port *port”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´Kyhj?ubjk)�”}”(hhh]”hí)�”}”(hŒtty_port of the device”h]”hŒtty_port of the device”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jZh´Kyhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jZh´Kyhj<ubjK)�”}”(hŒ9``struct tty_driver *driver`` tty_driver for this device ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hj~h]”hŒstruct tty_driver *driver”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´Kzhjxubjk)�”}”(hhh]”hí)�”}”(hŒtty_driver for this device”h]”hŒtty_driver for this device”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j“h´Kzhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j“h´Kzhj<ubjK)�”}”(hŒ$``unsigned index`` index of the tty ”h]”(jQ)�”}”(hŒ``unsigned index``”h]”j;)�”}”(hj·h]”hŒunsigned index”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K{hj±ubjk)�”}”(hhh]”hí)�”}”(hŒindex of the tty”h]”hŒindex of the tty”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÌh´K{hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÌh´K{hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhj ubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hjòh]”hŒ Description”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K}hj ubhí)�”}”(hŒþProvide the tty layer with a link from a tty (specified by **index**) to a tty_port (**port**). Use this only if neither tty_port_register_device() nor tty_port_install() is used in the driver. If used, this has to be called before tty_register_driver().”h]”(hŒ;Provide the tty layer with a link from a tty (specified by ”…”�”}”(hjh²hh³Nh´Nubj0)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubhŒ) to a tty_port (”…”�”}”(hjh²hh³Nh´Nubj0)�”}”(hŒ**port**”h]”hŒport”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjubhŒ¡). Use this only if neither tty_port_register_device() nor tty_port_install() is used in the driver. If used, this has to be called before tty_register_driver().”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K|hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hjáh²hh³Nh´Nubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œ%tty_port_register_device (C function)”Œc.tty_port_register_device”hNt”auh1j„hjáh²hh³Nh´Nubj–)�”}”(hhh]”(j›)�”}”(hŒ‚struct device * tty_port_register_device (struct tty_port *port, struct tty_driver *driver, unsigned index, struct device *device)”h]”j¡)�”}”(hŒ€struct device *tty_port_register_device(struct tty_port *port, struct tty_driver *driver, unsigned index, struct device *device)”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´KŒubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjWh²hh³jhh´KŒubh)�”}”(hhh]”j­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j|Œmodname”NŒ classname”NjOjR)�”}”jU]”jX)�”}”jKŒtty_port_register_device”sbŒc.tty_port_register_device”†”asbuh1hhjWh²hh³jhh´KŒubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjWh²hh³jhh´KŒubjm)�”}”(hjph]”hŒ*”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjWh²hh³jhh´KŒubj§)�”}”(hŒtty_port_register_device”h]”j­)�”}”(hj˜h]”hŒtty_port_register_device”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj¶ubah}”(h]”h ]”(j¿jÀeh"]”h$]”h&]”hÅhÆuh1j¦hjWh²hh³jhh´KŒubj•)�”}”(hŒY(struct tty_port *port, struct tty_driver *driver, unsigned index, struct device *device)”h]”(j›)�”}”(hŒstruct tty_port *port”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÑubh)�”}”(hhh]”j­)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jõŒmodname”NŒ classname”NjOjR)�”}”jU]”j–Œc.tty_port_register_device”†”asbuh1hhjÑubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÑubjm)�”}”(hjph]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjÑubj­)�”}”(hŒport”h]”hŒport”…”�”}”(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 tty_driver *driver”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjAubh)�”}”(hhh]”j­)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”jeŒmodname”NŒ classname”NjOjR)�”}”jU]”j–Œc.tty_port_register_device”†”asbuh1hhjAubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjAubjm)�”}”(hjph]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjAubj­)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jšhjÍubj›)�”}”(hŒunsigned index”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Œindex”h]”hŒindex”…”�”}”(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 device *device”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjæubh)�”}”(hhh]”j­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jçŒreftype”jKŒ reftarget”j Œmodname”NŒ classname”NjOjR)�”}”jU]”j–Œc.tty_port_register_device”†”asbuh1hhjæubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjæubjm)�”}”(hjph]”hŒ*”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”jyah"]”h$]”h&]”uh1jlhjæubj­)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjA 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”hjWh²hh³jhh´KŒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhjSh²hh³jhh´KŒubah}”(h]”jNah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³jhh´KŒhjPh²hubjÚ)�”}”(hhh]”hí)�”}”(hŒregister tty device”h]”hŒregister tty device”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´KŒhjh h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhjPh²hh³jhh´KŒubeh}”(h]”h ]”(jçŒfunction”eh"]”h$]”h&]”jìjçjíjƒ jîjƒ jï‰jð‰jñ‰uh1j•h²hhjáh³Nh´Nubj&)�”}”(hXÆ**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_driver *driver`` tty_driver for this device ``unsigned index`` index of the tty ``struct device *device`` parent if exists, otherwise NULL **Description** It is the same as tty_register_device() except the provided **port** is linked to a concrete tty specified by **index**. Use this or tty_port_install() (or both). Call tty_port_link_device() as a last resort.”h]”(hí)�”}”(hŒ**Parameters**”h]”j0)�”}”(hj� h]”hŒ Parameters”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K�hj‡ ubjF)�”}”(hhh]”(jK)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jQ)�”}”(hŒ``struct tty_port *port``”h]”j;)�”}”(hj¬ h]”hŒstruct tty_port *port”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K�hj¦ ubjk)�”}”(hhh]”hí)�”}”(hŒtty_port of the device”h]”hŒtty_port of the device”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÁ h´K�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj¦ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÁ h´K�hj£ ubjK)�”}”(hŒ9``struct tty_driver *driver`` tty_driver for this device ”h]”(jQ)�”}”(hŒ``struct tty_driver *driver``”h]”j;)�”}”(hjå h]”hŒstruct tty_driver *driver”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´KŽhjß ubjk)�”}”(hhh]”hí)�”}”(hŒtty_driver for this device”h]”hŒtty_driver for this device”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jú h´KŽhjû ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjß ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jú h´KŽhj£ ubjK)�”}”(hŒ$``unsigned index`` index of the tty ”h]”(jQ)�”}”(hŒ``unsigned index``”h]”j;)�”}”(hj!h]”hŒunsigned index”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K�hj!ubjk)�”}”(hhh]”hí)�”}”(hŒindex of the tty”h]”hŒindex of the tty”…”�”}”(hj7!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j3!h´K�hj4!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j3!h´K�hj£ ubjK)�”}”(hŒ;``struct device *device`` parent if exists, otherwise NULL ”h]”(jQ)�”}”(hŒ``struct device *device``”h]”j;)�”}”(hjW!h]”hŒstruct device *device”…”�”}”(hjY!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjU!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K�hjQ!ubjk)�”}”(hhh]”hí)�”}”(hŒ parent if exists, otherwise NULL”h]”hŒ parent if exists, otherwise NULL”…”�”}”(hjp!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jl!h´K�hjm!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjQ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jl!h´K�hj£ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhj‡ ubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hj’!h]”hŒ Description”…”�”}”(hj”!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj�!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:106: ./drivers/tty/tty_port.c”h´K’hj‡ ubhí)�”}”(hŒÐIt is the same as tty_register_device() except the provided **port** is linked to a concrete tty specified by **index**. Use this or tty_port_install() (or both). Call tty_port_link_device() as a last resort.”h]”(hŒ`, set by tty_standard_install() ``ports`` array of :c:type:`struct tty_port `; can be set during initialization by tty_port_link_device() and similar ``termios`` storage for termios at each TTY close for the next open ``driver_state`` pointer to driver's arbitrary data ``ops`` driver hooks for TTYs. Set them using tty_set_operations(). Use :c:type:`struct tty_port ` helpers in them as much as possible. ``tty_drivers`` used internally to link tty_drivers together”•æ h]”(hí)�”}”(hŒ**Definition**::”h]”(j0)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mùhj�'ubhŒ literal_block”“”)�”}”(hX”struct tty_driver { struct kref kref; struct cdev **cdevs; struct module *owner; const char *driver_name; const char *name; int name_base; int major; int minor_start; unsigned int num; enum tty_driver_type type; enum tty_driver_subtype subtype; struct ktermios init_termios; unsigned long flags; struct proc_dir_entry *proc_entry; struct tty_driver *other; struct workqueue_struct *flip_wq; struct tty_struct **ttys; struct tty_port **ports; struct ktermios **termios; void *driver_state; const struct tty_operations *ops; struct list_head tty_drivers; };”h]”hX”struct tty_driver { struct kref kref; struct cdev **cdevs; struct module *owner; const char *driver_name; const char *name; int name_base; int major; int minor_start; unsigned int num; enum tty_driver_type type; enum tty_driver_subtype subtype; struct ktermios init_termios; unsigned long flags; struct proc_dir_entry *proc_entry; struct tty_driver *other; struct workqueue_struct *flip_wq; struct tty_struct **ttys; struct tty_port **ports; struct ktermios **termios; void *driver_state; const struct tty_operations *ops; struct list_head tty_drivers; };”…”�”}”hj²'sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j°'h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mûhj�'ubhí)�”}”(hŒ **Members**”h]”j0)�”}”(hjÃ'h]”hŒMembers”…”�”}”(hjÅ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÁ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj�'ubjF)�”}”(hhh]”(jK)�”}”(hŒS``kref`` reference counting. Reaching zero frees all the internals and the driver. ”h]”(jQ)�”}”(hŒ``kref``”h]”j;)�”}”(hjâ'h]”hŒkref”…”�”}”(hjä'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjà'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´MùhjÜ'ubjk)�”}”(hhh]”hí)�”}”(hŒIreference counting. Reaching zero frees all the internals and the driver.”h]”hŒIreference counting. Reaching zero frees all the internals and the driver.”…”�”}”(hjû'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Møhjø'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÜ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j÷'h´MùhjÙ'ubjK)�”}”(hŒ6``cdevs`` allocated/registered character /dev devices ”h]”(jQ)�”}”(hŒ ``cdevs``”h]”j;)�”}”(hj(h]”hŒcdevs”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Múhj(ubjk)�”}”(hhh]”hí)�”}”(hŒ+allocated/registered character /dev devices”h]”hŒ+allocated/registered character /dev devices”…”�”}”(hj5(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j1(h´Múhj2(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j1(h´MúhjÙ'ubjK)�”}”(hŒp``owner`` modules owning this driver. Used drivers cannot be rmmod'ed. Automatically set by tty_alloc_driver(). ”h]”(jQ)�”}”(hŒ ``owner``”h]”j;)�”}”(hjU(h]”hŒowner”…”�”}”(hjW(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjS(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´MühjO(ubjk)�”}”(hhh]”hí)�”}”(hŒemodules owning this driver. Used drivers cannot be rmmod'ed. Automatically set by tty_alloc_driver().”h]”hŒgmodules owning this driver. Used drivers cannot be rmmod’ed. Automatically set by tty_alloc_driver().”…”�”}”(hjn(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mûhjk(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjO(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jj(h´MühjÙ'ubjK)�”}”(hŒ5``driver_name`` name of the driver used in /proc/tty ”h]”(jQ)�”}”(hŒ``driver_name``”h]”j;)�”}”(hj�(h]”hŒ driver_name”…”�”}”(hj‘(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mýhj‰(ubjk)�”}”(hhh]”hí)�”}”(hŒ$name of the driver used in /proc/tty”h]”hŒ$name of the driver used in /proc/tty”…”�”}”(hj¨(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¤(h´Mýhj¥(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj‰(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j¤(h´MýhjÙ'ubjK)�”}”(hŒ.``name`` used for constructing /dev node name ”h]”(jQ)�”}”(hŒ``name``”h]”j;)�”}”(hjÈ(h]”hŒname”…”�”}”(hjÊ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÆ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´MþhjÂ(ubjk)�”}”(hhh]”hí)�”}”(hŒ$used for constructing /dev node name”h]”hŒ$used for constructing /dev node name”…”�”}”(hjá(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÝ(h´MþhjÞ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÂ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÝ(h´MþhjÙ'ubjK)�”}”(hŒD``name_base`` used as a number base for constructing /dev node name ”h]”(jQ)�”}”(hŒ ``name_base``”h]”j;)�”}”(hj)h]”hŒ name_base”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÿ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mÿhjû(ubjk)�”}”(hhh]”hí)�”}”(hŒ5used as a number base for constructing /dev node name”h]”hŒ5used as a number base for constructing /dev node name”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j)h´Mÿhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjû(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j)h´MÿhjÙ'ubjK)�”}”(hŒ=``major`` major /dev device number (zero for autoassignment) ”h]”(jQ)�”}”(hŒ ``major``”h]”j;)�”}”(hj:)h]”hŒmajor”…”�”}”(hj<)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj8)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj4)ubjk)�”}”(hhh]”hí)�”}”(hŒ2major /dev device number (zero for autoassignment)”h]”hŒ2major /dev device number (zero for autoassignment)”…”�”}”(hjS)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jO)h´MhjP)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj4)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jO)h´MhjÙ'ubjK)�”}”(hŒ3``minor_start`` the first minor /dev device number ”h]”(jQ)�”}”(hŒ``minor_start``”h]”j;)�”}”(hjs)h]”hŒ minor_start”…”�”}”(hju)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjq)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjm)ubjk)�”}”(hhh]”hí)�”}”(hŒ"the first minor /dev device number”h]”hŒ"the first minor /dev device number”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jˆ)h´Mhj‰)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjm)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jˆ)h´MhjÙ'ubjK)�”}”(hŒ$``num`` number of devices allocated ”h]”(jQ)�”}”(hŒ``num``”h]”j;)�”}”(hj¬)h]”hŒnum”…”�”}”(hj®)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjª)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj¦)ubjk)�”}”(hhh]”hí)�”}”(hŒnumber of devices allocated”h]”hŒnumber of devices allocated”…”�”}”(hjÅ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÁ)h´MhjÂ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj¦)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÁ)h´MhjÙ'ubjK)�”}”(hŒ3``type`` type of tty driver (enum tty_driver_type) ”h]”(jQ)�”}”(hŒ``type``”h]”j;)�”}”(hjå)h]”hŒtype”…”�”}”(hjç)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjã)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjß)ubjk)�”}”(hhh]”hí)�”}”(hŒ)type of tty driver (enum tty_driver_type)”h]”hŒ)type of tty driver (enum tty_driver_type)”…”�”}”(hjþ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jú)h´Mhjû)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjß)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jú)h´MhjÙ'ubjK)�”}”(hŒ<``subtype`` subtype of tty driver (enum tty_driver_subtype) ”h]”(jQ)�”}”(hŒ ``subtype``”h]”j;)�”}”(hj*h]”hŒsubtype”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj*ubjk)�”}”(hhh]”hí)�”}”(hŒ/subtype of tty driver (enum tty_driver_subtype)”h]”hŒ/subtype of tty driver (enum tty_driver_subtype)”…”�”}”(hj7*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j3*h´Mhj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j3*h´MhjÙ'ubjK)�”}”(hŒQ``init_termios`` termios to set to each tty initially (e.g. ``tty_std_termios``) ”h]”(jQ)�”}”(hŒ``init_termios``”h]”j;)�”}”(hjW*h]”hŒ init_termios”…”�”}”(hjY*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjU*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´MhjQ*ubjk)�”}”(hhh]”hí)�”}”(hŒ?termios to set to each tty initially (e.g. ``tty_std_termios``)”h]”(hŒ+termios to set to each tty initially (e.g. ”…”�”}”(hjp*h²hh³Nh´Nubj;)�”}”(hŒ``tty_std_termios``”h]”hŒtty_std_termios”…”�”}”(hjx*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjp*ubhŒ)”…”�”}”(hjp*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jl*h´Mhjm*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjQ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jl*h´MhjÙ'ubjK)�”}”(hŒ-``flags`` tty driver flags (``TTY_DRIVER_``) ”h]”(jQ)�”}”(hŒ ``flags``”h]”j;)�”}”(hj¢*h]”hŒflags”…”�”}”(hj¤*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj *ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjœ*ubjk)�”}”(hhh]”hí)�”}”(hŒ"tty driver flags (``TTY_DRIVER_``)”h]”(hŒtty driver flags (”…”�”}”(hj»*h²hh³Nh´Nubj;)�”}”(hŒ``TTY_DRIVER_``”h]”hŒ TTY_DRIVER_”…”�”}”(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³j·*h´Mhj¸*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjœ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j·*h´MhjÙ'ubjK)�”}”(hŒ.``proc_entry`` proc fs entry, used internally ”h]”(jQ)�”}”(hŒ``proc_entry``”h]”j;)�”}”(hjí*h]”hŒ proc_entry”…”�”}”(hjï*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjë*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjç*ubjk)�”}”(hhh]”hí)�”}”(hŒproc fs entry, used internally”h]”hŒproc fs entry, used internally”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j+h´Mhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjç*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j+h´MhjÙ'ubjK)�”}”(hŒA``other`` driver of the linked tty; only used for the PTY driver ”h]”(jQ)�”}”(hŒ ``other``”h]”j;)�”}”(hj&+h]”hŒother”…”�”}”(hj(+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj$+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj +ubjk)�”}”(hhh]”hí)�”}”(hŒ6driver of the linked tty; only used for the PTY driver”h]”hŒ6driver of the linked tty; only used for the PTY driver”…”�”}”(hj?+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j;+h´Mhj<+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj +ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j;+h´MhjÙ'ubjK)�”}”(hŒ3``flip_wq`` workqueue to queue flip buffer work on ”h]”(jQ)�”}”(hŒ ``flip_wq``”h]”j;)�”}”(hj_+h]”hŒflip_wq”…”�”}”(hja+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj]+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´M hjY+ubjk)�”}”(hhh]”hí)�”}”(hŒ&workqueue to queue flip buffer work on”h]”hŒ&workqueue to queue flip buffer work on”…”�”}”(hjx+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jt+h´M hju+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjY+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jt+h´M hjÙ'ubjK)�”}”(hŒa``ttys`` array of active :c:type:`struct tty_struct `, set by tty_standard_install() ”h]”(jQ)�”}”(hŒ``ttys``”h]”j;)�”}”(hj˜+h]”hŒttys”…”�”}”(hjš+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj–+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´M hj’+ubjk)�”}”(hhh]”hí)�”}”(hŒWarray of active :c:type:`struct tty_struct `, set by tty_standard_install()”h]”(hŒarray of active ”…”�”}”(hj±+h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct tty_struct `”h]”j;)�”}”(hj»+h]”hŒstruct tty_struct”…”�”}”(hj½+h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj¹+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_struct”uh1hh³j­+h´M hj±+ubhŒ, set by tty_standard_install()”…”�”}”(hj±+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j­+h´M hj®+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj’+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j­+h´M hjÙ'ubjK)�”}”(hŒ€``ports`` array of :c:type:`struct tty_port `; can be set during initialization by tty_port_link_device() and similar ”h]”(jQ)�”}”(hŒ ``ports``”h]”j;)�”}”(hjô+h]”hŒports”…”�”}”(hjö+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjò+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´M hjî+ubjk)�”}”(hhh]”hí)�”}”(hŒuarray of :c:type:`struct tty_port `; can be set during initialization by tty_port_link_device() and similar”h]”(hŒ array of ”…”�”}”(hj ,h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct tty_port `”h]”j;)�”}”(hj,h]”hŒstruct tty_port”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œtty_port”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´M hj ,ubhŒH; can be set during initialization by tty_port_link_device() and similar”…”�”}”(hj ,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j4,h´M hj ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjî+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j ,h´M hjÙ'ubjK)�”}”(hŒD``termios`` storage for termios at each TTY close for the next open ”h]”(jQ)�”}”(hŒ ``termios``”h]”j;)�”}”(hjQ,h]”hŒtermios”…”�”}”(hjS,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjO,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´M hjK,ubjk)�”}”(hhh]”hí)�”}”(hŒ7storage for termios at each TTY close for the next open”h]”hŒ7storage for termios at each TTY close for the next open”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jf,h´M hjg,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjK,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jf,h´M hjÙ'ubjK)�”}”(hŒ4``driver_state`` pointer to driver's arbitrary data ”h]”(jQ)�”}”(hŒ``driver_state``”h]”j;)�”}”(hjŠ,h]”hŒ driver_state”…”�”}”(hjŒ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjˆ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj„,ubjk)�”}”(hhh]”hí)�”}”(hŒ"pointer to driver's arbitrary data”h]”hŒ$pointer to driver’s arbitrary data”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŸ,h´Mhj ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj„,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jŸ,h´MhjÙ'ubjK)�”}”(hŒ’``ops`` driver hooks for TTYs. Set them using tty_set_operations(). Use :c:type:`struct tty_port ` helpers in them as much as possible. ”h]”(jQ)�”}”(hŒ``ops``”h]”j;)�”}”(hjÃ,h]”hŒops”…”�”}”(hjÅ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÁ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj½,ubjk)�”}”(hhh]”hí)�”}”(hŒ‰driver hooks for TTYs. Set them using tty_set_operations(). Use :c:type:`struct tty_port ` helpers in them as much as possible.”h]”(hŒ@driver hooks for TTYs. Set them using tty_set_operations(). Use ”…”�”}”(hjÜ,h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct tty_port `”h]”j;)�”}”(hjæ,h]”hŒstruct tty_port”…”�”}”(hjè,h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hjä,ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œtty_port”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´MhjÜ,ubhŒ% helpers in them as much as possible.”…”�”}”(hjÜ,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j-h´MhjÙ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj½,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jØ,h´MhjÙ'ubjK)�”}”(hŒ<``tty_drivers`` used internally to link tty_drivers together”h]”(jQ)�”}”(hŒ``tty_drivers``”h]”j;)�”}”(hj -h]”hŒ tty_drivers”…”�”}”(hj"-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj-ubjk)�”}”(hhh]”hí)�”}”(hŒ,used internally to link tty_drivers together”h]”hŒ,used internally to link tty_drivers together”…”�”}”(hj9-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhj6-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j5-h´MhjÙ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhj�'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hjæ&h²hh³j'h´Nubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hjc-h]”hŒ Description”…”�”}”(hje-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hja-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjæ&h²hubhí)�”}”(hXThe usual handling of :c:type:`struct tty_driver ` is to allocate it by tty_alloc_driver(), set up all the necessary members, and register it by tty_register_driver(). At last, the driver is torn down by calling tty_unregister_driver() followed by tty_driver_kref_put().”h]”(hŒThe usual handling of ”…”�”}”(hjy-h²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct tty_driver `”h]”j;)�”}”(hjƒ-h]”hŒstruct tty_driver”…”�”}”(hj…-h²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj�-ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_driver”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjy-ubhŒÜ is to allocate it by tty_alloc_driver(), set up all the necessary members, and register it by tty_register_driver(). At last, the driver is torn down by calling tty_unregister_driver() followed by tty_driver_kref_put().”…”�”}”(hjy-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j -h´Mhjæ&h²hubhí)�”}”(hŒ›The fields required to be set before calling tty_register_driver() include **driver_name**, **name**, **type**, **subtype**, **init_termios**, and **ops**.”h]”(hŒKThe fields required to be set before calling tty_register_driver() include ”…”�”}”(hj«-h²hh³Nh´Nubj0)�”}”(hŒ**driver_name**”h]”hŒ driver_name”…”�”}”(hj³-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«-ubhŒ, ”…”�”}”(hj«-h²hh³Nh´Nubj0)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjÅ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«-ubhŒ, ”…”�”}”hj«-sbj0)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hj×-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«-ubhŒ, ”…”�”}”hj«-sbj0)�”}”(hŒ **subtype**”h]”hŒsubtype”…”�”}”(hjé-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«-ubhŒ, ”…”�”}”hj«-sbj0)�”}”(hŒ**init_termios**”h]”hŒ init_termios”…”�”}”(hjû-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj«-ubhŒ, and ”…”�”}”(hj«-h²hh³Nh´Nubj0)�”}”(hŒ**ops**”h]”hŒops”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:118: ./include/linux/tty_driver.h”h´Mhjæ&h²hubeh}”(h]”j¾ah ]”h"]”Œtty driver reference”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kqjî Kubj÷ )�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jö h³hÇh´KyhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Operations Reference”h]”hŒTTY Operations Reference”…”�”}”(hj:.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jjÚuh1hÍhj7.h²hh³hÇh´K|ubhí)�”}”(hŒMWhen a TTY is registered, these driver hooks can be invoked by the TTY layer:”h]”hŒMWhen a TTY is registered, these driver hooks can be invoked by the TTY layer:”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K~hj7.h²hubj…)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j‘Œtty_operations (C struct)”Œc.tty_operations”hNt”auh1j„hj7.h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Nubj–)�”}”(hhh]”(j›)�”}”(hŒtty_operations”h]”j¡)�”}”(hŒstruct tty_operations”h]”(j)�”}”(hjh]”hŒstruct”…”�”}”(hjp.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl.h²hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~.h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjl.h²hh³j}.h´Kubj§)�”}”(hŒtty_operations”h]”j­)�”}”(hjj.h]”hŒtty_operations”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”j¸ah"]”h$]”h&]”uh1j¬hjŒ.ubah}”(h]”h ]”(j¿jÀeh"]”h$]”h&]”hÅhÆuh1j¦hjl.h²hh³j}.h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjˈuh1j jÌjÍhjh.h²hh³j}.h´Kubah}”(h]”jb.ah ]”(jÑjÒeh"]”h$]”h&]”jÖˆj×)jØhuh1jšh³j}.h´Khje.h²hubjÚ)�”}”(hhh]”hã)�”}”(hhh]”hè)�”}”(hŒ interface between driver and tty”h]”hí)�”}”(hj·.h]”hŒ interface between driver and tty”…”�”}”(hj¹.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kuhjµ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj².h²hh³jÆ.h´Nubah}”(h]”h ]”h"]”h$]”h&]”j% j& uh1hâh³jÆ.h´Kuhj¯.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÙhje.h²hh³j}.h´Kubeh}”(h]”h ]”(jçŒstruct”eh"]”h$]”h&]”jìjçjíjÜ.jîjÜ.jï‰jð‰jñ‰uh1j•h²hhj7.h³jd.h´Nubj&)�”}”(hXi**Definition**:: struct tty_operations { struct tty_struct * (*lookup)(struct tty_driver *driver, struct file *filp, int idx); int (*install)(struct tty_driver *driver, struct tty_struct *tty); void (*remove)(struct tty_driver *driver, struct tty_struct *tty); int (*open)(struct tty_struct * tty, struct file * filp); void (*close)(struct tty_struct * tty, struct file * filp); void (*shutdown)(struct tty_struct *tty); void (*cleanup)(struct tty_struct *tty); ssize_t (*write)(struct tty_struct *tty, const u8 *buf, size_t count); int (*put_char)(struct tty_struct *tty, u8 ch); void (*flush_chars)(struct tty_struct *tty); unsigned int (*write_room)(struct tty_struct *tty); unsigned int (*chars_in_buffer)(struct tty_struct *tty); int (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); long (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); void (*set_termios)(struct tty_struct *tty, const struct ktermios *old); void (*throttle)(struct tty_struct * tty); void (*unthrottle)(struct tty_struct * tty); void (*stop)(struct tty_struct *tty); void (*start)(struct tty_struct *tty); void (*hangup)(struct tty_struct *tty); int (*break_ctl)(struct tty_struct *tty, int state); void (*flush_buffer)(struct tty_struct *tty); int (*ldisc_ok)(struct tty_struct *tty, int ldisc); void (*set_ldisc)(struct tty_struct *tty); void (*wait_until_sent)(struct tty_struct *tty, int timeout); void (*send_xchar)(struct tty_struct *tty, u8 ch); int (*tiocmget)(struct tty_struct *tty); int (*tiocmset)(struct tty_struct *tty, unsigned int set, unsigned int clear); int (*resize)(struct tty_struct *tty, struct winsize *ws); int (*get_icount)(struct tty_struct *tty, struct serial_icounter_struct *icount); int (*get_serial)(struct tty_struct *tty, struct serial_struct *p); int (*set_serial)(struct tty_struct *tty, struct serial_struct *p); void (*show_fdinfo)(struct tty_struct *tty, struct seq_file *m); #ifdef CONFIG_CONSOLE_POLL; int (*poll_init)(struct tty_driver *driver, int line, char *options); int (*poll_get_char)(struct tty_driver *driver, int line); void (*poll_put_char)(struct tty_driver *driver, int line, char ch); #endif; int (*proc_show)(struct seq_file *m, void *driver); }; **Members** ``lookup`` ``struct tty_struct *()(struct tty_driver *self, struct file *, int idx)`` ``install`` ``int ()(struct tty_driver *self, struct tty_struct *tty)`` ``remove`` ``void ()(struct tty_driver *self, struct tty_struct *tty)`` ``open`` ``int ()(struct tty_struct *tty, struct file *)`` ``close`` ``void ()(struct tty_struct *tty, struct file *)`` ``shutdown`` ``void ()(struct tty_struct *tty)`` ``cleanup`` ``void ()(struct tty_struct *tty)`` ``write`` ``ssize_t ()(struct tty_struct *tty, const u8 *buf, size_t count)`` ``put_char`` ``int ()(struct tty_struct *tty, u8 ch)`` ``flush_chars`` ``void ()(struct tty_struct *tty)`` ``write_room`` ``unsigned int ()(struct tty_struct *tty)`` ``chars_in_buffer`` ``unsigned int ()(struct tty_struct *tty)`` ``ioctl`` ``int ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)`` ``compat_ioctl`` ``long ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)`` ``set_termios`` ``void ()(struct tty_struct *tty, const struct ktermios *old)`` ``throttle`` ``void ()(struct tty_struct *tty)`` ``unthrottle`` ``void ()(struct tty_struct *tty)`` ``stop`` ``void ()(struct tty_struct *tty)`` ``start`` ``void ()(struct tty_struct *tty)`` ``hangup`` ``void ()(struct tty_struct *tty)`` ``break_ctl`` ``int ()(struct tty_struct *tty, int state)`` ``flush_buffer`` ``void ()(struct tty_struct *tty)`` ``ldisc_ok`` ``int ()(struct tty_struct *tty, int ldisc)`` ``set_ldisc`` ``void ()(struct tty_struct *tty)`` ``wait_until_sent`` ``void ()(struct tty_struct *tty, int timeout)`` ``send_xchar`` ``void ()(struct tty_struct *tty, u8 ch)`` ``tiocmget`` ``int ()(struct tty_struct *tty)`` ``tiocmset`` ``int ()(struct tty_struct *tty, unsigned int set, unsigned int clear)`` ``resize`` ``int ()(struct tty_struct *tty, struct winsize *ws)`` ``get_icount`` ``int ()(struct tty_struct *tty, struct serial_icounter *icount)`` ``get_serial`` ``int ()(struct tty_struct *tty, struct serial_struct *p)`` ``set_serial`` ``int ()(struct tty_struct *tty, struct serial_struct *p)`` ``show_fdinfo`` ``void ()(struct tty_struct *tty, struct seq_file *m)`` ``poll_init`` ``int ()(struct tty_driver *driver, int line, char *options)`` ``poll_get_char`` ``int ()(struct tty_driver *driver, int line)`` ``poll_put_char`` ``void ()(struct tty_driver *driver, int line, char ch)`` ``proc_show`` ``int ()(struct seq_file *m, void *driver)``”h]”(hí)�”}”(hŒ**Definition**::”h]”(j0)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kyhjà.ubj±')�”}”(hX7 struct tty_operations { struct tty_struct * (*lookup)(struct tty_driver *driver, struct file *filp, int idx); int (*install)(struct tty_driver *driver, struct tty_struct *tty); void (*remove)(struct tty_driver *driver, struct tty_struct *tty); int (*open)(struct tty_struct * tty, struct file * filp); void (*close)(struct tty_struct * tty, struct file * filp); void (*shutdown)(struct tty_struct *tty); void (*cleanup)(struct tty_struct *tty); ssize_t (*write)(struct tty_struct *tty, const u8 *buf, size_t count); int (*put_char)(struct tty_struct *tty, u8 ch); void (*flush_chars)(struct tty_struct *tty); unsigned int (*write_room)(struct tty_struct *tty); unsigned int (*chars_in_buffer)(struct tty_struct *tty); int (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); long (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); void (*set_termios)(struct tty_struct *tty, const struct ktermios *old); void (*throttle)(struct tty_struct * tty); void (*unthrottle)(struct tty_struct * tty); void (*stop)(struct tty_struct *tty); void (*start)(struct tty_struct *tty); void (*hangup)(struct tty_struct *tty); int (*break_ctl)(struct tty_struct *tty, int state); void (*flush_buffer)(struct tty_struct *tty); int (*ldisc_ok)(struct tty_struct *tty, int ldisc); void (*set_ldisc)(struct tty_struct *tty); void (*wait_until_sent)(struct tty_struct *tty, int timeout); void (*send_xchar)(struct tty_struct *tty, u8 ch); int (*tiocmget)(struct tty_struct *tty); int (*tiocmset)(struct tty_struct *tty, unsigned int set, unsigned int clear); int (*resize)(struct tty_struct *tty, struct winsize *ws); int (*get_icount)(struct tty_struct *tty, struct serial_icounter_struct *icount); int (*get_serial)(struct tty_struct *tty, struct serial_struct *p); int (*set_serial)(struct tty_struct *tty, struct serial_struct *p); void (*show_fdinfo)(struct tty_struct *tty, struct seq_file *m); #ifdef CONFIG_CONSOLE_POLL; int (*poll_init)(struct tty_driver *driver, int line, char *options); int (*poll_get_char)(struct tty_driver *driver, int line); void (*poll_put_char)(struct tty_driver *driver, int line, char ch); #endif; int (*proc_show)(struct seq_file *m, void *driver); };”h]”hX7 struct tty_operations { struct tty_struct * (*lookup)(struct tty_driver *driver, struct file *filp, int idx); int (*install)(struct tty_driver *driver, struct tty_struct *tty); void (*remove)(struct tty_driver *driver, struct tty_struct *tty); int (*open)(struct tty_struct * tty, struct file * filp); void (*close)(struct tty_struct * tty, struct file * filp); void (*shutdown)(struct tty_struct *tty); void (*cleanup)(struct tty_struct *tty); ssize_t (*write)(struct tty_struct *tty, const u8 *buf, size_t count); int (*put_char)(struct tty_struct *tty, u8 ch); void (*flush_chars)(struct tty_struct *tty); unsigned int (*write_room)(struct tty_struct *tty); unsigned int (*chars_in_buffer)(struct tty_struct *tty); int (*ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); long (*compat_ioctl)(struct tty_struct *tty, unsigned int cmd, unsigned long arg); void (*set_termios)(struct tty_struct *tty, const struct ktermios *old); void (*throttle)(struct tty_struct * tty); void (*unthrottle)(struct tty_struct * tty); void (*stop)(struct tty_struct *tty); void (*start)(struct tty_struct *tty); void (*hangup)(struct tty_struct *tty); int (*break_ctl)(struct tty_struct *tty, int state); void (*flush_buffer)(struct tty_struct *tty); int (*ldisc_ok)(struct tty_struct *tty, int ldisc); void (*set_ldisc)(struct tty_struct *tty); void (*wait_until_sent)(struct tty_struct *tty, int timeout); void (*send_xchar)(struct tty_struct *tty, u8 ch); int (*tiocmget)(struct tty_struct *tty); int (*tiocmset)(struct tty_struct *tty, unsigned int set, unsigned int clear); int (*resize)(struct tty_struct *tty, struct winsize *ws); int (*get_icount)(struct tty_struct *tty, struct serial_icounter_struct *icount); int (*get_serial)(struct tty_struct *tty, struct serial_struct *p); int (*set_serial)(struct tty_struct *tty, struct serial_struct *p); void (*show_fdinfo)(struct tty_struct *tty, struct seq_file *m); #ifdef CONFIG_CONSOLE_POLL; int (*poll_init)(struct tty_driver *driver, int line, char *options); int (*poll_get_char)(struct tty_driver *driver, int line); void (*poll_put_char)(struct tty_driver *driver, int line, char ch); #endif; int (*proc_show)(struct seq_file *m, void *driver); };”…”�”}”hj/sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j°'h³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K{hjà.ubhí)�”}”(hŒ **Members**”h]”j0)�”}”(hj/h]”hŒMembers”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K¥hjà.ubjF)�”}”(hhh]”(jK)�”}”(hŒV``lookup`` ``struct tty_struct *()(struct tty_driver *self, struct file *, int idx)`` ”h]”(jQ)�”}”(hŒ ``lookup``”h]”j;)�”}”(hj1/h]”hŒlookup”…”�”}”(hj3/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj//ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kyhj+/ubjk)�”}”(hhh]”hí)�”}”(hŒJ``struct tty_struct *()(struct tty_driver *self, struct file *, int idx)``”h]”j;)�”}”(hjL/h]”hŒFstruct tty_struct *()(struct tty_driver *self, struct file *, int idx)”…”�”}”(hjN/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjJ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KxhjG/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj+/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jF/h´Kyhj(/ubjK)�”}”(hŒH``install`` ``int ()(struct tty_driver *self, struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``install``”h]”j;)�”}”(hjt/h]”hŒinstall”…”�”}”(hjv/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjr/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K�hjn/ubjk)�”}”(hhh]”hí)�”}”(hŒ;``int ()(struct tty_driver *self, struct tty_struct *tty)``”h]”j;)�”}”(hj�/h]”hŒ7int ()(struct tty_driver *self, struct tty_struct *tty)”…”�”}”(hj‘/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‰/h´K�hjŠ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjn/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j‰/h´K�hj(/ubjK)�”}”(hŒH``remove`` ``void ()(struct tty_driver *self, struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``remove``”h]”j;)�”}”(hj¶/h]”hŒremove”…”�”}”(hj¸/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj´/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kˆhj°/ubjk)�”}”(hhh]”hí)�”}”(hŒ<``void ()(struct tty_driver *self, struct tty_struct *tty)``”h]”j;)�”}”(hjÑ/h]”hŒ8void ()(struct tty_driver *self, struct tty_struct *tty)”…”�”}”(hjÓ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÏ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jË/h´KˆhjÌ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj°/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jË/h´Kˆhj(/ubjK)�”}”(hŒ;``open`` ``int ()(struct tty_struct *tty, struct file *)`` ”h]”(jQ)�”}”(hŒ``open``”h]”j;)�”}”(hjø/h]”hŒopen”…”�”}”(hjú/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjö/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K�hjò/ubjk)�”}”(hhh]”hí)�”}”(hŒ1``int ()(struct tty_struct *tty, struct file *)``”h]”j;)�”}”(hj0h]”hŒ-int ()(struct tty_struct *tty, struct file *)”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j 0h´K�hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjò/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j 0h´K�hj(/ubjK)�”}”(hŒ=``close`` ``void ()(struct tty_struct *tty, struct file *)`` ”h]”(jQ)�”}”(hŒ ``close``”h]”j;)�”}”(hj:0h]”hŒclose”…”�”}”(hj<0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj80ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K—hj40ubjk)�”}”(hhh]”hí)�”}”(hŒ2``void ()(struct tty_struct *tty, struct file *)``”h]”j;)�”}”(hjU0h]”hŒ.void ()(struct tty_struct *tty, struct file *)”…”�”}”(hjW0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjS0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jO0h´K—hjP0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj40ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jO0h´K—hj(/ubjK)�”}”(hŒ1``shutdown`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``shutdown``”h]”j;)�”}”(hj|0h]”hŒshutdown”…”�”}”(hj~0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjz0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K¡hjv0ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj—0h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj•0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‘0h´K¡hj’0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjv0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j‘0h´K¡hj(/ubjK)�”}”(hŒ0``cleanup`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``cleanup``”h]”j;)�”}”(hj¾0h]”hŒcleanup”…”�”}”(hjÀ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¼0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K§hj¸0ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hjÙ0h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hjÛ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj×0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÓ0h´K§hjÔ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj¸0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÓ0h´K§hj(/ubjK)�”}”(hŒN``write`` ``ssize_t ()(struct tty_struct *tty, const u8 *buf, size_t count)`` ”h]”(jQ)�”}”(hŒ ``write``”h]”j;)�”}”(hj1h]”hŒwrite”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjþ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K­hjú0ubjk)�”}”(hhh]”hí)�”}”(hŒC``ssize_t ()(struct tty_struct *tty, const u8 *buf, size_t count)``”h]”j;)�”}”(hj1h]”hŒ?ssize_t ()(struct tty_struct *tty, const u8 *buf, size_t count)”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j1h´K­hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjú0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j1h´K­hj(/ubjK)�”}”(hŒ7``put_char`` ``int ()(struct tty_struct *tty, u8 ch)`` ”h]”(jQ)�”}”(hŒ ``put_char``”h]”j;)�”}”(hjB1h]”hŒput_char”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj@1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K¹hj<1ubjk)�”}”(hhh]”hí)�”}”(hŒ)``int ()(struct tty_struct *tty, u8 ch)``”h]”j;)�”}”(hj]1h]”hŒ%int ()(struct tty_struct *tty, u8 ch)”…”�”}”(hj_1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj[1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jW1h´K¹hjX1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj<1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jW1h´K¹hj(/ubjK)�”}”(hŒ4``flush_chars`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``flush_chars``”h]”j;)�”}”(hj„1h]”hŒ flush_chars”…”�”}”(hj†1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj‚1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÄhj~1ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hjŸ1h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj¡1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j™1h´KÄhjš1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj~1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j™1h´KÄhj(/ubjK)�”}”(hŒ;``write_room`` ``unsigned int ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``write_room``”h]”j;)�”}”(hjÆ1h]”hŒ write_room”…”�”}”(hjÈ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÄ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÌhjÀ1ubjk)�”}”(hhh]”hí)�”}”(hŒ+``unsigned int ()(struct tty_struct *tty)``”h]”j;)�”}”(hjá1h]”hŒ'unsigned int ()(struct tty_struct *tty)”…”�”}”(hjã1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjß1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÛ1h´KÌhjÜ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÀ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÛ1h´KÌhj(/ubjK)�”}”(hŒ@``chars_in_buffer`` ``unsigned int ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``chars_in_buffer``”h]”j;)�”}”(hj2h]”hŒchars_in_buffer”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÙhj2ubjk)�”}”(hhh]”hí)�”}”(hŒ+``unsigned int ()(struct tty_struct *tty)``”h]”j;)�”}”(hj#2h]”hŒ'unsigned int ()(struct tty_struct *tty)”…”�”}”(hj%2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj!2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j2h´KÙhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j2h´KÙhj(/ubjK)�”}”(hŒR``ioctl`` ``int ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)`` ”h]”(jQ)�”}”(hŒ ``ioctl``”h]”j;)�”}”(hjJ2h]”hŒioctl”…”�”}”(hjL2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjH2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KãhjD2ubjk)�”}”(hhh]”hí)�”}”(hŒG``int ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)``”h]”j;)�”}”(hje2h]”hŒCint ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)”…”�”}”(hjg2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjc2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kâhj`2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjD2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j_2h´Kãhj(/ubjK)�”}”(hŒZ``compat_ioctl`` ``long ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)`` ”h]”(jQ)�”}”(hŒ``compat_ioctl``”h]”j;)�”}”(hj�2h]”hŒ compat_ioctl”…”�”}”(hj�2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj‹2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kìhj‡2ubjk)�”}”(hhh]”hí)�”}”(hŒH``long ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)``”h]”j;)�”}”(hj¨2h]”hŒDlong ()(struct tty_struct *tty, unsigned int cmd, unsigned long arg)”…”�”}”(hjª2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¦2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Këhj£2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj‡2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j¢2h´Kìhj(/ubjK)�”}”(hŒP``set_termios`` ``void ()(struct tty_struct *tty, const struct ktermios *old)`` ”h]”(jQ)�”}”(hŒ``set_termios``”h]”j;)�”}”(hjÐ2h]”hŒ set_termios”…”�”}”(hjÒ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÎ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KòhjÊ2ubjk)�”}”(hhh]”hí)�”}”(hŒ?``void ()(struct tty_struct *tty, const struct ktermios *old)``”h]”j;)�”}”(hjë2h]”hŒ;void ()(struct tty_struct *tty, const struct ktermios *old)”…”�”}”(hjí2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjé2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jå2h´Kòhjæ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÊ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jå2h´Kòhj(/ubjK)�”}”(hŒ1``throttle`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``throttle``”h]”j;)�”}”(hj3h]”hŒthrottle”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhj 3ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj-3h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj/3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj+3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j'3h´Mhj(3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj 3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j'3h´Mhj(/ubjK)�”}”(hŒ3``unthrottle`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``unthrottle``”h]”j;)�”}”(hjT3h]”hŒ unthrottle”…”�”}”(hjV3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjR3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MhjN3ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hjo3h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hjq3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjm3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³ji3h´Mhjj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjN3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³ji3h´Mhj(/ubjK)�”}”(hŒ-``stop`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``stop``”h]”j;)�”}”(hj–3h]”hŒstop”…”�”}”(hj˜3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj”3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M#hj�3ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj±3h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj³3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¯3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j«3h´M#hj¬3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj�3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j«3h´M#hj(/ubjK)�”}”(hŒ.``start`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``start``”h]”j;)�”}”(hjØ3h]”hŒstart”…”�”}”(hjÚ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÖ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M,hjÒ3ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hjó3h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hjõ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjñ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jí3h´M,hjî3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÒ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jí3h´M,hj(/ubjK)�”}”(hŒ/``hangup`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``hangup``”h]”j;)�”}”(hj4h]”hŒhangup”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M5hj4ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj54h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj74h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj34ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j/4h´M5hj04ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j/4h´M5hj(/ubjK)�”}”(hŒ<``break_ctl`` ``int ()(struct tty_struct *tty, int state)`` ”h]”(jQ)�”}”(hŒ ``break_ctl``”h]”j;)�”}”(hj\4h]”hŒ break_ctl”…”�”}”(hj^4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjZ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M<hjV4ubjk)�”}”(hhh]”hí)�”}”(hŒ-``int ()(struct tty_struct *tty, int state)``”h]”j;)�”}”(hjw4h]”hŒ)int ()(struct tty_struct *tty, int state)”…”�”}”(hjy4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hju4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jq4h´M<hjr4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjV4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jq4h´M<hj(/ubjK)�”}”(hŒ5``flush_buffer`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ``flush_buffer``”h]”j;)�”}”(hjž4h]”hŒ flush_buffer”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjœ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MLhj˜4ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj¹4h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj»4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj·4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j³4h´MLhj´4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj˜4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j³4h´MLhj(/ubjK)�”}”(hŒ;``ldisc_ok`` ``int ()(struct tty_struct *tty, int ldisc)`` ”h]”(jQ)�”}”(hŒ ``ldisc_ok``”h]”j;)�”}”(hjà4h]”hŒldisc_ok”…”�”}”(hjâ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÞ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÿhjÚ4ubjk)�”}”(hhh]”hí)�”}”(hŒ-``int ()(struct tty_struct *tty, int ldisc)``”h]”j;)�”}”(hjû4h]”hŒ)int ()(struct tty_struct *tty, int ldisc)”…”�”}”(hjý4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjù4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jõ4h´Kÿhjö4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjÚ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jõ4h´Kÿhj(/ubjK)�”}”(hŒ2``set_ldisc`` ``void ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``set_ldisc``”h]”j;)�”}”(hj"5h]”hŒ set_ldisc”…”�”}”(hj$5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj 5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhj5ubjk)�”}”(hhh]”hí)�”}”(hŒ#``void ()(struct tty_struct *tty)``”h]”j;)�”}”(hj=5h]”hŒvoid ()(struct tty_struct *tty)”…”�”}”(hj?5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj;5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j75h´Mhj85ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j75h´Mhj(/ubjK)�”}”(hŒE``wait_until_sent`` ``void ()(struct tty_struct *tty, int timeout)`` ”h]”(jQ)�”}”(hŒ``wait_until_sent``”h]”j;)�”}”(hjd5h]”hŒwait_until_sent”…”�”}”(hjf5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjb5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MUhj^5ubjk)�”}”(hhh]”hí)�”}”(hŒ0``void ()(struct tty_struct *tty, int timeout)``”h]”j;)�”}”(hj5h]”hŒ,void ()(struct tty_struct *tty, int timeout)”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj}5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jy5h´MUhjz5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj^5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jy5h´MUhj(/ubjK)�”}”(hŒ:``send_xchar`` ``void ()(struct tty_struct *tty, u8 ch)`` ”h]”(jQ)�”}”(hŒ``send_xchar``”h]”j;)�”}”(hj¦5h]”hŒ send_xchar”…”�”}”(hj¨5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¤5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M^hj 5ubjk)�”}”(hhh]”hí)�”}”(hŒ*``void ()(struct tty_struct *tty, u8 ch)``”h]”j;)�”}”(hjÁ5h]”hŒ&void ()(struct tty_struct *tty, u8 ch)”…”�”}”(hjÃ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¿5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j»5h´M^hj¼5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj 5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j»5h´M^hj(/ubjK)�”}”(hŒ0``tiocmget`` ``int ()(struct tty_struct *tty)`` ”h]”(jQ)�”}”(hŒ ``tiocmget``”h]”j;)�”}”(hjè5h]”hŒtiocmget”…”�”}”(hjê5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjæ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mfhjâ5ubjk)�”}”(hhh]”hí)�”}”(hŒ"``int ()(struct tty_struct *tty)``”h]”j;)�”}”(hj6h]”hŒint ()(struct tty_struct *tty)”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jý5h´Mfhjþ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjâ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jý5h´Mfhj(/ubjK)�”}”(hŒV``tiocmset`` ``int ()(struct tty_struct *tty, unsigned int set, unsigned int clear)`` ”h]”(jQ)�”}”(hŒ ``tiocmset``”h]”j;)�”}”(hj*6h]”hŒtiocmset”…”�”}”(hj,6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj(6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mohj$6ubjk)�”}”(hhh]”hí)�”}”(hŒH``int ()(struct tty_struct *tty, unsigned int set, unsigned int clear)``”h]”j;)�”}”(hjE6h]”hŒDint ()(struct tty_struct *tty, unsigned int set, unsigned int clear)”…”�”}”(hjG6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjC6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mnhj@6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj$6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j?6h´Mohj(/ubjK)�”}”(hŒB``resize`` ``int ()(struct tty_struct *tty, struct winsize *ws)`` ”h]”(jQ)�”}”(hŒ ``resize``”h]”j;)�”}”(hjm6h]”hŒresize”…”�”}”(hjo6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjk6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mwhjg6ubjk)�”}”(hhh]”hí)�”}”(hŒ6``int ()(struct tty_struct *tty, struct winsize *ws)``”h]”j;)�”}”(hjˆ6h]”hŒ2int ()(struct tty_struct *tty, struct winsize *ws)”…”�”}”(hjŠ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj†6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‚6h´Mwhjƒ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjg6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j‚6h´Mwhj(/ubjK)�”}”(hŒR``get_icount`` ``int ()(struct tty_struct *tty, struct serial_icounter *icount)`` ”h]”(jQ)�”}”(hŒ``get_icount``”h]”j;)�”}”(hj¯6h]”hŒ get_icount”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj­6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mƒhj©6ubjk)�”}”(hhh]”hí)�”}”(hŒB``int ()(struct tty_struct *tty, struct serial_icounter *icount)``”h]”j;)�”}”(hjÊ6h]”hŒ>int ()(struct tty_struct *tty, struct serial_icounter *icount)”…”�”}”(hjÌ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÈ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M‚hjÅ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj©6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÄ6h´Mƒhj(/ubjK)�”}”(hŒK``get_serial`` ``int ()(struct tty_struct *tty, struct serial_struct *p)`` ”h]”(jQ)�”}”(hŒ``get_serial``”h]”j;)�”}”(hjò6h]”hŒ get_serial”…”�”}”(hjô6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjð6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MŠhjì6ubjk)�”}”(hhh]”hí)�”}”(hŒ;``int ()(struct tty_struct *tty, struct serial_struct *p)``”h]”j;)�”}”(hj 7h]”hŒ7int ()(struct tty_struct *tty, struct serial_struct *p)”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj 7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j7h´MŠhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjì6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j7h´MŠhj(/ubjK)�”}”(hŒK``set_serial`` ``int ()(struct tty_struct *tty, struct serial_struct *p)`` ”h]”(jQ)�”}”(hŒ``set_serial``”h]”j;)�”}”(hj47h]”hŒ set_serial”…”�”}”(hj67h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj27ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M’hj.7ubjk)�”}”(hhh]”hí)�”}”(hŒ;``int ()(struct tty_struct *tty, struct serial_struct *p)``”h]”j;)�”}”(hjO7h]”hŒ7int ()(struct tty_struct *tty, struct serial_struct *p)”…”�”}”(hjQ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjM7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jI7h´M’hjJ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj.7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jI7h´M’hj(/ubjK)�”}”(hŒH``show_fdinfo`` ``void ()(struct tty_struct *tty, struct seq_file *m)`` ”h]”(jQ)�”}”(hŒ``show_fdinfo``”h]”j;)�”}”(hjv7h]”hŒ show_fdinfo”…”�”}”(hjx7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjt7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mšhjp7ubjk)�”}”(hhh]”hí)�”}”(hŒ7``void ()(struct tty_struct *tty, struct seq_file *m)``”h]”j;)�”}”(hj‘7h]”hŒ3void ()(struct tty_struct *tty, struct seq_file *m)”…”�”}”(hj“7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‹7h´MšhjŒ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjp7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j‹7h´Mšhj(/ubjK)�”}”(hŒM``poll_init`` ``int ()(struct tty_driver *driver, int line, char *options)`` ”h]”(jQ)�”}”(hŒ ``poll_init``”h]”j;)�”}”(hj¸7h]”hŒ poll_init”…”�”}”(hjº7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj¶7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M£hj²7ubjk)�”}”(hhh]”hí)�”}”(hŒ>``int ()(struct tty_driver *driver, int line, char *options)``”h]”j;)�”}”(hjÓ7h]”hŒ:int ()(struct tty_driver *driver, int line, char *options)”…”�”}”(hjÕ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÑ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÍ7h´M£hjÎ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj²7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jÍ7h´M£hj(/ubjK)�”}”(hŒB``poll_get_char`` ``int ()(struct tty_driver *driver, int line)`` ”h]”(jQ)�”}”(hŒ``poll_get_char``”h]”j;)�”}”(hjú7h]”hŒ poll_get_char”…”�”}”(hjü7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjø7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M¬hjô7ubjk)�”}”(hhh]”hí)�”}”(hŒ/``int ()(struct tty_driver *driver, int line)``”h]”j;)�”}”(hj8h]”hŒ+int ()(struct tty_driver *driver, int line)”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j8h´M¬hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjô7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j8h´M¬hj(/ubjK)�”}”(hŒL``poll_put_char`` ``void ()(struct tty_driver *driver, int line, char ch)`` ”h]”(jQ)�”}”(hŒ``poll_put_char``”h]”j;)�”}”(hj<8h]”hŒ poll_put_char”…”�”}”(hj>8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj:8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M³hj68ubjk)�”}”(hhh]”hí)�”}”(hŒ9``void ()(struct tty_driver *driver, int line, char ch)``”h]”j;)�”}”(hjW8h]”hŒ5void ()(struct tty_driver *driver, int line, char ch)”…”�”}”(hjY8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjU8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jQ8h´M³hjR8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj68ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³jQ8h´M³hj(/ubjK)�”}”(hŒ:``proc_show`` ``int ()(struct seq_file *m, void *driver)``”h]”(jQ)�”}”(hŒ ``proc_show``”h]”j;)�”}”(hj~8h]”hŒ proc_show”…”�”}”(hj€8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj|8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jPh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M¹hjx8ubjk)�”}”(hhh]”hí)�”}”(hŒ,``int ()(struct seq_file *m, void *driver)``”h]”j;)�”}”(hj™8h]”hŒ(int ()(struct seq_file *m, void *driver)”…”�”}”(hj›8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj—8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mºhj”8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjx8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jJh³j“8h´M¹hj(/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jEhjà.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j%hj7.h²hh³jd.h´Nubhí)�”}”(hŒ**Description**”h]”j0)�”}”(hjÊ8h]”hŒ Description”…”�”}”(hjÌ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÈ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M½hj7.h²hubj )�”}”(hX÷&Return the tty device corresponding to **idx**, ``NULL`` if there is not one currently in use and an ``ERR_PTR`` value on error. Called under ``tty_mutex`` (for now!) Optional method. Default behaviour is to use the **self->ttys** array. Install a new **tty** into the **self**'s internal tables. Used in conjunction with **lookup** and **remove** methods. Optional method. Default behaviour is to use the **self->ttys** array. Remove a closed **tty** from the **self**'s internal tables. Used in conjunction with **lookup** and **remove** methods. Optional method. Default behaviour is to use the **self->ttys** array. This routine is called when a particular **tty** device is opened. This routine is mandatory; if this routine is not filled in, the attempted open will fail with ``ENODEV``. Required method. Called with tty lock held. May sleep. This routine is called when a particular **tty** device is closed. At the point of return from this call the driver must make no further ldisc calls of any kind. Remark: called even if the corresponding **open\(\)** failed. Required method. Called with tty lock held. May sleep. This routine is called under the tty lock when a particular **tty** device is closed for the last time. It executes before the **tty** resources are freed so may execute while another function holds a **tty** kref. This routine is called asynchronously when a particular **tty** device is closed for the last time freeing up the resources. This is actually the second part of shutdown for routines that might sleep. This routine is called by the kernel to write a series (**count**) of characters (**buf**) to the **tty** device. The characters may come from user space or kernel space. This routine will return the number of characters actually accepted for writing. May occur in parallel in special cases. Because this includes panic paths drivers generally shouldn't try and do clever locking here. Optional: Required for writable devices. May not sleep. This routine is called by the kernel to write a single character **ch** to the **tty** device. If the kernel uses this routine, it must call the **flush_chars\(\)** routine (if defined) when it is done stuffing characters into the driver. If there is no room in the queue, the character is ignored. Optional: Kernel will use the **write** method if not provided. Do not call this function directly, call tty_put_char(). This routine is called by the kernel after it has written a series of characters to the tty device using **put_char\(\)**. Optional. Do not call this function directly, call tty_driver_flush_chars(). This routine returns the numbers of characters the **tty** driver will accept for queuing to be written. This number is subject to change as output buffers get emptied, or if the output flow control is acted. The ldisc is responsible for being intelligent about multi-threading of write_room/write calls Required if **write** method is provided else not needed. Do not call this function directly, call tty_write_room() This routine returns the number of characters in the device private output queue. Used in tty_wait_until_sent() and for poll() implementation. Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_chars_in_buffer(). This routine allows the **tty** driver to implement device-specific ioctls. If the ioctl number passed in **cmd** is not recognized by the driver, it should return ``ENOIOCTLCMD``. Optional. Implement ioctl processing for 32 bit process on 64 bit system. Optional. This routine allows the **tty** driver to be notified when device's termios settings have changed. New settings are in **tty->termios**. Previous settings are passed in the **old** argument. The API is defined such that the driver should return the actual modes selected. This means that the driver is responsible for modifying any bits in **tty->termios** it cannot fulfill to indicate the actual modes being used. Optional. Called under the **tty->termios_rwsem**. May sleep. This routine allows the **tty** driver to decide if it can deal with a particular **ldisc**. Optional. Called under the **tty->ldisc_sem** and **tty->termios_rwsem**. This routine allows the **tty** driver to be notified when the device's line discipline is being changed. At the point this is done the discipline is not yet usable. Optional. Called under the **tty->ldisc_sem** and **tty->termios_rwsem**. This routine notifies the **tty** driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the **tty**. Serialization including with **unthrottle\(\)** is the job of the ldisc layer. Optional: Always invoke via tty_throttle_safe(). Called under the **tty->termios_rwsem**. This routine notifies the **tty** driver that it should signal that characters can now be sent to the **tty** without fear of overrunning the input buffers of the line disciplines. Optional. Always invoke via tty_unthrottle(). Called under the **tty->termios_rwsem**. This routine notifies the **tty** driver that it should stop outputting characters to the tty device. Called with **tty->flow.lock** held. Serialized with **start\(\)** method. Optional. Always invoke via stop_tty(). This routine notifies the **tty** driver that it resumed sending characters to the **tty** device. Called with **tty->flow.lock** held. Serialized with stop() method. Optional. Always invoke via start_tty(). This routine notifies the **tty** driver that it should hang up the **tty** device. Optional. Called with tty lock held. This optional routine requests the **tty** driver to turn on or off BREAK status on the RS-232 port. If **state** is -1, then the BREAK status should be turned on; if **state** is 0, then BREAK should be turned off. If this routine is implemented, the high-level tty driver will handle the following ioctls: ``TCSBRK``, ``TCSBRKP``, ``TIOCSBRK``, ``TIOCCBRK``. If the driver sets ``TTY_DRIVER_HARDWARE_BREAK`` in tty_alloc_driver(), then the interface will also be called with actual times and the hardware is expected to do the delay work itself. 0 and -1 are still used for on/off. Optional: Required for ``TCSBRK``/``BRKP``/etc. handling. May sleep. This routine discards device private output buffer. Invoked on close, hangup, to implement ``TCOFLUSH`` ioctl and similar. Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_driver_flush_buffer(). This routine waits until the device has written out all of the characters in its transmitter FIFO. Or until **timeout** (in jiffies) is reached. Optional: If not provided, the device is assumed to have no FIFO. Usually correct to invoke via tty_wait_until_sent(). May sleep. This routine is used to send a high-priority XON/XOFF character (**ch**) to the **tty** device. Optional: If not provided, then the **write** method is called under the **tty->atomic_write_lock** to keep it serialized with the ldisc. This routine is used to obtain the modem status bits from the **tty** driver. Optional: If not provided, then ``ENOTTY`` is returned from the ``TIOCMGET`` ioctl. Do not call this function directly, call tty_tiocmget(). This routine is used to set the modem status bits to the **tty** driver. First, **clear** bits should be cleared, then **set** bits set. Optional: If not provided, then ``ENOTTY`` is returned from the ``TIOCMSET`` ioctl. Do not call this function directly, call tty_tiocmset(). Called when a termios request is issued which changes the requested terminal geometry to **ws**. Optional: the default action is to update the termios structure without error. This is usually the correct behaviour. Drivers should not force errors here if they are not resizable objects (e.g. a serial line). See tty_do_resize() if you need to wrap the standard method in your own logic -- the usual case. Called when the **tty** device receives a ``TIOCGICOUNT`` ioctl. Passed a kernel structure **icount** to complete. Optional: called only if provided, otherwise ``ENOTTY`` will be returned. Called when the **tty** device receives a ``TIOCGSERIAL`` ioctl. Passed a kernel structure **p** (:c:type:`struct serial_struct `) to complete. Optional: called only if provided, otherwise ``ENOTTY`` will be returned. Do not call this function directly, call tty_tiocgserial(). Called when the **tty** device receives a ``TIOCSSERIAL`` ioctl. Passed a kernel structure **p** (:c:type:`struct serial_struct `) to set the values from. Optional: called only if provided, otherwise ``ENOTTY`` will be returned. Do not call this function directly, call tty_tiocsserial(). Called when the **tty** device file descriptor receives a fdinfo request from VFS (to show in /proc//fdinfo/). **m** should be filled with information. Optional: called only if provided, otherwise nothing is written to **m**. Do not call this function directly, call tty_show_fdinfo(). kgdboc support (Documentation/process/debugging/kgdb.rst). This routine is called to initialize the HW for later use by calling **poll_get_char** or **poll_put_char**. Optional: called only if provided, otherwise skipped as a non-polling driver. kgdboc support (see **poll_init**). **driver** should read a character from a tty identified by **line** and return it. Optional: called only if **poll_init** provided. kgdboc support (see **poll_init**). **driver** should write character **ch** to a tty identified by **line**. Optional: called only if **poll_init** provided. Driver **driver** (cast to :c:type:`struct tty_driver `) can show additional info in /proc/tty/driver/. It is enough to fill in the information into **m**. Optional: called only if provided, otherwise no /proc entry created. ”•Ùh]”(hí)�”}”(hŒ¦Return the tty device corresponding to **idx**, ``NULL`` if there is not one currently in use and an ``ERR_PTR`` value on error. Called under ``tty_mutex`` (for now!)”h]”(hŒ'Return the tty device corresponding to ”…”�”}”(hjä8h²hh³Nh´Nubj0)�”}”(hŒ**idx**”h]”hŒidx”…”�”}”(hjì8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjä8ubhŒ, ”…”�”}”(hjä8h²hh³Nh´Nubj;)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjþ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjä8ubhŒ- if there is not one currently in use and an ”…”�”}”(hjä8h²hh³Nh´Nubj;)�”}”(hŒ ``ERR_PTR``”h]”hŒERR_PTR”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjä8ubhŒ value on error. Called under ”…”�”}”(hjä8h²hh³Nh´Nubj;)�”}”(hŒ ``tty_mutex``”h]”hŒ tty_mutex”…”�”}”(hj"9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjä8ubhŒ (for now!)”…”�”}”(hjä8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kyhjà8ubhí)�”}”(hŒFOptional method. Default behaviour is to use the **self->ttys** array.”h]”(hŒ1Optional method. Default behaviour is to use the ”…”�”}”(hj;9h²hh³Nh´Nubj0)�”}”(hŒ**self->ttys**”h]”hŒ self->ttys”…”�”}”(hjC9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj;9ubhŒ array.”…”�”}”(hj;9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K}hjà8ubhí)�”}”(hŒvInstall a new **tty** into the **self**'s internal tables. Used in conjunction with **lookup** and **remove** methods.”h]”(hŒInstall a new ”…”�”}”(hj\9h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj\9ubhŒ into the ”…”�”}”(hj\9h²hh³Nh´Nubj0)�”}”(hŒ**self**”h]”hŒself”…”�”}”(hjv9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj\9ubhŒ/’s internal tables. Used in conjunction with ”…”�”}”(hj\9h²hh³Nh´Nubj0)�”}”(hŒ **lookup**”h]”hŒlookup”…”�”}”(hjˆ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj\9ubhŒ and ”…”�”}”(hj\9h²hh³Nh´Nubj0)�”}”(hŒ **remove**”h]”hŒremove”…”�”}”(hjš9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj\9ubhŒ methods.”…”�”}”(hj\9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K€hjà8ubhí)�”}”(hŒFOptional method. Default behaviour is to use the **self->ttys** array.”h]”(hŒ1Optional method. Default behaviour is to use the ”…”�”}”(hj³9h²hh³Nh´Nubj0)�”}”(hŒ**self->ttys**”h]”hŒ self->ttys”…”�”}”(hj»9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj³9ubhŒ array.”…”�”}”(hj³9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kƒhjà8ubhí)�”}”(hŒxRemove a closed **tty** from the **self**'s internal tables. Used in conjunction with **lookup** and **remove** methods.”h]”(hŒRemove a closed ”…”�”}”(hjÔ9h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjÜ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÔ9ubhŒ from the ”…”�”}”(hjÔ9h²hh³Nh´Nubj0)�”}”(hŒ**self**”h]”hŒself”…”�”}”(hjî9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÔ9ubhŒ/’s internal tables. Used in conjunction with ”…”�”}”(hjÔ9h²hh³Nh´Nubj0)�”}”(hŒ **lookup**”h]”hŒlookup”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÔ9ubhŒ and ”…”�”}”(hjÔ9h²hh³Nh´Nubj0)�”}”(hŒ **remove**”h]”hŒremove”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÔ9ubhŒ methods.”…”�”}”(hjÔ9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K†hjà8ubhí)�”}”(hŒFOptional method. Default behaviour is to use the **self->ttys** array.”h]”(hŒ1Optional method. Default behaviour is to use the ”…”�”}”(hj+:h²hh³Nh´Nubj0)�”}”(hŒ**self->ttys**”h]”hŒ self->ttys”…”�”}”(hj3:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj+:ubhŒ array.”…”�”}”(hj+:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K‰hjà8ubhí)�”}”(hŒ­This routine is called when a particular **tty** device is opened. This routine is mandatory; if this routine is not filled in, the attempted open will fail with ``ENODEV``.”h]”(hŒ)This routine is called when a particular ”…”�”}”(hjL:h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjT:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjL:ubhŒr device is opened. This routine is mandatory; if this routine is not filled in, the attempted open will fail with ”…”�”}”(hjL:h²hh³Nh´Nubj;)�”}”(hŒ ``ENODEV``”h]”hŒENODEV”…”�”}”(hjf:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjL:ubhŒ.”…”�”}”(hjL:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KŒhjà8ubhí)�”}”(hŒ6Required method. Called with tty lock held. May sleep.”h]”hŒ6Required method. Called with tty lock held. May sleep.”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K�hjà8ubhí)�”}”(hŒ¡This routine is called when a particular **tty** device is closed. At the point of return from this call the driver must make no further ldisc calls of any kind.”h]”(hŒ)This routine is called when a particular ”…”�”}”(hjŽ:h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj–:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjŽ:ubhŒq device is closed. At the point of return from this call the driver must make no further ldisc calls of any kind.”…”�”}”(hjŽ:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K“hjà8ubhí)�”}”(hŒ=Remark: called even if the corresponding **open\(\)** failed.”h]”(hŒ)Remark: called even if the corresponding ”…”�”}”(hj¯:h²hh³Nh´Nubj0)�”}”(hŒ **open\(\)**”h]”hŒopen()”…”�”}”(hj·:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¯:ubhŒ failed.”…”�”}”(hj¯:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K—hjà8ubhí)�”}”(hŒ6Required method. Called with tty lock held. May sleep.”h]”hŒ6Required method. Called with tty lock held. May sleep.”…”�”}”(hjÐ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´K™hjà8ubhí)�”}”(hŒÖThis routine is called under the tty lock when a particular **tty** device is closed for the last time. It executes before the **tty** resources are freed so may execute while another function holds a **tty** kref.”h]”(hŒ<h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjF<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj><ubhŒ— driver will accept for queuing to be written. This number is subject to change as output buffers get emptied, or if the output flow control is acted.”…”�”}”(hj><h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÂhjà8ubhí)�”}”(hŒ^The ldisc is responsible for being intelligent about multi-threading of write_room/write calls”h]”hŒ^The ldisc is responsible for being intelligent about multi-threading of write_room/write calls”…”�”}”(hj_<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÇhjà8ubhí)�”}”(hŒsRequired if **write** method is provided else not needed. Do not call this function directly, call tty_write_room()”h]”(hŒ Required if ”…”�”}”(hjn<h²hh³Nh´Nubj0)�”}”(hŒ **write**”h]”hŒwrite”…”�”}”(hjv<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjn<ubhŒ^ method is provided else not needed. Do not call this function directly, call tty_write_room()”…”�”}”(hjn<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÊhjà8ubhí)�”}”(hŒŽThis routine returns the number of characters in the device private output queue. Used in tty_wait_until_sent() and for poll() implementation.”h]”hŒŽThis routine returns the number of characters in the device private output queue. Used in tty_wait_until_sent() and for poll() implementation.”…”�”}”(hj�<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÎhjà8ubhí)�”}”(hŒ‰Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_chars_in_buffer().”h]”hŒ‰Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_chars_in_buffer().”…”�”}”(hjž<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÒhjà8ubhí)�”}”(hŒ´This routine allows the **tty** driver to implement device-specific ioctls. If the ioctl number passed in **cmd** is not recognized by the driver, it should return ``ENOIOCTLCMD``.”h]”(hŒThis routine allows the ”…”�”}”(hj­<h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjµ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj­<ubhŒK driver to implement device-specific ioctls. If the ioctl number passed in ”…”�”}”(hj­<h²hh³Nh´Nubj0)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hjÇ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj­<ubhŒ3 is not recognized by the driver, it should return ”…”�”}”(hj­<h²hh³Nh´Nubj;)�”}”(hŒ``ENOIOCTLCMD``”h]”hŒ ENOIOCTLCMD”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÖhjà8ubhí)�”}”(hŒ Optional.”h]”hŒ Optional.”…”�”}”(hjò<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÚhjà8ubhí)�”}”(hŒ?Implement ioctl processing for 32 bit process on 64 bit system.”h]”hŒ?Implement ioctl processing for 32 bit process on 64 bit system.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´KÝhjà8ubhí)�”}”(hŒ Optional.”h]”hŒ Optional.”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kßhjà8ubhí)�”}”(hŒ¾This routine allows the **tty** driver to be notified when device's termios settings have changed. New settings are in **tty->termios**. Previous settings are passed in the **old** argument.”h]”(hŒThis routine allows the ”…”�”}”(hj=h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj'=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj=ubhŒZ driver to be notified when device’s termios settings have changed. New settings are in ”…”�”}”(hj=h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios**”h]”hŒ tty->termios”…”�”}”(hj9=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj=ubhŒ&. Previous settings are passed in the ”…”�”}”(hj=h²hh³Nh´Nubj0)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjK=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj=ubhŒ argument.”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kâhjà8ubhí)�”}”(hŒàThe API is defined such that the driver should return the actual modes selected. This means that the driver is responsible for modifying any bits in **tty->termios** it cannot fulfill to indicate the actual modes being used.”h]”(hŒ•The API is defined such that the driver should return the actual modes selected. This means that the driver is responsible for modifying any bits in ”…”�”}”(hjd=h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios**”h]”hŒ tty->termios”…”�”}”(hjl=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjd=ubhŒ; it cannot fulfill to indicate the actual modes being used.”…”�”}”(hjd=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kæhjà8ubhí)�”}”(hŒ=Optional. Called under the **tty->termios_rwsem**. May sleep.”h]”(hŒOptional. Called under the ”…”�”}”(hj…=h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj…=ubhŒ . May sleep.”…”�”}”(hj…=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Këhjà8ubhí)�”}”(hŒ\This routine allows the **tty** driver to decide if it can deal with a particular **ldisc**.”h]”(hŒThis routine allows the ”…”�”}”(hj¦=h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj®=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¦=ubhŒ3 driver to decide if it can deal with a particular ”…”�”}”(hj¦=h²hh³Nh´Nubj0)�”}”(hŒ **ldisc**”h]”hŒldisc”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kîhjà8ubhí)�”}”(hŒIOptional. Called under the **tty->ldisc_sem** and **tty->termios_rwsem**.”h]”(hŒOptional. Called under the ”…”�”}”(hjÙ=h²hh³Nh´Nubj0)�”}”(hŒ**tty->ldisc_sem**”h]”hŒtty->ldisc_sem”…”�”}”(hjá=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÙ=ubhŒ and ”…”�”}”(hjÙ=h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kñhjà8ubhí)�”}”(hŒ¥This routine allows the **tty** driver to be notified when the device's line discipline is being changed. At the point this is done the discipline is not yet usable.”h]”(hŒThis routine allows the ”…”�”}”(hj >h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj >ubhŒˆ driver to be notified when the device’s line discipline is being changed. At the point this is done the discipline is not yet usable.”…”�”}”(hj >h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kôhjà8ubhí)�”}”(hŒIOptional. Called under the **tty->ldisc_sem** and **tty->termios_rwsem**.”h]”(hŒOptional. Called under the ”…”�”}”(hj->h²hh³Nh´Nubj0)�”}”(hŒ**tty->ldisc_sem**”h]”hŒtty->ldisc_sem”…”�”}”(hj5>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj->ubhŒ and ”…”�”}”(hj->h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(hjG>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj->ubhŒ.”…”�”}”(hj->h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Køhjà8ubhí)�”}”(hŒºThis routine notifies the **tty** driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the **tty**.”h]”(hŒThis routine notifies the ”…”�”}”(hj`>h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjh>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj`>ubhŒ‘ driver that input buffers for the line discipline are close to full, and it should somehow signal that no more characters should be sent to the ”…”�”}”(hj`>h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjz>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj`>ubhŒ.”…”�”}”(hj`>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kûhjà8ubhí)�”}”(hŒNSerialization including with **unthrottle\(\)** is the job of the ldisc layer.”h]”(hŒSerialization including with ”…”�”}”(hj“>h²hh³Nh´Nubj0)�”}”(hŒ**unthrottle\(\)**”h]”hŒunthrottle()”…”�”}”(hj›>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj“>ubhŒ is the job of the ldisc layer.”…”�”}”(hj“>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Kÿhjà8ubhí)�”}”(hŒYOptional: Always invoke via tty_throttle_safe(). Called under the **tty->termios_rwsem**.”h]”(hŒBOptional: Always invoke via tty_throttle_safe(). Called under the ”…”�”}”(hj´>h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒ´This routine notifies the **tty** driver that it should signal that characters can now be sent to the **tty** without fear of overrunning the input buffers of the line disciplines.”h]”(hŒThis routine notifies the ”…”�”}”(hjÕ>h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjÝ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÕ>ubhŒE driver that it should signal that characters can now be sent to the ”…”�”}”(hjÕ>h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjï>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÕ>ubhŒG without fear of overrunning the input buffers of the line disciplines.”…”�”}”(hjÕ>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒVOptional. Always invoke via tty_unthrottle(). Called under the **tty->termios_rwsem**.”h]”(hŒ?Optional. Always invoke via tty_unthrottle(). Called under the ”…”�”}”(hj?h²hh³Nh´Nubj0)�”}”(hŒ**tty->termios_rwsem**”h]”hŒtty->termios_rwsem”…”�”}”(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³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M hjà8ubhí)�”}”(hŒeThis routine notifies the **tty** driver that it should stop outputting characters to the tty device.”h]”(hŒThis routine notifies the ”…”�”}”(hj)?h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj1?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj)?ubhŒD driver that it should stop outputting characters to the tty device.”…”�”}”(hj)?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒJCalled with **tty->flow.lock** held. Serialized with **start\(\)** method.”h]”(hŒ Called with ”…”�”}”(hjJ?h²hh³Nh´Nubj0)�”}”(hŒ**tty->flow.lock**”h]”hŒtty->flow.lock”…”�”}”(hjR?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjJ?ubhŒ held. Serialized with ”…”�”}”(hjJ?h²hh³Nh´Nubj0)�”}”(hŒ **start\(\)**”h]”hŒ start()”…”�”}”(hjd?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjJ?ubhŒ method.”…”�”}”(hjJ?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒ'Optional. Always invoke via stop_tty().”h]”hŒ'Optional. Always invoke via stop_tty().”…”�”}”(hj}?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒbThis routine notifies the **tty** driver that it resumed sending characters to the **tty** device.”h]”(hŒThis routine notifies the ”…”�”}”(hjŒ?h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj”?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjŒ?ubhŒ2 driver that it resumed sending characters to the ”…”�”}”(hjŒ?h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj¦?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjŒ?ubhŒ device.”…”�”}”(hjŒ?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒCCalled with **tty->flow.lock** held. Serialized with stop() method.”h]”(hŒ Called with ”…”�”}”(hj¿?h²hh³Nh´Nubj0)�”}”(hŒ**tty->flow.lock**”h]”hŒtty->flow.lock”…”�”}”(hjÇ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¿?ubhŒ% held. Serialized with stop() method.”…”�”}”(hj¿?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒ(Optional. Always invoke via start_tty().”h]”hŒ(Optional. Always invoke via start_tty().”…”�”}”(hjà?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒSThis routine notifies the **tty** driver that it should hang up the **tty** device.”h]”(hŒThis routine notifies the ”…”�”}”(hjï?h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj÷?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjï?ubhŒ# driver that it should hang up the ”…”�”}”(hjï?h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjï?ubhŒ device.”…”�”}”(hjï?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mhjà8ubhí)�”}”(hŒ$Optional. Called with tty lock held.”h]”hŒ$Optional. Called with tty lock held.”…”�”}”(hj"@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M!hjà8ubhí)�”}”(hŒ×This optional routine requests the **tty** driver to turn on or off BREAK status on the RS-232 port. If **state** is -1, then the BREAK status should be turned on; if **state** is 0, then BREAK should be turned off.”h]”(hŒ#This optional routine requests the ”…”�”}”(hj1@h²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj9@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj1@ubhŒ> driver to turn on or off BREAK status on the RS-232 port. If ”…”�”}”(hj1@h²hh³Nh´Nubj0)�”}”(hŒ **state**”h]”hŒstate”…”�”}”(hjK@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj1@ubhŒ6 is -1, then the BREAK status should be turned on; if ”…”�”}”(hj1@h²hh³Nh´Nubj0)�”}”(hŒ **state**”h]”hŒstate”…”�”}”(hj]@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj1@ubhŒ' is 0, then BREAK should be turned off.”…”�”}”(hj1@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M$hjà8ubhí)�”}”(hŒ�If this routine is implemented, the high-level tty driver will handle the following ioctls: ``TCSBRK``, ``TCSBRKP``, ``TIOCSBRK``, ``TIOCCBRK``.”h]”(hŒ\If this routine is implemented, the high-level tty driver will handle the following ioctls: ”…”�”}”(hjv@h²hh³Nh´Nubj;)�”}”(hŒ ``TCSBRK``”h]”hŒTCSBRK”…”�”}”(hj~@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjv@ubhŒ, ”…”�”}”(hjv@h²hh³Nh´Nubj;)�”}”(hŒ ``TCSBRKP``”h]”hŒTCSBRKP”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjv@ubhŒ, ”…”�”}”hjv@sbj;)�”}”(hŒ ``TIOCSBRK``”h]”hŒTIOCSBRK”…”�”}”(hj¢@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjv@ubhŒ, ”…”�”}”hjv@sbj;)�”}”(hŒ ``TIOCCBRK``”h]”hŒTIOCCBRK”…”�”}”(hj´@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjv@ubhŒ.”…”�”}”(hjv@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M(hjà8ubhí)�”}”(hŒÞIf the driver sets ``TTY_DRIVER_HARDWARE_BREAK`` in tty_alloc_driver(), then the interface will also be called with actual times and the hardware is expected to do the delay work itself. 0 and -1 are still used for on/off.”h]”(hŒIf the driver sets ”…”�”}”(hjÍ@h²hh³Nh´Nubj;)�”}”(hŒ``TTY_DRIVER_HARDWARE_BREAK``”h]”hŒTTY_DRIVER_HARDWARE_BREAK”…”�”}”(hjÕ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÍ@ubhŒ® in tty_alloc_driver(), then the interface will also be called with actual times and the hardware is expected to do the delay work itself. 0 and -1 are still used for on/off.”…”�”}”(hjÍ@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M+hjà8ubhí)�”}”(hŒDOptional: Required for ``TCSBRK``/``BRKP``/etc. handling. May sleep.”h]”(hŒOptional: Required for ”…”�”}”(hjî@h²hh³Nh´Nubj;)�”}”(hŒ ``TCSBRK``”h]”hŒTCSBRK”…”�”}”(hjö@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjî@ubhŒ/”…”�”}”(hjî@h²hh³Nh´Nubj;)�”}”(hŒ``BRKP``”h]”hŒBRKP”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjî@ubhŒ/etc. handling. May sleep.”…”�”}”(hjî@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M0hjà8ubhí)�”}”(hŒzThis routine discards device private output buffer. Invoked on close, hangup, to implement ``TCOFLUSH`` ioctl and similar.”h]”(hŒ[This routine discards device private output buffer. Invoked on close, hangup, to implement ”…”�”}”(hj!Ah²hh³Nh´Nubj;)�”}”(hŒ ``TCOFLUSH``”h]”hŒTCOFLUSH”…”�”}”(hj)Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj!AubhŒ ioctl and similar.”…”�”}”(hj!Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M3hjà8ubhí)�”}”(hŒ�Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_driver_flush_buffer().”h]”hŒ�Optional: if not provided, it is assumed there is no queue on the device. Do not call this function directly, call tty_driver_flush_buffer().”…”�”}”(hjBAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M6hjà8ubhí)�”}”(hŒ�This routine waits until the device has written out all of the characters in its transmitter FIFO. Or until **timeout** (in jiffies) is reached.”h]”(hŒlThis routine waits until the device has written out all of the characters in its transmitter FIFO. Or until ”…”�”}”(hjQAh²hh³Nh´Nubj0)�”}”(hŒ **timeout**”h]”hŒtimeout”…”�”}”(hjYAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjQAubhŒ (in jiffies) is reached.”…”�”}”(hjQAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M;hjà8ubhí)�”}”(hŒ�Optional: If not provided, the device is assumed to have no FIFO. Usually correct to invoke via tty_wait_until_sent(). May sleep.”h]”hŒ�Optional: If not provided, the device is assumed to have no FIFO. Usually correct to invoke via tty_wait_until_sent(). May sleep.”…”�”}”(hjrAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M?hjà8ubhí)�”}”(hŒ_This routine is used to send a high-priority XON/XOFF character (**ch**) to the **tty** device.”h]”(hŒAThis routine is used to send a high-priority XON/XOFF character (”…”�”}”(hj�Ah²hh³Nh´Nubj0)�”}”(hŒ**ch**”h]”hŒch”…”�”}”(hj‰Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj�AubhŒ ) to the ”…”�”}”(hj�Ah²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj›Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj�AubhŒ device.”…”�”}”(hj�Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MChjà8ubhí)�”}”(hŒ‰Optional: If not provided, then the **write** method is called under the **tty->atomic_write_lock** to keep it serialized with the ldisc.”h]”(hŒ$Optional: If not provided, then the ”…”�”}”(hj´Ah²hh³Nh´Nubj0)�”}”(hŒ **write**”h]”hŒwrite”…”�”}”(hj¼Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj´AubhŒ method is called under the ”…”�”}”(hj´Ah²hh³Nh´Nubj0)�”}”(hŒ**tty->atomic_write_lock**”h]”hŒtty->atomic_write_lock”…”�”}”(hjÎAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj´AubhŒ& to keep it serialized with the ldisc.”…”�”}”(hj´Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MFhjà8ubhí)�”}”(hŒMThis routine is used to obtain the modem status bits from the **tty** driver.”h]”(hŒ>This routine is used to obtain the modem status bits from the ”…”�”}”(hjçAh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjïAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjçAubhŒ driver.”…”�”}”(hjçAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MJhjà8ubhí)�”}”(hŒŒOptional: If not provided, then ``ENOTTY`` is returned from the ``TIOCMGET`` ioctl. Do not call this function directly, call tty_tiocmget().”h]”(hŒ Optional: If not provided, then ”…”�”}”(hjBh²hh³Nh´Nubj;)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjBubhŒ is returned from the ”…”�”}”(hjBh²hh³Nh´Nubj;)�”}”(hŒ ``TIOCMGET``”h]”hŒTIOCMGET”…”�”}”(hj"Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjBubhŒ@ ioctl. Do not call this function directly, call tty_tiocmget().”…”�”}”(hjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MMhjà8ubhí)�”}”(hŒˆThis routine is used to set the modem status bits to the **tty** driver. First, **clear** bits should be cleared, then **set** bits set.”h]”(hŒ9This routine is used to set the modem status bits to the ”…”�”}”(hj;Bh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjCBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj;BubhŒ driver. First, ”…”�”}”(hj;Bh²hh³Nh´Nubj0)�”}”(hŒ **clear**”h]”hŒclear”…”�”}”(hjUBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj;BubhŒ bits should be cleared, then ”…”�”}”(hj;Bh²hh³Nh´Nubj0)�”}”(hŒ**set**”h]”hŒset”…”�”}”(hjgBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj;BubhŒ bits set.”…”�”}”(hj;Bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MQhjà8ubhí)�”}”(hŒŒOptional: If not provided, then ``ENOTTY`` is returned from the ``TIOCMSET`` ioctl. Do not call this function directly, call tty_tiocmset().”h]”(hŒ Optional: If not provided, then ”…”�”}”(hj€Bh²hh³Nh´Nubj;)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hjˆBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj€BubhŒ is returned from the ”…”�”}”(hj€Bh²hh³Nh´Nubj;)�”}”(hŒ ``TIOCMSET``”h]”hŒTIOCMSET”…”�”}”(hjšBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj€BubhŒ@ ioctl. Do not call this function directly, call tty_tiocmset().”…”�”}”(hj€Bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MThjà8ubhí)�”}”(hŒ`Called when a termios request is issued which changes the requested terminal geometry to **ws**.”h]”(hŒYCalled when a termios request is issued which changes the requested terminal geometry to ”…”�”}”(hj³Bh²hh³Nh´Nubj0)�”}”(hŒ**ws**”h]”hŒws”…”�”}”(hj»Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj³BubhŒ.”…”�”}”(hj³Bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MXhjà8ubhí)�”}”(hX3Optional: the default action is to update the termios structure without error. This is usually the correct behaviour. Drivers should not force errors here if they are not resizable objects (e.g. a serial line). See tty_do_resize() if you need to wrap the standard method in your own logic -- the usual case.”h]”hX3Optional: the default action is to update the termios structure without error. This is usually the correct behaviour. Drivers should not force errors here if they are not resizable objects (e.g. a serial line). See tty_do_resize() if you need to wrap the standard method in your own logic -- the usual case.”…”�”}”(hjÔBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M[hjà8ubhí)�”}”(hŒrCalled when the **tty** device receives a ``TIOCGICOUNT`` ioctl. Passed a kernel structure **icount** to complete.”h]”(hŒCalled when the ”…”�”}”(hjãBh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjëBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjãBubhŒ device receives a ”…”�”}”(hjãBh²hh³Nh´Nubj;)�”}”(hŒ``TIOCGICOUNT``”h]”hŒ TIOCGICOUNT”…”�”}”(hjýBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjãBubhŒ" ioctl. Passed a kernel structure ”…”�”}”(hjãBh²hh³Nh´Nubj0)�”}”(hŒ **icount**”h]”hŒicount”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjãBubhŒ to complete.”…”�”}”(hjãBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mbhjà8ubhí)�”}”(hŒIOptional: called only if provided, otherwise ``ENOTTY`` will be returned.”h]”(hŒ-Optional: called only if provided, otherwise ”…”�”}”(hj(Ch²hh³Nh´Nubj;)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hj0Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj(CubhŒ will be returned.”…”�”}”(hj(Ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mehjà8ubhí)�”}”(hŒžCalled when the **tty** device receives a ``TIOCGSERIAL`` ioctl. Passed a kernel structure **p** (:c:type:`struct serial_struct `) to complete.”h]”(hŒCalled when the ”…”�”}”(hjICh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjQCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjICubhŒ device receives a ”…”�”}”(hjICh²hh³Nh´Nubj;)�”}”(hŒ``TIOCGSERIAL``”h]”hŒ TIOCGSERIAL”…”�”}”(hjcCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjICubhŒ" ioctl. Passed a kernel structure ”…”�”}”(hjICh²hh³Nh´Nubj0)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjuCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjICubhŒ (”…”�”}”(hjICh²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct serial_struct `”h]”j;)�”}”(hj‰Ch]”hŒstruct serial_struct”…”�”}”(hj‹Ch²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hj‡Cubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ serial_struct”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MhhjICubhŒ) to complete.”…”�”}”(hjICh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¦Ch´Mhhjà8ubhí)�”}”(hŒ…Optional: called only if provided, otherwise ``ENOTTY`` will be returned. Do not call this function directly, call tty_tiocgserial().”h]”(hŒ-Optional: called only if provided, otherwise ”…”�”}”(hj±Ch²hh³Nh´Nubj;)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hj¹Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj±CubhŒN will be returned. Do not call this function directly, call tty_tiocgserial().”…”�”}”(hj±Ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mkhjà8ubhí)�”}”(hŒ©Called when the **tty** device receives a ``TIOCSSERIAL`` ioctl. Passed a kernel structure **p** (:c:type:`struct serial_struct `) to set the values from.”h]”(hŒCalled when the ”…”�”}”(hjÒCh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjÚCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÒCubhŒ device receives a ”…”�”}”(hjÒCh²hh³Nh´Nubj;)�”}”(hŒ``TIOCSSERIAL``”h]”hŒ TIOCSSERIAL”…”�”}”(hjìCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÒCubhŒ" ioctl. Passed a kernel structure ”…”�”}”(hjÒCh²hh³Nh´Nubj0)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjþCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÒCubhŒ (”…”�”}”(hjÒCh²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct serial_struct `”h]”j;)�”}”(hjDh]”hŒstruct serial_struct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hjDubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ serial_struct”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MohjÒCubhŒ) to set the values from.”…”�”}”(hjÒCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j/Dh´Mohjà8ubhí)�”}”(hŒ…Optional: called only if provided, otherwise ``ENOTTY`` will be returned. Do not call this function directly, call tty_tiocsserial().”h]”(hŒ-Optional: called only if provided, otherwise ”…”�”}”(hj:Dh²hh³Nh´Nubj;)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hjBDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj:DubhŒN will be returned. Do not call this function directly, call tty_tiocsserial().”…”�”}”(hj:Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mrhjà8ubhí)�”}”(hŒœCalled when the **tty** device file descriptor receives a fdinfo request from VFS (to show in /proc//fdinfo/). **m** should be filled with information.”h]”(hŒCalled when the ”…”�”}”(hj[Dh²hh³Nh´Nubj0)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjcDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj[DubhŒ] device file descriptor receives a fdinfo request from VFS (to show in /proc//fdinfo/). ”…”�”}”(hj[Dh²hh³Nh´Nubj0)�”}”(hŒ**m**”h]”hŒm”…”�”}”(hjuDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj[DubhŒ# should be filled with information.”…”�”}”(hj[Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mvhjà8ubhí)�”}”(hŒ…Optional: called only if provided, otherwise nothing is written to **m**. Do not call this function directly, call tty_show_fdinfo().”h]”(hŒCOptional: called only if provided, otherwise nothing is written to ”…”�”}”(hjŽDh²hh³Nh´Nubj0)�”}”(hŒ**m**”h]”hŒm”…”�”}”(hj–Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjŽDubhŒ=. Do not call this function directly, call tty_show_fdinfo().”…”�”}”(hjŽDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´Mzhjà8ubhí)�”}”(hŒ§kgdboc support (Documentation/process/debugging/kgdb.rst). This routine is called to initialize the HW for later use by calling **poll_get_char** or **poll_put_char**.”h]”(hŒ€kgdboc support (Documentation/process/debugging/kgdb.rst). This routine is called to initialize the HW for later use by calling ”…”�”}”(hj¯Dh²hh³Nh´Nubj0)�”}”(hŒ**poll_get_char**”h]”hŒ poll_get_char”…”�”}”(hj·Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¯DubhŒ or ”…”�”}”(hj¯Dh²hh³Nh´Nubj0)�”}”(hŒ**poll_put_char**”h]”hŒ poll_put_char”…”�”}”(hjÉDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj¯DubhŒ.”…”�”}”(hj¯Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M~hjà8ubhí)�”}”(hŒMOptional: called only if provided, otherwise skipped as a non-polling driver.”h]”hŒMOptional: called only if provided, otherwise skipped as a non-polling driver.”…”�”}”(hjâDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M‚hjà8ubhí)�”}”(hŒwkgdboc support (see **poll_init**). **driver** should read a character from a tty identified by **line** and return it.”h]”(hŒkgdboc support (see ”…”�”}”(hjñDh²hh³Nh´Nubj0)�”}”(hŒ **poll_init**”h]”hŒ poll_init”…”�”}”(hjùDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjñDubhŒ). ”…”�”}”(hjñDh²hh³Nh´Nubj0)�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjñDubhŒ2 should read a character from a tty identified by ”…”�”}”(hjñDh²hh³Nh´Nubj0)�”}”(hŒ**line**”h]”hŒline”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjñDubhŒ and return it.”…”�”}”(hjñDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M†hjà8ubhí)�”}”(hŒ0Optional: called only if **poll_init** provided.”h]”(hŒOptional: called only if ”…”�”}”(hj6Eh²hh³Nh´Nubj0)�”}”(hŒ **poll_init**”h]”hŒ poll_init”…”�”}”(hj>Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj6EubhŒ provided.”…”�”}”(hj6Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M‰hjà8ubhí)�”}”(hŒmkgdboc support (see **poll_init**). **driver** should write character **ch** to a tty identified by **line**.”h]”(hŒkgdboc support (see ”…”�”}”(hjWEh²hh³Nh´Nubj0)�”}”(hŒ **poll_init**”h]”hŒ poll_init”…”�”}”(hj_Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjWEubhŒ). ”…”�”}”(hjWEh²hh³Nh´Nubj0)�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hjqEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjWEubhŒ should write character ”…”�”}”(hjWEh²hh³Nh´Nubj0)�”}”(hŒ**ch**”h]”hŒch”…”�”}”(hjƒEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjWEubhŒ to a tty identified by ”…”�”}”(hjWEh²hh³Nh´Nubj0)�”}”(hŒ**line**”h]”hŒline”…”�”}”(hj•Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjWEubhŒ.”…”�”}”(hjWEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´MŒhjà8ubhí)�”}”(hŒ0Optional: called only if **poll_init** provided.”h]”(hŒOptional: called only if ”…”�”}”(hj®Eh²hh³Nh´Nubj0)�”}”(hŒ **poll_init**”h]”hŒ poll_init”…”�”}”(hj¶Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hj®EubhŒ provided.”…”�”}”(hj®Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M�hjà8ubhí)�”}”(hŒ´Driver **driver** (cast to :c:type:`struct tty_driver `) can show additional info in /proc/tty/driver/. It is enough to fill in the information into **m**.”h]”(hŒDriver ”…”�”}”(hjÏEh²hh³Nh´Nubj0)�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hj×Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÏEubhŒ (cast to ”…”�”}”(hjÏEh²hh³Nh´Nubh)�”}”(hŒ(:c:type:`struct tty_driver `”h]”j;)�”}”(hjëEh]”hŒstruct tty_driver”…”�”}”(hjíEh²hh³Nh´Nubah}”(h]”h ]”(j6 jçŒc-type”eh"]”h$]”h&]”uh1j:hjéEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jB Œ refdomain”jçŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jOjH jK Œ tty_driver”uh1hh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M’hjÏEubhŒk) can show additional info in /proc/tty/driver/. It is enough to fill in the information into ”…”�”}”(hjÏEh²hh³Nh´Nubj0)�”}”(hŒ**m**”h]”hŒm”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j/hjÏEubhŒ.”…”�”}”(hjÏEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jFh´M’hjà8ubhí)�”}”(hŒDOptional: called only if provided, otherwise no /proc entry created.”h]”hŒDOptional: called only if provided, otherwise no /proc entry created.”…”�”}”(hj%Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M–hjà8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j h³j:9h´Kyhj7.h²hubhí)�”}”(hŒÓThis structure defines the interface between the low-level tty driver and the tty routines. These routines can be defined. Unless noted otherwise, they are optional, and can be filled in with a ``NULL`` pointer.”h]”(hŒÂThis structure defines the interface between the low-level tty driver and the tty routines. These routines can be defined. Unless noted otherwise, they are optional, and can be filled in with a ”…”�”}”(hj:Fh²hh³Nh´Nubj;)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjBFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj:FubhŒ pointer.”…”�”}”(hj:Fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œe/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_driver:128: ./include/linux/tty_driver.h”h´M˜hj7.h²hubeh}”(h]”jàah ]”h"]”Œtty operations reference”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K|jî Kubeh}”(h]”Œtty-driver-and-tty-operations”ah ]”h"]”Œtty driver and tty operations”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j�FŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”(Œtty driver reference”]”jaŒtty driver flags”]”jNaŒregistering devices”]”jA aŒlinking devices to ports”]”jÎaŒtty operations reference”]”jauŒrefids”}”Œnameids”}”(jgFjdFjújõjó jjë j!jÙ&jOjÔjnjÒ&j�j*.j¾j_FjàuŒ nametypes”}”(jgF‰jú‰jó ‰jë ‰jÙ&‰jÔ‰jÒ&‰j*.‰j_F‰uh}”(jdFhÊjõhßjjýj“jœjjjjj!jˆj³j¹jOj jg jl jèjíjnj]jGjLjcjhjÞjãj�jáj’j—jNjSjî!jó!j¾jæ&j'j'jàj7.jb.jh.hühójjjIj@jhj_jŠj�j¸j¯jÚjÑuŒ 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”“”}”j›FKs…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.