1#ifndef _EFI_CON_H 2#define _EFI_CON_H 3 4/*++ 5 6Copyright (c) 1999 - 2002 Intel Corporation. All rights reserved 7This software and associated documentation (if any) is furnished 8under a license and may only be used or copied in accordance 9with the terms of the license. Except as permitted by such 10license, no part of this software or documentation may be 11reproduced, stored in a retrieval system, or transmitted in any 12form or by any means without the express written consent of 13Intel Corporation. 14 15Module Name: 16 17 eficon.h 18 19Abstract: 20 21 EFI console protocols 22 23 24 25Revision History 26 27--*/ 28 29// 30// Text output protocol 31// 32 33#define SIMPLE_TEXT_OUTPUT_PROTOCOL \ 34 { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 35 36INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE); 37 38typedef 39EFI_STATUS 40(EFIAPI *EFI_TEXT_RESET) ( 41 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 42 IN BOOLEAN ExtendedVerification 43 ); 44 45typedef 46EFI_STATUS 47(EFIAPI *EFI_TEXT_OUTPUT_STRING) ( 48 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 49 IN CHAR16 *String 50 ); 51 52typedef 53EFI_STATUS 54(EFIAPI *EFI_TEXT_TEST_STRING) ( 55 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 56 IN CHAR16 *String 57 ); 58 59typedef 60EFI_STATUS 61(EFIAPI *EFI_TEXT_QUERY_MODE) ( 62 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 63 IN UINTN ModeNumber, 64 OUT UINTN *Columns, 65 OUT UINTN *Rows 66 ); 67 68typedef 69EFI_STATUS 70(EFIAPI *EFI_TEXT_SET_MODE) ( 71 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 72 IN UINTN ModeNumber 73 ); 74 75typedef 76EFI_STATUS 77(EFIAPI *EFI_TEXT_SET_ATTRIBUTE) ( 78 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 79 IN UINTN Attribute 80 ); 81 82#define EFI_BLACK 0x00 83#define EFI_BLUE 0x01 84#define EFI_GREEN 0x02 85#define EFI_CYAN (EFI_BLUE | EFI_GREEN) 86#define EFI_RED 0x04 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) 99 100#define EFI_TEXT_ATTR(f,b) ((f) | ((b) << 4)) 101 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) 110 111 112typedef 113EFI_STATUS 114(EFIAPI *EFI_TEXT_CLEAR_SCREEN) ( 115 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This 116 ); 117 118typedef 119EFI_STATUS 120(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) ( 121 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 122 IN UINTN Column, 123 IN UINTN Row 124 ); 125 126typedef 127EFI_STATUS 128(EFIAPI *EFI_TEXT_ENABLE_CURSOR) ( 129 IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 130 IN BOOLEAN Enable 131 ); 132 133typedef struct { 134 INT32 MaxMode; 135 // current settings 136 INT32 Mode; 137 INT32 Attribute; 138 INT32 CursorColumn; 139 INT32 CursorRow; 140 BOOLEAN CursorVisible; 141} SIMPLE_TEXT_OUTPUT_MODE; 142 143typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE { 144 EFI_TEXT_RESET Reset; 145 146 EFI_TEXT_OUTPUT_STRING OutputString; 147 EFI_TEXT_TEST_STRING TestString; 148 149 EFI_TEXT_QUERY_MODE QueryMode; 150 EFI_TEXT_SET_MODE SetMode; 151 EFI_TEXT_SET_ATTRIBUTE SetAttribute; 152 153 EFI_TEXT_CLEAR_SCREEN ClearScreen; 154 EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; 155 EFI_TEXT_ENABLE_CURSOR EnableCursor; 156 157 // Current mode 158 SIMPLE_TEXT_OUTPUT_MODE *Mode; 159} SIMPLE_TEXT_OUTPUT_INTERFACE; 160 161// 162// Define's for required EFI Unicode Box Draw character 163// 164 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 176 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 182 183#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555 184#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556 185#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557 186 187#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558 188#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559 189#define BOXDRAW_DOUBLE_UP_RIGHT 0x255a 190 191#define BOXDRAW_UP_LEFT_DOUBLE 0x255b 192#define BOXDRAW_UP_DOUBLE_LEFT 0x255c 193#define BOXDRAW_DOUBLE_UP_LEFT 0x255d 194 195#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e 196#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f 197#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560 198 199#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561 200#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562 201#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563 202 203#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564 204#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565 205#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566 206 207#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567 208#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568 209#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569 210 211#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a 212#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b 213#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c 214 215// 216// EFI Required Block Elements Code Chart 217// 218 219#define BLOCKELEMENT_FULL_BLOCK 0x2588 220#define BLOCKELEMENT_LIGHT_SHADE 0x2591 221// 222// EFI Required Geometric Shapes Code Chart 223// 224 225#define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2 226#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba 227#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc 228#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4 229 230// 231// EFI Required Arrow shapes 232// 233 234#define ARROW_UP 0x2191 235#define ARROW_DOWN 0x2193 236 237// 238// Text input protocol 239// 240 241#define SIMPLE_TEXT_INPUT_PROTOCOL \ 242 { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 243 244INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE); 245 246typedef struct { 247 UINT16 ScanCode; 248 CHAR16 UnicodeChar; 249} EFI_INPUT_KEY; 250 251// 252// Baseline unicode control chars 253// 254 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 260 261// 262// Scan codes for base line keys 263// 264 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 287 288// 289// EFI Scan code Ex 290// 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 315 316typedef 317EFI_STATUS 318(EFIAPI *EFI_INPUT_RESET) ( 319 IN struct _SIMPLE_INPUT_INTERFACE *This, 320 IN BOOLEAN ExtendedVerification 321 ); 322 323typedef 324EFI_STATUS 325(EFIAPI *EFI_INPUT_READ_KEY) ( 326 IN struct _SIMPLE_INPUT_INTERFACE *This, 327 OUT EFI_INPUT_KEY *Key 328 ); 329 330typedef struct _SIMPLE_INPUT_INTERFACE { 331 EFI_INPUT_RESET Reset; 332 EFI_INPUT_READ_KEY ReadKeyStroke; 333 EFI_EVENT WaitForKey; 334} SIMPLE_INPUT_INTERFACE; 335 336#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ 337 {0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, \ 338 0x17, 0xa6, 0x25, 0xaa} } 339 340INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL); 341 342typedef UINT8 EFI_KEY_TOGGLE_STATE; 343// 344// Any Shift or Toggle State that is valid should have 345// high order bit set. 346// 347typedef struct EFI_KEY_STATE { 348 UINT32 KeyShiftState; 349 EFI_KEY_TOGGLE_STATE KeyToggleState; 350} EFI_KEY_STATE; 351 352typedef struct { 353 EFI_INPUT_KEY Key; 354 EFI_KEY_STATE KeyState; 355} EFI_KEY_DATA; 356 357// 358// Shift state 359// 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 371 372// 373// Toggle state 374// 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 380 381// 382// EFI Key Notfication Function 383// 384typedef 385EFI_STATUS 386(EFIAPI *EFI_KEY_NOTIFY_FUNCTION) ( 387 IN EFI_KEY_DATA *KeyData 388 ); 389 390typedef 391EFI_STATUS 392(EFIAPI *EFI_INPUT_RESET_EX) ( 393 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 394 IN BOOLEAN ExtendedVerification 395 ) 396/*++ 397 398 Routine Description: 399 Reset the input device and optionaly run diagnostics 400 401 Arguments: 402 This - Protocol instance pointer. 403 ExtendedVerification - Driver may perform diagnostics on reset. 404 405 Returns: 406 EFI_SUCCESS - The device was reset. 407 EFI_DEVICE_ERROR - The device is not functioning properly and could 408 not be reset. 409 410--*/ 411; 412 413typedef 414EFI_STATUS 415(EFIAPI *EFI_INPUT_READ_KEY_EX) ( 416 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 417 OUT EFI_KEY_DATA *KeyData 418 ) 419/*++ 420 421 Routine Description: 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. 424 425 Arguments: 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. 429 430 Returns: 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 434 hardware errors. 435 EFI_INVALID_PARAMETER - KeyData is NULL. 436--*/ 437; 438 439typedef 440EFI_STATUS 441(EFIAPI *EFI_SET_STATE) ( 442 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 443 IN EFI_KEY_TOGGLE_STATE *KeyToggleState 444 ) 445/*++ 446 447 Routine Description: 448 Set certain state for the input device. 449 450 Arguments: 451 This - Protocol instance pointer. 452 KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the 453 state for the input device. 454 455 Returns: 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. 461 462--*/ 463; 464 465typedef 466EFI_STATUS 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 472 ) 473/*++ 474 475 Routine Description: 476 Register a notification function for a particular keystroke for the input device. 477 478 Arguments: 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. 485 486 Returns: 487 EFI_SUCCESS - The notification function was registered successfully. 488 EFI_OUT_OF_RESOURCES - Unable to allocate resources for necessary data structures. 489 EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL. 490 491--*/ 492; 493 494typedef 495EFI_STATUS 496(EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) ( 497 IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, 498 IN EFI_HANDLE NotificationHandle 499 ) 500/*++ 501 502 Routine Description: 503 Remove a registered notification function from a particular keystroke. 504 505 Arguments: 506 This - Protocol instance pointer. 507 NotificationHandle - The handle of the notification function being unregistered. 508 509 Returns: 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. 513 514--*/ 515; 516 517typedef 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; 525 526#endif 527