/* SPDX-License-Identifier: GPL-2.0 */ /* * console_struct.h * * Data structure describing single virtual console except for data * used by vt.c. * * Fields marked with [#] must be set by the low-level driver. * Fields marked with [!] can be changed by the low-level driver * to achieve effects such as fast scrolling by changing the origin. */ #ifndef _LINUX_CONSOLE_STRUCT_H #define _LINUX_CONSOLE_STRUCT_H #include <linux/wait.h> #include <linux/vt.h> #include <linux/workqueue.h> struct uni_pagedict; #define NPAR … #define VC_TABSTOPS_COUNT … enum vc_intensity { … }; /** * struct vc_state -- state of a VC * @x: cursor's x-position * @y: cursor's y-position * @color: foreground & background colors * @Gx_charset: what's G0/G1 slot set to (like GRAF_MAP, LAT1_MAP) * @charset: what character set to use (0=G0 or 1=G1) * @intensity: see enum vc_intensity for values * @reverse: reversed foreground/background colors * * These members are defined separately from struct vc_data as we save & * restore them at times. */ struct vc_state { … }; /* * Example: vc_data of a console that was scrolled 3 lines down. * * Console buffer * vc_screenbuf ---------> +----------------------+-. * | initializing W | \ * | initializing X | | * | initializing Y | > scroll-back area * | initializing Z | | * | | / * vc_visible_origin ---> ^+----------------------+-: * (changes by scroll) || Welcome to linux | \ * || | | * vc_rows --->< | login: root | | visible on console * || password: | > (vc_screenbuf_size is * vc_origin -----------> || | | vc_size_row * vc_rows) * (start when no scroll) || Last login: 12:28 | / * v+----------------------+-: * | Have a lot of fun... | \ * vc_pos -----------------|--------v | > scroll-front area * | ~ # cat_ | / * vc_scr_end -----------> +----------------------+-: * (vc_origin + | | \ EMPTY, to be filled by * vc_screenbuf_size) | | / vc_video_erase_char * +----------------------+-' * <---- 2 * vc_cols -----> * <---- vc_size_row -----> * * Note that every character in the console buffer is accompanied with an * attribute in the buffer right after the character. This is not depicted * in the figure. */ struct vc_data { … }; struct vc { … }; extern struct vc vc_cons [MAX_NR_CONSOLES]; extern void vc_SAK(struct work_struct *work); #define CUR_MAKE(size, change, set) … #define CUR_SIZE(c) … #define CUR_DEF … #define CUR_NONE … #define CUR_UNDERLINE … #define CUR_LOWER_THIRD … #define CUR_LOWER_HALF … #define CUR_TWO_THIRDS … #define CUR_BLOCK … #define CUR_SW … #define CUR_ALWAYS_BG … #define CUR_INVERT_FG_BG … #define CUR_FG … #define CUR_BG … #define CUR_CHANGE(c) … #define CUR_SET(c) … bool con_is_visible(const struct vc_data *vc); #endif /* _LINUX_CONSOLE_STRUCT_H */