6 Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved
7 This software and associated documentation (if any) is furnished
8 under a license and may only be used or copied in accordance
9 with the terms of the license. Except as permitted by such
10 license, no part of this software or documentation may be
11 reproduced, stored in a retrieval system, or transmitted in any
12 form or by any means without the express written consent of
30 // Text output protocol
33 #define SIMPLE_TEXT_OUTPUT_PROTOCOL \
34 { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
36 INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
40 (EFIAPI *EFI_TEXT_RESET) (
41 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
42 IN BOOLEAN ExtendedVerification
47 (EFIAPI *EFI_TEXT_OUTPUT_STRING) (
48 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
54 (EFIAPI *EFI_TEXT_TEST_STRING) (
55 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
61 (EFIAPI *EFI_TEXT_QUERY_MODE) (
62 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
70 (EFIAPI *EFI_TEXT_SET_MODE) (
71 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
77 (EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
78 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
82 #define EFI_BLACK 0x00
84 #define EFI_GREEN 0x02
85 #define EFI_CYAN (EFI_BLUE | EFI_GREEN)
87 #define EFI_MAGENTA (EFI_BLUE | EFI_RED)
88 #define EFI_BROWN (EFI_GREEN | EFI_RED)
89 #define EFI_LIGHTGRAY (EFI_BLUE | EFI_GREEN | EFI_RED)
90 #define EFI_BRIGHT 0x08
91 #define EFI_DARKGRAY (EFI_BRIGHT)
92 #define EFI_LIGHTBLUE (EFI_BLUE | EFI_BRIGHT)
93 #define EFI_LIGHTGREEN (EFI_GREEN | EFI_BRIGHT)
94 #define EFI_LIGHTCYAN (EFI_CYAN | EFI_BRIGHT)
95 #define EFI_LIGHTRED (EFI_RED | EFI_BRIGHT)
96 #define EFI_LIGHTMAGENTA (EFI_MAGENTA | EFI_BRIGHT)
97 #define EFI_YELLOW (EFI_BROWN | EFI_BRIGHT)
98 #define EFI_WHITE (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
100 #define EFI_TEXT_ATTR(f,b) ((f) | ((b) << 4))
102 #define EFI_BACKGROUND_BLACK 0x00
103 #define EFI_BACKGROUND_BLUE 0x10
104 #define EFI_BACKGROUND_GREEN 0x20
105 #define EFI_BACKGROUND_CYAN (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
106 #define EFI_BACKGROUND_RED 0x40
107 #define EFI_BACKGROUND_MAGENTA (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
108 #define EFI_BACKGROUND_BROWN (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
109 #define EFI_BACKGROUND_LIGHTGRAY (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
114 (EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
115 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This
120 (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
121 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
128 (EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
129 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
140 BOOLEAN CursorVisible;
141 } SIMPLE_TEXT_OUTPUT_MODE;
143 typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
144 EFI_TEXT_RESET Reset;
146 EFI_TEXT_OUTPUT_STRING OutputString;
147 EFI_TEXT_TEST_STRING TestString;
149 EFI_TEXT_QUERY_MODE QueryMode;
150 EFI_TEXT_SET_MODE SetMode;
151 EFI_TEXT_SET_ATTRIBUTE SetAttribute;
153 EFI_TEXT_CLEAR_SCREEN ClearScreen;
154 EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition;
155 EFI_TEXT_ENABLE_CURSOR EnableCursor;
158 SIMPLE_TEXT_OUTPUT_MODE *Mode;
159 } SIMPLE_TEXT_OUTPUT_INTERFACE;
162 // Define's for required EFI Unicode Box Draw character
165 #define BOXDRAW_HORIZONTAL 0x2500
166 #define BOXDRAW_VERTICAL 0x2502
167 #define BOXDRAW_DOWN_RIGHT 0x250c
168 #define BOXDRAW_DOWN_LEFT 0x2510
169 #define BOXDRAW_UP_RIGHT 0x2514
170 #define BOXDRAW_UP_LEFT 0x2518
171 #define BOXDRAW_VERTICAL_RIGHT 0x251c
172 #define BOXDRAW_VERTICAL_LEFT 0x2524
173 #define BOXDRAW_DOWN_HORIZONTAL 0x252c
174 #define BOXDRAW_UP_HORIZONTAL 0x2534
175 #define BOXDRAW_VERTICAL_HORIZONTAL 0x253c
177 #define BOXDRAW_DOUBLE_HORIZONTAL 0x2550
178 #define BOXDRAW_DOUBLE_VERTICAL 0x2551
179 #define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552
180 #define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553
181 #define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554
183 #define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555
184 #define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556
185 #define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557
187 #define BOXDRAW_UP_RIGHT_DOUBLE 0x2558
188 #define BOXDRAW_UP_DOUBLE_RIGHT 0x2559
189 #define BOXDRAW_DOUBLE_UP_RIGHT 0x255a
191 #define BOXDRAW_UP_LEFT_DOUBLE 0x255b
192 #define BOXDRAW_UP_DOUBLE_LEFT 0x255c
193 #define BOXDRAW_DOUBLE_UP_LEFT 0x255d
195 #define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e
196 #define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f
197 #define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560
199 #define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561
200 #define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562
201 #define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563
203 #define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564
204 #define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565
205 #define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566
207 #define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567
208 #define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568
209 #define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569
211 #define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a
212 #define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b
213 #define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c
216 // EFI Required Block Elements Code Chart
219 #define BLOCKELEMENT_FULL_BLOCK 0x2588
220 #define BLOCKELEMENT_LIGHT_SHADE 0x2591
222 // EFI Required Geometric Shapes Code Chart
225 #define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2
226 #define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba
227 #define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc
228 #define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4
231 // EFI Required Arrow shapes
234 #define ARROW_UP 0x2191
235 #define ARROW_DOWN 0x2193
238 // Text input protocol
241 #define SIMPLE_TEXT_INPUT_PROTOCOL \
242 { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
244 INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
252 // Baseline unicode control chars
255 #define CHAR_NULL 0x0000
256 #define CHAR_BACKSPACE 0x0008
257 #define CHAR_TAB 0x0009
258 #define CHAR_LINEFEED 0x000A
259 #define CHAR_CARRIAGE_RETURN 0x000D
262 // Scan codes for base line keys
265 #define SCAN_NULL 0x0000
266 #define SCAN_UP 0x0001
267 #define SCAN_DOWN 0x0002
268 #define SCAN_RIGHT 0x0003
269 #define SCAN_LEFT 0x0004
270 #define SCAN_HOME 0x0005
271 #define SCAN_END 0x0006
272 #define SCAN_INSERT 0x0007
273 #define SCAN_DELETE 0x0008
274 #define SCAN_PAGE_UP 0x0009
275 #define SCAN_PAGE_DOWN 0x000A
276 #define SCAN_F1 0x000B
277 #define SCAN_F2 0x000C
278 #define SCAN_F3 0x000D
279 #define SCAN_F4 0x000E
280 #define SCAN_F5 0x000F
281 #define SCAN_F6 0x0010
282 #define SCAN_F7 0x0011
283 #define SCAN_F8 0x0012
284 #define SCAN_F9 0x0013
285 #define SCAN_F10 0x0014
286 #define SCAN_ESC 0x0017
291 #define SCAN_F11 0x0015
292 #define SCAN_F12 0x0016
293 #define SCAN_F13 0x0068
294 #define SCAN_F14 0x0069
295 #define SCAN_F15 0x006A
296 #define SCAN_F16 0x006B
297 #define SCAN_F17 0x006C
298 #define SCAN_F18 0x006D
299 #define SCAN_F19 0x006E
300 #define SCAN_F20 0x006F
301 #define SCAN_F21 0x0070
302 #define SCAN_F22 0x0071
303 #define SCAN_F23 0x0072
304 #define SCAN_F24 0x0073
305 #define SCAN_MUTE 0x007F
306 #define SCAN_VOLUME_UP 0x0080
307 #define SCAN_VOLUME_DOWN 0x0081
308 #define SCAN_BRIGHTNESS_UP 0x0100
309 #define SCAN_BRIGHTNESS_DOWN 0x0101
310 #define SCAN_SUSPEND 0x0102
311 #define SCAN_HIBERNATE 0x0103
312 #define SCAN_TOGGLE_DISPLAY 0x0104
313 #define SCAN_RECOVERY 0x0105
314 #define SCAN_EJECT 0x0106
318 (EFIAPI *EFI_INPUT_RESET) (
319 IN struct _SIMPLE_INPUT_INTERFACE *This,
320 IN BOOLEAN ExtendedVerification
325 (EFIAPI *EFI_INPUT_READ_KEY) (
326 IN struct _SIMPLE_INPUT_INTERFACE *This,
327 OUT EFI_INPUT_KEY *Key
330 typedef struct _SIMPLE_INPUT_INTERFACE {
331 EFI_INPUT_RESET Reset;
332 EFI_INPUT_READ_KEY ReadKeyStroke;
333 EFI_EVENT WaitForKey;
334 } SIMPLE_INPUT_INTERFACE;
336 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
337 {0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, \
338 0x17, 0xa6, 0x25, 0xaa} }
340 INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL);
342 typedef UINT8 EFI_KEY_TOGGLE_STATE;
344 // Any Shift or Toggle State that is valid should have
345 // high order bit set.
347 typedef struct EFI_KEY_STATE {
348 UINT32 KeyShiftState;
349 EFI_KEY_TOGGLE_STATE KeyToggleState;
354 EFI_KEY_STATE KeyState;
360 #define EFI_SHIFT_STATE_VALID 0x80000000
361 #define EFI_RIGHT_SHIFT_PRESSED 0x00000001
362 #define EFI_LEFT_SHIFT_PRESSED 0x00000002
363 #define EFI_RIGHT_CONTROL_PRESSED 0x00000004
364 #define EFI_LEFT_CONTROL_PRESSED 0x00000008
365 #define EFI_RIGHT_ALT_PRESSED 0x00000010
366 #define EFI_LEFT_ALT_PRESSED 0x00000020
367 #define EFI_RIGHT_LOGO_PRESSED 0x00000040
368 #define EFI_LEFT_LOGO_PRESSED 0x00000080
369 #define EFI_MENU_KEY_PRESSED 0x00000100
370 #define EFI_SYS_REQ_PRESSED 0x00000200
375 #define EFI_TOGGLE_STATE_VALID 0x80
376 #define EFI_KEY_STATE_EXPOSED 0x40
377 #define EFI_SCROLL_LOCK_ACTIVE 0x01
378 #define EFI_NUM_LOCK_ACTIVE 0x02
379 #define EFI_CAPS_LOCK_ACTIVE 0x04
382 // EFI Key Notfication Function
386 (EFIAPI *EFI_KEY_NOTIFY_FUNCTION) (
387 IN EFI_KEY_DATA *KeyData
392 (EFIAPI *EFI_INPUT_RESET_EX) (
393 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
394 IN BOOLEAN ExtendedVerification
399 Reset the input device and optionaly run diagnostics
402 This - Protocol instance pointer.
403 ExtendedVerification - Driver may perform diagnostics on reset.
406 EFI_SUCCESS - The device was reset.
407 EFI_DEVICE_ERROR - The device is not functioning properly and could
415 (EFIAPI *EFI_INPUT_READ_KEY_EX) (
416 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
417 OUT EFI_KEY_DATA *KeyData
422 Reads the next keystroke from the input device. The WaitForKey Event can
423 be used to test for existence of a keystroke via WaitForEvent () call.
426 This - Protocol instance pointer.
427 KeyData - A pointer to a buffer that is filled in with the keystroke
428 state data for the key that was pressed.
431 EFI_SUCCESS - The keystroke information was returned.
432 EFI_NOT_READY - There was no keystroke data availiable.
433 EFI_DEVICE_ERROR - The keystroke information was not returned due to
435 EFI_INVALID_PARAMETER - KeyData is NULL.
441 (EFIAPI *EFI_SET_STATE) (
442 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
443 IN EFI_KEY_TOGGLE_STATE *KeyToggleState
448 Set certain state for the input device.
451 This - Protocol instance pointer.
452 KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the
453 state for the input device.
456 EFI_SUCCESS - The device state was set successfully.
457 EFI_DEVICE_ERROR - The device is not functioning correctly and could
458 not have the setting adjusted.
459 EFI_UNSUPPORTED - The device does not have the ability to set its state.
460 EFI_INVALID_PARAMETER - KeyToggleState is NULL.
467 (EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) (
468 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
469 IN EFI_KEY_DATA *KeyData,
470 IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,
471 OUT EFI_HANDLE *NotifyHandle
476 Register a notification function for a particular keystroke for the input device.
479 This - Protocol instance pointer.
480 KeyData - A pointer to a buffer that is filled in with the keystroke
481 information data for the key that was pressed.
482 KeyNotificationFunction - Points to the function to be called when the key
483 sequence is typed specified by KeyData.
484 NotifyHandle - Points to the unique handle assigned to the registered notification.
487 EFI_SUCCESS - The notification function was registered successfully.
488 EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures.
489 EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL.
496 (EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) (
497 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
498 IN EFI_HANDLE NotificationHandle
503 Remove a registered notification function from a particular keystroke.
506 This - Protocol instance pointer.
507 NotificationHandle - The handle of the notification function being unregistered.
510 EFI_SUCCESS - The notification function was unregistered successfully.
511 EFI_INVALID_PARAMETER - The NotificationHandle is invalid.
512 EFI_NOT_FOUND - Can not find the matching entry in database.
517 typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL {
518 EFI_INPUT_RESET_EX Reset;
519 EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx;
520 EFI_EVENT WaitForKeyEx;
521 EFI_SET_STATE SetState;
522 EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify;
523 EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify;
524 } EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;