€•EŒ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”Œ0/translations/zh_CN/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/driver-api/tty/tty_internals”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/driver-api/tty/tty_internals”Œ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³ŒJ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ TTY Internals”h]”hŒ TTY Internals”…”�”}”(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ŒKopen”…”�”}”(hhóh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œkopen”uh1hñhhîubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhhéubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒExported Internal Functions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œexported-internal-functions”uh1hñhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubhè)�”}”(hhh]”hí)�”}”(hhh]”hò)�”}”(hhh]”hŒInternal Functions”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œinternal-functions”uh1hñhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhhäubeh}”(h]”h ]”h"]”h$]”h&]”uh1hâhhßh²hh³Nh´Nubah}”(h]”Œcontents”ah ]”(Œcontents”Œlocal”eh"]”Œcontents”ah$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒKopen”h]”hŒKopen”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”hüuh1hÍhjch²hh³hÇh´K ubhí)�”}”(hŒ=These functions serve for opening a TTY from the kernelspace:”h]”hŒ=These functions serve for opening a TTY from the kernelspace:”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³hÇh´K hjch²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œtty_kclose (C function)”Œ c.tty_kclose”hNt”auh1jƒhjch²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ(void tty_kclose (struct tty_struct *tty)”h]”hŒdesc_signature_line”“”)�”}”(hŒ'void tty_kclose(struct tty_struct *tty)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j¥hj¡h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MNubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j·hj¡h²hh³j¶h´MNubhŒ desc_name”“”)�”}”(hŒ tty_kclose”h]”hŒ desc_sig_name”“”)�”}”(hŒ tty_kclose”h]”hŒ tty_kclose”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jÎhjÊubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jÈhj¡h²hh³j¶h´MNubhŒdesc_parameterlist”“”)�”}”(hŒ(struct tty_struct *tty)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct tty_struct *tty”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jóhjïubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjïubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j1Œ ASTIdentifier”“”)�”}”j,jÒsbŒ c.tty_kclose”†”asbuh1hhjïubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjïubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jLhjïubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjéubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj¡h²hh³j¶h´MNubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jŸŒsphinx_line_type”Œ declarator”hj›h²hh³j¶h´MNubah}”(h]”j’ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j™h³j¶h´MNhj–h²hubhŒ desc_content”“”)�”}”(hhh]”hí)�”}”(hŒcloses tty opened by tty_kopen”h]”hŒcloses tty opened by tty_kopen”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MNhjŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj–h²hh³j¶h´MNubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”Œdomain”j*Œobjtype”j©Œdesctype”j©Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1j”h²hhjch³Nh´NubhŒ container”“”)�”}”(hŒò**Parameters** ``struct tty_struct *tty`` tty device **Description** Performs the final steps to release and free a tty device. It is the same as tty_release_struct() except that it also resets ``TTY_PORT_KOPENED`` flag on **tty->port**.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MRhjµubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(hŒterm”“”)�”}”(hŒ``struct tty_struct *tty``”h]”hŒliteral”“”)�”}”(hjâh]”hŒstruct tty_struct *tty”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MOhjÚubhŒ definition”“”)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jùh´MOhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jùh´MOhjÕ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½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MQhjµubhí)�”}”(hŒ¨Performs the final steps to release and free a tty device. It is the same as tty_release_struct() except that it also resets ``TTY_PORT_KOPENED`` flag on **tty->port**.”h]”(hŒ}Performs the final steps to release and free a tty device. It is the same as tty_release_struct() except that it also resets ”…”�”}”(hj7h²hh³Nh´Nubjå)�”}”(hŒ``TTY_PORT_KOPENED``”h]”hŒTTY_PORT_KOPENED”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj7ubhŒ flag on ”…”�”}”(hj7h²hh³Nh´Nubj¾)�”}”(hŒ **tty->port**”h]”hŒ tty->port”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj7ubhŒ.”…”�”}”(hj7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MPhjµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjch²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ tty_kopen_exclusive (C function)”Œc.tty_kopen_exclusive”hNt”auh1jƒhjch²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ6struct tty_struct * tty_kopen_exclusive (dev_t device)”h]”j )�”}”(hŒ4struct tty_struct *tty_kopen_exclusive(dev_t device)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj†h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¢ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj†h²hh³j—h´M¢ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j«Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_kopen_exclusive”sbŒc.tty_kopen_exclusive”†”asbuh1hhj†h²hh³j—h´M¢ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj†h²hh³j—h´M¢ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj†h²hh³j—h´M¢ubjÉ)�”}”(hŒtty_kopen_exclusive”h]”jÏ)�”}”(hjÇh]”hŒtty_kopen_exclusive”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjåubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj†h²hh³j—h´M¢ubjè)�”}”(hŒ(dev_t device)”h]”jî)�”}”(hŒ dev_t device”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j Œmodname”NŒ classname”Nj0j3)�”}”j6]”jÅŒc.tty_kopen_exclusive”†”asbuh1hhjubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjüubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj†h²hh³j—h´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj‚h²hh³j—h´M¢ubah}”(h]”j}ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j—h´M¢hjh²hubj�)�”}”(hhh]”hí)�”}”(hŒopen a tty device for kernel”h]”hŒopen a tty device for kernel”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¢hjZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjh²hh³j—h´M¢ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®juj¯juj°‰j±‰j²‰uh1j”h²hhjch³Nh´Nubj´)�”}”(hXÈ**Parameters** ``dev_t device`` dev_t of device to open **Description** Opens tty exclusively for kernel. Performs the driver lookup, makes sure it's not already opened and performs the first-time tty initialization. Claims the global ``tty_mutex`` to serialize: * concurrent first-time tty initialization * concurrent tty driver removal w/ lookup * concurrent tty removal from driver table **Return** the locked initialized :c:type:`tty_struct`”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjh]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¦hjyubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ)``dev_t device`` dev_t of device to open ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hjžh]”hŒ dev_t device”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M£hj˜ubjû)�”}”(hhh]”hí)�”}”(hŒdev_t of device to open”h]”hŒdev_t of device to open”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j³h´M£hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j³h´M£hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjyubhí)�”}”(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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¥hjyubhí)�”}”(hŒ�Opens tty exclusively for kernel. Performs the driver lookup, makes sure it's not already opened and performs the first-time tty initialization.”h]”hŒ’Opens tty exclusively for kernel. Performs the driver lookup, makes sure it’s not already opened and performs the first-time tty initialization.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¤hjyubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ®Claims the global ``tty_mutex`` to serialize: * concurrent first-time tty initialization * concurrent tty driver removal w/ lookup * concurrent tty removal from driver table ”h]”(jß)�”}”(hŒ-Claims the global ``tty_mutex`` to serialize:”h]”(hŒClaims the global ”…”�”}”(hjh²hh³Nh´Nubjå)�”}”(hŒ ``tty_mutex``”h]”hŒ tty_mutex”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjubhŒ to serialize:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´Mªhjubjû)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ(concurrent first-time tty initialization”h]”hí)�”}”(hj.h]”hŒ(concurrent first-time tty initialization”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¨hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj)ubhè)�”}”(hŒ'concurrent tty driver removal w/ lookup”h]”hí)�”}”(hjFh]”hŒ'concurrent tty driver removal w/ lookup”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M©hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj)ubhè)�”}”(hŒ)concurrent tty removal from driver table ”h]”hí)�”}”(hŒ(concurrent tty removal from driver table”h]”hŒ(concurrent tty removal from driver table”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j%h´Mªhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”jPuh1hâh³j=h´M¨hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j%h´Mªhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjyubhí)�”}”(hŒ **Return**”h]”j¾)�”}”(hj�h]”hŒReturn”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¬hjyubhí)�”}”(hŒ+the locked initialized :c:type:`tty_struct`”h]”(hŒthe locked initialized ”…”�”}”(hj¥h²hh³Nh´Nubh)�”}”(hŒ:c:type:`tty_struct`”h]”jå)�”}”(hj¯h]”hŒ tty_struct”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”(Œxref”j*Œc-type”eh"]”h$]”h&]”uh1jähj­ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œdriver-api/tty/tty_internals”Œ refdomain”j*Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j0j3)�”}”j6]”sbŒ reftarget”Œ tty_struct”uh1hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M­hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÒh´M­hjyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjch²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_kopen_shared (C function)”Œc.tty_kopen_shared”hNt”auh1jƒhjch²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ3struct tty_struct * tty_kopen_shared (dev_t device)”h]”j )�”}”(hŒ1struct tty_struct *tty_kopen_shared(dev_t device)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjõh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¶ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjõh²hh³jh´M¶ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_kopen_shared”sbŒc.tty_kopen_shared”†”asbuh1hhjõh²hh³jh´M¶ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjõh²hh³jh´M¶ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjõh²hh³jh´M¶ubjÉ)�”}”(hŒtty_kopen_shared”h]”jÏ)�”}”(hj6h]”hŒtty_kopen_shared”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjTubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjõh²hh³jh´M¶ubjè)�”}”(hŒ(dev_t device)”h]”jî)�”}”(hŒ dev_t device”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jxŒmodname”NŒ classname”Nj0j3)�”}”j6]”j4Œc.tty_kopen_shared”†”asbuh1hhjoubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjoubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjkubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjõh²hh³jh´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjñh²hh³jh´M¶ubah}”(h]”jìah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jh´M¶hjîh²hubj�)�”}”(hhh]”hí)�”}”(hŒ*open a tty device for shared in-kernel use”h]”hŒ*open a tty device for shared in-kernel use”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.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&]”j­j*j®jäj¯jäj°‰j±‰j²‰uh1j”h²hhjch³Nh´Nubj´)�”}”(hŒö**Parameters** ``dev_t device`` dev_t of device to open **Description** Opens an already existing tty for in-kernel use. Compared to tty_kopen_exclusive() above it doesn't ensure to be the only user. Locking: identical to tty_kopen() above.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´MºhjèubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ)``dev_t device`` dev_t of device to open ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hj h]”hŒ dev_t device”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M·hjubjû)�”}”(hhh]”hí)�”}”(hŒdev_t of device to open”h]”hŒdev_t of device to open”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j"h´M·hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j"h´M·hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjèubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjHh]”hŒ Description”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¹hjèubhí)�”}”(hŒOpens an already existing tty for in-kernel use. Compared to tty_kopen_exclusive() above it doesn't ensure to be the only user.”h]”hŒ�Opens an already existing tty for in-kernel use. Compared to tty_kopen_exclusive() above it doesn’t ensure to be the only user.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M¸hjèubhí)�”}”(hŒ(Locking: identical to tty_kopen() above.”h]”hŒ(Locking: identical to tty_kopen() above.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:14: ./drivers/tty/tty_io.c”h´M»hjèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hjch²hh³Nh´Nubeh}”(h]”jah ]”h"]”Œkopen”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhŒ transition”“”)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒExported Internal Functions”h]”hŒExported Internal Functions”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jtjuh1hÍhj–h²hh³hÇh´Kubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ#tty_dev_name_to_number (C function)”Œc.tty_dev_name_to_number”hNt”auh1jƒhj–h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ h]”hŒstruct tty_struct *tty”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´Mmhj8 ubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jS h´MmhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jS h´Mmhj5 ubjÙ)�”}”(hŒ``int idx`` index of the tty ”h]”(jß)�”}”(hŒ ``int idx``”h]”jå)�”}”(hjw h]”hŒint idx”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähju ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´Mnhjq ubjû)�”}”(hhh]”hí)�”}”(hŒindex of the tty”h]”hŒindex of the tty”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jŒ h´Mnhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjq ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jŒ h´Mnhj5 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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´Mphj ubhí)�”}”(hŒgPerforms the final steps to release and free a tty device. It is roughly the reverse of tty_init_dev().”h]”hŒgPerforms the final steps to release and free a tty device. It is roughly the reverse of tty_init_dev().”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´Mohj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj–h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_get_icount (C function)”Œc.tty_get_icount”hNt”auh1jƒhj–h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒRint tty_get_icount (struct tty_struct *tty, struct serial_icounter_struct *icount)”h]”j )�”}”(hŒQint tty_get_icount(struct tty_struct *tty, struct serial_icounter_struct *icount)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjó h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjó h²hh³j h´M ubjÉ)�”}”(hŒtty_get_icount”h]”jÏ)�”}”(hŒtty_get_icount”h]”hŒtty_get_icount”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjó h²hh³j h´M ubjè)�”}”(hŒ?(struct tty_struct *tty, struct serial_icounter_struct *icount)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj0 ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj0 ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjO ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jT Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j sbŒc.tty_get_icount”†”asbuh1hhj0 ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj0 ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj0 ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj, ubjî)�”}”(hŒ%struct serial_icounter_struct *icount”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj¢ ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¢ ubh)�”}”(hhh]”jÏ)�”}”(hŒserial_icounter_struct”h]”hŒserial_icounter_struct”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÆ Œmodname”NŒ classname”Nj0j3)�”}”j6]”jn Œc.tty_get_icount”†”asbuh1hhj¢ ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¢ ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj¢ ubjÏ)�”}”(hŒicount”h]”hŒicount”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj, ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjó h²hh³j h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjï h²hh³j h´M ubah}”(h]”jê ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j h´M hjì h²hubj�)�”}”(hhh]”hí)�”}”(hŒget tty statistics”h]”hŒget tty statistics”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hj$ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjì h²hh³j h´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j? j¯j? j°‰j±‰j²‰uh1j”h²hhj–h³Nh´Nubj´)�”}”(hŒÙ**Parameters** ``struct tty_struct *tty`` tty device ``struct serial_icounter_struct *icount`` output parameter **Description** Gets a copy of the **tty**'s icount statistics. Locking: none (up to the driver)”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjI h]”hŒ Parameters”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjG ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hjC ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjh h]”hŒstruct tty_struct *tty”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hjb ubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j} h´M hj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j} h´M hj_ ubjÙ)�”}”(hŒ;``struct serial_icounter_struct *icount`` output parameter ”h]”(jß)�”}”(hŒ)``struct serial_icounter_struct *icount``”h]”jå)�”}”(hj¡ h]”hŒ%struct serial_icounter_struct *icount”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hj› ubjû)�”}”(hhh]”hí)�”}”(hŒoutput parameter”h]”hŒoutput parameter”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¶ h´M hj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj› ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j¶ h´M hj_ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjC ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjÜ h]”hŒ Description”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hjC ubhí)�”}”(hŒ/Gets a copy of the **tty**'s icount statistics.”h]”(hŒGets a copy of the ”…”�”}”(hjò h²hh³Nh´Nubj¾)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjò ubhŒ’s icount statistics.”…”�”}”(hjò h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hjC ubhí)�”}”(hŒ Locking: none (up to the driver)”h]”hŒ Locking: none (up to the driver)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:22: ./drivers/tty/tty_io.c”h´M hjC ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj–h²hh³Nh´Nubeh}”(h]”j$ah ]”h"]”Œexported internal functions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kubj‹)�”}”(hŒ----”h]”h}”(h]”h ]”h"]”h$]”h&]”uh1jŠh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒInternal Functions”h]”hŒInternal Functions”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”jtj@uh1hÍhj:h²hh³hÇh´Kubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œfree_tty_struct (C function)”Œc.free_tty_struct”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ-void free_tty_struct (struct tty_struct *tty)”h]”j )�”}”(hŒ,void free_tty_struct(struct tty_struct *tty)”h]”(j¦)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj`h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K¢ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj`h²hh³jrh´K¢ubjÉ)�”}”(hŒfree_tty_struct”h]”jÏ)�”}”(hŒfree_tty_struct”h]”hŒfree_tty_struct”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj`h²hh³jrh´K¢ubjè)�”}”(hŒ(struct tty_struct *tty)”h]”jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj�ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÁŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j‡sbŒc.free_tty_struct”†”asbuh1hhj�ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj™ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj`h²hh³jrh´K¢ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj\h²hh³jrh´K¢ubah}”(h]”jWah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jrh´K¢hjYh²hubj�)�”}”(hhh]”hí)�”}”(hŒfree a disused tty”h]”hŒfree a disused tty”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K¢hj!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjYh²hh³jrh´K¢ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j<j¯j<j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒÈ**Parameters** ``struct tty_struct *tty`` tty struct to free **Description** Free the write buffers, tty queue and tty memory itself. Locking: none. Must be called after tty is definitely unused”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjFh]”hŒ Parameters”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K¦hj@ubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ.``struct tty_struct *tty`` tty struct to free ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjeh]”hŒstruct tty_struct *tty”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K£hj_ubjû)�”}”(hhh]”hí)�”}”(hŒtty struct to free”h]”hŒtty struct to free”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jzh´K£hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jzh´K£hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj@ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj h]”hŒ Description”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K¥hj@ubhí)�”}”(hŒ8Free the write buffers, tty queue and tty memory itself.”h]”hŒ8Free the write buffers, tty queue and tty memory itself.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´K¤hj@ubhí)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj-ubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jQŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jsbŒc.tty_free_file”†”asbuh1hhj-ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj-ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj-ubjÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj)ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjðh²hh³jh´KÑubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjìh²hh³jh´KÑubah}”(h]”jçah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jh´KÑhjéh²hubj�)�”}”(hhh]”hí)�”}”(hŒfree file->private_data”h]”hŒfree file->private_data”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KÑhj±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjéh²hh³jh´KÑubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jÌj¯jÌj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒ¦**Parameters** ``struct file *file`` to free private_data of **Description** This shall be used only for fail path handling when tty_add_file was not called yet.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KÕhjÐubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ.``struct file *file`` to free private_data of ”h]”(jß)�”}”(hŒ``struct file *file``”h]”jå)�”}”(hjõh]”hŒstruct file *file”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KÒhjïubjû)�”}”(hhh]”hí)�”}”(hŒto free private_data of”h]”hŒto free private_data of”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j h´KÒhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j h´KÒhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÐubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj0h]”hŒ Description”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KÔhjÐubhí)�”}”(hŒTThis shall be used only for fail path handling when tty_add_file was not called yet.”h]”hŒTThis shall be used only for fail path handling when tty_add_file was not called yet.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KÓhjÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œget_tty_driver (C function)”Œc.get_tty_driver”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ=struct tty_driver * get_tty_driver (dev_t device, int *index)”h]”j )�”}”(hŒ;struct tty_driver *get_tty_driver(dev_t device, int *index)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjqh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M)ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjqh²hh³j‚h´M)ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j–Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œget_tty_driver”sbŒc.get_tty_driver”†”asbuh1hhjqh²hh³j‚h´M)ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjqh²hh³j‚h´M)ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjqh²hh³j‚h´M)ubjÉ)�”}”(hŒget_tty_driver”h]”jÏ)�”}”(hj²h]”hŒget_tty_driver”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÐubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjqh²hh³j‚h´M)ubjè)�”}”(hŒ(dev_t device, int *index)”h]”(jî)�”}”(hŒ dev_t device”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jôŒmodname”NŒ classname”Nj0j3)�”}”j6]”j°Œc.get_tty_driver”†”asbuh1hhjëubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjëubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjçubjî)�”}”(hŒ int *index”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj3ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj3ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj3ubjÏ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjçubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjqh²hh³j‚h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjmh²hh³j‚h´M)ubah}”(h]”jhah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j‚h´M)hjjh²hubj�)�”}”(hhh]”hí)�”}”(hŒfind device of a tty”h]”hŒfind device of a tty”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M)hj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjjh²hh³j‚h´M)ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j¢j¯j¢j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``dev_t device`` device identifier ``int *index`` returns the index of the tty **Description** This routine returns a tty driver structure, given a device number and also passes back the index number. Locking: caller must hold tty_mutex”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M-hj¦ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ#``dev_t device`` device identifier ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hjËh]”hŒ dev_t device”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M*hjÅubjû)�”}”(hhh]”hí)�”}”(hŒdevice identifier”h]”hŒdevice identifier”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jàh´M*hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jàh´M*hjÂubjÙ)�”}”(hŒ,``int *index`` returns the index of the tty ”h]”(jß)�”}”(hŒ``int *index``”h]”jå)�”}”(hjh]”hŒ int *index”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M+hjþubjû)�”}”(hhh]”hí)�”}”(hŒreturns the index of the tty”h]”hŒreturns the index of the tty”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jh´M+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jh´M+hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj¦ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj?h]”hŒ Description”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M-hj¦ubhí)�”}”(hŒiThis routine returns a tty driver structure, given a device number and also passes back the index number.”h]”hŒiThis routine returns a tty driver structure, given a device number and also passes back the index number.”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M,hj¦ubhí)�”}”(hŒ#Locking: caller must hold tty_mutex”h]”hŒ#Locking: caller must hold tty_mutex”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M/hj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ!tty_release_redirect (C function)”Œc.tty_release_redirect”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ;struct file * tty_release_redirect (struct tty_struct *tty)”h]”j )�”}”(hŒ9struct file *tty_release_redirect(struct tty_struct *tty)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj�h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�h²hh³j h´M ubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j´Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_release_redirect”sbŒc.tty_release_redirect”†”asbuh1hhj�h²hh³j h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�h²hh³j h´M ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�h²hh³j h´M ubjÉ)�”}”(hŒtty_release_redirect”h]”jÏ)�”}”(hjÐh]”hŒtty_release_redirect”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjîubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj�h²hh³j h´M ubjè)�”}”(hŒ(struct tty_struct *tty)”h]”jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j-Œmodname”NŒ classname”Nj0j3)�”}”j6]”jÎŒc.tty_release_redirect”†”asbuh1hhj ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj�h²hh³j h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj‹h²hh³j h´M ubah}”(h]”j†ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j h´M hjˆh²hubj�)�”}”(hhh]”hí)�”}”(hŒ&Release a redirect on a pty if present”h]”hŒ&Release a redirect on a pty if present”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjˆh²hh³j h´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j¦j¯j¦j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒ¼**Parameters** ``struct tty_struct *tty`` tty device **Description** This is available to the pty code so if the master closes, if the slave is a redirect it can release the redirect.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjªubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjÏh]”hŒstruct tty_struct *tty”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÉubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jäh´M hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jäh´M hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjªubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhjªubhí)�”}”(hŒrThis is available to the pty code so if the master closes, if the slave is a redirect it can release the redirect.”h]”hŒrThis is available to the pty code so if the master closes, if the slave is a redirect it can release the redirect.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhjªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ__tty_hangup (C function)”Œc.__tty_hangup”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒsiglock to protect ->signal/->sighand”•h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjfh]”hŒ Parameters”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M$hj`ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj…h]”hŒstruct tty_struct *tty”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M!hjubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jšh´M!hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jšh´M!hj|ubjÙ)�”}”(hŒH``int exit_session`` if non-zero, signal all foreground group processes ”h]”(jß)�”}”(hŒ``int exit_session``”h]”jå)�”}”(hj¾h]”hŒint exit_session”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M"hj¸ubjû)�”}”(hhh]”hí)�”}”(hŒ2if non-zero, signal all foreground group processes”h]”hŒ2if non-zero, signal all foreground group processes”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÓh´M"hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÓh´M"hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj`ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjùh]”hŒ Description”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M$hj`ubhí)�”}”(hŒ´This can be called by a "kworker" kernel thread. That is process synchronous but doesn't hold any locks, so we need to make sure we have the appropriate locks for what we're doing.”h]”hŒ¼This can be called by a “kworkerâ€� kernel thread. That is process synchronous but doesn’t hold any locks, so we need to make sure we have the appropriate locks for what we’re doing.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M#hj`ubhí)�”}”(hŒÖThe hangup event clears any pending redirections onto the hung up device. It ensures future writes will error and it does the needed line discipline hangup and signal delivery. The tty object itself remains intact.”h]”hŒÖThe hangup event clears any pending redirections onto the hung up device. It ensures future writes will error and it does the needed line discipline hangup and signal delivery. The tty object itself remains intact.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M'hj`ubjÔ)�”}”(hhh]”jÙ)�”}”(hXLocking: * BTM * redirect lock for undoing redirection * file list lock for manipulating list of ttys * tty_ldiscs_lock from called functions * termios_rwsem resetting termios data * tasklist_lock to walk task list for hangup event * ->siglock to protect ->signal/->sighand”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M3hj0ubjû)�”}”(hhh]”(hã)�”}”(hhh]”hè)�”}”(hŒBTM ”h]”hí)�”}”(hŒBTM”h]”hŒBTM”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M,hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjFubah}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³j[h´M,hjCubhŒ block_quote”“”)�”}”(hX* redirect lock for undoing redirection * file list lock for manipulating list of ttys * tty_ldiscs_lock from called functions * termios_rwsem resetting termios data * tasklist_lock to walk task list for hangup event * ->siglock to protect ->signal/->sighand”h]”(hã)�”}”(hhh]”(hè)�”}”(hŒ%redirect lock for undoing redirection”h]”hí)�”}”(hjsh]”hŒ%redirect lock for undoing redirection”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M.hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjnubhè)�”}”(hŒ,file list lock for manipulating list of ttys”h]”hí)�”}”(hj‹h]”hŒ,file list lock for manipulating list of ttys”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M/hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjnubhè)�”}”(hŒ%tty_ldiscs_lock from called functions”h]”hí)�”}”(hj£h]”hŒ%tty_ldiscs_lock from called functions”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M0hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjnubhè)�”}”(hŒ$termios_rwsem resetting termios data”h]”hí)�”}”(hj»h]”hŒ$termios_rwsem resetting termios data”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M1hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjnubhè)�”}”(hŒ1tasklist_lock to walk task list for hangup event ”h]”hí)�”}”(hŒ0tasklist_lock to walk task list for hangup event”h]”hŒ0tasklist_lock to walk task list for hangup event”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M2hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjnubeh}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³j‚h´M.hjjubji)�”}”(hŒ)* ->siglock to protect ->signal/->sighand”h]”hã)�”}”(hhh]”hè)�”}”(hŒ'->siglock to protect ->signal/->sighand”h]”hí)�”}”(hjùh]”hŒ'->siglock to protect ->signal/->sighand”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M4hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjôubah}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³jh´M4hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jh´M4hjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j‚h´M.hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1júhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jBh´M3hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_vhangup_self (C function)”Œc.tty_vhangup_self”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒvoid tty_vhangup_self (void)”h]”j )�”}”(hŒvoid tty_vhangup_self(void)”h]”(j¦)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjOh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M»ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjOh²hh³jah´M»ubjÉ)�”}”(hŒtty_vhangup_self”h]”jÏ)�”}”(hŒtty_vhangup_self”h]”hŒtty_vhangup_self”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjpubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjOh²hh³jah´M»ubjè)�”}”(hŒ(void)”h]”jî)�”}”(hŒvoid”h]”j¦)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjŒubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjˆubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjOh²hh³jah´M»ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjKh²hh³jah´M»ubah}”(h]”jFah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jah´M»hjHh²hubj�)�”}”(hhh]”hí)�”}”(hŒprocess vhangup for own ctty”h]”hŒprocess vhangup for own ctty”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M»hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjHh²hh³jah´M»ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jÒj¯jÒj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒj**Parameters** ``void`` no arguments **Description** Perform a vhangup on the current controlling tty”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¿hjÖubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ``void`` no arguments ”h]”(jß)�”}”(hŒ``void``”h]”jå)�”}”(hjûh]”hŒvoid”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Khjõubjû)�”}”(hhh]”hí)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jh´Khjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÖubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj6h]”hŒ Description”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´KhjÖubhí)�”}”(hŒ0Perform a vhangup on the current controlling tty”h]”hŒ0Perform a vhangup on the current controlling tty”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¼hjÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ tty_vhangup_session (C function)”Œc.tty_vhangup_session”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ1void tty_vhangup_session (struct tty_struct *tty)”h]”j )�”}”(hŒ0void tty_vhangup_session(struct tty_struct *tty)”h]”(j¦)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjwh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MËubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjwh²hh³j‰h´MËubjÉ)�”}”(hŒtty_vhangup_session”h]”jÏ)�”}”(hŒtty_vhangup_session”h]”hŒtty_vhangup_session”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj˜ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjwh²hh³j‰h´MËubjè)�”}”(hŒ(struct tty_struct *tty)”h]”jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj´ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj´ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jØŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jžsbŒc.tty_vhangup_session”†”asbuh1hhj´ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj´ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj´ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj°ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjwh²hh³j‰h´MËubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjsh²hh³j‰h´MËubah}”(h]”jnah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j‰h´MËhjph²hubj�)�”}”(hhh]”hí)�”}”(hŒhangup session leader exit”h]”hŒhangup session leader exit”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MËhj8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjph²hh³j‰h´MËubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jSj¯jSj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX`**Parameters** ``struct tty_struct *tty`` tty to hangup **Description** The session leader is exiting and hanging up its controlling terminal. Every process in the foreground process group is signalled ``SIGHUP``. We do this synchronously so that when the syscall returns the process is complete. That guarantee is necessary for security reasons.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÏhjWubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ)``struct tty_struct *tty`` tty to hangup ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj|h]”hŒstruct tty_struct *tty”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÌhjvubjû)�”}”(hhh]”hí)�”}”(hŒ tty to hangup”h]”hŒ tty to hangup”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j‘h´MÌhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j‘h´MÌhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjWubhí)�”}”(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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÎhjWubhí)�”}”(hŒ�The session leader is exiting and hanging up its controlling terminal. Every process in the foreground process group is signalled ``SIGHUP``.”h]”(hŒ‚The session leader is exiting and hanging up its controlling terminal. Every process in the foreground process group is signalled ”…”�”}”(hjÍh²hh³Nh´Nubjå)�”}”(hŒ ``SIGHUP``”h]”hŒSIGHUP”…”�”}”(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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÍhjWubhí)�”}”(hŒ„We do this synchronously so that when the syscall returns the process is complete. That guarantee is necessary for security reasons.”h]”hŒ„We do this synchronously so that when the syscall returns the process is complete. That guarantee is necessary for security reasons.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÐhjWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_read (C function)”Œ c.tty_read”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ:ssize_t tty_read (struct kiocb *iocb, struct iov_iter *to)”h]”j )�”}”(hŒ9ssize_t tty_read(struct kiocb *iocb, struct iov_iter *to)”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j"Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_read”sbŒ c.tty_read”†”asbuh1hhjh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M|ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjh²hh³jAh´M|ubjÉ)�”}”(hŒtty_read”h]”jÏ)�”}”(hj>h]”hŒtty_read”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjPubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjh²hh³jAh´M|ubjè)�”}”(hŒ)(struct kiocb *iocb, struct iov_iter *to)”h]”(jî)�”}”(hŒstruct kiocb *iocb”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjkubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjkubh)�”}”(hhh]”jÏ)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j�Œmodname”NŒ classname”Nj0j3)�”}”j6]”j<Œ c.tty_read”†”asbuh1hhjkubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjkubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjkubjÏ)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjgubjî)�”}”(hŒstruct iov_iter *to”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjÛubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÛubh)�”}”(hhh]”jÏ)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÿŒmodname”NŒ classname”Nj0j3)�”}”j6]”j<Œ c.tty_read”†”asbuh1hhjÛubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÛubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÛubjÏ)�”}”(hŒto”h]”hŒto”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjh²hh³jAh´M|ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjh²hh³jAh´M|ubah}”(h]”jah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jAh´M|hjh²hubj�)�”}”(hhh]”hí)�”}”(hŒ read method for tty device files”h]”hŒ read method for tty device files”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M|hj]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjh²hh³jAh´M|ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jxj¯jxj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXŒ**Parameters** ``struct kiocb *iocb`` kernel I/O control block ``struct iov_iter *to`` destination for the data read **Description** Perform the read system call function on this terminal device. Checks for hung up devices before calling the line discipline method. Locking: Locks the line discipline internally while needed. Multiple read calls may be outstanding in parallel.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M€hj|ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ0``struct kiocb *iocb`` kernel I/O control block ”h]”(jß)�”}”(hŒ``struct kiocb *iocb``”h]”jå)�”}”(hj¡h]”hŒstruct kiocb *iocb”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M}hj›ubjû)�”}”(hhh]”hí)�”}”(hŒkernel I/O control block”h]”hŒkernel I/O control block”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¶h´M}hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j¶h´M}hj˜ubjÙ)�”}”(hŒ6``struct iov_iter *to`` destination for the data read ”h]”(jß)�”}”(hŒ``struct iov_iter *to``”h]”jå)�”}”(hjÚh]”hŒstruct iov_iter *to”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M~hjÔubjû)�”}”(hhh]”hí)�”}”(hŒdestination for the data read”h]”hŒdestination for the data read”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jïh´M~hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jïh´M~hj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj|ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M€hj|ubhí)�”}”(hŒ„Perform the read system call function on this terminal device. Checks for hung up devices before calling the line discipline method.”h]”hŒ„Perform the read system call function on this terminal device. Checks for hung up devices before calling the line discipline method.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhj|ubjÔ)�”}”(hhh]”jÙ)�”}”(hŒoLocking: Locks the line discipline internally while needed. Multiple read calls may be outstanding in parallel.”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mƒhj=ubjû)�”}”(hhh]”hí)�”}”(hŒfLocks the line discipline internally while needed. Multiple read calls may be outstanding in parallel.”h]”hŒfLocks the line discipline internally while needed. Multiple read calls may be outstanding in parallel.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jOh´MƒhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jOh´Mƒhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_write (C function)”Œ c.tty_write”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ=ssize_t tty_write (struct kiocb *iocb, struct iov_iter *from)”h]”j )�”}”(hŒ"sbŒc.pty_line_name”†”asbuh1hhjT"ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–"h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjT"ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj¤"h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjT"ubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj±"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjT"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjP"ubjî)�”}”(hŒ int index”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjÊ"h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÆ"ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ"h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÆ"ubjÏ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjæ"h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÆ"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjP"ubjî)�”}”(hŒchar *p”h]”(j¦)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÿ"h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjû"ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjû"ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjû"ubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hj(#h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjû"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjP"ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj"h²hh³j)"h´Mrubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj"h²hh³j)"h´Mrubah}”(h]”j"ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j)"h´Mrhj"h²hubj�)�”}”(hhh]”hí)�”}”(hŒgenerate name for a pty”h]”hŒgenerate name for a pty”…”�”}”(hjQ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MrhjN#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj"h²hh³j)"h´Mrubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®ji#j¯ji#j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``struct tty_driver *driver`` the tty driver in use ``int index`` the minor number ``char *p`` output buffer of at least 6 bytes **Description** Generate a name from a **driver** reference and write it to the output buffer **p**. Locking: None”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjs#h]”hŒ Parameters”…”�”}”(hju#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjq#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mvhjm#ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ4``struct tty_driver *driver`` the tty driver in use ”h]”(jß)�”}”(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&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MshjŒ#ubjû)�”}”(hhh]”hí)�”}”(hŒthe tty driver in use”h]”hŒthe tty driver in use”…”�”}”(hj«#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j§#h´Mshj¨#ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjŒ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j§#h´Mshj‰#ubjÙ)�”}”(hŒ``int index`` the minor number ”h]”(jß)�”}”(hŒ ``int index``”h]”jå)�”}”(hjË#h]”hŒ int index”…”�”}”(hjÍ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÉ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MthjÅ#ubjû)�”}”(hhh]”hí)�”}”(hŒthe minor number”h]”hŒthe minor number”…”�”}”(hjä#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jà#h´Mthjá#ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÅ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jà#h´Mthj‰#ubjÙ)�”}”(hŒ.``char *p`` output buffer of at least 6 bytes ”h]”(jß)�”}”(hŒ ``char *p``”h]”jå)�”}”(hj$h]”hŒchar *p”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Muhjþ#ubjû)�”}”(hhh]”hí)�”}”(hŒ!output buffer of at least 6 bytes”h]”hŒ!output buffer of at least 6 bytes”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j$h´Muhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjþ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j$h´Muhj‰#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjm#ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj?$h]”hŒ Description”…”�”}”(hjA$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj=$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mwhjm#ubhí)�”}”(hŒTGenerate a name from a **driver** reference and write it to the output buffer **p**.”h]”(hŒGenerate a name from a ”…”�”}”(hjU$h²hh³Nh´Nubj¾)�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hj]$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjU$ubhŒ- reference and write it to the output buffer ”…”�”}”(hjU$h²hh³Nh´Nubj¾)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjo$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjU$ubhŒ.”…”�”}”(hjU$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mvhjm#ubhí)�”}”(hŒ Locking: None”h]”hŒ Locking: None”…”�”}”(hjˆ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Myhjm#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_line_name (C function)”Œc.tty_line_name”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒEssize_t tty_line_name (struct tty_driver *driver, int index, char *p)”h]”j )�”}”(hŒDssize_t tty_line_name(struct tty_driver *driver, int index, char *p)”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjº$h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj·$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j¼$Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œ tty_line_name”sbŒc.tty_line_name”†”asbuh1hhj³$h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‡ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ$h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj³$h²hh³jÛ$h´M‡ubjÉ)�”}”(hŒ tty_line_name”h]”jÏ)�”}”(hjØ$h]”hŒ tty_line_name”…”�”}”(hjî$h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjê$ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj³$h²hh³jÛ$h´M‡ubjè)�”}”(hŒ/(struct tty_driver *driver, int index, char *p)”h]”(jî)�”}”(hŒstruct tty_driver *driver”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj%ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj%ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj'%h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj$%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j)%Œmodname”NŒ classname”Nj0j3)�”}”j6]”jÖ$Œc.tty_line_name”†”asbuh1hhj%ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE%h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj%ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjS%h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj%ubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj`%h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj%ubjî)�”}”(hŒ int index”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjy%h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hju%ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡%h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hju%ubjÏ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj•%h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhju%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj%ubjî)�”}”(hŒchar *p”h]”(j¦)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj®%h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjª%ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼%h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjª%ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjÊ%h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjª%ubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hj×%h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjª%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj%ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj³$h²hh³jÛ$h´M‡ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj¯$h²hh³jÛ$h´M‡ubah}”(h]”jª$ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jÛ$h´M‡hj¬$h²hubj�)�”}”(hhh]”hí)�”}”(hŒgenerate name for a tty”h]”hŒgenerate name for a tty”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‡hjý%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj¬$h²hh³jÛ$h´M‡ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j&j¯j&j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``struct tty_driver *driver`` the tty driver in use ``int index`` the minor number ``char *p`` output buffer of at least 7 bytes **Description** Generate a name from a **driver** reference and write it to the output buffer **p**. Locking: None”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‹hj&ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ4``struct tty_driver *driver`` the tty driver in use ”h]”(jß)�”}”(hŒ``struct tty_driver *driver``”h]”jå)�”}”(hjA&h]”hŒstruct tty_driver *driver”…”�”}”(hjC&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj?&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mˆhj;&ubjû)�”}”(hhh]”hí)�”}”(hŒthe tty driver in use”h]”hŒthe tty driver in use”…”�”}”(hjZ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jV&h´MˆhjW&ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj;&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jV&h´Mˆhj8&ubjÙ)�”}”(hŒ``int index`` the minor number ”h]”(jß)�”}”(hŒ ``int index``”h]”jå)�”}”(hjz&h]”hŒ int index”…”�”}”(hj|&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjx&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‰hjt&ubjû)�”}”(hhh]”hí)�”}”(hŒthe minor number”h]”hŒthe minor number”…”�”}”(hj“&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j�&h´M‰hj�&ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjt&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j�&h´M‰hj8&ubjÙ)�”}”(hŒ.``char *p`` output buffer of at least 7 bytes ”h]”(jß)�”}”(hŒ ``char *p``”h]”jå)�”}”(hj³&h]”hŒchar *p”…”�”}”(hjµ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj±&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MŠhj­&ubjû)�”}”(hhh]”hí)�”}”(hŒ!output buffer of at least 7 bytes”h]”hŒ!output buffer of at least 7 bytes”…”�”}”(hjÌ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÈ&h´MŠhjÉ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj­&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÈ&h´MŠhj8&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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MŒhj&ubhí)�”}”(hŒTGenerate a name from a **driver** reference and write it to the output buffer **p**.”h]”(hŒGenerate a name from a ”…”�”}”(hj'h²hh³Nh´Nubj¾)�”}”(hŒ **driver**”h]”hŒdriver”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj'ubhŒ- reference and write it to the output buffer ”…”�”}”(hj'h²hh³Nh´Nubj¾)�”}”(hŒ**p**”h]”hŒp”…”�”}”(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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‹hj&ubhí)�”}”(hŒ Locking: None”h]”hŒ Locking: None”…”�”}”(hj7'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MŽhj&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ"tty_driver_lookup_tty (C function)”Œc.tty_driver_lookup_tty”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒastruct tty_struct * tty_driver_lookup_tty (struct tty_driver *driver, struct file *file, int idx)”h]”j )�”}”(hŒ_struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver, struct file *file, int idx)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjf'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjb'h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M›ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt'h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjb'h²hh³js'h´M›ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj…'h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‚'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j‡'Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_driver_lookup_tty”sbŒc.tty_driver_lookup_tty”†”asbuh1hhjb'h²hh³js'h´M›ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦'h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjb'h²hh³js'h´M›ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj´'h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjb'h²hh³js'h´M›ubjÉ)�”}”(hŒtty_driver_lookup_tty”h]”jÏ)�”}”(hj£'h]”hŒtty_driver_lookup_tty”…”�”}”(hjÅ'h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÁ'ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjb'h²hh³js'h´M›ubjè)�”}”(hŒ7(struct tty_driver *driver, struct file *file, int idx)”h]”(jî)�”}”(hŒstruct tty_driver *driver”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjà'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjÜ'ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí'h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÜ'ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjþ'h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjû'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j(Œmodname”NŒ classname”Nj0j3)�”}”j6]”j¡'Œc.tty_driver_lookup_tty”†”asbuh1hhjÜ'ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÜ'ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj*(h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÜ'ubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj7(h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÜ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjØ'ubjî)�”}”(hŒstruct file *file”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjP(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjL(ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj](h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjL(ubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjn(h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjk(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jp(Œmodname”NŒ classname”Nj0j3)�”}”j6]”j¡'Œc.tty_driver_lookup_tty”†”asbuh1hhjL(ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ(h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjL(ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjš(h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjL(ubjÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj§(h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjL(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjØ'ubjî)�”}”(hŒint idx”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjÀ(h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj¼(ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ(h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¼(ubjÏ)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjÜ(h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¼(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjØ'ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjb'h²hh³js'h´M›ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj^'h²hh³js'h´M›ubah}”(h]”jY'ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³js'h´M›hj['h²hubj�)�”}”(hhh]”hí)�”}”(hŒfind an existing tty, if any”h]”hŒfind an existing tty, if any”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.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&]”j­j*j®j)j¯j)j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXa**Parameters** ``struct tty_driver *driver`` the driver for the tty ``struct file *file`` file object ``int idx`` the minor number **Return** the tty, if found. If not found, return ``NULL`` or ERR_PTR() if the driver lookup() method returns an error. **Description** Locking: tty_mutex must be held. If the tty is found, bump the tty kref.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MŸhj")ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ5``struct tty_driver *driver`` the driver for the tty ”h]”(jß)�”}”(hŒ``struct tty_driver *driver``”h]”jå)�”}”(hjG)h]”hŒstruct tty_driver *driver”…”�”}”(hjI)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjE)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MœhjA)ubjû)�”}”(hhh]”hí)�”}”(hŒthe driver for the tty”h]”hŒthe driver for the tty”…”�”}”(hj`)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j\)h´Mœhj])ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjA)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j\)h´Mœhj>)ubjÙ)�”}”(hŒ"``struct file *file`` file object ”h]”(jß)�”}”(hŒ``struct file *file``”h]”jå)�”}”(hj€)h]”hŒstruct file *file”…”�”}”(hj‚)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj~)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M�hjz)ubjû)�”}”(hhh]”hí)�”}”(hŒ file object”h]”hŒ file object”…”�”}”(hj™)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j•)h´M�hj–)ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjz)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j•)h´M�hj>)ubjÙ)�”}”(hŒ``int idx`` the minor number ”h]”(jß)�”}”(hŒ ``int idx``”h]”jå)�”}”(hj¹)h]”hŒint idx”…”�”}”(hj»)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj·)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mžhj³)ubjû)�”}”(hhh]”hí)�”}”(hŒthe minor number”h]”hŒthe minor number”…”�”}”(hjÒ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÎ)h´MžhjÏ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj³)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÎ)h´Mžhj>)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj")ubhí)�”}”(hŒ **Return**”h]”j¾)�”}”(hjô)h]”hŒReturn”…”�”}”(hjö)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjò)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj")ubhí)�”}”(hŒmthe tty, if found. If not found, return ``NULL`` or ERR_PTR() if the driver lookup() method returns an error.”h]”(hŒ(the tty, if found. If not found, return ”…”�”}”(hj *h²hh³Nh´Nubjå)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj *ubhŒ= or ERR_PTR() if the driver lookup() method returns an error.”…”�”}”(hj *h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M 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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M£hj")ubhí)�”}”(hŒHLocking: tty_mutex must be held. If the tty is found, bump the tty kref.”h]”hŒHLocking: tty_mutex must be held. If the tty is found, bump the tty kref.”…”�”}”(hjC*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¢hj")ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ#tty_driver_install_tty (C function)”Œc.tty_driver_install_tty”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒNint tty_driver_install_tty (struct tty_driver *driver, struct tty_struct *tty)”h]”j )�”}”(hŒMint tty_driver_install_tty(struct tty_driver *driver, struct tty_struct *tty)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjr*h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjn*h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Méubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjn*h²hh³j€*h´MéubjÉ)�”}”(hŒtty_driver_install_tty”h]”jÏ)�”}”(hŒtty_driver_install_tty”h]”hŒtty_driver_install_tty”…”�”}”(hj“*h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�*ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjn*h²hh³j€*h´Méubjè)�”}”(hŒ3(struct tty_driver *driver, struct tty_struct *tty)”h]”(jî)�”}”(hŒstruct tty_driver *driver”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj¯*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj«*ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼*h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj«*ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hjÍ*h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÊ*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÏ*Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j•*sbŒc.tty_driver_install_tty”†”asbuh1hhj«*ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí*h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj«*ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjû*h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj«*ubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj«*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj§*ubjî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj!+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj+ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj+ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj?+h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj<+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jA+Œmodname”NŒ classname”Nj0j3)�”}”j6]”jé*Œc.tty_driver_install_tty”†”asbuh1hhj+ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]+h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj+ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjk+h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj+ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjx+h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj§*ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjn*h²hh³j€*h´Méubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjj*h²hh³j€*h´Méubah}”(h]”je*ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j€*h´Méhjg*h²hubj�)�”}”(hhh]”hí)�”}”(hŒ!install a tty entry in the driver”h]”hŒ!install a tty entry in the driver”…”�”}”(hj¢+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MéhjŸ+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjg*h²hh³j€*h´Méubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jº+j¯jº+j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXm**Parameters** ``struct tty_driver *driver`` the driver for the tty ``struct tty_struct *tty`` the tty **Description** Install a tty object into the driver tables. The **tty->index** field will be set by the time this is called. This method is responsible for ensuring any need additional structures are allocated and configured. Locking: tty_mutex for now”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Míhj¾+ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ5``struct tty_driver *driver`` the driver for the tty ”h]”(jß)�”}”(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&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MêhjÝ+ubjû)�”}”(hhh]”hí)�”}”(hŒthe driver for the tty”h]”hŒthe driver for the tty”…”�”}”(hjü+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jø+h´Mêhjù+ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÝ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jø+h´MêhjÚ+ubjÙ)�”}”(hŒ#``struct tty_struct *tty`` the tty ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj,h]”hŒstruct tty_struct *tty”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mëhj,ubjû)�”}”(hhh]”hí)�”}”(hŒthe tty”h]”hŒthe tty”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j1,h´Mëhj2,ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj,ubeh}”(h]”h ]”•h"]”h$]”h&]”uh1jØh³j1,h´MëhjÚ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj¾+ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjW,h]”hŒ Description”…”�”}”(hjY,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjU,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Míhj¾+ubhí)�”}”(hŒÒInstall a tty object into the driver tables. The **tty->index** field will be set by the time this is called. This method is responsible for ensuring any need additional structures are allocated and configured.”h]”(hŒ1Install a tty object into the driver tables. The ”…”�”}”(hjm,h²hh³Nh´Nubj¾)�”}”(hŒ**tty->index**”h]”hŒ tty->index”…”�”}”(hju,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjm,ubhŒ“ field will be set by the time this is called. This method is responsible for ensuring any need additional structures are allocated and configured.”…”�”}”(hjm,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mìhj¾+ubhí)�”}”(hŒLocking: tty_mutex for now”h]”hŒLocking: tty_mutex for now”…”�”}”(hjŽ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mðhj¾+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œ"tty_driver_remove_tty (C function)”Œc.tty_driver_remove_tty”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒNvoid tty_driver_remove_tty (struct tty_driver *driver, struct tty_struct *tty)”h]”j )�”}”(hŒMvoid tty_driver_remove_tty(struct tty_driver *driver, struct tty_struct *tty)”h]”(j¦)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj½,h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj¹,h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mûubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ,h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¹,h²hh³jË,h´MûubjÉ)�”}”(hŒtty_driver_remove_tty”h]”jÏ)�”}”(hŒtty_driver_remove_tty”h]”hŒtty_driver_remove_tty”…”�”}”(hjÞ,h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÚ,ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj¹,h²hh³jË,h´Mûubjè)�”}”(hŒ3(struct tty_driver *driver, struct tty_struct *tty)”h]”(jî)�”}”(hŒstruct tty_driver *driver”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjú,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjö,ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjö,ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j-Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jà,sbŒc.tty_driver_remove_tty”†”asbuh1hhjö,ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8-h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjö,ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjF-h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjö,ubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjS-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjö,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjò,ubjî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjl-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjh-ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy-h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjh-ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjŠ-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‡-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jŒ-Œmodname”NŒ classname”Nj0j3)�”}”j6]”j4-Œc.tty_driver_remove_tty”†”asbuh1hhjh-ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨-h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjh-ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj¶-h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjh-ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjÃ-h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjh-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjò,ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj¹,h²hh³jË,h´Mûubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjµ,h²hh³jË,h´Mûubah}”(h]”j°,ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jË,h´Mûhj²,h²hubj�)�”}”(hhh]”hí)�”}”(hŒ#remove a tty from the driver tables”h]”hŒ#remove a tty from the driver tables”…”�”}”(hjí-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mûhjê-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj²,h²hh³jË,h´Mûubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j.j¯j.j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX **Parameters** ``struct tty_driver *driver`` the driver for the tty ``struct tty_struct *tty`` tty to remove **Description** Remove a tty object from the driver tables. The tty->index field will be set by the time this is called. Locking: tty_mutex for now”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mÿhj .ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ5``struct tty_driver *driver`` the driver for the tty ”h]”(jß)�”}”(hŒ``struct tty_driver *driver``”h]”jå)�”}”(hj..h]”hŒstruct tty_driver *driver”…”�”}”(hj0.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj,.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mühj(.ubjû)�”}”(hhh]”hí)�”}”(hŒthe driver for the tty”h]”hŒthe driver for the tty”…”�”}”(hjG.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jC.h´MühjD.ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj(.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jC.h´Mühj%.ubjÙ)�”}”(hŒ)``struct tty_struct *tty`` tty to remove ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjg.h]”hŒstruct tty_struct *tty”…”�”}”(hji.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähje.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mýhja.ubjû)�”}”(hhh]”hí)�”}”(hŒ tty to remove”h]”hŒ tty to remove”…”�”}”(hj€.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j|.h´Mýhj}.ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhja.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j|.h´Mýhj%.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj .ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj¢.h]”hŒ Description”…”�”}”(hj¤.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mÿhj .ubhí)�”}”(hŒhRemove a tty object from the driver tables. The tty->index field will be set by the time this is called.”h]”hŒhRemove a tty object from the driver tables. The tty->index field will be set by the time this is called.”…”�”}”(hj¸.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mþhj .ubhí)�”}”(hŒLocking: tty_mutex for now”h]”hŒLocking: tty_mutex for now”…”�”}”(hjÇ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhj .ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_reopen (C function)”Œ c.tty_reopen”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ'int tty_reopen (struct tty_struct *tty)”h]”j )�”}”(hŒ&int tty_reopen(struct tty_struct *tty)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjö.h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjò.h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjò.h²hh³j/h´M ubjÉ)�”}”(hŒ tty_reopen”h]”jÏ)�”}”(hŒ tty_reopen”h]”hŒ tty_reopen”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj/ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjò.h²hh³j/h´M ubjè)�”}”(hŒ(struct tty_struct *tty)”h]”jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj3/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj//ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@/h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj//ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjQ/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjN/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jS/Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j/sbŒ c.tty_reopen”†”asbuh1hhj//ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq/h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj//ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj//ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjŒ/h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj//ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj+/ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjò.h²hh³j/h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjî.h²hh³j/h´M ubah}”(h]”jé.ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j/h´M hjë.h²hubj�)�”}”(hhh]”hí)�”}”(hŒfast re-open of an open tty”h]”hŒfast re-open of an open tty”…”�”}”(hj¶/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj³/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjë.h²hh³j/h´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jÎ/j¯jÎ/j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒÛ**Parameters** ``struct tty_struct *tty`` the tty to open **Description** Re-opens on master ptys are not allowed and return -``EIO``. Locking: Caller must hold tty_lock **Return** 0 on success, -errno on error.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjÒ/ubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ+``struct tty_struct *tty`` the tty to open ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj÷/h]”hŒstruct tty_struct *tty”…”�”}”(hjù/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjõ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhjñ/ubjû)�”}”(hhh]”hí)�”}”(hŒthe tty to open”h]”hŒthe tty to open”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j 0h´Mhj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjñ/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j 0h´Mhjî/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÒ/ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj20h]”hŒ Description”…”�”}”(hj40h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj00ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjÒ/ubhí)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j>Œmodname”NŒ classname”Nj0j3)�”}”j6]”jÏ=Œc.tty_open_current_tty”†”asbuh1hhj >ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/>h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj >ubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj=>h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj >ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj>ubjî)�”}”(hŒstruct file *filp”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjV>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjR>ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc>h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjR>ubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjt>h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjq>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jv>Œmodname”NŒ classname”Nj0j3)�”}”j6]”jÏ=Œc.tty_open_current_tty”†”asbuh1hhjR>ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’>h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjR>ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjR>ubjÏ)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj­>h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjR>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj�=h²hh³j¡=h´M(ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjŒ=h²hh³j¡=h´M(ubah}”(h]”j‡=ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j¡=h´M(hj‰=h²hubj�)�”}”(hhh]”hí)�”}”(hŒget locked tty of current task”h]”hŒget locked tty of current task”…”�”}”(hj×>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M(hjÔ>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‰=h²hh³j¡=h´M(ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jï>j¯jï>j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXw**Parameters** ``dev_t device`` device number ``struct file *filp`` file pointer to tty **Return** locked tty of the current task iff **device** is /dev/tty **Description** Performs a re-open of the current task's controlling tty. We cannot return driver and index like for the other nodes because devpts will not work then. It expects inodes to be from devpts FS.”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M,hjó>ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ``dev_t device`` device number ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hj?h]”hŒ dev_t device”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M)hj?ubjû)�”}”(hhh]”hí)�”}”(hŒ device number”h]”hŒ device number”…”�”}”(hj1?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j-?h´M)hj.?ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j-?h´M)hj?ubjÙ)�”}”(hŒ*``struct file *filp`` file pointer to tty ”h]”(jß)�”}”(hŒ``struct file *filp``”h]”jå)�”}”(hjQ?h]”hŒstruct file *filp”…”�”}”(hjS?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjO?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M*hjK?ubjû)�”}”(hhh]”hí)�”}”(hŒfile pointer to tty”h]”hŒfile pointer to tty”…”�”}”(hjj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jf?h´M*hjg?ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjK?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jf?h´M*hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjó>ubhí)�”}”(hŒ **Return**”h]”j¾)�”}”(hjŒ?h]”hŒReturn”…”�”}”(hjŽ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjŠ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M,hjó>ubhí)�”}”(hŒ9locked tty of the current task iff **device** is /dev/tty”h]”(hŒ#locked tty of the current task iff ”…”�”}”(hj¢?h²hh³Nh´Nubj¾)�”}”(hŒ **device**”h]”hŒdevice”…”�”}”(hjª?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¢?ubhŒ is /dev/tty”…”�”}”(hj¢?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M+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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M-hjó>ubhí)�”}”(hŒ9Performs a re-open of the current task's controlling tty.”h]”hŒ;Performs a re-open of the current task’s controlling tty.”…”�”}”(hjÛ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M,hjó>ubhí)�”}”(hŒ…We cannot return driver and index like for the other nodes because devpts will not work then. It expects inodes to be from devpts FS.”h]”hŒ…We cannot return driver and index like for the other nodes because devpts will not work then. It expects inodes to be from devpts FS.”…”�”}”(hjê?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M.hjó>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_lookup_driver (C function)”Œc.tty_lookup_driver”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒSstruct tty_driver * tty_lookup_driver (dev_t device, struct file *filp, int *index)”h]”j )�”}”(hŒQstruct tty_driver *tty_lookup_driver(dev_t device, struct file *filp, int *index)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj@h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MLubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'@h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj@h²hh³j&@h´MLubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj8@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj5@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j:@Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_lookup_driver”sbŒc.tty_lookup_driver”†”asbuh1hhj@h²hh³j&@h´MLubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY@h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj@h²hh³j&@h´MLubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjg@h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj@h²hh³j&@h´MLubjÉ)�”}”(hŒtty_lookup_driver”h]”jÏ)�”}”(hjV@h]”hŒtty_lookup_driver”…”�”}”(hjx@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjt@ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj@h²hh³j&@h´MLubjè)�”}”(hŒ-(dev_t device, struct file *filp, int *index)”h]”(jî)�”}”(hŒ dev_t device”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj–@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj“@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j˜@Œmodname”NŒ classname”Nj0j3)�”}”j6]”jT@Œc.tty_lookup_driver”†”asbuh1hhj�@ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´@h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�@ubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÂ@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj‹@ubjî)�”}”(hŒstruct file *filp”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjÛ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj×@ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè@h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj×@ubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjù@h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjö@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jû@Œmodname”NŒ classname”Nj0j3)�”}”j6]”jT@Œc.tty_lookup_driver”†”asbuh1hhj×@ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj×@ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj×@ubjÏ)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj2Ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj×@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj‹@ubjî)�”}”(hŒ int *index”•h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjKAh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjGAubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYAh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjGAubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjgAh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjGAubjÏ)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjtAh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjGAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj‹@ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj@h²hh³j&@h´MLubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj@h²hh³j&@h´MLubah}”(h]”j @ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j&@h´MLhj@h²hubj�)�”}”(hhh]”hí)�”}”(hŒ+lookup a tty driver for a given device file”h]”hŒ+lookup a tty driver for a given device file”…”�”}”(hjžAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MLhj›Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj@h²hh³j&@h´MLubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j¶Aj¯j¶Aj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX�**Parameters** ``dev_t device`` device number ``struct file *filp`` file pointer to tty ``int *index`` index for the device in the **return** driver **Description** If returned value is not erroneous, the caller is responsible to decrement the refcount by tty_driver_kref_put(). Locking: ``tty_mutex`` protects get_tty_driver() **Return** driver for this inode (with increased refcount)”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjÀAh]”hŒ Parameters”…”�”}”(hjÂAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¾Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MPhjºAubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ``dev_t device`` device number ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hjßAh]”hŒ dev_t device”…”�”}”(hjáAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÝAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MMhjÙAubjû)�”}”(hhh]”hí)�”}”(hŒ device number”h]”hŒ device number”…”�”}”(hjøAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jôAh´MMhjõAubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÙAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jôAh´MMhjÖAubjÙ)�”}”(hŒ*``struct file *filp`` file pointer to tty ”h]”(jß)�”}”(hŒ``struct file *filp``”h]”jå)�”}”(hjBh]”hŒstruct file *filp”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MNhjBubjû)�”}”(hhh]”hí)�”}”(hŒfile pointer to tty”h]”hŒfile pointer to tty”…”�”}”(hj1Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j-Bh´MNhj.Bubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j-Bh´MNhjÖAubjÙ)�”}”(hŒ=``int *index`` index for the device in the **return** driver ”h]”(jß)�”}”(hŒ``int *index``”h]”jå)�”}”(hjQBh]”hŒ int *index”…”�”}”(hjSBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjOBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MOhjKBubjû)�”}”(hhh]”hí)�”}”(hŒ-index for the device in the **return** driver”h]”(hŒindex for the device in the ”…”�”}”(hjjBh²hh³Nh´Nubj¾)�”}”(hŒ **return**”h]”hŒreturn”…”�”}”(hjrBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjjBubhŒ driver”…”�”}”(hjjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jfBh´MOhjgBubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjKBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jfBh´MOhjÖAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjºAubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjžBh]”hŒ Description”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjœBubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MQhjºAubhí)�”}”(hŒqIf returned value is not erroneous, the caller is responsible to decrement the refcount by tty_driver_kref_put().”h]”hŒqIf returned value is not erroneous, the caller is responsible to decrement the refcount by tty_driver_kref_put().”…”�”}”(hj´Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MPhjºAubhí)�”}”(hŒ0Locking: ``tty_mutex`` protects get_tty_driver()”h]”(hŒ Locking: ”…”�”}”(hjÃBh²hh³Nh´Nubjå)�”}”(hŒ ``tty_mutex``”h]”hŒ tty_mutex”…”�”}”(hjËBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÃBubhŒ protects get_tty_driver()”…”�”}”(hjÃBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MShjºAubhí)�”}”(hŒ **Return**”h]”j¾)�”}”(hjæBh]”hŒReturn”…”�”}”(hjèBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjäBubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MUhjºAubhí)�”}”(hŒ/driver for this inode (with increased refcount)”h]”hŒ/driver for this inode (with increased refcount)”…”�”}”(hjüBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MVhjºAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_open_by_driver (C function)”Œc.tty_open_by_driver”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒHstruct tty_struct * tty_open_by_driver (dev_t device, struct file *filp)”h]”j )�”}”(hŒFstruct tty_struct *tty_open_by_driver(dev_t device, struct file *filp)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj+Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj'Ch²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÅubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Ch²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj'Ch²hh³j8Ch´MÅubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjJCh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjGCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jLCŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_open_by_driver”sbŒc.tty_open_by_driver”†”asbuh1hhj'Ch²hh³j8Ch´MÅubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkCh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj'Ch²hh³j8Ch´MÅubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjyCh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj'Ch²hh³j8Ch´MÅubjÉ)�”}”(hŒtty_open_by_driver”h]”jÏ)�”}”(hjhCh]”hŒtty_open_by_driver”…”�”}”(hjŠCh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj†Cubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj'Ch²hh³j8Ch´MÅubjè)�”}”(hŒ!(dev_t device, struct file *filp)”h]”(jî)�”}”(hŒ dev_t device”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj¨Ch²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¥Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jªCŒmodname”NŒ classname”Nj0j3)�”}”j6]”jfCŒc.tty_open_by_driver”†”asbuh1hhj¡Cubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆCh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj¡CubjÏ)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÔCh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¡Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj�Cubjî)�”}”(hŒstruct file *filp”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjíCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjéCubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúCh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjéCubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j DŒmodname”NŒ classname”Nj0j3)�”}”j6]”jfCŒc.tty_open_by_driver”†”asbuh1hhjéCubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Dh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjéCubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj7Dh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjéCubjÏ)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjDDh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjéCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj�Cubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj'Ch²hh³j8Ch´MÅubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj#Ch²hh³j8Ch´MÅubah}”(h]”jCah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j8Ch´MÅhj Ch²hubj�)�”}”(hhh]”hí)�”}”(hŒopen a tty device”h]”hŒopen a tty device”…”�”}”(hjnDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÅhjkDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj Ch²hh³j8Ch´MÅubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j†Dj¯j†Dj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXØ**Parameters** ``dev_t device`` dev_t of device to open ``struct file *filp`` file pointer to tty **Description** Performs the driver lookup, checks for a reopen, or otherwise performs the first-time tty initialization. Claims the global tty_mutex to serialize: * concurrent first-time tty initialization * concurrent tty driver removal w/ lookup * concurrent tty removal from driver table **Return** the locked initialized or re-opened :c:type:`tty_struct`”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj�Dh]”hŒ Parameters”…”�”}”(hj’Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjŽDubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÉhjŠDubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ)``dev_t device`` dev_t of device to open ”h]”(jß)�”}”(hŒ``dev_t device``”h]”jå)�”}”(hj¯Dh]”hŒ dev_t device”…”�”}”(hj±Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj­Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÆhj©Dubjû)�”}”(hhh]”hí)�”}”(hŒdev_t of device to open”h]”hŒdev_t of device to open”…”�”}”(hjÈDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÄDh´MÆhjÅDubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj©Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÄDh´MÆhj¦DubjÙ)�”}”(hŒ*``struct file *filp`` file pointer to tty ”h]”(jß)�”}”(hŒ``struct file *filp``”h]”jå)�”}”(hjèDh]”hŒstruct file *filp”…”�”}”(hjêDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjæDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÇhjâDubjû)�”}”(hhh]”hí)�”}”(hŒfile pointer to tty”h]”hŒfile pointer to tty”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jýDh´MÇhjþDubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjâDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jýDh´MÇhj¦Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjŠDubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj#Eh]”hŒ Description”…”�”}”(hj%Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj!Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÉhjŠDubhí)�”}”(hŒiPerforms the driver lookup, checks for a reopen, or otherwise performs the first-time tty initialization.”h]”hŒiPerforms the driver lookup, checks for a reopen, or otherwise performs the first-time tty initialization.”…”�”}”(hj9Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÈhjŠDubjÔ)�”}”(hhh]”jÙ)�”}”(hŒªClaims the global tty_mutex to serialize: * concurrent first-time tty initialization * concurrent tty driver removal w/ lookup * concurrent tty removal from driver table ”h]”(jß)�”}”(hŒ)Claims the global tty_mutex to serialize:”h]”hŒ)Claims the global tty_mutex to serialize:”…”�”}”(hjOEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÏhjKEubjû)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ(concurrent first-time tty initialization”h]”hí)�”}”(hjfEh]”hŒ(concurrent first-time tty initialization”…”�”}”(hjhEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÍhjdEubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjaEubhè)�”}”(hŒ'concurrent tty driver removal w/ lookup”h]”hí)�”}”(hj~Eh]”hŒ'concurrent tty driver removal w/ lookup”…”�”}”(hj€Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÎhj|Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjaEubhè)�”}”(hŒ)concurrent tty removal from driver table ”h]”hí)�”}”(hŒ(concurrent tty removal from driver table”h]”hŒ(concurrent tty removal from driver table”…”�”}”(hj˜Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j]Eh´MÏhj”Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjaEubeh}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³juEh´MÍhj^Eubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjKEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j]Eh´MÏhjHEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjŠDubhí)�”}”(hŒ **Return**”h]”j¾)�”}”(hjÆEh]”hŒReturn”…”�”}”(hjÈEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÄEubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÑhjŠDubhí)�”}”(hŒ8the locked initialized or re-opened :c:type:`tty_struct`”h]”(hŒ$the locked initialized or re-opened ”…”�”}”(hjÜEh²hh³Nh´Nubh)�”}”(hŒ:c:type:`tty_struct`”h]”jå)�”}”(hjæEh]”hŒ tty_struct”…”�”}”(hjèEh²hh³Nh´Nubah}”(h]”h ]”(j»j*Œc-type”eh"]”h$]”h&]”uh1jähjäEubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÇŒ refdomain”j*Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j0jÍjÐŒ tty_struct”uh1hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÒhjÜEubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jFh´MÒhjŠDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_open (C function)”Œ c.tty_open”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ5int tty_open (struct inode *inode, struct file *filp)”h]”j )�”}”(hŒ4int tty_open(struct inode *inode, struct file *filp)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj*Fh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj&Fh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Fh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj&Fh²hh³j8Fh´M ubjÉ)�”}”(hŒtty_open”h]”jÏ)�”}”(hŒtty_open”h]”hŒtty_open”…”�”}”(hjKFh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjGFubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj&Fh²hh³j8Fh´M ubjè)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(jî)�”}”(hŒstruct inode *inode”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjgFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjcFubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtFh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjcFubh)�”}”(hhh]”jÏ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj…Fh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‚Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j‡FŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jMFsbŒ c.tty_open”†”asbuh1hhjcFubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Fh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjcFubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj³Fh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjcFubjÏ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÀFh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjcFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj_Fubjî)�”}”(hŒstruct file *filp”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjÙFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjÕFubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæFh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÕFubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj÷Fh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjôFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jùFŒmodname”NŒ classname”Nj0j3)�”}”j6]”j¡FŒ c.tty_open”†”asbuh1hhjÕFubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÕFubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj#Gh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÕFubjÏ)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj0Gh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÕFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj_Fubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj&Fh²hh³j8Fh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj"Fh²hh³j8Fh´M ubah}”(h]”jFah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j8Fh´M hjFh²hubj�)�”}”(hhh]”hí)�”}”(hŒopen a tty device”h]”hŒopen a tty device”…”�”}”(hjZGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjWGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjFh²hh³j8Fh´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jrGj¯jrGj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXV**Parameters** ``struct inode *inode`` inode of device file ``struct file *filp`` file pointer to tty **Description** tty_open() and tty_release() keep up the tty count that contains the number of opens done on a tty. We cannot use the inode-count, as different inodes might point to the same tty. Open-counting is needed for pty masters, as well as for keeping track of serial lines: DTR is dropped when the last close happens. (This is not done solely through tty->count, now. - Ted 1/27/92) The termios state of a pty is reset on the first open so that settings don't persist across reuse. Locking: * ``tty_mutex`` protects tty, tty_lookup_driver() and tty_init_dev(). * **tty->count** should protect the rest. * ->siglock protects ->signal/->sighand **Note** the tty_unlock/lock cases without a ref are only safe due to ``tty_mutex``”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj|Gh]”hŒ Parameters”…”�”}”(hj~Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjzGubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjvGubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ-``struct inode *inode`` inode of device file ”h]”(jß)�”}”(hŒ``struct inode *inode``”h]”jå)�”}”(hj›Gh]”hŒstruct inode *inode”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj™Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj•Gubjû)�”}”(hhh]”hí)�”}”(hŒinode of device file”h]”hŒinode of device file”…”�”}”(hj´Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j°Gh´M hj±Gubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj•Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j°Gh´M hj’GubjÙ)�”}”(hŒ*``struct file *filp`` file pointer to tty ”h]”(jß)�”}”(hŒ``struct file *filp``”h]”jå)�”}”(hjÔGh]”hŒstruct file *filp”…”�”}”(hjÖGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÒGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÎGubjû)�”}”(hhh]”hí)�”}”(hŒfile pointer to tty”h]”hŒfile pointer to tty”…”�”}”(hjíGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jéGh´M hjêGubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÎGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jéGh´M hj’Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjvGubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjHh]”hŒ Description”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjvGubhí)�”}”(hŒ³tty_open() and tty_release() keep up the tty count that contains the number of opens done on a tty. We cannot use the inode-count, as different inodes might point to the same tty.”h]”hŒ³tty_open() and tty_release() keep up the tty count that contains the number of opens done on a tty. We cannot use the inode-count, as different inodes might point to the same tty.”…”�”}”(hj%Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjvGubhí)�”}”(hŒÄOpen-counting is needed for pty masters, as well as for keeping track of serial lines: DTR is dropped when the last close happens. (This is not done solely through tty->count, now. - Ted 1/27/92)”h]”hŒÄOpen-counting is needed for pty masters, as well as for keeping track of serial lines: DTR is dropped when the last close happens. (This is not done solely through tty->count, now. - Ted 1/27/92)”…”�”}”(hj4Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjvGubhí)�”}”(hŒbThe termios state of a pty is reset on the first open so that settings don't persist across reuse.”h]”hŒdThe termios state of a pty is reset on the first open so that settings don’t persist across reuse.”…”�”}”(hjCHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjvGubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ¡Locking: * ``tty_mutex`` protects tty, tty_lookup_driver() and tty_init_dev(). * **tty->count** should protect the rest. * ->siglock protects ->signal/->sighand ”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjYHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjUHubjû)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒC``tty_mutex`` protects tty, tty_lookup_driver() and tty_init_dev().”h]”hí)�”}”(hjpHh]”(jå)�”}”(hŒ ``tty_mutex``”h]”hŒ tty_mutex”…”�”}”(hjuHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjrHubhŒ6 protects tty, tty_lookup_driver() and tty_init_dev().”…”�”}”(hjrHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjnHubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjkHubhè)�”}”(hŒ'**tty->count** should protect the rest.”h]”hí)�”}”(hj–Hh]”(j¾)�”}”(hŒ**tty->count**”h]”hŒ tty->count”…”�”}”(hj›Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj˜HubhŒ should protect the rest.”…”�”}”(hj˜Hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhj”Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjkHubhè)�”}”(hŒ&->siglock protects ->signal/->sighand ”h]”hí)�”}”(hŒ%->siglock protects ->signal/->sighand”h]”hŒ%->siglock protects ->signal/->sighand”…”�”}”(hj¾Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jgHh´MhjºHubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhjkHubeh}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³j�Hh´MhjhHubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjUHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jgHh´MhjRHubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjvGubhí)�”}”(hŒ**Note**”h]”j¾)�”}”(hjìHh]”hŒNote”…”�”}”(hjîHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjêHubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjvGubhí)�”}”(hŒJthe tty_unlock/lock cases without a ref are only safe due to ``tty_mutex``”h]”(hŒ=the tty_unlock/lock cases without a ref are only safe due to ”…”�”}”(hjIh²hh³Nh´Nubjå)�”}”(hŒ ``tty_mutex``”h]”hŒ tty_mutex”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MhjvGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_poll (C function)”Œ c.tty_poll”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ7__poll_t tty_poll (struct file *filp, poll_table *wait)”h]”j )�”}”(hŒ6__poll_t tty_poll(struct file *filp, poll_table *wait)”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hjBIh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj?Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jDIŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œtty_poll”sbŒ c.tty_poll”†”asbuh1hhj;Ih²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mgubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdIh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj;Ih²hh³jcIh´MgubjÉ)�”}”(hŒtty_poll”h]”jÏ)�”}”(hj`Ih]”hŒtty_poll”…”�”}”(hjvIh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjrIubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj;Ih²hh³jcIh´Mgubjè)�”}”(hŒ%(struct file *filp, poll_table *wait)”h]”(jî)�”}”(hŒstruct file *filp”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj‘Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj�Iubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžIh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�Iubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¯Ih²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj¬Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j±IŒmodname”NŒ classname”Nj0j3)�”}”j6]”j^IŒ c.tty_poll”†”asbuh1hhj�Iubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍIh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�IubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjÛIh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�IubjÏ)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjèIh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj‰Iubjî)�”}”(hŒpoll_table *wait”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒ poll_table”h]”hŒ poll_table”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jJŒmodname”NŒ classname”Nj0j3)�”}”j6]”j^IŒ c.tty_poll”†”asbuh1hhjýIubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Jh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjýIubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj0Jh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjýIubjÏ)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj=Jh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjýIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj‰Iubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj;Ih²hh³jcIh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj7Ih²hh³jcIh´Mgubah}”(h]”j2Iah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jcIh´Mghj4Ih²hubj�)�”}”(hhh]”hí)�”}”(hŒcheck tty status”h]”hŒcheck tty status”…”�”}”(hjgJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MghjdJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj4Ih²hh³jcIh´Mgubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jJj¯jJj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX;**Parameters** ``struct file *filp`` file being polled ``poll_table *wait`` poll wait structures to update **Description** Call the line discipline polling method to obtain the poll status of the device. Locking: locks called line discipline but ldisc poll method may be re-entered freely by other callers.”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj‰Jh]”hŒ Parameters”…”�”}”(hj‹Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj‡Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MkhjƒJubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ(``struct file *filp`` file being polled ”h]”(jß)�”}”(hŒ``struct file *filp``”h]”jå)�”}”(hj¨Jh]”hŒstruct file *filp”…”�”}”(hjªJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj¦Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mhhj¢Jubjû)�”}”(hhh]”hí)�”}”(hŒfile being polled”h]”hŒfile being polled”…”�”}”(hjÁJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j½Jh´Mhhj¾Jubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¢Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j½Jh´MhhjŸJubjÙ)�”}”(hŒ4``poll_table *wait`` poll wait structures to update ”h]”(jß)�”}”(hŒ``poll_table *wait``”h]”jå)�”}”(hjáJh]”hŒpoll_table *wait”…”�”}”(hjãJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjßJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MihjÛJubjû)�”}”(hhh]”hí)�”}”(hŒpoll wait structures to update”h]”hŒpoll wait structures to update”…”�”}”(hjúJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jöJh´Mihj÷Jubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÛJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jöJh´MihjŸJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjƒJubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjKh]”hŒ Description”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MkhjƒJubhí)�”}”(hŒPCall the line discipline polling method to obtain the poll status of the device.”h]”hŒPCall the line discipline polling method to obtain the poll status of the device.”…”�”}”(hj2Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MjhjƒJubhí)�”}”(hŒfLocking: locks called line discipline but ldisc poll method may be re-entered freely by other callers.”h]”hŒfLocking: locks called line discipline but ldisc poll method may be re-entered freely by other callers.”…”�”}”(hjAKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MmhjƒJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtiocsti (C function)”Œ c.tiocsti”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ2int tiocsti (struct tty_struct *tty, u8 __user *p)”h]”j )�”}”(hŒ1int tiocsti(struct tty_struct *tty, u8 __user *p)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjpKh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjlKh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M»ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjlKh²hh³j~Kh´M»ubjÉ)�”}”(hŒtiocsti”h]”jÏ)�”}”(hŒtiocsti”h]”hŒtiocsti”…”�”}”(hj‘Kh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj�Kubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjlKh²hh³j~Kh´M»ubjè)�”}”(hŒ&(struct tty_struct *tty, u8 __user *p)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj­Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj©Kubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºKh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj©Kubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjËKh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÈKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÍKŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j“KsbŒ c.tiocsti”†”asbuh1hhj©Kubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëKh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj©KubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjùKh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj©KubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj©Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj¥Kubjî)�”}”(hŒ u8 __user *p”h]”(h)�”}”(hhh]”jÏ)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj"Lh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j$LŒmodname”NŒ classname”Nj0j3)�”}”j6]”jçKŒ c.tiocsti”†”asbuh1hhjLubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Lh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjLubhŒ__user”…”�”}”(hjLh²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRLh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjLubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj`Lh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjLubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hjmLh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj¥Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjlKh²hh³j~Kh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjhKh²hh³j~Kh´M»ubah}”(h]”jcKah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j~Kh´M»hjeKh²hubj�)�”}”(hhh]”hí)�”}”(hŒfake input character”h]”hŒfake input character”…”�”}”(hj–Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M»hj“Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjeKh²hh³j~Kh´M»ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j®Lj¯j®Lj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXZ**Parameters** ``struct tty_struct *tty`` tty to fake input into ``u8 __user *p`` pointer to character **Description** Fake input to a tty device. Does the necessary locking and input management. FIXME: does not honour flow control ?? Locking: * Called functions take tty_ldiscs_lock * current->signal->tty check is safe without locks”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj¸Lh]”hŒ Parameters”…”�”}”(hjºLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¶Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¿hj²LubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ2``struct tty_struct *tty`` tty to fake input into ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj×Lh]”hŒstruct tty_struct *tty”…”�”}”(hjÙLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÕLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¼hjÑLubjû)�”}”(hhh]”hí)�”}”(hŒtty to fake input into”h]”hŒtty to fake input into”…”�”}”(hjðLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jìLh´M¼hjíLubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÑLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jìLh´M¼hjÎLubjÙ)�”}”(hŒ&``u8 __user *p`` pointer to character ”h]”(jß)�”}”(hŒ``u8 __user *p``”h]”jå)�”}”(hjMh]”hŒ u8 __user *p”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M½hj Mubjû)�”}”(hhh]”hí)�”}”(hŒpointer to character”h]”hŒpointer to character”…”�”}”(hj)Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j%Mh´M½hj&Mubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j%Mh´M½hjÎLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj²Lubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjKMh]”hŒ Description”…”�”}”(hjMMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjIMubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¿hj²Lubhí)�”}”(hŒLFake input to a tty device. Does the necessary locking and input management.”h]”hŒLFake input to a tty device. Does the necessary locking and input management.”…”�”}”(hjaMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M¾hj²Lubhí)�”}”(hŒ&FIXME: does not honour flow control ??”h]”hŒ&FIXME: does not honour flow control ??”…”�”}”(hjpMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÀhj²LubjÔ)�”}”(hhh]”jÙ)�”}”(hŒcLocking: * Called functions take tty_ldiscs_lock * current->signal->tty check is safe without locks”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj†Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÃhj‚Mubjû)�”}”(hhh]”hã)�”}”(hhh]”(hè)�”}”(hŒ%Called functions take tty_ldiscs_lock”h]”hí)�”}”(hj�Mh]”hŒ%Called functions take tty_ldiscs_lock”…”�”}”(hjŸMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j”Mh´MÃhj›Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj˜Mubhè)�”}”(hŒ0current->signal->tty check is safe without locks”h]”hí)�”}”(hj´Mh]”hŒ0current->signal->tty check is safe without locks”…”�”}”(hj¶Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÄhj²Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hçhj˜Mubeh}”(h]”h ]”h"]”h$]”h&]”jzjPuh1hâh³j”Mh´MÃhj•Mubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj‚Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j”Mh´MÃhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj²Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtiocgwinsz (C function)”Œ c.tiocgwinsz”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒCint tiocgwinsz (struct tty_struct *tty, struct winsize __user *arg)”h]”j )�”}”(hŒBint tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjþMh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Màubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjþMh²hh³jNh´MàubjÉ)�”}”(hŒ tiocgwinsz”h]”jÏ)�”}”(hŒ tiocgwinsz”h]”hŒ tiocgwinsz”…”�”}”(hj#Nh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjNubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjþMh²hh³jNh´Màubjè)�”}”(hŒ4(struct tty_struct *tty, struct winsize __user *arg)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj?Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj;Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLNh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj;Nubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj]Nh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjZNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j_NŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j%NsbŒ c.tiocgwinsz”†”asbuh1hhj;Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Nh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj;NubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj‹Nh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj;NubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hj˜Nh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj;Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj7Nubjî)�”}”(hŒstruct winsize __user *arg”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj±Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj­Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Nh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj­Nubh)�”}”(hhh]”jÏ)�”}”(hŒwinsize”h]”hŒwinsize”…”�”}”(hjÏNh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÌNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÑNŒmodname”NŒ classname”Nj0j3)�”}”j6]”jyNŒ c.tiocgwinsz”†”asbuh1hhj­Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíNh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj­NubhŒ__user”…”�”}”(hj­Nh²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿNh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj­NubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj­NubjÏ)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj­Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj7Nubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjþMh²hh³jNh´Màubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjúMh²hh³jNh´Màubah}”(h]”jõMah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jNh´Màhj÷Mh²hubj�)�”}”(hhh]”hí)�”}”(hŒimplement window query ioctl”h]”hŒimplement window query ioctl”…”�”}”(hjDOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MàhjAOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj÷Mh²hh³jNh´Màubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j\Oj¯j\Oj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``struct tty_struct *tty`` tty ``struct winsize __user *arg`` user buffer for result **Description** Copies the kernel idea of the window size into the user buffer. Locking: **tty->winsize_mutex** is taken to ensure the winsize data is consistent.”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjfOh]”hŒ Parameters”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjdOubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mähj`OubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ``struct tty_struct *tty`` tty ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj…Oh]”hŒstruct tty_struct *tty”…”�”}”(hj‡Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjƒOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MáhjOubjû)�”}”(hhh]”hí)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjžOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jšOh´Máhj›Oubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jšOh´Máhj|OubjÙ)�”}”(hŒ6``struct winsize __user *arg`` user buffer for result ”h]”(jß)�”}”(hŒ``struct winsize __user *arg``”h]”jå)�”}”(hj¾Oh]”hŒstruct winsize __user *arg”…”�”}”(hjÀOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj¼Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mâhj¸Oubjû)�”}”(hhh]”hí)�”}”(hŒuser buffer for result”h]”hŒuser buffer for result”…”�”}”(hj×Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÓOh´MâhjÔOubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¸Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÓOh´Mâhj|Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj`Oubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjùOh]”hŒ Description”…”�”}”(hjûOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj÷Oubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mähj`Oubhí)�”}”(hŒ?Copies the kernel idea of the window size into the user buffer.”h]”hŒ?Copies the kernel idea of the window size into the user buffer.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mãhj`Oubhí)�”}”(hŒRLocking: **tty->winsize_mutex** is taken to ensure the winsize data is consistent.”h]”(hŒ Locking: ”…”�”}”(hjPh²hh³Nh´Nubj¾)�”}”(hŒ**tty->winsize_mutex**”h]”hŒtty->winsize_mutex”…”�”}”(hj&Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjPubhŒ3 is taken to ensure the winsize data is consistent.”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Måhj`Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtiocswinsz (C function)”Œ c.tiocswinsz”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒCint tiocswinsz (struct tty_struct *tty, struct winsize __user *arg)”h]”j )�”}”(hŒBint tiocswinsz(struct tty_struct *tty, struct winsize __user *arg)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj_Ph²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj[Ph²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnPh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj[Ph²hh³jmPh´M ubjÉ)�”}”(hŒ tiocswinsz”h]”jÏ)�”}”(hŒ tiocswinsz”h]”hŒ tiocswinsz”…”�”}”(hj€Ph²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj|Pubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj[Ph²hh³jmPh´M ubjè)�”}”(hŒ4(struct tty_struct *tty, struct winsize __user *arg)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjœPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj˜Pubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Ph²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj˜Pubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjºPh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj·Pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j¼PŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,j‚PsbŒ c.tiocswinsz”†”asbuh1hhj˜Pubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚPh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj˜PubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjèPh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj˜PubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjõPh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj˜Pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj”Pubjî)�”}”(hŒstruct winsize __user *arg”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj Qubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj Qubh)�”}”(hhh]”jÏ)�”}”(hŒwinsize”h]”hŒwinsize”…”�”}”(hj,Qh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj)Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j.QŒmodname”NŒ classname”Nj0j3)�”}”j6]”jÖPŒ c.tiocswinsz”†”asbuh1hhj Qubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJQh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj QubhŒ__user”…”�”}”(hj Qh²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Qh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj QubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjjQh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj QubjÏ)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjwQh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj”Pubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj[Ph²hh³jmPh´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjWPh²hh³jmPh´M ubah}”(h]”jRPah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jmPh´M hjTPh²hubj�)�”}”(hhh]”hí)�”}”(hŒimplement window size set ioctl”h]”hŒimplement window size set ioctl”…”�”}”(hj¡Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjžQh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjTPh²hh³jmPh´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j¹Qj¯j¹Qj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXý**Parameters** ``struct tty_struct *tty`` tty side of tty ``struct winsize __user *arg`` user buffer for result **Description** Copies the user idea of the window size to the kernel. Traditionally this is just advisory information but for the Linux console it actually has driver level meaning and triggers a VC resize. Locking: Driver dependent. The default do_resize method takes the tty termios mutex and ctrl.lock. The console takes its own lock then calls into the default method.”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjÃQh]”hŒ Parameters”…”�”}”(hjÅQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjÁQubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj½QubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ+``struct tty_struct *tty`` tty side of tty ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjâQh]”hŒstruct tty_struct *tty”…”�”}”(hjäQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjàQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÜQubjû)�”}”(hhh]”hí)�”}”(hŒtty side of tty”h]”hŒtty side of tty”…”�”}”(hjûQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j÷Qh´M hjøQubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÜQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j÷Qh´M hjÙQubjÙ)�”}”(hŒ6``struct winsize __user *arg`` user buffer for result ”h]”(jß)�”}”(hŒ``struct winsize __user *arg``”h]”jå)�”}”(hjRh]”hŒstruct winsize __user *arg”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjRubjû)�”}”(hhh]”hí)�”}”(hŒuser buffer for result”h]”hŒuser buffer for result”…”�”}”(hj4Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j0Rh´M hj1Rubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j0Rh´M hjÙQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj½Qubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjVRh]”hŒ Description”…”�”}”(hjXRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjTRubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj½Qubhí)�”}”(hŒ¿Copies the user idea of the window size to the kernel. Traditionally this is just advisory information but for the Linux console it actually has driver level meaning and triggers a VC resize.”h]”hŒ¿Copies the user idea of the window size to the kernel. Traditionally this is just advisory information but for the Linux console it actually has driver level meaning and triggers a VC resize.”…”�”}”(hjlRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj½QubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ¥Locking: Driver dependent. The default do_resize method takes the tty termios mutex and ctrl.lock. The console takes its own lock then calls into the default method.”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hj‚Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj~Rubjû)�”}”(hhh]”hí)�”}”(hŒœDriver dependent. The default do_resize method takes the tty termios mutex and ctrl.lock. The console takes its own lock then calls into the default method.”h]”hŒœDriver dependent. The default do_resize method takes the tty termios mutex and ctrl.lock. The console takes its own lock then calls into the default method.”…”�”}”(hj”Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj‘Rubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj~Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j�Rh´M hj{Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj½Qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtioccons (C function)”Œ c.tioccons”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ int tioccons (struct file *file)”h]”j )�”}”(hŒint tioccons(struct file *file)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjÕRh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÑRh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M, ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäRh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÑRh²hh³jãRh´M, ubjÉ)�”}”(hŒtioccons”h]”jÏ)�”}”(hŒtioccons”h]”hŒtioccons”…”�”}”(hjöRh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjòRubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjÑRh²hh³jãRh´M, ubjè)�”}”(hŒ(struct file *file)”h]”jî)�”}”(hŒstruct file *file”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjSubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjSubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj0Sh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj-Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j2SŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jøRsbŒ c.tioccons”†”asbuh1hhjSubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPSh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjSubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj^Sh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjSubjÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjkSh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj Subah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjÑRh²hh³jãRh´M, ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjÍRh²hh³jãRh´M, ubah}”(h]”jÈRah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jãRh´M, hjÊRh²hubj�)�”}”(hhh]”hí)�”}”(hŒ#allow admin to move logical console”h]”hŒ#allow admin to move logical console”…”�”}”(hj•Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M, hj’Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÊRh²hh³jãRh´M, ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j­Sj¯j­Sj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒÒ**Parameters** ``struct file *file`` the file to become console **Description** Allow the administrator to move the redirected console device. Locking: uses redirect_lock to guard the redirect information”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj·Sh]”hŒ Parameters”…”�”}”(hj¹Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjµSubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M0 hj±SubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ1``struct file *file`` the file to become console ”h]”(jß)�”}”(hŒ``struct file *file``”h]”jå)�”}”(hjÖSh]”hŒstruct file *file”…”�”}”(hjØSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÔSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M- hjÐSubjû)�”}”(hhh]”hí)�”}”(hŒthe file to become console”h]”hŒthe file to become console”…”�”}”(hjïSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jëSh´M- hjìSubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÐSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jëSh´M- hjÍSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj±Subhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjTh]”hŒ Description”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M/ hj±Subhí)�”}”(hŒ>Allow the administrator to move the redirected console device.”h]”hŒ>Allow the administrator to move the redirected console device.”…”�”}”(hj'Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M. hj±Subhí)�”}”(hŒ=Locking: uses redirect_lock to guard the redirect information”h]”hŒ=Locking: uses redirect_lock to guard the redirect information”…”�”}”(hj6Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M0 hj±Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtiocsetd (C function)”Œ c.tiocsetd”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ4int tiocsetd (struct tty_struct *tty, int __user *p)”h]”j )�”}”(hŒ3int tiocsetd(struct tty_struct *tty, int __user *p)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjeTh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjaTh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MT ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtTh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjaTh²hh³jsTh´MT ubjÉ)�”}”(hŒtiocsetd”h]”jÏ)�”}”(hŒtiocsetd”h]”hŒtiocsetd”…”�”}”(hj†Th²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj‚Tubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjaTh²hh³jsTh´MT ubjè)�”}”(hŒ'(struct tty_struct *tty, int __user *p)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj¢Th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjžTubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Th²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjžTubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hjÀTh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj½Tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”jÂTŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jˆTsbŒ c.tiocsetd”†”asbuh1hhjžTubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàTh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjžTubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjîTh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjžTubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjûTh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjžTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjšTubjî)�”}”(hŒ int __user *p”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjUubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Uh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjUubhŒ__user”…”�”}”(hjUh²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Uh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjUubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjBUh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjUubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hjOUh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjšTubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjaTh²hh³jsTh´MT ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj]Th²hh³jsTh´MT ubah}”(h]”jXTah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jsTh´MT hjZTh²hubj�)�”}”(hhh]”hí)�”}”(hŒset line discipline”h]”hŒset line discipline”…”�”}”(hjxUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MT hjuUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjZTh²hh³jsTh´MT ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j�Uj¯j�Uj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hŒä**Parameters** ``struct tty_struct *tty`` tty device ``int __user *p`` pointer to user data **Description** Set the line discipline according to user request. Locking: see tty_set_ldisc(), this function is just a helper”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjšUh]”hŒ Parameters”…”�”}”(hjœUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj˜Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MX hj”UubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj¹Uh]”hŒstruct tty_struct *tty”…”�”}”(hj»Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj·Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MU hj³Uubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjÒUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÎUh´MU hjÏUubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj³Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÎUh´MU hj°UubjÙ)�”}”(hŒ'``int __user *p`` pointer to user data ”h]”(jß)�”}”(hŒ``int __user *p``”h]”jå)�”}”(hjòUh]”hŒ int __user *p”…”�”}”(hjôUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjðUubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MV hjìUubjû)�”}”(hhh]”hí)�”}”(hŒpointer to user data”h]”hŒpointer to user data”…”�”}”(hj Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jVh´MV hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjìUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jVh´MV hj°Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj”Uubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hj-Vh]”hŒ Description”…”�”}”(hj/Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj+Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MX hj”Uubhí)�”}”(hŒ2Set the line discipline according to user request.”h]”hŒ2Set the line discipline according to user request.”…”�”}”(hjCVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MW hj”Uubhí)�”}”(hŒWh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj,WubhŒ__user”…”�”}”(hj,Wh²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPWh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj,WubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj^Wh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj,WubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hjkWh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj,Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj¶Vubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj}Vh²hh³j�Vh´Mj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjyVh²hh³j�Vh´Mj ubah}”(h]”jtVah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j�Vh´Mj hjvVh²hubj�)�”}”(hhh]”hí)�”}”(hŒget line discipline”h]”hŒget line discipline”…”�”}”(hj”Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mj hj‘Wh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjvVh²hh³j�Vh´Mj ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®j¬Wj¯j¬Wj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``struct tty_struct *tty`` tty device ``int __user *p`` pointer to user data **Description** Retrieves the line discipline id directly from the ldisc. Locking: waits for ldisc reference (in case the line discipline is changing or the **tty** is being hungup)”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj¶Wh]”hŒ Parameters”…”�”}”(hj¸Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj´Wubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mn hj°WubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjÕWh]”hŒstruct tty_struct *tty”…”�”}”(hj×Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjÓWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mk hjÏWubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hjîWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jêWh´Mk hjëWubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÏWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jêWh´Mk hjÌWubjÙ)�”}”(hŒ'``int __user *p`` pointer to user data ”h]”(jß)�”}”(hŒ``int __user *p``”h]”jå)�”}”(hjXh]”hŒ int __user *p”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Ml hjXubjû)�”}”(hhh]”hí)�”}”(hŒpointer to user data”h]”hŒpointer to user data”…”�”}”(hj'Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j#Xh´Ml hj$Xubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j#Xh´Ml hjÌWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhj°Wubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjIXh]”hŒ Description”…”�”}”(hjKXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjGXubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mn hj°Wubhí)�”}”(hŒ9Retrieves the line discipline id directly from the ldisc.”h]”hŒ9Retrieves the line discipline id directly from the ldisc.”…”�”}”(hj_Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mm hj°Wubhí)�”}”(hŒkLocking: waits for ldisc reference (in case the line discipline is changing or the **tty** is being hungup)”h]”(hŒSLocking: waits for ldisc reference (in case the line discipline is changing or the ”…”�”}”(hjnXh²hh³Nh´Nubj¾)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hjvXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjnXubhŒ is being hungup)”…”�”}”(hjnXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mo hj°Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œsend_break (C function)”Œ c.send_break”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒQint send_break (struct file *file, struct tty_struct *tty, unsigned int duration)”h]”j )�”}”(hŒPint send_break(struct file *file, struct tty_struct *tty, unsigned int duration)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj¯Xh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj«Xh²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M� ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Xh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj«Xh²hh³j½Xh´M� ubjÉ)�”}”(hŒ send_break”h]”jÏ)�”}”(hŒ send_break”h]”hŒ send_break”…”�”}”(hjÐXh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÌXubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj«Xh²hh³j½Xh´M� ubjè)�”}”(hŒB(struct file *file, struct tty_struct *tty, unsigned int duration)”h]”(jî)�”}”(hŒstruct file *file”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjìXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjèXubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùXh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjèXubh)�”}”(hhh]”jÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j YŒmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jÒXsbŒ c.send_break”†”asbuh1hhjèXubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Yh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjèXubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj8Yh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjèXubjÏ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjEYh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjèXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjäXubjî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj^Yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjZYubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkYh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjZYubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj|Yh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjyYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j~YŒmodname”NŒ classname”Nj0j3)�”}”j6]”j&YŒ c.send_break”†”asbuh1hhjZYubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšYh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjZYubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj¨Yh²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjZYubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjµYh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjZYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjäXubjî)�”}”(hŒunsigned int duration”h]”(j¦)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÎYh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÊYubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜYh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÊYubj¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjêYh²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÊYubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøYh²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÊYubjÏ)�”}”(hŒduration”h]”hŒduration”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÊYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjäXubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj«Xh²hh³j½Xh´M� ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj§Xh²hh³j½Xh´M� ubah}”(h]”j¢Xah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j½Xh´M� hj¤Xh²hubj�)�”}”(hhh]”hí)�”}”(hŒperformed time break”h]”hŒperformed time break”…”�”}”(hj0Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M� hj-Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj¤Xh²hh³j½Xh´M� ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jHZj¯jHZj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX3**Parameters** ``struct file *file`` file object ``struct tty_struct *tty`` device to break on ``unsigned int duration`` timeout in mS **Description** Perform a timed break on hardware that lacks its own driver level timed break functionality. Locking: **tty->atomic_write_lock** serializes”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjRZh]”hŒ Parameters”…”�”}”(hjTZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjPZubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M… hjLZubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ"``struct file *file`` file object ”h]”(jß)�”}”(hŒ``struct file *file``”h]”jå)�”}”(hjqZh]”hŒstruct file *file”…”�”}”(hjsZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjoZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M„ hjkZubjû)�”}”(hhh]”hí)�”}”(hŒ file object”h]”hŒ file object”…”�”}”(hjŠZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j†Zh´M„ hj‡Zubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjkZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j†Zh´M„ hjhZubjÙ)�”}”(hŒ.``struct tty_struct *tty`` device to break on ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjªZh]”hŒstruct tty_struct *tty”…”�”}”(hj¬Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj¨Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‚ hj¤Zubjû)�”}”(hhh]”hí)�”}”(hŒdevice to break on”h]”hŒdevice to break on”…”�”}”(hjÃZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j¿Zh´M‚ hjÀZubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¤Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j¿Zh´M‚ hjhZubjÙ)�”}”(hŒ(``unsigned int duration`` timeout in mS ”h]”(jß)�”}”(hŒ``unsigned int duration``”h]”jå)�”}”(hjãZh]”hŒunsigned int duration”…”�”}”(hjåZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjáZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mƒ hjÝZubjû)�”}”(hhh]”hí)�”}”(hŒ timeout in mS”h]”hŒ timeout in mS”…”�”}”(hjüZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jøZh´Mƒ hjùZubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÝZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jøZh´Mƒ hjhZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjLZubhí)�”}”(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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M… hjLZubhí)�”}”(hŒ\Perform a timed break on hardware that lacks its own driver level timed break functionality.”h]”hŒ\Perform a timed break on hardware that lacks its own driver level timed break functionality.”…”�”}”(hj4[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M… hjLZubjÔ)�”}”(hhh]”jÙ)�”}”(hŒ.Locking: **tty->atomic_write_lock** serializes”h]”(jß)�”}”(hŒLocking:”h]”hŒLocking:”…”�”}”(hjJ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mˆ hjF[ubjû)�”}”(hhh]”hí)�”}”(hŒ%**tty->atomic_write_lock** serializes”h]”(j¾)�”}”(hŒ**tty->atomic_write_lock**”h]”hŒtty->atomic_write_lock”…”�”}”(hj`[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj\[ubhŒ serializes”…”�”}”(hj\[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M‰ hjY[ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjF[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jX[h´Mˆ hjC[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjLZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_tiocmget (C function)”Œc.tty_tiocmget”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒ8int tty_tiocmget (struct tty_struct *tty, int __user *p)”h]”j )�”}”(hŒ7int tty_tiocmget(struct tty_struct *tty, int __user *p)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj«[h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj§[h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MË ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº[h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj§[h²hh³j¹[h´MË ubjÉ)�”}”(hŒ tty_tiocmget”h]”jÏ)�”}”(hŒ tty_tiocmget”h]”hŒ tty_tiocmget”…”�”}”(hjÌ[h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÈ[ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj§[h²hh³j¹[h´MË ubjè)�”}”(hŒ'(struct tty_struct *tty, int __user *p)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hjè[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjä[ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ[h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjä[ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j\Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jÎ[sbŒc.tty_tiocmget”†”asbuh1hhjä[ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&\h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjä[ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj4\h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjä[ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjA\h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjä[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjà[ubjî)�”}”(hŒ int __user *p”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjZ\h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjV\ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh\h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjV\ubhŒ__user”…”�”}”(hjV\h²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz\h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjV\ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjˆ\h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjV\ubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hj•\h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjV\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjà[ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj§[h²hh³j¹[h´MË ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj£[h²hh³j¹[h´MË ubah}”(h]”jž[ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³j¹[h´MË hj [h²hubj�)�”}”(hhh]”hí)�”}”(hŒget modem status”h]”hŒget modem status”…”�”}”(hj¾\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MË hj»\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj [h²hh³j¹[h´MË ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jÖ\j¯jÖ\j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX **Parameters** ``struct tty_struct *tty`` tty device ``int __user *p`` pointer to result **Description** Obtain the modem status bits from the tty driver if the feature is supported. Return -``ENOTTY`` if it is not available. Locking: none (up to the driver)”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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÏ hjÚ\ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hjÿ\h]”hŒstruct tty_struct *tty”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjý\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÌ hjù\ubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j]h´MÌ hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjù\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j]h´MÌ hjö\ubjÙ)�”}”(hŒ$``int __user *p`` pointer to result ”h]”(jß)�”}”(hŒ``int __user *p``”h]”jå)�”}”(hj8]h]”hŒ int __user *p”…”�”}”(hj:]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj6]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÍ hj2]ubjû)�”}”(hhh]”hí)�”}”(hŒpointer to result”h]”hŒpointer to result”…”�”}”(hjQ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jM]h´MÍ hjN]ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj2]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jM]h´MÍ hjö\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÚ\ubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjs]h]”hŒ Description”…”�”}”(hju]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjq]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÏ hjÚ\ubhí)�”}”(hŒxObtain the modem status bits from the tty driver if the feature is supported. Return -``ENOTTY`` if it is not available.”h]”(hŒVObtain the modem status bits from the tty driver if the feature is supported. Return -”…”�”}”(hj‰]h²hh³Nh´Nubjå)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hj‘]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj‰]ubhŒ if it is not available.”…”�”}”(hj‰]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÎ hjÚ\ubhí)�”}”(hŒ Locking: none (up to the driver)”h]”hŒ Locking: none (up to the driver)”…”�”}”(hjª]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´MÑ hjÚ\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œtty_tiocmset (C function)”Œc.tty_tiocmset”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒOint tty_tiocmset (struct tty_struct *tty, unsigned int cmd, unsigned __user *p)”h]”j )�”}”(hŒNint tty_tiocmset(struct tty_struct *tty, unsigned int cmd, unsigned __user *p)”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hjÙ]h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÕ]h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mà ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè]h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÕ]h²hh³jç]h´Mà ubjÉ)�”}”(hŒ tty_tiocmset”h]”jÏ)�”}”(hŒ tty_tiocmset”h]”hŒ tty_tiocmset”…”�”}”(hjú]h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjö]ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhjÕ]h²hh³jç]h´Mà ubjè)�”}”(hŒ>(struct tty_struct *tty, unsigned int cmd, unsigned __user *p)”h]”(jî)�”}”(hŒstruct tty_struct *tty”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj^ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj^ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj4^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj1^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j6^Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,jü]sbŒc.tty_tiocmset”†”asbuh1hhj^ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj^ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjb^h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj^ubjÏ)�”}”(hŒtty”h]”hŒtty”…”�”}”(hjo^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj^ubjî)�”}”(hŒunsigned int cmd”h]”(j¦)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjˆ^h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj„^ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj„^ubj¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj¤^h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hj„^ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj„^ubjÏ)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjÀ^h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj„^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj^ubjî)�”}”(hŒunsigned __user *p”h]”(j¦)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÙ^h²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjÕ^ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÕ^ubhŒ__user”…”�”}”(hjÕ^h²hh³Nh´Nubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù^h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjÕ^ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjÕ^ubjÏ)�”}”(hjYh]”hŒp”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjÕ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhj^ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhjÕ]h²hh³jç]h´Mà ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hjÑ]h²hh³jç]h´Mà ubah}”(h]”jÌ]ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jç]h´Mà hjÎ]h²hubj�)�”}”(hhh]”hí)�”}”(hŒset modem status”h]”hŒset modem status”…”�”}”(hj=_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mà hj:_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÎ]h²hh³jç]h´Mà ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jU_j¯jU_j°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hXU**Parameters** ``struct tty_struct *tty`` tty device ``unsigned int cmd`` command - clear bits, set bits or set all ``unsigned __user *p`` pointer to desired bits **Description** Set the modem status bits from the tty driver if the feature is supported. Return -``ENOTTY`` if it is not available. Locking: none (up to the driver)”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hj__h]”hŒ Parameters”…”�”}”(hja_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj]_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mä hjY_ubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒ&``struct tty_struct *tty`` tty device ”h]”(jß)�”}”(hŒ``struct tty_struct *tty``”h]”jå)�”}”(hj~_h]”hŒstruct tty_struct *tty”…”�”}”(hj€_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj|_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Má hjx_ubjû)�”}”(hhh]”hí)�”}”(hŒ tty device”h]”hŒ tty device”…”�”}”(hj—_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j“_h´Má hj”_ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjx_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j“_h´Má hju_ubjÙ)�”}”(hŒ?``unsigned int cmd`` command - clear bits, set bits or set all ”h]”(jß)�”}”(hŒ``unsigned int cmd``”h]”jå)�”}”(hj·_h]”hŒunsigned int cmd”…”�”}”(hj¹_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjµ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mâ hj±_ubjû)�”}”(hhh]”hí)�”}”(hŒ)command - clear bits, set bits or set all”h]”hŒ)command - clear bits, set bits or set all”…”�”}”(hjÐ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jÌ_h´Mâ hjÍ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj±_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jÌ_h´Mâ hju_ubjÙ)�”}”(hŒ/``unsigned __user *p`` pointer to desired bits ”h]”(jß)�”}”(hŒ``unsigned __user *p``”h]”jå)�”}”(hjð_h]”hŒunsigned __user *p”…”�”}”(hjò_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjî_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mã hjê_ubjû)�”}”(hhh]”hí)�”}”(hŒpointer to desired bits”h]”hŒpointer to desired bits”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³j`h´Mã hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjê_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³j`h´Mã hju_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjY_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³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Må hjY_ubhí)�”}”(hŒuSet the modem status bits from the tty driver if the feature is supported. Return -``ENOTTY`` if it is not available.”h]”(hŒSSet the modem status bits from the tty driver if the feature is supported. Return -”…”�”}”(hjA`h²hh³Nh´Nubjå)�”}”(hŒ ``ENOTTY``”h]”hŒENOTTY”…”�”}”(hjI`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjA`ubhŒ if it is not available.”…”�”}”(hjA`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mä hjY_ubhí)�”}”(hŒ Locking: none (up to the driver)”h]”hŒ Locking: none (up to the driver)”…”�”}”(hjb`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´Mç hjY_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubj„)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j�Œalloc_tty_struct (C function)”Œc.alloc_tty_struct”hNt”auh1jƒhj:h²hh³Nh´Nubj•)�”}”(hhh]”(jš)�”}”(hŒIstruct tty_struct * alloc_tty_struct (struct tty_driver *driver, int idx)”h]”j )�”}”(hŒGstruct tty_struct *alloc_tty_struct(struct tty_driver *driver, int idx)”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj‘`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhj�`h²hh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ`h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�`h²hh³jž`h´M ubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_struct”h]”hŒ tty_struct”…”�”}”(hj°`h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj­`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j²`Œmodname”NŒ classname”Nj0j3)�”}”j6]”j9)�”}”j,Œalloc_tty_struct”sbŒc.alloc_tty_struct”†”asbuh1hhj�`h²hh³jž`h´M ubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ`h²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hj�`h²hh³jž`h´M ubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjß`h²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhj�`h²hh³jž`h´M ubjÉ)�”}”(hŒalloc_tty_struct”h]”jÏ)�”}”(hjÎ`h]”hŒalloc_tty_struct”…”�”}”(hjð`h²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjì`ubah}”(h]”h ]”(jâjãeh"]”h$]”h&]”hÅhÆuh1jÈhj�`h²hh³jž`h´M ubjè)�”}”(hŒ$(struct tty_driver *driver, int idx)”h]”(jî)�”}”(hŒstruct tty_driver *driver”h]”(jô)�”}”(hj÷h]”hŒstruct”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jóhjaubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjaubh)�”}”(hhh]”jÏ)�”}”(hŒ tty_driver”h]”hŒ tty_driver”…”�”}”(hj)ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhj&aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j*Œreftype”j,Œ reftarget”j+aŒmodname”NŒ classname”Nj0j3)�”}”j6]”jÌ`Œc.alloc_tty_struct”†”asbuh1hhjaubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGah²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjaubjM)�”}”(hjPh]”hŒ*”…”�”}”(hjUah²hh³Nh´Nubah}”(h]”h ]”jYah"]”h$]”h&]”uh1jLhjaubjÏ)�”}”(hŒdriver”h]”hŒdriver”…”�”}”(hjbah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjaubjî)�”}”(hŒint idx”h]”(j¦)�”}”(hŒint”h]”hŒint”…”�”}”(hj{ah²hh³Nh´Nubah}”(h]”h ]”j²ah"]”h$]”h&]”uh1j¥hjwaubj¸)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ah²hh³Nh´Nubah}”(h]”h ]”jÄah"]”h$]”h&]”uh1j·hjwaubjÏ)�”}”(hŒidx”h]”hŒidx”…”�”}”(hj—ah²hh³Nh´Nubah}”(h]”h ]”jÛah"]”h$]”h&]”uh1jÎhjwaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1jíhjaubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jçhj�`h²hh³jž`h´M ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~ˆuh1jŸjj€hj‰`h²hh³jž`h´M ubah}”(h]”j„`ah ]”(j„j…eh"]”h$]”h&]”j‰ˆjŠ)j‹huh1j™h³jž`h´M hj†`h²hubj�)�”}”(hhh]”hí)�”}”(hŒallocate a new tty”h]”hŒallocate a new tty”…”�”}”(hjÁah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj¾ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj†`h²hh³jž`h´M ubeh}”(h]”h ]”(j*Œfunction”eh"]”h$]”h&]”j­j*j®jÙaj¯jÙaj°‰j±‰j²‰uh1j”h²hhj:h³Nh´Nubj´)�”}”(hX**Parameters** ``struct tty_driver *driver`` driver which will handle the returned tty ``int idx`` minor of the tty **Description** This subroutine allocates and initializes a tty structure. Locking: none - **tty** in question is not exposed at this point”h]”(hí)�”}”(hŒ**Parameters**”h]”j¾)�”}”(hjãah]”hŒ Parameters”…”�”}”(hjåah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjáaubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÝaubjÔ)�”}”(hhh]”(jÙ)�”}”(hŒH``struct tty_driver *driver`` driver which will handle the returned tty ”h]”(jß)�”}”(hŒ``struct tty_driver *driver``”h]”jå)�”}”(hjbh]”hŒstruct tty_driver *driver”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjüaubjû)�”}”(hhh]”hí)�”}”(hŒ)driver which will handle the returned tty”h]”hŒ)driver which will handle the returned tty”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jbh´M hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjüaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jbh´M hjùaubjÙ)�”}”(hŒ``int idx`` minor of the tty ”h]”(jß)�”}”(hŒ ``int idx``”h]”jå)�”}”(hj;bh]”hŒint idx”…”�”}”(hj=bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jähj9bubah}”(h]”h ]”h"]”h$]”h&]”uh1jÞh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hj5bubjû)�”}”(hhh]”hí)�”}”(hŒminor of the tty”h]”hŒminor of the tty”…”�”}”(hjTbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³jPbh´M hjQbubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj5bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jØh³jPbh´M hjùaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÓhjÝaubhí)�”}”(hŒ**Description**”h]”j¾)�”}”(hjvbh]”hŒ Description”…”�”}”(hjxbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjtbubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÝaubhí)�”}”(hŒ:This subroutine allocates and initializes a tty structure.”h]”hŒ:This subroutine allocates and initializes a tty structure.”…”�”}”(hjŒbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÝaubhí)�”}”(hŒ@Locking: none - **tty** in question is not exposed at this point”h]”(hŒLocking: none - ”…”�”}”(hj›bh²hh³Nh´Nubj¾)�”}”(hŒ**tty**”h]”hŒtty”…”�”}”(hj£bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj›bubhŒ) in question is not exposed at this point”…”�”}”(hj›bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hìh³Œa/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_internals:30: ./drivers/tty/tty_io.c”h´M hjÝaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j³hj:h²hh³Nh´Nubeh}”(h]”jFah ]”h"]”Œinternal functions”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kubeh}”(h]”Œ tty-internals”ah ]”h"]”Œ tty internals”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õbŒ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”}”Œrefids”}”Œnameids”}”(jÏbjÌbj`j[j‡jj-j$jÇbjFuŒ nametypes”}”(jÏb‰j`‰j‡‰j-‰jÇb‰uh}”(jÌbhÊj[hßjjcj’j›j}j‚jìjñj$j–j³j¸jû j jê jï jFj:jWj\jçjìjhjmj†j‹jBjGjFjKjnjsjjj†j‹jýj j"j"jª$j¯$jY'j^'je*jj*j°,jµ,jé.jî.j²0j·0j[3j`3jî4jó4j¸6j½6jó8jø8j;j ;j‡=jŒ=j @j@jCj#CjFj"Fj2Ij7IjcKjhKjõMjúMjRPjWPjÈRjÍRjXTj]TjtVjyVj¢Xj§Xjž[j£[jÌ]jÑ]j„`j‰`hühójjj@j7uŒ 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”“”}”jcKs…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.