xref: /freebsd/stand/efi/include/eficon.h (revision ed76a9506aaa81426ded64bb0e1f96c6509c32ea)
1ca987d46SWarner Losh #ifndef _EFI_CON_H
2ca987d46SWarner Losh #define _EFI_CON_H
3ca987d46SWarner Losh 
4ca987d46SWarner Losh /*++
5ca987d46SWarner Losh 
6ca987d46SWarner Losh Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
7ca987d46SWarner Losh This software and associated documentation (if any) is furnished
8ca987d46SWarner Losh under a license and may only be used or copied in accordance
9ca987d46SWarner Losh with the terms of the license. Except as permitted by such
10ca987d46SWarner Losh license, no part of this software or documentation may be
11ca987d46SWarner Losh reproduced, stored in a retrieval system, or transmitted in any
12ca987d46SWarner Losh form or by any means without the express written consent of
13ca987d46SWarner Losh Intel Corporation.
14ca987d46SWarner Losh 
15ca987d46SWarner Losh Module Name:
16ca987d46SWarner Losh 
17ca987d46SWarner Losh     eficon.h
18ca987d46SWarner Losh 
19ca987d46SWarner Losh Abstract:
20ca987d46SWarner Losh 
21ca987d46SWarner Losh     EFI console protocols
22ca987d46SWarner Losh 
23ca987d46SWarner Losh 
24ca987d46SWarner Losh 
25ca987d46SWarner Losh Revision History
26ca987d46SWarner Losh 
27ca987d46SWarner Losh --*/
28ca987d46SWarner Losh 
29ca987d46SWarner Losh //
30ca987d46SWarner Losh // Text output protocol
31ca987d46SWarner Losh //
32ca987d46SWarner Losh 
33ca987d46SWarner Losh #define SIMPLE_TEXT_OUTPUT_PROTOCOL \
34ca987d46SWarner Losh     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
35ca987d46SWarner Losh 
36ca987d46SWarner Losh INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
37ca987d46SWarner Losh 
38ca987d46SWarner Losh typedef
39ca987d46SWarner Losh EFI_STATUS
40ca987d46SWarner Losh (EFIAPI *EFI_TEXT_RESET) (
41ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
42ca987d46SWarner Losh     IN BOOLEAN                      ExtendedVerification
43ca987d46SWarner Losh     );
44ca987d46SWarner Losh 
45ca987d46SWarner Losh typedef
46ca987d46SWarner Losh EFI_STATUS
47ca987d46SWarner Losh (EFIAPI *EFI_TEXT_OUTPUT_STRING) (
48ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
49ca987d46SWarner Losh     IN CHAR16                       *String
50ca987d46SWarner Losh     );
51ca987d46SWarner Losh 
52ca987d46SWarner Losh typedef
53ca987d46SWarner Losh EFI_STATUS
54ca987d46SWarner Losh (EFIAPI *EFI_TEXT_TEST_STRING) (
55ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
56ca987d46SWarner Losh     IN CHAR16                       *String
57ca987d46SWarner Losh     );
58ca987d46SWarner Losh 
59ca987d46SWarner Losh typedef
60ca987d46SWarner Losh EFI_STATUS
61ca987d46SWarner Losh (EFIAPI *EFI_TEXT_QUERY_MODE) (
62ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
63ca987d46SWarner Losh     IN UINTN                        ModeNumber,
64ca987d46SWarner Losh     OUT UINTN                       *Columns,
65ca987d46SWarner Losh     OUT UINTN                       *Rows
66ca987d46SWarner Losh     );
67ca987d46SWarner Losh 
68ca987d46SWarner Losh typedef
69ca987d46SWarner Losh EFI_STATUS
70ca987d46SWarner Losh (EFIAPI *EFI_TEXT_SET_MODE) (
71ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
72ca987d46SWarner Losh     IN UINTN                        ModeNumber
73ca987d46SWarner Losh     );
74ca987d46SWarner Losh 
75ca987d46SWarner Losh typedef
76ca987d46SWarner Losh EFI_STATUS
77ca987d46SWarner Losh (EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
78ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
79ca987d46SWarner Losh     IN UINTN                        Attribute
80ca987d46SWarner Losh     );
81ca987d46SWarner Losh 
82ca987d46SWarner Losh #define EFI_BLACK   0x00
83ca987d46SWarner Losh #define EFI_BLUE    0x01
84ca987d46SWarner Losh #define EFI_GREEN   0x02
85ca987d46SWarner Losh #define EFI_CYAN            (EFI_BLUE | EFI_GREEN)
86ca987d46SWarner Losh #define EFI_RED     0x04
87ca987d46SWarner Losh #define EFI_MAGENTA         (EFI_BLUE | EFI_RED)
88ca987d46SWarner Losh #define EFI_BROWN           (EFI_GREEN | EFI_RED)
89ca987d46SWarner Losh #define EFI_LIGHTGRAY       (EFI_BLUE | EFI_GREEN | EFI_RED)
90ca987d46SWarner Losh #define EFI_BRIGHT  0x08
91ca987d46SWarner Losh #define EFI_DARKGRAY        (EFI_BRIGHT)
92ca987d46SWarner Losh #define EFI_LIGHTBLUE       (EFI_BLUE | EFI_BRIGHT)
93ca987d46SWarner Losh #define EFI_LIGHTGREEN      (EFI_GREEN | EFI_BRIGHT)
94ca987d46SWarner Losh #define EFI_LIGHTCYAN       (EFI_CYAN | EFI_BRIGHT)
95ca987d46SWarner Losh #define EFI_LIGHTRED        (EFI_RED | EFI_BRIGHT)
96ca987d46SWarner Losh #define EFI_LIGHTMAGENTA    (EFI_MAGENTA | EFI_BRIGHT)
97ca987d46SWarner Losh #define EFI_YELLOW          (EFI_BROWN | EFI_BRIGHT)
98ca987d46SWarner Losh #define EFI_WHITE           (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
99ca987d46SWarner Losh 
100ca987d46SWarner Losh #define EFI_TEXT_ATTR(f,b)  ((f) | ((b) << 4))
101ca987d46SWarner Losh 
102ca987d46SWarner Losh #define EFI_BACKGROUND_BLACK        0x00
103ca987d46SWarner Losh #define EFI_BACKGROUND_BLUE         0x10
104ca987d46SWarner Losh #define EFI_BACKGROUND_GREEN        0x20
105ca987d46SWarner Losh #define EFI_BACKGROUND_CYAN         (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
106ca987d46SWarner Losh #define EFI_BACKGROUND_RED          0x40
107ca987d46SWarner Losh #define EFI_BACKGROUND_MAGENTA      (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
108ca987d46SWarner Losh #define EFI_BACKGROUND_BROWN        (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
109ca987d46SWarner Losh #define EFI_BACKGROUND_LIGHTGRAY    (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
110ca987d46SWarner Losh 
111ca987d46SWarner Losh 
112ca987d46SWarner Losh typedef
113ca987d46SWarner Losh EFI_STATUS
114ca987d46SWarner Losh (EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
115ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This
116ca987d46SWarner Losh     );
117ca987d46SWarner Losh 
118ca987d46SWarner Losh typedef
119ca987d46SWarner Losh EFI_STATUS
120ca987d46SWarner Losh (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
121ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
122ca987d46SWarner Losh     IN UINTN                        Column,
123ca987d46SWarner Losh     IN UINTN                        Row
124ca987d46SWarner Losh     );
125ca987d46SWarner Losh 
126ca987d46SWarner Losh typedef
127ca987d46SWarner Losh EFI_STATUS
128ca987d46SWarner Losh (EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
129ca987d46SWarner Losh     IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
130ca987d46SWarner Losh     IN BOOLEAN                      Enable
131ca987d46SWarner Losh     );
132ca987d46SWarner Losh 
133ca987d46SWarner Losh typedef struct {
134ca987d46SWarner Losh     INT32                           MaxMode;
135ca987d46SWarner Losh     // current settings
136ca987d46SWarner Losh     INT32                           Mode;
137ca987d46SWarner Losh     INT32                           Attribute;
138ca987d46SWarner Losh     INT32                           CursorColumn;
139ca987d46SWarner Losh     INT32                           CursorRow;
140ca987d46SWarner Losh     BOOLEAN                         CursorVisible;
141ca987d46SWarner Losh } SIMPLE_TEXT_OUTPUT_MODE;
142ca987d46SWarner Losh 
143ca987d46SWarner Losh typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
144ca987d46SWarner Losh     EFI_TEXT_RESET                  Reset;
145ca987d46SWarner Losh 
146ca987d46SWarner Losh     EFI_TEXT_OUTPUT_STRING          OutputString;
147ca987d46SWarner Losh     EFI_TEXT_TEST_STRING            TestString;
148ca987d46SWarner Losh 
149ca987d46SWarner Losh     EFI_TEXT_QUERY_MODE             QueryMode;
150ca987d46SWarner Losh     EFI_TEXT_SET_MODE               SetMode;
151ca987d46SWarner Losh     EFI_TEXT_SET_ATTRIBUTE          SetAttribute;
152ca987d46SWarner Losh 
153ca987d46SWarner Losh     EFI_TEXT_CLEAR_SCREEN           ClearScreen;
154ca987d46SWarner Losh     EFI_TEXT_SET_CURSOR_POSITION    SetCursorPosition;
155ca987d46SWarner Losh     EFI_TEXT_ENABLE_CURSOR          EnableCursor;
156ca987d46SWarner Losh 
157ca987d46SWarner Losh     // Current mode
158ca987d46SWarner Losh     SIMPLE_TEXT_OUTPUT_MODE         *Mode;
159ca987d46SWarner Losh } SIMPLE_TEXT_OUTPUT_INTERFACE;
160ca987d46SWarner Losh 
161ca987d46SWarner Losh //
162ca987d46SWarner Losh // Define's for required EFI Unicode Box Draw character
163ca987d46SWarner Losh //
164ca987d46SWarner Losh 
165ca987d46SWarner Losh #define BOXDRAW_HORIZONTAL                  0x2500
166ca987d46SWarner Losh #define BOXDRAW_VERTICAL                    0x2502
167ca987d46SWarner Losh #define BOXDRAW_DOWN_RIGHT                  0x250c
168ca987d46SWarner Losh #define BOXDRAW_DOWN_LEFT                   0x2510
169ca987d46SWarner Losh #define BOXDRAW_UP_RIGHT                    0x2514
170ca987d46SWarner Losh #define BOXDRAW_UP_LEFT                     0x2518
171ca987d46SWarner Losh #define BOXDRAW_VERTICAL_RIGHT              0x251c
172ca987d46SWarner Losh #define BOXDRAW_VERTICAL_LEFT               0x2524
173ca987d46SWarner Losh #define BOXDRAW_DOWN_HORIZONTAL             0x252c
174ca987d46SWarner Losh #define BOXDRAW_UP_HORIZONTAL               0x2534
175ca987d46SWarner Losh #define BOXDRAW_VERTICAL_HORIZONTAL         0x253c
176ca987d46SWarner Losh 
177ca987d46SWarner Losh #define BOXDRAW_DOUBLE_HORIZONTAL           0x2550
178ca987d46SWarner Losh #define BOXDRAW_DOUBLE_VERTICAL             0x2551
179ca987d46SWarner Losh #define BOXDRAW_DOWN_RIGHT_DOUBLE           0x2552
180ca987d46SWarner Losh #define BOXDRAW_DOWN_DOUBLE_RIGHT           0x2553
181ca987d46SWarner Losh #define BOXDRAW_DOUBLE_DOWN_RIGHT           0x2554
182ca987d46SWarner Losh 
183ca987d46SWarner Losh #define BOXDRAW_DOWN_LEFT_DOUBLE            0x2555
184ca987d46SWarner Losh #define BOXDRAW_DOWN_DOUBLE_LEFT            0x2556
185ca987d46SWarner Losh #define BOXDRAW_DOUBLE_DOWN_LEFT            0x2557
186ca987d46SWarner Losh 
187ca987d46SWarner Losh #define BOXDRAW_UP_RIGHT_DOUBLE             0x2558
188ca987d46SWarner Losh #define BOXDRAW_UP_DOUBLE_RIGHT             0x2559
189ca987d46SWarner Losh #define BOXDRAW_DOUBLE_UP_RIGHT             0x255a
190ca987d46SWarner Losh 
191ca987d46SWarner Losh #define BOXDRAW_UP_LEFT_DOUBLE              0x255b
192ca987d46SWarner Losh #define BOXDRAW_UP_DOUBLE_LEFT              0x255c
193ca987d46SWarner Losh #define BOXDRAW_DOUBLE_UP_LEFT              0x255d
194ca987d46SWarner Losh 
195ca987d46SWarner Losh #define BOXDRAW_VERTICAL_RIGHT_DOUBLE       0x255e
196ca987d46SWarner Losh #define BOXDRAW_VERTICAL_DOUBLE_RIGHT       0x255f
197ca987d46SWarner Losh #define BOXDRAW_DOUBLE_VERTICAL_RIGHT       0x2560
198ca987d46SWarner Losh 
199ca987d46SWarner Losh #define BOXDRAW_VERTICAL_LEFT_DOUBLE        0x2561
200ca987d46SWarner Losh #define BOXDRAW_VERTICAL_DOUBLE_LEFT        0x2562
201ca987d46SWarner Losh #define BOXDRAW_DOUBLE_VERTICAL_LEFT        0x2563
202ca987d46SWarner Losh 
203ca987d46SWarner Losh #define BOXDRAW_DOWN_HORIZONTAL_DOUBLE      0x2564
204ca987d46SWarner Losh #define BOXDRAW_DOWN_DOUBLE_HORIZONTAL      0x2565
205ca987d46SWarner Losh #define BOXDRAW_DOUBLE_DOWN_HORIZONTAL      0x2566
206ca987d46SWarner Losh 
207ca987d46SWarner Losh #define BOXDRAW_UP_HORIZONTAL_DOUBLE        0x2567
208ca987d46SWarner Losh #define BOXDRAW_UP_DOUBLE_HORIZONTAL        0x2568
209ca987d46SWarner Losh #define BOXDRAW_DOUBLE_UP_HORIZONTAL        0x2569
210ca987d46SWarner Losh 
211ca987d46SWarner Losh #define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE  0x256a
212ca987d46SWarner Losh #define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL  0x256b
213ca987d46SWarner Losh #define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL  0x256c
214ca987d46SWarner Losh 
215ca987d46SWarner Losh //
216ca987d46SWarner Losh // EFI Required Block Elements Code Chart
217ca987d46SWarner Losh //
218ca987d46SWarner Losh 
219ca987d46SWarner Losh #define BLOCKELEMENT_FULL_BLOCK             0x2588
220ca987d46SWarner Losh #define BLOCKELEMENT_LIGHT_SHADE            0x2591
221ca987d46SWarner Losh //
222ca987d46SWarner Losh // EFI Required Geometric Shapes Code Chart
223ca987d46SWarner Losh //
224ca987d46SWarner Losh 
225ca987d46SWarner Losh #define GEOMETRICSHAPE_UP_TRIANGLE           0x25b2
226ca987d46SWarner Losh #define GEOMETRICSHAPE_RIGHT_TRIANGLE        0x25ba
227ca987d46SWarner Losh #define GEOMETRICSHAPE_DOWN_TRIANGLE         0x25bc
228ca987d46SWarner Losh #define GEOMETRICSHAPE_LEFT_TRIANGLE         0x25c4
229ca987d46SWarner Losh 
230ca987d46SWarner Losh //
231ca987d46SWarner Losh // EFI Required Arrow shapes
232ca987d46SWarner Losh //
233ca987d46SWarner Losh 
234ca987d46SWarner Losh #define ARROW_UP                            0x2191
235ca987d46SWarner Losh #define ARROW_DOWN                          0x2193
236ca987d46SWarner Losh 
237ca987d46SWarner Losh //
238ca987d46SWarner Losh // Text input protocol
239ca987d46SWarner Losh //
240ca987d46SWarner Losh 
241ca987d46SWarner Losh #define SIMPLE_TEXT_INPUT_PROTOCOL \
242ca987d46SWarner Losh     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
243ca987d46SWarner Losh 
244ca987d46SWarner Losh INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
245ca987d46SWarner Losh 
246ca987d46SWarner Losh typedef struct {
247ca987d46SWarner Losh     UINT16                              ScanCode;
248ca987d46SWarner Losh     CHAR16                              UnicodeChar;
249ca987d46SWarner Losh } EFI_INPUT_KEY;
250ca987d46SWarner Losh 
251ca987d46SWarner Losh //
252ca987d46SWarner Losh // Baseline unicode control chars
253ca987d46SWarner Losh //
254ca987d46SWarner Losh 
255ca987d46SWarner Losh #define CHAR_NULL                       0x0000
256ca987d46SWarner Losh #define CHAR_BACKSPACE                  0x0008
257ca987d46SWarner Losh #define CHAR_TAB                        0x0009
258ca987d46SWarner Losh #define CHAR_LINEFEED                   0x000A
259ca987d46SWarner Losh #define CHAR_CARRIAGE_RETURN            0x000D
260ca987d46SWarner Losh 
261ca987d46SWarner Losh //
262ca987d46SWarner Losh // Scan codes for base line keys
263ca987d46SWarner Losh //
264ca987d46SWarner Losh 
265ca987d46SWarner Losh #define SCAN_NULL		0x0000
266ca987d46SWarner Losh #define SCAN_UP			0x0001
267ca987d46SWarner Losh #define SCAN_DOWN		0x0002
268ca987d46SWarner Losh #define SCAN_RIGHT		0x0003
269ca987d46SWarner Losh #define SCAN_LEFT		0x0004
270ca987d46SWarner Losh #define SCAN_HOME		0x0005
271ca987d46SWarner Losh #define SCAN_END		0x0006
272ca987d46SWarner Losh #define SCAN_INSERT		0x0007
273ca987d46SWarner Losh #define SCAN_DELETE		0x0008
274ca987d46SWarner Losh #define SCAN_PAGE_UP		0x0009
275ca987d46SWarner Losh #define SCAN_PAGE_DOWN		0x000A
276ca987d46SWarner Losh #define SCAN_F1			0x000B
277ca987d46SWarner Losh #define SCAN_F2			0x000C
278ca987d46SWarner Losh #define SCAN_F3			0x000D
279ca987d46SWarner Losh #define SCAN_F4			0x000E
280ca987d46SWarner Losh #define SCAN_F5			0x000F
281ca987d46SWarner Losh #define SCAN_F6			0x0010
282ca987d46SWarner Losh #define SCAN_F7			0x0011
283ca987d46SWarner Losh #define SCAN_F8			0x0012
284ca987d46SWarner Losh #define SCAN_F9			0x0013
285ca987d46SWarner Losh #define SCAN_F10		0x0014
286ca987d46SWarner Losh #define SCAN_ESC		0x0017
287ca987d46SWarner Losh 
28865641822SToomas Soome //
28965641822SToomas Soome // EFI Scan code Ex
29065641822SToomas Soome //
29165641822SToomas Soome #define SCAN_F11		0x0015
29265641822SToomas Soome #define SCAN_F12		0x0016
29365641822SToomas Soome #define SCAN_F13		0x0068
29465641822SToomas Soome #define SCAN_F14		0x0069
29565641822SToomas Soome #define SCAN_F15		0x006A
29665641822SToomas Soome #define SCAN_F16		0x006B
29765641822SToomas Soome #define SCAN_F17		0x006C
29865641822SToomas Soome #define SCAN_F18		0x006D
29965641822SToomas Soome #define SCAN_F19		0x006E
30065641822SToomas Soome #define SCAN_F20		0x006F
30165641822SToomas Soome #define SCAN_F21		0x0070
30265641822SToomas Soome #define SCAN_F22		0x0071
30365641822SToomas Soome #define SCAN_F23		0x0072
30465641822SToomas Soome #define SCAN_F24		0x0073
30565641822SToomas Soome #define SCAN_MUTE		0x007F
30665641822SToomas Soome #define SCAN_VOLUME_UP		0x0080
30765641822SToomas Soome #define SCAN_VOLUME_DOWN	0x0081
30865641822SToomas Soome #define SCAN_BRIGHTNESS_UP	0x0100
30965641822SToomas Soome #define SCAN_BRIGHTNESS_DOWN	0x0101
31065641822SToomas Soome #define SCAN_SUSPEND		0x0102
31165641822SToomas Soome #define SCAN_HIBERNATE		0x0103
31265641822SToomas Soome #define SCAN_TOGGLE_DISPLAY	0x0104
31365641822SToomas Soome #define SCAN_RECOVERY		0x0105
31465641822SToomas Soome #define SCAN_EJECT		0x0106
31565641822SToomas Soome 
316ca987d46SWarner Losh typedef
317ca987d46SWarner Losh EFI_STATUS
318ca987d46SWarner Losh (EFIAPI *EFI_INPUT_RESET) (
319ca987d46SWarner Losh     IN struct _SIMPLE_INPUT_INTERFACE   *This,
320ca987d46SWarner Losh     IN BOOLEAN                          ExtendedVerification
321ca987d46SWarner Losh     );
322ca987d46SWarner Losh 
323ca987d46SWarner Losh typedef
324ca987d46SWarner Losh EFI_STATUS
325ca987d46SWarner Losh (EFIAPI *EFI_INPUT_READ_KEY) (
326ca987d46SWarner Losh     IN struct _SIMPLE_INPUT_INTERFACE   *This,
327ca987d46SWarner Losh     OUT EFI_INPUT_KEY                   *Key
328ca987d46SWarner Losh     );
329ca987d46SWarner Losh 
330ca987d46SWarner Losh typedef struct _SIMPLE_INPUT_INTERFACE {
331ca987d46SWarner Losh     EFI_INPUT_RESET                     Reset;
332ca987d46SWarner Losh     EFI_INPUT_READ_KEY                  ReadKeyStroke;
333ca987d46SWarner Losh     EFI_EVENT                           WaitForKey;
334ca987d46SWarner Losh } SIMPLE_INPUT_INTERFACE;
335ca987d46SWarner Losh 
33665641822SToomas Soome #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
33765641822SToomas Soome   {0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, \
33865641822SToomas Soome   0x17, 0xa6, 0x25, 0xaa} }
33965641822SToomas Soome 
34065641822SToomas Soome INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL);
34165641822SToomas Soome 
34265641822SToomas Soome typedef UINT8          EFI_KEY_TOGGLE_STATE;
34365641822SToomas Soome //
34465641822SToomas Soome // Any Shift or Toggle State that is valid should have
34565641822SToomas Soome // high order bit set.
34665641822SToomas Soome //
34765641822SToomas Soome typedef struct EFI_KEY_STATE {
34865641822SToomas Soome   UINT32               KeyShiftState;
34965641822SToomas Soome   EFI_KEY_TOGGLE_STATE KeyToggleState;
35065641822SToomas Soome } EFI_KEY_STATE;
35165641822SToomas Soome 
35265641822SToomas Soome typedef struct {
35365641822SToomas Soome   EFI_INPUT_KEY        Key;
35465641822SToomas Soome   EFI_KEY_STATE        KeyState;
35565641822SToomas Soome } EFI_KEY_DATA;
35665641822SToomas Soome 
35765641822SToomas Soome //
35865641822SToomas Soome // Shift state
35965641822SToomas Soome //
36065641822SToomas Soome #define EFI_SHIFT_STATE_VALID     0x80000000
36165641822SToomas Soome #define EFI_RIGHT_SHIFT_PRESSED   0x00000001
36265641822SToomas Soome #define EFI_LEFT_SHIFT_PRESSED    0x00000002
36365641822SToomas Soome #define EFI_RIGHT_CONTROL_PRESSED 0x00000004
36465641822SToomas Soome #define EFI_LEFT_CONTROL_PRESSED  0x00000008
36565641822SToomas Soome #define EFI_RIGHT_ALT_PRESSED     0x00000010
36665641822SToomas Soome #define EFI_LEFT_ALT_PRESSED      0x00000020
36765641822SToomas Soome #define EFI_RIGHT_LOGO_PRESSED    0x00000040
36865641822SToomas Soome #define EFI_LEFT_LOGO_PRESSED     0x00000080
36965641822SToomas Soome #define EFI_MENU_KEY_PRESSED      0x00000100
37065641822SToomas Soome #define EFI_SYS_REQ_PRESSED       0x00000200
37165641822SToomas Soome 
37265641822SToomas Soome //
37365641822SToomas Soome // Toggle state
37465641822SToomas Soome //
37565641822SToomas Soome #define EFI_TOGGLE_STATE_VALID    0x80
37665641822SToomas Soome #define	EFI_KEY_STATE_EXPOSED     0x40
37765641822SToomas Soome #define EFI_SCROLL_LOCK_ACTIVE    0x01
37865641822SToomas Soome #define EFI_NUM_LOCK_ACTIVE       0x02
37965641822SToomas Soome #define EFI_CAPS_LOCK_ACTIVE      0x04
38065641822SToomas Soome 
38165641822SToomas Soome //
38265641822SToomas Soome // EFI Key Notfication Function
38365641822SToomas Soome //
38465641822SToomas Soome typedef
38565641822SToomas Soome EFI_STATUS
38665641822SToomas Soome (EFIAPI *EFI_KEY_NOTIFY_FUNCTION) (
38765641822SToomas Soome   IN  EFI_KEY_DATA                      *KeyData
38865641822SToomas Soome   );
38965641822SToomas Soome 
39065641822SToomas Soome typedef
39165641822SToomas Soome EFI_STATUS
39265641822SToomas Soome (EFIAPI *EFI_INPUT_RESET_EX) (
39365641822SToomas Soome   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
39465641822SToomas Soome   IN BOOLEAN                            ExtendedVerification
39565641822SToomas Soome   )
39665641822SToomas Soome /*++
39765641822SToomas Soome 
39865641822SToomas Soome   Routine Description:
39965641822SToomas Soome     Reset the input device and optionaly run diagnostics
40065641822SToomas Soome 
40165641822SToomas Soome   Arguments:
40265641822SToomas Soome     This                  - Protocol instance pointer.
40365641822SToomas Soome     ExtendedVerification  - Driver may perform diagnostics on reset.
40465641822SToomas Soome 
40565641822SToomas Soome   Returns:
40665641822SToomas Soome     EFI_SUCCESS           - The device was reset.
40765641822SToomas Soome     EFI_DEVICE_ERROR      - The device is not functioning properly and could
40865641822SToomas Soome                             not be reset.
40965641822SToomas Soome 
41065641822SToomas Soome --*/
41165641822SToomas Soome ;
41265641822SToomas Soome 
41365641822SToomas Soome typedef
41465641822SToomas Soome EFI_STATUS
41565641822SToomas Soome (EFIAPI *EFI_INPUT_READ_KEY_EX) (
41665641822SToomas Soome   IN  struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
41765641822SToomas Soome   OUT EFI_KEY_DATA                      *KeyData
41865641822SToomas Soome   )
41965641822SToomas Soome /*++
42065641822SToomas Soome 
42165641822SToomas Soome   Routine Description:
42265641822SToomas Soome     Reads the next keystroke from the input device. The WaitForKey Event can
4239cd75b55SGordon Bergling     be used to test for existence of a keystroke via WaitForEvent () call.
42465641822SToomas Soome 
42565641822SToomas Soome   Arguments:
42665641822SToomas Soome     This       - Protocol instance pointer.
42765641822SToomas Soome     KeyData    - A pointer to a buffer that is filled in with the keystroke
42865641822SToomas Soome                  state data for the key that was pressed.
42965641822SToomas Soome 
43065641822SToomas Soome   Returns:
43165641822SToomas Soome     EFI_SUCCESS           - The keystroke information was returned.
43265641822SToomas Soome     EFI_NOT_READY         - There was no keystroke data availiable.
43365641822SToomas Soome     EFI_DEVICE_ERROR      - The keystroke information was not returned due to
43465641822SToomas Soome                             hardware errors.
43565641822SToomas Soome     EFI_INVALID_PARAMETER - KeyData is NULL.
43665641822SToomas Soome --*/
43765641822SToomas Soome ;
43865641822SToomas Soome 
43965641822SToomas Soome typedef
44065641822SToomas Soome EFI_STATUS
44165641822SToomas Soome (EFIAPI *EFI_SET_STATE) (
44265641822SToomas Soome   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
44365641822SToomas Soome   IN EFI_KEY_TOGGLE_STATE               *KeyToggleState
44465641822SToomas Soome   )
44565641822SToomas Soome /*++
44665641822SToomas Soome 
44765641822SToomas Soome   Routine Description:
44865641822SToomas Soome     Set certain state for the input device.
44965641822SToomas Soome 
45065641822SToomas Soome   Arguments:
45165641822SToomas Soome     This              - Protocol instance pointer.
45265641822SToomas Soome     KeyToggleState    - A pointer to the EFI_KEY_TOGGLE_STATE to set the
45365641822SToomas Soome                         state for the input device.
45465641822SToomas Soome 
45565641822SToomas Soome   Returns:
45665641822SToomas Soome     EFI_SUCCESS           - The device state was set successfully.
45765641822SToomas Soome     EFI_DEVICE_ERROR      - The device is not functioning correctly and could
45865641822SToomas Soome                             not have the setting adjusted.
45965641822SToomas Soome     EFI_UNSUPPORTED       - The device does not have the ability to set its state.
46065641822SToomas Soome     EFI_INVALID_PARAMETER - KeyToggleState is NULL.
46165641822SToomas Soome 
46265641822SToomas Soome --*/
46365641822SToomas Soome ;
46465641822SToomas Soome 
46565641822SToomas Soome typedef
46665641822SToomas Soome EFI_STATUS
46765641822SToomas Soome (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) (
46865641822SToomas Soome   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
46965641822SToomas Soome   IN EFI_KEY_DATA                       *KeyData,
47065641822SToomas Soome   IN EFI_KEY_NOTIFY_FUNCTION            KeyNotificationFunction,
47165641822SToomas Soome   OUT EFI_HANDLE                        *NotifyHandle
47265641822SToomas Soome   )
47365641822SToomas Soome /*++
47465641822SToomas Soome 
47565641822SToomas Soome   Routine Description:
47665641822SToomas Soome     Register a notification function for a particular keystroke for the input device.
47765641822SToomas Soome 
47865641822SToomas Soome   Arguments:
47965641822SToomas Soome     This                    - Protocol instance pointer.
48065641822SToomas Soome     KeyData                 - A pointer to a buffer that is filled in with the keystroke
48165641822SToomas Soome                               information data for the key that was pressed.
48265641822SToomas Soome     KeyNotificationFunction - Points to the function to be called when the key
48365641822SToomas Soome                               sequence is typed specified by KeyData.
48465641822SToomas Soome     NotifyHandle            - Points to the unique handle assigned to the registered notification.
48565641822SToomas Soome 
48665641822SToomas Soome   Returns:
48765641822SToomas Soome     EFI_SUCCESS             - The notification function was registered successfully.
488*ed76a950SJose Luis Duran     EFI_OUT_OF_RESOURCES    - Unable to allocate resources for necessary data structures.
48965641822SToomas Soome     EFI_INVALID_PARAMETER   - KeyData or NotifyHandle is NULL.
49065641822SToomas Soome 
49165641822SToomas Soome --*/
49265641822SToomas Soome ;
49365641822SToomas Soome 
49465641822SToomas Soome typedef
49565641822SToomas Soome EFI_STATUS
49665641822SToomas Soome (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) (
49765641822SToomas Soome   IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL  *This,
49865641822SToomas Soome   IN EFI_HANDLE                         NotificationHandle
49965641822SToomas Soome   )
50065641822SToomas Soome /*++
50165641822SToomas Soome 
50265641822SToomas Soome   Routine Description:
50365641822SToomas Soome     Remove a registered notification function from a particular keystroke.
50465641822SToomas Soome 
50565641822SToomas Soome   Arguments:
50665641822SToomas Soome     This                    - Protocol instance pointer.
50765641822SToomas Soome     NotificationHandle      - The handle of the notification function being unregistered.
50865641822SToomas Soome 
50965641822SToomas Soome   Returns:
51065641822SToomas Soome     EFI_SUCCESS             - The notification function was unregistered successfully.
51165641822SToomas Soome     EFI_INVALID_PARAMETER   - The NotificationHandle is invalid.
51265641822SToomas Soome     EFI_NOT_FOUND           - Can not find the matching entry in database.
51365641822SToomas Soome 
51465641822SToomas Soome --*/
51565641822SToomas Soome ;
51665641822SToomas Soome 
51765641822SToomas Soome typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL {
51865641822SToomas Soome   EFI_INPUT_RESET_EX                    Reset;
51965641822SToomas Soome   EFI_INPUT_READ_KEY_EX                 ReadKeyStrokeEx;
52065641822SToomas Soome   EFI_EVENT                             WaitForKeyEx;
52165641822SToomas Soome   EFI_SET_STATE                         SetState;
52265641822SToomas Soome   EFI_REGISTER_KEYSTROKE_NOTIFY         RegisterKeyNotify;
52365641822SToomas Soome   EFI_UNREGISTER_KEYSTROKE_NOTIFY       UnregisterKeyNotify;
52465641822SToomas Soome } EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
52565641822SToomas Soome 
526ca987d46SWarner Losh #endif
527