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