Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/efi/include/eficon.h
34875 views
1
#ifndef _EFI_CON_H
2
#define _EFI_CON_H
3
4
/*++
5
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
13
Intel Corporation.
14
15
Module Name:
16
17
eficon.h
18
19
Abstract:
20
21
EFI console protocols
22
23
24
25
Revision 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
36
INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
37
38
typedef
39
EFI_STATUS
40
(EFIAPI *EFI_TEXT_RESET) (
41
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
42
IN BOOLEAN ExtendedVerification
43
);
44
45
typedef
46
EFI_STATUS
47
(EFIAPI *EFI_TEXT_OUTPUT_STRING) (
48
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
49
IN CHAR16 *String
50
);
51
52
typedef
53
EFI_STATUS
54
(EFIAPI *EFI_TEXT_TEST_STRING) (
55
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
56
IN CHAR16 *String
57
);
58
59
typedef
60
EFI_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
68
typedef
69
EFI_STATUS
70
(EFIAPI *EFI_TEXT_SET_MODE) (
71
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
72
IN UINTN ModeNumber
73
);
74
75
typedef
76
EFI_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
112
typedef
113
EFI_STATUS
114
(EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
115
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This
116
);
117
118
typedef
119
EFI_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
126
typedef
127
EFI_STATUS
128
(EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
129
IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
130
IN BOOLEAN Enable
131
);
132
133
typedef 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
143
typedef 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
244
INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
245
246
typedef 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
316
typedef
317
EFI_STATUS
318
(EFIAPI *EFI_INPUT_RESET) (
319
IN struct _SIMPLE_INPUT_INTERFACE *This,
320
IN BOOLEAN ExtendedVerification
321
);
322
323
typedef
324
EFI_STATUS
325
(EFIAPI *EFI_INPUT_READ_KEY) (
326
IN struct _SIMPLE_INPUT_INTERFACE *This,
327
OUT EFI_INPUT_KEY *Key
328
);
329
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;
335
336
#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
337
{0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, \
338
0x17, 0xa6, 0x25, 0xaa} }
339
340
INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL);
341
342
typedef UINT8 EFI_KEY_TOGGLE_STATE;
343
//
344
// Any Shift or Toggle State that is valid should have
345
// high order bit set.
346
//
347
typedef struct EFI_KEY_STATE {
348
UINT32 KeyShiftState;
349
EFI_KEY_TOGGLE_STATE KeyToggleState;
350
} EFI_KEY_STATE;
351
352
typedef 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
//
384
typedef
385
EFI_STATUS
386
(EFIAPI *EFI_KEY_NOTIFY_FUNCTION) (
387
IN EFI_KEY_DATA *KeyData
388
);
389
390
typedef
391
EFI_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
413
typedef
414
EFI_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
439
typedef
440
EFI_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
465
typedef
466
EFI_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
494
typedef
495
EFI_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
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;
525
526
#endif
527
528