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