Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * console_struct.h
4 *
5 * Data structure describing single virtual console except for data
6 * used by vt.c.
7 *
8 * Fields marked with [#] must be set by the low-level driver.
9 * Fields marked with [!] can be changed by the low-level driver
10 * to achieve effects such as fast scrolling by changing the origin.
11 */
12
13#ifndef _LINUX_CONSOLE_STRUCT_H
14#define _LINUX_CONSOLE_STRUCT_H
15
16#include <linux/vt.h>
17#include <linux/wait.h>
18#include <linux/workqueue.h>
19
20struct uni_pagedict;
21
22#define NPAR 16
23#define VC_TABSTOPS_COUNT 256U
24
25enum vc_intensity {
26 VCI_HALF_BRIGHT,
27 VCI_NORMAL,
28 VCI_BOLD,
29 VCI_MASK = 0x3,
30};
31
32/**
33 * struct vc_state -- state of a VC
34 * @x: cursor's x-position
35 * @y: cursor's y-position
36 * @color: foreground & background colors
37 * @Gx_charset: what's G0/G1 slot set to (like GRAF_MAP, LAT1_MAP)
38 * @charset: what character set to use (0=G0 or 1=G1)
39 * @intensity: see enum vc_intensity for values
40 * @reverse: reversed foreground/background colors
41 *
42 * These members are defined separately from struct vc_data as we save &
43 * restore them at times.
44 */
45struct vc_state {
46 unsigned int x, y;
47
48 unsigned char color;
49
50 unsigned char Gx_charset[2];
51 unsigned int charset : 1;
52
53 /* attribute flags */
54 enum vc_intensity intensity;
55 bool italic;
56 bool underline;
57 bool blink;
58 bool reverse;
59};
60
61/**
62 * struct vc_font - Describes a font
63 * @width: The width of a single glyph in bits
64 * @height: The height of a single glyph in scanlines
65 * @charcount: The number of glyphs in the font
66 * @data: The raw font data
67 *
68 * Font data is organized as an array of glyphs. Each glyph is a bitmap with
69 * set bits indicating the foreground color. Unset bits indicate background
70 * color. The fields @width and @height store a single glyph's number of
71 * horizontal bits and vertical scanlines. If width is not a multiple of 8,
72 * there are trailing bits to fill up the byte. These bits should not be drawn.
73 *
74 * The field @data points to the first glyph's first byte. The value @charcount
75 * gives the number of glyphs in the font. There are no empty scanlines between
76 * two adjacent glyphs.
77 */
78struct vc_font {
79 unsigned int width;
80 unsigned int height;
81 unsigned int charcount;
82 const unsigned char *data;
83};
84
85unsigned int vc_font_pitch(const struct vc_font *font);
86unsigned int vc_font_size(const struct vc_font *font);
87
88/*
89 * Example: vc_data of a console that was scrolled 3 lines down.
90 *
91 * Console buffer
92 * vc_screenbuf ---------> +----------------------+-.
93 * | initializing W | \
94 * | initializing X | |
95 * | initializing Y | > scroll-back area
96 * | initializing Z | |
97 * | | /
98 * vc_visible_origin ---> ^+----------------------+-:
99 * (changes by scroll) || Welcome to linux | \
100 * || | |
101 * vc_rows --->< | login: root | | visible on console
102 * || password: | > (vc_screenbuf_size is
103 * vc_origin -----------> || | | vc_size_row * vc_rows)
104 * (start when no scroll) || Last login: 12:28 | /
105 * v+----------------------+-:
106 * | Have a lot of fun... | \
107 * vc_pos -----------------|--------v | > scroll-front area
108 * | ~ # cat_ | /
109 * vc_scr_end -----------> +----------------------+-:
110 * (vc_origin + | | \ EMPTY, to be filled by
111 * vc_screenbuf_size) | | / vc_video_erase_char
112 * +----------------------+-'
113 * <---- 2 * vc_cols ----->
114 * <---- vc_size_row ----->
115 *
116 * Note that every character in the console buffer is accompanied with an
117 * attribute in the buffer right after the character. This is not depicted
118 * in the figure.
119 */
120struct vc_data {
121 struct tty_port port; /* Upper level data */
122
123 struct vc_state state, saved_state;
124
125 unsigned short vc_num; /* Console number */
126 unsigned int vc_cols; /* [#] Console size */
127 unsigned int vc_rows;
128 unsigned int vc_size_row; /* Bytes per row */
129 unsigned int vc_scan_lines; /* # of scan lines */
130 unsigned int vc_cell_height; /* CRTC character cell height */
131 unsigned long vc_origin; /* [!] Start of real screen */
132 unsigned long vc_scr_end; /* [!] End of real screen */
133 unsigned long vc_visible_origin; /* [!] Top of visible window */
134 unsigned int vc_top, vc_bottom; /* Scrolling region */
135 const struct consw *vc_sw;
136 unsigned short *vc_screenbuf; /* In-memory character/attribute buffer */
137 unsigned int vc_screenbuf_size;
138 unsigned char vc_mode; /* KD_TEXT, ... */
139 /* attributes for all characters on screen */
140 unsigned char vc_attr; /* Current attributes */
141 unsigned char vc_def_color; /* Default colors */
142 unsigned char vc_ulcolor; /* Color for underline mode */
143 unsigned char vc_itcolor;
144 unsigned char vc_halfcolor; /* Color for half intensity mode */
145 /* cursor */
146 unsigned int vc_cursor_type;
147 unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */
148 unsigned short vc_s_complement_mask; /* Saved mouse pointer mask */
149 unsigned long vc_pos; /* Cursor address */
150 /* fonts */
151 unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars of font or 0 if not supported */
152 struct vc_font vc_font; /* Current VC font set */
153 unsigned short vc_video_erase_char; /* Background erase character */
154 /* VT terminal data */
155 unsigned int vc_state; /* Escape sequence parser state */
156 unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */
157 /* data for manual vt switching */
158 struct vt_mode vt_mode;
159 struct pid *vt_pid;
160 int vt_newvt;
161 wait_queue_head_t paste_wait;
162 /* mode flags */
163 unsigned int vc_disp_ctrl : 1; /* Display chars < 32? */
164 unsigned int vc_toggle_meta : 1; /* Toggle high bit? */
165 unsigned int vc_decscnm : 1; /* Screen Mode */
166 unsigned int vc_decom : 1; /* Origin Mode */
167 unsigned int vc_decawm : 1; /* Autowrap Mode */
168 unsigned int vc_deccm : 1; /* Cursor Visible */
169 unsigned int vc_decim : 1; /* Insert Mode */
170 /* misc */
171 unsigned int vc_priv : 3;
172 unsigned int vc_need_wrap : 1;
173 unsigned int vc_can_do_color : 1;
174 unsigned int vc_report_mouse : 2;
175 unsigned int vc_bracketed_paste : 1;
176 unsigned char vc_utf : 1; /* Unicode UTF-8 encoding */
177 unsigned char vc_utf_count;
178 int vc_utf_char;
179 DECLARE_BITMAP(vc_tab_stop, VC_TABSTOPS_COUNT); /* Tab stops. 256 columns. */
180 unsigned char vc_palette[16*3]; /* Colour palette for VGA+ */
181 unsigned short * vc_translate;
182 unsigned int vc_bell_pitch; /* Console bell pitch */
183 unsigned int vc_bell_duration; /* Console bell duration */
184 unsigned short vc_cur_blink_ms; /* Cursor blink duration */
185 struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */
186 struct uni_pagedict *uni_pagedict;
187 struct uni_pagedict **uni_pagedict_loc; /* [!] Location of uni_pagedict variable for this console */
188 u32 **vc_uni_lines; /* unicode screen content */
189 u16 *vc_saved_screen;
190 u32 **vc_saved_uni_lines;
191 unsigned int vc_saved_cols;
192 unsigned int vc_saved_rows;
193 /* additional information is in vt_kern.h */
194};
195
196struct vc {
197 struct vc_data *d;
198 struct work_struct SAK_work;
199
200 /* might add scrmem, kbd at some time,
201 to have everything in one place */
202};
203
204extern struct vc vc_cons [MAX_NR_CONSOLES];
205extern void vc_SAK(struct work_struct *work);
206
207#define CUR_MAKE(size, change, set) ((size) | ((change) << 8) | \
208 ((set) << 16))
209#define CUR_SIZE(c) ((c) & 0x00000f)
210# define CUR_DEF 0
211# define CUR_NONE 1
212# define CUR_UNDERLINE 2
213# define CUR_LOWER_THIRD 3
214# define CUR_LOWER_HALF 4
215# define CUR_TWO_THIRDS 5
216# define CUR_BLOCK 6
217#define CUR_SW 0x000010
218#define CUR_ALWAYS_BG 0x000020
219#define CUR_INVERT_FG_BG 0x000040
220#define CUR_FG 0x000700
221#define CUR_BG 0x007000
222#define CUR_CHANGE(c) ((c) & 0x00ff00)
223#define CUR_SET(c) (((c) & 0xff0000) >> 8)
224
225bool con_is_visible(const struct vc_data *vc);
226
227#endif /* _LINUX_CONSOLE_STRUCT_H */