sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/driver-api/tty/tty_structmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/driver-api/tty/tty_structmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/driver-api/tty/tty_structmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/driver-api/tty/tty_structmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/driver-api/tty/tty_structmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/driver-api/tty/tty_structmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct.rsthKubhsection)}(hhh](htitle)}(h TTY Structh]h TTY Struct}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(hhh]h bullet_list)}(hhh](h list_item)}(hhh]h paragraph)}(hhh]h reference)}(hhh]hInitialization}(hhhhhNhNubah}(h]id1ah ]h"]h$]h&]refidinitializationuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hName}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidnameuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hReference counting}(hj#hhhNhNubah}(h]id3ah ]h"]h$]h&]refidreference-countinguh1hhj ubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hInstall}(hjEhhhNhNubah}(h]id4ah ]h"]h$]h&]refidinstalluh1hhjBubah}(h]h ]h"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]h Read & Write}(hjghhhNhNubah}(h]id5ah ]h"]h$]h&]refid read-writeuh1hhjdubah}(h]h ]h"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]h Start & Stop}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refid start-stopuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hWakeup}(hjhhhNhNubah}(h]id7ah ]h"]h$]h&]refidwakeupuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hHangup}(hjhhhNhNubah}(h]id8ah ]h"]h$]h&]refidhangupuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hMisc}(hjhhhNhNubah}(h]id9ah ]h"]h$]h&]refidmiscuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hTTY Struct Flags}(hjhhhNhNubah}(h]id10ah ]h"]h$]h&]refidtty-struct-flagsuh1hhjubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hTTY Struct Reference}(hj3hhhNhNubah}(h]id11ah ]h"]h$]h&]refidtty-struct-referenceuh1hhj0ubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhNhNubah}(h]contentsah ](contentslocaleh"]contentsah$]h&]uh1hhhhKhhhhubh)}(hXstruct tty_struct is allocated by the TTY layer upon the first open of the TTY device and released after the last close. The TTY layer passes this structure to most of struct tty_operation's hooks. Members of tty_struct are documented in `TTY Struct Reference`_ at the bottom.h](hstruct tty_struct is allocated by the TTY layer upon the first open of the TTY device and released after the last close. The TTY layer passes this structure to most of struct tty_operation’s hooks. Members of tty_struct are documented in }(hj_hhhNhNubh)}(h`TTY Struct Reference`_h]hTTY Struct Reference}(hjghhhNhNubah}(h]h ]h"]h$]h&]nameTTY Struct ReferencerefidjBuh1hhj_resolvedKubh at the bottom.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hInitializationh]hInitialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]jwhuh1hhjhhhhhKubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singletty_init_termios (C function)c.tty_init_termioshNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h.void tty_init_termios (struct tty_struct *tty)h]hdesc_signature_line)}(h-void tty_init_termios(struct tty_struct *tty)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]ktah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhMubh desc_name)}(htty_init_termiosh]h desc_sig_name)}(htty_init_termiosh]htty_init_termios}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhMubhdesc_parameterlist)}(h(struct tty_struct *tty)h]hdesc_parameter)}(hstruct tty_struct *ttyh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj(modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jB ASTIdentifier)}j=jsbc.tty_init_termiosasbuh1hhjubj)}(h h]h }(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hj_hhhNhNubah}(h]h ]pah"]h$]h&]uh1j]hjubj)}(httyh]htty}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhMubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhMhjhhubh desc_content)}(hhh]h)}(hhelper for termios setuph]hhelper for termios setup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j;functioneh"]h$]h&]domainj;objtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(h**Parameters** ``struct tty_struct *tty`` the tty to set up **Description** Initialise the termios structure for this tty. This runs under the ``tty_mutex`` currently so we can be relaxed about ordering.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMhjubhdefinition_list)}(hhh]hdefinition_list_item)}(h-``struct tty_struct *tty`` the tty to set up h](hterm)}(h``struct tty_struct *tty``h]hliteral)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMhjubh definition)}(hhh]h)}(hthe tty to set uph]hthe tty to set up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj2h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMhjubh)}(hInitialise the termios structure for this tty. This runs under the ``tty_mutex`` currently so we can be relaxed about ordering.h](hCInitialise the termios structure for this tty. This runs under the }(hjHhhhNhNubj)}(h ``tty_mutex``h]h tty_mutex}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh/ currently so we can be relaxed about ordering.}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:17: ./drivers/tty/tty_io.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]hah ]h"]initializationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hNameh]hName}(hjzhhhNhNubah}(h]h ]h"]h$]h&]jwj uh1hhjwhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_name (C function) c.tty_namehNtauh1jhjwhhhNhNubj)}(hhh](j)}(h4const char * tty_name (const struct tty_struct *tty)h]j)}(h2const char *tty_name(const struct tty_struct *tty)h](j)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hcharh]hchar}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjhhhjhKubj)}(htty_nameh]j)}(htty_nameh]htty_name}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubj)}(h(const struct tty_struct *tty)h]j)}(hconst struct tty_struct *ttyh](j)}(hjh]hconst}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjBmodnameN classnameNjAjD)}jG]jJ)}j=jsb c.tty_nameasbuh1hhjubj)}(h h]h }(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj^)}(hjah]h*}(hjnhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjubj)}(httyh]htty}(hj{hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hreturn tty namingh]hreturn tty naming}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjwhNhNubj)}(h**Parameters** ``const struct tty_struct *tty`` tty structure **Description** Convert a tty structure into a name. The name reflects the kernel naming policy and if udev is in use may not reflect user space Locking: noneh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjubj)}(hhh]j)}(h/``const struct tty_struct *tty`` tty structure h](j)}(h ``const struct tty_struct *tty``h]j)}(hjh]hconst struct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjubj )}(hhh]h)}(h tty structureh]h tty structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjubh)}(hConvert a tty structure into a name. The name reflects the kernel naming policy and if udev is in use may not reflect user spaceh]hConvert a tty structure into a name. The name reflects the kernel naming policy and if udev is in use may not reflect user space}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjubh)}(h Locking: noneh]h Locking: none}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:23: ./drivers/tty/tty_io.chKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubeh}(h]jah ]h"]nameah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hReference countingh]hReference counting}(hjfhhhNhNubah}(h]h ]h"]h$]h&]jwj,uh1hhjchhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_kref_get (C function)c.tty_kref_gethNtauh1jhjchhhNhNubj)}(hhh](j)}(h9struct tty_struct * tty_kref_get (struct tty_struct *tty)h]j)}(h7struct tty_struct *tty_kref_get(struct tty_struct *tty)h](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjmodnameN classnameNjAjD)}jG]jJ)}j= tty_kref_getsbc.tty_kref_getasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjhhhjhMubj)}(h tty_kref_geth]j)}(hjh]h tty_kref_get}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj'modnameN classnameNjAjD)}jG]jc.tty_kref_getasbuh1hhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj^)}(hjah]h*}(hjQhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjubj)}(httyh]htty}(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hget a tty referenceh]hget a tty reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjchNhNubj)}(h**Parameters** ``struct tty_struct *tty`` tty device **Return** a new reference to a tty object **Description** Locking: The caller must hold sufficient locks/counts to ensure that their existing reference cannot go away.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubj)}(hhh]j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubj )}(hhh]h)}(h tty deviceh]h tty device}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubh)}(ha new reference to a tty objecth]ha new reference to a tty object}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubh)}(h**Description**h]j)}(hj+h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubh)}(hmLocking: The caller must hold sufficient locks/counts to ensure that their existing reference cannot go away.h]hmLocking: The caller must hold sufficient locks/counts to ensure that their existing reference cannot go away.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:29: ./include/linux/tty.hhMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjchhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_kref_put (C function)c.tty_kref_puthNtauh1jhjchhhNhNubj)}(hhh](j)}(h*void tty_kref_put (struct tty_struct *tty)h]j)}(h)void tty_kref_put(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlhhhj~hMubj)}(h tty_kref_puth]j)}(h tty_kref_puth]h tty_kref_put}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjlhhhj~hMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjmodnameN classnameNjAjD)}jG]jJ)}j=jsbc.tty_kref_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjlhhhj~hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhhj~hMubah}(h]jcah ](jjeh"]h$]h&]jj)jhuh1jhj~hMhjehhubj)}(hhh]h)}(hrelease a tty krefh]hrelease a tty kref}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhj- hhubah}(h]h ]h"]h$]h&]uh1jhjehhhj~hMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjH jjH jjjuh1jhhhjchNhNubj)}(h**Parameters** ``struct tty_struct *tty`` tty device **Description** Release a reference to the **tty** device and if need be let the kref layer destruct the object for us.h](h)}(h**Parameters**h]j)}(hjR h]h Parameters}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhjL ubj)}(hhh]j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j)}(hjq h]hstruct tty_struct *tty}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhjk ubj )}(hhh]h)}(h tty deviceh]h tty device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hjk ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjh ubah}(h]h ]h"]h$]h&]uh1jhjL ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhjL ubh)}(hgRelease a reference to the **tty** device and if need be let the kref layer destruct the object for us.h](hRelease a reference to the }(hj hhhNhNubj)}(h**tty**h]htty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhE device and if need be let the kref layer destruct the object for us.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhjL ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjchhhNhNubeh}(h]j2ah ]h"]reference countingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInstallh]hInstall}(hj hhhNhNubah}(h]h ]h"]h$]h&]jwjNuh1hhj hhhhhK$ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!tty_standard_install (C function)c.tty_standard_installhNtauh1jhj hhhNhNubj)}(hhh](j)}(hLint tty_standard_install (struct tty_driver *driver, struct tty_struct *tty)h]j)}(hKint tty_standard_install(struct tty_driver *driver, struct tty_struct *tty)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMubj)}(h h]h }(hj* hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj) hMubj)}(htty_standard_installh]j)}(htty_standard_installh]htty_standard_install}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8 ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj) hMubj)}(h3(struct tty_driver *driver, struct tty_struct *tty)h](j)}(hstruct tty_driver *driverh](j)}(hjh]hstruct}(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT ubj)}(h h]h }(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT ubh)}(hhh]j)}(h tty_driverh]h tty_driver}(hjv hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjx modnameN classnameNjAjD)}jG]jJ)}j=j> sbc.tty_standard_installasbuh1hhjT ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT ubj^)}(hjah]h*}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjT ubj)}(hdriverh]hdriver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjP ubj)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj modnameN classnameNjAjD)}jG]j c.tty_standard_installasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj^)}(hjah]h*}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hj ubj)}(httyh]htty}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjP ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj) hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj) hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj) hMhj hhubj)}(hhh]h)}(husual tty->ops->installh]husual tty->ops->install}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhjH hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj) hMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjc jjc jjjuh1jhhhj hNhNubj)}(h**Parameters** ``struct tty_driver *driver`` the driver for the tty ``struct tty_struct *tty`` the tty **Description** If the **driver** overrides **tty->ops->install**, it still can call this function to perform the standard install operations.h](h)}(h**Parameters**h]j)}(hjm h]h Parameters}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhjg ubj)}(hhh](j)}(h5``struct tty_driver *driver`` the driver for the tty h](j)}(h``struct tty_driver *driver``h]j)}(hj h]hstruct tty_driver *driver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhj ubj )}(hhh]h)}(hthe driver for the ttyh]hthe driver for the tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(h#``struct tty_struct *tty`` the tty h](j)}(h``struct tty_struct *tty``h]j)}(hj h]hstruct tty_struct *tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhj ubj )}(hhh]h)}(hthe ttyh]hthe tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj ubeh}(h]h ]h"]h$]h&]uh1jhjg ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhjg ubh)}(h~If the **driver** overrides **tty->ops->install**, it still can call this function to perform the standard install operations.h](hIf the }(hj hhhNhNubj)}(h **driver**h]hdriver}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh overrides }(hj hhhNhNubj)}(h**tty->ops->install**h]htty->ops->install}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubhM, it still can call this function to perform the standard install operations.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhjg ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]jTah ]h"]installah$]h&]uh1hhhhhhhhK$ubh)}(hhh](h)}(h Read & Writeh]h Read & Write}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]jwjpuh1hhjW hhhhhK*ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_put_char (C function)c.tty_put_charhNtauh1jhjW hhhNhNubj)}(hhh](j)}(h0int tty_put_char (struct tty_struct *tty, u8 ch)h]j)}(h/int tty_put_char(struct tty_struct *tty, u8 ch)h](j)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chM[ ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj} hhhj hM[ ubj)}(h tty_put_charh]j)}(h tty_put_charh]h tty_put_char}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj} hhhj hM[ ubj)}(h(struct tty_struct *tty, u8 ch)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj modnameN classnameNjAjD)}jG]jJ)}j=j sbc.tty_put_charasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj^)}(hjah]h*}(hj hhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hj ubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hu8 chh](h)}(hhh]j)}(hu8h]hu8}(hj3 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0 ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj5 modnameN classnameNjAjD)}jG]j c.tty_put_charasbuh1hhj, ubj)}(h h]h }(hjQ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, ubj)}(hchh]hch}(hj_ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj, ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj} hhhj hM[ ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjy hhhj hM[ ubah}(h]jt ah ](jjeh"]h$]h&]jj)jhuh1jhj hM[ hjv hhubj)}(hhh]h)}(hwrite one character to a ttyh]hwrite one character to a tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMO hj hhubah}(h]h ]h"]h$]h&]uh1jhjv hhhj hM[ ubeh}(h]h ](j;functioneh"]h$]h&]jj;jj jj jjjuh1jhhhjW hNhNubj)}(hXu**Parameters** ``struct tty_struct *tty`` tty ``u8 ch`` character to write **Description** Write one byte to the **tty** using the provided **tty->ops->put_char\(\)** method if present. **Note** the specific put_char operation in the driver layer may go away soon. Don't call it directly, use this method **Return** the number of characters successfully output.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMS hj ubj)}(hhh](j)}(h``struct tty_struct *tty`` tty h](j)}(h``struct tty_struct *tty``h]j)}(hj h]hstruct tty_struct *tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMP hj ubj )}(hhh]h)}(httyh]htty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMP hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hMP hj ubj)}(h``u8 ch`` character to write h](j)}(h ``u8 ch``h]j)}(hjh]hu8 ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMQ hj ubj )}(hhh]h)}(hcharacter to writeh]hcharacter to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMQ hjubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhjhMQ hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj>h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMS hj ubh)}(h^Write one byte to the **tty** using the provided **tty->ops->put_char\(\)** method if present.h](hWrite one byte to the }(hjThhhNhNubj)}(h**tty**h]htty}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh using the provided }(hjThhhNhNubj)}(h**tty->ops->put_char\(\)**h]htty->ops->put_char()}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh method if present.}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMS hj ubh)}(h**Note**h]j)}(hjh]hNote}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMV hj ubh)}(hmthe specific put_char operation in the driver layer may go away soon. Don't call it directly, use this methodh]hothe specific put_char operation in the driver layer may go away soon. Don’t call it directly, use this method}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMV hj ubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMY hj ubh)}(h-the number of characters successfully output.h]h-the number of characters successfully output.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMY hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjW hhhNhNubeh}(h]jvah ]h"] read & writeah$]h&]uh1hhhhhhhhK*ubh)}(hhh](h)}(h Start & Stoph]h Start & Stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]jwjuh1hhjhhhhhK0ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jstop_tty (C function) c.stop_ttyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h&void stop_tty (struct tty_struct *tty)h]j)}(h%void stop_tty(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhjhMubj)}(hstop_ttyh]j)}(hstop_ttyh]hstop_tty}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhjhMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjjmodnameN classnameNjAjD)}jG]jJ)}j=j0sb c.stop_ttyasbuh1hhjFubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjFubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjBubah}(h]h ]h"]h$]h&]hhuh1jhj hhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hpropagate flow controlh]hpropagate flow control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` tty to stop **Description** Perform flow control to the driver. May be called on an already stopped device and will not re-call the :c:type:`tty_driver->stop\(\) ` method. This functionality is used by both the line disciplines for halting incoming flow and by the driver. It may therefore be called from any context, may be under the tty ``atomic_write_lock`` but not always. Locking: flow.lockh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj)}(hhh]j)}(h'``struct tty_struct *tty`` tty to stop h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj )}(hhh]h)}(h tty to stoph]h tty to stop}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj#hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjIh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubh)}(hPerform flow control to the driver. May be called on an already stopped device and will not re-call the :c:type:`tty_driver->stop\(\) ` method.h](hhPerform flow control to the driver. May be called on an already stopped device and will not re-call the }(hj_hhhNhNubh)}(h+:c:type:`tty_driver->stop\(\) `h]j)}(hjih]htty_driver->stop()}(hjkhhhNhNubah}(h]h ](xrefj;c-typeeh"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/tty_struct refdomainj;reftypetype refexplicitrefwarnjAjD)}jG]sb reftarget tty_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhj_ubh method.}(hj_hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubh)}(hThis functionality is used by both the line disciplines for halting incoming flow and by the driver. It may therefore be called from any context, may be under the tty ``atomic_write_lock`` but not always.h](hThis functionality is used by both the line disciplines for halting incoming flow and by the driver. It may therefore be called from any context, may be under the tty }(hjhhhNhNubj)}(h``atomic_write_lock``h]hatomic_write_lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh but not always.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj)}(hhh]j)}(hLocking: flow.lockh](j)}(hLocking:h]hLocking:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj )}(hhh]h)}(h flow.lockh]h flow.lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jstart_tty (C function) c.start_ttyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h'void start_tty (struct tty_struct *tty)h]j)}(h&void start_tty(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hMubj)}(h start_ttyh]j)}(h start_ttyh]h start_tty}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj hMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(h h]h }(hj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjomodnameN classnameNjAjD)}jG]jJ)}j=j5sb c.start_ttyasbuh1hhjKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjKubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjGubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hMhjhhubj)}(hhh]h)}(hpropagate flow controlh]hpropagate flow control}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjhNhNubj)}(hX8**Parameters** ``struct tty_struct *tty`` tty to start **Description** Start a tty that has been stopped if at all possible. If **tty** was previously stopped and is now being started, the :c:type:`tty_driver->start\(\) ` method is invoked and the line discipline woken. Locking: flow.lockh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj)}(hhh]j)}(h(``struct tty_struct *tty`` tty to start h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhj ubj )}(hhh]h)}(h tty to starth]h tty to start}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hMhj)ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj(hMhj ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjNh]h Description}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubh)}(hStart a tty that has been stopped if at all possible. If **tty** was previously stopped and is now being started, the :c:type:`tty_driver->start\(\) ` method is invoked and the line discipline woken.h](h9Start a tty that has been stopped if at all possible. If }(hjdhhhNhNubj)}(h**tty**h]htty}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubh6 was previously stopped and is now being started, the }(hjdhhhNhNubh)}(h,:c:type:`tty_driver->start\(\) `h]j)}(hjh]htty_driver->start()}(hjhhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjj tty_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjdubh1 method is invoked and the line discipline woken.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubj)}(hhh]j)}(hLocking: flow.lockh](j)}(hLocking:h]hLocking:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubj )}(hhh]h)}(h flow.lockh]h flow.lock}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"] start & stopah$]h&]uh1hhhhhhhhK0ubh)}(hhh](h)}(hWakeuph]hWakeup}(hjhhhNhNubah}(h]h ]h"]h$]h&]jwjuh1hhjhhhhhK6ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_wakeup (C function) c.tty_wakeuphNtauh1jhjhhhNhNubj)}(hhh](j)}(h(void tty_wakeup (struct tty_struct *tty)h]j)}(h'void tty_wakeup(struct tty_struct *tty)h](j)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj(hMubj)}(h tty_wakeuph]j)}(h tty_wakeuph]h tty_wakeup}(hj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj(hMubj)}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj)}(h h]h }(hjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjuhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjwmodnameN classnameNjAjD)}jG]jJ)}j=j=sb c.tty_wakeupasbuh1hhjSubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjSubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjOubah}(h]h ]h"]h$]h&]hhuh1jhjhhhj(hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj(hMubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj(hMhjhhubj)}(hhh]h)}(hrequest more datah]hrequest more data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj(hMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct tty_struct *tty`` terminal **Description** Internal and external helper for wakeups of tty. This function informs the line discipline if present that the driver is ready to receive more output data.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhjubj)}(hhh]j)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhjubj )}(hhh]h)}(hterminalh]hterminal}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0hMhj1ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhj0hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjVh]h Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhjubh)}(hInternal and external helper for wakeups of tty. This function informs the line discipline if present that the driver is ready to receive more output data.h]hInternal and external helper for wakeups of tty. This function informs the line discipline if present that the driver is ready to receive more output data.}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]wakeupah$]h&]uh1hhhhhhhhK6ubh)}(hhh](h)}(hHanguph]hHangup}(hjhhhNhNubah}(h]h ]h"]h$]h&]jwjuh1hhjhhhhhKhhhjThMubah}(h]j9ah ](jjeh"]h$]h&]jj)jhuh1jhjThMhj;hhubj)}(hhh]h)}(hprocess vhanguph]hprocess vhangup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj;hhhjThMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct tty_struct *tty`` tty to hangup **Description** The user has asked via system call for the terminal to be hung up. 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*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhj"ubj)}(hhh]j)}(h)``struct tty_struct *tty`` tty to hangup h](j)}(h``struct tty_struct *tty``h]j)}(hjGh]hstruct tty_struct *tty}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjAubj )}(hhh]h)}(h tty to hanguph]h tty to hangup}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMhj]ubah}(h]h ]h"]h$]h&]uh1j hjAubeh}(h]h ]h"]h$]h&]uh1jhj\hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhj"ubh)}(hThe user has asked via system call for the terminal to be hung up. We do this synchronously so that when the syscall returns the process is complete. That guarantee is necessary for security reasons.h]hThe user has asked via system call for the terminal to be hung up. We do this synchronously so that when the syscall returns the process is complete. That guarantee is necessary for security reasons.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_hung_up_p (C function)c.tty_hung_up_phNtauh1jhjhhhNhNubj)}(hhh](j)}(h%int tty_hung_up_p (struct file *filp)h]j)}(h$int tty_hung_up_p(struct file *filp)h](j)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj)}(h tty_hung_up_ph]j)}(h tty_hung_up_ph]h tty_hung_up_p}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhMubj)}(h(struct file *filp)h]j)}(hstruct file *filph](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj$modnameN classnameNjAjD)}jG]jJ)}j=jsbc.tty_hung_up_pasbuh1hhjubj)}(h h]h }(hjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj^)}(hjah]h*}(hjPhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjubj)}(hfilph]hfilp}(hj]hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhMhjhhubj)}(hhh]h)}(hwas tty hung uph]hwas tty hung up}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhjhNhNubj)}(h**Parameters** ``struct file *filp`` file pointer of tty **Return** true if the tty has been subject to a vhangup or a carrier lossh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjubj)}(hhh]j)}(h*``struct file *filp`` file pointer of tty h](j)}(h``struct file *filp``h]j)}(hjh]hstruct file *filp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjubj )}(hhh]h)}(hfile pointer of ttyh]hfile pointer of tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjubh)}(h?true if the tty has been subject to a vhangup or a carrier lossh]h?true if the tty has been subject to a vhangup or a carrier loss}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]hangupah$]h&]uh1hhhhhhhhKint tty_do_resize (struct tty_struct *tty, struct winsize *ws)h]j)}(h=int tty_do_resize(struct tty_struct *tty, struct winsize *ws)h](j)}(hinth]hint}(hj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM ubj)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\hhhjnhM ubj)}(h tty_do_resizeh]j)}(h tty_do_resizeh]h tty_do_resize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj\hhhjnhM ubj)}(h,(struct tty_struct *tty, struct winsize *ws)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetjmodnameN classnameNjAjD)}jG]jJ)}j=jsbc.tty_do_resizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj^)}(hjah]h*}(hjhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct winsize *wsh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j)}(hwinsizeh]hwinsize}(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&] refdomainj;reftypej= reftargetj/modnameN classnameNjAjD)}jG]jc.tty_do_resizeasbuh1hhj ubj)}(h h]h }(hjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj^)}(hjah]h*}(hjYhhhNhNubah}(h]h ]jjah"]h$]h&]uh1j]hj ubj)}(hwsh]hws}(hjfhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhj\hhhjnhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjXhhhjnhM ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1jhjnhM hjUhhubj)}(hhh]h)}(h resize eventh]h resize event}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjUhhhjnhM ubeh}(h]h ](j;functioneh"]h$]h&]jj;jjjjjjjuh1jhhhj6hNhNubj)}(h**Parameters** ``struct tty_struct *tty`` tty being resized ``struct winsize *ws`` new dimensions **Description** Update the termios variables and send the necessary signals to peform a terminal resize correctly.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjubj)}(hhh](j)}(h-``struct tty_struct *tty`` tty being resized h](j)}(h``struct tty_struct *tty``h]j)}(hjh]hstruct tty_struct *tty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjubj )}(hhh]h)}(htty being resizedh]htty being resized}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h&``struct winsize *ws`` new dimensions h](j)}(h``struct winsize *ws``h]j)}(hj h]hstruct winsize *ws}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjubj )}(hhh]h)}(hnew dimensionsh]hnew dimensions}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjEh]h Description}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjubh)}(hbUpdate the termios variables and send the necessary signals to peform a terminal resize correctly.h]hbUpdate the termios variables and send the necessary signals to peform a terminal resize correctly.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj6hhhNhNubeh}(h]jah ]h"]miscah$]h&]uh1hhhhhhhhKBubh)}(hhh](h)}(hTTY Struct Flagsh]hTTY Struct Flags}(hj{hhhNhNubah}(h]h ]h"]h$]h&]jwjuh1hhjxhhhhhKHubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_struct_flags (C enum)c.tty_struct_flagshNtauh1jhjxhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhNubj)}(hhh](j)}(htty_struct_flagsh]j)}(henum tty_struct_flagsh](j)}(henumh]henum}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(htty_struct_flagsh]j)}(hjh]htty_struct_flags}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhjhKhjhhubj)}(hhh]h)}(hTTY Struct Flagsh]hTTY Struct Flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](j;enumeh"]h$]h&]jj;jjjjjjjuh1jhhhjxhjhNubj)}(hX**Constants** ``TTY_THROTTLED`` Driver input is throttled. The ldisc should call :c:member:`tty_driver.unthrottle()` in order to resume reception when it is ready to process more data (at threshold min). ``TTY_IO_ERROR`` If set, causes all subsequent userspace read/write calls on the tty to fail, returning -``EIO``. (May be no ldisc too.) ``TTY_OTHER_CLOSED`` Device is a pty and the other side has closed. ``TTY_EXCLUSIVE`` Exclusive open mode (a single opener). ``TTY_DO_WRITE_WAKEUP`` If set, causes the driver to call the :c:member:`tty_ldisc_ops.write_wakeup()` method in order to resume transmission when it can accept more data to transmit. ``TTY_LDISC_OPEN`` Indicates that a line discipline is open. For debugging purposes only. ``TTY_PTY_LOCK`` A flag private to pty code to implement ``TIOCSPTLCK``/``TIOCGPTLCK`` logic. ``TTY_NO_WRITE_SPLIT`` Prevent driver from splitting up writes into smaller chunks (preserve write boundaries to driver). ``TTY_HUPPED`` The TTY was hung up. This is set post :c:member:`tty_driver.hangup()`. ``TTY_HUPPING`` The TTY is in the process of hanging up to abort potential readers. ``TTY_LDISC_CHANGING`` Line discipline for this TTY is being changed. I/O should not block when this is set. Use tty_io_nonblock() to check. ``TTY_LDISC_HALTED`` Line discipline for this TTY was stopped. No work should be queued to this ldisc.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjubj)}(hhh](j)}(h``TTY_THROTTLED`` Driver input is throttled. The ldisc should call :c:member:`tty_driver.unthrottle()` in order to resume reception when it is ready to process more data (at threshold min). h](j)}(h``TTY_THROTTLED``h]j)}(hj'h]h TTY_THROTTLED}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj!ubj )}(hhh]h)}(hDriver input is throttled. The ldisc should call :c:member:`tty_driver.unthrottle()` in order to resume reception when it is ready to process more data (at threshold min).h](h1Driver input is throttled. The ldisc should call }(hj@hhhNhNubh)}(h#:c:member:`tty_driver.unthrottle()`h]j)}(hjJh]htty_driver.unthrottle()}(hjLhhhNhNubah}(h]h ](juj;c-membereh"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypemember refexplicitrefwarnjAjjtty_driver.unthrottle()uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj@ubhW in order to resume reception when it is ready to process more data (at threshold min).}(hj@hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjghMhj=ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubj)}(h``TTY_IO_ERROR`` If set, causes all subsequent userspace read/write calls on the tty to fail, returning -``EIO``. (May be no ldisc too.) h](j)}(h``TTY_IO_ERROR``h]j)}(hjh]h TTY_IO_ERROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM hj~ubj )}(hhh]h)}(hwIf set, causes all subsequent userspace read/write calls on the tty to fail, returning -``EIO``. (May be no ldisc too.)h](hXIf set, causes all subsequent userspace read/write calls on the tty to fail, returning -}(hjhhhNhNubj)}(h``EIO``h]hEIO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. (May be no ldisc too.)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM hjubah}(h]h ]h"]h$]h&]uh1j hj~ubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(hD``TTY_OTHER_CLOSED`` Device is a pty and the other side has closed. h](j)}(h``TTY_OTHER_CLOSED``h]j)}(hjh]hTTY_OTHER_CLOSED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM hjubj )}(hhh]h)}(h.Device is a pty and the other side has closed.h]h.Device is a pty and the other side has closed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h9``TTY_EXCLUSIVE`` Exclusive open mode (a single opener). h](j)}(h``TTY_EXCLUSIVE``h]j)}(hj h]h TTY_EXCLUSIVE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjubj )}(hhh]h)}(h&Exclusive open mode (a single opener).h]h&Exclusive open mode (a single opener).}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h``TTY_DO_WRITE_WAKEUP`` If set, causes the driver to call the :c:member:`tty_ldisc_ops.write_wakeup()` method in order to resume transmission when it can accept more data to transmit. h](j)}(h``TTY_DO_WRITE_WAKEUP``h]j)}(hjBh]hTTY_DO_WRITE_WAKEUP}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj<ubj )}(hhh]h)}(hIf set, causes the driver to call the :c:member:`tty_ldisc_ops.write_wakeup()` method in order to resume transmission when it can accept more data to transmit.h](h&If set, causes the driver to call the }(hj[hhhNhNubh)}(h(:c:member:`tty_ldisc_ops.write_wakeup()`h]j)}(hjeh]htty_ldisc_ops.write_wakeup()}(hjghhhNhNubah}(h]h ](juj;c-membereh"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypemember refexplicitrefwarnjAjjtty_ldisc_ops.write_wakeup()uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj[ubhQ method in order to resume transmission when it can accept more data to transmit.}(hj[hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjXubah}(h]h ]h"]h$]h&]uh1j hj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhMhjubj)}(hZ``TTY_LDISC_OPEN`` Indicates that a line discipline is open. For debugging purposes only. h](j)}(h``TTY_LDISC_OPEN``h]j)}(hjh]hTTY_LDISC_OPEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjubj )}(hhh]h)}(hFIndicates that a line discipline is open. For debugging purposes only.h]hFIndicates that a line discipline is open. For debugging purposes only.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h^``TTY_PTY_LOCK`` A flag private to pty code to implement ``TIOCSPTLCK``/``TIOCGPTLCK`` logic. h](j)}(h``TTY_PTY_LOCK``h]j)}(hjh]h TTY_PTY_LOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjubj )}(hhh]h)}(hLA flag private to pty code to implement ``TIOCSPTLCK``/``TIOCGPTLCK`` logic.h](h(A flag private to pty code to implement }(hjhhhNhNubj)}(h``TIOCSPTLCK``h]h TIOCSPTLCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/}(hjhhhNhNubj)}(h``TIOCGPTLCK``h]h TIOCGPTLCK}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh logic.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(hz``TTY_NO_WRITE_SPLIT`` Prevent driver from splitting up writes into smaller chunks (preserve write boundaries to driver). h](j)}(h``TTY_NO_WRITE_SPLIT``h]j)}(hj5h]hTTY_NO_WRITE_SPLIT}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj/ubj )}(hhh]h)}(hbPrevent driver from splitting up writes into smaller chunks (preserve write boundaries to driver).h]hbPrevent driver from splitting up writes into smaller chunks (preserve write boundaries to driver).}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjKubah}(h]h ]h"]h$]h&]uh1j hj/ubeh}(h]h ]h"]h$]h&]uh1jhjJhMhjubj)}(hV``TTY_HUPPED`` The TTY was hung up. This is set post :c:member:`tty_driver.hangup()`. h](j)}(h``TTY_HUPPED``h]j)}(hjoh]h TTY_HUPPED}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM"hjiubj )}(hhh]h)}(hFThe TTY was hung up. This is set post :c:member:`tty_driver.hangup()`.h](h&The TTY was hung up. This is set post }(hjhhhNhNubh)}(h:c:member:`tty_driver.hangup()`h]j)}(hjh]htty_driver.hangup()}(hjhhhNhNubah}(h]h ](juj;c-membereh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypemember refexplicitrefwarnjAjjtty_driver.hangup()uh1hhjhM"hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1j hjiubeh}(h]h ]h"]h$]h&]uh1jhjhM"hjubj)}(hT``TTY_HUPPING`` The TTY is in the process of hanging up to abort potential readers. h](j)}(h``TTY_HUPPING``h]j)}(hjh]h TTY_HUPPING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM%hjubj )}(hhh]h)}(hCThe TTY is in the process of hanging up to abort potential readers.h]hCThe TTY is in the process of hanging up to abort potential readers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hjubj)}(h``TTY_LDISC_CHANGING`` Line discipline for this TTY is being changed. I/O should not block when this is set. Use tty_io_nonblock() to check. h](j)}(h``TTY_LDISC_CHANGING``h]j)}(hjh]hTTY_LDISC_CHANGING}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM)hjubj )}(hhh]h)}(huLine discipline for this TTY is being changed. I/O should not block when this is set. Use tty_io_nonblock() to check.h]huLine discipline for this TTY is being changed. I/O should not block when this is set. Use tty_io_nonblock() to check.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM(hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jhjhM)hjubj)}(hf``TTY_LDISC_HALTED`` Line discipline for this TTY was stopped. No work should be queued to this ldisc.h](j)}(h``TTY_LDISC_HALTED``h]j)}(hj>h]hTTY_LDISC_HALTED}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM,hj8ubj )}(hhh]h)}(hQLine discipline for this TTY was stopped. No work should be queued to this ldisc.h]hQLine discipline for this TTY was stopped. No work should be queued to this ldisc.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShM,hjTubah}(h]h ]h"]h$]h&]uh1j hj8ubeh}(h]h ]h"]h$]h&]uh1jhjShM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjxhhhjhNubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM0hjxhhubh)}(h>These bits are used in the :c:member:`tty_struct.flags` field.h](hThese bits are used in the }(hjhhhNhNubh)}(h:c:member:`tty_struct.flags`h]j)}(hjh]htty_struct.flags}(hjhhhNhNubah}(h]h ](juj;c-membereh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypemember refexplicitrefwarnjAjjtty_struct.flagsuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhKhjubh field.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKhjxhhubh)}(hSo that interrupts won't be able to mess up the queues, copy_to_cooked must be atomic with respect to itself, as must tty->write. Thus, you must use the inline functions set_bit() and clear_bit() to make things atomic.h]hSo that interrupts won’t be able to mess up the queues, copy_to_cooked must be atomic with respect to itself, as must tty->write. Thus, you must use the inline functions set_bit() and clear_bit() to make things atomic.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjxhhubeh}(h]j ah ]h"]tty struct flagsah$]h&]uh1hhhhhhhhKHubh)}(hhh](h)}(hTTY Struct Referenceh]hTTY Struct Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]jwj<uh1hhjhhhhhKNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_struct (C struct) c.tty_structhNtauh1jhjhhh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhNubj)}(hhh](j)}(h tty_structh]j)}(hstruct tty_structh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj)}(h tty_structh]j)}(hj h]h tty_struct}(hj) hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj% ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj hKhjhhubj)}(hhh]h)}(h&state associated with a tty while openh]h&state associated with a tty while open}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKzhjH hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKubeh}(h]h ](j;structeh"]h$]h&]jj;jjc jjc jjjuh1jhhhjhjhNubj)}(hX**Definition**:: struct tty_struct { struct kref kref; int index; struct device *dev; struct tty_driver *driver; struct tty_port *port; const struct tty_operations *ops; struct tty_ldisc *ldisc; struct ld_semaphore ldisc_sem; struct mutex atomic_write_lock; struct mutex legacy_mutex; struct mutex throttle_mutex; struct rw_semaphore termios_rwsem; struct mutex winsize_mutex; struct ktermios termios, termios_locked; char name[64]; unsigned long flags; int count; unsigned int receive_room; struct winsize winsize; struct { spinlock_t lock; bool stopped; bool tco_stopped; } flow; struct { struct pid *pgrp; struct pid *session; spinlock_t lock; unsigned char pktstatus; bool packet; } ctrl; bool hw_stopped; bool closing; int flow_change; struct tty_struct *link; struct fasync_struct *fasync; wait_queue_head_t write_wait; wait_queue_head_t read_wait; struct work_struct hangup_work; void *disc_data; void *driver_data; spinlock_t files_lock; int write_cnt; u8 *write_buf; struct list_head tty_files; struct work_struct SAK_work; }; **Members** ``kref`` reference counting by tty_kref_get() and tty_kref_put(), reaching zero frees the structure ``index`` index of this tty (e.g. to construct **name** like tty12) ``dev`` class device or ``NULL`` (e.g. ptys, serdev) ``driver`` :c:type:`struct tty_driver ` operating this tty ``port`` persistent storage for this device (i.e. :c:type:`struct tty_port `) ``ops`` :c:type:`struct tty_operations ` of **driver** for this tty (open, close, etc.) ``ldisc`` the current line discipline for this tty (n_tty by default) ``ldisc_sem`` protects line discipline changes (**ldisc**) -- lock tty not pty ``atomic_write_lock`` protects against concurrent writers, i.e. locks **write_cnt**, **write_buf** and similar ``legacy_mutex`` leftover from history (BKL -> BTM -> **legacy_mutex**), protecting several operations on this tty ``throttle_mutex`` protects against concurrent tty_throttle_safe() and tty_unthrottle_safe() (but not tty_unthrottle()) ``termios_rwsem`` protects **termios** and **termios_locked** ``winsize_mutex`` protects **winsize** ``termios`` termios for the current tty, copied from/to **driver.termios** ``termios_locked`` locked termios (by ``TIOCGLCKTRMIOS`` and ``TIOCSLCKTRMIOS`` ioctls) ``name`` name of the tty constructed by tty_line_name() (e.g. ttyS3) ``flags`` bitwise OR of ``TTY_THROTTLED``, ``TTY_IO_ERROR``, ... ``count`` count of open processes, reaching zero cancels all the work for this tty and drops a **kref** too (but does not free this tty) ``receive_room`` bytes permitted to feed to **ldisc** without any being lost ``winsize`` size of the terminal "window" (cf. **winsize_mutex**) ``flow`` flow settings grouped together ``flow.lock`` lock for **flow** members ``flow.stopped`` tty stopped/started by stop_tty()/start_tty() ``flow.tco_stopped`` tty stopped/started by ``TCOOFF``/``TCOON`` ioctls (it has precedence over **flow.stopped**) ``ctrl`` control settings grouped together ``ctrl.pgrp`` process group of this tty (setpgrp(2)) ``ctrl.session`` session of this tty (setsid(2)). Writes are protected by both **ctrl.lock** and **legacy_mutex**, readers must use at least one of them. ``ctrl.lock`` lock for **ctrl** members ``ctrl.pktstatus`` packet mode status (bitwise OR of ``TIOCPKT_`` constants) ``ctrl.packet`` packet mode enabled ``hw_stopped`` not controlled by the tty layer, under **driver**'s control for CTS handling ``closing`` when set during close, n_tty processes only START & STOP chars ``flow_change`` controls behavior of throttling, see tty_throttle_safe() and tty_unthrottle_safe() ``link`` link to another pty (master -> slave and vice versa) ``fasync`` state for ``O_ASYNC`` (for ``SIGIO``); managed by fasync_helper() ``write_wait`` concurrent writers are waiting in this queue until they are allowed to write ``read_wait`` readers wait for data in this queue ``hangup_work`` normally a work to perform a hangup (do_tty_hangup()); while freeing the tty, (re)used to release_one_tty() ``disc_data`` pointer to **ldisc**'s private data (e.g. to :c:type:`struct n_tty_data `) ``driver_data`` pointer to **driver**'s private data (e.g. :c:type:`struct uart_state `) ``files_lock`` protects **tty_files** list ``write_cnt`` count of bytes written in tty_write() to **write_buf** ``write_buf`` temporary buffer used during tty_write() to copy user data to ``tty_files`` list of (re)openers of this tty (i.e. linked :c:type:`struct tty_file_private `) ``SAK_work`` if the tty has a pending do_SAK, it is queued hereh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk ubh:}(hjk hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhK~hjg ubh literal_block)}(hXstruct tty_struct { struct kref kref; int index; struct device *dev; struct tty_driver *driver; struct tty_port *port; const struct tty_operations *ops; struct tty_ldisc *ldisc; struct ld_semaphore ldisc_sem; struct mutex atomic_write_lock; struct mutex legacy_mutex; struct mutex throttle_mutex; struct rw_semaphore termios_rwsem; struct mutex winsize_mutex; struct ktermios termios, termios_locked; char name[64]; unsigned long flags; int count; unsigned int receive_room; struct winsize winsize; struct { spinlock_t lock; bool stopped; bool tco_stopped; } flow; struct { struct pid *pgrp; struct pid *session; spinlock_t lock; unsigned char pktstatus; bool packet; } ctrl; bool hw_stopped; bool closing; int flow_change; struct tty_struct *link; struct fasync_struct *fasync; wait_queue_head_t write_wait; wait_queue_head_t read_wait; struct work_struct hangup_work; void *disc_data; void *driver_data; spinlock_t files_lock; int write_cnt; u8 *write_buf; struct list_head tty_files; struct work_struct SAK_work; };h]hXstruct tty_struct { struct kref kref; int index; struct device *dev; struct tty_driver *driver; struct tty_port *port; const struct tty_operations *ops; struct tty_ldisc *ldisc; struct ld_semaphore ldisc_sem; struct mutex atomic_write_lock; struct mutex legacy_mutex; struct mutex throttle_mutex; struct rw_semaphore termios_rwsem; struct mutex winsize_mutex; struct ktermios termios, termios_locked; char name[64]; unsigned long flags; int count; unsigned int receive_room; struct winsize winsize; struct { spinlock_t lock; bool stopped; bool tco_stopped; } flow; struct { struct pid *pgrp; struct pid *session; spinlock_t lock; unsigned char pktstatus; bool packet; } ctrl; bool hw_stopped; bool closing; int flow_change; struct tty_struct *link; struct fasync_struct *fasync; wait_queue_head_t write_wait; wait_queue_head_t read_wait; struct work_struct hangup_work; void *disc_data; void *driver_data; spinlock_t files_lock; int write_cnt; u8 *write_buf; struct list_head tty_files; struct work_struct SAK_work; };}hj sbah}(h]h ]h"]h$]h&]hhuh1j h]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjg ubh)}(h **Members**h]j)}(hj h]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjg ubj)}(hhh](j)}(hd``kref`` reference counting by tty_kref_get() and tty_kref_put(), reaching zero frees the structure h](j)}(h``kref``h]j)}(hj h]hkref}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhK~hj ubj )}(hhh]h)}(hZreference counting by tty_kref_get() and tty_kref_put(), reaching zero frees the structureh]hZreference counting by tty_kref_get() and tty_kref_put(), reaching zero frees the structure}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhK}hj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj hK~hj ubj)}(hD``index`` index of this tty (e.g. to construct **name** like tty12) h](j)}(h ``index``h]j)}(hj h]hindex}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj ubj )}(hhh]h)}(h9index of this tty (e.g. to construct **name** like tty12)h](h%index of this tty (e.g. to construct }(hj !hhhNhNubj)}(h**name**h]hname}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubh like tty12)}(hj !hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj !hKhj !ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1jhj !hKhj ubj)}(h5``dev`` class device or ``NULL`` (e.g. ptys, serdev) h](j)}(h``dev``h]j)}(hj?!h]hdev}(hjA!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj9!ubj )}(hhh]h)}(h,class device or ``NULL`` (e.g. ptys, serdev)h](hclass device or }(hjX!hhhNhNubj)}(h``NULL``h]hNULL}(hj`!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjX!ubh (e.g. ptys, serdev)}(hjX!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjT!hKhjU!ubah}(h]h ]h"]h$]h&]uh1j hj9!ubeh}(h]h ]h"]h$]h&]uh1jhjT!hKhj ubj)}(hG``driver`` :c:type:`struct tty_driver ` operating this tty h](j)}(h ``driver``h]j)}(hj!h]hdriver}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj!ubj )}(hhh]h)}(h;:c:type:`struct tty_driver ` operating this ttyh](h)}(h(:c:type:`struct tty_driver `h]j)}(hj!h]hstruct tty_driver}(hj!hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjj tty_driveruh1hhj!hKhj!ubh operating this tty}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhj ubj)}(hX``port`` persistent storage for this device (i.e. :c:type:`struct tty_port `) h](j)}(h``port``h]j)}(hj!h]hport}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj!ubj )}(hhh]h)}(hNpersistent storage for this device (i.e. :c:type:`struct tty_port `)h](h)persistent storage for this device (i.e. }(hj!hhhNhNubh)}(h$:c:type:`struct tty_port `h]j)}(hj"h]hstruct tty_port}(hj"hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjjtty_portuh1hhj!hKhj!ubh)}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhj ubj)}(hh``ops`` :c:type:`struct tty_operations ` of **driver** for this tty (open, close, etc.) h](j)}(h``ops``h]j)}(hj>"h]hops}(hj@"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj8"ubj )}(hhh]h)}(h_:c:type:`struct tty_operations ` of **driver** for this tty (open, close, etc.)h](h)}(h0:c:type:`struct tty_operations `h]j)}(hj]"h]hstruct tty_operations}(hj_"hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj["ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjjtty_operationsuh1hhjS"hKhjW"ubh of }(hjW"hhhNhNubj)}(h **driver**h]hdriver}(hj~"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW"ubh! for this tty (open, close, etc.)}(hjW"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjS"hKhjT"ubah}(h]h ]h"]h$]h&]uh1j hj8"ubeh}(h]h ]h"]h$]h&]uh1jhjS"hKhj ubj)}(hF``ldisc`` the current line discipline for this tty (n_tty by default) h](j)}(h ``ldisc``h]j)}(hj"h]hldisc}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj"ubj )}(hhh]h)}(h;the current line discipline for this tty (n_tty by default)h]h;the current line discipline for this tty (n_tty by default)}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhj ubj)}(hO``ldisc_sem`` protects line discipline changes (**ldisc**) -- lock tty not pty h](j)}(h ``ldisc_sem``h]j)}(hj"h]h ldisc_sem}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj"ubj )}(hhh]h)}(h@protects line discipline changes (**ldisc**) -- lock tty not ptyh](h"protects line discipline changes (}(hj"hhhNhNubj)}(h **ldisc**h]hldisc}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh) -- lock tty not pty}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj"hKhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1jhj"hKhj ubj)}(ho``atomic_write_lock`` protects against concurrent writers, i.e. locks **write_cnt**, **write_buf** and similar h](j)}(h``atomic_write_lock``h]j)}(hj,#h]hatomic_write_lock}(hj.#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj&#ubj )}(hhh]h)}(hXprotects against concurrent writers, i.e. locks **write_cnt**, **write_buf** and similarh](h0protects against concurrent writers, i.e. locks }(hjE#hhhNhNubj)}(h **write_cnt**h]h write_cnt}(hjM#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE#ubh, }(hjE#hhhNhNubj)}(h **write_buf**h]h write_buf}(hj_#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE#ubh and similar}(hjE#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjB#ubah}(h]h ]h"]h$]h&]uh1j hj&#ubeh}(h]h ]h"]h$]h&]uh1jhjA#hKhj ubj)}(hs``legacy_mutex`` leftover from history (BKL -> BTM -> **legacy_mutex**), protecting several operations on this tty h](j)}(h``legacy_mutex``h]j)}(hj#h]h legacy_mutex}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj#ubj )}(hhh]h)}(haleftover from history (BKL -> BTM -> **legacy_mutex**), protecting several operations on this ttyh](h%leftover from history (BKL -> BTM -> }(hj#hhhNhNubj)}(h**legacy_mutex**h]h legacy_mutex}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubh,), protecting several operations on this tty}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj ubj)}(hx``throttle_mutex`` protects against concurrent tty_throttle_safe() and tty_unthrottle_safe() (but not tty_unthrottle()) h](j)}(h``throttle_mutex``h]j)}(hj#h]hthrottle_mutex}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj#ubj )}(hhh]h)}(hdprotects against concurrent tty_throttle_safe() and tty_unthrottle_safe() (but not tty_unthrottle())h]hdprotects against concurrent tty_throttle_safe() and tty_unthrottle_safe() (but not tty_unthrottle())}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj#ubah}(h]h ]h"]h$]h&]uh1j hj#ubeh}(h]h ]h"]h$]h&]uh1jhj#hKhj ubj)}(h>``termios_rwsem`` protects **termios** and **termios_locked** h](j)}(h``termios_rwsem``h]j)}(hj$h]h termios_rwsem}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj $ubj )}(hhh]h)}(h+protects **termios** and **termios_locked**h](h protects }(hj)$hhhNhNubj)}(h **termios**h]htermios}(hj1$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)$ubh and }(hj)$hhhNhNubj)}(h**termios_locked**h]htermios_locked}(hjC$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)$ubeh}(h]h ]h"]h$]h&]uh1hhj%$hKhj&$ubah}(h]h ]h"]h$]h&]uh1j hj $ubeh}(h]h ]h"]h$]h&]uh1jhj%$hKhj ubj)}(h'``winsize_mutex`` protects **winsize** h](j)}(h``winsize_mutex``h]j)}(hji$h]h winsize_mutex}(hjk$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjc$ubj )}(hhh]h)}(hprotects **winsize**h](h protects }(hj$hhhNhNubj)}(h **winsize**h]hwinsize}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1hhj~$hKhj$ubah}(h]h ]h"]h$]h&]uh1j hjc$ubeh}(h]h ]h"]h$]h&]uh1jhj~$hKhj ubj)}(hK``termios`` termios for the current tty, copied from/to **driver.termios** h](j)}(h ``termios``h]j)}(hj$h]htermios}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj$ubj )}(hhh]h)}(h>termios for the current tty, copied from/to **driver.termios**h](h,termios for the current tty, copied from/to }(hj$hhhNhNubj)}(h**driver.termios**h]hdriver.termios}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1hhj$hKhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj$hKhj ubj)}(hX``termios_locked`` locked termios (by ``TIOCGLCKTRMIOS`` and ``TIOCSLCKTRMIOS`` ioctls) h](j)}(h``termios_locked``h]j)}(hj$h]htermios_locked}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj$ubj )}(hhh]h)}(hDlocked termios (by ``TIOCGLCKTRMIOS`` and ``TIOCSLCKTRMIOS`` ioctls)h](hlocked termios (by }(hj%hhhNhNubj)}(h``TIOCGLCKTRMIOS``h]hTIOCGLCKTRMIOS}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh and }(hj%hhhNhNubj)}(h``TIOCSLCKTRMIOS``h]hTIOCSLCKTRMIOS}(hj*%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh ioctls)}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj %ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1jhj %hKhj ubj)}(hE``name`` name of the tty constructed by tty_line_name() (e.g. ttyS3) h](j)}(h``name``h]j)}(hjU%h]hname}(hjW%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjS%ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjO%ubj )}(hhh]h)}(h;name of the tty constructed by tty_line_name() (e.g. ttyS3)h]h;name of the tty constructed by tty_line_name() (e.g. ttyS3)}(hjn%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj%hKhjk%ubah}(h]h ]h"]h$]h&]uh1j hjO%ubeh}(h]h ]h"]h$]h&]uh1jhjj%hKhj ubj)}(hA``flags`` bitwise OR of ``TTY_THROTTLED``, ``TTY_IO_ERROR``, ... h](j)}(h ``flags``h]j)}(hj%h]hflags}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj%ubj )}(hhh]h)}(h6bitwise OR of ``TTY_THROTTLED``, ``TTY_IO_ERROR``, ...h](hbitwise OR of }(hj%hhhNhNubj)}(h``TTY_THROTTLED``h]h TTY_THROTTLED}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh, }(hj%hhhNhNubj)}(h``TTY_IO_ERROR``h]h TTY_IO_ERROR}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubh, ...}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hKhj ubj)}(h``count`` count of open processes, reaching zero cancels all the work for this tty and drops a **kref** too (but does not free this tty) h](j)}(h ``count``h]j)}(hj%h]hcount}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj%ubj )}(hhh]h)}(h~count of open processes, reaching zero cancels all the work for this tty and drops a **kref** too (but does not free this tty)h](hUcount of open processes, reaching zero cancels all the work for this tty and drops a }(hj&hhhNhNubj)}(h**kref**h]hkref}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh! too (but does not free this tty)}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj&ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj ubj)}(hM``receive_room`` bytes permitted to feed to **ldisc** without any being lost h](j)}(h``receive_room``h]j)}(hj7&h]h receive_room}(hj9&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5&ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj1&ubj )}(hhh]h)}(h;bytes permitted to feed to **ldisc** without any being losth](hbytes permitted to feed to }(hjP&hhhNhNubj)}(h **ldisc**h]hldisc}(hjX&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP&ubh without any being lost}(hjP&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjL&hKhjM&ubah}(h]h ]h"]h$]h&]uh1j hj1&ubeh}(h]h ]h"]h$]h&]uh1jhjL&hKhj ubj)}(hB``winsize`` size of the terminal "window" (cf. **winsize_mutex**) h](j)}(h ``winsize``h]j)}(hj&h]hwinsize}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj|&ubj )}(hhh]h)}(h5size of the terminal "window" (cf. **winsize_mutex**)h](h'size of the terminal “window” (cf. }(hj&hhhNhNubj)}(h**winsize_mutex**h]h winsize_mutex}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh)}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1j hj|&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj ubj)}(h(``flow`` flow settings grouped together h](j)}(h``flow``h]j)}(hj&h]hflow}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj&ubj )}(hhh]h)}(hflow settings grouped togetherh]hflow settings grouped together}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhj ubj)}(h(``flow.lock`` lock for **flow** members h](j)}(h ``flow.lock``h]j)}(hj'h]h flow.lock}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj'ubj )}(hhh]h)}(hlock for **flow** membersh](h lock for }(hj'hhhNhNubj)}(h**flow**h]hflow}(hj''hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh members}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj ubj)}(h?``flow.stopped`` tty stopped/started by stop_tty()/start_tty() h](j)}(h``flow.stopped``h]j)}(hjQ'h]h flow.stopped}(hjS'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO'ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjK'ubj )}(hhh]h)}(h-tty stopped/started by stop_tty()/start_tty()h]h-tty stopped/started by stop_tty()/start_tty()}(hjj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf'hKhjg'ubah}(h]h ]h"]h$]h&]uh1j hjK'ubeh}(h]h ]h"]h$]h&]uh1jhjf'hKhj ubj)}(hr``flow.tco_stopped`` tty stopped/started by ``TCOOFF``/``TCOON`` ioctls (it has precedence over **flow.stopped**) h](j)}(h``flow.tco_stopped``h]j)}(hj'h]hflow.tco_stopped}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj'ubj )}(hhh]h)}(h\tty stopped/started by ``TCOOFF``/``TCOON`` ioctls (it has precedence over **flow.stopped**)h](htty stopped/started by }(hj'hhhNhNubj)}(h ``TCOOFF``h]hTCOOFF}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh/}(hj'hhhNhNubj)}(h ``TCOON``h]hTCOON}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh ioctls (it has precedence over }(hj'hhhNhNubj)}(h**flow.stopped**h]h flow.stopped}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhj ubj)}(h+``ctrl`` control settings grouped together h](j)}(h``ctrl``h]j)}(hj'h]hctrl}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj'ubj )}(hhh]h)}(h!control settings grouped togetherh]h!control settings grouped together}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h5``ctrl.pgrp`` process group of this tty (setpgrp(2)) h](j)}(h ``ctrl.pgrp``h]j)}(hj3(h]h ctrl.pgrp}(hj5(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj-(ubj )}(hhh]h)}(h&process group of this tty (setpgrp(2))h]h&process group of this tty (setpgrp(2))}(hjL(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH(hKhjI(ubah}(h]h ]h"]h$]h&]uh1j hj-(ubeh}(h]h ]h"]h$]h&]uh1jhjH(hKhj ubj)}(h``ctrl.session`` session of this tty (setsid(2)). Writes are protected by both **ctrl.lock** and **legacy_mutex**, readers must use at least one of them. h](j)}(h``ctrl.session``h]j)}(hjl(h]h ctrl.session}(hjn(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjf(ubj )}(hhh]h)}(hsession of this tty (setsid(2)). Writes are protected by both **ctrl.lock** and **legacy_mutex**, readers must use at least one of them.h](h>session of this tty (setsid(2)). Writes are protected by both }(hj(hhhNhNubj)}(h **ctrl.lock**h]h ctrl.lock}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh and }(hj(hhhNhNubj)}(h**legacy_mutex**h]h legacy_mutex}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh(, readers must use at least one of them.}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj(ubah}(h]h ]h"]h$]h&]uh1j hjf(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(h(``ctrl.lock`` lock for **ctrl** members h](j)}(h ``ctrl.lock``h]j)}(hj(h]h ctrl.lock}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj(ubj )}(hhh]h)}(hlock for **ctrl** membersh](h lock for }(hj(hhhNhNubj)}(h**ctrl**h]hctrl}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubh members}(hj(hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hKhj(ubah}(h]h ]h"]h$]h&]uh1j hj(ubeh}(h]h ]h"]h$]h&]uh1jhj(hKhj ubj)}(hM``ctrl.pktstatus`` packet mode status (bitwise OR of ``TIOCPKT_`` constants) h](j)}(h``ctrl.pktstatus``h]j)}(hj)h]hctrl.pktstatus}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj)ubj )}(h,Ihh]h)}(h9packet mode status (bitwise OR of ``TIOCPKT_`` constants)h](h"packet mode status (bitwise OR of }(hj.)hhhNhNubj)}(h ``TIOCPKT_``h]hTIOCPKT_}(hj6)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.)ubh constants)}(hj.)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*)hKhj+)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhj*)hKhj ubj)}(h$``ctrl.packet`` packet mode enabled h](j)}(h``ctrl.packet``h]j)}(hj`)h]h ctrl.packet}(hjb)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^)ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjZ)ubj )}(hhh]h)}(hpacket mode enabledh]hpacket mode enabled}(hjy)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju)hKhjv)ubah}(h]h ]h"]h$]h&]uh1j hjZ)ubeh}(h]h ]h"]h$]h&]uh1jhju)hKhj ubj)}(h\``hw_stopped`` not controlled by the tty layer, under **driver**'s control for CTS handling h](j)}(h``hw_stopped``h]j)}(hj)h]h hw_stopped}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj)ubj )}(hhh]h)}(hLnot controlled by the tty layer, under **driver**'s control for CTS handlingh](h'not controlled by the tty layer, under }(hj)hhhNhNubj)}(h **driver**h]hdriver}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubh’s control for CTS handling}(hj)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj ubj)}(hK``closing`` when set during close, n_tty processes only START & STOP chars h](j)}(h ``closing``h]j)}(hj)h]hclosing}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj)ubj )}(hhh]h)}(h>when set during close, n_tty processes only START & STOP charsh]h>when set during close, n_tty processes only START & STOP chars}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKhj ubj)}(hc``flow_change`` controls behavior of throttling, see tty_throttle_safe() and tty_unthrottle_safe() h](j)}(h``flow_change``h]j)}(hj*h]h flow_change}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj*ubj )}(hhh]h)}(hRcontrols behavior of throttling, see tty_throttle_safe() and tty_unthrottle_safe()h]hRcontrols behavior of throttling, see tty_throttle_safe() and tty_unthrottle_safe()}(hj7*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj4*ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj3*hKhj ubj)}(h>``link`` link to another pty (master -> slave and vice versa) h](j)}(h``link``h]j)}(hjX*h]hlink}(hjZ*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjR*ubj )}(hhh]h)}(h4link to another pty (master -> slave and vice versa)h]h4link to another pty (master -> slave and vice versa)}(hjq*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm*hKhjn*ubah}(h]h ]h"]h$]h&]uh1j hjR*ubeh}(h]h ]h"]h$]h&]uh1jhjm*hKhj ubj)}(hM``fasync`` state for ``O_ASYNC`` (for ``SIGIO``); managed by fasync_helper() h](j)}(h ``fasync``h]j)}(hj*h]hfasync}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj*ubj )}(hhh]h)}(hAstate for ``O_ASYNC`` (for ``SIGIO``); managed by fasync_helper()h](h state for }(hj*hhhNhNubj)}(h ``O_ASYNC``h]hO_ASYNC}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh (for }(hj*hhhNhNubj)}(h ``SIGIO``h]hSIGIO}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh); managed by fasync_helper()}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj ubj)}(h\``write_wait`` concurrent writers are waiting in this queue until they are allowed to write h](j)}(h``write_wait``h]j)}(hj*h]h write_wait}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj*ubj )}(hhh]h)}(hLconcurrent writers are waiting in this queue until they are allowed to writeh]hLconcurrent writers are waiting in this queue until they are allowed to write}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj+ubah}(h]h ]h"]h$]h&]uh1j hj*ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj ubj)}(h2``read_wait`` readers wait for data in this queue h](j)}(h ``read_wait``h]j)}(hj(+h]h read_wait}(hj*+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj"+ubj )}(hhh]h)}(h#readers wait for data in this queueh]h#readers wait for data in this queue}(hjA+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=+hKhj>+ubah}(h]h ]h"]h$]h&]uh1j hj"+ubeh}(h]h ]h"]h$]h&]uh1jhj=+hKhj ubj)}(h|``hangup_work`` normally a work to perform a hangup (do_tty_hangup()); while freeing the tty, (re)used to release_one_tty() h](j)}(h``hangup_work``h]j)}(hja+h]h hangup_work}(hjc+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj[+ubj )}(hhh]h)}(hknormally a work to perform a hangup (do_tty_hangup()); while freeing the tty, (re)used to release_one_tty()h]hknormally a work to perform a hangup (do_tty_hangup()); while freeing the tty, (re)used to release_one_tty()}(hjz+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjw+ubah}(h]h ]h"]h$]h&]uh1j hj[+ubeh}(h]h ]h"]h$]h&]uh1jhjv+hKhj ubj)}(he``disc_data`` pointer to **ldisc**'s private data (e.g. to :c:type:`struct n_tty_data `) h](j)}(h ``disc_data``h]j)}(hj+h]h disc_data}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj+ubj )}(hhh]h)}(hVpointer to **ldisc**'s private data (e.g. to :c:type:`struct n_tty_data `)h](h pointer to }(hj+hhhNhNubj)}(h **ldisc**h]hldisc}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubh’s private data (e.g. to }(hj+hhhNhNubh)}(h(:c:type:`struct n_tty_data `h]j)}(hj+h]hstruct n_tty_data}(hj+hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjj n_tty_datauh1hhj+hKhj+ubh)}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jhj+hKhj ubj)}(he``driver_data`` pointer to **driver**'s private data (e.g. :c:type:`struct uart_state `) h](j)}(h``driver_data``h]j)}(hj ,h]h driver_data}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj,ubj )}(hhh]h)}(hTpointer to **driver**'s private data (e.g. :c:type:`struct uart_state `)h](h pointer to }(hj",hhhNhNubj)}(h **driver**h]hdriver}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj",ubh’s private data (e.g. }(hj",hhhNhNubh)}(h(:c:type:`struct uart_state `h]j)}(hj>,h]hstruct uart_state}(hj@,hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj<,ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjj uart_stateuh1hhj,hKhj",ubh)}(hj",hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj ubj)}(h+``files_lock`` protects **tty_files** list h](j)}(h``files_lock``h]j)}(hjw,h]h files_lock}(hjy,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju,ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjq,ubj )}(hhh]h)}(hprotects **tty_files** listh](h protects }(hj,hhhNhNubj)}(h **tty_files**h]h tty_files}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubh list}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j hjq,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj ubj)}(hE``write_cnt`` count of bytes written in tty_write() to **write_buf** h](j)}(h ``write_cnt``h]j)}(hj,h]h write_cnt}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj,ubj )}(hhh]h)}(h6count of bytes written in tty_write() to **write_buf**h](h)count of bytes written in tty_write() to }(hj,hhhNhNubj)}(h **write_buf**h]h write_buf}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1j hj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj ubj)}(hL``write_buf`` temporary buffer used during tty_write() to copy user data to h](j)}(h ``write_buf``h]j)}(hj -h]h write_buf}(hj -hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj-ubj )}(hhh]h)}(h=temporary buffer used during tty_write() to copy user data toh]h=temporary buffer used during tty_write() to copy user data to}(hj"-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhj ubj)}(hq``tty_files`` list of (re)openers of this tty (i.e. linked :c:type:`struct tty_file_private `) h](j)}(h ``tty_files``h]j)}(hjB-h]h tty_files}(hjD-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@-ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj<-ubj )}(hhh]h)}(hblist of (re)openers of this tty (i.e. linked :c:type:`struct tty_file_private `)h](h-list of (re)openers of this tty (i.e. linked }(hj[-hhhNhNubh)}(h4:c:type:`struct tty_file_private `h]j)}(hje-h]hstruct tty_file_private}(hjg-hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhjc-ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjjtty_file_privateuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj[-ubh)}(hj[-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hKhjX-ubah}(h]h ]h"]h$]h&]uh1j hj<-ubeh}(h]h ]h"]h$]h&]uh1jhjW-hKhj ubj)}(h?``SAK_work`` if the tty has a pending do_SAK, it is queued hereh](j)}(h ``SAK_work``h]j)}(hj-h]hSAK_work}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj-ubj )}(hhh]h)}(h2if the tty has a pending do_SAK, it is queued hereh]h2if the tty has a pending do_SAK, it is queued here}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj-ubah}(h]h ]h"]h$]h&]uh1j hj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhj ubeh}(h]h ]h"]h$]h&]uh1jhjg ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjhhubh)}(hAll of the state associated with a tty while the tty is open. Persistent storage for tty devices is referenced here as **port** and is documented in :c:type:`struct tty_port `.h](hwAll of the state associated with a tty while the tty is open. Persistent storage for tty devices is referenced here as }(hj-hhhNhNubj)}(h**port**h]hport}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh and is documented in }(hj-hhhNhNubh)}(h$:c:type:`struct tty_port `h]j)}(hj.h]hstruct tty_port}(hj.hhhNhNubah}(h]h ](juj;c-typeeh"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]refdocj refdomainj;reftypetype refexplicitrefwarnjAjjtty_portuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj1.hKhjhhubeh}(h]jBah ]h"]tty struct referenceah$]h&]uh1hhhhhhhhKN referencedKubeh}(h] tty-structah ]h"] tty structah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjo.error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}tty struct reference]jgasrefids}nameids}(jI.jF.j\jWjthj`jj j2jT jTjjvjjjjj3jjujjj j@.jBu nametypes}(jI.j\jtj`j jT jjjj3jujj@.uh}(jF.hjWhhjjjjjwjjj2jcjjjcjhjTj j j jvjW jt jy jjjjjj jjj jjjjjj9j>jjjj6jSjXj jxjjjBjjj hhj jj,j#jNjEjpjgjjjjjjjjjjj<j3u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j}.K sRparse_messages]transform_messages] transformerN include_log] decorationNhhub.