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]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget*/translations/pt_BR/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}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]refid internalsuh1hhjubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1hhj ubah}(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}(hjbhhhNhNubah}(h]id5ah ]h"]h$]h&]refidconsole-functionsuh1hhj_ubah}(h]h ]h"]h$]h&]uh1hhj\ubh)}(hhh]h)}(hhh]h)}(hhh]h)}(hhh]h Internals}(hjhhhNhNubah}(h]id6ah ]h"]h$]h&]refidid1uh1hhj~ubah}(h]h ]h"]h$]h&]uh1hhj{ubah}(h]h ]h"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&]uh1hhj\ubeh}(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}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjDhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](cenumeh"]h$]h&]domainj_objtypej`desctypej`noindex 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)}(hjrh]h Constants}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjpubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjlubhdefinition_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.hhKhjubh 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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(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.hhKhj ubj)}(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.}(hj*hhhNhNubah}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj&hKhjubj)}(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)}(hjKh]hCON_BOOT}(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)}(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.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhKhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjubj)}(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)}(hjh]h CON_ANYTIME}(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)}(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 }(hjhhhNhNubju)}(h **console**h]hconsole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh::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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(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)}(hj h]h CON_EXTENDED}(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.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.}(hj$hhhNhNubah}(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&]uh1jhj hKhjubj)}(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)}(hjEh]h CON_SUSPENDED}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(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.}(hj^hhhNhNubah}(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&]uh1jhj?ubeh}(h]h ]h"]h$]h&]uh1jhjZhKhjubj)}(hX``CON_NBCON`` Console can operate outside of the legacy style console_lock constraints. h](j)}(h ``CON_NBCON``h]j)}(hjh]h CON_NBCON}(hjhhhNhNubah}(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.hhKhjyubj)}(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&]uh1jhjyubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjhhhNhNubj)}(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 ]j ah"]h$]h&]uh1jhjhhhj hKubj)}(hconsoleh]j)}(hj h]hconsole}(hj3hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj/ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjhhhj hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj hhhj hKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj hKhjhhubjC)}(hhh]h)}(h The console descriptor structureh]h The console descriptor structure}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM6hjRhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj hKubeh}(h]h ](j_structeh"]h$]h&]jdj_jejmjfjmjgjhjiuh1jhhhjhNhNubjk)}(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](ju)}(h**Definition**h]h Definition}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjuubh:}(hjuhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM:hjqubh 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&]hhuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM<hjqubh)}(h **Members**h]ju)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM\hjqubj)}(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&]uh1jhjhM8hjubj)}(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&]uh1jhjhM9hjubj)}(h4``read`` Read callback for console input (Optional) h](j)}(h``read``h]j)}(hj6h]hread}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM:hj0ubj)}(hhh]h)}(h*Read callback for console input (Optional)h]h*Read callback for console input (Optional)}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhM:hjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhM:hjubj)}(h7``device`` The underlying TTY device driver (Optional) h](j)}(h ``device``h]j)}(hjoh]hdevice}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM;hjiubj)}(hhh]h)}(h+The underlying TTY device driver (Optional)h]h+The underlying TTY device driver (Optional)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM;hjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]uh1jhjhM;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&]uh1jhjhM<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&]uh1jhjhM=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)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hM>hj0ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj/hM>hjubj)}(h5``match`` Callback for matching a console (Optional) h](j)}(h ``match``h]j)}(hjSh]hmatch}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhM?hjMubj)}(hhh]h)}(h*Callback for matching a console (Optional)h]h*Callback for matching a console (Optional)}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhM?hjiubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjhhM?hjubj)}(h-``flags`` Console flags. See enum cons_flags h](j)}(h ``flags``h]j)}(hjh]hflags}(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"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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM@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&]uh1jhjhMAhjubj)}(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&]uh1jhjhMBhjubj)}(h``ispeed`` TTY input speed h](j)}(h ``ispeed``h]j)}(hj7h]hispeed}(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.hhMChj1ubj)}(hhh]h)}(hTTY input speedh]hTTY input speed}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMChjMubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhjLhMChjubj)}(h``ospeed`` TTY output speed h](j)}(h ``ospeed``h]j)}(hjph]hospeed}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMDhjjubj)}(hhh]h)}(hTTY output speedh]hTTY output speed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMDhjubah}(h]h ]h"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]uh1jhjhMDhjubj)}(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&]uh1jhjhMEhjubj)}(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&]uh1jhjhMFhjubj)}(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}(hj4 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0 hMGhj1 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj0 hMGhjubj)}(h)``node`` hlist node for the console list h](j)}(h``node``h]j)}(hjT h]hnode}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjR ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMHhjN ubj)}(hhh]h)}(hhlist node for the console listh]hhlist node for the console list}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhji hMHhjj ubah}(h]h ]h"]h$]h&]uh1jhjN ubeh}(h]h ]h"]h$]h&]uh1jhji 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)}(hj h]h write_atomic}(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)}(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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj 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().}(hjI 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.}(hjX 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[**].}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhj( ubj)}(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}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhjy 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.hhMhj ubah}(h]h ]h"]h$]h&]uh1jhjy ubeh}(h]h ]h"]h$]h&]uh1jhj hMhjv 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&]uh1jhj' hMhjv ubeh}(h]h ]h"]h$]h&]uh1jhj( ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj' 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 ubj)}(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().}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMhjN ubah}(h]h ]h"]h$]h&]uh1jhj; ubeh}(h]h ]h"]h$]h&]uh1jhjM hMhj8 ubah}(h]h ]h"]h$]h&]uh1jhj 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.}(hjr 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&]uh1jhj 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.hhMhj 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&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj 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&]uh1jhj hMJhjubj)}(hD``nbcon_seq`` Sequence number of the next record for nbcon to print h](j)}(h ``nbcon_seq``h]j)}(hj3 h]h nbcon_seq}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1 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}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH hMKhjI ubah}(h]h ]h"]h$]h&]uh1jhj- ubeh}(h]h ]h"]h$]h&]uh1jhjH hMKhjubj)}(hD``nbcon_device_ctxt`` Context available for non-printing operations h](j)}(h``nbcon_device_ctxt``h]j)}(hjl h]hnbcon_device_ctxt}(hjn hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMLhjf ubj)}(hhh]h)}(h-Context available for non-printing operationsh]h-Context available for non-printing operations}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMLhj ubah}(h]h ]h"]h$]h&]uh1jhjf ubeh}(h]h ]h"]h$]h&]uh1jhj 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&]uh1jhj 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&]uh1jhj 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}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj, hMOhj- ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj, hMOhjubj)}(h8``rcuwait`` RCU-safe wait object for **kthread** waking h](j)}(h ``rcuwait``h]j)}(hjP h]hrcuwait}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:12: ./include/linux/console.hhMPhjJ ubj)}(hhh]h)}(h+RCU-safe wait object for **kthread** wakingh](hRCU-safe wait object for }(hji hhhNhNubju)}(h **kthread**h]hkthread}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jthji ubh waking}(hji hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhje hMPhjf ubah}(h]h ]h"]h$]h&]uh1jhjJ ubeh}(h]h ]h"]h$]h&]uh1jhje 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 hhhNhNubju)}(h **kthread**h]hkthread}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj 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&]uh1jhj hMPhjubeh}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjhhhNhNubh)}(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 }(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj%hKubj)}(h nbcon_stateh]j)}(hjh]h nbcon_state}(hj8hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj4ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjhhhj%hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhj%hKubah}(h]j ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj%hKhj hhubjC)}(hhh]h)}(h console state for nbcon consolesh]h console state for nbcon consoles}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjWhhubah}(h]h ]h"]h$]h&]uh1jBhj hhhj%hKubeh}(h]h ](j_structeh"]h$]h&]jdj_jejrjfjrjgjhjiuh1jhhhj hNhNubjk)}(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](ju)}(h**Definition**h]h Definition}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjzubh:}(hjzhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjvubj)}(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&]hhuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjvubh)}(h **Members**h]ju)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjvubj)}(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&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(h``{unnamed_struct}`` anonymous h](j)}(h``{unnamed_struct}``h]j)}(hj9h]h{unnamed_struct}}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj3ubj)}(hhh]h)}(h anonymoush]h anonymous}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhKhjOubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjNhKhjubj)}(h+``prio`` The priority of the current owner h](j)}(h``prio``h]j)}(hjrh]hprio}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjlubj)}(hhh]h)}(h!The priority of the current ownerh]h!The priority of the current owner}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(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)}(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.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.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hKhjubj)}(h'``cpu`` The CPU on which the owner runsh](j)}(h``cpu``h]j)}(hjWh]hcpu}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjQubj)}(hhh]h)}(hThe CPU on which the owner runsh]hThe CPU on which the owner runs}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhjmubah}(h]h ]h"]h$]h&]uh1jhjQubeh}(h]h ]h"]h$]h&]uh1jhjlhKhjubeh}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj hhhNhNubh)}(h**Description**h]ju)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(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 }(hjhhhNhNubju)}(h **console**h]hconsole}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh::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 }(hjhhhNhNubju)}(h**prio**h]hprio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh and }(hjhhhNhNubju)}(h **req_prio**h]hreq_prio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh 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}(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 }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjhhhj*hKubj)}(h nbcon_prioh]j)}(hjh]h nbcon_prio}(hj=hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj9ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjhhhj*hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhj*hKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj*hKhjhhubjC)}(hhh]h)}(h)console owner priority for nbcon consolesh]h)console owner priority for nbcon consoles}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj\hhubah}(h]h ]h"]h$]h&]uh1jBhjhhhj*hKubeh}(h]h ](j_enumeh"]h$]h&]jdj_jejwjfjwjgjhjiuh1jhhhj hNhNubjk)}(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]ju)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhKhj{ubj)}(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&]uh1jhjhKhjubj)}(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&]uh1jhjhKhjubj)}(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.hhKhj ubj)}(hhh]h)}(hEmergency output (WARN/OOPS...)h]hEmergency output (WARN/OOPS...)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj(ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj'hKhjubj)}(h"``NBCON_PRIO_PANIC`` Panic output h](j)}(h``NBCON_PRIO_PANIC``h]j)}(hjKh]hNBCON_PRIO_PANIC}(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.hhKhjEubj)}(hhh]h)}(h Panic outputh]h Panic output}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hKhjaubah}(h]h ]h"]h$]h&]uh1jhjEubeh}(h]h ]h"]h$]h&]uh1jhj`hKhjubj)}(h0``NBCON_PRIO_MAX`` The number of priority levelsh](j)}(h``NBCON_PRIO_MAX``h]j)}(hjh]hNBCON_PRIO_MAX}(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.hhKhj~ubj)}(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&]uh1jhj~ubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhj{ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj hhhNhNubh)}(h**Description**h]ju)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(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 ]j ah"]h$]h&]uh1jhjhhhjhKubj)}(h nbcon_contexth]j)}(hjh]h nbcon_context}(hj%hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj!ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjhKhjhhubjC)}(hhh]h)}(h#Context for console acquire/releaseh]h#Context for console acquire/release}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjDhhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](j_structeh"]h$]h&]jdj_jej_jfj_jgjhjiuh1jhhhj hNhNubjk)}(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](ju)}(h**Definition**h]h Definition}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjgubh:}(hjghhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjcubj)}(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; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjcubh)}(h **Members**h]ju)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhjcubj)}(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&]uh1jhjhMhjubj)}(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&]uh1jhjhMhjubj)}(h!``prio`` Priority of the context 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.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&]uh1jhj;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)}(hj_h]hallow_unsafe_takeover}(hjahhhNhNubah}(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 hjYubj)}(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 }(hjxhhhNhNubju)}(h**prio**h]hprio}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjxubh@. It might cause a system freeze when the console is used later.}(hjxhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM 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&]uh1jhjhM 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&]uh1jhjhMhjubj)}(h5``seq`` The sequence number to print for this contexth](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: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}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMhj3ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj2hMhjubeh}(h]h ]h"]h$]h&]uh1jhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj 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}(hjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjshhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjshhhjhMubj)}(hnbcon_write_contexth]j)}(hjqh]hnbcon_write_context}(hjhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjshhhjhMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjohhhjhMubah}(h]jjah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjhMhjlhhubjC)}(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&]uh1jBhjlhhhjhMubeh}(h]h ](j_structeh"]h$]h&]jdj_jejjfjjgjhjiuh1jhhhj hNhNubjk)}(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](ju)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh:}(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&]hhuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM&hjubh)}(h **Members**h]ju)}(hjh]hMembers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM2hjubj)}(hhh](j)}(h"``ctxt`` The core console context h](j)}(h``ctxt``h]j)}(hj&h]hctxt}(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.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&]uh1jhj;hM"hjubj)}(h1``outbuf`` Pointer to the text buffer for output h](j)}(h ``outbuf``h]j)}(hj_h]houtbuf}(hjahhhNhNubah}(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#hjYubj)}(hhh]h)}(h%Pointer to the text buffer for outputh]h%Pointer to the text buffer for output}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthM#hjuubah}(h]h ]h"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]uh1jhjthM#hjubj)}(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$hjubj)}(hhh]h)}(hLength to writeh]hLength to write}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM$hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM$hjubj)}(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&]uh1jhjhM%hjubj)}(h/``cpu`` CPU on which the message was generated h](j)}(h``cpu``h]j)}(hj h]hcpu}(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.hhM&hjubj)}(hhh]h)}(h&CPU on which the message was generatedh]h&CPU on which the message was generated}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM&hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM&hjubj)}(h3``pid`` PID of the task that generated the message h](j)}(h``pid``h]j)}(hjCh]hpid}(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.hhM'hj=ubj)}(hhh]h)}(h*PID of the task that generated the messageh]h*PID of the task that generated the message}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhM'hjYubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhjXhM'hjubj)}(h4``comm`` Name of the task that generated the messageh](j)}(h``comm``h]j)}(hj|h]hcomm}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:18: ./include/linux/console.hhM'hjvubj)}(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(hjubah}(h]h ]h"]h$]h&]uh1jhjvubeh}(h]h ]h"]h$]h&]uh1jhjhM'hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj hhhNhNubeh}(h]j!ah ]h"]h$] internalsah&]uh1hhjhhhhhK referencedKubeh}(h]jah ]h"]struct consoleah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h Struct Conswh]h Struct Consw}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjIuh1hhjhhhhhKubj)}(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 ]j ah"]h$]h&]uh1jhjhhhjhKubj)}(hconswh]j)}(hjh]hconsw}(hjhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjhhhjhKubah}(h]jah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjhKhjhhubjC)}(hhh]h)}(hcallbacks for consolesh]hcallbacks for consoles}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK)hj5hhubah}(h]h ]h"]h$]h&]uh1jBhjhhhjhKubeh}(h]h ](j_structeh"]h$]h&]jdj_jejPjfjPjgjhjiuh1jhhhjhNhNubjk)}(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](ju)}(h**Definition**h]h Definition}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjXubh:}(hjXhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK-hjTubj)}(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); };}hjusbah}(h]h ]h"]h$]h&]hhuh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK/hjTubh)}(h **Members**h]ju)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKGhjTubj)}(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&]uh1jhjhK,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&]uh1jhjhK-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 }(hj0hhhNhNubju)}(h**vc**h]hvc}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj0ubh. }(hj0hhhNhNubju)}(h**init**h]hinit}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj0ubh) is true for the very first call on this }(hj0hhhNhNubju)}(h**vc**h]hvc}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj0ubh.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK.hj-ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj,hK/hjubj)}(h5``con_deinit`` deinitialize the console from **vc**. h](j)}(h``con_deinit``h]j)}(hjh]h con_deinit}(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.hhK0hjubj)}(hhh]h)}(h%deinitialize the console from **vc**.h](hdeinitialize the console from }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK0hjubj)}(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 }(hjhhhNhNubju)}(h **count**h]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh characters at [}(hjhhhNhNubju)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh, }(hjhhhNhNubju)}(h**y**h]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh] on }(hjhhhNhNubju)}(h**vc**h]hvc}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh. }(hjhhhNhNubju)}(h **count**h]hcount}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh >= 1.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK1hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK1hjubj)}(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)}(hjeh]hcon_putc}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK3hj_ubj)}(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 }(hj~hhhNhNubju)}(h**ca**h]hca}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~ubh to [}(hj~hhhNhNubju)}(h**x**h]hx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~ubh, }(hj~hhhNhNubju)}(h**y**h]hy}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~ubh] on }(hj~hhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~ubh. (optional -- }(hj~hhhNhNubju)}(h **con_putcs**h]h con_putcs}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~ubh would be called instead)}(hj~hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK2hj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhK3hjubj)}(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 }(hjhhhNhNubju)}(h **count**h]hcount}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh characters with attributes }(hjhhhNhNubju)}(h**s**h]hs}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh to [}(hjhhhNhNubju)}(h**x**h]hx}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh, }(hjhhhNhNubju)}(h**y**h]hy}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh] on }(hjhhhNhNubju)}(h**vc**h]hvc}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubj)}(h=``con_cursor`` enable/disable cursor depending on **enable** h](j)}(h``con_cursor``h]j)}(hjh]h con_cursor}(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.hhK5hjubj)}(hhh]h)}(h-enable/disable cursor depending on **enable**h](h#enable/disable cursor depending on }(hjhhhNhNubju)}(h **enable**h]henable}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubeh}(h]h ]h"]h$]h&]uh1hhjhK5hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK5hjubj)}(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 }(hjhhhNhNubju)}(h**top**h]htop}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh to }(hjhhhNhNubju)}(h **bottom**h]hbottom}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh in direction }(hjhhhNhNubju)}(h**dir**h]hdir}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh by }(hjhhhNhNubju)}(h **lines**h]hlines}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubhb. 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&]uh1jhjhK8hjubj)}(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)}(hjUh]h con_switch}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK:hjOubj)}(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.}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhK9hjkubah}(h]h ]h"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]uh1jhjjhK: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)}(hjh]h con_blank}(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)}(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 }(hjhhhNhNubju)}(h **blank**h]hblank}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh. }(hjhhhNhNubju)}(h**mode_switch**h]h mode_switch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubhe 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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK=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 }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh font to }(hjhhhNhNubju)}(h**font**h]hfont}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh with height }(hjhhhNhNubju)}(h **vpitch**h]hvpitch}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh. }(hjhhhNhNubju)}(h **flags**h]hflags}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh can be }(hjhhhNhNubj)}(h``KD_FONT_FLAG_DONT_RECALC``h]hKD_FONT_FLAG_DONT_RECALC}(hjVhhhNhNubah}(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&]uh1jhjhK?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)}(hjh]h con_font_get}(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.hhKAhj{ubj)}(hhh]h)}(hOfetch the current font on **vc** of height **vpitch** into **font**. (optional)h](hfetch the current font on }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh of height }(hjhhhNhNubju)}(h **vpitch**h]hvpitch}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh into }(hjhhhNhNubju)}(h**font**h]hfont}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh . (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&]uh1jhj{ubeh}(h]h ]h"]h$]h&]uh1jhjhKAhjubj)}(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 }(hj hhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh. }(hj hhhNhNubju)}(h**name**h]hname}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh can be }(hj hhhNhNubj)}(h``NULL``h]hNULL}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh or font name to search for. }(hj hhhNhNubju)}(h**font**h]hfont}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh can be filled back. (optional)}(hj hhhNhNubeh}(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&]uh1jhjhKChjubj)}(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)}(hjsh]h con_resize}(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.hhKEhjmubj)}(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 }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh console to }(hjhhhNhNubju)}(h **width**h]hwidth}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh x }(hjhhhNhNubju)}(h **height**h]hheight}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh. }(hjhhhNhNubju)}(h **from_user**h]h from_user}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh4 is true when this change comes from the user space.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKDhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]uh1jhjhKEhjubj)}(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 }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh to }(hjhhhNhNubju)}(h **table**h]htable}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKFhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hKFhjubj)}(hm``con_scrolldelta`` the contents of the console should be scrolled by **lines**. Invoked by user. (optional) h](j)}(h``con_scrolldelta``h]j)}(hjRh]hcon_scrolldelta}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKHhjLubj)}(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 }(hjkhhhNhNubju)}(h **lines**h]hlines}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jthjkubh. Invoked by user. (optional)}(hjkhhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKGhjhubah}(h]h ]h"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]uh1jhjghKHhjubj)}(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 ](xrefj_c-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocdriver-api/tty/console refdomainj_reftypetype 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 }(hjhhhNhNubju)}(h**vc**h]hvc}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh9. If not provided or returns false, the origin is set to }(hjhhhNhNubju)}(h**vc->vc_screenbuf**h]hvc->vc_screenbuf}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjubh . (optional)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhKIhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubj)}(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 }(hjC hhhNhNubju)}(h**vc->vc_screenbuf**h]hvc->vc_screenbuf}(hjK hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjC ubh0. Called e.g. upon entering graphics. (optional)}(hjC 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&]uh1jhj? 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)}(hjv h]hcon_build_attr}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:24: ./include/linux/console.hhKPhjp 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 hhhNhNubju)}(h **color**h]hcolor}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh, }(hj hhhNhNubju)}(h **intensity**h]h intensity}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj 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.hhKNhj ubah}(h]h ]h"]h$]h&]uh1jhjp ubeh}(h]h ]h"]h$]h&]uh1jhj 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 hhhNhNubju)}(h **count**h]hcount}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh on }(hj hhhNhNubju)}(h**vc**h]hvc}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh starting at }(hj hhhNhNubju)}(h**p**h]hp}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj ubh . (optional)}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj hKQhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKQhjubeh}(h]h ]h"]h$]h&]uh1jhjTubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjhhhNhNubeh}(h]jOah ]h"] struct conswah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hConsole functionsh]hConsole functions}(hjT!hhhNhNubah}(h]h ]h"]h$]h&]jjkuh1hhjQ!hhhhhKubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$console_srcu_read_flags (C function)c.console_srcu_read_flagshNtauh1jhjQ!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}(hj}!hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j{!hjw!hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjw!hhhj!hMubj)}(hconsole_srcu_read_flagsh]j)}(hconsole_srcu_read_flagsh]hconsole_srcu_read_flags}(hj!hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj!ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjw!hhhj!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 ]j ah"]h$]h&]uh1jhj!ubj)}(hjh]hstruct}(hj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(h h]h }(hj!hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj!ubh)}(hhh]j)}(hconsoleh]hconsole}(hj!hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainj_reftype identifier reftargetj!modnameN classnameNjj)}j]j ASTIdentifier)}j"j!sbc.console_srcu_read_flagsasbuh1hhj!ubj)}(h h]h }(hj"hhhNhNubah}(h]h ]j ah"]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 ]j"ah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj!ubah}(h]h ]h"]h$]h&]hhuh1j!hjw!hhhj!hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjs!hhhj!hMubah}(h]jn!ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj!hMhjp!hhubjC)}(hhh]h)}(h6Locklessly read flags of a possibly registered consoleh]h6Locklessly read flags of a possibly registered console}(hje"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjb"hhubah}(h]h ]h"]h$]h&]uh1jBhjp!hhhj!hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej}"jfj}"jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj"h]h Parameters}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj"ubj)}(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&]uh1jhj"hMhj"ubah}(h]h ]h"]h$]h&]uh1jhj"ubh)}(h**Description**h]ju)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj"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"hhhNhNubju)}(h**con->flags**h]h con->flags}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj"ubhM provides a consistent read value because there is at most one CPU modifying }(hj"hhhNhNubju)}(h**con->flags**h]h con->flags}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj"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.hhMhj"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*#hhhNhNubju)}(h**con**h]hcon}(hj2#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj*#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.hhMhj"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 }(hjK#hhhNhNubju)}(h**con**h]hcon}(hjS#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjK#ubh< is not and will not become registered, the caller may read }(hjK#hhhNhNubju)}(h**con->flags**h]h con->flags}(hje#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjK#ubh directly instead.}(hjK#hhhNhNubeh}(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]ju)}(hj#h]hContext}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj~#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"ubh)}(h **Return**h]ju)}(hj#h]hReturn}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhM hj"ubh)}(h.The current value of the **con->flags** field.h](hThe current value of the }(hj#hhhNhNubju)}(h**con->flags**h]h con->flags}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj#ubh field.}(hj#hhhNhNubeh}(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&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%console_srcu_write_flags (C function)c.console_srcu_write_flagshNtauh1jhjQ!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](j|!)}(hvoidh]hvoid}(hj#hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj#hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMubj)}(h h]h }(hj $hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj#hhhj $hMubj)}(hconsole_srcu_write_flagsh]j)}(hconsole_srcu_write_flagsh]hconsole_srcu_write_flags}(hj$hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj$ubah}(h]h ](j)j*eh"]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&]uh1jhj7$ubj)}(h h]h }(hjH$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7$ubh)}(hhh]j)}(hconsoleh]hconsole}(hjY$hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjV$ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj[$modnameN classnameNjj)}j]j")}j"j!$sbc.console_srcu_write_flagsasbuh1hhj7$ubj)}(h h]h }(hjy$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj7$ubj+")}(hj."h]h*}(hj$hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj7$ubj)}(hconh]hcon}(hj$hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj7$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj3$ubj!)}(h short flagsh](j|!)}(hshorth]hshort}(hj$hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj$ubj)}(hflagsh]hflags}(hj$hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj3$ubeh}(h]h ]h"]h$]h&]hhuh1j!hj#hhhj $hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj#hhhj $hMubah}(h]j#ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj $hMhj#hhubjC)}(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&]uh1jBhj#hhhj $hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej %jfj %jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj%h]h Parameters}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhj%ubj)}(hhh](j)}(hL``struct console *con`` struct console pointer of console to write flags to h](j)}(h``struct console *con``h]j)}(hj4%h]hstruct console *con}(hj6%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2%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}(hjM%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI%hMhjJ%ubah}(h]h ]h"]h$]h&]uh1jhj.%ubeh}(h]h ]h"]h$]h&]uh1jhjI%hMhj+%ubj)}(h)``short flags`` new flags value to write h](j)}(h``short flags``h]j)}(hjm%h]h short flags}(hjo%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk%ubah}(h]h ]h"]h$]h&]uh1jh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMhjg%ubj)}(hhh]h)}(hnew flags value to writeh]hnew flags value to write}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhjg%ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhj+%ubeh}(h]h ]h"]h$]h&]uh1jhj%ubh)}(h**Description**h]ju)}(hj%h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj%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]ju)}(hj%h]hContext}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj%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&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jfor_each_console_srcu (C macro)c.for_each_console_srcuhNtauh1jhjQ!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 ]j"ah"]h$]h&]uh1jhj&ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj&hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMDubah}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj &hhhj+&hMDubah}(h]j&ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj+&hMDhj &hhubjC)}(hhh]h}(h]h ]h"]h$]h&]uh1jBhj &hhhj+&hMDubeh}(h]h ](j_macroeh"]h$]h&]jdj_jejD&jfjD&jgjhjiuh1jhhhjQ!hNhNubh)}(h``for_each_console_srcu (con)``h]j)}(hjJ&h]hfor_each_console_srcu (con)}(hjL&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMFhjQ!hhubh block_quote)}(h"Iterator over registered consoles h]h)}(h!Iterator over registered consolesh]h!Iterator over registered consoles}(hjf&hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMDhjb&ubah}(h]h ]h"]h$]h&]uh1j`&hjt&hMDhjQ!hhubjk)}(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]ju)}(hj&h]h Parameters}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMHhj{&ubj)}(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&]uh1jhj&hMEhj&ubah}(h]h ]h"]h$]h&]uh1jhj{&ubh)}(h**Description**h]ju)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj&ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMGhj{&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.hhMFhj{&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.hhMIhj{&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jfor_each_console (C macro)c.for_each_consolehNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(hfor_each_consoleh]j)}(hfor_each_consoleh]j)}(hfor_each_consoleh]j)}(hj)'h]hfor_each_console}(hj3'hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj/'ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj+'hhh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMRubah}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj''hhhjF'hMRubah}(h]j"'ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjF'hMRhj$'hhubjC)}(hhh]h}(h]h ]h"]h$]h&]uh1jBhj$'hhhjF'hMRubeh}(h]h ](j_macroeh"]h$]h&]jdj_jej_'jfj_'jgjhjiuh1jhhhjQ!hNhNubh)}(h``for_each_console (con)``h]j)}(hje'h]hfor_each_console (con)}(hjg'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMThjQ!hhubja&)}(h"Iterator over registered consoles h]h)}(h!Iterator over registered consolesh]h!Iterator over registered consoles}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMRhj{'ubah}(h]h ]h"]h$]h&]uh1j`&hj'hMRhjQ!hhubjk)}(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]ju)}(hj'h]h Parameters}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:30: ./include/linux/console.hhMVhj'ubj)}(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&]uh1jhj'hMShj'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h**Description**h]ju)}(hj'h]h Description}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj'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 ](jj_c-typeeh"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype 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&]uh1hhj1(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&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jclear_selection (C function)c.clear_selectionhNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(hvoid clear_selection (void)h]j)}(hvoid clear_selection(void)h](j|!)}(hvoidh]hvoid}(hjk(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjg(hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKLubj)}(h h]h }(hjz(hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjg(hhhjy(hKLubj)}(hclear_selectionh]j)}(hclear_selectionh]hclear_selection}(hj(hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj(ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjg(hhhjy(hKLubj!)}(h(void)h]j!)}(hvoidh]j|!)}(hvoidh]hvoid}(hj(hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj(ubah}(h]h ]h"]h$]h&]noemphhhuh1j!hj(ubah}(h]h ]h"]h$]h&]hhuh1j!hjg(hhhjy(hKLubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjc(hhhjy(hKLubah}(h]j^(ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjy(hKLhj`(hhubjC)}(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&]uh1jBhj`(hhhjy(hKLubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej(jfj(jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj(h]h Parameters}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj(ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:34: ./drivers/tty/vt/selection.chKPhj(ubj)}(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&]uh1jhj()hKhj )ubah}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h**Description**h]ju)}(hjN)h]h Description}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjL)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.}(hjd)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.}(hjs)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&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_font_pitch (C function)c.vc_font_pitchhNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(h7unsigned int vc_font_pitch (const struct vc_font *font)h]j)}(h6unsigned int vc_font_pitch(const struct vc_font *font)h](j|!)}(hunsignedh]hunsigned}(hj)hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj)hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)hhhj)hKubj|!)}(hinth]hint}(hj)hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj)hhhj)hKubj)}(h h]h }(hj)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)hhhj)hKubj)}(h vc_font_pitchh]j)}(h vc_font_pitchh]h vc_font_pitch}(hj)hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj)ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj)hhhj)hKubj!)}(h(const struct vc_font *font)h]j!)}(hconst struct vc_font *fonth](j)}(hj!h]hconst}(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj)}(hjh]hstruct}(hj*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h h]h }(hj#*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubh)}(hhh]j)}(hvc_fonth]hvc_font}(hj4*hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj1*ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj6*modnameN classnameNjj)}j]j")}j"j)sbc.vc_font_pitchasbuh1hhj)ubj)}(h h]h }(hjT*hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj)ubj+")}(hj."h]h*}(hjb*hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj)ubj)}(hfonth]hfont}(hjo*hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj)ubah}(h]h ]h"]h$]h&]hhuh1j!hj)hhhj)hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj)hhhj)hKubah}(h]j)ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj)hKhj)hhubjC)}(hhh]h)}(h=Calculates the number of bytes between two adjacent scanlinesh]h=Calculates the number of bytes between two adjacent scanlines}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj*hhubah}(h]h ]h"]h$]h&]uh1jBhj)hhhj)hKubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej*jfj*jgjhjiuh1jhhhjQ!hNhNubjk)}(h**Parameters** ``const struct vc_font *font`` The VC font **Return** The number of bytes between two adjacent scanlines in the font datah](h)}(h**Parameters**h]ju)}(hj*h]h Parameters}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj*ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj*ubj)}(hhh]j)}(h+``const struct vc_font *font`` The VC font h](j)}(h``const struct vc_font *font``h]j)}(hj*h]hconst struct vc_font *font}(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.chKhj*ubj)}(hhh]h)}(h The VC fonth]h The VC font}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubh)}(h **Return**h]ju)}(hj+h]hReturn}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj+ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj*ubh)}(hCThe number of bytes between two adjacent scanlines in the font datah]hCThe number of bytes between two adjacent scanlines in the font data}(hj++hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_font_size (C function)c.vc_font_sizehNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(h6unsigned int vc_font_size (const struct vc_font *font)h]j)}(h5unsigned int vc_font_size(const struct vc_font *font)h](j|!)}(hunsignedh]hunsigned}(hjZ+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjV+hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKubj)}(h h]h }(hji+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV+hhhjh+hKubj|!)}(hinth]hint}(hjw+hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjV+hhhjh+hKubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjV+hhhjh+hKubj)}(h vc_font_sizeh]j)}(h vc_font_sizeh]h vc_font_size}(hj+hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj+ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjV+hhhjh+hKubj!)}(h(const struct vc_font *font)h]j!)}(hconst struct vc_font *fonth](j)}(hj!h]hconst}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubj)}(hjh]hstruct}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(h h]h }(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubh)}(hhh]j)}(hvc_fonth]hvc_font}(hj+hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj+modnameN classnameNjj)}j]j")}j"j+sbc.vc_font_sizeasbuh1hhj+ubj)}(h h]h }(hj ,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj+ubj+")}(hj."h]h*}(hj,hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj+ubj)}(hfonth]hfont}(hj',hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj+ubah}(h]h ]h"]h$]h&]hhuh1j!hjV+hhhjh+hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjR+hhhjh+hKubah}(h]jM+ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjh+hKhjO+hhubjC)}(hhh]h)}(h-Calculates the size of the font data in bytesh]h-Calculates the size of the font data in bytes}(hjQ,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhjN,hhubah}(h]h ]h"]h$]h&]uh1jBhjO+hhhjh+hKubeh}(h]h ](j_functioneh"]h$]h&]jdj_jeji,jfji,jgjhjiuh1jhhhjQ!hNhNubjk)}(hX**Parameters** ``const struct vc_font *font`` The VC font **Description** vc_font_size() calculates the number of bytes of font data in the font specified by **font**. The function calculates the size from the font parameters. **Return** The size of the font data in bytes.h](h)}(h**Parameters**h]ju)}(hjs,h]h Parameters}(hju,hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjq,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhjm,ubj)}(hhh]j)}(h+``const struct vc_font *font`` The VC font h](j)}(h``const struct vc_font *font``h]j)}(hj,h]hconst struct vc_font *font}(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.chKhj,ubj)}(hhh]h)}(h The VC fonth]h The VC font}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhj,hKhj,ubah}(h]h ]h"]h$]h&]uh1jhjm,ubh)}(h**Description**h]ju)}(hj,h]h Description}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj,ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhjm,ubh)}(hvc_font_size() calculates the number of bytes of font data in the font specified by **font**. The function calculates the size from the font parameters.h](hTvc_font_size() calculates the number of bytes of font data in the font specified by }(hj,hhhNhNubju)}(h**font**h]hfont}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj,ubh<. The function calculates the size from the font parameters.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhjm,ubh)}(h **Return**h]ju)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj-ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjm,ubh)}(h#The size of the font data in bytes.h]h#The size of the font data in bytes.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjm,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j__vc_resize (C function) c.__vc_resizehNtauh1jhjQ!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](j|!)}(hinth]hint}(hjK-hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjG-hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM$ubj)}(h h]h }(hjZ-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjG-hhhjY-hM$ubj)}(h __vc_resizeh]j)}(h __vc_resizeh]h __vc_resize}(hjl-hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjh-ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjG-hhhjY-hM$ubj!)}(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 ]j ah"]h$]h&]uh1jhj-ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj-hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj-modnameN classnameNjj)}j]j")}j"jn-sb c.__vc_resizeasbuh1hhj-ubj)}(h h]h }(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj+")}(hj."h]h*}(hj-hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj-ubj)}(hvch]hvc}(hj-hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-ubj!)}(hunsigned int colsh](j|!)}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj-ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj|!)}(hinth]hint}(hj.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj-ubj)}(h h]h }(hj$.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-ubj)}(hcolsh]hcols}(hj2.hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-ubj!)}(hunsigned int rowsh](j|!)}(hunsignedh]hunsigned}(hjK.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjG.ubj)}(h h]h }(hjY.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjG.ubj|!)}(hinth]hint}(hjg.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjG.ubj)}(h h]h }(hju.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjG.ubj)}(hrowsh]hrows}(hj.hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjG.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-ubj!)}(hbool from_userh](j|!)}(hboolh]hbool}(hj.hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj.ubj)}(h from_userh]h from_user}(hj.hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-ubeh}(h]h ]h"]h$]h&]hhuh1j!hjG-hhhjY-hM$ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjC-hhhjY-hM$ubah}(h]j>-ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjY-hM$hj@-hhubjC)}(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.chM$hj.hhubah}(h]h ]h"]h$]h&]uh1jBhj@-hhhjY-hM$ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej.jfj.jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj/h]h Parameters}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj/ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM(hj.ubj)}(hhh](j)}(h'``struct vc_data *vc`` virtual console 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:36: ./drivers/tty/vt/vt.chM%hj/ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hjport.tty**.h](hOLocking: The caller must hold the console sem to protect console internals and }(hj.0hhhNhNubju)}(h**vc->port.tty**h]h vc->port.tty}(hj60hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj.0ubh.}(hj.0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM,hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_is_bound (C function)c.con_is_boundhNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(h*int con_is_bound (const struct consw *csw)h]j)}(h)int con_is_bound(const struct consw *csw)h](j|!)}(hinth]hint}(hjo0hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjk0hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj~0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjk0hhhj}0hMubj)}(h con_is_boundh]j)}(h con_is_boundh]h con_is_bound}(hj0hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj0ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjk0hhhj}0hMubj!)}(h(const struct consw *csw)h]j!)}(hconst struct consw *cswh](j)}(hj!h]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubj)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubh)}(hhh]j)}(hconswh]hconsw}(hj0hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj0modnameN classnameNjj)}j]j")}j"j0sbc.con_is_boundasbuh1hhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj0ubj+")}(hj."h]h*}(hj1hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj0ubj)}(hcswh]hcsw}(hj 1hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj0ubah}(h]h ]h"]h$]h&]hhuh1j!hjk0hhhj}0hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjg0hhhj}0hMubah}(h]jb0ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj}0hMhjd0hhubjC)}(hhh]h)}(h(checks if driver is bound to the consoleh]h(checks if driver is bound to the console}(hjJ1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjG1hhubah}(h]h ]h"]h$]h&]uh1jBhjd0hhhj}0hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejb1jfjb1jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hjl1h]h Parameters}(hjn1hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjf1ubj)}(hhh]j)}(h+``const struct consw *csw`` console driver h](j)}(h``const struct consw *csw``h]j)}(hj1h]hconst struct consw *csw}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj1ubj)}(hhh]h)}(hconsole driverh]hconsole driver}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhj1ubeh}(h]h ]h"]h$]h&]uh1jhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jhjf1ubh)}(h **Return**h]ju)}(hj1h]hReturn}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjf1ubh)}(h!zero if unbound, nonzero if boundh]h!zero if unbound, nonzero if bound}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjf1ubh)}(h**Description**h]ju)}(hj1h]h Description}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj1ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjf1ubh)}(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 }(hj2hhhNhNubh)}(h':c:type:`consw.con_startup\(\) `h]j)}(hj 2h]hconsw.con_startup()}(hj2hhhNhNubah}(h]h ](jj_c-typeeh"]h$]h&]uh1jhj 2ubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype refexplicitrefwarnjjjconswuh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj2ubeh}(h]h ]h"]h$]h&]uh1hhj*2hMhjf1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_is_visible (C function)c.con_is_visiblehNtauh1jhjQ!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](j|!)}(hj.h]hbool}(hjQ2hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjM2hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM ubj)}(h h]h }(hj_2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjM2hhhj^2hM ubj)}(hcon_is_visibleh]j)}(hcon_is_visibleh]hcon_is_visible}(hjq2hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjm2ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjM2hhhj^2hM ubj!)}(h(const struct vc_data *vc)h]j!)}(hconst struct vc_data *vch](j)}(hj!h]hconst}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj)}(hjh]hstruct}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj2hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj2modnameN classnameNjj)}j]j")}j"js2sbc.con_is_visibleasbuh1hhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj2ubj+")}(hj."h]h*}(hj2hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj2ubj)}(hvch]hvc}(hj3hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj2ubah}(h]h ]h"]h$]h&]hhuh1j!hjM2hhhj^2hM ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjI2hhhj^2hM ubah}(h]jD2ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj^2hM hjF2hhubjC)}(hhh]h)}(h-checks whether the current console is visibleh]h-checks whether the current console is visible}(hj+3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM hj(3hhubah}(h]h ]h"]h$]h&]uh1jBhjF2hhhj^2hM ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejC3jfjC3jgjhjiuh1jhhhjQ!hNhNubjk)}(hs**Parameters** ``const struct vc_data *vc`` virtual console **Return** zero if not visible, nonzero if visibleh](h)}(h**Parameters**h]ju)}(hjM3h]h Parameters}(hjO3hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjK3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjG3ubj)}(hhh]j)}(h-``const struct vc_data *vc`` virtual console h](j)}(h``const struct vc_data *vc``h]j)}(hjl3h]hconst struct vc_data *vc}(hjn3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj3ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chM hjf3ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hM hj3ubah}(h]h ]h"]h$]h&]uh1jhjf3ubeh}(h]h ]h"]h$]h&]uh1jhj3hM hjc3ubah}(h]h ]h"]h$]h&]uh1jhjG3ubh)}(h **Return**h]ju)}(hj3h]hReturn}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj3ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjG3ubh)}(h'zero if not visible, nonzero if visibleh]h'zero if not visible, nonzero if visible}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjG3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_debug_enter (C function)c.con_debug_enterhNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(h)void con_debug_enter (struct vc_data *vc)h]j)}(h(void con_debug_enter(struct vc_data *vc)h](j|!)}(hvoidh]hvoid}(hj3hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj3hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj3hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj3hhhj3hMubj)}(hcon_debug_enterh]j)}(hcon_debug_enterh]hcon_debug_enter}(hj 4hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj 4ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj3hhhj3hMubj!)}(h(struct vc_data *vc)h]j!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hj)4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%4ubj)}(h h]h }(hj64hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%4ubh)}(hhh]j)}(hvc_datah]hvc_data}(hjG4hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjD4ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetjI4modnameN classnameNjj)}j]j")}j"j4sbc.con_debug_enterasbuh1hhj%4ubj)}(h h]h }(hjg4hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj%4ubj+")}(hj."h]h*}(hju4hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj%4ubj)}(hvch]hvc}(hj4hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj%4ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj!4ubah}(h]h ]h"]h$]h&]hhuh1j!hj3hhhj3hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj3hhhj3hMubah}(h]j3ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj3hMhj3hhubjC)}(hhh]h)}(h+prepare the console for the kernel debuggerh]h+prepare the console for the kernel debugger}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj4hhubah}(h]h ]h"]h$]h&]uh1jBhj3hhhj3hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej4jfj4jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj4h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj4ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj4ubj)}(hhh]j)}(h'``struct vc_data *vc`` virtual console h](j)}(h``struct vc_data *vc``h]j)}(hj4h]hstruct vc_data *vc}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj4ubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hMhj5ubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhj5hMhj4ubah}(h]h ]h"]h$]h&]uh1jhj4ubh)}(h**Description**h]ju)}(hj(5h]h Description}(hj*5hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj&5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj4ubh)}(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.}(hj>5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj4ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jcon_debug_leave (C function)c.con_debug_leavehNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(hvoid con_debug_leave (void)h]j)}(hvoid con_debug_leave(void)h](j|!)}(hvoidh]hvoid}(hjm5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hji5hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMCubj)}(h h]h }(hj|5hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhji5hhhj{5hMCubj)}(hcon_debug_leaveh]j)}(hcon_debug_leaveh]hcon_debug_leave}(hj5hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj5ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhji5hhhj{5hMCubj!)}(h(void)h]j!)}(hvoidh]j|!)}(hvoidh]hvoid}(hj5hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj5ubah}(h]h ]h"]h$]h&]noemphhhuh1j!hj5ubah}(h]h ]h"]h$]h&]hhuh1j!hji5hhhj{5hMCubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hje5hhhj{5hMCubah}(h]j`5ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj{5hMChjb5hhubjC)}(hhh]h)}(hrestore console stateh]hrestore console state}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMChj5hhubah}(h]h ]h"]h$]h&]uh1jBhjb5hhhj{5hMCubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej5jfj5jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj5ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMGhj5ubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj6h]hvoid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj6ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj.6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*6hKhj+6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj*6hKhj 6ubah}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]ju)}(hjP6h]h Description}(hjR6hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjN6ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chKhj5ubh)}(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.}(hjf6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMDhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j%do_unregister_con_driver (C function)c.do_unregister_con_driverhNtauh1jhjQ!hhhNhNubj)}(hhh](j)}(h6int do_unregister_con_driver (const struct consw *csw)h]j)}(h5int do_unregister_con_driver(const struct consw *csw)h](j|!)}(hinth]hint}(hj6hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj6hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6hhhj6hMubj)}(hdo_unregister_con_driverh]j)}(hdo_unregister_con_driverh]hdo_unregister_con_driver}(hj6hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj6ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj6hhhj6hMubj!)}(h(const struct consw *csw)h]j!)}(hconst struct consw *cswh](j)}(hj!h]hconst}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj)}(hjh]hstruct}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6ubj)}(h h]h }(hj6hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubh)}(hhh]j)}(hconswh]hconsw}(hj 7hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj 7modnameN classnameNjj)}j]j")}j"j6sbc.do_unregister_con_driverasbuh1hhj6ubj)}(h h]h }(hj+7hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj6ubj+")}(hj."h]h*}(hj97hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj6ubj)}(hcswh]hcsw}(hjF7hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj6ubah}(h]h ]h"]h$]h&]hhuh1j!hj6hhhj6hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj6hhhj6hMubah}(h]j6ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj6hMhj6hhubjC)}(hhh]h)}(h,unregister console driver from console layerh]h,unregister console driver from console layer}(hjp7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhjm7hhubah}(h]h ]h"]h$]h&]uh1jBhj6hhhj6hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej7jfj7jgjhjiuh1jhhhjQ!hNhNubjk)}(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]ju)}(hj7h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj7ubj)}(hhh]j)}(h+``const struct consw *csw`` console driver h](j)}(h``const struct consw *csw``h]j)}(hj7h]hconst struct consw *csw}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj7ubj)}(hhh]h)}(hconsole driverh]hconsole driver}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jhj7ubh)}(h**Description**h]ju)}(hj7h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj7ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj7ubh)}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj7ubh)}(h5The driver must unbind first prior to unregistration.h]h5The driver must unbind first prior to unregistration.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:36: ./drivers/tty/vt/vt.chMhj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhjQ!hhhNhNubh)}(hhh](h)}(h Internalsh]h Internals}(hj*8hhhNhNubah}(h]h ]h"]h$]h&]jjuh1hhj'8hhhhhK(ubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jsel_loadlut (C function) c.sel_loadluthNtauh1jhj'8hhhNhNubj)}(hhh](j)}(h!int sel_loadlut (u32 __user *lut)h]j)}(h int sel_loadlut(u32 __user *lut)h](j|!)}(hinth]hint}(hjQ8hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjM8hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKsubj)}(h h]h }(hj`8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjM8hhhj_8hKsubj)}(h sel_loadluth]j)}(h sel_loadluth]h sel_loadlut}(hjr8hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjn8ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjM8hhhj_8hKsubj!)}(h(u32 __user *lut)h]j!)}(hu32 __user *luth](h)}(hhh]j)}(hu32h]hu32}(hj8hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj8modnameN classnameNjj)}j]j")}j"jt8sb c.sel_loadlutasbuh1hhj8ubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubh__user}(hj8hhhNhNubj)}(h h]h }(hj8hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj8ubj+")}(hj."h]h*}(hj8hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj8ubj)}(hluth]hlut}(hj8hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj8ubah}(h]h ]h"]h$]h&]hhuh1j!hjM8hhhj_8hKsubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjI8hhhj_8hKsubah}(h]jD8ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj_8hKshjF8hhubjC)}(hhh]h)}(hload the LUT tableh]hload the LUT table}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKshj9hhubah}(h]h ]h"]h$]h&]uh1jBhjF8hhhj_8hKsubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej 9jfj 9jgjhjiuh1jhhhj'8hNhNubjk)}(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]ju)}(hj*9h]h Parameters}(hj,9hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj(9ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKwhj$9ubj)}(hhh]j)}(h``u32 __user *lut`` user table h](j)}(h``u32 __user *lut``h]j)}(hjI9h]hu32 __user *lut}(hjK9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjG9ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKthjC9ubj)}(hhh]h)}(h user tableh]h user table}(hjb9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^9hKthj_9ubah}(h]h ]h"]h$]h&]uh1jhjC9ubeh}(h]h ]h"]h$]h&]uh1jhj^9hKthj@9ubah}(h]h ]h"]h$]h&]uh1jhj$9ubh)}(h**Description**h]ju)}(hj9h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj9ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKvhj$9ubh)}(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.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKuhj$9ubh)}(h&Locking: The console lock is acquired.h]h&Locking: The console lock is acquired.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKxhj$9ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jset_selection_user (C function)c.set_selection_userhNtauh1jhj'8hhhNhNubj)}(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](j|!)}(hinth]hint}(hj9hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj9hhha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKubj)}(h h]h }(hj9hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj9hhhj9hKubj)}(hset_selection_userh]j)}(hset_selection_userh]hset_selection_user}(hj9hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj9ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj9hhhj9hKubj!)}(hB(const struct tiocl_selection __user *sel, struct tty_struct *tty)h](j!)}(h(const struct tiocl_selection __user *selh](j)}(hj!h]hconst}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj":hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj)}(hjh]hstruct}(hj0:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj=:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(htiocl_selectionh]htiocl_selection}(hjN:hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjK:ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetjP:modnameN classnameNjj)}j]j")}j"j9sbc.set_selection_userasbuh1hhj:ubj)}(h h]h }(hjn:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubh__user}(hj:hhhNhNubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj+")}(hj."h]h*}(hj:hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj:ubj)}(hselh]hsel}(hj:hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj :ubj!)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj:hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj:modnameN classnameNjj)}j]jj:c.set_selection_userasbuh1hhj:ubj)}(h h]h }(hj:hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:ubj+")}(hj."h]h*}(hj:hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj:ubj)}(httyh]htty}(hj ;hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj :ubeh}(h]h ]h"]h$]h&]hhuh1j!hj9hhhj9hKubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj9hhhj9hKubah}(h]j9ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj9hKhj9hhubjC)}(hhh]h)}(hset the current selection.h]hset the current selection.}(hj5;hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj2;hhubah}(h]h ]h"]h$]h&]uh1jBhj9hhhj9hKubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejM;jfjM;jgjhjiuh1jhhhj'8hNhNubjk)}(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]ju)}(hjW;h]h Parameters}(hjY;hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjU;ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhjQ;ubj)}(hhh](j)}(hA``const struct tiocl_selection __user *sel`` user selection info h](j)}(h,``const struct tiocl_selection __user *sel``h]j)}(hjv;h]h(const struct tiocl_selection __user *sel}(hjx;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt;ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhjp;ubj)}(hhh]h)}(huser selection infoh]huser selection info}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj;ubah}(h]h ]h"]h$]h&]uh1jhjp;ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjm;ubj)}(h+``struct tty_struct *tty`` the console tty h](j)}(h``struct tty_struct *tty``h]j)}(hj;h]hstruct tty_struct *tty}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhj;ubj)}(hhh]h)}(hthe console ttyh]hthe console tty}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hKhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hKhjm;ubeh}(h]h ]h"]h$]h&]uh1jhjQ;ubh)}(h**Description**h]ju)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj;ubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhjQ;ubh)}(h-Invoked by the ioctl handle for the vt layer.h]h-Invoked by the ioctl handle for the vt layer.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhjQ;ubh)}(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.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hha/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:42: ./drivers/tty/vt/selection.chKhjQ;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_do_resize (C function)c.vc_do_resizehNtauh1jhj'8hhhNhNubj)}(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](j|!)}(hinth]hint}(hj><hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj:<hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMubj)}(h h]h }(hjM<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj:<hhhjL<hMubj)}(h vc_do_resizeh]j)}(h vc_do_resizeh]h vc_do_resize}(hj_<hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj[<ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj:<hhhjL<hMubj!)}(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}(hj{<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjw<ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hj<hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj<modnameN classnameNjj)}j]j")}j"ja<sbc.vc_do_resizeasbuh1hhjw<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjw<ubj+")}(hj."h]h*}(hj<hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hjw<ubj)}(httyh]htty}(hj<hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjw<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjs<ubj!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubh)}(hhh]j)}(hvc_datah]hvc_data}(hj =hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj =modnameN classnameNjj)}j]j<c.vc_do_resizeasbuh1hhj<ubj)}(h h]h }(hj)=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj<ubj+")}(hj."h]h*}(hj7=hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj<ubj)}(hvch]hvc}(hjD=hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjs<ubj!)}(hunsigned int colsh](j|!)}(hunsignedh]hunsigned}(hj]=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjY=ubj)}(h h]h }(hjk=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY=ubj|!)}(hinth]hint}(hjy=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjY=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjY=ubj)}(hcolsh]hcols}(hj=hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjY=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjs<ubj!)}(hunsigned int linesh](j|!)}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj|!)}(hinth]hint}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj)}(hlinesh]hlines}(hj=hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjs<ubj!)}(hbool from_userh](j|!)}(hj.h]hbool}(hj=hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj=ubj)}(h h]h }(hj >hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj=ubj)}(h from_userh]h from_user}(hj>hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjs<ubeh}(h]h ]h"]h$]h&]hhuh1j!hj:<hhhjL<hMubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj6<hhhjL<hMubah}(h]j1<ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjL<hMhj3<hhubjC)}(hhh]h)}(hresizing method for the ttyh]hresizing method for the tty}(hjD>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjA>hhubah}(h]h ]h"]h$]h&]uh1jBhj3<hhhjL<hMubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej\>jfj\>jgjhjiuh1jhhhj'8hNhNubjk)}(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]ju)}(hjf>h]h Parameters}(hjh>hhhNhNubah}(h]h ]h"]h$]h&]uh1jthjd>ubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj`>ubj)}(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.chMhj>ubj)}(hhh]h)}(htty being resizedh]htty being resized}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj|>ubj)}(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.chMhj>ubj)}(hhh]h)}(hvirtual console private datah]hvirtual console private data}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMhj|>ubj)}(h``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:44: ./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&]uh1jhj ?hMhj|>ubj)}(h``unsigned int lines`` lines h](j)}(h``unsigned int lines``h]j)}(hj0?h]hunsigned int lines}(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.chMhj*?ubj)}(hhh]h)}(hlinesh]hlines}(hjI?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE?hMhjF?ubah}(h]h ]h"]h$]h&]uh1jhj*?ubeh}(h]h ]h"]h$]h&]uh1jhjE?hMhj|>ubj)}(h&``bool from_user`` invoked by a user? h](j)}(h``bool from_user``h]j)}(hji?h]hbool from_user}(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.chMhjc?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&]uh1jhjc?ubeh}(h]h ]h"]h$]h&]uh1jhj~?hMhj|>ubeh}(h]h ]h"]h$]h&]uh1jhj`>ubh)}(h**Description**h]ju)}(hj?h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jthj?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 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.chMhj`>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.chMhj`>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvt_resize (C function) c.vt_resizehNtauh1jhj'8hhhNhNubj)}(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](j|!)}(hinth]hint}(hj?hhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj?hhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM8ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj?hhhj@hM8ubj)}(h vt_resizeh]j)}(h vt_resizeh]h vt_resize}(hj@hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj@ubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj?hhhj@hM8ubj!)}(h,(struct tty_struct *tty, struct winsize *ws)h](j!)}(hstruct tty_struct *ttyh](j)}(hjh]hstruct}(hj5@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1@ubj)}(h h]h }(hjB@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1@ubh)}(hhh]j)}(h tty_structh]h tty_struct}(hjS@hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjP@ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetjU@modnameN classnameNjj)}j]j")}j"j@sb c.vt_resizeasbuh1hhj1@ubj)}(h h]h }(hjs@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj1@ubj+")}(hj."h]h*}(hj@hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj1@ubj)}(httyh]htty}(hj@hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj1@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-@ubj!)}(hstruct winsize *wsh](j)}(hjh]hstruct}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubh)}(hhh]j)}(hwinsizeh]hwinsize}(hj@hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetj@modnameN classnameNjj)}j]jo@ c.vt_resizeasbuh1hhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj@ubj+")}(hj."h]h*}(hj@hhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj@ubj)}(hwsh]hws}(hj@hhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj-@ubeh}(h]h ]h"]h$]h&]hhuh1j!hj?hhhj@hM8ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj?hhhj@hM8ubah}(h]j?ah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj@hM8hj?hhubjC)}(hhh]h)}(h resize a VTh]h resize a VT}(hj(AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM8hj%Ahhubah}(h]h ]h"]h$]h&]uh1jBhj?hhhj@hM8ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jej@Ajfj@Ajgjhjiuh1jhhhj'8hNhNubjk)}(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]ju)}(hjJAh]h Parameters}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjHAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM<hjDAubj)}(hhh](j)}(h)``struct tty_struct *tty`` tty to resize h](j)}(h``struct tty_struct *tty``h]j)}(hjiAh]hstruct tty_struct *tty}(hjkAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgAubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM9hjcAubj)}(hhh]h)}(h tty to resizeh]h tty to resize}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~AhM9hjAubah}(h]h ]h"]h$]h&]uh1jhjcAubeh}(h]h ]h"]h$]h&]uh1jhj~AhM9hj`Aubj)}(h*``struct winsize *ws`` winsize attributes h](j)}(h``struct winsize *ws``h]j)}(hjAh]hstruct winsize *ws}(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.chM:hjAubj)}(hhh]h)}(hwinsize attributesh]hwinsize attributes}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhM:hjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhM:hj`Aubeh}(h]h ]h"]h$]h&]uh1jhjDAubh)}(h**Description**h]ju)}(hjAh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjAubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM<hjDAubh)}(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.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM;hjDAubh)}(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.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM>hjDAubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvc_ctl_state (C enum)c.vc_ctl_statehNtauh1jhj'8hhhNhNubj)}(hhh](j)}(h vc_ctl_stateh]j)}(henum vc_ctl_stateh](j)}(hjh]henum}(hj1BhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-BhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMDubj)}(h h]h }(hj?BhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj-Bhhhj>BhMDubj)}(h vc_ctl_stateh]j)}(hj+Bh]h vc_ctl_state}(hjQBhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjMBubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj-Bhhhj>BhMDubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hj)Bhhhj>BhMDubah}(h]j$Bah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhj>BhMDhj&BhhubjC)}(hhh]h)}(h control characters state of a vth]h control characters state of a vt}(hjsBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjpBhhubah}(h]h ]h"]h$]h&]uh1jBhj&Bhhhj>BhMDubeh}(h]h ](j_enumeh"]h$]h&]jdj_jejBjfjBjgjhjiuh1jhhhj'8hNhNubjk)}(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 ``ESgetsubpars`` CSI m parsed -- subparameters 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]ju)}(hjBh]h Constants}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjBubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjBubj)}(hhh](j)}(h9``ESnormal`` initial state, no control characters parsed h](j)}(h ``ESnormal``h]j)}(hjBh]hESnormal}(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+initial state, no control characters parsedh]h+initial state, no control characters parsed}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjBubj)}(h``ESesc`` ESC parsed h](j)}(h ``ESesc``h]j)}(hjBh]hESesc}(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}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChMhjCubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhjChMhjBubj)}(hD``ESsquare`` CSI parsed -- modifiers/parameters/ctrl chars expected h](j)}(h ``ESsquare``h]j)}(hj&Ch]hESsquare}(hj(ChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Cubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhj Cubj)}(hhh]h)}(h6CSI parsed -- modifiers/parameters/ctrl chars expectedh]h6CSI parsed -- modifiers/parameters/ctrl chars expected}(hj?ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ChMhjFubj)}(hhh]h)}(h ESC ^ parsedh]h ESC ^ parsed}(hj]FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYFhMhjZFubah}(h]h ]h"]h$]h&]uh1jhj>Fubeh}(h]h ]h"]h$]h&]uh1jhjYFhMhjBubj)}(h``ESdcs`` ESC P parsed h](j)}(h ``ESdcs``h]j)}(hj}Fh]hESdcs}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{Fubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjwFubj)}(hhh]h)}(h ESC P parsedh]h ESC P parsed}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhMhjFubah}(h]h ]h"]h$]h&]uh1jhjwFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjBubj)}(h>``ESANSI_last`` last state for ignoring ansi control sequencesh](j)}(h``ESANSI_last``h]j)}(hjFh]h ESANSI_last}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjFubj)}(hhh]h)}(h.last state for ignoring ansi control sequencesh]h.last state for ignoring ansi control sequences}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMhjFubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjFhMhjBubeh}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j vc_sanitize_unicode (C function)c.vc_sanitize_unicodehNtauh1jhj'8hhhNhNubj)}(hhh](j)}(h%int vc_sanitize_unicode (const int c)h]j)}(h$int vc_sanitize_unicode(const int c)h](j|!)}(hinth]hint}(hjGhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj GhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMe ubj)}(h h]h }(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj GhhhjGhMe ubj)}(hvc_sanitize_unicodeh]j)}(hvc_sanitize_unicodeh]hvc_sanitize_unicode}(hj1GhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj-Gubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhj GhhhjGhMe ubj!)}(h (const int c)h]j!)}(h const int ch](j)}(hj!h]hconst}(hjMGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjIGubj)}(h h]h }(hjZGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIGubj|!)}(hinth]hint}(hjhGhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjIGubj)}(h h]h }(hjvGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIGubj)}(hj_h]hc}(hjGhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjIGubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjEGubah}(h]h ]h"]h$]h&]hhuh1j!hj GhhhjGhMe ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjGhhhjGhMe ubah}(h]jGah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjGhMe hjGhhubjC)}(hhh]h)}(h3Replace invalid Unicode code points with ``U+FFFD``h](h)Replace invalid Unicode code points with }(hjGhhhNhNubj)}(h ``U+FFFD``h]hU+FFFD}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMe hjGhhubah}(h]h ]h"]h$]h&]uh1jBhjGhhhjGhMe ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejGjfjGjgjhjiuh1jhhhj'8hNhNubjk)}(h9**Parameters** ``const int c`` the received code pointh](h)}(h**Parameters**h]ju)}(hjGh]h Parameters}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjGubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMi hjGubj)}(hhh]j)}(h'``const int c`` the received code pointh](j)}(h``const int c``h]j)}(hjGh]h const int c}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMk hjGubj)}(hhh]h)}(hthe received code pointh]hthe received code point}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMf hjHubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]uh1jhjHhMk hjGubah}(h]h ]h"]h$]h&]uh1jhjGubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j!vc_translate_unicode (C function)c.vc_translate_unicodehNtauh1jhj'8hhhNhNubj)}(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](j|!)}(hinth]hint}(hjVHhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjRHhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMq ubj)}(h h]h }(hjeHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjRHhhhjdHhMq ubj)}(hvc_translate_unicodeh]j)}(hvc_translate_unicodeh]hvc_translate_unicode}(hjwHhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjsHubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjRHhhhjdHhMq ubj!)}(h)(struct vc_data *vc, int c, bool *rescan)h](j!)}(hstruct vc_data *vch](j)}(hjh]hstruct}(hjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjHubh)}(hhh]j)}(hvc_datah]hvc_data}(hjHhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainj_reftypej" reftargetjHmodnameN classnameNjj)}j]j")}j"jyHsbc.vc_translate_unicodeasbuh1hhjHubj)}(h h]h }(hjHhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjHubj+")}(hj."h]h*}(hjHhhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hjHubj)}(hvch]hvc}(hjHhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjHubj!)}(hint ch](j|!)}(hinth]hint}(hjIhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjIubj)}(h h]h }(hjIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjIubj)}(hj_h]hc}(hj!IhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjHubj!)}(h bool *rescanh](j|!)}(hj.h]hbool}(hj9IhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hj5Iubj)}(h h]h }(hjFIhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhj5Iubj+")}(hj."h]h*}(hjTIhhhNhNubah}(h]h ]j7"ah"]h$]h&]uh1j*"hj5Iubj)}(hrescanh]hrescan}(hjaIhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhj5Iubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hjHubeh}(h]h ]h"]h$]h&]hhuh1j!hjRHhhhjdHhMq ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjNHhhhjdHhMq ubah}(h]jIHah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjdHhMq hjKHhhubjC)}(hhh]h)}(hECombine UTF-8 into Unicode in :c:type:`vc_data.vc_utf_char `h](hCombine UTF-8 into Unicode in }(hjIhhhNhNubh)}(h':c:type:`vc_data.vc_utf_char `h]j)}(hjIh]hvc_data.vc_utf_char}(hjIhhhNhNubah}(h]h ](jj_c-typeeh"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype refexplicitrefwarnjj)}j]jHc.vc_translate_unicodeasbjvc_datauh1hhjL<hMhjIubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMq hjIhhubah}(h]h ]h"]h$]h&]uh1jBhjKHhhhjdHhMq ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejIjfjIjgjhjiuh1jhhhj'8hNhNubjk)}(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]ju)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjIubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMu hjIubj)}(hhh](j)}(h'``struct vc_data *vc`` virtual console h](j)}(h``struct vc_data *vc``h]j)}(hjIh]hstruct vc_data *vc}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMr hjIubj)}(hhh]h)}(hvirtual consoleh]hvirtual console}(hj JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMr hjJubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]uh1jhjJhMr hjIubj)}(h"``int c`` UTF-8 byte to translate h](j)}(h ``int c``h]j)}(hj)Jh]hint c}(hj+JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Jubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMs hj#Jubj)}(hhh]h)}(hUTF-8 byte to translateh]hUTF-8 byte to translate}(hjBJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>JhMs hj?Jubah}(h]h ]h"]h$]h&]uh1jhj#Jubeh}(h]h ]h"]h$]h&]uh1jhj>JhMs hjIubj)}(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)}(hjbJh]h bool *rescan}(hjdJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Jubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMt hj\Jubj)}(hhh]h)}(hGset to true iff **c** wasn't consumed here and needs to be re-processedh](hset to true iff }(hj{JhhhNhNubju)}(h**c**h]hc}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jthj{Jubh4 wasn’t consumed here and needs to be re-processed}(hj{JhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjwJhMt hjxJubah}(h]h ]h"]h$]h&]uh1jhj\Jubeh}(h]h ]h"]h$]h&]uh1jhjwJhMt hjIubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]ju)}(hjJh]h Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjJubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMv hjIubh)}(hhh](h)}(hT:c:type:`vc_data.vc_utf_char ` is the being-constructed Unicode code point.h]h)}(hjJh](h)}(h':c:type:`vc_data.vc_utf_char `h]j)}(hjJh]hvc_data.vc_utf_char}(hjJhhhNhNubah}(h]h ](jj_c-typeeh"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMu hjJubh- is the being-constructed Unicode code point.}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjJhMu hjJubah}(h]h ]h"]h$]h&]uh1hhjJubh)}(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)}(hj Kh]hvc_data.vc_utf_count}(hj KhhhNhNubah}(h]h ](jj_c-typeeh"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMv hjKubh> is the number of continuation bytes still expected to arrive.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj&KhMv hjJubah}(h]h ]h"]h$]h&]uh1hhjJubh)}(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)}(hjAKh]hvc_data.vc_npar}(hjCKhhhNhNubah}(h]h ](jj_c-typeeh"]h$]h&]uh1jhj?Kubah}(h]h ]h"]h$]h&]refdocj refdomainj_reftypetype refexplicitrefwarnjjjvc_datauh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMx hj;Kubh4 is the number of continuation bytes arrived so far.}(hj;KhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj^KhMx hj7Kubah}(h]h ]h"]h$]h&]uh1hhjJubeh}(h]h ]h"]h$]h&]bulletj."uh1hhjJhMu hjIubh)}(h **Return**h]ju)}(hjxKh]hReturn}(hjzKhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjvKubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMz hjIubh)}(hhh](h)}(hA``-1`` - Input OK so far, **c** consumed, further bytes expected.h]h)}(hjKh](j)}(h``-1``h]h-1}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh - Input OK so far, }(hjKhhhNhNubju)}(h**c**h]hc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjKubh" consumed, further bytes expected.}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM{ hjKubah}(h]h ]h"]h$]h&]uh1hhjKubh)}(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]j)}(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``.2h](j)}(hL``0xFFFD`` - Possibility 1: input invalid, **c** may have been consumed (seeh](j)}(h ``0xFFFD``h]h0xFFFD}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh! - Possibility 1: input invalid, }(hjKhhhNhNubju)}(h**c**h]hc}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjKubh may have been consumed (see}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM~ hjKubj)}(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 }(hjLhhhNhNubju)}(h **rescan**h]hrescan}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjLubh). Possibility 2: input OK, }(hjLhhhNhNubju)}(h**c**h]hc}(hj LhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjLubh consumed, }(hjLhhhNhNubj)}(h ``U+FFFD``h]hU+FFFD}(hj2LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh is the resulting code point. }(hjLhhhNhNubj)}(h ``U+FFFD``h]hU+FFFD}(hjDLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh is valid, }(hjLhhhNhNubj)}(h``REPLACEMENT CHARACTER``h]hREPLACEMENT CHARACTER}(hjVLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubh.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM} hjLubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjLhM~ hjKubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhjKubh)}(hDotherwise - Input OK, **c** consumed, resulting code point returned.h]h)}(hjLh](hotherwise - Input OK, }(hjLhhhNhNubju)}(h**c**h]hc}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjLubh) consumed, resulting code point returned.}(hjLhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM hjLubah}(h]h ]h"]h$]h&]uh1hhjKubeh}(h]h ]h"]h$]h&]juKj."uh1hhjKhM{ hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jvt_kmsg_redirect (C function)c.vt_kmsg_redirecthNtauh1jhj'8hhhNhNubj)}(hhh](j)}(hint vt_kmsg_redirect (int new)h]j)}(hint vt_kmsg_redirect(int new)h](j|!)}(hinth]hint}(hjLhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjLhhhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMS ubj)}(h h]h }(hjLhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjLhhhjLhMS ubj)}(hvt_kmsg_redirecth]j)}(hvt_kmsg_redirecth]hvt_kmsg_redirect}(hjLhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjLubah}(h]h ](j)j*eh"]h$]h&]hhuh1jhjLhhhjLhMS ubj!)}(h (int new)h]j!)}(hint newh](j|!)}(hinth]hint}(hjMhhhNhNubah}(h]h ]j!ah"]h$]h&]uh1j{!hjMubj)}(h h]h }(hj"MhhhNhNubah}(h]h ]j ah"]h$]h&]uh1jhjMubj)}(hnewh]hnew}(hj0MhhhNhNubah}(h]h ]j"ah"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]noemphhhuh1j!hj Mubah}(h]h ]h"]h$]h&]hhuh1j!hjLhhhjLhMS ubeh}(h]h ]h"]h$]h&]hhj4uh1jj5j6hjLhhhjLhMS ubah}(h]jLah ](j:j;eh"]h$]h&]j?j@)jAhuh1jhjLhMS hjLhhubjC)}(hhh]h)}(h$sets/gets the kernel message consoleh]h$sets/gets the kernel message console}(hjZMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMS hjWMhhubah}(h]h ]h"]h$]h&]uh1jBhjLhhhjLhMS ubeh}(h]h ](j_functioneh"]h$]h&]jdj_jejrMjfjrMjgjhjiuh1jhhhj'8hNhNubjk)}(hX`**Parameters** ``int new`` the new virtual terminal number or -1 if the console should stay unchanged **Description** By default, the kernel messages are always printed on the current virtual console. However, the user may modify that default with the ``TIOCL_SETKMSGREDIRECT`` ioctl call. This function sets the kernel message console to be **new**. It returns the old virtual console number. The virtual terminal number ``0`` (both as parameter and return value) means no redirection (i.e. always printed on the currently active console). The parameter -1 means that only the current console is returned, but the value is not modified. You may use the macro vt_get_kmsg_redirect() in that case to make the code more understandable. When the kernel is compiled without ``CONFIG_VT_CONSOLE``, this function ignores the parameter and always returns ``0``.h](h)}(h**Parameters**h]ju)}(hj|Mh]h Parameters}(hj~MhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjzMubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMW hjvMubj)}(hhh]j)}(hW``int new`` the new virtual terminal number or -1 if the console should stay unchanged h](j)}(h ``int new``h]j)}(hjMh]hint new}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1jhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMU hjMubj)}(hhh]h)}(hJthe new virtual terminal number or -1 if the console should stay unchangedh]hJthe new virtual terminal number or -1 if the console should stay unchanged}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMT hjMubah}(h]h ]h"]h$]h&]uh1jhjMubeh}(h]h ]h"]h$]h&]uh1jhjMhMU hjMubah}(h]h ]h"]h$]h&]uh1jhjvMubh)}(h**Description**h]ju)}(hjMh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjMubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMW hjvMubh)}(hBy default, the kernel messages are always printed on the current virtual console. However, the user may modify that default with the ``TIOCL_SETKMSGREDIRECT`` ioctl call.h](hBy default, the kernel messages are always printed on the current virtual console. However, the user may modify that default with the }(hjMhhhNhNubj)}(h``TIOCL_SETKMSGREDIRECT``h]hTIOCL_SETKMSGREDIRECT}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh ioctl call.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMV hjvMubh)}(hThis function sets the kernel message console to be **new**. It returns the old virtual console number. The virtual terminal number ``0`` (both as parameter and return value) means no redirection (i.e. always printed on the currently active console).h](h4This function sets the kernel message console to be }(hjNhhhNhNubju)}(h**new**h]hnew}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jthjNubhI. It returns the old virtual console number. The virtual terminal number }(hjNhhhNhNubj)}(h``0``h]h0}(hj(NhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubhq (both as parameter and return value) means no redirection (i.e. always printed on the currently active console).}(hjNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMZ hjvMubh)}(hThe parameter -1 means that only the current console is returned, but the value is not modified. You may use the macro vt_get_kmsg_redirect() in that case to make the code more understandable.h]hThe parameter -1 means that only the current console is returned, but the value is not modified. You may use the macro vt_get_kmsg_redirect() in that case to make the code more understandable.}(hjANhhhNhNubah}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chM_ hjvMubh)}(hxWhen the kernel is compiled without ``CONFIG_VT_CONSOLE``, this function ignores the parameter and always returns ``0``.h](h$When the kernel is compiled without }(hjPNhhhNhNubj)}(h``CONFIG_VT_CONSOLE``h]hCONFIG_VT_CONSOLE}(hjXNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPNubh9, this function ignores the parameter and always returns }(hjPNhhhNhNubj)}(h``0``h]h0}(hjjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPNubh.}(hjPNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhZ/var/lib/git/docbuild/linux/Documentation/driver-api/tty/console:44: ./drivers/tty/vt/vt.chMc hjvMubeh}(h]h ] kernelindentah"]h$]h&]uh1jjhj'8hhhNhNubeh}(h]jah ]h"]h$]jah&]uh1hhjQ!hhhhhK(jKubeh}(h]jqah ]h"]console functionsah$]h&]uh1hhhhhhhhKubeh}(h]consoleah ]h"]consoleah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjNerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jNjNjjjj internalsNjN!jOjNjqu nametypes}(jNjjjOjN!jNuh}(jNhjhjjjjjj j!j j jjjjjjjjojOjjjjqjQ!jn!js!j#j#j&j &j"'j''j^(jc(j)j)jM+jR+j>-jC-jb0jg0jD2jI2j3j3j`5je5j6j6jj'8jD8jI8j9j9j1<j6<j?j?j$Bj)BjGjGjIHjNHjLjLhhjjjIj@jkjbjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jNKsRparse_messages]hsystem_message)}(hhh]h)}(h,Duplicate implicit target name: "internals".h]h0Duplicate implicit target name: “internals”.}(hj*OhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'Oubah}(h]h ]h"]h$]h&]jalevelKtypeINFOsourcehnjlineK(uh1j%Ohj'8hhhhhK(ubatransform_messages] transformerN include_log] decorationNhhub.