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/consolemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/zh_TW/driver-api/tty/consolemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/it_IT/driver-api/tty/consolemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ja_JP/driver-api/tty/consolemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/ko_KR/driver-api/tty/consolemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/sp_SP/driver-api/tty/consolemodnameN 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:spacepreserveuh1hhhhhhD/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console.rsthKubhsection)}(hhh](htitle)}(hConsoleh]hConsole}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtopic)}(hhh]h bullet_list)}(hhh](h list_item)}(hhh](h paragraph)}(hhh]h reference)}(hhh]hStruct Console}(hhhhhNhNubah}(h]id2ah ]h"]h$]h&]refidstruct-consoleuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]h)}(hhh]h Internals}(hhhhhNhNubah}(h]id3ah ]h"]h$]h&]refid internalsuh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh]h)}(hhh]h)}(hhh]h Struct Consw}(hj,hhhNhNubah}(h]id4ah ]h"]h$]h&]refid struct-conswuh1hhj)ubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1hhhubh)}(hhh](h)}(hhh]h)}(hhh]hConsole functions}(hjNhhhNhNubah}(h]id5ah ]h"]h$]h&]refidconsole-functionsuh1hhjKubah}(h]h ]h"]h$]h&]uh1hhjHubh)}(hhh]h)}(hhh]h)}(hhh]h)}(hhh]h Internals}(hjmhhhNhNubah}(h]id6ah ]h"]h$]h&]refidid1uh1hhjjubah}(h]h ]h"]h$]h&]uh1hhjgubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1hhjHubeh}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhNhNubah}(h]contentsah ](contentslocaleh"]contentsah$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hStruct Consoleh]hStruct Console}(hjhhhNhNubah}(h]h ]h"]h$]h&]refidhuh1hhjhhhhhK ubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlecons_flags (C enum) c.cons_flagshNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(h cons_flagsh]hdesc_signature_line)}(henum cons_flagsh](hdesc_sig_keyword)}(henumh]henum}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKubhdesc_sig_space)}(h h]h }(hjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(h cons_flagsh]h desc_sig_name)}(hjh]h cons_flags}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjhKubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjhKhjhhubh desc_content)}(hhh]h)}(hGeneral console flagsh]hGeneral console flags}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhj0hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainjKobjtypejLdesctypejLnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX***Constants** ``CON_PRINTBUFFER`` Used by newly registered consoles to avoid duplicate output of messages that were already shown by boot consoles or read by userspace via syslog() syscall. ``CON_CONSDEV`` Indicates that the console driver is backing /dev/console. ``CON_ENABLED`` Indicates if a console is allowed to print records. If false, the console also will not advance to later records. ``CON_BOOT`` Marks the console driver as early console driver which is used during boot before the real driver becomes available. It will be automatically unregistered when the real console driver is registered unless "keep_bootcon" parameter is used. ``CON_ANYTIME`` A misnomed historical flag which tells the core code that the legacy **console**::write callback can be invoked on a CPU which is marked OFFLINE. That is misleading as it suggests that there is no contextual limit for invoking the callback. The original motivation was readiness of the per-CPU areas. ``CON_BRL`` Indicates a braille device which is exempt from receiving the printk spam for obvious reasons. ``CON_EXTENDED`` The console supports the extended output format of /dev/kmesg which requires a larger output buffer. ``CON_SUSPENDED`` Indicates if a console is suspended. If true, the printing callbacks must not be called. ``CON_NBCON`` Console can operate outside of the legacy style console_lock constraints. ``CON_NBCON_ATOMIC_UNSAFE`` The write_atomic() callback is not safe and is therefore only used by nbcon_atomic_flush_unsafe().h](h)}(h **Constants**h]hstrong)}(hj^h]h Constants}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj\ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjXubhdefinition_list)}(hhh](hdefinition_list_item)}(h``CON_PRINTBUFFER`` Used by newly registered consoles to avoid duplicate output of messages that were already shown by boot consoles or read by userspace via syslog() syscall. h](hterm)}(h``CON_PRINTBUFFER``h]hliteral)}(hjh]hCON_PRINTBUFFER}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhj}ubh definition)}(hhh]h)}(hUsed by newly registered consoles to avoid duplicate output of messages that were already shown by boot consoles or read by userspace via syslog() syscall.h]hUsed by newly registered consoles to avoid duplicate output of messages that were already shown by boot consoles or read by userspace via syslog() syscall.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(hK``CON_CONSDEV`` Indicates that the console driver is backing /dev/console. h](j)}(h``CON_CONSDEV``h]j)}(hjh]h CON_CONSDEV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubj)}(hhh]h)}(h:Indicates that the console driver is backing /dev/console.h]h:Indicates that the console driver is backing /dev/console.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(h``CON_ENABLED`` Indicates if a console is allowed to print records. If false, the console also will not advance to later records. h](j)}(h``CON_ENABLED``h]j)}(hjh]h CON_ENABLED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubj)}(hhh]h)}(hqIndicates if a console is allowed to print records. If false, the console also will not advance to later records.h]hqIndicates if a console is allowed to print records. If false, the console also will not advance to later records.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(h``CON_BOOT`` Marks the console driver as early console driver which is used during boot before the real driver becomes available. It will be automatically unregistered when the real console driver is registered unless "keep_bootcon" parameter is used. h](j)}(h ``CON_BOOT``h]j)}(hj7h]hCON_BOOT}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhj1ubj)}(hhh]h)}(hMarks the console driver as early console driver which is used during boot before the real driver becomes available. It will be automatically unregistered when the real console driver is registered unless "keep_bootcon" parameter is used.h]hMarks the console driver as early console driver which is used during boot before the real driver becomes available. It will be automatically unregistered when the real console driver is registered unless “keep_bootcon” parameter is used.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1j{hjLhKhjxubj|)}(hX=``CON_ANYTIME`` A misnomed historical flag which tells the core code that the legacy **console**::write callback can be invoked on a CPU which is marked OFFLINE. That is misleading as it suggests that there is no contextual limit for invoking the callback. The original motivation was readiness of the per-CPU areas. h](j)}(h``CON_ANYTIME``h]j)}(hjqh]h CON_ANYTIME}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjkubj)}(hhh]h)}(hX,A misnomed historical flag which tells the core code that the legacy **console**::write callback can be invoked on a CPU which is marked OFFLINE. That is misleading as it suggests that there is no contextual limit for invoking the callback. The original motivation was readiness of the per-CPU areas.h](hEA misnomed historical flag which tells the core code that the legacy }(hjhhhNhNubja)}(h **console**h]hconsole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh::write callback can be invoked on a CPU which is marked OFFLINE. That is misleading as it suggests that there is no contextual limit for invoking the callback. The original motivation was readiness of the per-CPU areas.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(hk``CON_BRL`` Indicates a braille device which is exempt from receiving the printk spam for obvious reasons. h](j)}(h ``CON_BRL``h]j)}(hjh]hCON_BRL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubj)}(hhh]h)}(h^Indicates a braille device which is exempt from receiving the printk spam for obvious reasons.h]h^Indicates a braille device which is exempt from receiving the printk spam for obvious reasons.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(hv``CON_EXTENDED`` The console supports the extended output format of /dev/kmesg which requires a larger output buffer. h](j)}(h``CON_EXTENDED``h]j)}(hjh]h CON_EXTENDED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubj)}(hhh]h)}(hdThe console supports the extended output format of /dev/kmesg which requires a larger output buffer.h]hdThe console supports the extended output format of /dev/kmesg which requires a larger output buffer.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj hKhjxubj|)}(hk``CON_SUSPENDED`` Indicates if a console is suspended. If true, the printing callbacks must not be called. h](j)}(h``CON_SUSPENDED``h]j)}(hj1h]h CON_SUSPENDED}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhj+ubj)}(hhh]h)}(hXIndicates if a console is suspended. If true, the printing callbacks must not be called.h]hXIndicates if a console is suspended. If true, the printing callbacks must not be called.}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjGubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1j{hjFhKhjxubj|)}(hX``CON_NBCON`` Console can operate outside of the legacy style console_lock constraints. h](j)}(h ``CON_NBCON``h]j)}(hjkh]h CON_NBCON}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjeubj)}(hhh]h)}(hIConsole can operate outside of the legacy style console_lock constraints.h]hIConsole can operate outside of the legacy style console_lock constraints.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubj|)}(h~``CON_NBCON_ATOMIC_UNSAFE`` The write_atomic() callback is not safe and is therefore only used by nbcon_atomic_flush_unsafe().h](j)}(h``CON_NBCON_ATOMIC_UNSAFE``h]j)}(hjh]hCON_NBCON_ATOMIC_UNSAFE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjubj)}(hhh]h)}(hbThe write_atomic() callback is not safe and is therefore only used by nbcon_atomic_flush_unsafe().h]hbThe write_atomic() callback is not safe and is therefore only used by nbcon_atomic_flush_unsafe().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjxubeh}(h]h ]h"]h$]h&]uh1jvhjXubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jconsole (C struct) c.consolehNtauh1jhjhhhNhNubj)}(hhh](j)}(hconsoleh]j)}(hstruct consoleh](j)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj hKubj)}(hconsoleh]j)}(hjh]hconsole}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjhhhj hKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj hKhjhhubj/)}(hhh]h)}(h The console descriptor structureh]h The console descriptor structure}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM6hj>hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhj hKubeh}(h]h ](jKstructeh"]h$]h&]jPjKjQjYjRjYjSjTjUuh1jhhhjhNhNubjW)}(hX**Definition**:: struct console { char name[16]; void (*write)(struct console *co, const char *s, unsigned int count); int (*read)(struct console *co, char *s, unsigned int count); struct tty_driver *(*device)(struct console *co, int *index); void (*unblank)(void); int (*setup)(struct console *co, char *options); int (*exit)(struct console *co); int (*match)(struct console *co, char *name, int idx, char *options); short flags; short index; int cflag; uint ispeed; uint ospeed; u64 seq; unsigned long dropped; void *data; struct hlist_node node; void (*write_atomic)(struct console *con, struct nbcon_write_context *wctxt); void (*write_thread)(struct console *con, struct nbcon_write_context *wctxt); void (*device_lock)(struct console *con, unsigned long *flags); void (*device_unlock)(struct console *con, unsigned long flags); atomic_t nbcon_state; atomic_long_t nbcon_seq; struct nbcon_context nbcon_device_ctxt; atomic_long_t nbcon_prev_seq; struct printk_buffers *pbufs; struct task_struct *kthread; struct rcuwait rcuwait; struct irq_work irq_work; }; **Members** ``name`` The name of the console driver ``write`` Legacy write callback to output messages (Optional) ``read`` Read callback for console input (Optional) ``device`` The underlying TTY device driver (Optional) ``unblank`` Callback to unblank the console (Optional) ``setup`` Callback for initializing the console (Optional) ``exit`` Callback for teardown of the console (Optional) ``match`` Callback for matching a console (Optional) ``flags`` Console flags. See enum cons_flags ``index`` Console index, e.g. port number ``cflag`` TTY control mode flags ``ispeed`` TTY input speed ``ospeed`` TTY output speed ``seq`` Sequence number of the next ringbuffer record to print ``dropped`` Number of unreported dropped ringbuffer records ``data`` Driver private data ``node`` hlist node for the console list ``write_atomic`` NBCON callback to write out text in any context. (Optional) This callback is called with the console already acquired. However, a higher priority context is allowed to take it over by default. The callback must call nbcon_enter_unsafe() and nbcon_exit_unsafe() around any code where the takeover is not safe, for example, when manipulating the serial port registers. nbcon_enter_unsafe() will fail if the context has lost the console ownership in the meantime. In this case, the callback is no longer allowed to go forward. It must back out immediately and carefully. The buffer content is also no longer trusted since it no longer belongs to the context. The callback should allow the takeover whenever it is safe. It increases the chance to see messages when the system is in trouble. If the driver must reacquire ownership in order to finalize or revert hardware changes, nbcon_reacquire_nobuf() can be used. However, on reacquire the buffer content is no longer available. A reacquire cannot be used to resume printing. The callback can be called from any context (including NMI). Therefore it must avoid usage of any locking and instead rely on the console ownership for synchronization. ``write_thread`` NBCON callback to write out text in task context. This callback must be called only in task context with both device_lock() and the nbcon console acquired with NBCON_PRIO_NORMAL. The same rules for console ownership verification and unsafe sections handling applies as with write_atomic(). The console ownership handling is necessary for synchronization against write_atomic() which is synchronized only via the context. The device_lock() provides the primary serialization for operations on the device. It might be as relaxed (mutex)[*] or as tight (disabled preemption and interrupts) as needed. It allows the kthread to operate in the least restrictive mode[**]. [*] Standalone nbcon_context_try_acquire() is not safe with the preemption enabled, see nbcon_owner_matches(). But it can be safe when always called in the preemptive context under the device_lock(). [**] The device_lock() makes sure that nbcon_context_try_acquire() would never need to spin which is important especially with PREEMPT_RT. ``device_lock`` NBCON callback to begin synchronization with driver code. Console drivers typically must deal with access to the hardware via user input/output (such as an interactive login shell) and output of kernel messages via printk() calls. This callback is called by the printk-subsystem whenever it needs to synchronize with hardware access by the driver. It should be implemented to use whatever synchronization mechanism the driver is using for itself (for example, the port lock for uart serial consoles). The callback is always called from task context. It may use any synchronization method required by the driver. IMPORTANT: The callback MUST disable migration. The console driver may be using a synchronization mechanism that already takes care of this (such as spinlocks). Otherwise this function must explicitly call migrate_disable(). The flags argument is provided as a convenience to the driver. It will be passed again to device_unlock(). It can be ignored if the driver does not need it. ``device_unlock`` NBCON callback to finish synchronization with driver code. It is the counterpart to device_lock(). This callback is always called from task context. It must appropriately re-enable migration (depending on how device_lock() disabled migration). The flags argument is the value of the same variable that was passed to device_lock(). ``nbcon_state`` State for nbcon consoles ``nbcon_seq`` Sequence number of the next record for nbcon to print ``nbcon_device_ctxt`` Context available for non-printing operations ``nbcon_prev_seq`` Seq num the previous nbcon owner was assigned to print ``pbufs`` Pointer to nbcon private buffer ``kthread`` Printer kthread for this console ``rcuwait`` RCU-safe wait object for **kthread** waking ``irq_work`` Defer **kthread** waking to IRQ work contexth](h)}(h**Definition**::h](ja)}(h**Definition**h]h Definition}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjaubh:}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM:hj]ubh literal_block)}(hXstruct console { char name[16]; void (*write)(struct console *co, const char *s, unsigned int count); int (*read)(struct console *co, char *s, unsigned int count); struct tty_driver *(*device)(struct console *co, int *index); void (*unblank)(void); int (*setup)(struct console *co, char *options); int (*exit)(struct console *co); int (*match)(struct console *co, char *name, int idx, char *options); short flags; short index; int cflag; uint ispeed; uint ospeed; u64 seq; unsigned long dropped; void *data; struct hlist_node node; void (*write_atomic)(struct console *con, struct nbcon_write_context *wctxt); void (*write_thread)(struct console *con, struct nbcon_write_context *wctxt); void (*device_lock)(struct console *con, unsigned long *flags); void (*device_unlock)(struct console *con, unsigned long flags); atomic_t nbcon_state; atomic_long_t nbcon_seq; struct nbcon_context nbcon_device_ctxt; atomic_long_t nbcon_prev_seq; struct printk_buffers *pbufs; struct task_struct *kthread; struct rcuwait rcuwait; struct irq_work irq_work; };h]hXstruct console { char name[16]; void (*write)(struct console *co, const char *s, unsigned int count); int (*read)(struct console *co, char *s, unsigned int count); struct tty_driver *(*device)(struct console *co, int *index); void (*unblank)(void); int (*setup)(struct console *co, char *options); int (*exit)(struct console *co); int (*match)(struct console *co, char *name, int idx, char *options); short flags; short index; int cflag; uint ispeed; uint ospeed; u64 seq; unsigned long dropped; void *data; struct hlist_node node; void (*write_atomic)(struct console *con, struct nbcon_write_context *wctxt); void (*write_thread)(struct console *con, struct nbcon_write_context *wctxt); void (*device_lock)(struct console *con, unsigned long *flags); void (*device_unlock)(struct console *con, unsigned long flags); atomic_t nbcon_state; atomic_long_t nbcon_seq; struct nbcon_context nbcon_device_ctxt; atomic_long_t nbcon_prev_seq; struct printk_buffers *pbufs; struct task_struct *kthread; struct rcuwait rcuwait; struct irq_work irq_work; };}hjsbah}(h]h ]h"]h$]h&]hhuh1j~h^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM<hj]ubh)}(h **Members**h]ja)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM\hj]ubjw)}(hhh](j|)}(h(``name`` The name of the console driver h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM8hjubj)}(hhh]h)}(hThe name of the console driverh]hThe name of the console driver}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM8hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM8hjubj|)}(h>``write`` Legacy write callback to output messages (Optional) h](j)}(h ``write``h]j)}(hjh]hwrite}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM9hjubj)}(hhh]h)}(h3Legacy write callback to output messages (Optional)h]h3Legacy write callback to output messages (Optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM9hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM9hjubj|)}(h4``read`` Read callback for console input (Optional) h](j)}(h``read``h]j)}(hj"h]hread}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM:hjubj)}(hhh]h)}(h*Read callback for console input (Optional)h]h*Read callback for console input (Optional)}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hM:hj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj7hM:hjubj|)}(h7``device`` The underlying TTY device driver (Optional) h](j)}(h ``device``h]j)}(hj[h]hdevice}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM;hjUubj)}(hhh]h)}(h+The underlying TTY device driver (Optional)h]h+The underlying TTY device driver (Optional)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphM;hjqubah}(h]h ]h"]h$]h&]uh1jhjUubeh}(h]h ]h"]h$]h&]uh1j{hjphM;hjubj|)}(h7``unblank`` Callback to unblank the console (Optional) h](j)}(h ``unblank``h]j)}(hjh]hunblank}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM<hjubj)}(hhh]h)}(h*Callback to unblank the console (Optional)h]h*Callback to unblank the console (Optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM<hjubj|)}(h;``setup`` Callback for initializing the console (Optional) h](j)}(h ``setup``h]j)}(hjh]hsetup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM=hjubj)}(hhh]h)}(h0Callback for initializing the console (Optional)h]h0Callback for initializing the console (Optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM=hjubj|)}(h9``exit`` Callback for teardown of the console (Optional) h](j)}(h``exit``h]j)}(hjh]hexit}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM>hjubj)}(hhh]h)}(h/Callback for teardown of the console (Optional)h]h/Callback for teardown of the console (Optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM>hjubj|)}(h5``match`` Callback for matching a console (Optional) h](j)}(h ``match``h]j)}(hj?h]hmatch}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM?hj9ubj)}(hhh]h)}(h*Callback for matching a console (Optional)h]h*Callback for matching a console (Optional)}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThM?hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]uh1j{hjThM?hjubj|)}(h-``flags`` Console flags. See enum cons_flags h](j)}(h ``flags``h]j)}(hjxh]hflags}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM@hjrubj)}(hhh]h)}(h"Console flags. See enum cons_flagsh]h"Console flags. See enum cons_flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM@hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1j{hjhM@hjubj|)}(h*``index`` Console index, e.g. port number h](j)}(h ``index``h]j)}(hjh]hindex}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMAhjubj)}(hhh]h)}(hConsole index, e.g. port numberh]hConsole index, e.g. port number}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMAhjubj|)}(h!``cflag`` TTY control mode flags h](j)}(h ``cflag``h]j)}(hjh]hcflag}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMBhjubj)}(hhh]h)}(hTTY control mode flagsh]hTTY control mode flags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMBhjubj|)}(h``ispeed`` TTY input speed h](j)}(h ``ispeed``h]j)}(hj#h]hispeed}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMChjubj)}(hhh]h)}(hTTY input speedh]hTTY input speed}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMChj9ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj8hMChjubj|)}(h``ospeed`` TTY output speed h](j)}(h ``ospeed``h]j)}(hj\h]hospeed}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMDhjVubj)}(hhh]h)}(hTTY output speedh]hTTY output speed}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhMDhjrubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1j{hjqhMDhjubj|)}(h?``seq`` Sequence number of the next ringbuffer record to print h](j)}(h``seq``h]j)}(hjh]hseq}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMEhjubj)}(hhh]h)}(h6Sequence number of the next ringbuffer record to printh]h6Sequence number of the next ringbuffer record to print}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMEhjubj|)}(h<``dropped`` Number of unreported dropped ringbuffer records h](j)}(h ``dropped``h]j)}(hjh]hdropped}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMFhjubj)}(hhh]h)}(h/Number of unreported dropped ringbuffer recordsh]h/Number of unreported dropped ringbuffer records}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMFhjubj|)}(h``data`` Driver private data h](j)}(h``data``h]j)}(hj h]hdata}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMGhj ubj)}(hhh]h)}(hDriver private datah]hDriver private data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMGhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMGhjubj|)}(h)``node`` hlist node for the console list h](j)}(h``node``h]j)}(hj@ h]hnode}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj> ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMHhj: ubj)}(hhh]h)}(hhlist node for the console listh]hhlist node for the console list}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU hMHhjV ubah}(h]h ]h"]h$]h&]uh1jhj: ubeh}(h]h ]h"]h$]h&]uh1j{hjU hMHhjubj|)}(hX``write_atomic`` NBCON callback to write out text in any context. (Optional) This callback is called with the console already acquired. However, a higher priority context is allowed to take it over by default. The callback must call nbcon_enter_unsafe() and nbcon_exit_unsafe() around any code where the takeover is not safe, for example, when manipulating the serial port registers. nbcon_enter_unsafe() will fail if the context has lost the console ownership in the meantime. In this case, the callback is no longer allowed to go forward. It must back out immediately and carefully. The buffer content is also no longer trusted since it no longer belongs to the context. The callback should allow the takeover whenever it is safe. It increases the chance to see messages when the system is in trouble. If the driver must reacquire ownership in order to finalize or revert hardware changes, nbcon_reacquire_nobuf() can be used. However, on reacquire the buffer content is no longer available. A reacquire cannot be used to resume printing. The callback can be called from any context (including NMI). Therefore it must avoid usage of any locking and instead rely on the console ownership for synchronization. h](j)}(h``write_atomic``h]j)}(hjy h]h write_atomic}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhjs ubj)}(hhh](h)}(h;NBCON callback to write out text in any context. (Optional)h]h;NBCON callback to write out text in any context. (Optional)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMihj ubh)}(hThis callback is called with the console already acquired. However, a higher priority context is allowed to take it over by default.h]hThis callback is called with the console already acquired. However, a higher priority context is allowed to take it over by default.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMkhj ubh)}(hThe callback must call nbcon_enter_unsafe() and nbcon_exit_unsafe() around any code where the takeover is not safe, for example, when manipulating the serial port registers.h]hThe callback must call nbcon_enter_unsafe() and nbcon_exit_unsafe() around any code where the takeover is not safe, for example, when manipulating the serial port registers.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMnhj ubh)}(hX nbcon_enter_unsafe() will fail if the context has lost the console ownership in the meantime. In this case, the callback is no longer allowed to go forward. It must back out immediately and carefully. The buffer content is also no longer trusted since it no longer belongs to the context.h]hX nbcon_enter_unsafe() will fail if the context has lost the console ownership in the meantime. In this case, the callback is no longer allowed to go forward. It must back out immediately and carefully. The buffer content is also no longer trusted since it no longer belongs to the context.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMrhj ubh)}(hXoThe callback should allow the takeover whenever it is safe. It increases the chance to see messages when the system is in trouble. If the driver must reacquire ownership in order to finalize or revert hardware changes, nbcon_reacquire_nobuf() can be used. However, on reacquire the buffer content is no longer available. A reacquire cannot be used to resume printing.h]hXoThe callback should allow the takeover whenever it is safe. It increases the chance to see messages when the system is in trouble. If the driver must reacquire ownership in order to finalize or revert hardware changes, nbcon_reacquire_nobuf() can be used. However, on reacquire the buffer content is no longer available. A reacquire cannot be used to resume printing.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMxhj ubh)}(hThe callback can be called from any context (including NMI). Therefore it must avoid usage of any locking and instead rely on the console ownership for synchronization.h]hThe callback can be called from any context (including NMI). Therefore it must avoid usage of any locking and instead rely on the console ownership for synchronization.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjs ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhjubj|)}(hX``write_thread`` NBCON callback to write out text in task context. This callback must be called only in task context with both device_lock() and the nbcon console acquired with NBCON_PRIO_NORMAL. The same rules for console ownership verification and unsafe sections handling applies as with write_atomic(). The console ownership handling is necessary for synchronization against write_atomic() which is synchronized only via the context. The device_lock() provides the primary serialization for operations on the device. It might be as relaxed (mutex)[*] or as tight (disabled preemption and interrupts) as needed. It allows the kthread to operate in the least restrictive mode[**]. [*] Standalone nbcon_context_try_acquire() is not safe with the preemption enabled, see nbcon_owner_matches(). But it can be safe when always called in the preemptive context under the device_lock(). [**] The device_lock() makes sure that nbcon_context_try_acquire() would never need to spin which is important especially with PREEMPT_RT. h](j)}(h``write_thread``h]j)}(hj h]h write_thread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubj)}(hhh](h)}(h1NBCON callback to write out text in task context.h]h1NBCON callback to write out text in task context.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hThis callback must be called only in task context with both device_lock() and the nbcon console acquired with NBCON_PRIO_NORMAL.h]hThis callback must be called only in task context with both device_lock() and the nbcon console acquired with NBCON_PRIO_NORMAL.}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hnThe same rules for console ownership verification and unsafe sections handling applies as with write_atomic().h]hnThe same rules for console ownership verification and unsafe sections handling applies as with write_atomic().}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hThe console ownership handling is necessary for synchronization against write_atomic() which is synchronized only via the context.h]hThe console ownership handling is necessary for synchronization against write_atomic() which is synchronized only via the context.}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hThe device_lock() provides the primary serialization for operations on the device. It might be as relaxed (mutex)[*] or as tight (disabled preemption and interrupts) as needed. It allows the kthread to operate in the least restrictive mode[**].h]hThe device_lock() provides the primary serialization for operations on the device. It might be as relaxed (mutex)[*] or as tight (disabled preemption and interrupts) as needed. It allows the kthread to operate in the least restrictive mode[**].}(hjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubjw)}(hhh](j|)}(h[*] Standalone nbcon_context_try_acquire() is not safe with the preemption enabled, see nbcon_owner_matches(). But it can be safe when always called in the preemptive context under the device_lock(). h](j)}(h;[*] Standalone nbcon_context_try_acquire() is not safe withh]h;[*] Standalone nbcon_context_try_acquire() is not safe with}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhje ubj)}(hhh]h)}(hthe preemption enabled, see nbcon_owner_matches(). But it can be safe when always called in the preemptive context under the device_lock().h]hthe preemption enabled, see nbcon_owner_matches(). But it can be safe when always called in the preemptive context under the device_lock().}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhjx ubah}(h]h ]h"]h$]h&]uh1jhje ubeh}(h]h ]h"]h$]h&]uh1j{hjw hMhjb ubj|)}(h[**] The device_lock() makes sure that nbcon_context_try_acquire() would never need to spin which is important especially with PREEMPT_RT. h](j)}(hB[**] The device_lock() makes sure that nbcon_context_try_acquire()h]hB[**] The device_lock() makes sure that nbcon_context_try_acquire()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hMhj ubj)}(hhh]h)}(hGwould never need to spin which is important especially with PREEMPT_RT.h]hGwould never need to spin which is important especially with PREEMPT_RT.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhjb ubeh}(h]h ]h"]h$]h&]uh1jvhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhjubj|)}(hX``device_lock`` NBCON callback to begin synchronization with driver code. Console drivers typically must deal with access to the hardware via user input/output (such as an interactive login shell) and output of kernel messages via printk() calls. This callback is called by the printk-subsystem whenever it needs to synchronize with hardware access by the driver. It should be implemented to use whatever synchronization mechanism the driver is using for itself (for example, the port lock for uart serial consoles). The callback is always called from task context. It may use any synchronization method required by the driver. IMPORTANT: The callback MUST disable migration. The console driver may be using a synchronization mechanism that already takes care of this (such as spinlocks). Otherwise this function must explicitly call migrate_disable(). The flags argument is provided as a convenience to the driver. It will be passed again to device_unlock(). It can be ignored if the driver does not need it. h](j)}(h``device_lock``h]j)}(hj h]h device_lock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubj)}(hhh](h)}(h9NBCON callback to begin synchronization with driver code.h]h9NBCON callback to begin synchronization with driver code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hXConsole drivers typically must deal with access to the hardware via user input/output (such as an interactive login shell) and output of kernel messages via printk() calls. This callback is called by the printk-subsystem whenever it needs to synchronize with hardware access by the driver. It should be implemented to use whatever synchronization mechanism the driver is using for itself (for example, the port lock for uart serial consoles).h]hXConsole drivers typically must deal with access to the hardware via user input/output (such as an interactive login shell) and output of kernel messages via printk() calls. This callback is called by the printk-subsystem whenever it needs to synchronize with hardware access by the driver. It should be implemented to use whatever synchronization mechanism the driver is using for itself (for example, the port lock for uart serial consoles).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hnThe callback is always called from task context. It may use any synchronization method required by the driver.h]hnThe callback is always called from task context. It may use any synchronization method required by the driver.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubjw)}(hhh]j|)}(hIMPORTANT: The callback MUST disable migration. The console driver may be using a synchronization mechanism that already takes care of this (such as spinlocks). Otherwise this function must explicitly call migrate_disable(). h](j)}(hBIMPORTANT: The callback MUST disable migration. The console driverh]hBIMPORTANT: The callback MUST disable migration. The console driver}(hj+ hhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj' ubj)}(hhh]h)}(hmay be using a synchronization mechanism that already takes care of this (such as spinlocks). Otherwise this function must explicitly call migrate_disable().h]hmay be using a synchronization mechanism that already takes care of this (such as spinlocks). Otherwise this function must explicitly call migrate_disable().}(hj= hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj: ubah}(h]h ]h"]h$]h&]uh1jhj' ubeh}(h]h ]h"]h$]h&]uh1j{hj9 hMhj$ ubah}(h]h ]h"]h$]h&]uh1jvhj ubh)}(hThe flags argument is provided as a convenience to the driver. It will be passed again to device_unlock(). It can be ignored if the driver does not need it.h]hThe flags argument is provided as a convenience to the driver. It will be passed again to device_unlock(). It can be ignored if the driver does not need it.}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhjubj|)}(hX```device_unlock`` NBCON callback to finish synchronization with driver code. It is the counterpart to device_lock(). This callback is always called from task context. It must appropriately re-enable migration (depending on how device_lock() disabled migration). The flags argument is the value of the same variable that was passed to device_lock(). h](j)}(h``device_unlock``h]j)}(hj h]h device_unlock}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj} ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhjy ubj)}(hhh](h)}(h:NBCON callback to finish synchronization with driver code.h]h:NBCON callback to finish synchronization with driver code.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(h'It is the counterpart to device_lock().h]h'It is the counterpart to device_lock().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hThis callback is always called from task context. It must appropriately re-enable migration (depending on how device_lock() disabled migration).h]hThis callback is always called from task context. It must appropriately re-enable migration (depending on how device_lock() disabled migration).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubh)}(hVThe flags argument is the value of the same variable that was passed to device_lock().h]hVThe flags argument is the value of the same variable that was passed to device_lock().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj ubeh}(h]h ]h"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]uh1j{hj hMhjubj|)}(h)``nbcon_state`` State for nbcon consoles h](j)}(h``nbcon_state``h]j)}(hj h]h nbcon_state}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMJhj ubj)}(hhh]h)}(hState for nbcon consolesh]hState for nbcon consoles}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMJhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMJhjubj|)}(hD``nbcon_seq`` Sequence number of the next record for nbcon to print h](j)}(h ``nbcon_seq``h]j)}(hj h]h nbcon_seq}(hj! hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMKhj ubj)}(hhh]h)}(h5Sequence number of the next record for nbcon to printh]h5Sequence number of the next record for nbcon to print}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4 hMKhj5 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj4 hMKhjubj|)}(hD``nbcon_device_ctxt`` Context available for non-printing operations h](j)}(h``nbcon_device_ctxt``h]j)}(hjX h]hnbcon_device_ctxt}(hjZ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMLhjR ubj)}(hhh]h)}(h-Context available for non-printing operationsh]h-Context available for non-printing operations}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm hMLhjn ubah}(h]h ]h"]h$]h&]uh1jhjR ubeh}(h]h ]h"]h$]h&]uh1j{hjm hMLhjubj|)}(hJ``nbcon_prev_seq`` Seq num the previous nbcon owner was assigned to print h](j)}(h``nbcon_prev_seq``h]j)}(hj h]hnbcon_prev_seq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMMhj ubj)}(hhh]h)}(h6Seq num the previous nbcon owner was assigned to printh]h6Seq num the previous nbcon owner was assigned to print}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMMhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMMhjubj|)}(h*``pbufs`` Pointer to nbcon private buffer h](j)}(h ``pbufs``h]j)}(hj h]hpbufs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMNhj ubj)}(hhh]h)}(hPointer to nbcon private bufferh]hPointer to nbcon private buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMNhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMNhjubj|)}(h-``kthread`` Printer kthread for this console h](j)}(h ``kthread``h]j)}(hj h]hkthread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMOhj ubj)}(hhh]h)}(h Printer kthread for this consoleh]h Printer kthread for this console}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMOhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMOhjubj|)}(h8``rcuwait`` RCU-safe wait object for **kthread** waking h](j)}(h ``rcuwait``h]j)}(hj< h]hrcuwait}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj: ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMPhj6 ubj)}(hhh]h)}(h+RCU-safe wait object for **kthread** wakingh](hRCU-safe wait object for }(hjU hhhNhNubja)}(h **kthread**h]hkthread}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjU ubh waking}(hjU hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjQ hMPhjR ubah}(h]h ]h"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]uh1j{hjQ hMPhjubj|)}(h9``irq_work`` Defer **kthread** waking to IRQ work contexth](j)}(h ``irq_work``h]j)}(hj h]hirq_work}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMPhj ubj)}(hhh]h)}(h,Defer **kthread** waking to IRQ work contexth](hDefer }(hj hhhNhNubja)}(h **kthread**h]hkthread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh waking to IRQ work context}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMQhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hMPhjubeh}(h]h ]h"]h$]h&]uh1jvhj]ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjhhhNhNubh)}(hhh](h)}(h Internalsh]h Internals}(hj hhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhj hhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jnbcon_state (C struct) c.nbcon_statehNtauh1jhj hhhNhNubj)}(hhh](j)}(h nbcon_stateh]j)}(hstruct nbcon_stateh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h nbcon_stateh]j)}(hj h]h nbcon_state}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj hhhjhKubah}(h]j ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjhKhj hhubj/)}(hhh]h)}(h console state for nbcon consolesh]h console state for nbcon consoles}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjChhubah}(h]h ]h"]h$]h&]uh1j.hj hhhjhKubeh}(h]h ](jKstructeh"]h$]h&]jPjKjQj^jRj^jSjTjUuh1jhhhj hNhNubjW)}(hX`**Definition**:: struct nbcon_state { union { unsigned int atom; struct { unsigned int prio : 2; unsigned int req_prio : 2; unsigned int unsafe : 1; unsigned int unsafe_takeover : 1; unsigned int cpu : 24; }; }; }; **Members** ``{unnamed_union}`` anonymous ``atom`` Compound of the state fields for atomic operations ``{unnamed_struct}`` anonymous ``prio`` The priority of the current owner ``req_prio`` The priority of a handover request ``unsafe`` Console is busy in a non takeover region ``unsafe_takeover`` A hostile takeover in an unsafe state happened in the past. The console cannot be safe until re-initialized. ``cpu`` The CPU on which the owner runsh](h)}(h**Definition**::h](ja)}(h**Definition**h]h Definition}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjfubh:}(hjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjbubj)}(hX^struct nbcon_state { union { unsigned int atom; struct { unsigned int prio : 2; unsigned int req_prio : 2; unsigned int unsafe : 1; unsigned int unsafe_takeover : 1; unsigned int cpu : 24; }; }; };h]hX^struct nbcon_state { union { unsigned int atom; struct { unsigned int prio : 2; unsigned int req_prio : 2; unsigned int unsafe : 1; unsigned int unsafe_takeover : 1; unsigned int cpu : 24; }; }; };}hjsbah}(h]h ]h"]h$]h&]hhuh1j~h^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjbubh)}(h **Members**h]ja)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjbubjw)}(hhh](j|)}(h``{unnamed_union}`` anonymous h](j)}(h``{unnamed_union}``h]j)}(hjh]h{unnamed_union}}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(h anonymoush]h anonymous}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h<``atom`` Compound of the state fields for atomic operations h](j)}(h``atom``h]j)}(hjh]hatom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(h2Compound of the state fields for atomic operationsh]h2Compound of the state fields for atomic operations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hj%h]h{unnamed_struct}}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(h anonymoush]h anonymous}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj:hKhjubj|)}(h+``prio`` The priority of the current owner h](j)}(h``prio``h]j)}(hj^h]hprio}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjXubj)}(hhh]h)}(h!The priority of the current ownerh]h!The priority of the current owner}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjshKhjtubah}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1j{hjshKhjubj|)}(h0``req_prio`` The priority of a handover request h](j)}(h ``req_prio``h]j)}(hjh]hreq_prio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(h"The priority of a handover requesth]h"The priority of a handover request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h4``unsafe`` Console is busy in a non takeover region h](j)}(h ``unsafe``h]j)}(hjh]hunsafe}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(h(Console is busy in a non takeover regionh]h(Console is busy in a non takeover region}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h``unsafe_takeover`` A hostile takeover in an unsafe state happened in the past. The console cannot be safe until re-initialized. h](j)}(h``unsafe_takeover``h]j)}(hj h]hunsafe_takeover}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(hlA hostile takeover in an unsafe state happened in the past. The console cannot be safe until re-initialized.h]hlA hostile takeover in an unsafe state happened in the past. The console cannot be safe until re-initialized.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h'``cpu`` The CPU on which the owner runsh](j)}(h``cpu``h]j)}(hjCh]hcpu}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj=ubj)}(hhh]h)}(hThe CPU on which the owner runsh]hThe CPU on which the owner runs}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1j{hjXhKhjubeh}(h]h ]h"]h$]h&]uh1jvhjbubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj hhhNhNubh)}(h**Description**h]ja)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj hhubh)}(hnTo be used for reading and preparing of the value stored in the nbcon state variable **console**::nbcon_state.h](hUTo be used for reading and preparing of the value stored in the nbcon state variable }(hjhhhNhNubja)}(h **console**h]hconsole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh::nbcon_state.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj hhubh)}(hThe **prio** and **req_prio** fields are particularly important to allow spin-waiting to timeout and give up without the risk of a waiter being assigned the lock after giving up.h](hThe }(hjhhhNhNubja)}(h**prio**h]hprio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh and }(hjhhhNhNubja)}(h **req_prio**h]hreq_prio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh fields are particularly important to allow spin-waiting to timeout and give up without the risk of a waiter being assigned the lock after giving up.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jnbcon_prio (C enum) c.nbcon_priohNtauh1jhj hhhNhNubj)}(hhh](j)}(h nbcon_prioh]j)}(henum nbcon_prioh](j)}(hjh]henum}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h nbcon_prioh]j)}(hjh]h nbcon_prio}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjhKhjhhubj/)}(hhh]h)}(h)console owner priority for nbcon consolesh]h)console owner priority for nbcon consoles}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjHhhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jKenumeh"]h$]h&]jPjKjQjcjRjcjSjTjUuh1jhhhj hNhNubjW)}(h**Constants** ``NBCON_PRIO_NONE`` Unused ``NBCON_PRIO_NORMAL`` Normal (non-emergency) usage ``NBCON_PRIO_EMERGENCY`` Emergency output (WARN/OOPS...) ``NBCON_PRIO_PANIC`` Panic output ``NBCON_PRIO_MAX`` The number of priority levelsh](h)}(h **Constants**h]ja)}(hjmh]h Constants}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjkubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjgubjw)}(hhh](j|)}(h``NBCON_PRIO_NONE`` Unused h](j)}(h``NBCON_PRIO_NONE``h]j)}(hjh]hNBCON_PRIO_NONE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(hUnusedh]hUnused}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h3``NBCON_PRIO_NORMAL`` Normal (non-emergency) usage h](j)}(h``NBCON_PRIO_NORMAL``h]j)}(hjh]hNBCON_PRIO_NORMAL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(hNormal (non-emergency) usageh]hNormal (non-emergency) usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h9``NBCON_PRIO_EMERGENCY`` Emergency output (WARN/OOPS...) h](j)}(h``NBCON_PRIO_EMERGENCY``h]j)}(hjh]hNBCON_PRIO_EMERGENCY}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjubj)}(hhh]h)}(hEmergency output (WARN/OOPS...)h]hEmergency output (WARN/OOPS...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubj|)}(h"``NBCON_PRIO_PANIC`` Panic output h](j)}(h``NBCON_PRIO_PANIC``h]j)}(hj7h]hNBCON_PRIO_PANIC}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj1ubj)}(hhh]h)}(h Panic outputh]h Panic output}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKhjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1j{hjLhKhjubj|)}(h0``NBCON_PRIO_MAX`` The number of priority levelsh](j)}(h``NBCON_PRIO_MAX``h]j)}(hjph]hNBCON_PRIO_MAX}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjjubj)}(hhh]h)}(hThe number of priority levelsh]hThe number of priority levels}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1j{hjhKhjubeh}(h]h ]h"]h$]h&]uh1jvhjgubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj hhhNhNubh)}(h**Description**h]ja)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhj hhubh)}(hA higher priority context can takeover the console when it is in the safe state. The final attempt to flush consoles in panic() can be allowed to do so even in an unsafe state (Hope and pray).h]hA higher priority context can takeover the console when it is in the safe state. The final attempt to flush consoles in panic() can be allowed to do so even in an unsafe state (Hope and pray).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj hhubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jnbcon_context (C struct)c.nbcon_contexthNtauh1jhj hhhNhNubj)}(hhh](j)}(h nbcon_contexth]j)}(hstruct nbcon_contexth](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(h nbcon_contexth]j)}(hjh]h nbcon_context}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjhKhjhhubj/)}(hhh]h)}(h#Context for console acquire/releaseh]h#Context for console acquire/release}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jKstructeh"]h$]h&]jPjKjQjKjRjKjSjTjUuh1jhhhj hNhNubjW)}(hX<**Definition**:: struct nbcon_context { struct console *console; unsigned int spinwait_max_us; enum nbcon_prio prio; unsigned int allow_unsafe_takeover : 1; unsigned int backlog : 1; struct printk_buffers *pbufs; u64 seq; }; **Members** ``console`` The associated console ``spinwait_max_us`` Limit for spin-wait acquire ``prio`` Priority of the context ``allow_unsafe_takeover`` Allow performing takeover even if unsafe. Can be used only with NBCON_PRIO_PANIC **prio**. It might cause a system freeze when the console is used later. ``backlog`` Ringbuffer has pending records ``pbufs`` Pointer to the text buffer for this context ``seq`` The sequence number to print for this contexth](h)}(h**Definition**::h](ja)}(h**Definition**h]h Definition}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjSubh:}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjOubj)}(hX1struct nbcon_context { struct console *console; unsigned int spinwait_max_us; enum nbcon_prio prio; unsigned int allow_unsafe_takeover : 1; unsigned int backlog : 1; struct printk_buffers *pbufs; u64 seq; };h]hX1struct nbcon_context { struct console *console; unsigned int spinwait_max_us; enum nbcon_prio prio; unsigned int allow_unsafe_takeover : 1; unsigned int backlog : 1; struct printk_buffers *pbufs; u64 seq; };}hjpsbah}(h]h ]h"]h$]h&]hhuh1j~h^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjOubh)}(h **Members**h]ja)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjOubjw)}(hhh](j|)}(h#``console`` The associated console h](j)}(h ``console``h]j)}(hjh]hconsole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubj)}(hhh]h)}(hThe associated consoleh]hThe associated console}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMhjubj|)}(h0``spinwait_max_us`` Limit for spin-wait acquire h](j)}(h``spinwait_max_us``h]j)}(hjh]hspinwait_max_us}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubj)}(hhh]h)}(hLimit for spin-wait acquireh]hLimit for spin-wait acquire}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMhjubj|)}(h!``prio`` Priority of the context h](j)}(h``prio``h]j)}(hjh]hprio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhj ubj)}(hhh]h)}(hPriority of the contexth]hPriority of the context}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj'hMhjubj|)}(h``allow_unsafe_takeover`` Allow performing takeover even if unsafe. Can be used only with NBCON_PRIO_PANIC **prio**. It might cause a system freeze when the console is used later. h](j)}(h``allow_unsafe_takeover``h]j)}(hjKh]hallow_unsafe_takeover}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjEubj)}(hhh]h)}(hAllow performing takeover even if unsafe. Can be used only with NBCON_PRIO_PANIC **prio**. It might cause a system freeze when the console is used later.h](hQAllow performing takeover even if unsafe. Can be used only with NBCON_PRIO_PANIC }(hjdhhhNhNubja)}(h**prio**h]hprio}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjdubh@. It might cause a system freeze when the console is used later.}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1j{hj`hM hjubj|)}(h+``backlog`` Ringbuffer has pending records h](j)}(h ``backlog``h]j)}(hjh]hbacklog}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjubj)}(hhh]h)}(hRingbuffer has pending recordsh]hRingbuffer has pending records}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM hjubj|)}(h6``pbufs`` Pointer to the text buffer for this context h](j)}(h ``pbufs``h]j)}(hjh]hpbufs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubj)}(hhh]h)}(h+Pointer to the text buffer for this contexth]h+Pointer to the text buffer for this context}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMhjubj|)}(h5``seq`` The sequence number to print for this contexth](j)}(h``seq``h]j)}(hj h]hseq}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubj)}(hhh]h)}(h-The sequence number to print for this contexth]h-The sequence number to print for this context}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhMhjubeh}(h]h ]h"]h$]h&]uh1jvhjOubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jnbcon_write_context (C struct)c.nbcon_write_contexthNtauh1jhj hhhNhNubj)}(hhh](j)}(hnbcon_write_contexth]j)}(hstruct nbcon_write_contexth](j)}(hjh]hstruct}(hjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMubj)}(h h]h }(hjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_hhhjphMubj)}(hnbcon_write_contexth]j)}(hj]h]hnbcon_write_context}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhj_hhhjphMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj[hhhjphMubah}(h]jVah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjphMhjXhhubj/)}(hhh]h)}(h+Context handed to the nbcon write callbacksh]h+Context handed to the nbcon write callbacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjhhubah}(h]h ]h"]h$]h&]uh1j.hjXhhhjphMubeh}(h]h ](jKstructeh"]h$]h&]jPjKjQjjRjjSjTjUuh1jhhhj hNhNubjW)}(hX**Definition**:: struct nbcon_write_context { struct nbcon_context ctxt; char *outbuf; unsigned int len; bool unsafe_takeover; #ifdef CONFIG_PRINTK_EXECUTION_CTX; int cpu; pid_t pid; char comm[TASK_COMM_LEN]; #endif; }; **Members** ``ctxt`` The core console context ``outbuf`` Pointer to the text buffer for output ``len`` Length to write ``unsafe_takeover`` If a hostile takeover in an unsafe state has occurred ``cpu`` CPU on which the message was generated ``pid`` PID of the task that generated the message ``comm`` Name of the task that generated the messageh](h)}(h**Definition**::h](ja)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM$hjubj)}(hstruct nbcon_write_context { struct nbcon_context ctxt; char *outbuf; unsigned int len; bool unsafe_takeover; #ifdef CONFIG_PRINTK_EXECUTION_CTX; int cpu; pid_t pid; char comm[TASK_COMM_LEN]; #endif; };h]hstruct nbcon_write_context { struct nbcon_context ctxt; char *outbuf; unsigned int len; bool unsafe_takeover; #ifdef CONFIG_PRINTK_EXECUTION_CTX; int cpu; pid_t pid; char comm[TASK_COMM_LEN]; #endif; };}hjsbah}(h]h ]h"]h$]h&]hhuh1j~h^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM&hjubh)}(h **Members**h]ja)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM2hjubjw)}(hhh](j|)}(h"``ctxt`` The core console context h](j)}(h``ctxt``h]j)}(hjh]hctxt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM"hj ubj)}(hhh]h)}(hThe core console contexth]hThe core console context}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hM"hj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj'hM"hj ubj|)}(h1``outbuf`` Pointer to the text buffer for output h](j)}(h ``outbuf``h]j)}(hjKh]houtbuf}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM#hjEubj)}(hhh]h)}(h%Pointer to the text buffer for outputh]h%Pointer to the text buffer for output}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hM#hjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1j{hj`hM#hj ubj|)}(h``len`` Length to write h](j)}(h``len``h]j)}(hjh]hlen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM$hj~ubj)}(hhh]h)}(hLength to writeh]hLength to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1j{hjhM$hj ubj|)}(hJ``unsafe_takeover`` If a hostile takeover in an unsafe state has occurred h](j)}(h``unsafe_takeover``h]j)}(hjh]hunsafe_takeover}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM%hjubj)}(hhh]h)}(h5If a hostile takeover in an unsafe state has occurredh]h5If a hostile takeover in an unsafe state has occurred}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM%hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhM%hj ubj|)}(h/``cpu`` CPU on which the message was generated h](j)}(h``cpu``h]j)}(hjh]hcpu}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM&hjubj)}(hhh]h)}(h&CPU on which the message was generatedh]h&CPU on which the message was generated}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM&hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hj hM&hj ubj|)}(h3``pid`` PID of the task that generated the message h](j)}(h``pid``h]j)}(hj/h]hpid}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM'hj)ubj)}(hhh]h)}(h*PID of the task that generated the messageh]h*PID of the task that generated the message}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM'hjEubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1j{hjDhM'hj ubj|)}(h4``comm`` Name of the task that generated the messageh](j)}(h``comm``h]j)}(hjhh]hcomm}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM'hjbubj)}(hhh]h)}(h+Name of the task that generated the messageh]h+Name of the task that generated the message}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM(hj~ubah}(h]h ]h"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]uh1j{hj}hM'hj ubeh}(h]h ]h"]h$]h&]uh1jvhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj hhhNhNubeh}(h]j ah ]h"]h$] internalsah&]uh1hhjhhhhhK referencedKubeh}(h]hah ]h"]struct consoleah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Struct Conswh]h Struct Consw}(hjhhhNhNubah}(h]h ]h"]h$]h&]jj5uh1hhjhhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jconsw (C struct)c.conswhNtauh1jhjhhhNhNubj)}(hhh](j)}(hconswh]j)}(h struct conswh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj)}(hconswh]j)}(hjh]hconsw}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjhhhjhKubah}(h]jah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjhKhjhhubj/)}(hhh]h)}(hcallbacks for consolesh]hcallbacks for consoles}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK)hj!hhubah}(h]h ]h"]h$]h&]uh1j.hjhhhjhKubeh}(h]h ](jKstructeh"]h$]h&]jPjKjQj<jRj<jSjTjUuh1jhhhjhNhNubjW)}(hXs**Definition**:: struct consw { struct module *owner; const char *(*con_startup)(void); void (*con_init)(struct vc_data *vc, bool init); void (*con_deinit)(struct vc_data *vc); void (*con_clear)(struct vc_data *vc, unsigned int y, unsigned int x, unsigned int count); void (*con_putc)(struct vc_data *vc, u16 ca, unsigned int y, unsigned int x); void (*con_putcs)(struct vc_data *vc, const u16 *s, unsigned int count, unsigned int ypos, unsigned int xpos); void (*con_cursor)(struct vc_data *vc, bool enable); bool (*con_scroll)(struct vc_data *vc, unsigned int top, unsigned int bottom, enum con_scroll dir, unsigned int lines); bool (*con_switch)(struct vc_data *vc); bool (*con_blank)(struct vc_data *vc, enum vesa_blank_mode blank, bool mode_switch); int (*con_font_set)(struct vc_data *vc, const struct console_font *font, unsigned int vpitch, unsigned int flags); int (*con_font_get)(struct vc_data *vc, struct console_font *font, unsigned int vpitch); int (*con_font_default)(struct vc_data *vc, struct console_font *font, const char *name); int (*con_resize)(struct vc_data *vc, unsigned int width, unsigned int height, bool from_user); void (*con_set_palette)(struct vc_data *vc, const unsigned char *table); void (*con_scrolldelta)(struct vc_data *vc, int lines); bool (*con_set_origin)(struct vc_data *vc); void (*con_save_screen)(struct vc_data *vc); u8 (*con_build_attr)(struct vc_data *vc, u8 color, enum vc_intensity intensity, bool blink, bool underline, bool reverse, bool italic); void (*con_invert_region)(struct vc_data *vc, u16 *p, int count); }; **Members** ``owner`` the module to get references of when this console is used ``con_startup`` set up the console and return its name (like VGA, EGA, ...) ``con_init`` initialize the console on **vc**. **init** is true for the very first call on this **vc**. ``con_deinit`` deinitialize the console from **vc**. ``con_clear`` erase **count** characters at [**x**, **y**] on **vc**. **count** >= 1. ``con_putc`` emit one character with attributes **ca** to [**x**, **y**] on **vc**. (optional -- **con_putcs** would be called instead) ``con_putcs`` emit **count** characters with attributes **s** to [**x**, **y**] on **vc**. ``con_cursor`` enable/disable cursor depending on **enable** ``con_scroll`` move lines from **top** to **bottom** in direction **dir** by **lines**. Return true if no generic handling should be done. Invoked by csi_M and printing to the console. ``con_switch`` notifier about the console switch; it is supposed to return true if a redraw is needed. ``con_blank`` blank/unblank the console. The target mode is passed in **blank**. **mode_switch** is set if changing from/to text/graphics. The hook is supposed to return true if a redraw is needed. ``con_font_set`` set console **vc** font to **font** with height **vpitch**. **flags** can be ``KD_FONT_FLAG_DONT_RECALC``. (optional) ``con_font_get`` fetch the current font on **vc** of height **vpitch** into **font**. (optional) ``con_font_default`` set default font on **vc**. **name** can be ``NULL`` or font name to search for. **font** can be filled back. (optional) ``con_resize`` resize the **vc** console to **width** x **height**. **from_user** is true when this change comes from the user space. ``con_set_palette`` sets the palette of the console **vc** to **table** (optional) ``con_scrolldelta`` the contents of the console should be scrolled by **lines**. Invoked by user. (optional) ``con_set_origin`` set origin (see :c:type:`vc_data`::vc_origin) of the **vc**. If not provided or returns false, the origin is set to **vc->vc_screenbuf**. (optional) ``con_save_screen`` save screen content into **vc->vc_screenbuf**. Called e.g. upon entering graphics. (optional) ``con_build_attr`` build attributes based on **color**, **intensity** and other parameters. The result is used for both normal and erase characters. (optional) ``con_invert_region`` invert a region of length **count** on **vc** starting at **p**. (optional)h](h)}(h**Definition**::h](ja)}(h**Definition**h]h Definition}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjDubh:}(hjDhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK-hj@ubj)}(hXbstruct consw { struct module *owner; const char *(*con_startup)(void); void (*con_init)(struct vc_data *vc, bool init); void (*con_deinit)(struct vc_data *vc); void (*con_clear)(struct vc_data *vc, unsigned int y, unsigned int x, unsigned int count); void (*con_putc)(struct vc_data *vc, u16 ca, unsigned int y, unsigned int x); void (*con_putcs)(struct vc_data *vc, const u16 *s, unsigned int count, unsigned int ypos, unsigned int xpos); void (*con_cursor)(struct vc_data *vc, bool enable); bool (*con_scroll)(struct vc_data *vc, unsigned int top, unsigned int bottom, enum con_scroll dir, unsigned int lines); bool (*con_switch)(struct vc_data *vc); bool (*con_blank)(struct vc_data *vc, enum vesa_blank_mode blank, bool mode_switch); int (*con_font_set)(struct vc_data *vc, const struct console_font *font, unsigned int vpitch, unsigned int flags); int (*con_font_get)(struct vc_data *vc, struct console_font *font, unsigned int vpitch); int (*con_font_default)(struct vc_data *vc, struct console_font *font, const char *name); int (*con_resize)(struct vc_data *vc, unsigned int width, unsigned int height, bool from_user); void (*con_set_palette)(struct vc_data *vc, const unsigned char *table); void (*con_scrolldelta)(struct vc_data *vc, int lines); bool (*con_set_origin)(struct vc_data *vc); void (*con_save_screen)(struct vc_data *vc); u8 (*con_build_attr)(struct vc_data *vc, u8 color, enum vc_intensity intensity, bool blink, bool underline, bool reverse, bool italic); void (*con_invert_region)(struct vc_data *vc, u16 *p, int count); };h]hXbstruct consw { struct module *owner; const char *(*con_startup)(void); void (*con_init)(struct vc_data *vc, bool init); void (*con_deinit)(struct vc_data *vc); void (*con_clear)(struct vc_data *vc, unsigned int y, unsigned int x, unsigned int count); void (*con_putc)(struct vc_data *vc, u16 ca, unsigned int y, unsigned int x); void (*con_putcs)(struct vc_data *vc, const u16 *s, unsigned int count, unsigned int ypos, unsigned int xpos); void (*con_cursor)(struct vc_data *vc, bool enable); bool (*con_scroll)(struct vc_data *vc, unsigned int top, unsigned int bottom, enum con_scroll dir, unsigned int lines); bool (*con_switch)(struct vc_data *vc); bool (*con_blank)(struct vc_data *vc, enum vesa_blank_mode blank, bool mode_switch); int (*con_font_set)(struct vc_data *vc, const struct console_font *font, unsigned int vpitch, unsigned int flags); int (*con_font_get)(struct vc_data *vc, struct console_font *font, unsigned int vpitch); int (*con_font_default)(struct vc_data *vc, struct console_font *font, const char *name); int (*con_resize)(struct vc_data *vc, unsigned int width, unsigned int height, bool from_user); void (*con_set_palette)(struct vc_data *vc, const unsigned char *table); void (*con_scrolldelta)(struct vc_data *vc, int lines); bool (*con_set_origin)(struct vc_data *vc); void (*con_save_screen)(struct vc_data *vc); u8 (*con_build_attr)(struct vc_data *vc, u8 color, enum vc_intensity intensity, bool blink, bool underline, bool reverse, bool italic); void (*con_invert_region)(struct vc_data *vc, u16 *p, int count); };}hjasbah}(h]h ]h"]h$]h&]hhuh1j~h^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK/hj@ubh)}(h **Members**h]ja)}(hjrh]hMembers}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjpubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKGhj@ubjw)}(hhh](j|)}(hD``owner`` the module to get references of when this console is used h](j)}(h ``owner``h]j)}(hjh]howner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK,hjubj)}(hhh]h)}(h9the module to get references of when this console is usedh]h9the module to get references of when this console is used}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK,hjubj|)}(hL``con_startup`` set up the console and return its name (like VGA, EGA, ...) h](j)}(h``con_startup``h]j)}(hjh]h con_startup}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK-hjubj)}(hhh]h)}(h;set up the console and return its name (like VGA, EGA, ...)h]h;set up the console and return its name (like VGA, EGA, ...)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK-hjubj|)}(hh``con_init`` initialize the console on **vc**. **init** is true for the very first call on this **vc**. h](j)}(h ``con_init``h]j)}(hjh]hcon_init}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK/hjubj)}(hhh]h)}(hZinitialize the console on **vc**. **init** is true for the very first call on this **vc**.h](hinitialize the console on }(hjhhhNhNubja)}(h**vc**h]hvc}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh. }(hjhhhNhNubja)}(h**init**h]hinit}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh) is true for the very first call on this }(hjhhhNhNubja)}(h**vc**h]hvc}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK/hjubj|)}(h5``con_deinit`` deinitialize the console from **vc**. h](j)}(h``con_deinit``h]j)}(hjsh]h con_deinit}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK0hjmubj)}(hhh]h)}(h%deinitialize the console from **vc**.h](hdeinitialize the console from }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1j{hjhK0hjubj|)}(hV``con_clear`` erase **count** characters at [**x**, **y**] on **vc**. **count** >= 1. h](j)}(h ``con_clear``h]j)}(hjh]h con_clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK1hjubj)}(hhh]h)}(hGerase **count** characters at [**x**, **y**] on **vc**. **count** >= 1.h](herase }(hjhhhNhNubja)}(h **count**h]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh characters at [}(hjhhhNhNubja)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh, }(hjhhhNhNubja)}(h**y**h]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh] on }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh. }(hjhhhNhNubja)}(h **count**h]hcount}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh >= 1.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK1hjubj|)}(h``con_putc`` emit one character with attributes **ca** to [**x**, **y**] on **vc**. (optional -- **con_putcs** would be called instead) h](j)}(h ``con_putc``h]j)}(hjQh]hcon_putc}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK3hjKubj)}(hhh]h)}(hzemit one character with attributes **ca** to [**x**, **y**] on **vc**. (optional -- **con_putcs** would be called instead)h](h#emit one character with attributes }(hjjhhhNhNubja)}(h**ca**h]hca}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjjubh to [}(hjjhhhNhNubja)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjjubh, }(hjjhhhNhNubja)}(h**y**h]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjjubh] on }(hjjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjjubh. (optional -- }(hjjhhhNhNubja)}(h **con_putcs**h]h con_putcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjjubh would be called instead)}(hjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK2hjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1j{hjfhK3hjubj|)}(h[``con_putcs`` emit **count** characters with attributes **s** to [**x**, **y**] on **vc**. h](j)}(h ``con_putcs``h]j)}(hjh]h con_putcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK4hjubj)}(hhh]h)}(hLemit **count** characters with attributes **s** to [**x**, **y**] on **vc**.h](hemit }(hjhhhNhNubja)}(h **count**h]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh characters with attributes }(hjhhhNhNubja)}(h**s**h]hs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh to [}(hjhhhNhNubja)}(h**x**h]hx}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh, }(hjhhhNhNubja)}(h**y**h]hy}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh] on }(hjhhhNhNubja)}(h**vc**h]hvc}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK4hjubj|)}(h=``con_cursor`` enable/disable cursor depending on **enable** h](j)}(h``con_cursor``h]j)}(hjxh]h con_cursor}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK5hjrubj)}(hhh]h)}(h-enable/disable cursor depending on **enable**h](h#enable/disable cursor depending on }(hjhhhNhNubja)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubeh}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]uh1j{hjhK5hjubj|)}(h``con_scroll`` move lines from **top** to **bottom** in direction **dir** by **lines**. Return true if no generic handling should be done. Invoked by csi_M and printing to the console. h](j)}(h``con_scroll``h]j)}(hjh]h con_scroll}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK8hjubj)}(hhh]h)}(hmove lines from **top** to **bottom** in direction **dir** by **lines**. Return true if no generic handling should be done. Invoked by csi_M and printing to the console.h](hmove lines from }(hjhhhNhNubja)}(h**top**h]htop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh to }(hjhhhNhNubja)}(h **bottom**h]hbottom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh in direction }(hjhhhNhNubja)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh by }(hjhhhNhNubja)}(h **lines**h]hlines}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubhb. Return true if no generic handling should be done. Invoked by csi_M and printing to the console.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK6hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK8hjubj|)}(hg``con_switch`` notifier about the console switch; it is supposed to return true if a redraw is needed. h](j)}(h``con_switch``h]j)}(hjAh]h con_switch}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK:hj;ubj)}(hhh]h)}(hWnotifier about the console switch; it is supposed to return true if a redraw is needed.h]hWnotifier about the console switch; it is supposed to return true if a redraw is needed.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK9hjWubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1j{hjVhK:hjubj|)}(h``con_blank`` blank/unblank the console. The target mode is passed in **blank**. **mode_switch** is set if changing from/to text/graphics. The hook is supposed to return true if a redraw is needed. h](j)}(h ``con_blank``h]j)}(hj{h]h con_blank}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK=hjuubj)}(hhh]h)}(hblank/unblank the console. The target mode is passed in **blank**. **mode_switch** is set if changing from/to text/graphics. The hook is supposed to return true if a redraw is needed.h](h8blank/unblank the console. The target mode is passed in }(hjhhhNhNubja)}(h **blank**h]hblank}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh. }(hjhhhNhNubja)}(h**mode_switch**h]h mode_switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubhe is set if changing from/to text/graphics. The hook is supposed to return true if a redraw is needed.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK;hjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]uh1j{hjhK=hjubj|)}(h``con_font_set`` set console **vc** font to **font** with height **vpitch**. **flags** can be ``KD_FONT_FLAG_DONT_RECALC``. (optional) h](j)}(h``con_font_set``h]j)}(hjh]h con_font_set}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK?hjubj)}(hhh]h)}(huset console **vc** font to **font** with height **vpitch**. **flags** can be ``KD_FONT_FLAG_DONT_RECALC``. (optional)h](h set console }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh font to }(hjhhhNhNubja)}(h**font**h]hfont}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh with height }(hjhhhNhNubja)}(h **vpitch**h]hvpitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh. }(hjhhhNhNubja)}(h **flags**h]hflags}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh can be }(hjhhhNhNubj)}(h``KD_FONT_FLAG_DONT_RECALC``h]hKD_FONT_FLAG_DONT_RECALC}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK>hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhK?hjubj|)}(ha``con_font_get`` fetch the current font on **vc** of height **vpitch** into **font**. (optional) h](j)}(h``con_font_get``h]j)}(hjmh]h con_font_get}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKAhjgubj)}(hhh]h)}(hOfetch the current font on **vc** of height **vpitch** into **font**. (optional)h](hfetch the current font on }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh of height }(hjhhhNhNubja)}(h **vpitch**h]hvpitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh into }(hjhhhNhNubja)}(h**font**h]hfont}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh . (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK@hjubah}(h]h ]h"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]uh1j{hjhKAhjubj|)}(h``con_font_default`` set default font on **vc**. **name** can be ``NULL`` or font name to search for. **font** can be filled back. (optional) h](j)}(h``con_font_default``h]j)}(hjh]hcon_font_default}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKChjubj)}(hhh]h)}(hxset default font on **vc**. **name** can be ``NULL`` or font name to search for. **font** can be filled back. (optional)h](hset default font on }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh. }(hjhhhNhNubja)}(h**name**h]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh can be }(hjhhhNhNubj)}(h``NULL``h]hNULL}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh or font name to search for. }(hjhhhNhNubja)}(h**font**h]hfont}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh can be filled back. (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKBhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKChjubj|)}(h``con_resize`` resize the **vc** console to **width** x **height**. **from_user** is true when this change comes from the user space. h](j)}(h``con_resize``h]j)}(hj_h]h con_resize}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKEhjYubj)}(hhh]h)}(hvresize the **vc** console to **width** x **height**. **from_user** is true when this change comes from the user space.h](h resize the }(hjxhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjxubh console to }(hjxhhhNhNubja)}(h **width**h]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjxubh x }(hjxhhhNhNubja)}(h **height**h]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjxubh. }(hjxhhhNhNubja)}(h **from_user**h]h from_user}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjxubh4 is true when this change comes from the user space.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKDhjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1j{hjthKEhjubj|)}(hS``con_set_palette`` sets the palette of the console **vc** to **table** (optional) h](j)}(h``con_set_palette``h]j)}(hjh]hcon_set_palette}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKFhjubj)}(hhh]h)}(h>sets the palette of the console **vc** to **table** (optional)h](h sets the palette of the console }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh to }(hjhhhNhNubja)}(h **table**h]htable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKFhjubj|)}(hm``con_scrolldelta`` the contents of the console should be scrolled by **lines**. Invoked by user. (optional) h](j)}(h``con_scrolldelta``h]j)}(hj>h]hcon_scrolldelta}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKHhj8ubj)}(hhh]h)}(hXthe contents of the console should be scrolled by **lines**. Invoked by user. (optional)h](h2the contents of the console should be scrolled by }(hjWhhhNhNubja)}(h **lines**h]hlines}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjWubh. Invoked by user. (optional)}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKGhjTubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1j{hjShKHhjubj|)}(h``con_set_origin`` set origin (see :c:type:`vc_data`::vc_origin) of the **vc**. If not provided or returns false, the origin is set to **vc->vc_screenbuf**. (optional) h](j)}(h``con_set_origin``h]j)}(hjh]hcon_set_origin}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKKhjubj)}(hhh]h)}(hset origin (see :c:type:`vc_data`::vc_origin) of the **vc**. If not provided or returns false, the origin is set to **vc->vc_screenbuf**. (optional)h](hset origin (see }(hjhhhNhNubh)}(h:c:type:`vc_data`h]j)}(hjh]hvc_data}(hjhhhNhNubah}(h]h ](xrefjKc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/console refdomainjKreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sb reftargetvc_datauh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKIhjubh::vc_origin) of the }(hjhhhNhNubja)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh9. If not provided or returns false, the origin is set to }(hjhhhNhNubja)}(h**vc->vc_screenbuf**h]hvc->vc_screenbuf}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjubh . (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1j{hjhKKhjubj|)}(hr``con_save_screen`` save screen content into **vc->vc_screenbuf**. Called e.g. upon entering graphics. (optional) h](j)}(h``con_save_screen``h]j)}(hj h]hcon_save_screen}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKMhj ubj)}(hhh]h)}(h]save screen content into **vc->vc_screenbuf**. Called e.g. upon entering graphics. (optional)h](hsave screen content into }(hj/ hhhNhNubja)}(h**vc->vc_screenbuf**h]hvc->vc_screenbuf}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj/ ubh0. Called e.g. upon entering graphics. (optional)}(hj/ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKLhj, ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj+ hKMhjubj|)}(h``con_build_attr`` build attributes based on **color**, **intensity** and other parameters. The result is used for both normal and erase characters. (optional) h](j)}(h``con_build_attr``h]j)}(hjb h]hcon_build_attr}(hjd hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj` ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKPhj\ ubj)}(hhh]h)}(hbuild attributes based on **color**, **intensity** and other parameters. The result is used for both normal and erase characters. (optional)h](hbuild attributes based on }(hj{ hhhNhNubja)}(h **color**h]hcolor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj{ ubh, }(hj{ hhhNhNubja)}(h **intensity**h]h intensity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj{ ubhZ and other parameters. The result is used for both normal and erase characters. (optional)}(hj{ hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKNhjx ubah}(h]h ]h"]h$]h&]uh1jhj\ ubeh}(h]h ]h"]h$]h&]uh1j{hjw hKPhjubj|)}(ha``con_invert_region`` invert a region of length **count** on **vc** starting at **p**. (optional)h](j)}(h``con_invert_region``h]j)}(hj h]hcon_invert_region}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKQhj ubj)}(hhh]h)}(hKinvert a region of length **count** on **vc** starting at **p**. (optional)h](hinvert a region of length }(hj hhhNhNubja)}(h **count**h]hcount}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh on }(hj hhhNhNubja)}(h**vc**h]hvc}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh starting at }(hj hhhNhNubja)}(h**p**h]hp}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj ubh . (optional)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKQhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1j{hj hKQhjubeh}(h]h ]h"]h$]h&]uh1jvhj@ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjhhhNhNubeh}(h]j;ah ]h"] struct conswah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConsole functionsh]hConsole functions}(hj@!hhhNhNubah}(h]h ]h"]h$]h&]jjWuh1hhj=!hhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$console_srcu_read_flags (C function)c.console_srcu_read_flagshNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h9short console_srcu_read_flags (const struct console *con)h]j)}(h8short console_srcu_read_flags(const struct console *con)h](hdesc_sig_keyword_type)}(hshorth]hshort}(hji!hhhNhNubah}(h]h ]ktah"]h$]h&]uh1jg!hjc!hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMubj)}(h h]h }(hjy!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjc!hhhjx!hMubj)}(hconsole_srcu_read_flagsh]j)}(hconsole_srcu_read_flagsh]hconsole_srcu_read_flags}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjc!hhhjx!hMubhdesc_parameterlist)}(h(const struct console *con)h]hdesc_parameter)}(hconst struct console *conh](j)}(hconsth]hconst}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hconsoleh]hconsole}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainjKreftype identifier reftargetj!modnameN classnameNjj)}j]j ASTIdentifier)}j!j!sbc.console_srcu_read_flagsasbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubhdesc_sig_punctuation)}(h*h]h*}(hj"hhhNhNubah}(h]h ]pah"]h$]h&]uh1j"hj!ubj)}(hconh]hcon}(hj'"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj!ubah}(h]h ]h"]h$]h&]hhuh1j!hjc!hhhjx!hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj_!hhhjx!hMubah}(h]jZ!ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjx!hMhj\!hhubj/)}(hhh]h)}(h6Locklessly read flags of a possibly registered consoleh]h6Locklessly read flags of a possibly registered console}(hjQ"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjN"hhubah}(h]h ]h"]h$]h&]uh1j.hj\!hhhjx!hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQji"jRji"jSjTjUuh1jhhhj=!hNhNubjW)}(hX{**Parameters** ``const struct console *con`` struct console pointer of console to read flags from **Description** Locklessly reading **con->flags** provides a consistent read value because there is at most one CPU modifying **con->flags** and that CPU is using only read-modify-write operations to do so. Requires console_srcu_read_lock to be held, which implies that **con** might be a registered console. The purpose of holding console_srcu_read_lock is to guarantee that the console state is valid (CON_SUSPENDED/CON_ENABLED) and that no exit/cleanup routines will run if the console is currently undergoing unregistration. If the caller is holding the console_list_lock or it is _certain_ that **con** is not and will not become registered, the caller may read **con->flags** directly instead. **Context** Any context. **Return** The current value of the **con->flags** field.h](h)}(h**Parameters**h]ja)}(hjs"h]h Parameters}(hju"hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjq"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubjw)}(hhh]j|)}(hS``const struct console *con`` struct console pointer of console to read flags from h](j)}(h``const struct console *con``h]j)}(hj"h]hconst struct console *con}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj"ubj)}(hhh]h)}(h4struct console pointer of console to read flags fromh]h4struct console pointer of console to read flags from}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1j{hj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jvhjm"ubh)}(h**Description**h]ja)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(hLocklessly reading **con->flags** provides a consistent read value because there is at most one CPU modifying **con->flags** and that CPU is using only read-modify-write operations to do so.h](hLocklessly reading }(hj"hhhNhNubja)}(h**con->flags**h]h con->flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj"ubhM provides a consistent read value because there is at most one CPU modifying }(hj"hhhNhNubja)}(h**con->flags**h]h con->flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj"ubhB and that CPU is using only read-modify-write operations to do so.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(hXARequires console_srcu_read_lock to be held, which implies that **con** might be a registered console. The purpose of holding console_srcu_read_lock is to guarantee that the console state is valid (CON_SUSPENDED/CON_ENABLED) and that no exit/cleanup routines will run if the console is currently undergoing unregistration.h](h?Requires console_srcu_read_lock to be held, which implies that }(hj#hhhNhNubja)}(h**con**h]hcon}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj#ubh might be a registered console. The purpose of holding console_srcu_read_lock is to guarantee that the console state is valid (CON_SUSPENDED/CON_ENABLED) and that no exit/cleanup routines will run if the console is currently undergoing unregistration.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(hIf the caller is holding the console_list_lock or it is _certain_ that **con** is not and will not become registered, the caller may read **con->flags** directly instead.h](hGIf the caller is holding the console_list_lock or it is _certain_ that }(hj7#hhhNhNubja)}(h**con**h]hcon}(hj?#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj7#ubh< is not and will not become registered, the caller may read }(hj7#hhhNhNubja)}(h**con->flags**h]h con->flags}(hjQ#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj7#ubh directly instead.}(hj7#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(h **Context**h]ja)}(hjl#h]hContext}(hjn#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(h Any context.h]h Any context.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubh)}(h **Return**h]ja)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhM hjm"ubh)}(h.The current value of the **con->flags** field.h](hThe current value of the }(hj#hhhNhNubja)}(h**con->flags**h]h con->flags}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj#ubh field.}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjm"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%console_srcu_write_flags (C function)c.console_srcu_write_flagshNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h@void console_srcu_write_flags (struct console *con, short flags)h]j)}(h?void console_srcu_write_flags(struct console *con, short flags)h](jh!)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj#hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hMubj)}(hconsole_srcu_write_flagsh]j)}(hconsole_srcu_write_flagsh]hconsole_srcu_write_flags}(hj $hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj#hhhj#hMubj!)}(h"(struct console *con, short flags)h](j!)}(hstruct console *conh](j)}(hjh]hstruct}(hj'$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#$ubj)}(h h]h }(hj4$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#$ubh)}(hhh]j)}(hconsoleh]hconsole}(hjE$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB$ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetjG$modnameN classnameNjj)}j]j")}j!j $sbc.console_srcu_write_flagsasbuh1hhj#$ubj)}(h h]h }(hje$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#$ubj")}(hj"h]h*}(hjs$hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj#$ubj)}(hconh]hcon}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj$ubj!)}(h short flagsh](jh!)}(hshorth]hshort}(hj$hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hflagsh]hflags}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj$ubeh}(h]h ]h"]h$]h&]hhuh1j!hj#hhhj#hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj#hhhj#hMubah}(h]j#ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj#hMhj#hhubj/)}(hhh]h)}(h$Write flags for a registered consoleh]h$Write flags for a registered console}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$hhubah}(h]h ]h"]h$]h&]uh1j.hj#hhhj#hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj$jRj$jSjTjUuh1jhhhj=!hNhNubjW)}(hX **Parameters** ``struct console *con`` struct console pointer of console to write flags to ``short flags`` new flags value to write **Description** Only use this function to write flags for registered consoles. It requires holding the console_list_lock. **Context** Any context.h](h)}(h**Parameters**h]ja)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj$ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$ubjw)}(hhh](j|)}(hL``struct console *con`` struct console pointer of console to write flags to h](j)}(h``struct console *con``h]j)}(hj %h]hstruct console *con}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj%ubj)}(hhh]h)}(h3struct console pointer of console to write flags toh]h3struct console pointer of console to write flags to}(hj9%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5%hMhj6%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1j{hj5%hMhj%ubj|)}(h)``short flags`` new flags value to write h](j)}(h``short flags``h]j)}(hjY%h]h short flags}(hj[%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW%ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjS%ubj)}(hhh]h)}(hnew flags value to writeh]hnew flags value to write}(hjr%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn%hMhjo%ubah}(h]h ]h"]h$]h&]uh1jhjS%ubeh}(h]h ]h"]h$]h&]uh1j{hjn%hMhj%ubeh}(h]h ]h"]h$]h&]uh1jvhj$ubh)}(h**Description**h]ja)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$ubh)}(hiOnly use this function to write flags for registered consoles. It requires holding the console_list_lock.h]hiOnly use this function to write flags for registered consoles. It requires holding the console_list_lock.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$ubh)}(h **Context**h]ja)}(hj%h]hContext}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$ubh)}(h Any context.h]h Any context.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jfor_each_console_srcu (C macro)c.for_each_console_srcuhNtauh1jhj=!hhhNhNubj)}(hhh](j)}(hfor_each_console_srcuh]j)}(hfor_each_console_srcuh]j)}(hfor_each_console_srcuh]j)}(hj%h]hfor_each_console_srcu}(hj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj%hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMDubah}(h]h ]h"]h$]h&]hhj uh1jj!j"hj%hhhj&hMDubah}(h]j%ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj&hMDhj%hhubj/)}(hhh]h}(h]h ]h"]h$]h&]uh1j.hj%hhhj&hMDubeh}(h]h ](jKmacroeh"]h$]h&]jPjKjQj0&jRj0&jSjTjUuh1jhhhj=!hNhNubh)}(h``for_each_console_srcu (con)``h]j)}(hj6&h]hfor_each_console_srcu (con)}(hj8&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMFhj=!hhubh block_quote)}(h"Iterator over registered consoles h]h)}(h!Iterator over registered consolesh]h!Iterator over registered consoles}(hjR&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMDhjN&ubah}(h]h ]h"]h$]h&]uh1jL&hj`&hMDhj=!hhubjW)}(hX***Parameters** ``con`` struct console pointer used as loop cursor **Description** Although SRCU guarantees the console list will be consistent, the struct console fields may be updated by other CPUs while iterating. Requires console_srcu_read_lock to be held. Can be invoked from any context.h](h)}(h**Parameters**h]ja)}(hjm&h]h Parameters}(hjo&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjk&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMHhjg&ubjw)}(hhh]j|)}(h3``con`` struct console pointer used as loop cursor h](j)}(h``con``h]j)}(hj&h]hcon}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMEhj&ubj)}(hhh]h)}(h*struct console pointer used as loop cursorh]h*struct console pointer used as loop cursor}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hMEhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1j{hj&hMEhj&ubah}(h]h ]h"]h$]h&]uh1jvhjg&ubh)}(h**Description**h]ja)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMGhjg&ubh)}(hAlthough SRCU guarantees the console list will be consistent, the struct console fields may be updated by other CPUs while iterating.h]hAlthough SRCU guarantees the console list will be consistent, the struct console fields may be updated by other CPUs while iterating.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMFhjg&ubh)}(hLRequires console_srcu_read_lock to be held. Can be invoked from any context.h]hLRequires console_srcu_read_lock to be held. Can be invoked from any context.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMIhjg&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jfor_each_console (C macro)c.for_each_consolehNtauh1jhj=!hhhNhNubj)}(hhh](j)}(hfor_each_consoleh]j)}(hfor_each_consoleh]j)}(hfor_each_consoleh]j)}(hj'h]hfor_each_console}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj'hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMRubah}(h]h ]h"]h$]h&]hhj uh1jj!j"hj'hhhj2'hMRubah}(h]j'ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj2'hMRhj'hhubj/)}(hhh]h}(h]h ]h"]h$]h&]uh1j.hj'hhhj2'hMRubeh}(h]h ](jKmacroeh"]h$]h&]jPjKjQjK'jRjK'jSjTjUuh1jhhhj=!hNhNubh)}(h``for_each_console (con)``h]j)}(hjQ'h]hfor_each_console (con)}(hjS'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMThj=!hhubjM&)}(h"Iterator over registered consoles h]h)}(h!Iterator over registered consolesh]h!Iterator over registered consoles}(hjk'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMRhjg'ubah}(h]h ]h"]h$]h&]uh1jL&hjy'hMRhj=!hhubjW)}(h**Parameters** ``con`` struct console pointer used as loop cursor **Description** The console list and the :c:type:`console.flags ` are immutable while iterating. Requires console_list_lock to be held.h](h)}(h**Parameters**h]ja)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMVhj'ubjw)}(hhh]j|)}(h3``con`` struct console pointer used as loop cursor h](j)}(h``con``h]j)}(hj'h]hcon}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMShj'ubj)}(hhh]h)}(h*struct console pointer used as loop cursorh]h*struct console pointer used as loop cursor}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hMShj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubeh}(h]h ]h"]h$]h&]uh1j{hj'hMShj'ubah}(h]h ]h"]h$]h&]uh1jvhj'ubh)}(h**Description**h]ja)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMUhj'ubh)}(hYThe console list and the :c:type:`console.flags ` are immutable while iterating.h](hThe console list and the }(hj'hhhNhNubh)}(h!:c:type:`console.flags `h]j)}(hj(h]h console.flags}(hj(hhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjjjconsoleuh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMThj'ubh are immutable while iterating.}(hj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj(hMThj'ubh)}(h&Requires console_list_lock to be held.h]h&Requires console_list_lock to be held.}(hj((hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMVhj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jclear_selection (C function)c.clear_selectionhNtauh1jhj=!hhhNhNubj)}(hhh](j)}(hvoid clear_selection (void)h]j)}(hvoid clear_selection(void)h](jh!)}(hvoidh]hvoid}(hjW(hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hjS(hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKLubj)}(h h]h }(hjf(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS(hhhje(hKLubj)}(hclear_selectionh]j)}(hclear_selectionh]hclear_selection}(hjx(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt(ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjS(hhhje(hKLubj!)}(h(void)h]j!)}(hvoidh]jh!)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj(ubah}(h]h ]h"]h$]h&]noemphhhuh1j!hj(ubah}(h]h ]h"]h$]h&]hhuh1j!hjS(hhhje(hKLubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjO(hhhje(hKLubah}(h]jJ(ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhje(hKLhjL(hhubj/)}(hhh]h)}(hremove current selectionh]hremove current selection}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKLhj(hhubah}(h]h ]h"]h$]h&]uh1j.hjL(hhhje(hKLubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj(jRj(jSjTjUuh1jhhhj=!hNhNubjW)}(h**Parameters** ``void`` no arguments **Description** Remove the current selection highlight, if any from the console holding the selection. Locking: The caller must hold the console lock.h](h)}(h**Parameters**h]ja)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj(ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKPhj(ubjw)}(hhh]j|)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj(h]hvoid}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKhj(ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1j{hj)hKhj(ubah}(h]h ]h"]h$]h&]uh1jvhj(ubh)}(h**Description**h]ja)}(hj:)h]h Description}(hj<)hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj8)ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKhj(ubh)}(hVRemove the current selection highlight, if any from the console holding the selection.h]hVRemove the current selection highlight, if any from the console holding the selection.}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKMhj(ubh)}(h/Locking: The caller must hold the console lock.h]h/Locking: The caller must hold the console lock.}(hj_)hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKPhj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__vc_resize (C function) c.__vc_resizehNtauh1jhj=!hhhNhNubj)}(hhh](j)}(hZint __vc_resize (struct vc_data *vc, unsigned int cols, unsigned int rows, bool from_user)h]j)}(hYint __vc_resize(struct vc_data *vc, unsigned int cols, unsigned int rows, bool from_user)h](jh!)}(hinth]hint}(hj)hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj)hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)hhhj)hMubj)}(h __vc_resizeh]j)}(h __vc_resizeh]h __vc_resize}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj)hhhj)hMubj!)}(hJ(struct vc_data *vc, unsigned int cols, unsigned int rows, bool from_user)h](j!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj)modnameN classnameNjj)}j]j")}j!j)sb c.__vc_resizeasbuh1hhj)ubj)}(h h]h }(hj *hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj")}(hj"h]h*}(hj*hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj)ubj)}(hvch]hvc}(hj$*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj)ubj!)}(hunsigned int colsh](jh!)}(hunsignedh]hunsigned}(hj=*hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9*ubj)}(h h]h }(hjK*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9*ubjh!)}(hinth]hint}(hjY*hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9*ubj)}(h h]h }(hjg*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9*ubj)}(hcolsh]hcols}(hju*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj)ubj!)}(hunsigned int rowsh](jh!)}(hunsignedh]hunsigned}(hj*hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubjh!)}(hinth]hint}(hj*hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hrowsh]hrows}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj)ubj!)}(hbool from_userh](jh!)}(hboolh]hbool}(hj*hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj*ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(h from_userh]h from_user}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj)ubeh}(h]h ]h"]h$]h&]hhuh1j!hj)hhhj)hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj)hhhj)hMubah}(h]j)ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj)hMhj)hhubj/)}(hhh]h)}(h resize a VTh]h resize a VT}(hj%+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj"+hhubah}(h]h ]h"]h$]h&]uh1j.hj)hhhj)hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj=+jRj=+jSjTjUuh1jhhhj=!hNhNubjW)}(hX**Parameters** ``struct vc_data *vc`` virtual console ``unsigned int cols`` columns ``unsigned int rows`` rows ``bool from_user`` invoked by a user? **Description** Resize a virtual console as seen from the console end of things. We use the common vc_do_resize() method to update the structures. Locking: The caller must hold the console sem to protect console internals and **vc->port.tty**.h](h)}(h**Parameters**h]ja)}(hjG+h]h Parameters}(hjI+hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjE+ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjA+ubjw)}(hhh](j|)}(h'``struct vc_data *vc`` virtual console h](j)}(h``struct vc_data *vc``h]j)}(hjf+h]hstruct vc_data *vc}(hjh+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj`+ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{+hMhj|+ubah}(h]h ]h"]h$]h&]uh1jhj`+ubeh}(h]h ]h"]h$]h&]uh1j{hj{+hMhj]+ubj|)}(h``unsigned int cols`` columns h](j)}(h``unsigned int cols``h]j)}(hj+h]hunsigned int cols}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj+ubj)}(hhh]h)}(hcolumnsh]hcolumns}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1j{hj+hMhj]+ubj|)}(h``unsigned int rows`` rows h](j)}(h``unsigned int rows``h]j)}(hj+h]hunsigned int rows}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj+ubj)}(hhh]h)}(hrowsh]hrows}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hMhj+ubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1j{hj+hMhj]+ubj|)}(h&``bool from_user`` invoked by a user? h](j)}(h``bool from_user``h]j)}(hj,h]hbool from_user}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj ,ubj)}(hhh]h)}(hinvoked by a user?h]hinvoked by a user?}(hj*,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&,hMhj',ubah}(h]h ]h"]h$]h&]uh1jhj ,ubeh}(h]h ]h"]h$]h&]uh1j{hj&,hMhj]+ubeh}(h]h ]h"]h$]h&]uh1jvhjA+ubh)}(h**Description**h]ja)}(hjL,h]h Description}(hjN,hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjJ,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjA+ubh)}(hResize a virtual console as seen from the console end of things. We use the common vc_do_resize() method to update the structures.h]hResize a virtual console as seen from the console end of things. We use the common vc_do_resize() method to update the structures.}(hjb,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjA+ubh)}(h`Locking: The caller must hold the console sem to protect console internals and **vc->port.tty**.h](hOLocking: The caller must hold the console sem to protect console internals and }(hjq,hhhNhNubja)}(h**vc->port.tty**h]h vc->port.tty}(hjy,hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjq,ubh.}(hjq,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM hjA+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_is_bound (C function)c.con_is_boundhNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h*int con_is_bound (const struct consw *csw)h]j)}(h)int con_is_bound(const struct consw *csw)h](jh!)}(hinth]hint}(hj,hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj,hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,hhhj,hMubj)}(h con_is_boundh]j)}(h con_is_boundh]h con_is_bound}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj,hhhj,hMubj!)}(h(const struct consw *csw)h]j!)}(hconst struct consw *cswh](j)}(hj!h]hconst}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hjh]hstruct}(hj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hconswh]hconsw}(hj(-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%-ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj*-modnameN classnameNjj)}j]j")}j!j,sbc.con_is_boundasbuh1hhj,ubj)}(h h]h }(hjH-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj")}(hj"h]h*}(hjV-hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj,ubj)}(hcswh]hcsw}(hjc-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj,ubah}(h]h ]h"]h$]h&]hhuh1j!hj,hhhj,hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj,hhhj,hMubah}(h]j,ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj,hMhj,hhubj/)}(hhh]h)}(h(checks if driver is bound to the consoleh]h(checks if driver is bound to the console}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-hhubah}(h]h ]h"]h$]h&]uh1j.hj,hhhj,hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj-jRj-jSjTjUuh1jhhhj=!hNhNubjW)}(h**Parameters** ``const struct consw *csw`` console driver **Return** zero if unbound, nonzero if bound **Description** Drivers can call this and if zero, they should release all resources allocated on :c:type:`consw.con_startup\(\) `h](h)}(h**Parameters**h]ja)}(hj-h]h Parameters}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-ubjw)}(hhh]j|)}(h+``const struct consw *csw`` console driver h](j)}(h``const struct consw *csw``h]j)}(hj-h]hconst struct consw *csw}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-ubj)}(hhh]h)}(hconsole driverh]hconsole driver}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1j{hj-hMhj-ubah}(h]h ]h"]h$]h&]uh1jvhj-ubh)}(h **Return**h]ja)}(hj .h]hReturn}(hj .hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj.ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-ubh)}(h!zero if unbound, nonzero if boundh]h!zero if unbound, nonzero if bound}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-ubh)}(h**Description**h]ja)}(hj0.h]h Description}(hj2.hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj..ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj-ubh)}(hyDrivers can call this and if zero, they should release all resources allocated on :c:type:`consw.con_startup\(\) `h](hRDrivers can call this and if zero, they should release all resources allocated on }(hjF.hhhNhNubh)}(h':c:type:`consw.con_startup\(\) `h]j)}(hjP.h]hconsw.con_startup()}(hjR.hhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhjN.ubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjjjconswuh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjF.ubeh}(h]h ]h"]h$]h&]uh1hhjm.hMhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_is_visible (C function)c.con_is_visiblehNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h.bool con_is_visible (const struct vc_data *vc)h]j)}(h-bool con_is_visible(const struct vc_data *vc)h](jh!)}(hj*h]hbool}(hj.hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj.hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj.hMubj)}(hcon_is_visibleh]j)}(hcon_is_visibleh]hcon_is_visible}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj.hhhj.hMubj!)}(h(const struct vc_data *vc)h]j!)}(hconst struct vc_data *vch](j)}(hj!h]hconst}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj /hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj /modnameN classnameNjj)}j]j")}j!j.sbc.con_is_visibleasbuh1hhj.ubj)}(h h]h }(hj)/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj")}(hj"h]h*}(hj7/hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj.ubj)}(hvch]hvc}(hjD/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj.ubah}(h]h ]h"]h$]h&]hhuh1j!hj.hhhj.hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj.hhhj.hMubah}(h]j.ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj.hMhj.hhubj/)}(hhh]h)}(h-checks whether the current console is visibleh]h-checks whether the current console is visible}(hjn/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjk/hhubah}(h]h ]h"]h$]h&]uh1j.hj.hhhj.hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj/jRj/jSjTjUuh1jhhhj=!hNhNubjW)}(hs**Parameters** ``const struct vc_data *vc`` virtual console **Return** zero if not visible, nonzero if visibleh](h)}(h**Parameters**h]ja)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj/ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj/ubjw)}(hhh]j|)}(h-``const struct vc_data *vc`` virtual console h](j)}(h``const struct vc_data *vc``h]j)}(hj/h]hconst struct vc_data *vc}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj/ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1j{hj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jvhj/ubh)}(h **Return**h]ja)}(hj/h]hReturn}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj/ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj/ubh)}(h'zero if not visible, nonzero if visibleh]h'zero if not visible, nonzero if visible}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_debug_enter (C function)c.con_debug_enterhNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h)void con_debug_enter (struct vc_data *vc)h]j)}(h(void con_debug_enter(struct vc_data *vc)h](jh!)}(hvoidh]hvoid}(hj/0hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj+0hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj>0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+0hhhj=0hMubj)}(hcon_debug_enterh]j)}(hcon_debug_enterh]hcon_debug_enter}(hjP0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL0ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj+0hhhj=0hMubj!)}(h(struct vc_data *vc)h]j!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hjl0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubj)}(h h]h }(hjy0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj0modnameN classnameNjj)}j]j")}j!jR0sbc.con_debug_enterasbuh1hhjh0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubj")}(hj"h]h*}(hj0hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjh0ubj)}(hvch]hvc}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjd0ubah}(h]h ]h"]h$]h&]hhuh1j!hj+0hhhj=0hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj'0hhhj=0hMubah}(h]j"0ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj=0hMhj$0hhubj/)}(hhh]h)}(h+prepare the console for the kernel debuggerh]h+prepare the console for the kernel debugger}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj0hhubah}(h]h ]h"]h$]h&]uh1j.hj$0hhhj=0hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj1jRj1jSjTjUuh1jhhhj=!hNhNubjW)}(hX**Parameters** ``struct vc_data *vc`` virtual console **Description** Called when the console is taken over by the kernel debugger, this function needs to save the current console state, then put the console into a state suitable for the kernel debugger.h](h)}(h**Parameters**h]ja)}(hj1h]h Parameters}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj 1ubjw)}(hhh]j|)}(h'``struct vc_data *vc`` virtual console h](j)}(h``struct vc_data *vc``h]j)}(hj01h]hstruct vc_data *vc}(hj21hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj*1ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hjI1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE1hMhjF1ubah}(h]h ]h"]h$]h&]uh1jhj*1ubeh}(h]h ]h"]h$]h&]uh1j{hjE1hMhj'1ubah}(h]h ]h"]h$]h&]uh1jvhj 1ubh)}(h**Description**h]ja)}(hjk1h]h Description}(hjm1hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hji1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj 1ubh)}(hCalled when the console is taken over by the kernel debugger, this function needs to save the current console state, then put the console into a state suitable for the kernel debugger.h]hCalled when the console is taken over by the kernel debugger, this function needs to save the current console state, then put the console into a state suitable for the kernel debugger.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj 1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_debug_leave (C function)c.con_debug_leavehNtauh1jhj=!hhhNhNubj)}(hhh](j)}(hvoid con_debug_leave (void)h]j)}(hvoid con_debug_leave(void)h](jh!)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj1hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1hhhj1hMubj)}(hcon_debug_leaveh]j)}(hcon_debug_leaveh]hcon_debug_leave}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj1hhhj1hMubj!)}(h(void)h]j!)}(hvoidh]jh!)}(hvoidh]hvoid}(hj1hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj1ubah}(h]h ]h"]h$]h&]noemphhhuh1j!hj1ubah}(h]h ]h"]h$]h&]hhuh1j!hj1hhhj1hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj1hhhj1hMubah}(h]j1ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj1hMhj1hhubj/)}(hhh]h)}(hrestore console stateh]hrestore console state}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj2hhubah}(h]h ]h"]h$]h&]uh1j.hj1hhhj1hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj/2jRj/2jSjTjUuh1jhhhj=!hNhNubjW)}(h**Parameters** ``void`` no arguments **Description** Restore the console state to what it was before the kernel debugger was invoked.h](h)}(h**Parameters**h]ja)}(hj92h]h Parameters}(hj;2hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj72ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj32ubjw)}(hhh]j|)}(h``void`` no arguments h](j)}(h``void``h]j)}(hjX2h]hvoid}(hjZ2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV2ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhjR2ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjq2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjm2hKhjn2ubah}(h]h ]h"]h$]h&]uh1jhjR2ubeh}(h]h ]h"]h$]h&]uh1j{hjm2hKhjO2ubah}(h]h ]h"]h$]h&]uh1jvhj32ubh)}(h**Description**h]ja)}(hj2h]h Description}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj2ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj32ubh)}(hPRestore the console state to what it was before the kernel debugger was invoked.h]hPRestore the console state to what it was before the kernel debugger was invoked.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj32ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%do_unregister_con_driver (C function)c.do_unregister_con_driverhNtauh1jhj=!hhhNhNubj)}(hhh](j)}(h6int do_unregister_con_driver (const struct consw *csw)h]j)}(h5int do_unregister_con_driver(const struct consw *csw)h](jh!)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj2hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM,ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhj2hM,ubj)}(hdo_unregister_con_driverh]j)}(hdo_unregister_con_driverh]hdo_unregister_con_driver}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj2hhhj2hM,ubj!)}(h(const struct consw *csw)h]j!)}(hconst struct consw *cswh](j)}(hj!h]hconst}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj"3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hjh]hstruct}(hj03hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(h h]h }(hj=3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubh)}(hhh]j)}(hconswh]hconsw}(hjN3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK3ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetjP3modnameN classnameNjj)}j]j")}j!j2sbc.do_unregister_con_driverasbuh1hhj3ubj)}(h h]h }(hjn3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj")}(hj"h]h*}(hj|3hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj3ubj)}(hcswh]hcsw}(hj3hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj 3ubah}(h]h ]h"]h$]h&]hhuh1j!hj2hhhj2hM,ubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj2hhhj2hM,ubah}(h]j2ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj2hM,hj2hhubj/)}(hhh]h)}(h,unregister console driver from console layerh]h,unregister console driver from console layer}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM,hj3hhubah}(h]h ]h"]h$]h&]uh1j.hj2hhhj2hM,ubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj3jRj3jSjTjUuh1jhhhj=!hNhNubjW)}(hXv**Parameters** ``const struct consw *csw`` console driver **Description** All drivers that registers to the console layer must call this function upon exit, or if the console driver is in a state where it won't be able to handle console services, such as the framebuffer console without loaded framebuffer drivers. The driver must unbind first prior to unregistration.h](h)}(h**Parameters**h]ja)}(hj3h]h Parameters}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM0hj3ubjw)}(hhh]j|)}(h+``const struct consw *csw`` console driver h](j)}(h``const struct consw *csw``h]j)}(hj3h]hconst struct consw *csw}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM-hj3ubj)}(hhh]h)}(hconsole driverh]hconsole driver}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4hM-hj 4ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1j{hj 4hM-hj3ubah}(h]h ]h"]h$]h&]uh1jvhj3ubh)}(h**Description**h]ja)}(hj/4h]h Description}(hj14hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj-4ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM/hj3ubh)}(hAll drivers that registers to the console layer must call this function upon exit, or if the console driver is in a state where it won't be able to handle console services, such as the framebuffer console without loaded framebuffer drivers.h]hAll drivers that registers to the console layer must call this function upon exit, or if the console driver is in a state where it won’t be able to handle console services, such as the framebuffer console without loaded framebuffer drivers.}(hjE4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM/hj3ubh)}(h5The driver must unbind first prior to unregistration.h]h5The driver must unbind first prior to unregistration.}(hjT4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM4hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhj=!hhhNhNubh)}(hhh](h)}(h Internalsh]h Internals}(hjm4hhhNhNubah}(h]h ]h"]h$]h&]jjvuh1hhjj4hhhhhK(ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsel_loadlut (C function) c.sel_loadluthNtauh1jhjj4hhhNhNubj)}(hhh](j)}(h!int sel_loadlut (u32 __user *lut)h]j)}(h int sel_loadlut(u32 __user *lut)h](jh!)}(hinth]hint}(hj4hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj4hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKsubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hKsubj)}(h sel_loadluth]j)}(h sel_loadluth]h sel_loadlut}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj4hhhj4hKsubj!)}(h(u32 __user *lut)h]j!)}(hu32 __user *luth](h)}(hhh]j)}(hu32h]hu32}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj4modnameN classnameNjj)}j]j")}j!j4sb c.sel_loadlutasbuh1hhj4ubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh__user}(hj4hhhNhNubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj")}(hj"h]h*}(hj5hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj4ubj)}(hluth]hlut}(hj!5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj4ubah}(h]h ]h"]h$]h&]hhuh1j!hj4hhhj4hKsubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj4hhhj4hKsubah}(h]j4ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj4hKshj4hhubj/)}(hhh]h)}(hload the LUT tableh]hload the LUT table}(hjK5hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKshjH5hhubah}(h]h ]h"]h$]h&]uh1j.hj4hhhj4hKsubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQjc5jRjc5jSjTjUuh1jhhhjj4hNhNubjW)}(h**Parameters** ``u32 __user *lut`` user table **Description** Load the LUT table from user space. Make a temporary copy so a partial update doesn't make a mess. Locking: The console lock is acquired.h](h)}(h**Parameters**h]ja)}(hjm5h]h Parameters}(hjo5hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjk5ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKwhjg5ubjw)}(hhh]j|)}(h``u32 __user *lut`` user table h](j)}(h``u32 __user *lut``h]j)}(hj5h]hu32 __user *lut}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKthj5ubj)}(hhh]h)}(h user tableh]h user table}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hKthj5ubah}(h]h ]h"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]uh1j{hj5hKthj5ubah}(h]h ]h"]h$]h&]uh1jvhjg5ubh)}(h**Description**h]ja)}(hj5h]h Description}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj5ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKvhjg5ubh)}(hbLoad the LUT table from user space. Make a temporary copy so a partial update doesn't make a mess.h]hdLoad the LUT table from user space. Make a temporary copy so a partial update doesn’t make a mess.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKuhjg5ubh)}(h&Locking: The console lock is acquired.h]h&Locking: The console lock is acquired.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKxhjg5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jset_selection_user (C function)c.set_selection_userhNtauh1jhjj4hhhNhNubj)}(hhh](j)}(hYint set_selection_user (const struct tiocl_selection __user *sel, struct tty_struct *tty)h]j)}(hXint set_selection_user(const struct tiocl_selection __user *sel, struct tty_struct *tty)h](jh!)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj6hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKubj)}(h h]h }(hj*6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj)6hKubj)}(hset_selection_userh]j)}(hset_selection_userh]hset_selection_user}(hj<6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj86ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj6hhhj)6hKubj!)}(hB(const struct tiocl_selection __user *sel, struct tty_struct *tty)h](j!)}(h(const struct tiocl_selection __user *selh](j)}(hj!h]hconst}(hjX6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubj)}(h h]h }(hje6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubj)}(hjh]hstruct}(hjs6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubh)}(hhh]j)}(htiocl_selectionh]htiocl_selection}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj6modnameN classnameNjj)}j]j")}j!j>6sbc.set_selection_userasbuh1hhjT6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubh__user}(hjT6hhhNhNubj)}(h h]h }(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubj")}(hj"h]h*}(hj6hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjT6ubj)}(hselh]hsel}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjP6ubj!)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj7modnameN classnameNjj)}j]j6c.set_selection_userasbuh1hhj6ubj)}(h h]h }(hj37hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj")}(hj"h]h*}(hjA7hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj6ubj)}(httyh]htty}(hjN7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjP6ubeh}(h]h ]h"]h$]h&]hhuh1j!hj6hhhj)6hKubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj6hhhj)6hKubah}(h]j6ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj)6hKhj6hhubj/)}(hhh]h)}(hset the current selection.h]hset the current selection.}(hjx7hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhju7hhubah}(h]h ]h"]h$]h&]uh1j.hj6hhhj)6hKubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj7jRj7jSjTjUuh1jhhhjj4hNhNubjW)}(hXG**Parameters** ``const struct tiocl_selection __user *sel`` user selection info ``struct tty_struct *tty`` the console tty **Description** Invoked by the ioctl handle for the vt layer. Locking: The entire selection process is managed under the console_lock. It's a lot under the lock but its hardly a performance path.h](h)}(h**Parameters**h]ja)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj7ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubjw)}(hhh](j|)}(hA``const struct tiocl_selection __user *sel`` user selection info h](j)}(h,``const struct tiocl_selection __user *sel``h]j)}(hj7h]h(const struct tiocl_selection __user *sel}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubj)}(hhh]h)}(huser selection infoh]huser selection info}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1j{hj7hKhj7ubj|)}(h+``struct tty_struct *tty`` the console tty h](j)}(h``struct tty_struct *tty``h]j)}(hj7h]hstruct tty_struct *tty}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubj)}(hhh]h)}(hthe console ttyh]hthe console tty}(hj 8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hKhj8ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1j{hj8hKhj7ubeh}(h]h ]h"]h$]h&]uh1jvhj7ubh)}(h**Description**h]ja)}(hj-8h]h Description}(hj/8hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj+8ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubh)}(h-Invoked by the ioctl handle for the vt layer.h]h-Invoked by the ioctl handle for the vt layer.}(hjC8hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubh)}(hLocking: The entire selection process is managed under the console_lock. It's a lot under the lock but its hardly a performance path.h]hLocking: The entire selection process is managed under the console_lock. It’s a lot under the lock but its hardly a performance path.}(hjR8hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_do_resize (C function)c.vc_do_resizehNtauh1jhjj4hhhNhNubj)}(hhh](j)}(htint vc_do_resize (struct tty_struct *tty, struct vc_data *vc, unsigned int cols, unsigned int lines, bool from_user)h]j)}(hsint vc_do_resize(struct tty_struct *tty, struct vc_data *vc, unsigned int cols, unsigned int lines, bool from_user)h](jh!)}(hinth]hint}(hj8hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj}8hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMaubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}8hhhj8hMaubj)}(h vc_do_resizeh]j)}(h vc_do_resizeh]h vc_do_resize}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj}8hhhj8hMaubj!)}(hc(struct tty_struct *tty, struct vc_data *vc, unsigned int cols, unsigned int lines, bool from_user)h](j!)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj8modnameN classnameNjj)}j]j")}j!j8sbc.vc_do_resizeasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubj")}(hj"h]h*}(hj 9hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj8ubj)}(httyh]htty}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubj!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hj09hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubj)}(h h]h }(hj=9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubh)}(hhh]j)}(hvc_datah]hvc_data}(hjN9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK9ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetjP9modnameN classnameNjj)}j]j8c.vc_do_resizeasbuh1hhj,9ubj)}(h h]h }(hjl9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubj")}(hj"h]h*}(hjz9hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj,9ubj)}(hvch]hvc}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubj!)}(hunsigned int colsh](jh!)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjh!)}(hinth]hint}(hj9hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hcolsh]hcols}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubj!)}(hunsigned int linesh](jh!)}(hunsignedh]hunsigned}(hj9hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjh!)}(hinth]hint}(hj :hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj9ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hlinesh]hlines}(hj):hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubj!)}(hbool from_userh](jh!)}(hj*h]hbool}(hjB:hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj>:ubj)}(h h]h }(hjO:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>:ubj)}(h from_userh]h from_user}(hj]:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubeh}(h]h ]h"]h$]h&]hhuh1j!hj}8hhhj8hMaubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjy8hhhj8hMaubah}(h]jt8ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj8hMahjv8hhubj/)}(hhh]h)}(hresizing method for the ttyh]hresizing method for the tty}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMahj:hhubah}(h]h ]h"]h$]h&]uh1j.hjv8hhhj8hMaubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj:jRj:jSjTjUuh1jhhhjj4hNhNubjW)}(hX-**Parameters** ``struct tty_struct *tty`` tty being resized ``struct vc_data *vc`` virtual console private data ``unsigned int cols`` columns ``unsigned int lines`` lines ``bool from_user`` invoked by a user? **Description** Resize a virtual console, clipping according to the actual constraints. If the caller passes a tty structure then update the termios winsize information and perform any necessary signal handling. Locking: Caller must hold the console semaphore. Takes the termios rwsem and ctrl.lock of the tty IFF a tty is passed.h](h)}(h**Parameters**h]ja)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj:ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMehj:ubjw)}(hhh](j|)}(h-``struct tty_struct *tty`` tty being resized h](j)}(h``struct tty_struct *tty``h]j)}(hj:h]hstruct tty_struct *tty}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMbhj:ubj)}(hhh]h)}(htty being resizedh]htty being resized}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMbhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1j{hj:hMbhj:ubj|)}(h4``struct vc_data *vc`` virtual console private data h](j)}(h``struct vc_data *vc``h]j)}(hj;h]hstruct vc_data *vc}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMchj:ubj)}(hhh]h)}(hvirtual console private datah]hvirtual console private data}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMchj;ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1j{hj;hMchj:ubj|)}(h``unsigned int cols`` columns h](j)}(h``unsigned int cols``h]j)}(hj:;h]hunsigned int cols}(hj<;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMdhj4;ubj)}(hhh]h)}(hcolumnsh]hcolumns}(hjS;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjO;hMdhjP;ubah}(h]h ]h"]h$]h&]uh1jhj4;ubeh}(h]h ]h"]h$]h&]uh1j{hjO;hMdhj:ubj|)}(h``unsigned int lines`` lines h](j)}(h``unsigned int lines``h]j)}(hjs;h]hunsigned int lines}(hju;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMehjm;ubj)}(hhh]h)}(hlinesh]hlines}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMehj;ubah}(h]h ]h"]h$]h&]uh1jhjm;ubeh}(h]h ]h"]h$]h&]uh1j{hj;hMehj:ubj|)}(h&``bool from_user`` invoked by a user? h](j)}(h``bool from_user``h]j)}(hj;h]hbool from_user}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMfhj;ubj)}(hhh]h)}(hinvoked by a user?h]hinvoked by a user?}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMfhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1j{hj;hMfhj:ubeh}(h]h ]h"]h$]h&]uh1jvhj:ubh)}(h**Description**h]ja)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj;ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhhj:ubh)}(hResize a virtual console, clipping according to the actual constraints. If the caller passes a tty structure then update the termios winsize information and perform any necessary signal handling.h]hResize a virtual console, clipping according to the actual constraints. If the caller passes a tty structure then update the termios winsize information and perform any necessary signal handling.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMghj:ubh)}(hvLocking: Caller must hold the console semaphore. Takes the termios rwsem and ctrl.lock of the tty IFF a tty is passed.h]hvLocking: Caller must hold the console semaphore. Takes the termios rwsem and ctrl.lock of the tty IFF a tty is passed.}(hj <hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMkhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvt_resize (C function) c.vt_resizehNtauh1jhjj4hhhNhNubj)}(hhh](j)}(h:int vt_resize (struct tty_struct *tty, struct winsize *ws)h]j)}(h9int vt_resize(struct tty_struct *tty, struct winsize *ws)h](jh!)}(hinth]hint}(hj;<hhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj7<hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hjJ<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7<hhhjI<hMubj)}(h vt_resizeh]j)}(h vt_resizeh]h vt_resize}(hj\<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjX<ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj7<hhhjI<hMubj!)}(h,(struct tty_struct *tty, struct winsize *ws)h](j!)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hjx<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj<modnameN classnameNjj)}j]j")}j!j^<sb c.vt_resizeasbuh1hhjt<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubj")}(hj"h]h*}(hj<hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjt<ubj)}(httyh]htty}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjt<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjp<ubj!)}(hstruct winsize *wsh](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hwinsizeh]hwinsize}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetj =modnameN classnameNjj)}j]j< c.vt_resizeasbuh1hhj<ubj)}(h h]h }(hj&=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj")}(hj"h]h*}(hj4=hhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj<ubj)}(hwsh]hws}(hjA=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjp<ubeh}(h]h ]h"]h$]h&]hhuh1j!hj7<hhhjI<hMubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hj3<hhhjI<hMubah}(h]j.<ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjI<hMhj0<hhubj/)}(hhh]h)}(h resize a VTh]h resize a VT}(hjk=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjh=hhubah}(h]h ]h"]h$]h&]uh1j.hj0<hhhjI<hMubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQj=jRj=jSjTjUuh1jhhhjj4hNhNubjW)}(hX**Parameters** ``struct tty_struct *tty`` tty to resize ``struct winsize *ws`` winsize attributes **Description** Resize a virtual terminal. This is called by the tty layer as we register our own handler for resizing. The mutual helper does all the actual work. Locking: Takes the console sem and the called methods then take the tty termios_rwsem and the tty ctrl.lock in that order.h](h)}(h**Parameters**h]ja)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj=ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubjw)}(hhh](j|)}(h)``struct tty_struct *tty`` tty to resize h](j)}(h``struct tty_struct *tty``h]j)}(hj=h]hstruct tty_struct *tty}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubj)}(hhh]h)}(h tty to resizeh]h tty to resize}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1j{hj=hMhj=ubj|)}(h*``struct winsize *ws`` winsize attributes h](j)}(h``struct winsize *ws``h]j)}(hj=h]hstruct winsize *ws}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubj)}(hhh]h)}(hwinsize attributesh]hwinsize attributes}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMhj=ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1j{hj=hMhj=ubeh}(h]h ]h"]h$]h&]uh1jvhj=ubh)}(h**Description**h]ja)}(hj >h]h Description}(hj">hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubh)}(hResize a virtual terminal. This is called by the tty layer as we register our own handler for resizing. The mutual helper does all the actual work.h]hResize a virtual terminal. This is called by the tty layer as we register our own handler for resizing. The mutual helper does all the actual work.}(hj6>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubh)}(hzLocking: Takes the console sem and the called methods then take the tty termios_rwsem and the tty ctrl.lock in that order.h]hzLocking: Takes the console sem and the called methods then take the tty termios_rwsem and the tty ctrl.lock in that order.}(hjE>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_ctl_state (C enum)c.vc_ctl_statehNtauh1jhjj4hhhNhNubj)}(hhh](j)}(h vc_ctl_stateh]j)}(henum vc_ctl_stateh](j)}(hjh]henum}(hjt>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp>hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM"ubj)}(h h]h }(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp>hhhj>hM"ubj)}(h vc_ctl_stateh]j)}(hjn>h]h vc_ctl_state}(hj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]hhuh1jhjp>hhhj>hM"ubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjl>hhhj>hM"ubah}(h]jg>ah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj>hM"hji>hhubj/)}(hhh]h)}(h control characters state of a vth]h control characters state of a vt}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMmhj>hhubah}(h]h ]h"]h$]h&]uh1j.hji>hhhj>hM"ubeh}(h]h ](jKenumeh"]h$]h&]jPjKjQj>jRj>jSjTjUuh1jhhhjj4hNhNubjW)}(hX**Constants** ``ESnormal`` initial state, no control characters parsed ``ESesc`` ESC parsed ``ESsquare`` CSI parsed -- modifiers/parameters/ctrl chars expected ``ESgetpars`` CSI parsed -- parameters/ctrl chars expected ``ESfunckey`` CSI [ parsed ``EShash`` ESC # parsed ``ESsetG0`` ESC ( parsed ``ESsetG1`` ESC ) parsed ``ESpercent`` ESC % parsed ``EScsiignore`` CSI [0x20-0x3f] parsed ``ESnonstd`` OSC parsed ``ESpalette`` OSC P parsed ``ESosc`` OSC [0-9] parsed ``ESANSI_first`` first state for ignoring ansi control sequences ``ESapc`` ESC _ parsed ``ESpm`` ESC ^ parsed ``ESdcs`` ESC P parsed ``ESANSI_last`` last state for ignoring ansi control sequencesh](h)}(h **Constants**h]ja)}(hj>h]h Constants}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1j`hj>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMqhj>ubjw)}(hhh](j|)}(h9``ESnormal`` initial state, no control characters parsed h](j)}(h ``ESnormal``h]j)}(hj>h]hESnormal}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMthj>ubj)}(hhh]h)}(h+initial state, no control characters parsedh]h+initial state, no control characters parsed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ?hMthj ?ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1j{hj ?hMthj>ubj|)}(h``ESesc`` ESC parsed h](j)}(h ``ESesc``h]j)}(hj0?h]hESesc}(hj2?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMwhj*?ubj)}(hhh]h)}(h ESC parsedh]h ESC parsed}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE?hMwhjF?ubah}(h]h ]h"]h$]h&]uh1jhj*?ubeh}(h]h ]h"]h$]h&]uh1j{hjE?hMwhj>ubj|)}(hD``ESsquare`` CSI parsed -- modifiers/parameters/ctrl chars expected h](j)}(h ``ESsquare``h]j)}(hji?h]hESsquare}(hjk?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjg?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMzhjc?ubj)}(hhh]h)}(h6CSI parsed -- modifiers/parameters/ctrl chars expectedh]h6CSI parsed -- modifiers/parameters/ctrl chars expected}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~?hMzhj?ubah}(h]h ]h"]h$]h&]uh1jhjc?ubeh}(h]h ]h"]h$]h&]uh1j{hj~?hMzhj>ubj|)}(h;``ESgetpars`` CSI parsed -- parameters/ctrl chars expected h](j)}(h ``ESgetpars``h]j)}(hj?h]h ESgetpars}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM}hj?ubj)}(hhh]h)}(h,CSI parsed -- parameters/ctrl chars expectedh]h,CSI parsed -- parameters/ctrl chars expected}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hM}hj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1j{hj?hM}hj>ubj|)}(h``ESfunckey`` CSI [ parsed h](j)}(h ``ESfunckey``h]j)}(hj?h]h ESfunckey}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj?ubj)}(hhh]h)}(h CSI [ parsedh]h CSI [ parsed}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1j{hj?hMhj>ubj|)}(h``EShash`` ESC # parsed h](j)}(h ``EShash``h]j)}(hj@h]hEShash}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj@ubj)}(hhh]h)}(h ESC # parsedh]h ESC # parsed}(hj-@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)@hMhj*@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1j{hj)@hMhj>ubj|)}(h``ESsetG0`` ESC ( parsed h](j)}(h ``ESsetG0``h]j)}(hjM@h]hESsetG0}(hjO@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjK@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjG@ubj)}(hhh]h)}(h ESC ( parsedh]h ESC ( parsed}(hjf@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb@hMhjc@ubah}(h]h ]h"]h$]h&]uh1jhjG@ubeh}(h]h ]h"]h$]h&]uh1j{hjb@hMhj>ubj|)}(h``ESsetG1`` ESC ) parsed h](j)}(h ``ESsetG1``h]j)}(hj@h]hESsetG1}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj@ubj)}(hhh]h)}(h ESC ) parsedh]h ESC ) parsed}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1j{hj@hMhj>ubj|)}(h``ESpercent`` ESC % parsed h](j)}(h ``ESpercent``h]j)}(hj@h]h ESpercent}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj@ubj)}(hhh]h)}(h ESC % parsedh]h ESC % parsed}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@hMhj@ubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1j{hj@hMhj>ubj|)}(h'``EScsiignore`` CSI [0x20-0x3f] parsed h](j)}(h``EScsiignore``h]j)}(hj@h]h EScsiignore}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj@ubj)}(hhh]h)}(hCSI [0x20-0x3f] parsedh]hCSI [0x20-0x3f] parsed}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj AhMhjAubah}(h]h ]h"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]uh1j{hj AhMhj>ubj|)}(h``ESnonstd`` OSC parsed h](j)}(h ``ESnonstd``h]j)}(hj1Ah]hESnonstd}(hj3AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Aubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj+Aubj)}(hhh]h)}(h OSC parsedh]h OSC parsed}(hjJAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFAhMhjGAubah}(h]h ]h"]h$]h&]uh1jhj+Aubeh}(h]h ]h"]h$]h&]uh1j{hjFAhMhj>ubj|)}(h``ESpalette`` OSC P parsed h](j)}(h ``ESpalette``h]j)}(hjjAh]h ESpalette}(hjlAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjdAubj)}(hhh]h)}(h OSC P parsedh]h OSC P parsed}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjdAubeh}(h]h ]h"]h$]h&]uh1j{hjAhMhj>ubj|)}(h``ESosc`` OSC [0-9] parsed h](j)}(h ``ESosc``h]j)}(hjAh]hESosc}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjAubj)}(hhh]h)}(hOSC [0-9] parsedh]hOSC [0-9] parsed}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1j{hjAhMhj>ubj|)}(hA``ESANSI_first`` first state for ignoring ansi control sequences h](j)}(h``ESANSI_first``h]j)}(hjAh]h ESANSI_first}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjAubj)}(hhh]h)}(h/first state for ignoring ansi control sequencesh]h/first state for ignoring ansi control sequences}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1j{hjAhMhj>ubj|)}(h``ESapc`` ESC _ parsed h](j)}(h ``ESapc``h]j)}(hjBh]hESapc}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjBubj)}(hhh]h)}(h ESC _ parsedh]h ESC _ parsed}(hj.BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*BhMhj+Bubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1j{hj*BhMhj>ubj|)}(h``ESpm`` ESC ^ parsed h](j)}(h``ESpm``h]j)}(hjNBh]hESpm}(hjPBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLBubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjHBubj)}(hhh]h)}(h ESC ^ parsedh]h ESC ^ parsed}(hjgBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcBhMhjdBubah}(h]h ]h"]h$]h&]uh1jhjHBubeh}(h]h ]h"]h$]h&]uh1j{hjcBhMhj>ubj|)}(h``ESdcs`` ESC P parsed h](j)}(h ``ESdcs``h]j)}(hjBh]hESdcs}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjBubj)}(hhh]h)}(h ESC P parsedh]h ESC P parsed}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1j{hjBhMhj>ubj|)}(h>``ESANSI_last`` last state for ignoring ansi control sequencesh](j)}(h``ESANSI_last``h]j)}(hjBh]h ESANSI_last}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjBubj)}(hhh]h)}(h.last state for ignoring ansi control sequencesh]h.last state for ignoring ansi control sequences}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1j{hjBhMhj>ubeh}(h]h ]h"]h$]h&]uh1jvhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j vc_sanitize_unicode (C function)c.vc_sanitize_unicodehNtauh1jhjj4hhhNhNubj)}(hhh](j)}(h%int vc_sanitize_unicode (const int c)h]j)}(h$int vc_sanitize_unicode(const int c)h](jh!)}(hinth]hint}(hjChhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hjChhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM ubj)}(h h]h }(hj)ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhj(ChM ubj)}(hvc_sanitize_unicodeh]j)}(hvc_sanitize_unicodeh]hvc_sanitize_unicode}(hj;ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7Cubah}(h]h ](jjeh"]h$]h&]hhuh1jhjChhhj(ChM ubj!)}(h (const int c)h]j!)}(h const int ch](j)}(hj!h]hconst}(hjWChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubj)}(h h]h }(hjdChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubjh!)}(hinth]hint}(hjrChhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hjSCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubj)}(hjKh]hc}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjSCubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjOCubah}(h]h ]h"]h$]h&]hhuh1j!hjChhhj(ChM ubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjChhhj(ChM ubah}(h]j Cah ](j&j'eh"]h$]h&]j+j,)j-huh1jhj(ChM hjChhubj/)}(hhh]h)}(h3Replace invalid Unicode code points with ``U+FFFD``h](h)Replace invalid Unicode code points with }(hjChhhNhNubj)}(h ``U+FFFD``h]hU+FFFD}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjChhubah}(h]h ]h"]h$]h&]uh1j.hjChhhj(ChM ubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQjCjRjCjSjTjUuh1jhhhjj4hNhNubjW)}(h9**Parameters** ``const int c`` the received code pointh](h)}(h**Parameters**h]ja)}(hjCh]h Parameters}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjCubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjCubjw)}(hhh]j|)}(h'``const int c`` the received code pointh](j)}(h``const int c``h]j)}(hjDh]h const int c}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjDubj)}(hhh]h)}(hthe received code pointh]hthe received code point}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1j{hjDhM hjCubah}(h]h ]h"]h$]h&]uh1jvhjCubeh}(h]h ] kernelindentah"]h$]h&]uh1jVhjj4hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!vc_translate_unicode (C function)c.vc_translate_unicodehNtauh1jhjj4hhhNhNubj)}(hhh](j)}(hBint vc_translate_unicode (struct vc_data *vc, int c, bool *rescan)h]j)}(hAint vc_translate_unicode(struct vc_data *vc, int c, bool *rescan)h](jh!)}(hinth]hint}(hj`DhhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj\DhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM ubj)}(h h]h }(hjoDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\DhhhjnDhM ubj)}(hvc_translate_unicodeh]j)}(hvc_translate_unicodeh]hvc_translate_unicode}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}Dubah}(h]h ](jjeh"]h$]h&]hhuh1jhj\DhhhjnDhM ubj!)}(h)(struct vc_data *vc, int c, bool *rescan)h](j!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hvc_datah]hvc_data}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainjKreftypej! reftargetjDmodnameN classnameNjj)}j]j")}j!jDsbc.vc_translate_unicodeasbuh1hhjDubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj")}(hj"h]h*}(hjDhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hjDubj)}(hvch]hvc}(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjDubj!)}(hint ch](jh!)}(hinth]hint}(hjEhhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj Eubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubj)}(hjKh]hc}(hj+EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Eubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjDubj!)}(h bool *rescanh](jh!)}(hj*h]hbool}(hjCEhhhNhNubah}(h]h ]jt!ah"]h$]h&]uh1jg!hj?Eubj)}(h h]h }(hjPEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Eubj")}(hj"h]h*}(hj^EhhhNhNubah}(h]h ]j#"ah"]h$]h&]uh1j"hj?Eubj)}(hrescanh]hrescan}(hjkEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?Eubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjDubeh}(h]h ]h"]h$]h&]hhuh1j!hj\DhhhjnDhM ubeh}(h]h ]h"]h$]h&]hhj uh1jj!j"hjXDhhhjnDhM ubah}(h]jSDah ](j&j'eh"]h$]h&]j+j,)j-huh1jhjnDhM hjUDhhubj/)}(hhh]h)}(hECombine UTF-8 into Unicode in :c:type:`vc_data.vc_utf_char `h](hCombine UTF-8 into Unicode in }(hjEhhhNhNubh)}(h':c:type:`vc_data.vc_utf_char `h]j)}(hjEh]hvc_data.vc_utf_char}(hjEhhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjj)}j]jDc.vc_translate_unicodeasbjvc_datauh1hhj8hMahjEubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEhhubah}(h]h ]h"]h$]h&]uh1j.hjUDhhhjnDhM ubeh}(h]h ](jKfunctioneh"]h$]h&]jPjKjQjEjRjEjSjTjUuh1jhhhjj4hNhNubjW)}(hX**Parameters** ``struct vc_data *vc`` virtual console ``int c`` UTF-8 byte to translate ``bool *rescan`` set to true iff **c** wasn't consumed here and needs to be re-processed **Description** * :c:type:`vc_data.vc_utf_char ` is the being-constructed Unicode code point. * :c:type:`vc_data.vc_utf_count ` is the number of continuation bytes still expected to arrive. * :c:type:`vc_data.vc_npar ` is the number of continuation bytes arrived so far. **Return** * ``-1`` - Input OK so far, **c** consumed, further bytes expected. * ``0xFFFD`` - Possibility 1: input invalid, **c** may have been consumed (see desc. of **rescan**). Possibility 2: input OK, **c** consumed, ``U+FFFD`` is the resulting code point. ``U+FFFD`` is valid, ``REPLACEMENT CHARACTER``. * otherwise - Input OK, **c** consumed, resulting code point returned.h](h)}(h**Parameters**h]ja)}(hjEh]h Parameters}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjEubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEubjw)}(hhh](j|)}(h'``struct vc_data *vc`` virtual console h](j)}(h``struct vc_data *vc``h]j)}(hjEh]hstruct vc_data *vc}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1j{hjFhM hjEubj|)}(h"``int c`` UTF-8 byte to translate h](j)}(h ``int c``h]j)}(hj3Fh]hint c}(hj5FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1Fubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hj-Fubj)}(hhh]h)}(hUTF-8 byte to translateh]hUTF-8 byte to translate}(hjLFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHFhM hjIFubah}(h]h ]h"]h$]h&]uh1jhj-Fubeh}(h]h ]h"]h$]h&]uh1j{hjHFhM hjEubj|)}(hY``bool *rescan`` set to true iff **c** wasn't consumed here and needs to be re-processed h](j)}(h``bool *rescan``h]j)}(hjlFh]h bool *rescan}(hjnFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjfFubj)}(hhh]h)}(hGset to true iff **c** wasn't consumed here and needs to be re-processedh](hset to true iff }(hjFhhhNhNubja)}(h**c**h]hc}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjFubh4 wasn’t consumed here and needs to be re-processed}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhM hjFubah}(h]h ]h"]h$]h&]uh1jhjfFubeh}(h]h ]h"]h$]h&]uh1j{hjFhM hjEubeh}(h]h ]h"]h$]h&]uh1jvhjEubh)}(h**Description**h]ja)}(hjFh]h Description}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjFubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEubh)}(hhh](h)}(hT:c:type:`vc_data.vc_utf_char ` is the being-constructed Unicode code point.h]h)}(hjFh](h)}(h':c:type:`vc_data.vc_utf_char `h]j)}(hjFh]hvc_data.vc_utf_char}(hjFhhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjFubh- is the being-constructed Unicode code point.}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjFhM hjFubah}(h]h ]h"]h$]h&]uh1hhjFubh)}(hf:c:type:`vc_data.vc_utf_count ` is the number of continuation bytes still expected to arrive.h]h)}(hf:c:type:`vc_data.vc_utf_count ` is the number of continuation bytes still expected to arrive.h](h)}(h(:c:type:`vc_data.vc_utf_count `h]j)}(hjGh]hvc_data.vc_utf_count}(hjGhhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hj Gubh> is the number of continuation bytes still expected to arrive.}(hj GhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj0GhM hj Gubah}(h]h ]h"]h$]h&]uh1hhjFubh)}(hX:c:type:`vc_data.vc_npar ` is the number of continuation bytes arrived so far. h]h)}(hW:c:type:`vc_data.vc_npar ` is the number of continuation bytes arrived so far.h](h)}(h#:c:type:`vc_data.vc_npar `h]j)}(hjKGh]hvc_data.vc_npar}(hjMGhhhNhNubah}(h]h ](jjKc-typeeh"]h$]h&]uh1jhjIGubah}(h]h ]h"]h$]h&]refdocj refdomainjKreftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEGubh4 is the number of continuation bytes arrived so far.}(hjEGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhGhM hjAGubah}(h]h ]h"]h$]h&]uh1hhjFubeh}(h]h ]h"]h$]h&]bulletj"uh1hhjFhM hjEubh)}(h **Return**h]ja)}(hjGh]hReturn}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjGubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjEubh)}(hhh](h)}(hA``-1`` - Input OK so far, **c** consumed, further bytes expected.h]h)}(hjGh](j)}(h``-1``h]h-1}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh - Input OK so far, }(hjGhhhNhNubja)}(h**c**h]hc}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjGubh" consumed, further bytes expected.}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjGubah}(h]h ]h"]h$]h&]uh1hhjGubh)}(hX``0xFFFD`` - Possibility 1: input invalid, **c** may have been consumed (see desc. of **rescan**). Possibility 2: input OK, **c** consumed, ``U+FFFD`` is the resulting code point. ``U+FFFD`` is valid, ``REPLACEMENT CHARACTER``.h]jw)}(hhh]j|)}(h``0xFFFD`` - Possibility 1: input invalid, **c** may have been consumed (see desc. of **rescan**). Possibility 2: input OK, **c** consumed, ``U+FFFD`` is the resulting code point. ``U+FFFD`` is valid, ``REPLACEMENT CHARACTER``.h](j)}(hL``0xFFFD`` - Possibility 1: input invalid, **c** may have been consumed (seeh](j)}(h ``0xFFFD``h]h0xFFFD}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubh! - Possibility 1: input invalid, }(hjGhhhNhNubja)}(h**c**h]hc}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjGubh may have been consumed (see}(hjGhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjGubj)}(hhh]h)}(hdesc. of **rescan**). Possibility 2: input OK, **c** consumed, ``U+FFFD`` is the resulting code point. ``U+FFFD`` is valid, ``REPLACEMENT CHARACTER``.h](h desc. of }(hjHhhhNhNubja)}(h **rescan**h]hrescan}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjHubh). Possibility 2: input OK, }(hjHhhhNhNubja)}(h**c**h]hc}(hj*HhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hjHubh consumed, }(hjHhhhNhNubj)}(h ``U+FFFD``h]hU+FFFD}(hjjl>j CjCjSDjXDjHjHhhjhj5j,jWjNjvjmu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jJKsRparse_messages]hsystem_message)}(hhh]h)}(h,Duplicate implicit target name: "internals".h]h0Duplicate implicit target name: “internals”.}(hj4KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1Kubah}(h]h ]h"]h$]h&]j|alevelKtypeINFOsourcehlineK(uh1j/Khjj4hhhhhK(ubatransform_messages] transformerN include_log] decorationNhhub.