'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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/pt_BR/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&]refidnameuh1hhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hReference counting}(hj7hhhNhNubah}(h]id3ah ]h"]h$]h&]refidreference-countinguh1hhj4ubah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hInstall}(hjYhhhNhNubah}(h]id4ah ]h"]h$]h&]refidinstalluh1hhjVubah}(h]h ]h"]h$]h&]uh1hhjSubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]h Read & Write}(hj{hhhNhNubah}(h]id5ah ]h"]h$]h&]refid read-writeuh1hhjxubah}(h]h ]h"]h$]h&]uh1hhjuubah}(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}(hj%hhhNhNubah}(h]id10ah ]h"]h$]h&]refidtty-struct-flagsuh1hhj"ubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]hTTY Struct Reference}(hjGhhhNhNubah}(h]id11ah ]h"]h$]h&]refidtty-struct-referenceuh1hhjDubah}(h]h ]h"]h$]h&]uh1hhjAubah}(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 }(hjshhhNhNubh)}(h`TTY Struct Reference`_h]hTTY Struct Reference}(hj{hhhNhNubah}(h]h ]h"]h$]h&]nameTTY Struct ReferencerefidjVuh1hhjsresolvedKubh at the bottom.}(hjshhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hInitializationh]hInitialization}(hjhhhNhNubah}(h]h ]h"]h$]h&]jhuh1hhjhhhhhKubhindex)}(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 }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetj<modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]jV ASTIdentifier)}jQjsbc.tty_init_termiosasbuh1hhjubj)}(h h]h }(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubhdesc_sig_punctuation)}(h*h]h*}(hjshhhNhNubah}(h]h ]pah"]h$]h&]uh1jqhjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(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 ](jOfunctioneh"]h$]h&]domainjOobjtypejdesctypejnoindex 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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhj!ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjFh]h Description}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(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 }(hj\hhhNhNubj )}(h ``tty_mutex``h]h tty_mutex}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1j hj\ubh/ currently so we can be relaxed about ordering.}(hj\hhhNhNubeh}(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]jah ]h"]initializationah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_name (C function) c.tty_namehNtauh1jhjhhhNhNubj)}(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 ]j%ah"]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&]uh1jhjhhhjhKubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhKubj)}(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 ]j%ah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetjVmodnameN classnameNjUjX)}j[]j^)}jQjsb c.tty_nameasbuh1hhjubj)}(h h]h }(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(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 ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjhNhNubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(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}(hjKhhhNhNubah}(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}(hjZhhhNhNubah}(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&]uh1jhjhhhNhNubeh}(h]j$ah ]h"]nameah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hReference countingh]hReference counting}(hjzhhhNhNubah}(h]h ]h"]h$]h&]jj@uh1hhjwhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_kref_get (C function)c.tty_kref_gethNtauh1jhjwhhhNhNubj)}(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 ]j%ah"]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&] refdomainjOreftypejQ reftargetjmodnameN classnameNjUjX)}j[]j^)}jQ tty_kref_getsbc.tty_kref_getasbuh1hhjhhhjhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjhhhjhMubj)}(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 ]j%ah"]h$]h&]uh1jhjubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetj;modnameN classnameNjUjX)}j[]jc.tty_kref_getasbuh1hhjubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hjehhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(httyh]htty}(hjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(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 ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjwhNhNubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(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}(hj.hhhNhNubah}(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}(hjAhhhNhNubah}(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.}(hjUhhhNhNubah}(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&]uh1jhjwhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_kref_put (C function)c.tty_kref_puthNtauh1jhjwhhhNhNubj)}(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}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhM ubj)}(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&]hhuh1jhjhhhjhM ubj )}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]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&] refdomainjOreftypejQ reftargetjmodnameN classnameNjUjX)}j[]j^)}jQjsbc.tty_kref_putasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj|hhhjhM ubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjyhhubj)}(hhh]h)}(hrelease a tty krefh]hrelease a tty kref}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chM hjA hhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhM ubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjj\ jj\ jjjuh1jhhhjwhNhNubj)}(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)}(hjf h]h Parameters}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chMhj` ubj)}(hhh]j)}(h&``struct tty_struct *tty`` tty device h](j)}(h``struct tty_struct *tty``h]j )}(hj h]hstruct tty_struct *tty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:32: ./drivers/tty/tty_io.chM hj ubj )}(hhh]h)}(h tty deviceh]h tty device}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM hj| ubah}(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:32: ./drivers/tty/tty_io.chMhj` 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.chMhj` ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjwhhhNhNubeh}(h]jFah ]h"]reference countingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hInstallh]hInstall}(hj hhhNhNubah}(h]h ]h"]h$]h&]jjbuh1hhj 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}(hjP hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL 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}(hjl hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjh ubj)}(h h]h }(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh ubh)}(hhh]j)}(h tty_driverh]h tty_driver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetj modnameN classnameNjUjX)}j[]j^)}jQjR sbc.tty_standard_installasbuh1hhjh ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh ubjr)}(hjuh]h*}(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjh ubj)}(hdriverh]hdriver}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjd ubj)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j%ah"]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&] refdomainjOreftypejQ reftargetj modnameN classnameNjUjX)}j[]j c.tty_standard_installasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjr)}(hjuh]h*}(hj( hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj ubj)}(httyh]htty}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjd ubeh}(h]h ]h"]h$]h&]hhuh1j hj+ 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}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:38: ./drivers/tty/tty_io.chMhj\ hhubah}(h]h ]h"]h$]h&]uh1jhj$ hhhj= hMubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjjw jjw 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)}(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:38: ./drivers/tty/tty_io.chMhj{ 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&]uh1j hj 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&]uh1jhj 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&]uh1j hj 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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMhj 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:38: ./drivers/tty/tty_io.chMhj{ 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}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj* ubh overrides }(hj* hhhNhNubj)}(h**tty->ops->install**h]htty->ops->install}(hjD 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.chMhj{ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhj hhhNhNubeh}(h]jhah ]h"]installah$]h&]uh1hhhhhhhhK$ubh)}(hhh](h)}(h Read & Writeh]h Read & Write}(hjn hhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjk hhhhhK*ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_put_char (C function)c.tty_put_charhNtauh1jhjk 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.chMB ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hMB 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 hMB ubj )}(h(struct tty_struct *tty, u8 ch)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]j%ah"]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&] refdomainjOreftypejQ reftargetj modnameN classnameNjUjX)}j[]j^)}jQj sbc.tty_put_charasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjr)}(hjuh]h*}(hj hhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj 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}(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjD ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetjI modnameN classnameNjUjX)}j[]j c.tty_put_charasbuh1hhj@ ubj)}(h h]h }(hje hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubj)}(hchh]hch}(hjs hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1j hj hhhj hMB ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj hMB ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj hMB hj 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.chMB hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMB ubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjj jj jjjuh1jhhhjk 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.chMF 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&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMC hj ubj )}(hhh]h)}(httyh]htty}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMC hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hMC hj ubj)}(h``u8 ch`` character to write h](j)}(h ``u8 ch``h]j )}(hjh]hu8 ch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMD hjubj )}(hhh]h)}(hcharacter to writeh]hcharacter to write}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hMD hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hMD hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjRh]h Description}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chMF 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 }(hjhhhhNhNubj)}(h**tty**h]htty}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh using the provided }(hjhhhhNhNubj)}(h**tty->ops->put_char\(\)**h]htty->ops->put_char()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubh method if present.}(hjhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:44: ./drivers/tty/tty_io.chME 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.chMH 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.chMI 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.chML 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.chML hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjk hhhNhNubeh}(h]jah ]h"] read & writeah$]h&]uh1hhhhhhhhK*ubh)}(hhh](h)}(h Start & Stoph]h Start & Stop}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhK0ubj)}(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&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj/hMubj)}(hstop_ttyh]j)}(hstop_ttyh]hstop_tty}(hjBhhhNhNubah}(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}(hj^hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjZubj)}(h h]h }(hjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetj~modnameN classnameNjUjX)}j[]j^)}jQjDsb c.stop_ttyasbuh1hhjZubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjZubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjVubah}(h]h ]h"]h$]h&]hhuh1j hjhhhj/hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj/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 ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjhNhNubj)}(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 )}(hj"h]hstruct tty_struct *tty}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj 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&]uh1hhj7hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(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: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 }(hjshhhNhNubh)}(h+:c:type:`tty_driver->stop\(\) `h]j )}(hj}h]htty_driver->stop()}(hjhhhNhNubah}(h]h ](xrefjOc-typeeh"]h$]h&]uh1j hj{ubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/tty_struct refdomainjOreftypetype refexplicitrefwarnjUjX)}j[]sb reftarget tty_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjsubh method.}(hjshhhNhNubeh}(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&]uh1j hjubh 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&]uh1jhjubeh}(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}(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.chM ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj4hM ubj)}(h start_ttyh]j)}(h start_ttyh]h start_tty}(hjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubah}(h]h ](jjeh"]h$]h&]hhuh1jhj"hhhj4hM ubj )}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhj_ubj)}(h h]h }(hjphhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetjmodnameN classnameNjUjX)}j[]j^)}jQjIsb c.start_ttyasbuh1hhj_ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhj_ubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj[ubah}(h]h ]h"]h$]h&]hhuh1j hj"hhhj4hM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjhhhj4hM ubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1jhj4hM hjhhubj)}(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.chM hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj4hM ubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjhNhNubj)}(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}(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: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 )}(hj'h]hstruct tty_struct *tty}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubah}(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&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hMhjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjbh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`ubah}(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 }(hjxhhhNhNubj)}(h**tty**h]htty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubh6 was previously stopped and is now being started, the }(hjxhhhNhNubh)}(h,:c:type:`tty_driver->start\(\) `h]j )}(hjh]htty_driver->start()}(hjhhhNhNubah}(h]h ](jjOc-typeeh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjj tty_driveruh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:50: ./drivers/tty/tty_io.chMhjxubh1 method is invoked and the line discipline woken.}(hjxhhhNhNubeh}(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&]uh1jhjubeh}(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&]jjuh1hhjhhhhhK6ubj)}(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}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*hhh^/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&]uh1jhj*hhhj<hMubj)}(h tty_wakeuph]j)}(h tty_wakeuph]h tty_wakeup}(hjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]hhuh1jhj*hhhj<hMubj )}(h(struct tty_struct *tty)h]j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjkhhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjgubj)}(h h]h }(hjxhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetjmodnameN classnameNjUjX)}j[]j^)}jQjQsb c.tty_wakeupasbuh1hhjgubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjgubj)}(httyh]htty}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjcubah}(h]h ]h"]h$]h&]hhuh1j hj*hhhj<hMubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj&hhhj<hMubah}(h]j!ah ](jjeh"]h$]h&]jj)jhuh1jhj<hMhj#hhubj)}(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&]uh1jhj#hhhj<hMubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjhNhNubj)}(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.chMhj ubj)}(hhh]j)}(h$``struct tty_struct *tty`` terminal h](j)}(h``struct tty_struct *tty``h]j )}(hj/h]hstruct tty_struct *tty}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj-ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhj)ubj )}(hhh]h)}(hterminalh]hterminal}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhMhjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhjDhMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjjh]h Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhj ubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:56: ./drivers/tty/tty_io.chMhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]wakeupah$]h&]uh1hhhhhhhhK6ubh)}(hhh](h)}(hHanguph]hHangup}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhjhhhhhKhhhNhNubah}(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.chMhj6ubj)}(hhh]j)}(h)``struct tty_struct *tty`` tty to hangup h](j)}(h``struct tty_struct *tty``h]j )}(hj[h]hstruct tty_struct *tty}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjYubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:62: ./drivers/tty/tty_io.chMhjUubj )}(hhh]h)}(h tty to hanguph]h tty to hangup}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1jhjphMhjRubah}(h]h ]h"]h$]h&]uh1jhj6ubh)}(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.chMhj6ubh)}(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.chMhj6ubeh}(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 ]j%ah"]h$]h&]uh1jhjubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hfileh]hfile}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetj8modnameN classnameNjUjX)}j[]j^)}jQjsbc.tty_hung_up_pasbuh1hhjubj)}(h h]h }(hjVhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hjdhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hfilph]hfilp}(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhMubeh}(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 ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjhNhNubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(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}(hj-hhhNhNubah}(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}(hjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:68: ./drivers/tty/tty_io.chM ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjphhhjhM ubj)}(h tty_do_resizeh]j)}(h tty_do_resizeh]h tty_do_resize}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjphhhjhM ubj )}(h,(struct tty_struct *tty, struct winsize *ws)h](j)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]j%ah"]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&] refdomainjOreftypejQ reftargetjmodnameN classnameNjUjX)}j[]j^)}jQjsbc.tty_do_resizeasbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hjhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(httyh]htty}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct winsize *wsh](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]j%ah"]h$]h&]uh1jhjubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j)}(hwinsizeh]hwinsize}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&] refdomainjOreftypejQ reftargetjCmodnameN classnameNjUjX)}j[]jc.tty_do_resizeasbuh1hhjubj)}(h h]h }(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjr)}(hjuh]h*}(hjmhhhNhNubah}(h]h ]j~ah"]h$]h&]uh1jqhjubj)}(hwsh]hws}(hjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1j hjphhhjhM ubeh}(h]h ]h"]h$]h&]hhjuh1jjjhjlhhhjhM ubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1jhjhM hjihhubj)}(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&]uh1jhjihhhjhM ubeh}(h]h ](jOfunctioneh"]h$]h&]jjOjjjjjjjuh1jhhhjJhNhNubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hjubj)}(h&``struct winsize *ws`` new dimensions h](j)}(h``struct winsize *ws``h]j )}(hjh]hstruct winsize *ws}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj4ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjYh]h Description}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubah}(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.}(hjohhhNhNubah}(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&]uh1jhjJhhhNhNubeh}(h]jah ]h"]miscah$]h&]uh1hhhhhhhhKBubh)}(hhh](h)}(hTTY Struct Flagsh]hTTY Struct Flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]jj.uh1hhjhhhhhKHubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jtty_struct_flags (C enum)c.tty_struct_flagshNtauh1jhjhhh]/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 ]j%ah"]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 ](jOenumeh"]h$]h&]jjOjjjjjjjuh1jhhhjhjhNubj)}(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}(hjhhhNhNubah}(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&]uh1j hj9ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj5ubj )}(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 }(hjThhhNhNubh)}(h#:c:member:`tty_driver.unthrottle()`h]j )}(hj^h]htty_driver.unthrottle()}(hj`hhhNhNubah}(h]h ](jjOc-membereh"]h$]h&]uh1j hj\ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypemember refexplicitrefwarnjUjjtty_driver.unthrottle()uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjTubhW in order to resume reception when it is ready to process more data (at threshold min).}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj{hMhjQubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1jhjPhMhj2ubj)}(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&]uh1j hjubah}(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)}(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&]uh1j hjubh. (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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj2ubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM hj2ubj)}(h9``TTY_EXCLUSIVE`` Exclusive open mode (a single opener). h](j)}(h``TTY_EXCLUSIVE``h]j )}(hjh]h TTY_EXCLUSIVE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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).}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhj2ubj)}(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 )}(hjVh]hTTY_DO_WRITE_WAKEUP}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjTubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjPubj )}(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 }(hjohhhNhNubh)}(h(:c:member:`tty_ldisc_ops.write_wakeup()`h]j )}(hjyh]htty_ldisc_ops.write_wakeup()}(hj{hhhNhNubah}(h]h ](jjOc-membereh"]h$]h&]uh1j hjwubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypemember refexplicitrefwarnjUjjtty_ldisc_ops.write_wakeup()uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjoubhQ method in order to resume transmission when it can accept more data to transmit.}(hjohhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjlubah}(h]h ]h"]h$]h&]uh1jhjPubeh}(h]h ]h"]h$]h&]uh1jhjkhMhj2ubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj2ubj)}(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&]uh1j hjubah}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh/}(hjhhhNhNubj )}(h``TIOCGPTLCK``h]h TIOCGPTLCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubh logic.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhj2ubj)}(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 )}(hjIh]hTTY_NO_WRITE_SPLIT}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjGubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhjCubj )}(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).}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhMhj_ubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1jhj^hMhj2ubj)}(hV``TTY_HUPPED`` The TTY was hung up. This is set post :c:member:`tty_driver.hangup()`. h](j)}(h``TTY_HUPPED``h]j )}(hjh]h TTY_HUPPED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j hjubah}(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)}(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 ](jjOc-membereh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypemember refexplicitrefwarnjUjjtty_driver.hangup()uh1hhjhM"hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM"hjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhM"hj2ubj)}(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&]uh1j hjubah}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM%hj2ubj)}(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&]uh1j hjubah}(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.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM(hj.ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj-hM)hj2ubj)}(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 )}(hjRh]hTTY_LDISC_HALTED}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1j hjPubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:74: ./include/linux/tty.hhM,hjLubj )}(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.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghM,hjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghM,hj2ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhjhNubh)}(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:74: ./include/linux/tty.hhM/hjhhubh)}(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 ](jjOc-membereh"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypemember refexplicitrefwarnjUjjtty_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&]uh1hhjhKhjhhubh)}(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.hhMhjhhubeh}(h]j4ah ]h"]tty struct flagsah$]h&]uh1hhhhhhhhKHubh)}(hhh](h)}(hTTY Struct Referenceh]hTTY Struct Reference}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjPuh1hhjhhhhhKNubj)}(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 ]j%ah"]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&]uh1jhj9 ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj* hKubeh}(h]h ]h"]h$]h&]hhjuh1jjjhj hhhj* hKubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1jhj* hKhj hhubj)}(hhh]h)}(h&state associated with a tty while openh]h&state associated with a tty while open}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKzhj\ hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj* hKubeh}(h]h ](jOstructeh"]h$]h&]jjOjjw jjw jjjuh1jhhhjhj hNubj)}(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}(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.hhK~hj{ 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.hhKhj{ 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.hhKhj{ 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&]uh1j hj 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&]uh1jhj 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&]uh1j hj!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&]uh1jhj!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 )}(hjS!h]hdev}(hjU!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjQ!ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjM!ubj )}(hhh]h)}(h,class device or ``NULL`` (e.g. ptys, serdev)h](hclass device or }(hjl!hhhNhNubj )}(h``NULL``h]hNULL}(hjt!hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjl!ubh (e.g. ptys, serdev)}(hjl!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjh!hKhji!ubah}(h]h ]h"]h$]h&]uh1jhjM!ubeh}(h]h ]h"]h$]h&]uh1jhjh!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&]uh1j hj!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 ](jjOc-typeeh"]h$]h&]uh1j hj!ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjj tty_driveruh1hhj!hKhj!ubh operating this tty}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!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&]uh1j hj!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 ](jjOc-typeeh"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjjtty_portuh1hhj "hKhj"ubh)}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj "hKhj "ubah}(h]h ]h"]h$]h&]uh1jhj!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 )}(hjR"h]hops}(hjT"hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjP"ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjL"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 )}(hjq"h]hstruct tty_operations}(hjs"hhhNhNubah}(h]h ](jjOc-typeeh"]h$]h&]uh1j hjo"ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjjtty_operationsuh1hhjg"hKhjk"ubh of }(hjk"hhhNhNubj)}(h **driver**h]hdriver}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk"ubh! for this tty (open, close, etc.)}(hjk"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjg"hKhjh"ubah}(h]h ]h"]h$]h&]uh1jhjL"ubeh}(h]h ]h"]h$]h&]uh1jhjg"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&]uh1j hj"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&]uh1jhj"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&]uh1j hj"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&]uh1jhj"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}(hjB#hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj>#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 }(hjY#hhhNhNubj)}(h **write_cnt**h]h write_cnt}(hja#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY#ubh, }(hjY#hhhNhNubj)}(h **write_buf**h]h write_buf}(hjs#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY#ubh and similar}(hjY#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjV#ubah}(h]h ]h"]h$]h&]uh1jhj:#ubeh}(h]h ]h"]h$]h&]uh1jhjU#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&]uh1j hj#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&]uh1jhj#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&]uh1j hj#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&]uh1jhj#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&]uh1j hj"$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}(hjE$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=$ubh and }(hj=$hhhNhNubj)}(h**termios_locked**h]htermios_locked}(hjW$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=$ubeh}(h]h ]h"]h$]h&]uh1hhj9$hKhj:$ubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhj9$hKhj ubj)}(h'``winsize_mutex`` protects **winsize** h](j)}(h``winsize_mutex``h]j )}(hj}$h]h winsize_mutex}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj{$ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjw$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&]uh1jhjw$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&]uh1j hj$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&]uh1jhj$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&]uh1j hj %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&]uh1j hj$%ubh and }(hj$%hhhNhNubj )}(h``TIOCSLCKTRMIOS``h]hTIOCSLCKTRMIOS}(hj>%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj$%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&]uh1jhj%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 )}(hji%h]hname}(hjk%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjg%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)}(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)}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhjc%ubeh}(h]h ]h"]h$]h&]uh1jhj~%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&]uh1j hj%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&]uh1j hj%ubh, }(hj%hhhNhNubj )}(h``TTY_IO_ERROR``h]h TTY_IO_ERROR}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj%ubh, ...}(hj%hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj%hKhj%ubah}(h]h ]h"]h$]h&]uh1jhj%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&]uh1j hj%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&]uh1jhj%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 )}(hjK&h]h receive_room}(hjM&hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjI&ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjE&ubj )}(hhh]h)}(h;bytes permitted to feed to **ldisc** without any being losth](hbytes permitted to feed to }(hjd&hhhNhNubj)}(h **ldisc**h]hldisc}(hjl&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd&ubh without any being lost}(hjd&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj`&hKhja&ubah}(h]h ]h"]h$]h&]uh1jhjE&ubeh}(h]h ]h"]h$]h&]uh1jhj`&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&]uh1j hj&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&]uh1jhj&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&]uh1j hj&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&]uh1jhj&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&]uh1j hj'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 }(hj3'hhhNhNubj)}(h**flow**h]hflow}(hj;'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3'ubh members}(hj3'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj/'hKhj0'ubah}(h]h ]h"]h$]h&]uh1jhj'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 )}(hje'h]h flow.stopped}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjc'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 stop_tty()/start_tty()h]h-tty stopped/started by stop_tty()/start_tty()}(hj~'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjz'hKhj{'ubah}(h]h ]h"]h$]h&]uh1jhj_'ubeh}(h]h ]h"]h$]h&]uh1jhjz'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&]uh1j hj'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&]uh1j hj'ubh/}(hj'hhhNhNubj )}(h ``TCOON``h]hTCOON}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj'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&]uh1jhj'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&]uh1j hj (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&]uh1jhj(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 )}(hjG(h]h ctrl.pgrp}(hjI(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjE(ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjA(ubj )}(hhh]h)}(h&process group of this tty (setpgrp(2))h]h&process group of this tty (setpgrp(2))}(hj`(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\(hKhj](ubah}(h]h ]h"]h$]h&]uh1jhjA(ubeh}(h]h ]h"]h$]h&]uh1jhj\(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 )}(hj(h]h ctrl.session}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj~(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)}(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&]uh1jhjz(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&]uh1j hj(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&]uh1jhj(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 I]h"]h$]h&]uh1j hj')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)}(h9packet mode status (bitwise OR of ``TIOCPKT_`` constants)h](h"packet mode status (bitwise OR of }(hjB)hhhNhNubj )}(h ``TIOCPKT_``h]hTIOCPKT_}(hjJ)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjB)ubh constants)}(hjB)hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj>)hKhj?)ubah}(h]h ]h"]h$]h&]uh1jhj#)ubeh}(h]h ]h"]h$]h&]uh1jhj>)hKhj ubj)}(h$``ctrl.packet`` packet mode enabled h](j)}(h``ctrl.packet``h]j )}(hjt)h]h ctrl.packet}(hjv)hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjr)ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjn)ubj )}(hhh]h)}(hpacket mode enabledh]hpacket mode enabled}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhjn)ubeh}(h]h ]h"]h$]h&]uh1jhj)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&]uh1j hj)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&]uh1jhj)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&]uh1j hj)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&]uh1jhj)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 )}(hj2*h]h flow_change}(hj4*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj0*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()}(hjK*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjH*ubah}(h]h ]h"]h$]h&]uh1jhj,*ubeh}(h]h ]h"]h$]h&]uh1jhjG*hKhj ubj)}(h>``link`` link to another pty (master -> slave and vice versa) h](j)}(h``link``h]j )}(hjl*h]hlink}(hjn*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjj*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)}(h4link to another pty (master -> slave and vice versa)h]h4link to another pty (master -> slave and vice versa)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhjf*ubeh}(h]h ]h"]h$]h&]uh1jhj*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&]uh1j hj*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&]uh1j hj*ubh (for }(hj*hhhNhNubj )}(h ``SIGIO``h]hSIGIO}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj*ubh); managed by fasync_helper()}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*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&]uh1j hj+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&]uh1jhj*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&]uh1j hj:+ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhj6+ubj )}(hhh]h)}(h#readers wait for data in this queueh]h#readers wait for data in this queue}(hjU+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ+hKhjR+ubah}(h]h ]h"]h$]h&]uh1jhj6+ubeh}(h]h ]h"]h$]h&]uh1jhjQ+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 )}(hju+h]h hangup_work}(hjw+hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjs+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)}(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()}(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&]uh1jhjo+ubeh}(h]h ]h"]h$]h&]uh1jhj+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&]uh1j hj+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 ](jjOc-typeeh"]h$]h&]uh1j hj+ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjj n_tty_datauh1hhj+hKhj+ubh)}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jhj+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&]uh1j hj,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 }(hj6,hhhNhNubj)}(h **driver**h]hdriver}(hj>,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6,ubh’s private data (e.g. }(hj6,hhhNhNubh)}(h(:c:type:`struct uart_state `h]j )}(hjR,h]hstruct uart_state}(hjT,hhhNhNubah}(h]h ](jjOc-typeeh"]h$]h&]uh1j hjP,ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjj uart_stateuh1hhj2,hKhj6,ubh)}(hj6,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj2,hKhj3,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj2,hKhj ubj)}(h+``files_lock`` protects **tty_files** list h](j)}(h``files_lock``h]j )}(hj,h]h files_lock}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj,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)}(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&]uh1jhj,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&]uh1j hj,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&]uh1jhj,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&]uh1j hj-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}(hj6-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2-hKhj3-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj2-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 )}(hjV-h]h tty_files}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1j hjT-ubah}(h]h ]h"]h$]h&]uh1jh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjP-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 }(hjo-hhhNhNubh)}(h4:c:type:`struct tty_file_private `h]j )}(hjy-h]hstruct tty_file_private}(hj{-hhhNhNubah}(h]h ](jjOc-typeeh"]h$]h&]uh1j hjw-ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjjtty_file_privateuh1hh]/var/lib/git/docbuild/linux/Documentation/driver-api/tty/tty_struct:80: ./include/linux/tty.hhKhjo-ubh)}(hjo-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj-hKhjl-ubah}(h]h ]h"]h$]h&]uh1jhjP-ubeh}(h]h ]h"]h$]h&]uh1jhjk-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&]uh1j hj-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&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-hKhj ubeh}(h]h ]h"]h$]h&]uh1jhj{ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhj hNubh)}(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 ](jjOc-typeeh"]h$]h&]uh1j hj&.ubah}(h]h ]h"]h$]h&]refdocj refdomainjOreftypetype refexplicitrefwarnjUjjtty_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&]uh1hhjE.hKhjhhubeh}(h]jVah ]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_handlerj.error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _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]j{asrefids}nameids}(j].jZ.jpjkjjjtj$j jFjh jhjjjjjjjGjjjjj4jT.jVu nametypes}(j].jpjjtj jh jjjjGjjjT.uh}(jZ.hjkhjjjjj$jjjjFjwjjjwj|jhj j" j' jjk j j jjjjjjjjj!j&jjjjjMjRjjjjJjgjlj4jjjjVjj j hhjjj@j7jbjYjj{jjjjjjj jj.j%jPjGu 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.