1#ifndef _EFI_CON_H
2#define _EFI_CON_H
3
4/*++
5
6Copyright (c) 1998  Intel Corporation
7
8Module Name:
9
10    eficon.h
11
12Abstract:
13
14    EFI console protocols
15
16
17
18Revision 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
29INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
30
31typedef
32EFI_STATUS
33(EFIAPI *EFI_TEXT_RESET) (
34    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
35    IN BOOLEAN                      ExtendedVerification
36    );
37
38typedef
39EFI_STATUS
40(EFIAPI *EFI_TEXT_OUTPUT_STRING) (
41    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
42    IN CHAR16                       *String
43    );
44
45typedef
46EFI_STATUS
47(EFIAPI *EFI_TEXT_TEST_STRING) (
48    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
49    IN CHAR16                       *String
50    );
51
52typedef
53EFI_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
61typedef
62EFI_STATUS
63(EFIAPI *EFI_TEXT_SET_MODE) (
64    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
65    IN UINTN                        ModeNumber
66    );
67
68typedef
69EFI_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
105typedef
106EFI_STATUS
107(EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
108    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This
109    );
110
111typedef
112EFI_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
119typedef
120EFI_STATUS
121(EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
122    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
123    IN BOOLEAN                      Enable
124    );
125
126typedef 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
136typedef 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
237INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
238
239typedef 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
281typedef
282EFI_STATUS
283(EFIAPI *EFI_INPUT_RESET) (
284    IN struct _SIMPLE_INPUT_INTERFACE   *This,
285    IN BOOLEAN                          ExtendedVerification
286    );
287
288typedef
289EFI_STATUS
290(EFIAPI *EFI_INPUT_READ_KEY) (
291    IN struct _SIMPLE_INPUT_INTERFACE   *This,
292    OUT EFI_INPUT_KEY                   *Key
293    );
294
295typedef 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