xref: /netbsd-src/sys/external/bsd/gnu-efi/dist/inc/eficon.h (revision d1b935f8e85510a16a1b49122bd2ccf5ad7e104c)
1 /*	$NetBSD: eficon.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $	*/
2 
3 #ifndef _EFI_CON_H
4 #define _EFI_CON_H
5 
6 /*++
7 
8 Copyright (c) 1998  Intel Corporation
9 
10 Module Name:
11 
12     eficon.h
13 
14 Abstract:
15 
16     EFI console protocols
17 
18 
19 
20 Revision History
21 
22 --*/
23 
24 //
25 // Text output protocol
26 //
27 
28 #define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \
29     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
30 #define SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID
31 
32 INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
33 
34 typedef
35 EFI_STATUS
36 (EFIAPI *EFI_TEXT_RESET) (
37     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
38     IN BOOLEAN                      ExtendedVerification
39     );
40 
41 typedef
42 EFI_STATUS
43 (EFIAPI *EFI_TEXT_OUTPUT_STRING) (
44     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
45     IN CHAR16                       *String
46     );
47 
48 typedef
49 EFI_STATUS
50 (EFIAPI *EFI_TEXT_TEST_STRING) (
51     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
52     IN CHAR16                       *String
53     );
54 
55 typedef
56 EFI_STATUS
57 (EFIAPI *EFI_TEXT_QUERY_MODE) (
58     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
59     IN UINTN                        ModeNumber,
60     OUT UINTN                       *Columns,
61     OUT UINTN                       *Rows
62     );
63 
64 typedef
65 EFI_STATUS
66 (EFIAPI *EFI_TEXT_SET_MODE) (
67     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
68     IN UINTN                        ModeNumber
69     );
70 
71 typedef
72 EFI_STATUS
73 (EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
74     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
75     IN UINTN                        Attribute
76     );
77 
78 #define EFI_BLACK   0x00
79 #define EFI_BLUE    0x01
80 #define EFI_GREEN   0x02
81 #define EFI_CYAN            (EFI_BLUE | EFI_GREEN)
82 #define EFI_RED     0x04
83 #define EFI_MAGENTA         (EFI_BLUE | EFI_RED)
84 #define EFI_BROWN           (EFI_GREEN | EFI_RED)
85 #define EFI_LIGHTGRAY       (EFI_BLUE | EFI_GREEN | EFI_RED)
86 #define EFI_BRIGHT  0x08
87 #define EFI_DARKGRAY        (EFI_BRIGHT)
88 #define EFI_LIGHTBLUE       (EFI_BLUE | EFI_BRIGHT)
89 #define EFI_LIGHTGREEN      (EFI_GREEN | EFI_BRIGHT)
90 #define EFI_LIGHTCYAN       (EFI_CYAN | EFI_BRIGHT)
91 #define EFI_LIGHTRED        (EFI_RED | EFI_BRIGHT)
92 #define EFI_LIGHTMAGENTA    (EFI_MAGENTA | EFI_BRIGHT)
93 #define EFI_YELLOW          (EFI_BROWN | EFI_BRIGHT)
94 #define EFI_WHITE           (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
95 
96 #define EFI_TEXT_ATTR(f,b)  ((f) | ((b) << 4))
97 
98 #define EFI_BACKGROUND_BLACK        0x00
99 #define EFI_BACKGROUND_BLUE         0x10
100 #define EFI_BACKGROUND_GREEN        0x20
101 #define EFI_BACKGROUND_CYAN         (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
102 #define EFI_BACKGROUND_RED          0x40
103 #define EFI_BACKGROUND_MAGENTA      (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
104 #define EFI_BACKGROUND_BROWN        (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
105 #define EFI_BACKGROUND_LIGHTGRAY    (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
106 
107 
108 typedef
109 EFI_STATUS
110 (EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
111     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This
112     );
113 
114 typedef
115 EFI_STATUS
116 (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
117     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
118     IN UINTN                        Column,
119     IN UINTN                        Row
120     );
121 
122 typedef
123 EFI_STATUS
124 (EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
125     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
126     IN BOOLEAN                      Enable
127     );
128 
129 typedef struct {
130     INT32                           MaxMode;
131     // current settings
132     INT32                           Mode;
133     INT32                           Attribute;
134     INT32                           CursorColumn;
135     INT32                           CursorRow;
136     BOOLEAN                         CursorVisible;
137 } SIMPLE_TEXT_OUTPUT_MODE;
138 
139 typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
140     EFI_TEXT_RESET                  Reset;
141 
142     EFI_TEXT_OUTPUT_STRING          OutputString;
143     EFI_TEXT_TEST_STRING            TestString;
144 
145     EFI_TEXT_QUERY_MODE             QueryMode;
146     EFI_TEXT_SET_MODE               SetMode;
147     EFI_TEXT_SET_ATTRIBUTE          SetAttribute;
148 
149     EFI_TEXT_CLEAR_SCREEN           ClearScreen;
150     EFI_TEXT_SET_CURSOR_POSITION    SetCursorPosition;
151     EFI_TEXT_ENABLE_CURSOR          EnableCursor;
152 
153     // Current mode
154     SIMPLE_TEXT_OUTPUT_MODE         *Mode;
155 } SIMPLE_TEXT_OUTPUT_INTERFACE, EFI_SIMPLE_TEXT_OUT_PROTOCOL;
156 
157 //
158 // Define's for required EFI Unicode Box Draw character
159 //
160 
161 #define BOXDRAW_HORIZONTAL                  0x2500
162 #define BOXDRAW_VERTICAL                    0x2502
163 #define BOXDRAW_DOWN_RIGHT                  0x250c
164 #define BOXDRAW_DOWN_LEFT                   0x2510
165 #define BOXDRAW_UP_RIGHT                    0x2514
166 #define BOXDRAW_UP_LEFT                     0x2518
167 #define BOXDRAW_VERTICAL_RIGHT              0x251c
168 #define BOXDRAW_VERTICAL_LEFT               0x2524
169 #define BOXDRAW_DOWN_HORIZONTAL             0x252c
170 #define BOXDRAW_UP_HORIZONTAL               0x2534
171 #define BOXDRAW_VERTICAL_HORIZONTAL         0x253c
172 
173 #define BOXDRAW_DOUBLE_HORIZONTAL           0x2550
174 #define BOXDRAW_DOUBLE_VERTICAL             0x2551
175 #define BOXDRAW_DOWN_RIGHT_DOUBLE           0x2552
176 #define BOXDRAW_DOWN_DOUBLE_RIGHT           0x2553
177 #define BOXDRAW_DOUBLE_DOWN_RIGHT           0x2554
178 
179 #define BOXDRAW_DOWN_LEFT_DOUBLE            0x2555
180 #define BOXDRAW_DOWN_DOUBLE_LEFT            0x2556
181 #define BOXDRAW_DOUBLE_DOWN_LEFT            0x2557
182 
183 #define BOXDRAW_UP_RIGHT_DOUBLE             0x2558
184 #define BOXDRAW_UP_DOUBLE_RIGHT             0x2559
185 #define BOXDRAW_DOUBLE_UP_RIGHT             0x255a
186 
187 #define BOXDRAW_UP_LEFT_DOUBLE              0x255b
188 #define BOXDRAW_UP_DOUBLE_LEFT              0x255c
189 #define BOXDRAW_DOUBLE_UP_LEFT              0x255d
190 
191 #define BOXDRAW_VERTICAL_RIGHT_DOUBLE       0x255e
192 #define BOXDRAW_VERTICAL_DOUBLE_RIGHT       0x255f
193 #define BOXDRAW_DOUBLE_VERTICAL_RIGHT       0x2560
194 
195 #define BOXDRAW_VERTICAL_LEFT_DOUBLE        0x2561
196 #define BOXDRAW_VERTICAL_DOUBLE_LEFT        0x2562
197 #define BOXDRAW_DOUBLE_VERTICAL_LEFT        0x2563
198 
199 #define BOXDRAW_DOWN_HORIZONTAL_DOUBLE      0x2564
200 #define BOXDRAW_DOWN_DOUBLE_HORIZONTAL      0x2565
201 #define BOXDRAW_DOUBLE_DOWN_HORIZONTAL      0x2566
202 
203 #define BOXDRAW_UP_HORIZONTAL_DOUBLE        0x2567
204 #define BOXDRAW_UP_DOUBLE_HORIZONTAL        0x2568
205 #define BOXDRAW_DOUBLE_UP_HORIZONTAL        0x2569
206 
207 #define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE  0x256a
208 #define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL  0x256b
209 #define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL  0x256c
210 
211 //
212 // EFI Required Block Elements Code Chart
213 //
214 
215 #define BLOCKELEMENT_FULL_BLOCK             0x2588
216 #define BLOCKELEMENT_LIGHT_SHADE            0x2591
217 //
218 // EFI Required Geometric Shapes Code Chart
219 //
220 
221 #define GEOMETRICSHAPE_UP_TRIANGLE           0x25b2
222 #define GEOMETRICSHAPE_RIGHT_TRIANGLE        0x25ba
223 #define GEOMETRICSHAPE_DOWN_TRIANGLE         0x25bc
224 #define GEOMETRICSHAPE_LEFT_TRIANGLE         0x25c4
225 
226 //
227 // EFI Required Arrow shapes
228 //
229 
230 #define ARROW_UP                            0x2191
231 #define ARROW_DOWN                          0x2193
232 
233 //
234 // Text input protocol
235 //
236 
237 #define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \
238     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
239 #define SIMPLE_TEXT_INPUT_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID
240 
241 INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
242 
243 typedef struct {
244     UINT16                              ScanCode;
245     CHAR16                              UnicodeChar;
246 } EFI_INPUT_KEY;
247 
248 //
249 // Baseline unicode control chars
250 //
251 
252 #define CHAR_NULL                       0x0000
253 #define CHAR_BACKSPACE                  0x0008
254 #define CHAR_TAB                        0x0009
255 #define CHAR_LINEFEED                   0x000A
256 #define CHAR_CARRIAGE_RETURN            0x000D
257 
258 //
259 // Scan codes for base line keys
260 //
261 
262 #define SCAN_NULL                       0x0000
263 #define SCAN_UP                         0x0001
264 #define SCAN_DOWN                       0x0002
265 #define SCAN_RIGHT                      0x0003
266 #define SCAN_LEFT                       0x0004
267 #define SCAN_HOME                       0x0005
268 #define SCAN_END                        0x0006
269 #define SCAN_INSERT                     0x0007
270 #define SCAN_DELETE                     0x0008
271 #define SCAN_PAGE_UP                    0x0009
272 #define SCAN_PAGE_DOWN                  0x000A
273 #define SCAN_F1                         0x000B
274 #define SCAN_F2                         0x000C
275 #define SCAN_F3                         0x000D
276 #define SCAN_F4                         0x000E
277 #define SCAN_F5                         0x000F
278 #define SCAN_F6                         0x0010
279 #define SCAN_F7                         0x0011
280 #define SCAN_F8                         0x0012
281 #define SCAN_F9                         0x0013
282 #define SCAN_F10                        0x0014
283 #define SCAN_F11                        0x0015
284 #define SCAN_F12                        0x0016
285 #define SCAN_ESC                        0x0017
286 
287 typedef
288 EFI_STATUS
289 (EFIAPI *EFI_INPUT_RESET) (
290     IN struct _SIMPLE_INPUT_INTERFACE   *This,
291     IN BOOLEAN                          ExtendedVerification
292     );
293 
294 typedef
295 EFI_STATUS
296 (EFIAPI *EFI_INPUT_READ_KEY) (
297     IN struct _SIMPLE_INPUT_INTERFACE   *This,
298     OUT EFI_INPUT_KEY                   *Key
299     );
300 
301 typedef struct _SIMPLE_INPUT_INTERFACE {
302     EFI_INPUT_RESET                     Reset;
303     EFI_INPUT_READ_KEY                  ReadKeyStroke;
304     EFI_EVENT                           WaitForKey;
305 } SIMPLE_INPUT_INTERFACE, EFI_SIMPLE_TEXT_IN_PROTOCOL;
306 
307 #endif
308 
309