€• Œ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_port”Œ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_port”Œ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_port”Œ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_port”Œ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_port”Œ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_port”Œ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_port”Œ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³ŒE/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒTTY Port”h]”hŒTTY Port”…”�”}”(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ŒTTY Port Functions”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œtty-port-functions”uh1hñhhîubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhhéubhã)�”}”(hhh]”(hè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒInit & Destroy”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œ init-destroy”uh1hñhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒOpen/Close/Hangup Helpers”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œopen-close-hangup-helpers”uh1hñhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒTTY Refcounting”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œtty-refcounting”uh1hñhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒ TTY Helpers”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œ tty-helpers”uh1hñhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒ Modem Signals”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œ modem-signals”uh1hñhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâhhéubeh}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒTTY Port Reference”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”Œid7”ah ]”h"]”h$]”h&]”Œrefid”Œtty-port-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 Port Operations Reference”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”Œid8”ah ]”h"]”h$]”h&]”Œrefid”Œtty-port-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í)�”}”(hX+The TTY drivers are advised to use struct tty_port helpers as much as possible. If the drivers implement :c:member:`tty_port.ops.activate()` and :c:member:`tty_port.ops.shutdown()`, they can use tty_port_open(), tty_port_close(), and tty_port_hangup() in respective :c:member:`tty_struct.ops` hooks.”h]”(hŒiThe TTY drivers are advised to use struct tty_port helpers as much as possible. If the drivers implement ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ#:c:member:`tty_port.ops.activate()`”h]”hŒliteral”“”)�”}”(hj h]”hŒtty_port.ops.activate()”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-member”eh"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/tty/tty_port”Œ refdomain”j/Œreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰Œ reftarget”Œtty_port.ops.activate()”uh1hh³hÇh´K hjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ#:c:member:`tty_port.ops.shutdown()`”h]”j#)�”}”(hjIh]”hŒtty_port.ops.shutdown()”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-member”eh"]”h$]”h&]”uh1j"hjGubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰jAŒtty_port.ops.shutdown()”uh1hh³hÇh´K hjubhŒV, they can use tty_port_open(), tty_port_close(), and tty_port_hangup() in respective ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ:c:member:`tty_struct.ops`”h]”j#)�”}”(hjlh]”hŒtty_struct.ops”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-member”eh"]”h$]”h&]”uh1j"hjjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œmember”Œ refexplicit”‰Œrefwarn”‰jAŒtty_struct.ops”uh1hh³hÇh´K hjubhŒ hooks.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K hhÊh²hubhí)�”}”(hŒ�The reference and details are contained in the `TTY Port Reference`_ and `TTY Port Operations Reference`_ sections at the bottom.”h]”(hŒ/The reference and details are contained in the ”…”�”}”(hj“h²hh³Nh´Nubhò)�”}”(hŒ`TTY Port Reference`_”h]”hŒTTY Port Reference”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒTTY Port Reference”Œrefid”j×uh1hñhj“Œresolved”KubhŒ and ”…”�”}”(hj“h²hh³Nh´Nubhò)�”}”(hŒ `TTY Port Operations Reference`_”h]”hŒTTY Port Operations Reference”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”ŒTTY Port Operations Reference”j«jùuh1hñhj“j¬KubhŒ sections at the bottom.”…”�”}”(hj“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Port Functions”h]”hŒTTY Port Functions”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«hüuh1hÍhjËh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒInit & Destroy”h]”hŒInit & Destroy”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«juh1hÍhjÜh²hh³hÇh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œtty_port_init (C function)”Œc.tty_port_init”hNt”auh1jíhjÜh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ*void tty_port_init (struct tty_port *port)”h]”hŒdesc_signature_line”“”)�”}”(hŒ)void tty_port_init(struct tty_port *port)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jhj h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KNubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j!hj h²hh³j h´KNubhŒ desc_name”“”)�”}”(hŒ tty_port_init”h]”hŒ desc_sig_name”“”)�”}”(hŒ tty_port_init”h]”hŒ tty_port_init”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j8hj4ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1j2hj h²hh³j h´KNubhŒdesc_parameterlist”“”)�”}”(hŒ(struct tty_port *port)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct tty_port *port”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j]hjYubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjYubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”Œ identifier”Œ reftarget”j�Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jšŒ ASTIdentifier”“”)�”}”j•j<sbŒc.tty_port_init”†”asbuh1hhjYubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjYubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jµhjYubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjSubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj h²hh³j h´KNubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1j Œsphinx_line_type”Œ declarator”hjh²hh³j h´KNubah}”(h]”jüah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jh³j h´KNhjh²hubhŒ desc_content”“”)�”}”(hhh]”hí)�”}”(hŒinitialize tty_port”h]”hŒinitialize tty_port”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KNhj÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjh²hh³j h´KNubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”Œdomain”j/Œobjtype”jŒdesctype”jŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jþh²hhjÜh³Nh´NubhŒ container”“”)�”}”(hXU**Parameters** ``struct tty_port *port`` tty_port to initialize **Description** Initializes the state of struct tty_port. When a port was initialized using this function, one has to destroy the port by tty_port_destroy(). Either indirectly by using :c:type:`tty_port` refcounting (tty_port_put()) or directly if refcounting is not used.”h]”(hí)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj$h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KRhjubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ1``struct tty_port *port`` tty_port to initialize ”h]”(hŒterm”“”)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjKh]”hŒstruct tty_port *port”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KOhjCubhŒ definition”“”)�”}”(hhh]”hí)�”}”(hŒtty_port to initialize”h]”hŒtty_port to initialize”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j`h´KOhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j`h´KOhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjˆh]”hŒ Description”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KQhjubhí)�”}”(hXInitializes the state of struct tty_port. When a port was initialized using this function, one has to destroy the port by tty_port_destroy(). Either indirectly by using :c:type:`tty_port` refcounting (tty_port_put()) or directly if refcounting is not used.”h]”(hŒ©Initializes the state of struct tty_port. When a port was initialized using this function, one has to destroy the port by tty_port_destroy(). Either indirectly by using ”…”�”}”(hjžh²hh³Nh´Nubh)�”}”(hŒ:c:type:`tty_port`”h]”j#)�”}”(hj¨h]”hŒtty_port”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j™jœ)�”}”jŸ]”sbjAŒtty_port”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´KPhjžubhŒE refcounting (tty_port_put()) or directly if refcounting is not used.”…”�”}”(hjžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÈh´KPhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjÜh²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_destroy (C function)”Œc.tty_port_destroy”hNt”auh1jíhjÜh²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ-void tty_port_destroy (struct tty_port *port)”h]”j )�”}”(hŒ,void tty_port_destroy(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjïh²hh³jh´M ubj3)�”}”(hŒtty_port_destroy”h]”j9)�”}”(hŒtty_port_destroy”h]”hŒtty_port_destroy”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjïh²hh³jh´M ubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj,ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj,ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jPŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jsbŒc.tty_port_destroy”†”asbuh1hhj,ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj,ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj,ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj(ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjïh²hh³jh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjëh²hh³jh´M ubah}”(h]”jæah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³jh´M hjèh²hubjö)�”}”(hhh]”hí)�”}”(hŒdestroy inited port”h]”hŒdestroy inited port”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M hj°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjèh²hh³jh´M ubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjËjjËj‰j‰j‰uh1jþh²hhjÜh³Nh´Nubj)�”}”(hX***Parameters** ``struct tty_port *port`` tty port to be destroyed **Description** When a port was initialized using tty_port_init(), one has to destroy the port by this function. Either indirectly by using :c:type:`tty_port` refcounting (tty_port_put()) or directly if refcounting is not used.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjÕh]”hŒ Parameters”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´MhjÏubj=)�”}”(hhh]”jB)�”}”(hŒ3``struct tty_port *port`` tty port to be destroyed ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´Mhjîubjb)�”}”(hhh]”hí)�”}”(hŒtty port to be destroyed”h]”hŒtty port to be destroyed”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j h´Mhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjÏubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj/h]”hŒ Description”…”�”}”(hj1h²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_port:24: ./drivers/tty/tty_port.c”h´MhjÏubhí)�”}”(hŒÓWhen a port was initialized using tty_port_init(), one has to destroy the port by this function. Either indirectly by using :c:type:`tty_port` refcounting (tty_port_put()) or directly if refcounting is not used.”h]”(hŒ|When a port was initialized using tty_port_init(), one has to destroy the port by this function. Either indirectly by using ”…”�”}”(hjEh²hh³Nh´Nubh)�”}”(hŒ:c:type:`tty_port`”h]”j#)�”}”(hjOh]”hŒtty_port”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hjMubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j™jÄjAŒtty_port”uh1hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´MhjEubhŒE refcounting (tty_port_put()) or directly if refcounting is not used.”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jlh´MhjÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjÜh²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_put (C function)”Œc.tty_port_put”hNt”auh1jíhjÜh²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ)void tty_port_put (struct tty_port *port)”h]”j )�”}”(hŒ(void tty_port_put(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.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,ubj3)�”}”(hŒ tty_port_put”h]”j9)�”}”(hŒ tty_port_put”h]”hŒ tty_port_put”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj´ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj“h²hh³j¥h´M,ubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÐubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÐubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jôŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jºsbŒc.tty_port_put”†”asbuh1hhjÐubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÐubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÐubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjÌubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj“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ôhuh1jh³j¥h´M,hjŒh²hubjö)�”}”(hhh]”hí)�”}”(hŒdrop a reference to tty_port”h]”hŒdrop a reference to tty_port”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M,hjTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjŒh²hh³j¥h´M,ubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjojjoj‰j‰j‰uh1jþh²hhjÜh³Nh´Nubj)�”}”(hŒå**Parameters** ``struct tty_port *port`` port to drop a reference of (can be NULL) **Description** The final put will destroy and free up the **port** using **port->ops->destruct\(\)** hook, or using kfree() if not provided.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjyh]”hŒ Parameters”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M0hjsubj=)�”}”(hhh]”jB)�”}”(hŒD``struct tty_port *port`` port to drop a reference of (can be NULL) ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M-hj’ubjb)�”}”(hhh]”hí)�”}”(hŒ)port to drop a reference of (can be NULL)”h]”hŒ)port to drop a reference of (can be NULL)”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j­h´M-hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j­h´M-hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjsubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjÓh]”hŒ Description”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M/hjsubhí)�”}”(hŒ}The final put will destroy and free up the **port** using **port->ops->destruct\(\)** hook, or using kfree() if not provided.”h]”(hŒ+The final put will destroy and free up the ”…”�”}”(hjéh²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjéubhŒ using ”…”�”}”(hjéh²hh³Nh´Nubj')�”}”(hŒ**port->ops->destruct\(\)**”h]”hŒport->ops->destruct()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjéubhŒ( hook, or using kfree() if not provided.”…”�”}”(hjéh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:24: ./drivers/tty/tty_port.c”h´M.hjsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjÜh²hh³Nh´Nubeh}”(h]”j!ah ]”h"]”Œinit & destroy”ah$]”h&]”uh1hÈhjËh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒOpen/Close/Hangup Helpers”h]”hŒOpen/Close/Hangup Helpers”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«j=uh1hÍhj*h²hh³hÇh´Kubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_shutdown (C function)”Œc.tty_port_shutdown”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒFvoid tty_port_shutdown (struct tty_port *port, struct tty_struct *tty)”h]”j )�”}”(hŒEvoid tty_port_shutdown(struct tty_port *port, struct tty_struct *tty)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mnubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjPh²hh³jbh´Mnubj3)�”}”(hŒtty_port_shutdown”h]”j9)�”}”(hŒtty_port_shutdown”h]”hŒtty_port_shutdown”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjqubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjPh²hh³jbh´MnubjR)�”}”(hŒ/(struct tty_port *port, struct tty_struct *tty)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj�ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj�ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j±Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jwsbŒc.tty_port_shutdown”†”asbuh1hhj�ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj�ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj�ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj‰ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÿubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÿubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j# Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jËŒc.tty_port_shutdown”†”asbuh1hhjÿubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÿubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÿubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjPh²hh³jbh´Mnubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjLh²hh³jbh´Mnubah}”(h]”jGah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³jbh´MnhjIh²hubjö)�”}”(hhh]”hí)�”}”(hŒ&internal helper to shutdown the device”h]”hŒ&internal helper to shutdown the device”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mnhj� h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjIh²hh³jbh´Mnubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjœ jjœ j‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hXp**Parameters** ``struct tty_port *port`` tty port to be shut down ``struct tty_struct *tty`` the associated tty **Description** It is used by tty_port_hangup() and tty_port_close(). Its task is to shutdown the device if it was initialized (note consoles remain functioning). It lowers DTR/RTS (if **tty** has HUPCL set) and invokes **port->ops->shutdown\(\)**.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj¦ h]”hŒ Parameters”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mrhj  ubj=)�”}”(hhh]”(jB)�”}”(hŒ3``struct tty_port *port`` tty port to be shut down ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mohj¿ ubjb)�”}”(hhh]”hí)�”}”(hŒtty port to be shut down”h]”hŒtty port to be shut down”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÚ h´MohjÛ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÚ h´Mohj¼ ubjB)�”}”(hŒ.``struct tty_struct *tty`` the associated tty ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hjþ h]”hŒstruct tty_struct *tty”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mphjø ubjb)�”}”(hhh]”hí)�”}”(hŒthe associated tty”h]”hŒthe associated tty”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j h´Mphj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j h´Mphj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hj  ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj9 h]”hŒ Description”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj7 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mrhj  ubhí)�”}”(hŒèIt is used by tty_port_hangup() and tty_port_close(). Its task is to shutdown the device if it was initialized (note consoles remain functioning). It lowers DTR/RTS (if **tty** has HUPCL set) and invokes **port->ops->shutdown\(\)**.”h]”(hŒ©It is used by tty_port_hangup() and tty_port_close(). Its task is to shutdown the device if it was initialized (note consoles remain functioning). It lowers DTR/RTS (if ”…”�”}”(hjO h²hh³Nh´Nubj')�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjO ubhŒ has HUPCL set) and invokes ”…”�”}”(hjO h²hh³Nh´Nubj')�”}”(hŒ**port->ops->shutdown\(\)**”h]”hŒport->ops->shutdown()”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjO ubhŒ.”…”�”}”(hjO h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mqhj  ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_hangup (C function)”Œc.tty_port_hangup”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ,void tty_port_hangup (struct tty_port *port)”h]”j )�”}”(hŒ+void tty_port_hangup(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjž h²hh³j° h´Mubj3)�”}”(hŒtty_port_hangup”h]”j9)�”}”(hŒtty_port_hangup”h]”hŒtty_port_hangup”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¿ ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjž h²hh³j° h´MubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÛ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÛ ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjú ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÿ Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jÅ sbŒc.tty_port_hangup”†”asbuh1hhjÛ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÛ ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÛ ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj× ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjž h²hh³j° h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjš h²hh³j° h´Mubah}”(h]”j• ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³j° h´Mhj— h²hubjö)�”}”(hhh]”hí)�”}”(hŒ hangup helper”h]”hŒ hangup helper”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj_ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj— h²hh³j° h´Mubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjz jjz j‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hŒ¬**Parameters** ``struct tty_port *port`` tty port **Description** Perform port level tty hangup flag and count changes. Drop the tty reference. Caller holds tty lock.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj„ h]”hŒ Parameters”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj‚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mƒhj~ ubj=)�”}”(hhh]”jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M€hj� ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¸ h´M€hj¹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j¸ h´M€hjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj~ ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjÞ h]”hŒ Description”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M‚hj~ ubhí)�”}”(hŒMPerform port level tty hangup flag and count changes. Drop the tty reference.”h]”hŒMPerform port level tty hangup flag and count changes. Drop the tty reference.”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M�hj~ ubhí)�”}”(hŒCaller holds tty lock.”h]”hŒCaller holds tty lock.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M„hj~ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ%tty_port_block_til_ready (C function)”Œc.tty_port_block_til_ready”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ_int tty_port_block_til_ready (struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”j )�”}”(hŒ^int tty_port_block_til_ready(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj. h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mùubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj. h²hh³j@ h´Mùubj3)�”}”(hŒtty_port_block_til_ready”h]”j9)�”}”(hŒtty_port_block_til_ready”h]”hŒtty_port_block_til_ready”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjO ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj. h²hh³j@ h´MùubjR)�”}”(hŒB(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjk ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjk ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjŠ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j� Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jU sbŒc.tty_port_block_til_ready”†”asbuh1hhjk ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjk ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjk ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjk ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjg ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÝ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÝ ubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjü ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j© Œc.tty_port_block_til_ready”†”asbuh1hhjÝ ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÝ ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÝ ubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjg ubjX)�”}”(hŒstruct file *filp”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjM ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjM ubh)�”}”(hhh]”j9)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjl ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jq Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j© Œc.tty_port_block_til_ready”†”asbuh1hhjM ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjM ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjM ubj9)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjM ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjg ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj. 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ôhuh1jh³j@ h´Mùhj' h²hubjö)�”}”(hhh]”hí)�”}”(hŒWaiting logic for tty open”h]”hŒWaiting logic for tty open”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.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&]”jj/jjê jjê j‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hXs**Parameters** ``struct tty_port *port`` the tty port being opened ``struct tty_struct *tty`` the tty device being bound ``struct file *filp`` the file pointer of the opener or ``NULL`` **Description** Implement the core POSIX/SuS tty behaviour when opening a tty device. Handles: - hangup (both before and during) - non blocking open - rts/dtr/dcd - signals - port flags and counts The passed **port** must implement the **port->ops->carrier_raised** method if it can do carrier detect and the **port->ops->dtr_rts** method if it supports software management of these lines. Note that the dtr/rts raise is done each iteration as a hangup may have previously dropped them while we wait. Caller holds tty lock. **Note** May drop and reacquire tty lock when blocking, so **tty** and **port** may have changed state (eg., may have been hung up).”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjô h]”hŒ Parameters”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mýhjî ubj=)�”}”(hhh]”(jB)�”}”(hŒ4``struct tty_port *port`` the tty port being opened ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjh]”hŒstruct tty_port *port”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Múhj ubjb)�”}”(hhh]”hí)�”}”(hŒthe tty port being opened”h]”hŒthe tty port being opened”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j(h´Múhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j(h´Múhj ubjB)�”}”(hŒ6``struct tty_struct *tty`` the tty device being bound ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hjLh]”hŒstruct tty_struct *tty”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MûhjFubjb)�”}”(hhh]”hí)�”}”(hŒthe tty device being bound”h]”hŒthe tty device being bound”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jah´Mûhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jah´Mûhj ubjB)�”}”(hŒA``struct file *filp`` the file pointer of the opener or ``NULL`` ”h]”(jH)�”}”(hŒ``struct file *filp``”h]”j#)�”}”(hj…h]”hŒstruct file *filp”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mühjubjb)�”}”(hhh]”hí)�”}”(hŒ*the file pointer of the opener or ``NULL``”h]”(hŒ"the file pointer of the opener or ”…”�”}”(hjžh²hh³Nh´Nubj#)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jšh´Mühj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jšh´Mühj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjî ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjÎh]”hŒ Description”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mþhjî ubhí)�”}”(hŒNImplement the core POSIX/SuS tty behaviour when opening a tty device. Handles:”h]”hŒNImplement the core POSIX/SuS tty behaviour when opening a tty device. Handles:”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mýhjî ubhŒ block_quote”“”)�”}”(hŒf- hangup (both before and during) - non blocking open - rts/dtr/dcd - signals - port flags and counts ”h]”hã)�”}”(hhh]”(hè)�”}”(hŒhangup (both before and during)”h]”hí)�”}”(hjþh]”hŒhangup (both before and during)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjùubhè)�”}”(hŒnon blocking open”h]”hí)�”}”(hjh]”hŒnon blocking open”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjùubhè)�”}”(hŒ rts/dtr/dcd”h]”hí)�”}”(hj.h]”hŒ rts/dtr/dcd”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjùubhè)�”}”(hŒsignals”h]”hí)�”}”(hjFh]”hŒsignals”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjùubhè)�”}”(hŒport flags and counts ”h]”hí)�”}”(hŒport flags and counts”h]”hŒport flags and counts”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjùubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hâh³j h´Mhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jóh³j h´Mhjî ubhí)�”}”(hX/The passed **port** must implement the **port->ops->carrier_raised** method if it can do carrier detect and the **port->ops->dtr_rts** method if it supports software management of these lines. Note that the dtr/rts raise is done each iteration as a hangup may have previously dropped them while we wait.”h]”(hŒ The passed ”…”�”}”(hjƒh²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjƒubhŒ must implement the ”…”�”}”(hjƒh²hh³Nh´Nubj')�”}”(hŒ**port->ops->carrier_raised**”h]”hŒport->ops->carrier_raised”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjƒubhŒ, method if it can do carrier detect and the ”…”�”}”(hjƒh²hh³Nh´Nubj')�”}”(hŒ**port->ops->dtr_rts**”h]”hŒport->ops->dtr_rts”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjƒubhŒ© method if it supports software management of these lines. Note that the dtr/rts raise is done each iteration as a hangup may have previously dropped them while we wait.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhjî ubhí)�”}”(hŒCaller holds tty lock.”h]”hŒCaller holds tty lock.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M hjî ubhí)�”}”(hŒ**Note**”h]”j')�”}”(hjÙh]”hŒNote”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M hjî ubhí)�”}”(hŒ{May drop and reacquire tty lock when blocking, so **tty** and **port** may have changed state (eg., may have been hung up).”h]”(hŒ2May drop and reacquire tty lock when blocking, so ”…”�”}”(hjïh²hh³Nh´Nubj')�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjïubhŒ and ”…”�”}”(hjïh²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjïubhŒ5 may have changed state (eg., may have been hung up).”…”�”}”(hjïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhjî ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ!tty_port_close_start (C function)”Œc.tty_port_close_start”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ[int tty_port_close_start (struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”j )�”}”(hŒZint tty_port_close_start(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Muubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj>h²hh³jPh´Muubj3)�”}”(hŒtty_port_close_start”h]”j9)�”}”(hŒtty_port_close_start”h]”hŒtty_port_close_start”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj_ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj>h²hh³jPh´MuubjR)�”}”(hŒB(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj{ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj{ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jŸŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jesbŒc.tty_port_close_start”†”asbuh1hhj{ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj{ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj{ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjwubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjíubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjíubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¹Œc.tty_port_close_start”†”asbuh1hhjíubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjíubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjíubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjwubjX)�”}”(hŒstruct file *filp”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj]ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj]ubh)�”}”(hhh]”j9)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j�Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¹Œc.tty_port_close_start”†”asbuh1hhj]ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj]ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj]ubj9)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjwubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj>h²hh³jPh´Muubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhj:h²hh³jPh´Muubah}”(h]”j5ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³jPh´Muhj7h²hubjö)�”}”(hhh]”hí)�”}”(hŒ$helper for tty->ops->close, part 1/2”h]”hŒ$helper for tty->ops->close, part 1/2”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Muhjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj7h²hh³jPh´Muubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjújjúj‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hX**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_struct *tty`` tty being closed ``struct file *filp`` passed file pointer **Description** Decrements and checks open count. Flushes the port if this is the last close. That means, dropping the data from the outpu buffer on the device and waiting for sending logic to finish. The rest of close handling is performed in tty_port_close_end(). Locking: Caller holds tty lock. **Return** 1 if this is the last close, otherwise 0”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Myhjþubj=)�”}”(hhh]”(jB)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mvhjubjb)�”}”(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³j8h´Mvhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j8h´MvhjubjB)�”}”(hŒ,``struct tty_struct *tty`` tty being closed ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hj\h]”hŒstruct tty_struct *tty”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MwhjVubjb)�”}”(hhh]”hí)�”}”(hŒtty being closed”h]”hŒtty being closed”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jqh´Mwhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jqh´MwhjubjB)�”}”(hŒ*``struct file *filp`` passed file pointer ”h]”(jH)�”}”(hŒ``struct file *filp``”h]”j#)�”}”(hj•h]”hŒstruct file *filp”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mxhj�ubjb)�”}”(hhh]”hí)�”}”(hŒpassed file pointer”h]”hŒpassed file pointer”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jªh´Mxhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jªh´Mxhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjþubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjÐh]”hŒ Description”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mzhjþubhí)�”}”(hŒùDecrements and checks open count. Flushes the port if this is the last close. That means, dropping the data from the outpu buffer on the device and waiting for sending logic to finish. The rest of close handling is performed in tty_port_close_end().”h]”hŒùDecrements and checks open count. Flushes the port if this is the last close. That means, dropping the data from the outpu buffer on the device and waiting for sending logic to finish. The rest of close handling is performed in tty_port_close_end().”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Myhjþubhí)�”}”(hŒLocking: Caller holds tty lock.”h]”hŒLocking: Caller holds tty lock.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M~hjþubhí)�”}”(hŒ **Return**”h]”j')�”}”(hjh]”hŒReturn”…”�”}”(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_port:31: ./drivers/tty/tty_port.c”h´M€hjþubhí)�”}”(hŒ(1 if this is the last close, otherwise 0”h]”hŒ(1 if this is the last close, otherwise 0”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M�hjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_close_end (C function)”Œc.tty_port_close_end”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒGvoid tty_port_close_end (struct tty_port *port, struct tty_struct *tty)”h]”j )�”}”(hŒFvoid tty_port_close_end(struct tty_port *port, struct tty_struct *tty)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGh²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M­ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjGh²hh³jYh´M­ubj3)�”}”(hŒtty_port_close_end”h]”j9)�”}”(hŒtty_port_close_end”h]”hŒtty_port_close_end”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjhubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjGh²hh³jYh´M­ubjR)�”}”(hŒ/(struct tty_port *port, struct tty_struct *tty)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj„ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj„ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j¨Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jnsbŒc.tty_port_close_end”†”asbuh1hhj„ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj„ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj„ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj€ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjöubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjöubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jÂŒc.tty_port_close_end”†”asbuh1hhjöubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjöubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjöubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj€ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjGh²hh³jYh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjCh²hh³jYh´M­ubah}”(h]”j>ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³jYh´M­hj@h²hubjö)�”}”(hhh]”hí)�”}”(hŒ$helper for tty->ops->close, part 2/2”h]”hŒ$helper for tty->ops->close, part 2/2”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M­hjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj@h²hh³jYh´M­ubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jj“jj“j‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hXv**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_struct *tty`` tty being closed **Description** This is a continuation of the first part: tty_port_close_start(). This should be called after turning off the device. It flushes the data from the line discipline and delays the close by **port->close_delay**. Locking: Caller holds tty lock.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj�h]”hŒ Parameters”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M±hj—ubj=)�”}”(hhh]”(jB)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M®hj¶ubjb)�”}”(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´M®hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÑh´M®hj³ubjB)�”}”(hŒ,``struct tty_struct *tty`` tty being closed ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hjõh]”hŒstruct tty_struct *tty”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M¯hjïubjb)�”}”(hhh]”hí)�”}”(hŒtty being closed”h]”hŒtty being closed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j h´M¯hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j h´M¯hj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hj—ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj0h]”hŒ Description”…”�”}”(hj2h²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_port:31: ./drivers/tty/tty_port.c”h´M±hj—ubhí)�”}”(hŒÑThis is a continuation of the first part: tty_port_close_start(). This should be called after turning off the device. It flushes the data from the line discipline and delays the close by **port->close_delay**.”h]”(hŒ»This is a continuation of the first part: tty_port_close_start(). This should be called after turning off the device. It flushes the data from the line discipline and delays the close by ”…”�”}”(hjFh²hh³Nh´Nubj')�”}”(hŒ**port->close_delay**”h]”hŒport->close_delay”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjFubhŒ.”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M°hj—ubhí)�”}”(hŒLocking: Caller holds tty lock.”h]”hŒLocking: Caller holds tty lock.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M´hj—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_close (C function)”Œc.tty_port_close”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒVvoid tty_port_close (struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”j )�”}”(hŒUvoid tty_port_close(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.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Íubj3)�”}”(hŒtty_port_close”h]”j9)�”}”(hŒtty_port_close”h]”hŒtty_port_close”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj³ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj’h²hh³j¤h´MÍubjR)�”}”(hŒB(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÏubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÏubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jóŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•j¹sbŒc.tty_port_close”†”asbuh1hhjÏubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÏubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÏubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjËubjX)�”}”(hŒstruct tty_struct *tty”•h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjAubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjAubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jeŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j Œc.tty_port_close”†”asbuh1hhjAubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjAubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjAubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjËubjX)�”}”(hŒstruct file *filp”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj±ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj±ubh)�”}”(hhh]”j9)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÕŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j Œc.tty_port_close”†”asbuh1hhj±ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj±ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj±ubj9)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjËubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj’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ôhuh1jh³j¤h´MÍhj‹h²hubjö)�”}”(hhh]”hí)�”}”(hŒgeneric tty->ops->close handler”h]”hŒgeneric tty->ops->close handler”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÍhj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj‹h²hh³j¤h´MÍubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjNjjNj‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hXÙ**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_struct *tty`` tty being closed ``struct file *filp`` passed file pointer **Description** It is a generic helper to be used in driver's **tty->ops->close**. It wraps a sequence of tty_port_close_start(), tty_port_shutdown(), and tty_port_close_end(). The latter two are called only if this is the last close. See the respective functions for the details. Locking: Caller holds tty lock”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjXh]”hŒ Parameters”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÑhjRubj=)�”}”(hhh]”(jB)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjwh]”hŒstruct tty_port *port”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÎhjqubjb)�”}”(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´MÎhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jŒh´MÎhjnubjB)�”}”(hŒ,``struct tty_struct *tty`` tty being closed ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hj°h]”hŒstruct tty_struct *tty”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÏhjªubjb)�”}”(hhh]”hí)�”}”(hŒtty being closed”h]”hŒtty being closed”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÅh´MÏhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÅh´MÏhjnubjB)�”}”(hŒ*``struct file *filp`` passed file pointer ”h]”(jH)�”}”(hŒ``struct file *filp``”h]”j#)�”}”(hjéh]”hŒstruct file *filp”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÐhjãubjb)�”}”(hhh]”hí)�”}”(hŒpassed file pointer”h]”hŒpassed file pointer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jþh´MÐhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jþh´MÐhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjRubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj$h]”hŒ Description”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÒhjRubhí)�”}”(hXIt is a generic helper to be used in driver's **tty->ops->close**. It wraps a sequence of tty_port_close_start(), tty_port_shutdown(), and tty_port_close_end(). The latter two are called only if this is the last close. See the respective functions for the details.”h]”(hŒ0It is a generic helper to be used in driver’s ”…”�”}”(hj:h²hh³Nh´Nubj')�”}”(hŒ**tty->ops->close**”h]”hŒtty->ops->close”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj:ubhŒÇ. It wraps a sequence of tty_port_close_start(), tty_port_shutdown(), and tty_port_close_end(). The latter two are called only if this is the last close. See the respective functions for the details.”…”�”}”(hj:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÑhjRubhí)�”}”(hŒLocking: Caller holds tty lock”h]”hŒLocking: Caller holds tty lock”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MÖhjRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_install (C function)”Œc.tty_port_install”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ_int tty_port_install (struct tty_port *port, struct tty_driver *driver, struct tty_struct *tty)”h]”j )�”}”(hŒ^int tty_port_install(struct tty_port *port, struct tty_driver *driver, struct tty_struct *tty)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.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çubj3)�”}”(hŒtty_port_install”h]”j9)�”}”(hŒtty_port_install”h]”hŒtty_port_install”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj§ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj†h²hh³j˜h´MçubjR)�”}”(hŒJ(struct tty_port *port, struct tty_driver *driver, struct tty_struct *tty)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÃubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÃubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jçŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•j­sbŒc.tty_port_install”†”asbuh1hhjÃubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÃubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÃubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¿ubjX)�”}”(hŒstruct tty_driver *driver”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj5ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj5ubh)�”}”(hhh]”j9)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jYŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jŒc.tty_port_install”†”asbuh1hhj5ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj5ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj5ubj9)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¿ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj¥ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj¥ubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÄubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÉŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jŒc.tty_port_install”†”asbuh1hhj¥ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj¥ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj¥ubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj†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ôhuh1jh³j˜h´Mçhjh²hubjö)�”}”(hhh]”hí)�”}”(hŒ!generic tty->ops->install handler”h]”hŒ!generic tty->ops->install handler”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.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&]”jj/jjBjjBj‰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 ``struct tty_struct *tty`` tty to be installed **Description** It is the same as tty_standard_install() except the provided **port** is linked to a concrete tty specified by **tty**. Use this or tty_port_register_device() (or both). Call tty_port_link_device() as a last resort.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjLh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MëhjFubj=)�”}”(hhh]”(jB)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjkh]”hŒstruct tty_port *port”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mèhjeubjb)�”}”(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´Mèhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j€h´MèhjbubjB)�”}”(hŒ9``struct tty_driver *driver`` tty_driver for this device ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Méhjžubjb)�”}”(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´Méhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j¹h´MéhjbubjB)�”}”(hŒ/``struct tty_struct *tty`` tty to be installed ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hjÝh]”hŒstruct tty_struct *tty”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mêhj×ubjb)�”}”(hhh]”hí)�”}”(hŒtty to be installed”h]”hŒtty to be installed”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jòh´Mêhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jòh´Mêhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjFubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MìhjFubhí)�”}”(hŒ×It is the same as tty_standard_install() except the provided **port** is linked to a concrete tty specified by **tty**. Use this or tty_port_register_device() (or both). Call tty_port_link_device() as a last resort.”h]”(hŒ=It is the same as tty_standard_install() except the provided ”…”�”}”(hj.h²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj.ubhŒ* is linked to a concrete tty specified by ”…”�”}”(hj.h²hh³Nh´Nubj')�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj.ubhŒa. Use this or tty_port_register_device() (or both). Call tty_port_link_device() as a last resort.”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MëhjFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_open (C function)”Œc.tty_port_open”hNt”auh1jíhj*h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒTint tty_port_open (struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”j )�”}”(hŒSint tty_port_open(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(j)�”}”(hŒint”h]”hŒint”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.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úubj3)�”}”(hŒ tty_port_open”h]”j9)�”}”(hŒ tty_port_open”h]”hŒ tty_port_open”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjžubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hj}h²hh³j�h´MúubjR)�”}”(hŒB(struct tty_port *port, struct tty_struct *tty, struct file *filp)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjºubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjºubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÞŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•j¤sbŒc.tty_port_open”†”asbuh1hhjºubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjºubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjºubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¶ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj,ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj,ubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jPŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jøŒc.tty_port_open”†”asbuh1hhj,ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj,ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj,ubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¶ubjX)�”}”(hŒstruct file *filp”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjœubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjœubh)�”}”(hhh]”j9)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÀŒmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jøŒc.tty_port_open”†”asbuh1hhjœubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjœubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjœubj9)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhj}h²hh³j�h´Múubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjyh²hh³j�h´Múubah}”(h]”jtah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³j�h´Múhjvh²hubjö)�”}”(hhh]”hí)�”}”(hŒgeneric tty->ops->open handler”h]”hŒgeneric tty->ops->open handler”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Múhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjvh²hh³j�h´Múubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jj9jj9j‰j‰j‰uh1jþh²hhj*h³Nh´Nubj)�”}”(hXô**Parameters** ``struct tty_port *port`` tty_port of the device ``struct tty_struct *tty`` tty to be opened ``struct file *filp`` passed file pointer **Description** It is a generic helper to be used in driver's **tty->ops->open**. It activates the devices using **port->ops->activate** if not active already. And waits for the device to be ready using tty_port_block_til_ready() (e.g. raises DTR/CTS and waits for carrier). Note that **port->ops->shutdown** is not called when **port->ops->activate** returns an error (on the contrary, **tty->ops->close** is). Locking: Caller holds tty lock. **Note** may drop and reacquire tty lock (in tty_port_block_til_ready()) so **tty** and **port** may have changed state (eg., may be hung up now).”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjCh]”hŒ Parameters”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mþhj=ubj=)�”}”(hhh]”(jB)�”}”(hŒ1``struct tty_port *port`` tty_port of the device ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjbh]”hŒstruct tty_port *port”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mûhj\ubjb)�”}”(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³jwh´Mûhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jwh´MûhjYubjB)�”}”(hŒ,``struct tty_struct *tty`` tty to be opened ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hj›h]”hŒstruct tty_struct *tty”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mühj•ubjb)�”}”(hhh]”hí)�”}”(hŒtty to be opened”h]”hŒtty to be opened”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j°h´Mühj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j°h´MühjYubjB)�”}”(hŒ*``struct file *filp`` passed file pointer ”h]”(jH)�”}”(hŒ``struct file *filp``”h]”j#)�”}”(hjÔh]”hŒstruct file *filp”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´MýhjÎubjb)�”}”(hhh]”hí)�”}”(hŒpassed file pointer”h]”hŒpassed file pointer”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jéh´Mýhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jéh´MýhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hj=ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mÿhj=ubhí)�”}”(hXIt is a generic helper to be used in driver's **tty->ops->open**. It activates the devices using **port->ops->activate** if not active already. And waits for the device to be ready using tty_port_block_til_ready() (e.g. raises DTR/CTS and waits for carrier).”h]”(hŒ0It is a generic helper to be used in driver’s ”…”�”}”(hj%h²hh³Nh´Nubj')�”}”(hŒ**tty->ops->open**”h]”hŒtty->ops->open”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj%ubhŒ!. It activates the devices using ”…”�”}”(hj%h²hh³Nh´Nubj')�”}”(hŒ**port->ops->activate**”h]”hŒport->ops->activate”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj%ubhŒ‹ if not active already. And waits for the device to be ready using tty_port_block_til_ready() (e.g. raises DTR/CTS and waits for carrier).”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mþhj=ubhí)�”}”(hŒˆNote that **port->ops->shutdown** is not called when **port->ops->activate** returns an error (on the contrary, **tty->ops->close** is).”h]”(hŒ Note that ”…”�”}”(hjXh²hh³Nh´Nubj')�”}”(hŒ**port->ops->shutdown**”h]”hŒport->ops->shutdown”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjXubhŒ is not called when ”…”�”}”(hjXh²hh³Nh´Nubj')�”}”(hŒ**port->ops->activate**”h]”hŒport->ops->activate”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjXubhŒ$ returns an error (on the contrary, ”…”�”}”(hjXh²hh³Nh´Nubj')�”}”(hŒ**tty->ops->close**”h]”hŒtty->ops->close”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjXubhŒ is).”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj=ubhí)�”}”(hŒLocking: Caller holds tty lock.”h]”hŒLocking: Caller holds tty lock.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj=ubhí)�”}”(hŒ**Note**”h]”j')�”}”(hj®h]”hŒNote”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´Mhj=ubhí)�”}”(hŒ‰may drop and reacquire tty lock (in tty_port_block_til_ready()) so **tty** and **port** may have changed state (eg., may be hung up now).”h]”(hŒCmay drop and reacquire tty lock (in tty_port_block_til_ready()) so ”…”�”}”(hjÄh²hh³Nh´Nubj')�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÄubhŒ and ”…”�”}”(hjÄh²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÄubhŒ2 may have changed state (eg., may be hung up now).”…”�”}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:31: ./drivers/tty/tty_port.c”h´M hj=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj*h²hh³Nh´Nubeh}”(h]”jCah ]”h"]”Œopen/close/hangup helpers”ah$]”h&]”uh1hÈhjËh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Refcounting”h]”hŒTTY Refcounting”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«j_uh1hÍhjh²hh³hÇh´K%ubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_tty_get (C function)”Œc.tty_port_tty_get”hNt”auh1jíhjh²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒhjF ubj=)�”}”(hhh]”jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjk h]”hŒstruct tty_port *port”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hji ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´M;hje ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j€ h´M;hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j€ h´M;hjb ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hjF ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj¦ h]”hŒ Description”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¤ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´M=hjF ubhí)�”}”(hŒzReturn a refcount protected tty instance or ``NULL`` if the port is not associated with a tty (eg due to close or hangup).”h]”(hŒ,Return a refcount protected tty instance or ”…”�”}”(hj¼ h²hh³Nh´Nubj#)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¼ ubhŒF if the port is not associated with a tty (eg due to close or hangup).”…”�”}”(hj¼ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´M<hjF ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjh²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_tty_set (C function)”Œc.tty_port_tty_set”hNt”auh1jíhjh²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒEvoid tty_port_tty_set (struct tty_port *port, struct tty_struct *tty)”h]”j )�”}”(hŒDvoid tty_port_tty_set(struct tty_port *port, struct tty_struct *tty)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MHubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjù h²hh³j !h´MHubj3)�”}”(hŒtty_port_tty_set”h]”j9)�”}”(hŒtty_port_tty_set”h]”hŒtty_port_tty_set”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj!ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjù h²hh³j !h´MHubjR)�”}”(hŒ/(struct tty_port *port, struct tty_struct *tty)”h]”(jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj:!h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj6!ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG!h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj6!ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hjX!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjU!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jZ!Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•j !sbŒc.tty_port_tty_set”†”asbuh1hhj6!ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx!h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj6!ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hj†!h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj6!ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj“!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj6!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj2!ubjX)�”}”(hŒstruct tty_struct *tty”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj¬!h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj¨!ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹!h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj¨!ubh)�”}”(hhh]”j9)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÊ!h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÇ!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”jÌ!Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”jt!Œc.tty_port_tty_set”†”asbuh1hhj¨!ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè!h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj¨!ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjö!h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj¨!ubj9)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj¨!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj2!ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjù h²hh³j !h´MHubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjõ h²hh³j !h´MHubah}”(h]”jð ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³j !h´MHhjò h²hubjö)�”}”(hhh]”hí)�”}”(hŒset the tty of a port”h]”hŒset the tty of a port”…”�”}”(hj-"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MHhj*"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjò h²hh³j !h´MHubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jjE"jjE"j‰j‰j‰uh1jþh²hhjh³Nh´Nubj)�”}”(hŒÒ**Parameters** ``struct tty_port *port`` tty port ``struct tty_struct *tty`` the tty **Description** Associate the port and tty pair. Manages any internal refcounts. Pass ``NULL`` to deassociate a port.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hjO"h]”hŒ Parameters”…”�”}”(hjQ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjM"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MLhjI"ubj=)�”}”(hhh]”(jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjn"h]”hŒstruct tty_port *port”…”�”}”(hjp"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjl"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MIhjh"ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hj‡"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jƒ"h´MIhj„"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjh"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jƒ"h´MIhje"ubjB)�”}”(hŒ#``struct tty_struct *tty`` the tty ”h]”(jH)�”}”(hŒ``struct tty_struct *tty``”h]”j#)�”}”(hj§"h]”hŒstruct tty_struct *tty”…”�”}”(hj©"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¥"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MJhj¡"ubjb)�”}”(hhh]”hí)�”}”(hŒthe tty”h]”hŒthe tty”…”�”}”(hjÀ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¼"h´MJhj½"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¡"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j¼"h´MJhje"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjI"ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hjâ"h]”hŒ Description”…”�”}”(hjä"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjà"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MLhjI"ubhí)�”}”(hŒeAssociate the port and tty pair. Manages any internal refcounts. Pass ``NULL`` to deassociate a port.”h]”(hŒFAssociate the port and tty pair. Manages any internal refcounts. Pass ”…”�”}”(hjø"h²hh³Nh´Nubj#)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjø"ubhŒ to deassociate a port.”…”�”}”(hjø"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:39: ./drivers/tty/tty_port.c”h´MKhjI"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjh²hh³Nh´Nubeh}”(h]”jeah ]”h"]”Œtty refcounting”ah$]”h&]”uh1hÈhjËh²hh³hÇh´K%ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ TTY Helpers”h]”hŒ TTY Helpers”…”�”}”(hj*#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«j�uh1hÍhj'#h²hh³hÇh´K+ubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ tty_port_tty_wakeup (C function)”Œc.tty_port_tty_wakeup”hNt”auh1jíhj'#h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ0void tty_port_tty_wakeup (struct tty_port *port)”h]”j )�”}”(hŒ/void tty_port_tty_wakeup(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjQ#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM#h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:47: ./drivers/tty/tty_port.c”h´MÁubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`#h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjM#h²hh³j_#h´MÁubj3)�”}”(hŒtty_port_tty_wakeup”h]”j9)�”}”(hŒtty_port_tty_wakeup”h]”hŒtty_port_tty_wakeup”…”�”}”(hjr#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjn#ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjM#h²hh³j_#h´MÁubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjŽ#h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjŠ#ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›#h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjŠ#ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj¬#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj©#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j®#Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jt#sbŒc.tty_port_tty_wakeup”†”asbuh1hhjŠ#ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ#h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjŠ#ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjÚ#h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjŠ#ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjç#h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjŠ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhj†#ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjM#h²hh³j_#h´MÁubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjI#h²hh³j_#h´MÁubah}”(h]”jD#ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³j_#h´MÁhjF#h²hubjö)�”}”(hhh]”hí)�”}”(hŒhelper to wake up a tty”h]”hŒhelper to wake up a tty”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:47: ./drivers/tty/tty_port.c”h´MÁhj$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjF#h²hh³j_#h´MÁubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jj)$jj)$j‰j‰j‰uh1jþh²hhj'#h³Nh´Nubj)�”}”(hŒ4**Parameters** ``struct tty_port *port`` tty port”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj3$h]”hŒ Parameters”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj1$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:47: ./drivers/tty/tty_port.c”h´MÅhj-$ubj=)�”}”(hhh]”jB)�”}”(hŒ"``struct tty_port *port`` tty port”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjR$h]”hŒstruct tty_port *port”…”�”}”(hjT$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjP$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:47: ./drivers/tty/tty_port.c”h´MÇhjL$ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:47: ./drivers/tty/tty_port.c”h´MÂhjh$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjL$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jg$h´MÇhjI$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj-$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhj'#h²hh³Nh´Nubeh}”(h]”j‡ah ]”h"]”Œ tty helpers”ah$]”h&]”uh1hÈhjËh²hh³hÇh´K+ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Modem Signals”h]”hŒ Modem Signals”…”�”}”(hj�$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«j£uh1hÍhjš$h²hh³hÇh´K3ubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ$tty_port_carrier_raised (C function)”Œc.tty_port_carrier_raised”hNt”auh1jíhjš$h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ4bool tty_port_carrier_raised (struct tty_port *port)”h]”j )�”}”(hŒ3bool tty_port_carrier_raised(struct tty_port *port)”h]”(j)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjÄ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ$h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.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Ëubj3)�”}”(hŒtty_port_carrier_raised”h]”j9)�”}”(hŒtty_port_carrier_raised”h]”hŒtty_port_carrier_raised”…”�”}”(hjå$h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjá$ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjÀ$h²hh³jÒ$h´MËubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjý$ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjý$ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j!%Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jç$sbŒc.tty_port_carrier_raised”†”asbuh1hhjý$ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?%h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjý$ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjM%h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjý$ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjZ%h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjý$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjù$ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjÀ$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ôhuh1jh³jÒ$h´MËhj¹$h²hubjö)�”}”(hhh]”hí)�”}”(hŒcarrier raised check”h]”hŒcarrier raised check”…”�”}”(hj„%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.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&]”jj/jjœ%jjœ%j‰j‰j‰uh1jþh²hhjš$h³Nh´Nubj)�”}”(hŒæ**Parameters** ``struct tty_port *port`` tty port **Description** Wrapper for the carrier detect logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj¦%h]”hŒ Parameters”…”�”}”(hj¨%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¤%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÏhj %ubj=)�”}”(hhh]”jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÌhj¿%ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hjÞ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÚ%h´MÌhjÛ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¿%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÚ%h´MÌhj¼%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj %ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj&h]”hŒ Description”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjþ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÎhj %ubhí)�”}”(hŒŸWrapper for the carrier detect logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”hŒŸWrapper for the carrier detect logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÍhj %ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjš$h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ#tty_port_raise_dtr_rts (C function)”Œc.tty_port_raise_dtr_rts”hNt”auh1jíhjš$h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ3void tty_port_raise_dtr_rts (struct tty_port *port)”h]”j )�”}”(hŒ2void tty_port_raise_dtr_rts(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjA&h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÛubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT&h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjA&h²hh³jS&h´MÛubj3)�”}”(hŒtty_port_raise_dtr_rts”h]”j9)�”}”(hŒtty_port_raise_dtr_rts”h]”hŒtty_port_raise_dtr_rts”…”�”}”(hjf&h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjb&ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjA&h²hh³jS&h´MÛubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj‚&h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hj~&ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj~&ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj�&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j¢&Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jh&sbŒc.tty_port_raise_dtr_rts”†”asbuh1hhj~&ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ&h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hj~&ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjÎ&h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj~&ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hjÛ&h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj~&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjz&ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjA&h²hh³jS&h´MÛubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhj=&h²hh³jS&h´MÛubah}”(h]”j8&ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³jS&h´MÛhj:&h²hubjö)�”}”(hhh]”hí)�”}”(hŒ Raise DTR/RTS”h]”hŒ Raise DTR/RTS”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÛhj'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhj:&h²hh³jS&h´MÛubeh}”(h]”h ]”(j/Œfunction”eh"]”h$]”h&]”jj/jj'jj'j‰j‰j‰uh1jþh²hhjš$h³Nh´Nubj)�”}”(hŒå**Parameters** ``struct tty_port *port`` tty port **Description** Wrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj''h]”hŒ Parameters”…”�”}”(hj)'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj%'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´Mßhj!'ubj=)�”}”(hhh]”jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(hŒ``struct tty_port *port``”h]”j#)�”}”(hjF'h]”hŒstruct tty_port *port”…”�”}”(hjH'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjD'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÜhj@'ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hj_'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j['h´MÜhj\'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj@'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j['h´MÜhj='ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj!'ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj�'h]”hŒ Description”…”�”}”(hjƒ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÞhj!'ubhí)�”}”(hŒžWrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”hŒžWrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”…”�”}”(hj—'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MÝhj!'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjš$h²hh³Nh´Nubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒ#tty_port_lower_dtr_rts (C function)”Œc.tty_port_lower_dtr_rts”hNt”auh1jíhjš$h²hh³Nh´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒ3void tty_port_lower_dtr_rts (struct tty_port *port)”h]”j )�”}”(hŒ2void tty_port_lower_dtr_rts(struct tty_port *port)”h]”(j)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÆ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂ'h²hh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.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êubj3)�”}”(hŒtty_port_lower_dtr_rts”h]”j9)�”}”(hŒtty_port_lower_dtr_rts”h]”hŒtty_port_lower_dtr_rts”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjã'ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjÂ'h²hh³jÔ'h´MêubjR)�”}”(hŒ(struct tty_port *port)”h]”jX)�”}”(hŒstruct tty_port *port”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjÿ'ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÿ'ubh)�”}”(hhh]”j9)�”}”(hŒtty_port”h]”hŒtty_port”…”�”}”(hj!(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j/Œreftype”j•Œ reftarget”j#(Œmodname”NŒ classname”Nj™jœ)�”}”jŸ]”j¢)�”}”j•jé'sbŒc.tty_port_lower_dtr_rts”†”asbuh1hhjÿ'ubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjÿ'ubj¶)�”}”(hj¹h]”hŒ*”…”�”}”(hjO(h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÿ'ubj9)�”}”(hŒport”h]”hŒport”…”�”}”(hj\(h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hjÿ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jWhjû'ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jQhjÂ'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ôhuh1jh³jÔ'h´Mêhj»'h²hubjö)�”}”(hhh]”hí)�”}”(hŒ Lower DTR/RTS”h]”hŒ Lower DTR/RTS”…”�”}”(hj†(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.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&]”jj/jjž(jjž(j‰j‰j‰uh1jþh²hhjš$h³Nh´Nubj)�”}”(hŒå**Parameters** ``struct tty_port *port`` tty port **Description** Wrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”(hí)�”}”(hŒ**Parameters**”h]”j')�”}”(hj¨(h]”hŒ Parameters”…”�”}”(hjª(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj¦(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´Mîhj¢(ubj=)�”}”(hhh]”jB)�”}”(hŒ#``struct tty_port *port`` tty port ”h]”(jH)�”}”(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&]”uh1jGh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´MëhjÁ(ubjb)�”}”(hhh]”hí)�”}”(hŒtty port”h]”hŒtty port”…”�”}”(hjà(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÜ(h´MëhjÝ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÁ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÜ(h´Mëhj¾(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j<hj¢(ubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj)h]”hŒ Description”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´Míhj¢(ubhí)�”}”(hŒžWrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”h]”hŒžWrapper for the DTR/RTS raise logic. For the moment this is used to hide some internal details. This will eventually become entirely internal to the tty port.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:53: ./drivers/tty/tty_port.c”h´Mìhj¢(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjš$h²hh³Nh´Nubeh}”(h]”j©ah ]”h"]”Œ modem signals”ah$]”h&]”uh1hÈhjËh²hh³hÇh´K3ubeh}”(h]”jah ]”h"]”Œtty port functions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhŒ transition”“”)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1j<)h³hÇh´K9hhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Port Reference”h]”hŒTTY Port Reference”…”�”}”(hjK)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«jÑuh1hÍhjH)h²hh³hÇh´K`, valid only if the tty is open. Use tty_port_tty_get() to obtain it (and tty_kref_put() to release). ``itty`` internal back pointer to :c:type:`struct tty_struct `. Avoid this. It should be eliminated in the long term. ``ops`` tty port operations (like activate, shutdown), see :c:type:`struct tty_port_operations ` ``client_ops`` tty port client operations (like receive_buf, write_wakeup). By default, tty_port_default_client_ops is used. ``lock`` lock protecting **tty** ``blocked_open`` # of procs waiting for open in tty_port_block_til_ready() ``count`` usage count ``open_wait`` open waiters queue (waiting e.g. for a carrier) ``delta_msr_wait`` modem status change queue (waiting for MSR changes) ``flags`` user TTY flags (``ASYNC_``) ``iflags`` internal flags (``TTY_PORT_``) ``console`` when set, the port is a console ``mutex`` locking, for open, shutdown and other port operations ``buf_mutex`` **xmit_buf** alloc lock ``xmit_buf`` optional xmit buffer used by some drivers ``xmit_fifo`` optional xmit buffer used by some drivers ``close_delay`` delay in jiffies to wait when closing the port ``closing_wait`` delay in jiffies for output to be sent before closing ``drain_delay`` set to zero if no pure time based drain is needed else set to size of fifo ``kref`` references counter. Reaching zero calls **ops->destruct\(\)** if non-``NULL`` or frees the port otherwise. ``client_data`` pointer to private data, for **client_ops**”h]”(hí)�”}”(hŒ**Definition**::”h]”(j')�”}”(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³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K8hjã)ubhŒ literal_block”“”)�”}”(hXÝstruct tty_port { struct tty_bufhead buf; struct tty_struct *tty; struct tty_struct *itty; const struct tty_port_operations *ops; const struct tty_port_client_operations *client_ops; spinlock_t lock; int blocked_open; int count; wait_queue_head_t open_wait; wait_queue_head_t delta_msr_wait; unsigned long flags; unsigned long iflags; unsigned char console:1; struct mutex mutex; struct mutex buf_mutex; u8 *xmit_buf; u8 *xmit_fifo; unsigned int close_delay; unsigned int closing_wait; int drain_delay; struct kref kref; void *client_data; };”h]”hXÝstruct tty_port { struct tty_bufhead buf; struct tty_struct *tty; struct tty_struct *itty; const struct tty_port_operations *ops; const struct tty_port_client_operations *client_ops; spinlock_t lock; int blocked_open; int count; wait_queue_head_t open_wait; wait_queue_head_t delta_msr_wait; unsigned long flags; unsigned long iflags; unsigned char console:1; struct mutex mutex; struct mutex buf_mutex; u8 *xmit_buf; u8 *xmit_fifo; unsigned int close_delay; unsigned int closing_wait; int drain_delay; struct kref kref; void *client_data; };”…”�”}”hj*sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j*h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K:hjã)ubhí)�”}”(hŒ **Members**”h]”j')�”}”(hj*h]”hŒMembers”…”�”}”(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_port:62: ./include/linux/tty_port.h”h´KShjã)ubj=)�”}”(hhh]”(jB)�”}”(hŒ0``buf`` buffer for this port, locked internally ”h]”(jH)�”}”(hŒ``buf``”h]”j#)�”}”(hj6*h]”hŒbuf”…”�”}”(hj8*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K7hj0*ubjb)�”}”(hhh]”hí)�”}”(hŒ'buffer for this port, locked internally”h]”hŒ'buffer for this port, locked internally”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jK*h´K7hjL*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj0*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jK*h´K7hj-*ubjB)�”}”(hŒ¦``tty`` back pointer to :c:type:`struct tty_struct `, valid only if the tty is open. Use tty_port_tty_get() to obtain it (and tty_kref_put() to release). ”h]”(jH)�”}”(hŒ``tty``”h]”j#)�”}”(hjo*h]”hŒtty”…”�”}”(hjq*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjm*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K9hji*ubjb)�”}”(hhh]”hí)�”}”(hŒ�back pointer to :c:type:`struct tty_struct `, valid only if the tty is open. Use tty_port_tty_get() to obtain it (and tty_kref_put() to release).”h]”(hŒback pointer to ”…”�”}”(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 ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hj�*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j™jÄjAŒ tty_struct”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K8hjˆ*ubhŒe, valid only if the tty is open. Use tty_port_tty_get() to obtain it (and tty_kref_put() to release).”…”�”}”(hjˆ*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¯*h´K8hj…*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahji*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j„*h´K9hj-*ubjB)�”}”(hŒ‚``itty`` internal back pointer to :c:type:`struct tty_struct `. Avoid this. It should be eliminated in the long term. ”h]”(jH)�”}”(hŒ``itty``”h]”j#)�”}”(hjÌ*h]”hŒitty”…”�”}”(hjÎ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjÊ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K;hjÆ*ubjb)�”}”(hhh]”hí)�”}”(hŒxinternal back pointer to :c:type:`struct tty_struct `. Avoid this. It should be eliminated in the long term.”h]”(hŒinternal back pointer to ”…”�”}”(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 ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hjí*ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”• ~j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j™jÄjAŒ tty_struct”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K:hjå*ubhŒ7. Avoid this. It should be eliminated in the long term.”…”�”}”(hjå*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j +h´K:hjâ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÆ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³já*h´K;hj-*ubjB)�”}”(hŒv``ops`` tty port operations (like activate, shutdown), see :c:type:`struct tty_port_operations ` ”h]”(jH)�”}”(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&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K=hj#+ubjb)�”}”(hhh]”hí)�”}”(hŒmtty port operations (like activate, shutdown), see :c:type:`struct tty_port_operations `”h]”(hŒ3tty port operations (like activate, shutdown), see ”…”�”}”(hjB+h²hh³Nh´Nubh)�”}”(hŒ::c:type:`struct tty_port_operations `”h]”j#)�”}”(hjL+h]”hŒstruct tty_port_operations”…”�”}”(hjN+h²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hjJ+ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j™jÄjAŒtty_port_operations”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K+h´K=hj-*ubjB)�”}”(hŒ}``client_ops`` tty port client operations (like receive_buf, write_wakeup). By default, tty_port_default_client_ops is used. ”h]”(jH)�”}”(hŒ``client_ops``”h]”j#)�”}”(hj‚+h]”hŒ client_ops”…”�”}”(hj„+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj€+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K?hj|+ubjb)�”}”(hhh]”hí)�”}”(hŒmtty port client operations (like receive_buf, write_wakeup). By default, tty_port_default_client_ops is used.”h]”hŒmtty port client operations (like receive_buf, write_wakeup). By default, tty_port_default_client_ops is used.”…”�”}”(hj›+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K>hj˜+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj|+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j—+h´K?hj-*ubjB)�”}”(hŒ!``lock`` lock protecting **tty** ”h]”(jH)�”}”(hŒ``lock``”h]”j#)�”}”(hj¼+h]”hŒlock”…”�”}”(hj¾+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjº+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K@hj¶+ubjb)�”}”(hhh]”hí)�”}”(hŒlock protecting **tty**”h]”(hŒlock protecting ”…”�”}”(hjÕ+h²hh³Nh´Nubj')�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjÝ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÕ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÑ+h´K@hjÒ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¶+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÑ+h´K@hj-*ubjB)�”}”(hŒK``blocked_open`` # of procs waiting for open in tty_port_block_til_ready() ”h]”(jH)�”}”(hŒ``blocked_open``”h]”j#)�”}”(hj,h]”hŒ blocked_open”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KAhjý+ubjb)�”}”(hhh]”hí)�”}”(hŒ9# of procs waiting for open in tty_port_block_til_ready()”h]”hŒ9# of procs waiting for open in tty_port_block_til_ready()”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j,h´KAhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjý+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j,h´KAhj-*ubjB)�”}”(hŒ``count`` usage count ”h]”(jH)�”}”(hŒ ``count``”h]”j#)�”}”(hj<,h]”hŒcount”…”�”}”(hj>,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj:,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KBhj6,ubjb)�”}”(hhh]”hí)�”}”(hŒ usage count”h]”hŒ usage count”…”�”}”(hjU,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jQ,h´KBhjR,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj6,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jQ,h´KBhj-*ubjB)�”}”(hŒ>``open_wait`` open waiters queue (waiting e.g. for a carrier) ”h]”(jH)�”}”(hŒ ``open_wait``”h]”j#)�”}”(hju,h]”hŒ open_wait”…”�”}”(hjw,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjs,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KChjo,ubjb)�”}”(hhh]”hí)�”}”(hŒ/open waiters queue (waiting e.g. for a carrier)”h]”hŒ/open waiters queue (waiting e.g. for a carrier)”…”�”}”(hjŽ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŠ,h´KChj‹,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjo,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jŠ,h´KChj-*ubjB)�”}”(hŒG``delta_msr_wait`` modem status change queue (waiting for MSR changes) ”h]”(jH)�”}”(hŒ``delta_msr_wait``”h]”j#)�”}”(hj®,h]”hŒdelta_msr_wait”…”�”}”(hj°,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¬,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KDhj¨,ubjb)�”}”(hhh]”hí)�”}”(hŒ3modem status change queue (waiting for MSR changes)”h]”hŒ3modem status change queue (waiting for MSR changes)”…”�”}”(hjÇ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÃ,h´KDhjÄ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¨,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÃ,h´KDhj-*ubjB)�”}”(hŒ&``flags`` user TTY flags (``ASYNC_``) ”h]”(jH)�”}”(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&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KEhjá,ubjb)�”}”(hhh]”hí)�”}”(hŒuser TTY flags (``ASYNC_``)”h]”(hŒuser TTY flags (”…”�”}”(hj-h²hh³Nh´Nubj#)�”}”(hŒ ``ASYNC_``”h]”hŒASYNC_”…”�”}”(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´KEhjý,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjá,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jü,h´KEhj-*ubjB)�”}”(hŒ*``iflags`` internal flags (``TTY_PORT_``) ”h]”(jH)�”}”(hŒ ``iflags``”h]”j#)�”}”(hj2-h]”hŒiflags”…”�”}”(hj4-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj0-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KFhj,-ubjb)�”}”(hhh]”hí)�”}”(hŒinternal flags (``TTY_PORT_``)”h]”(hŒinternal flags (”…”�”}”(hjK-h²hh³Nh´Nubj#)�”}”(hŒ ``TTY_PORT_``”h]”hŒ TTY_PORT_”…”�”}”(hjS-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjK-ubhŒ)”…”�”}”(hjK-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jG-h´KFhjH-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj,-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jG-h´KFhj-*ubjB)�”}”(hŒ,``console`` when set, the port is a console ”h]”(jH)�”}”(hŒ ``console``”h]”j#)�”}”(hj}-h]”hŒconsole”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj{-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KGhjw-ubjb)�”}”(hhh]”hí)�”}”(hŒwhen set, the port is a console”h]”hŒwhen set, the port is a console”…”�”}”(hj–-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j’-h´KGhj“-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjw-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j’-h´KGhj-*ubjB)�”}”(hŒ@``mutex`` locking, for open, shutdown and other port operations ”h]”(jH)�”}”(hŒ ``mutex``”h]”j#)�”}”(hj¶-h]”hŒmutex”…”�”}”(hj¸-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj´-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KHhj°-ubjb)�”}”(hhh]”hí)�”}”(hŒ5locking, for open, shutdown and other port operations”h]”hŒ5locking, for open, shutdown and other port operations”…”�”}”(hjÏ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jË-h´KHhjÌ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj°-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jË-h´KHhj-*ubjB)�”}”(hŒ&``buf_mutex`` **xmit_buf** alloc lock ”h]”(jH)�”}”(hŒ ``buf_mutex``”h]”j#)�”}”(hjï-h]”hŒ buf_mutex”…”�”}”(hjñ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjí-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KIhjé-ubjb)�”}”(hhh]”hí)�”}”(hŒ**xmit_buf** alloc lock”h]”(j')�”}”(hŒ **xmit_buf**”h]”hŒxmit_buf”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj.ubhŒ alloc lock”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j.h´KIhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjé-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j.h´KIhj-*ubjB)�”}”(hŒ7``xmit_buf`` optional xmit buffer used by some drivers ”h]”(jH)�”}”(hŒ ``xmit_buf``”h]”j#)�”}”(hj6.h]”hŒxmit_buf”…”�”}”(hj8.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj4.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KJhj0.ubjb)�”}”(hhh]”hí)�”}”(hŒ)optional xmit buffer used by some drivers”h]”hŒ)optional xmit buffer used by some drivers”…”�”}”(hjO.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jK.h´KJhjL.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj0.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jK.h´KJhj-*ubjB)�”}”(hŒ8``xmit_fifo`` optional xmit buffer used by some drivers ”h]”(jH)�”}”(hŒ ``xmit_fifo``”h]”j#)�”}”(hjo.h]”hŒ xmit_fifo”…”�”}”(hjq.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjm.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KKhji.ubjb)�”}”(hhh]”hí)�”}”(hŒ)optional xmit buffer used by some drivers”h]”hŒ)optional xmit buffer used by some drivers”…”�”}”(hjˆ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j„.h´KKhj….ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahji.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j„.h´KKhj-*ubjB)�”}”(hŒ?``close_delay`` delay in jiffies to wait when closing the port ”h]”(jH)�”}”(hŒ``close_delay``”h]”j#)�”}”(hj¨.h]”hŒ close_delay”…”�”}”(hjª.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj¦.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KLhj¢.ubjb)�”}”(hhh]”hí)�”}”(hŒ.delay in jiffies to wait when closing the port”h]”hŒ.delay in jiffies to wait when closing the port”…”�”}”(hjÁ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j½.h´KLhj¾.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¢.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j½.h´KLhj-*ubjB)�”}”(hŒG``closing_wait`` delay in jiffies for output to be sent before closing ”h]”(jH)�”}”(hŒ``closing_wait``”h]”j#)�”}”(hjá.h]”hŒ closing_wait”…”�”}”(hjã.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjß.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KMhjÛ.ubjb)�”}”(hhh]”hí)�”}”(hŒ5delay in jiffies for output to be sent before closing”h]”hŒ5delay in jiffies for output to be sent before closing”…”�”}”(hjú.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jö.h´KMhj÷.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjÛ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jö.h´KMhj-*ubjB)�”}”(hŒ[``drain_delay`` set to zero if no pure time based drain is needed else set to size of fifo ”h]”(jH)�”}”(hŒ``drain_delay``”h]”j#)�”}”(hj/h]”hŒ drain_delay”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KOhj/ubjb)�”}”(hhh]”hí)�”}”(hŒJset to zero if no pure time based drain is needed else set to size of fifo”h]”hŒJset to zero if no pure time based drain is needed else set to size of fifo”…”�”}”(hj3/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KNhj0/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j//h´KOhj-*ubjB)�”}”(hŒt``kref`` references counter. Reaching zero calls **ops->destruct\(\)** if non-``NULL`` or frees the port otherwise. ”h]”(jH)�”}”(hŒ``kref``”h]”j#)�”}”(hjT/h]”hŒkref”…”�”}”(hjV/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjR/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KQhjN/ubjb)�”}”(hhh]”hí)�”}”(hŒjreferences counter. Reaching zero calls **ops->destruct\(\)** if non-``NULL`` or frees the port otherwise.”h]”(hŒ(references counter. Reaching zero calls ”…”�”}”(hjm/h²hh³Nh´Nubj')�”}”(hŒ**ops->destruct\(\)**”h]”hŒops->destruct()”…”�”}”(hju/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjm/ubhŒ if non-”…”�”}”(hjm/h²hh³Nh´Nubj#)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj‡/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjm/ubhŒ or frees the port otherwise.”…”�”}”(hjm/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KPhjj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjN/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³ji/h´KQhj-*ubjB)�”}”(hŒ;``client_data`` pointer to private data, for **client_ops**”h]”(jH)�”}”(hŒ``client_data``”h]”j#)�”}”(hj²/h]”hŒ client_data”…”�”}”(hj´/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj°/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KQhj¬/ubjb)�”}”(hhh]”hí)�”}”(hŒ+pointer to private data, for **client_ops**”h]”(hŒpointer to private data, for ”…”�”}”(hjË/h²hh³Nh´Nubj')�”}”(hŒ**client_ops**”h]”hŒ client_ops”…”�”}”(hjÓ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjË/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KRhjÈ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj¬/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÇ/h´KQhj-*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjã)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjH)h²hh³jg)h´Nubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj0h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KUhjH)h²hubhí)�”}”(hŒòEach device keeps its own port level information. :c:type:`struct tty_port ` was introduced as a common structure for such information. As every TTY device shall have a backing tty_port structure, every driver can use these members.”h]”(hŒ2Each device keeps its own port level information. ”…”�”}”(hj0h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct tty_port `”h]”j#)�”}”(hj#0h]”hŒstruct tty_port”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hj!0ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j™jÄjAŒtty_port”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KRhj0ubhŒœ was introduced as a common structure for such information. As every TTY device shall have a backing tty_port structure, every driver can use these members.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j@0h´KRhjH)h²hubhí)�”}”(hXThe tty port has a different lifetime to the tty so must be kept apart. In addition be careful as tty -> port mappings are valid for the life of the tty object but in many cases port -> tty mappings are valid only until a hangup so don't use the wrong path.”h]”hXThe tty port has a different lifetime to the tty so must be kept apart. In addition be careful as tty -> port mappings are valid for the life of the tty object but in many cases port -> tty mappings are valid only until a hangup so don’t use the wrong path.”…”�”}”(hjK0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´KVhjH)h²hubhí)�”}”(hŒ”Tty port shall be initialized by tty_port_init() and shut down either by tty_port_destroy() (refcounting not used), or tty_port_put() (refcounting).”h]”hŒ”Tty port shall be initialized by tty_port_init() and shut down either by tty_port_destroy() (refcounting not used), or tty_port_put() (refcounting).”…”�”}”(hjZ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K[hjH)h²hubhí)�”}”(hX8There is a lot of helpers around :c:type:`struct tty_port ` too. To name the most significant ones: tty_port_open(), tty_port_close() (or tty_port_close_start() and tty_port_close_end() separately if need be), and tty_port_hangup(). These call **ops->activate\(\)** and **ops->shutdown\(\)** as needed.”h]”(hŒ!There is a lot of helpers around ”…”�”}”(hji0h²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct tty_port `”h]”j#)�”}”(hjs0h]”hŒstruct tty_port”…”�”}”(hju0h²hh³Nh´Nubah}”(h]”h ]”(j.j/Œc-type”eh"]”h$]”h&]”uh1j"hjq0ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j;Œ refdomain”j/Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j™jÄjAŒtty_port”uh1hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:62: ./include/linux/tty_port.h”h´K^hji0ubhŒ¹ too. To name the most significant ones: tty_port_open(), tty_port_close() (or tty_port_close_start() and tty_port_close_end() separately if need be), and tty_port_hangup(). These call ”…”�”}”(hji0h²hh³Nh´Nubj')�”}”(hŒ**ops->activate\(\)**”h]”hŒops->activate()”…”�”}”(hj•0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hji0ubhŒ and ”…”�”}”(hji0h²hh³Nh´Nubj')�”}”(hŒ**ops->shutdown\(\)**”h]”hŒops->shutdown()”…”�”}”(hj§0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hji0ubhŒ as needed.”…”�”}”(hji0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j�0h´K^hjH)h²hubeh}”(h]”j×ah ]”h"]”Œtty port reference”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K<Œ referenced”Kubj=))�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1j<)h³hÇh´KAhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒTTY Port Operations Reference”h]”hŒTTY Port Operations Reference”…”�”}”(hjÔ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”j«jóuh1hÍhjÑ0h²hh³hÇh´KDubjî)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(júŒtty_port_operations (C struct)”Œc.tty_port_operations”hNt”auh1jíhjÑ0h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Nubjÿ)�”}”(hhh]”(j)�”}”(hŒtty_port_operations”h]”j )�”}”(hŒstruct tty_port_operations”h]”(j^)�”}”(hjah]”hŒstruct”…”�”}”(hjü0h²hh³Nh´Nubah}”(h]”h ]”jjah"]”h$]”h&]”uh1j]hjø0h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Kubj")�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j.ah"]”h$]”h&]”uh1j!hjø0h²hh³j 1h´Kubj3)�”}”(hŒtty_port_operations”h]”j9)�”}”(hjö0h]”hŒtty_port_operations”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jEah"]”h$]”h&]”uh1j8hj1ubah}”(h]”h ]”(jLjMeh"]”h$]”h&]”hÅhÆuh1j2hjø0h²hh³j 1h´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆjçˆuh1j jèjéhjô0h²hh³j 1h´Kubah}”(h]”jî0ah ]”(jíjîeh"]”h$]”h&]”jòˆjó)jôhuh1jh³j 1h´Khjñ0h²hubjö)�”}”(hhh]”hã)�”}”(hhh]”hè)�”}”(hŒoperations on tty_port”h]”hí)�”}”(hjC1h]”hŒoperations on tty_port”…”�”}”(hjE1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´KhjA1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj>1h²hh³jR1h´Nubah}”(h]”h ]”h"]”h$]”h&]”j{j|uh1hâh³jR1h´Khj;1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jõhjñ0h²hh³j 1h´Kubeh}”(h]”h ]”(j/Œstruct”eh"]”h$]”h&]”jj/jjh1jjh1j‰j‰j‰uh1jþh²hhjÑ0h³jð0h´Nubj)�”}”(hXÊ**Definition**:: struct tty_port_operations { bool (*carrier_raised)(struct tty_port *port); void (*dtr_rts)(struct tty_port *port, bool active); void (*shutdown)(struct tty_port *port); int (*activate)(struct tty_port *port, struct tty_struct *tty); void (*destruct)(struct tty_port *port); }; **Members** ``carrier_raised`` return true if the carrier is raised on **port** ``dtr_rts`` raise the DTR line if **active** is true, otherwise lower DTR ``shutdown`` called when the last close completes or a hangup finishes IFF the port was initialized. Do not use to free resources. Turn off the device only. Called under the port mutex to serialize against **activate** and **shutdown**. ``activate`` called under the port mutex from tty_port_open(), serialized using the port mutex. Supposed to turn on the device. ``destruct`` called on the final put of a port. Free resources, possibly incl. the port itself.”h]”(hí)�”}”(hŒ**Definition**::”h]”(j')�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjt1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjp1ubhŒ:”…”�”}”(hjp1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khjl1ubj*)�”}”(hX)struct tty_port_operations { bool (*carrier_raised)(struct tty_port *port); void (*dtr_rts)(struct tty_port *port, bool active); void (*shutdown)(struct tty_port *port); int (*activate)(struct tty_port *port, struct tty_struct *tty); void (*destruct)(struct tty_port *port); };”h]”hX)struct tty_port_operations { bool (*carrier_raised)(struct tty_port *port); void (*dtr_rts)(struct tty_port *port, bool active); void (*shutdown)(struct tty_port *port); int (*activate)(struct tty_port *port, struct tty_struct *tty); void (*destruct)(struct tty_port *port); };”…”�”}”hj�1sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j*h³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khjl1ubhí)�”}”(hŒ **Members**”h]”j')�”}”(hjž1h]”hŒMembers”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjœ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khjl1ubj=)�”}”(hhh]”(jB)�”}”(hŒD``carrier_raised`` return true if the carrier is raised on **port** ”h]”(jH)�”}”(hŒ``carrier_raised``”h]”j#)�”}”(hj½1h]”hŒcarrier_raised”…”�”}”(hj¿1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj»1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khj·1ubjb)�”}”(hhh]”hí)�”}”(hŒ0return true if the carrier is raised on **port**”h]”(hŒ(return true if the carrier is raised on ”…”�”}”(hjÖ1h²hh³Nh´Nubj')�”}”(hŒ**port**”h]”hŒport”…”�”}”(hjÞ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjÖ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÒ1h´KhjÓ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj·1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÒ1h´Khj´1ubjB)�”}”(hŒJ``dtr_rts`` raise the DTR line if **active** is true, otherwise lower DTR ”h]”(jH)�”}”(hŒ ``dtr_rts``”h]”j#)�”}”(hj2h]”hŒdtr_rts”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khjþ1ubjb)�”}”(hhh]”hí)�”}”(hŒ=raise the DTR line if **active** is true, otherwise lower DTR”h]”(hŒraise the DTR line if ”…”�”}”(hj2h²hh³Nh´Nubj')�”}”(hŒ **active**”h]”hŒactive”…”�”}”(hj%2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj2ubhŒ is true, otherwise lower DTR”…”�”}”(hj2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j2h´Khj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjþ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³j2h´Khj´1ubjB)�”}”(hŒí``shutdown`` called when the last close completes or a hangup finishes IFF the port was initialized. Do not use to free resources. Turn off the device only. Called under the port mutex to serialize against **activate** and **shutdown**. ”h]”(jH)�”}”(hŒ ``shutdown``”h]”j#)�”}”(hjO2h]”hŒshutdown”…”�”}”(hjQ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjM2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´KhjI2ubjb)�”}”(hhh]”hí)�”}”(hŒßcalled when the last close completes or a hangup finishes IFF the port was initialized. Do not use to free resources. Turn off the device only. Called under the port mutex to serialize against **activate** and **shutdown**.”h]”(hŒÁcalled when the last close completes or a hangup finishes IFF the port was initialized. Do not use to free resources. Turn off the device only. Called under the port mutex to serialize against ”…”�”}”(hjh2h²hh³Nh´Nubj')�”}”(hŒ **activate**”h]”hŒactivate”…”�”}”(hjp2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjh2ubhŒ and ”…”�”}”(hjh2h²hh³Nh´Nubj')�”}”(hŒ **shutdown**”h]”hŒshutdown”…”�”}”(hj‚2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hjh2ubhŒ.”…”�”}”(hjh2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khje2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjI2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jd2h´Khj´1ubjB)�”}”(hŒ€``activate`` called under the port mutex from tty_port_open(), serialized using the port mutex. Supposed to turn on the device. ”h]”(jH)�”}”(hŒ ``activate``”h]”j#)�”}”(hj­2h]”hŒactivate”…”�”}”(hj¯2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hj«2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khj§2ubjb)�”}”(hhh]”hí)�”}”(hŒrcalled under the port mutex from tty_port_open(), serialized using the port mutex. Supposed to turn on the device.”h]”hŒrcalled under the port mutex from tty_port_open(), serialized using the port mutex. Supposed to turn on the device.”…”�”}”(hjÆ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´KhjÃ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahj§2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jÂ2h´Khj´1ubjB)�”}”(hŒ_``destruct`` called on the final put of a port. Free resources, possibly incl. the port itself.”h]”(jH)�”}”(hŒ ``destruct``”h]”j#)�”}”(hjç2h]”hŒdestruct”…”�”}”(hjé2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j"hjå2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jGh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khjá2ubjb)�”}”(hhh]”hí)�”}”(hŒRcalled on the final put of a port. Free resources, possibly incl. the port itself.”h]”hŒRcalled on the final put of a port. Free resources, possibly incl. the port itself.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jü2h´Khjý2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jahjá2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jAh³jü2h´Khj´1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j<hjl1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jhjÑ0h²hh³jð0h´Nubhí)�”}”(hŒ**Description**”h]”j')�”}”(hj)3h]”hŒ Description”…”�”}”(hj+3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j&hj'3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´K#hjÑ0h²hubjô)�”}”(hŒUFIXME: long term getting the tty argument *out* of this would be good for consoles. ”h]”hí)�”}”(hŒSFIXME: long term getting the tty argument *out* of this would be good for consoles.”h]”(hŒ*FIXME: long term getting the tty argument ”…”�”}”(hjC3h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*out*”h]”hŒout”…”�”}”(hjM3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jK3hjC3ubhŒ$ of this would be good for consoles.”…”�”}”(hjC3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œ`/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_port:70: ./include/linux/tty_port.h”h´Khj?3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jóh³je3h´KhjÑ0h²hubeh}”(h]”jùah ]”h"]”Œtty port operations reference”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KDjÆ0Kubeh}”(h]”Œtty-port”ah ]”h"]”Œtty port”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ž3Œ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 port reference”]”j›aŒtty port operations reference”]”j±auŒrefids”}”Œnameids”}”(jx3ju3jjj9)jj'j!jjCj$#jej—$j‡j2)j©jÃ0j×jp3jùuŒ nametypes”}”(jx3‰j‰j9)‰j'‰j‰j$#‰j—$‰j2)‰jÃ0‰jp3‰uh}”(ju3hÊjhßjjËj!jÜjüjjæjëjŠj�jCj*jGjLj• jš j% j* j5j:j>jCj‰jŽj}j‚jtjyjejj"j'jð jõ j‡j'#jD#jI#j©jš$j·$j¼$j8&j=&j¹'j¾'j×jH)je)jk)jùjÑ0jî0jô0hühójjj=j4j_jVj�jxj£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¬3Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.