]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
1. Add new HII IFR opcode introduced in UEFI2.2 and UEFI2.3
[mirror_edk2.git] / MdePkg / Include / Uefi / UefiInternalFormRepresentation.h
1 /** @file
2 This file defines the encoding for the VFR (Visual Form Representation) language.
3 IFR is primarily consumed by the EFI presentation engine, and produced by EFI
4 internal application and drivers as well as all add-in card option-ROM drivers
5
6 Copyright (c) 2006 - 2009, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 @par Revision Reference:
16 These definitions are from UEFI2.1.
17
18 **/
19
20 #ifndef __UEFI_INTERNAL_FORMREPRESENTATION_H__
21 #define __UEFI_INTERNAL_FORMREPRESENTATION_H__
22
23 #include <Guid/HiiFormMapMethodGuid.h>
24
25 ///
26 /// The following types are currently defined:
27 ///
28 typedef VOID* EFI_HII_HANDLE;
29 typedef CHAR16* EFI_STRING;
30 typedef UINT16 EFI_IMAGE_ID;
31 typedef UINT16 EFI_QUESTION_ID;
32 typedef UINT16 EFI_STRING_ID;
33 typedef UINT16 EFI_FORM_ID;
34 typedef UINT16 EFI_VARSTORE_ID;
35
36 typedef UINT16 EFI_DEFAULT_ID;
37
38 typedef UINT32 EFI_HII_FONT_STYLE;
39
40
41
42 #pragma pack(1)
43
44 //
45 // Definitions for Package Lists and Package Headers
46 // Section 27.3.1
47 //
48
49 ///
50 /// The header found at the start of each package list.
51 ///
52 typedef struct {
53 EFI_GUID PackageListGuid;
54 UINT32 PackageLength;
55 } EFI_HII_PACKAGE_LIST_HEADER;
56
57 ///
58 /// The header found at the start of each package.
59 ///
60 typedef struct {
61 UINT32 Length:24;
62 UINT32 Type:8;
63 // UINT8 Data[...];
64 } EFI_HII_PACKAGE_HEADER;
65
66 //
67 // Value of HII package type
68 //
69 #define EFI_HII_PACKAGE_TYPE_ALL 0x00
70 #define EFI_HII_PACKAGE_TYPE_GUID 0x01
71 #define EFI_HII_PACKAGE_FORMS 0x02
72 #define EFI_HII_PACKAGE_STRINGS 0x04
73 #define EFI_HII_PACKAGE_FONTS 0x05
74 #define EFI_HII_PACKAGE_IMAGES 0x06
75 #define EFI_HII_PACKAGE_SIMPLE_FONTS 0x07
76 #define EFI_HII_PACKAGE_DEVICE_PATH 0x08
77 #define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x09
78 #define EFI_HII_PACKAGE_END 0xDF
79 #define EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN 0xE0
80 #define EFI_HII_PACKAGE_TYPE_SYSTEM_END 0xFF
81
82 //
83 // Definitions for Simplified Font Package
84 // Section 27.3.2
85 //
86
87 //
88 // Contents of EFI_NARROW_GLYPH.Attributes
89 //
90 #define EFI_GLYPH_NON_SPACING 0x01
91 #define EFI_GLYPH_WIDE 0x02
92 #define EFI_GLYPH_HEIGHT 19
93 #define EFI_GLYPH_WIDTH 8
94
95 typedef struct {
96 CHAR16 UnicodeWeight;
97 UINT8 Attributes;
98 UINT8 GlyphCol1[EFI_GLYPH_HEIGHT];
99 } EFI_NARROW_GLYPH;
100
101 typedef struct {
102 CHAR16 UnicodeWeight;
103 UINT8 Attributes;
104 UINT8 GlyphCol1[EFI_GLYPH_HEIGHT];
105 UINT8 GlyphCol2[EFI_GLYPH_HEIGHT];
106 UINT8 Pad[3];
107 } EFI_WIDE_GLYPH;
108
109 ///
110 /// A simplified font package consists of a font header
111 /// followed by a series of glyph structures.
112 ///
113 typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR {
114 EFI_HII_PACKAGE_HEADER Header;
115 UINT16 NumberOfNarrowGlyphs;
116 UINT16 NumberOfWideGlyphs;
117 // EFI_NARROW_GLYPH NarrowGlyphs[];
118 // EFI_WIDE_GLYPH WideGlyphs[];
119 } EFI_HII_SIMPLE_FONT_PACKAGE_HDR;
120
121 //
122 // Definitions for Font Package
123 // Section 27.3.3
124 //
125
126 //
127 // Value for font style
128 //
129 #define EFI_HII_FONT_STYLE_NORMAL 0x00000000
130 #define EFI_HII_FONT_STYLE_BOLD 0x00000001
131 #define EFI_HII_FONT_STYLE_ITALIC 0x00000002
132 #define EFI_HII_FONT_STYLE_EMBOSS 0x00010000
133 #define EFI_HII_FONT_STYLE_OUTLINE 0x00020000
134 #define EFI_HII_FONT_STYLE_SHADOW 0x00040000
135 #define EFI_HII_FONT_STYLE_UNDERLINE 0x00080000
136 #define EFI_HII_FONT_STYLE_DBL_UNDER 0x00100000
137
138 typedef struct _EFI_HII_GLYPH_INFO {
139 UINT16 Width;
140 UINT16 Height;
141 INT16 OffsetX;
142 INT16 OffsetY;
143 INT16 AdvanceX;
144 } EFI_HII_GLYPH_INFO;
145
146 ///
147 /// The fixed header consists of a standard record header and
148 /// then the character values in this section, the flags
149 /// (including the encoding method) and the offsets of the glyph
150 /// information, the glyph bitmaps and the character map.
151 ///
152 typedef struct _EFI_HII_FONT_PACKAGE_HDR {
153 EFI_HII_PACKAGE_HEADER Header;
154 UINT32 HdrSize;
155 UINT32 GlyphBlockOffset;
156 EFI_HII_GLYPH_INFO Cell;
157 EFI_HII_FONT_STYLE FontStyle;
158 CHAR16 FontFamily[1];
159 } EFI_HII_FONT_PACKAGE_HDR;
160
161 //
162 // Value of different glyph info block types
163 //
164 #define EFI_HII_GIBT_END 0x00
165 #define EFI_HII_GIBT_GLYPH 0x10
166 #define EFI_HII_GIBT_GLYPHS 0x11
167 #define EFI_HII_GIBT_GLYPH_DEFAULT 0x12
168 #define EFI_HII_GIBT_GLYPHS_DEFAULT 0x13
169 #define EFI_HII_GIBT_DUPLICATE 0x20
170 #define EFI_HII_GIBT_SKIP2 0x21
171 #define EFI_HII_GIBT_SKIP1 0x22
172 #define EFI_HII_GIBT_DEFAULTS 0x23
173 #define EFI_HII_GIBT_EXT1 0x30
174 #define EFI_HII_GIBT_EXT2 0x31
175 #define EFI_HII_GIBT_EXT4 0x32
176
177 typedef struct _EFI_HII_GLYPH_BLOCK {
178 UINT8 BlockType;
179 } EFI_HII_GLYPH_BLOCK;
180
181 //
182 // Definition of different glyph info block types
183 //
184
185 typedef struct _EFI_HII_GIBT_DEFAULTS_BLOCK {
186 EFI_HII_GLYPH_BLOCK Header;
187 EFI_HII_GLYPH_INFO Cell;
188 } EFI_HII_GIBT_DEFAULTS_BLOCK;
189
190 typedef struct _EFI_HII_GIBT_DUPLICATE_BLOCK {
191 EFI_HII_GLYPH_BLOCK Header;
192 CHAR16 CharValue;
193 } EFI_HII_GIBT_DUPLICATE_BLOCK;
194
195 typedef struct _EFI_GLYPH_GIBT_END_BLOCK {
196 EFI_HII_GLYPH_BLOCK Header;
197 } EFI_GLYPH_GIBT_END_BLOCK;
198
199 typedef struct _EFI_HII_GIBT_EXT1_BLOCK {
200 EFI_HII_GLYPH_BLOCK Header;
201 UINT8 BlockType2;
202 UINT8 Length;
203 } EFI_HII_GIBT_EXT1_BLOCK;
204
205 typedef struct _EFI_HII_GIBT_EXT2_BLOCK {
206 EFI_HII_GLYPH_BLOCK Header;
207 UINT8 BlockType2;
208 UINT16 Length;
209 } EFI_HII_GIBT_EXT2_BLOCK;
210
211 typedef struct _EFI_HII_GIBT_EXT4_BLOCK {
212 EFI_HII_GLYPH_BLOCK Header;
213 UINT8 BlockType2;
214 UINT32 Length;
215 } EFI_HII_GIBT_EXT4_BLOCK;
216
217 typedef struct _EFI_HII_GIBT_GLYPH_BLOCK {
218 EFI_HII_GLYPH_BLOCK Header;
219 EFI_HII_GLYPH_INFO Cell;
220 UINT8 BitmapData[1];
221 } EFI_HII_GIBT_GLYPH_BLOCK;
222
223 typedef struct _EFI_HII_GIBT_GLYPHS_BLOCK {
224 EFI_HII_GLYPH_BLOCK Header;
225 EFI_HII_GLYPH_INFO Cell;
226 UINT16 Count;
227 UINT8 BitmapData[1];
228 } EFI_HII_GIBT_GLYPHS_BLOCK;
229
230 typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK {
231 EFI_HII_GLYPH_BLOCK Header;
232 UINT8 BitmapData[1];
233 } EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK;
234
235 typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK {
236 EFI_HII_GLYPH_BLOCK Header;
237 UINT16 Count;
238 UINT8 BitmapData[1];
239 } EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK;
240
241 typedef struct _EFI_HII_GIBT_SKIP1_BLOCK {
242 EFI_HII_GLYPH_BLOCK Header;
243 UINT8 SkipCount;
244 } EFI_HII_GIBT_SKIP1_BLOCK;
245
246 typedef struct _EFI_HII_GIBT_SKIP2_BLOCK {
247 EFI_HII_GLYPH_BLOCK Header;
248 UINT16 SkipCount;
249 } EFI_HII_GIBT_SKIP2_BLOCK;
250
251 //
252 // Definitions for Device Path Package
253 // Section 27.3.4
254 //
255
256 ///
257 /// The device path package is used to carry a device path
258 /// associated with the package list.
259 ///
260 typedef struct _EFI_HII_DEVICE_PATH_PACKAGE {
261 EFI_HII_PACKAGE_HEADER Header;
262 // EFI_DEVICE_PATH_PROTOCOL DevicePath[];
263 } EFI_HII_DEVICE_PATH_PACKAGE;
264
265 //
266 // Definitions for GUID Package
267 // Section 27.3.5
268 //
269
270 ///
271 /// The GUID package is used to carry data where the format is defined by a GUID.
272 ///
273 typedef struct _EFI_HII_GUID_PACKAGE_HDR {
274 EFI_HII_PACKAGE_HEADER Header;
275 EFI_GUID Guid;
276 // Data per GUID definition may follow
277 } EFI_HII_GUID_PACKAGE_HDR;
278
279 //
280 // Definitions for String Package
281 // Section 27.3.6
282 //
283
284 #define UEFI_CONFIG_LANG L"x-UEFI"
285 #define UEFI_CONFIG_LANG2 L"x-i-UEFI"
286
287 ///
288 /// The fixed header consists of a standard record header and then the string identifiers
289 /// contained in this section and the offsets of the string and language information.
290 ///
291 typedef struct _EFI_HII_STRING_PACKAGE_HDR {
292 EFI_HII_PACKAGE_HEADER Header;
293 UINT32 HdrSize;
294 UINT32 StringInfoOffset;
295 CHAR16 LanguageWindow[16];
296 EFI_STRING_ID LanguageName;
297 CHAR8 Language[1];
298 } EFI_HII_STRING_PACKAGE_HDR;
299
300 typedef struct {
301 UINT8 BlockType;
302 } EFI_HII_STRING_BLOCK;
303
304 //
305 // Value of different string information block types
306 //
307 #define EFI_HII_SIBT_END 0x00
308 #define EFI_HII_SIBT_STRING_SCSU 0x10
309 #define EFI_HII_SIBT_STRING_SCSU_FONT 0x11
310 #define EFI_HII_SIBT_STRINGS_SCSU 0x12
311 #define EFI_HII_SIBT_STRINGS_SCSU_FONT 0x13
312 #define EFI_HII_SIBT_STRING_UCS2 0x14
313 #define EFI_HII_SIBT_STRING_UCS2_FONT 0x15
314 #define EFI_HII_SIBT_STRINGS_UCS2 0x16
315 #define EFI_HII_SIBT_STRINGS_UCS2_FONT 0x17
316 #define EFI_HII_SIBT_DUPLICATE 0x20
317 #define EFI_HII_SIBT_SKIP2 0x21
318 #define EFI_HII_SIBT_SKIP1 0x22
319 #define EFI_HII_SIBT_EXT1 0x30
320 #define EFI_HII_SIBT_EXT2 0x31
321 #define EFI_HII_SIBT_EXT4 0x32
322 #define EFI_HII_SIBT_FONT 0x40
323
324 //
325 // Definition of different string information block types
326 //
327
328 typedef struct _EFI_HII_SIBT_DUPLICATE_BLOCK {
329 EFI_HII_STRING_BLOCK Header;
330 EFI_STRING_ID StringId;
331 } EFI_HII_SIBT_DUPLICATE_BLOCK;
332
333 typedef struct _EFI_HII_SIBT_END_BLOCK {
334 EFI_HII_STRING_BLOCK Header;
335 } EFI_HII_SIBT_END_BLOCK;
336
337 typedef struct _EFI_HII_SIBT_EXT1_BLOCK {
338 EFI_HII_STRING_BLOCK Header;
339 UINT8 BlockType2;
340 UINT8 Length;
341 } EFI_HII_SIBT_EXT1_BLOCK;
342
343 typedef struct _EFI_HII_SIBT_EXT2_BLOCK {
344 EFI_HII_STRING_BLOCK Header;
345 UINT8 BlockType2;
346 UINT16 Length;
347 } EFI_HII_SIBT_EXT2_BLOCK;
348
349 typedef struct _EFI_HII_SIBT_EXT4_BLOCK {
350 EFI_HII_STRING_BLOCK Header;
351 UINT8 BlockType2;
352 UINT32 Length;
353 } EFI_HII_SIBT_EXT4_BLOCK;
354
355 typedef struct _EFI_HII_SIBT_FONT_BLOCK {
356 EFI_HII_SIBT_EXT2_BLOCK Header;
357 UINT8 FontId;
358 UINT16 FontSize;
359 EFI_HII_FONT_STYLE FontStyle;
360 CHAR16 FontName[1];
361 } EFI_HII_SIBT_FONT_BLOCK;
362
363 typedef struct _EFI_HII_SIBT_SKIP1_BLOCK {
364 EFI_HII_STRING_BLOCK Header;
365 UINT8 SkipCount;
366 } EFI_HII_SIBT_SKIP1_BLOCK;
367
368 typedef struct _EFI_HII_SIBT_SKIP2_BLOCK {
369 EFI_HII_STRING_BLOCK Header;
370 UINT16 SkipCount;
371 } EFI_HII_SIBT_SKIP2_BLOCK;
372
373 typedef struct _EFI_HII_SIBT_STRING_SCSU_BLOCK {
374 EFI_HII_STRING_BLOCK Header;
375 UINT8 StringText[1];
376 } EFI_HII_SIBT_STRING_SCSU_BLOCK;
377
378 typedef struct _EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK {
379 EFI_HII_STRING_BLOCK Header;
380 UINT8 FontIdentifier;
381 UINT8 StringText[1];
382 } EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK;
383
384 typedef struct _EFI_HII_SIBT_STRINGS_SCSU_BLOCK {
385 EFI_HII_STRING_BLOCK Header;
386 UINT16 StringCount;
387 UINT8 StringText[1];
388 } EFI_HII_SIBT_STRINGS_SCSU_BLOCK;
389
390 typedef struct _EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK {
391 EFI_HII_STRING_BLOCK Header;
392 UINT8 FontIdentifier;
393 UINT16 StringCount;
394 UINT8 StringText[1];
395 } EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK;
396
397 typedef struct _EFI_HII_SIBT_STRING_UCS2_BLOCK {
398 EFI_HII_STRING_BLOCK Header;
399 CHAR16 StringText[1];
400 } EFI_HII_SIBT_STRING_UCS2_BLOCK;
401
402 typedef struct _EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK {
403 EFI_HII_STRING_BLOCK Header;
404 UINT8 FontIdentifier;
405 CHAR16 StringText[1];
406 } EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK;
407
408 typedef struct _EFI_HII_SIBT_STRINGS_UCS2_BLOCK {
409 EFI_HII_STRING_BLOCK Header;
410 UINT16 StringCount;
411 CHAR16 StringText[1];
412 } EFI_HII_SIBT_STRINGS_UCS2_BLOCK;
413
414 typedef struct _EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK {
415 EFI_HII_STRING_BLOCK Header;
416 UINT8 FontIdentifier;
417 UINT16 StringCount;
418 CHAR16 StringText[1];
419 } EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK;
420
421 //
422 // Definitions for Image Package
423 // Section 27.3.7
424 //
425
426 typedef struct _EFI_HII_IMAGE_PACKAGE_HDR {
427 EFI_HII_PACKAGE_HEADER Header;
428 UINT32 ImageInfoOffset;
429 UINT32 PaletteInfoOffset;
430 } EFI_HII_IMAGE_PACKAGE_HDR;
431
432 typedef struct _EFI_HII_IMAGE_BLOCK {
433 UINT8 BlockType;
434 } EFI_HII_IMAGE_BLOCK;
435
436 //
437 // Value of different image information block types
438 //
439 #define EFI_HII_IIBT_END 0x00
440 #define EFI_HII_IIBT_IMAGE_1BIT 0x10
441 #define EFI_HII_IIBT_IMAGE_1BIT_TRANS 0x11
442 #define EFI_HII_IIBT_IMAGE_4BIT 0x12
443 #define EFI_HII_IIBT_IMAGE_4BIT_TRANS 0x13
444 #define EFI_HII_IIBT_IMAGE_8BIT 0x14
445 #define EFI_HII_IIBT_IMAGE_8BIT_TRANS 0x15
446 #define EFI_HII_IIBT_IMAGE_24BIT 0x16
447 #define EFI_HII_IIBT_IMAGE_24BIT_TRANS 0x17
448 #define EFI_HII_IIBT_IMAGE_JPEG 0x18
449 #define EFI_HII_IIBT_DUPLICATE 0x20
450 #define EFI_HII_IIBT_SKIP2 0x21
451 #define EFI_HII_IIBT_SKIP1 0x22
452 #define EFI_HII_IIBT_EXT1 0x30
453 #define EFI_HII_IIBT_EXT2 0x31
454 #define EFI_HII_IIBT_EXT4 0x32
455
456 //
457 // Definition of different image information block types
458 //
459
460 typedef struct _EFI_HII_IIBT_END_BLOCK {
461 EFI_HII_IMAGE_BLOCK Header;
462 } EFI_HII_IIBT_END_BLOCK;
463
464 typedef struct _EFI_HII_IIBT_EXT1_BLOCK {
465 EFI_HII_IMAGE_BLOCK Header;
466 UINT8 BlockType2;
467 UINT8 Length;
468 } EFI_HII_IIBT_EXT1_BLOCK;
469
470 typedef struct _EFI_HII_IIBT_EXT2_BLOCK {
471 EFI_HII_IMAGE_BLOCK Header;
472 UINT8 BlockType2;
473 UINT16 Length;
474 } EFI_HII_IIBT_EXT2_BLOCK;
475
476 typedef struct _EFI_HII_IIBT_EXT4_BLOCK {
477 EFI_HII_IMAGE_BLOCK Header;
478 UINT8 BlockType2;
479 UINT32 Length;
480 } EFI_HII_IIBT_EXT4_BLOCK;
481
482 typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BASE {
483 UINT16 Width;
484 UINT16 Height;
485 UINT8 Data[1];
486 } EFI_HII_IIBT_IMAGE_1BIT_BASE;
487
488 typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BLOCK {
489 EFI_HII_IMAGE_BLOCK Header;
490 UINT8 PaletteIndex;
491 EFI_HII_IIBT_IMAGE_1BIT_BASE Bitmap;
492 } EFI_HII_IIBT_IMAGE_1BIT_BLOCK;
493
494 typedef struct _EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK {
495 EFI_HII_IMAGE_BLOCK Header;
496 UINT8 PaletteIndex;
497 EFI_HII_IIBT_IMAGE_1BIT_BASE Bitmap;
498 } EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK;
499
500 typedef struct _EFI_HII_RGB_PIXEL {
501 UINT8 b;
502 UINT8 g;
503 UINT8 r;
504 } EFI_HII_RGB_PIXEL;
505
506 typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BASE {
507 UINT16 Width;
508 UINT16 Height;
509 EFI_HII_RGB_PIXEL Bitmap[1];
510 } EFI_HII_IIBT_IMAGE_24BIT_BASE;
511
512 typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BLOCK {
513 EFI_HII_IMAGE_BLOCK Header;
514 EFI_HII_IIBT_IMAGE_24BIT_BASE Bitmap;
515 } EFI_HII_IIBT_IMAGE_24BIT_BLOCK;
516
517 typedef struct _EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK {
518 EFI_HII_IMAGE_BLOCK Header;
519 EFI_HII_IIBT_IMAGE_24BIT_BASE Bitmap;
520 } EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK;
521
522 typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BASE {
523 UINT16 Width;
524 UINT16 Height;
525 UINT8 Data[1];
526 } EFI_HII_IIBT_IMAGE_4BIT_BASE;
527
528 typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BLOCK {
529 EFI_HII_IMAGE_BLOCK Header;
530 UINT8 PaletteIndex;
531 EFI_HII_IIBT_IMAGE_4BIT_BASE Bitmap;
532 } EFI_HII_IIBT_IMAGE_4BIT_BLOCK;
533
534 typedef struct _EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK {
535 EFI_HII_IMAGE_BLOCK Header;
536 UINT8 PaletteIndex;
537 EFI_HII_IIBT_IMAGE_4BIT_BASE Bitmap;
538 } EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK;
539
540 typedef struct _EFI_HII_IIBT_IMAGE_8BIT_BASE {
541 UINT16 Width;
542 UINT16 Height;
543 UINT8 Data[1];
544 } EFI_HII_IIBT_IMAGE_8BIT_BASE;
545
546 typedef struct _EFI_HII_IIBT_IMAGE_8BIT_PALETTE_BLOCK {
547 EFI_HII_IMAGE_BLOCK Header;
548 UINT8 PaletteIndex;
549 EFI_HII_IIBT_IMAGE_8BIT_BASE Bitmap;
550 } EFI_HII_IIBT_IMAGE_8BIT_BLOCK;
551
552 typedef struct _EFI_HII_IIBT_IMAGE_8BIT_TRANS_BLOCK {
553 EFI_HII_IMAGE_BLOCK Header;
554 UINT8 PaletteIndex;
555 EFI_HII_IIBT_IMAGE_8BIT_BASE Bitmap;
556 } EFI_HII_IIBT_IMAGE_8BIT_TRAN_BLOCK;
557
558 typedef struct _EFI_HII_IIBT_DUPLICATE_BLOCK {
559 EFI_HII_IMAGE_BLOCK Header;
560 EFI_IMAGE_ID ImageId;
561 } EFI_HII_IIBT_DUPLICATE_BLOCK;
562
563 typedef struct _EFI_HII_IIBT_JPEG_BLOCK {
564 EFI_HII_IMAGE_BLOCK Header;
565 UINT32 Size;
566 UINT8 Data[1];
567 } EFI_HII_IIBT_JPEG_BLOCK;
568
569 typedef struct _EFI_HII_IIBT_SKIP1_BLOCK {
570 EFI_HII_IMAGE_BLOCK Header;
571 UINT8 SkipCount;
572 } EFI_HII_IIBT_SKIP1_BLOCK;
573
574 typedef struct _EFI_HII_IIBT_SKIP2_BLOCK {
575 EFI_HII_IMAGE_BLOCK Header;
576 UINT16 SkipCount;
577 } EFI_HII_IIBT_SKIP2_BLOCK;
578
579 //
580 // Definitions for Palette Information
581 //
582
583 typedef struct _EFI_HII_IMAGE_PALETTE_INFO_HEADER {
584 UINT16 PaletteCount;
585 } EFI_HII_IMAGE_PALETTE_INFO_HEADER;
586
587 typedef struct _EFI_HII_IMAGE_PALETTE_INFO {
588 UINT16 PaletteSize;
589 EFI_HII_RGB_PIXEL PaletteValue[1];
590 } EFI_HII_IMAGE_PALETTE_INFO;
591
592 //
593 // Definitions for Forms Package
594 // Section 27.3.8
595 //
596
597 ///
598 /// The Forms package is used to carry forms-based encoding data.
599 ///
600 typedef struct _EFI_HII_FORM_PACKAGE {
601 EFI_HII_PACKAGE_HEADER Header;
602 // EFI_IFR_OP_HEADER OpCodeHeader;
603 // More op-codes follow
604 } EFI_HII_FORM_PACKAGE;
605
606 typedef struct {
607 UINT8 Hour;
608 UINT8 Minute;
609 UINT8 Second;
610 } EFI_HII_TIME;
611
612 typedef struct {
613 UINT16 Year;
614 UINT8 Month;
615 UINT8 Day;
616 } EFI_HII_DATE;
617
618 typedef union {
619 UINT8 u8;
620 UINT16 u16;
621 UINT32 u32;
622 UINT64 u64;
623 BOOLEAN b;
624 EFI_HII_TIME time;
625 EFI_HII_DATE date;
626 EFI_STRING_ID string; ///< EFI_IFR_TYPE_STRING, EFI_IFR_TYPE_ACTION
627 // UINT8 buffer[]; ///< EFI_IFR_TYPE_ORDERED_LIST
628 } EFI_IFR_TYPE_VALUE;
629
630 //
631 // IFR Opcodes
632 //
633 #define EFI_IFR_FORM_OP 0x01
634 #define EFI_IFR_SUBTITLE_OP 0x02
635 #define EFI_IFR_TEXT_OP 0x03
636 #define EFI_IFR_IMAGE_OP 0x04
637 #define EFI_IFR_ONE_OF_OP 0x05
638 #define EFI_IFR_CHECKBOX_OP 0x06
639 #define EFI_IFR_NUMERIC_OP 0x07
640 #define EFI_IFR_PASSWORD_OP 0x08
641 #define EFI_IFR_ONE_OF_OPTION_OP 0x09
642 #define EFI_IFR_SUPPRESS_IF_OP 0x0A
643 #define EFI_IFR_LOCKED_OP 0x0B
644 #define EFI_IFR_ACTION_OP 0x0C
645 #define EFI_IFR_RESET_BUTTON_OP 0x0D
646 #define EFI_IFR_FORM_SET_OP 0x0E
647 #define EFI_IFR_REF_OP 0x0F
648 #define EFI_IFR_NO_SUBMIT_IF_OP 0x10
649 #define EFI_IFR_INCONSISTENT_IF_OP 0x11
650 #define EFI_IFR_EQ_ID_VAL_OP 0x12
651 #define EFI_IFR_EQ_ID_ID_OP 0x13
652 #define EFI_IFR_EQ_ID_LIST_OP 0x14
653 #define EFI_IFR_AND_OP 0x15
654 #define EFI_IFR_OR_OP 0x16
655 #define EFI_IFR_NOT_OP 0x17
656 #define EFI_IFR_RULE_OP 0x18
657 #define EFI_IFR_GRAY_OUT_IF_OP 0x19
658 #define EFI_IFR_DATE_OP 0x1A
659 #define EFI_IFR_TIME_OP 0x1B
660 #define EFI_IFR_STRING_OP 0x1C
661 #define EFI_IFR_REFRESH_OP 0x1D
662 #define EFI_IFR_DISABLE_IF_OP 0x1E
663 #define EFI_IFR_TO_LOWER_OP 0x20
664 #define EFI_IFR_TO_UPPER_OP 0x21
665 #define EFI_IFR_MAP_OP 0x22
666 #define EFI_IFR_ORDERED_LIST_OP 0x23
667 #define EFI_IFR_VARSTORE_OP 0x24
668 #define EFI_IFR_VARSTORE_NAME_VALUE_OP 0x25
669 #define EFI_IFR_VARSTORE_EFI_OP 0x26
670 #define EFI_IFR_VARSTORE_DEVICE_OP 0x27
671 #define EFI_IFR_VERSION_OP 0x28
672 #define EFI_IFR_END_OP 0x29
673 #define EFI_IFR_MATCH_OP 0x2A
674 #define EFI_IFR_SET_OP 0x2C
675 #define EFI_IFR_GET_OP 0x2B
676 #define EFI_IFR_READ_OP 0x2D
677 #define EFI_IFR_WRITE_OP 0x2E
678 #define EFI_IFR_EQUAL_OP 0x2F
679 #define EFI_IFR_NOT_EQUAL_OP 0x30
680 #define EFI_IFR_GREATER_THAN_OP 0x31
681 #define EFI_IFR_GREATER_EQUAL_OP 0x32
682 #define EFI_IFR_LESS_THAN_OP 0x33
683 #define EFI_IFR_LESS_EQUAL_OP 0x34
684 #define EFI_IFR_BITWISE_AND_OP 0x35
685 #define EFI_IFR_BITWISE_OR_OP 0x36
686 #define EFI_IFR_BITWISE_NOT_OP 0x37
687 #define EFI_IFR_SHIFT_LEFT_OP 0x38
688 #define EFI_IFR_SHIFT_RIGHT_OP 0x39
689 #define EFI_IFR_ADD_OP 0x3A
690 #define EFI_IFR_SUBTRACT_OP 0x3B
691 #define EFI_IFR_MULTIPLY_OP 0x3C
692 #define EFI_IFR_DIVIDE_OP 0x3D
693 #define EFI_IFR_MODULO_OP 0x3E
694 #define EFI_IFR_RULE_REF_OP 0x3F
695 #define EFI_IFR_QUESTION_REF1_OP 0x40
696 #define EFI_IFR_QUESTION_REF2_OP 0x41
697 #define EFI_IFR_UINT8_OP 0x42
698 #define EFI_IFR_UINT16_OP 0x43
699 #define EFI_IFR_UINT32_OP 0x44
700 #define EFI_IFR_UINT64_OP 0x45
701 #define EFI_IFR_TRUE_OP 0x46
702 #define EFI_IFR_FALSE_OP 0x47
703 #define EFI_IFR_TO_UINT_OP 0x48
704 #define EFI_IFR_TO_STRING_OP 0x49
705 #define EFI_IFR_TO_BOOLEAN_OP 0x4A
706 #define EFI_IFR_MID_OP 0x4B
707 #define EFI_IFR_FIND_OP 0x4C
708 #define EFI_IFR_TOKEN_OP 0x4D
709 #define EFI_IFR_STRING_REF1_OP 0x4E
710 #define EFI_IFR_STRING_REF2_OP 0x4F
711 #define EFI_IFR_CONDITIONAL_OP 0x50
712 #define EFI_IFR_QUESTION_REF3_OP 0x51
713 #define EFI_IFR_ZERO_OP 0x52
714 #define EFI_IFR_ONE_OP 0x53
715 #define EFI_IFR_ONES_OP 0x54
716 #define EFI_IFR_UNDEFINED_OP 0x55
717 #define EFI_IFR_LENGTH_OP 0x56
718 #define EFI_IFR_DUP_OP 0x57
719 #define EFI_IFR_THIS_OP 0x58
720 #define EFI_IFR_SPAN_OP 0x59
721 #define EFI_IFR_VALUE_OP 0x5A
722 #define EFI_IFR_DEFAULT_OP 0x5B
723 #define EFI_IFR_DEFAULTSTORE_OP 0x5C
724 #define EFI_IFR_FORM_MAP_OP 0x5D
725 #define EFI_IFR_CATENATE_OP 0x5E
726 #define EFI_IFR_GUID_OP 0x5F
727 #define EFI_IFR_SECURITY_OP 0x60
728
729 //
730 // Definitions of IFR Standard Headers
731 // Section 27.3.8.2
732 //
733
734 typedef struct _EFI_IFR_OP_HEADER {
735 UINT8 OpCode;
736 UINT8 Length:7;
737 UINT8 Scope:1;
738 } EFI_IFR_OP_HEADER;
739
740 typedef struct _EFI_IFR_STATEMENT_HEADER {
741 EFI_STRING_ID Prompt;
742 EFI_STRING_ID Help;
743 } EFI_IFR_STATEMENT_HEADER;
744
745 typedef struct _EFI_IFR_QUESTION_HEADER {
746 EFI_IFR_STATEMENT_HEADER Header;
747 EFI_QUESTION_ID QuestionId;
748 EFI_VARSTORE_ID VarStoreId;
749 union {
750 EFI_STRING_ID VarName;
751 UINT16 VarOffset;
752 } VarStoreInfo;
753 UINT8 Flags;
754 } EFI_IFR_QUESTION_HEADER;
755
756 //
757 // Flag values of EFI_IFR_QUESTION_HEADER
758 //
759 #define EFI_IFR_FLAG_READ_ONLY 0x01
760 #define EFI_IFR_FLAG_CALLBACK 0x04
761 #define EFI_IFR_FLAG_RESET_REQUIRED 0x10
762 #define EFI_IFR_FLAG_OPTIONS_ONLY 0x80
763
764 //
765 // Definition for Opcode Reference
766 // Section 27.3.8.3
767 //
768 typedef struct _EFI_IFR_DEFAULTSTORE {
769 EFI_IFR_OP_HEADER Header;
770 EFI_STRING_ID DefaultName;
771 UINT16 DefaultId;
772 } EFI_IFR_DEFAULTSTORE;
773
774 //
775 // Default Identifier of default store
776 //
777 #define EFI_HII_DEFAULT_CLASS_STANDARD 0x0000
778 #define EFI_HII_DEFAULT_CLASS_MANUFACTURING 0x0001
779 #define EFI_HII_DEFAULT_CLASS_SAFE 0x0002
780 #define EFI_HII_DEFAULT_CLASS_PLATFORM_BEGIN 0x4000
781 #define EFI_HII_DEFAULT_CLASS_PLATFORM_END 0x7fff
782 #define EFI_HII_DEFAULT_CLASS_HARDWARE_BEGIN 0x8000
783 #define EFI_HII_DEFAULT_CLASS_HARDWARE_END 0xbfff
784 #define EFI_HII_DEFAULT_CLASS_FIRMWARE_BEGIN 0xc000
785 #define EFI_HII_DEFAULT_CLASS_FIRMWARE_END 0xffff
786
787 typedef struct _EFI_IFR_VARSTORE {
788 EFI_IFR_OP_HEADER Header;
789 EFI_GUID Guid;
790 EFI_VARSTORE_ID VarStoreId;
791 UINT16 Size;
792 UINT8 Name[1];
793 } EFI_IFR_VARSTORE;
794
795 typedef struct _EFI_IFR_VARSTORE_EFI {
796 EFI_IFR_OP_HEADER Header;
797 EFI_VARSTORE_ID VarStoreId;
798 EFI_GUID Guid;
799 UINT32 Attributes;
800 } EFI_IFR_VARSTORE_EFI;
801
802 typedef struct _EFI_IFR_VARSTORE_NAME_VALUE {
803 EFI_IFR_OP_HEADER Header;
804 EFI_VARSTORE_ID VarStoreId;
805 EFI_GUID Guid;
806 } EFI_IFR_VARSTORE_NAME_VALUE;
807
808 typedef struct _EFI_IFR_FORM_SET {
809 EFI_IFR_OP_HEADER Header;
810 EFI_GUID Guid;
811 EFI_STRING_ID FormSetTitle;
812 EFI_STRING_ID Help;
813 UINT8 Flags;
814 // EFI_GUID ClassGuid[];
815 } EFI_IFR_FORM_SET;
816
817 typedef struct _EFI_IFR_END {
818 EFI_IFR_OP_HEADER Header;
819 } EFI_IFR_END;
820
821 typedef struct _EFI_IFR_FORM {
822 EFI_IFR_OP_HEADER Header;
823 UINT16 FormId;
824 EFI_STRING_ID FormTitle;
825 } EFI_IFR_FORM;
826
827 typedef struct _EFI_IFR_IMAGE {
828 EFI_IFR_OP_HEADER Header;
829 EFI_IMAGE_ID Id;
830 } EFI_IFR_IMAGE;
831
832 typedef struct _EFI_IFR_LOCKED {
833 EFI_IFR_OP_HEADER Header;
834 } EFI_IFR_LOCKED;
835
836 typedef struct _EFI_IFR_RULE {
837 EFI_IFR_OP_HEADER Header;
838 UINT8 RuleId;
839 } EFI_IFR_RULE;
840
841 typedef struct _EFI_IFR_DEFAULT {
842 EFI_IFR_OP_HEADER Header;
843 UINT16 DefaultId;
844 UINT8 Type;
845 EFI_IFR_TYPE_VALUE Value;
846 } EFI_IFR_DEFAULT;
847
848 typedef struct _EFI_IFR_VALUE {
849 EFI_IFR_OP_HEADER Header;
850 } EFI_IFR_VALUE;
851
852 typedef struct _EFI_IFR_SUBTITLE {
853 EFI_IFR_OP_HEADER Header;
854 EFI_IFR_STATEMENT_HEADER Statement;
855 UINT8 Flags;
856 } EFI_IFR_SUBTITLE;
857
858 #define EFI_IFR_FLAGS_HORIZONTAL 0x01
859
860 typedef struct _EFI_IFR_CHECKBOX {
861 EFI_IFR_OP_HEADER Header;
862 EFI_IFR_QUESTION_HEADER Question;
863 UINT8 Flags;
864 } EFI_IFR_CHECKBOX;
865
866 #define EFI_IFR_CHECKBOX_DEFAULT 0x01
867 #define EFI_IFR_CHECKBOX_DEFAULT_MFG 0x02
868
869 typedef struct _EFI_IFR_TEXT {
870 EFI_IFR_OP_HEADER Header;
871 EFI_IFR_STATEMENT_HEADER Statement;
872 EFI_STRING_ID TextTwo;
873 } EFI_IFR_TEXT;
874
875 typedef struct _EFI_IFR_REF {
876 EFI_IFR_OP_HEADER Header;
877 EFI_IFR_QUESTION_HEADER Question;
878 EFI_FORM_ID FormId;
879 } EFI_IFR_REF;
880
881 typedef struct _EFI_IFR_REF2 {
882 EFI_IFR_OP_HEADER Header;
883 EFI_IFR_QUESTION_HEADER Question;
884 EFI_FORM_ID FormId;
885 EFI_QUESTION_ID QuestionId;
886 } EFI_IFR_REF2;
887
888 typedef struct _EFI_IFR_REF3 {
889 EFI_IFR_OP_HEADER Header;
890 EFI_IFR_QUESTION_HEADER Question;
891 EFI_FORM_ID FormId;
892 EFI_QUESTION_ID QuestionId;
893 EFI_GUID FormSetId;
894 } EFI_IFR_REF3;
895
896 typedef struct _EFI_IFR_REF4 {
897 EFI_IFR_OP_HEADER Header;
898 EFI_IFR_QUESTION_HEADER Question;
899 EFI_FORM_ID FormId;
900 EFI_QUESTION_ID QuestionId;
901 EFI_GUID FormSetId;
902 EFI_STRING_ID DevicePath;
903 } EFI_IFR_REF4;
904
905 typedef struct _EFI_IFR_RESET_BUTTON {
906 EFI_IFR_OP_HEADER Header;
907 EFI_IFR_STATEMENT_HEADER Statement;
908 EFI_DEFAULT_ID DefaultId;
909 } EFI_IFR_RESET_BUTTON;
910
911 typedef struct _EFI_IFR_ACTION {
912 EFI_IFR_OP_HEADER Header;
913 EFI_IFR_QUESTION_HEADER Question;
914 EFI_STRING_ID QuestionConfig;
915 } EFI_IFR_ACTION;
916
917 typedef struct _EFI_IFR_ACTION_1 {
918 EFI_IFR_OP_HEADER Header;
919 EFI_IFR_QUESTION_HEADER Question;
920 } EFI_IFR_ACTION_1;
921
922 typedef struct _EFI_IFR_DATE {
923 EFI_IFR_OP_HEADER Header;
924 EFI_IFR_QUESTION_HEADER Question;
925 UINT8 Flags;
926 } EFI_IFR_DATE;
927
928 //
929 // Flags that describe the behavior of the question.
930 //
931 #define EFI_QF_DATE_YEAR_SUPPRESS 0x01
932 #define EFI_QF_DATE_MONTH_SUPPRESS 0x02
933 #define EFI_QF_DATE_DAY_SUPPRESS 0x04
934
935 #define EFI_QF_DATE_STORAGE 0x30
936 #define QF_DATE_STORAGE_NORMAL 0x00
937 #define QF_DATE_STORAGE_TIME 0x10
938 #define QF_DATE_STORAGE_WAKEUP 0x20
939
940 typedef union {
941 struct {
942 UINT8 MinValue;
943 UINT8 MaxValue;
944 UINT8 Step;
945 } u8;
946 struct {
947 UINT16 MinValue;
948 UINT16 MaxValue;
949 UINT16 Step;
950 } u16;
951 struct {
952 UINT32 MinValue;
953 UINT32 MaxValue;
954 UINT32 Step;
955 } u32;
956 struct {
957 UINT64 MinValue;
958 UINT64 MaxValue;
959 UINT64 Step;
960 } u64;
961 } MINMAXSTEP_DATA;
962
963 typedef struct _EFI_IFR_NUMERIC {
964 EFI_IFR_OP_HEADER Header;
965 EFI_IFR_QUESTION_HEADER Question;
966 UINT8 Flags;
967 MINMAXSTEP_DATA data;
968 } EFI_IFR_NUMERIC;
969
970 //
971 // Flags related to the numeric question
972 //
973 #define EFI_IFR_NUMERIC_SIZE 0x03
974 #define EFI_IFR_NUMERIC_SIZE_1 0x00
975 #define EFI_IFR_NUMERIC_SIZE_2 0x01
976 #define EFI_IFR_NUMERIC_SIZE_4 0x02
977 #define EFI_IFR_NUMERIC_SIZE_8 0x03
978
979 #define EFI_IFR_DISPLAY 0x30
980 #define EFI_IFR_DISPLAY_INT_DEC 0x00
981 #define EFI_IFR_DISPLAY_UINT_DEC 0x10
982 #define EFI_IFR_DISPLAY_UINT_HEX 0x20
983
984 typedef struct _EFI_IFR_ONE_OF {
985 EFI_IFR_OP_HEADER Header;
986 EFI_IFR_QUESTION_HEADER Question;
987 UINT8 Flags;
988 MINMAXSTEP_DATA data;
989 } EFI_IFR_ONE_OF;
990
991 typedef struct _EFI_IFR_STRING {
992 EFI_IFR_OP_HEADER Header;
993 EFI_IFR_QUESTION_HEADER Question;
994 UINT8 MinSize;
995 UINT8 MaxSize;
996 UINT8 Flags;
997 } EFI_IFR_STRING;
998
999 #define EFI_IFR_STRING_MULTI_LINE 0x01
1000
1001 typedef struct _EFI_IFR_PASSWORD {
1002 EFI_IFR_OP_HEADER Header;
1003 EFI_IFR_QUESTION_HEADER Question;
1004 UINT16 MinSize;
1005 UINT16 MaxSize;
1006 } EFI_IFR_PASSWORD;
1007
1008 typedef struct _EFI_IFR_ORDERED_LIST {
1009 EFI_IFR_OP_HEADER Header;
1010 EFI_IFR_QUESTION_HEADER Question;
1011 UINT8 MaxContainers;
1012 UINT8 Flags;
1013 } EFI_IFR_ORDERED_LIST;
1014
1015 #define EFI_IFR_UNIQUE_SET 0x01
1016 #define EFI_IFR_NO_EMPTY_SET 0x02
1017
1018 typedef struct _EFI_IFR_TIME {
1019 EFI_IFR_OP_HEADER Header;
1020 EFI_IFR_QUESTION_HEADER Question;
1021 UINT8 Flags;
1022 } EFI_IFR_TIME;
1023
1024 //
1025 // A bit-mask that determines which unique settings are active for this opcode.
1026 //
1027 #define QF_TIME_HOUR_SUPPRESS 0x01
1028 #define QF_TIME_MINUTE_SUPPRESS 0x02
1029 #define QF_TIME_SECOND_SUPPRESS 0x04
1030
1031 #define QF_TIME_STORAGE 0x30
1032 #define QF_TIME_STORAGE_NORMAL 0x00
1033 #define QF_TIME_STORAGE_TIME 0x10
1034 #define QF_TIME_STORAGE_WAKEUP 0x20
1035
1036 typedef struct _EFI_IFR_DISABLE_IF {
1037 EFI_IFR_OP_HEADER Header;
1038 } EFI_IFR_DISABLE_IF;
1039
1040 typedef struct _EFI_IFR_SUPPRESS_IF {
1041 EFI_IFR_OP_HEADER Header;
1042 } EFI_IFR_SUPPRESS_IF;
1043
1044 typedef struct _EFI_IFR_GRAY_OUT_IF {
1045 EFI_IFR_OP_HEADER Header;
1046 } EFI_IFR_GRAY_OUT_IF;
1047
1048 typedef struct _EFI_IFR_INCONSISTENT_IF {
1049 EFI_IFR_OP_HEADER Header;
1050 EFI_STRING_ID Error;
1051 } EFI_IFR_INCONSISTENT_IF;
1052
1053 typedef struct _EFI_IFR_NO_SUBMIT_IF {
1054 EFI_IFR_OP_HEADER Header;
1055 EFI_STRING_ID Error;
1056 } EFI_IFR_NO_SUBMIT_IF;
1057
1058 typedef struct _EFI_IFR_REFRESH {
1059 EFI_IFR_OP_HEADER Header;
1060 UINT8 RefreshInterval;
1061 } EFI_IFR_REFRESH;
1062
1063 typedef struct _EFI_IFR_VARSTORE_DEVICE {
1064 EFI_IFR_OP_HEADER Header;
1065 EFI_STRING_ID DevicePath;
1066 } EFI_IFR_VARSTORE_DEVICE;
1067
1068 typedef struct _EFI_IFR_ONE_OF_OPTION {
1069 EFI_IFR_OP_HEADER Header;
1070 EFI_STRING_ID Option;
1071 UINT8 Flags;
1072 UINT8 Type;
1073 EFI_IFR_TYPE_VALUE Value;
1074 } EFI_IFR_ONE_OF_OPTION;
1075
1076 //
1077 // Types of the option's value.
1078 //
1079 #define EFI_IFR_TYPE_NUM_SIZE_8 0x00
1080 #define EFI_IFR_TYPE_NUM_SIZE_16 0x01
1081 #define EFI_IFR_TYPE_NUM_SIZE_32 0x02
1082 #define EFI_IFR_TYPE_NUM_SIZE_64 0x03
1083 #define EFI_IFR_TYPE_BOOLEAN 0x04
1084 #define EFI_IFR_TYPE_TIME 0x05
1085 #define EFI_IFR_TYPE_DATE 0x06
1086 #define EFI_IFR_TYPE_STRING 0x07
1087 #define EFI_IFR_TYPE_OTHER 0x08
1088 #define EFI_IFR_TYPE_UNDEFINED 0x09
1089 #define EFI_IFR_TYPE_ACTION 0x0A
1090 #define EFI_IFR_TYPE_BUFFER 0x0B
1091
1092 #define EFI_IFR_OPTION_DEFAULT 0x10
1093 #define EFI_IFR_OPTION_DEFAULT_MFG 0x20
1094
1095 typedef struct _EFI_IFR_GUID {
1096 EFI_IFR_OP_HEADER Header;
1097 EFI_GUID Guid;
1098 //Optional Data Follows
1099 } EFI_IFR_GUID;
1100
1101 typedef struct _EFI_IFR_DUP {
1102 EFI_IFR_OP_HEADER Header;
1103 } EFI_IFR_DUP;
1104
1105 typedef struct _EFI_IFR_EQ_ID_ID {
1106 EFI_IFR_OP_HEADER Header;
1107 EFI_QUESTION_ID QuestionId1;
1108 EFI_QUESTION_ID QuestionId2;
1109 } EFI_IFR_EQ_ID_ID;
1110
1111 typedef struct _EFI_IFR_EQ_ID_VAL {
1112 EFI_IFR_OP_HEADER Header;
1113 EFI_QUESTION_ID QuestionId;
1114 UINT16 Value;
1115 } EFI_IFR_EQ_ID_VAL;
1116
1117 typedef struct _EFI_IFR_EQ_ID_LIST {
1118 EFI_IFR_OP_HEADER Header;
1119 EFI_QUESTION_ID QuestionId;
1120 UINT16 ListLength;
1121 UINT16 ValueList[1];
1122 } EFI_IFR_EQ_ID_LIST;
1123
1124 typedef struct _EFI_IFR_UINT8 {
1125 EFI_IFR_OP_HEADER Header;
1126 UINT8 Value;
1127 } EFI_IFR_UINT8;
1128
1129 typedef struct _EFI_IFR_UINT16 {
1130 EFI_IFR_OP_HEADER Header;
1131 UINT16 Value;
1132 } EFI_IFR_UINT16;
1133
1134 typedef struct _EFI_IFR_UINT32 {
1135 EFI_IFR_OP_HEADER Header;
1136 UINT32 Value;
1137 } EFI_IFR_UINT32;
1138
1139 typedef struct _EFI_IFR_UINT64 {
1140 EFI_IFR_OP_HEADER Header;
1141 UINT64 Value;
1142 } EFI_IFR_UINT64;
1143
1144 typedef struct _EFI_IFR_QUESTION_REF1 {
1145 EFI_IFR_OP_HEADER Header;
1146 EFI_QUESTION_ID QuestionId;
1147 } EFI_IFR_QUESTION_REF1;
1148
1149 typedef struct _EFI_IFR_QUESTION_REF2 {
1150 EFI_IFR_OP_HEADER Header;
1151 } EFI_IFR_QUESTION_REF2;
1152
1153 typedef struct _EFI_IFR_QUESTION_REF3 {
1154 EFI_IFR_OP_HEADER Header;
1155 } EFI_IFR_QUESTION_REF3;
1156
1157 typedef struct _EFI_IFR_QUESTION_REF3_2 {
1158 EFI_IFR_OP_HEADER Header;
1159 EFI_STRING_ID DevicePath;
1160 } EFI_IFR_QUESTION_REF3_2;
1161
1162 typedef struct _EFI_IFR_QUESTION_REF3_3 {
1163 EFI_IFR_OP_HEADER Header;
1164 EFI_STRING_ID DevicePath;
1165 EFI_GUID Guid;
1166 } EFI_IFR_QUESTION_REF3_3;
1167
1168 typedef struct _EFI_IFR_RULE_REF {
1169 EFI_IFR_OP_HEADER Header;
1170 UINT8 RuleId;
1171 } EFI_IFR_RULE_REF;
1172
1173 typedef struct _EFI_IFR_STRING_REF1 {
1174 EFI_IFR_OP_HEADER Header;
1175 EFI_STRING_ID StringId;
1176 } EFI_IFR_STRING_REF1;
1177
1178 typedef struct _EFI_IFR_STRING_REF2 {
1179 EFI_IFR_OP_HEADER Header;
1180 } EFI_IFR_STRING_REF2;
1181
1182 typedef struct _EFI_IFR_THIS {
1183 EFI_IFR_OP_HEADER Header;
1184 } EFI_IFR_THIS;
1185
1186 typedef struct _EFI_IFR_TRUE {
1187 EFI_IFR_OP_HEADER Header;
1188 } EFI_IFR_TRUE;
1189
1190 typedef struct _EFI_IFR_FALSE {
1191 EFI_IFR_OP_HEADER Header;
1192 } EFI_IFR_FALSE;
1193
1194 typedef struct _EFI_IFR_ONE {
1195 EFI_IFR_OP_HEADER Header;
1196 } EFI_IFR_ONE;
1197
1198 typedef struct _EFI_IFR_ONES {
1199 EFI_IFR_OP_HEADER Header;
1200 } EFI_IFR_ONES;
1201
1202 typedef struct _EFI_IFR_ZERO {
1203 EFI_IFR_OP_HEADER Header;
1204 } EFI_IFR_ZERO;
1205
1206 typedef struct _EFI_IFR_UNDEFINED {
1207 EFI_IFR_OP_HEADER Header;
1208 } EFI_IFR_UNDEFINED;
1209
1210 typedef struct _EFI_IFR_VERSION {
1211 EFI_IFR_OP_HEADER Header;
1212 } EFI_IFR_VERSION;
1213
1214 typedef struct _EFI_IFR_LENGTH {
1215 EFI_IFR_OP_HEADER Header;
1216 } EFI_IFR_LENGTH;
1217
1218 typedef struct _EFI_IFR_NOT {
1219 EFI_IFR_OP_HEADER Header;
1220 } EFI_IFR_NOT;
1221
1222 typedef struct _EFI_IFR_BITWISE_NOT {
1223 EFI_IFR_OP_HEADER Header;
1224 } EFI_IFR_BITWISE_NOT;
1225
1226 typedef struct _EFI_IFR_TO_BOOLEAN {
1227 EFI_IFR_OP_HEADER Header;
1228 } EFI_IFR_TO_BOOLEAN;
1229
1230 //
1231 // For EFI_IFR_TO_STRING, when converting from
1232 // unsigned integers, these flags control the format:
1233 // 0 = unsigned decimal
1234 // 1 = signed decimal
1235 // 2 = hexadecimal (lower-case alpha)
1236 // 3 = hexadecimal (upper-case alpha)
1237 //
1238 #define EFI_IFR_STRING_UNSIGNED_DEC 0
1239 #define EFI_IFR_STRING_SIGNED_DEC 1
1240 #define EFI_IFR_STRING_LOWERCASE_HEX 2
1241 #define EFI_IFR_STRING_UPPERCASE_HEX 3
1242 //
1243 // When converting from a buffer, these flags control the format:
1244 // 0 = ASCII
1245 // 8 = Unicode
1246 //
1247 #define EFI_IFR_STRING_ASCII 0
1248 #define EFI_IFR_STRING_UNICODE 8
1249
1250 typedef struct _EFI_IFR_TO_STRING {
1251 EFI_IFR_OP_HEADER Header;
1252 UINT8 Format;
1253 } EFI_IFR_TO_STRING;
1254
1255 typedef struct _EFI_IFR_TO_UINT {
1256 EFI_IFR_OP_HEADER Header;
1257 } EFI_IFR_TO_UINT;
1258
1259 typedef struct _EFI_IFR_TO_UPPER {
1260 EFI_IFR_OP_HEADER Header;
1261 } EFI_IFR_TO_UPPER;
1262
1263 typedef struct _EFI_IFR_TO_LOWER {
1264 EFI_IFR_OP_HEADER Header;
1265 } EFI_IFR_TO_LOWER;
1266
1267 typedef struct _EFI_IFR_ADD {
1268 EFI_IFR_OP_HEADER Header;
1269 } EFI_IFR_ADD;
1270
1271 typedef struct _EFI_IFR_AND {
1272 EFI_IFR_OP_HEADER Header;
1273 } EFI_IFR_AND;
1274
1275 typedef struct _EFI_IFR_BITWISE_AND {
1276 EFI_IFR_OP_HEADER Header;
1277 } EFI_IFR_BITWISE_AND;
1278
1279 typedef struct _EFI_IFR_BITWISE_OR {
1280 EFI_IFR_OP_HEADER Header;
1281 } EFI_IFR_BITWISE_OR;
1282
1283 typedef struct _EFI_IFR_CATENATE {
1284 EFI_IFR_OP_HEADER Header;
1285 } EFI_IFR_CATENATE;
1286
1287 typedef struct _EFI_IFR_DIVIDE {
1288 EFI_IFR_OP_HEADER Header;
1289 } EFI_IFR_DIVIDE;
1290
1291 typedef struct _EFI_IFR_EQUAL {
1292 EFI_IFR_OP_HEADER Header;
1293 } EFI_IFR_EQUAL;
1294
1295 typedef struct _EFI_IFR_GREATER_EQUAL {
1296 EFI_IFR_OP_HEADER Header;
1297 } EFI_IFR_GREATER_EQUAL;
1298
1299 typedef struct _EFI_IFR_GREATER_THAN {
1300 EFI_IFR_OP_HEADER Header;
1301 } EFI_IFR_GREATER_THAN;
1302
1303 typedef struct _EFI_IFR_LESS_EQUAL {
1304 EFI_IFR_OP_HEADER Header;
1305 } EFI_IFR_LESS_EQUAL;
1306
1307 typedef struct _EFI_IFR_LESS_THAN {
1308 EFI_IFR_OP_HEADER Header;
1309 } EFI_IFR_LESS_THAN;
1310
1311 typedef struct _EFI_IFR_MATCH {
1312 EFI_IFR_OP_HEADER Header;
1313 } EFI_IFR_MATCH;
1314
1315 typedef struct _EFI_IFR_MULTIPLY {
1316 EFI_IFR_OP_HEADER Header;
1317 } EFI_IFR_MULTIPLY;
1318
1319 typedef struct _EFI_IFR_MODULO {
1320 EFI_IFR_OP_HEADER Header;
1321 } EFI_IFR_MODULO;
1322
1323 typedef struct _EFI_IFR_NOT_EQUAL {
1324 EFI_IFR_OP_HEADER Header;
1325 } EFI_IFR_NOT_EQUAL;
1326
1327 typedef struct _EFI_IFR_OR {
1328 EFI_IFR_OP_HEADER Header;
1329 } EFI_IFR_OR;
1330
1331 typedef struct _EFI_IFR_SHIFT_LEFT {
1332 EFI_IFR_OP_HEADER Header;
1333 } EFI_IFR_SHIFT_LEFT;
1334
1335 typedef struct _EFI_IFR_SHIFT_RIGHT {
1336 EFI_IFR_OP_HEADER Header;
1337 } EFI_IFR_SHIFT_RIGHT;
1338
1339 typedef struct _EFI_IFR_SUBTRACT {
1340 EFI_IFR_OP_HEADER Header;
1341 } EFI_IFR_SUBTRACT;
1342
1343 typedef struct _EFI_IFR_CONDITIONAL {
1344 EFI_IFR_OP_HEADER Header;
1345 } EFI_IFR_CONDITIONAL;
1346
1347 //
1348 // Flags governing the matching criteria of EFI_IFR_FIND
1349 //
1350 #define EFI_IFR_FF_CASE_SENSITIVE 0x00
1351 #define EFI_IFR_FF_CASE_INSENSITIVE 0x01
1352
1353 typedef struct _EFI_IFR_FIND {
1354 EFI_IFR_OP_HEADER Header;
1355 UINT8 Format;
1356 } EFI_IFR_FIND;
1357
1358 typedef struct _EFI_IFR_MID {
1359 EFI_IFR_OP_HEADER Header;
1360 } EFI_IFR_MID;
1361
1362 typedef struct _EFI_IFR_TOKEN {
1363 EFI_IFR_OP_HEADER Header;
1364 } EFI_IFR_TOKEN;
1365
1366 //
1367 // Flags specifying whether to find the first matching string
1368 // or the first non-matching string.
1369 //
1370 #define EFI_IFR_FLAGS_FIRST_MATCHING 0x00
1371 #define EFI_IFR_FLAGS_FIRST_NON_MATCHING 0x01
1372
1373 typedef struct _EFI_IFR_SPAN {
1374 EFI_IFR_OP_HEADER Header;
1375 UINT8 Flags;
1376 } EFI_IFR_SPAN;
1377
1378 typedef struct _EFI_IFR_SECURITY {
1379 ///
1380 /// Standard opcode header, where Header.Op = EFI_IFR_SECURITY_OP.
1381 ///
1382 EFI_IFR_OP_HEADER Header;
1383 ///
1384 /// Security permission level.
1385 ///
1386 EFI_GUID Permissions;
1387 } EFI_IFR_SECURITY;
1388
1389 typedef struct _EFI_IFR_FORM_MAP_METHOD {
1390 ///
1391 /// The string identifier which provides the human-readable name of
1392 /// the configuration method for this standards map form.
1393 ///
1394 EFI_STRING_ID MethodTitle;
1395 ///
1396 /// Identifier which uniquely specifies the configuration methods
1397 /// associated with this standards map form.
1398 ///
1399 EFI_GUID MethodIdentifier;
1400 } EFI_IFR_FORM_MAP_METHOD;
1401
1402 typedef struct _EFI_IFR_FORM_MAP {
1403 ///
1404 /// The sequence that defines the type of opcode as well as the length
1405 /// of the opcode being defined. Header.OpCode = EFI_IFR_FORM_MAP_OP.
1406 ///
1407 EFI_IFR_OP_HEADER Header;
1408 ///
1409 /// The unique identifier for this particular form.
1410 ///
1411 EFI_FORM_ID FormId;
1412 ///
1413 /// One or more configuration method's name and unique identifier.
1414 ///
1415 EFI_IFR_FORM_MAP_METHOD Methods[1];
1416 } EFI_IFR_FORM_MAP;
1417
1418 typedef struct _EFI_IFR_SET {
1419 ///
1420 /// The sequence that defines the type of opcode as well as the length
1421 /// of the opcode being defined. Header.OpCode = EFI_IFR_SET_OP.
1422 ///
1423 EFI_IFR_OP_HEADER Header;
1424 ///
1425 /// Specifies the identifier of a previously declared variable store to
1426 /// use when storing the question's value.
1427 ///
1428 EFI_VARSTORE_ID VarStoreId;
1429 union {
1430 ///
1431 /// A 16-bit Buffer Storage offset.
1432 ///
1433 EFI_STRING_ID VarName;
1434 ///
1435 /// A Name Value or EFI Variable name (VarName).
1436 ///
1437 UINT16 VarOffset;
1438 } VarStoreInfo;
1439 } EFI_IFR_SET;
1440
1441 typedef struct _EFI_IFR_GET {
1442 ///
1443 /// The sequence that defines the type of opcode as well as the length
1444 /// of the opcode being defined. Header.OpCode = EFI_IFR_GET_OP.
1445 ///
1446 EFI_IFR_OP_HEADER Header;
1447 ///
1448 /// Specifies the identifier of a previously declared variable store to
1449 /// use when retrieving the value.
1450 ///
1451 EFI_VARSTORE_ID VarStoreId;
1452 union {
1453 ///
1454 /// A 16-bit Buffer Storage offset.
1455 ///
1456 EFI_STRING_ID VarName;
1457 ///
1458 /// A Name Value or EFI Variable name (VarName).
1459 ///
1460 UINT16 VarOffset;
1461 } VarStoreInfo;
1462 ///
1463 /// Specifies the type used for storage.
1464 ///
1465 UINT8 VarStoreType;
1466 } EFI_IFR_GET;
1467
1468 typedef struct _EFI_IFR_READ {
1469 EFI_IFR_OP_HEADER Header;
1470 } EFI_IFR_READ;
1471
1472 typedef struct _EFI_IFR_WRITE {
1473 EFI_IFR_OP_HEADER Header;
1474 } EFI_IFR_WRITE;
1475
1476 typedef struct _EFI_IFR_MAP {
1477 EFI_IFR_OP_HEADER Header;
1478 } EFI_IFR_MAP;
1479 //
1480 // Definitions for Keyboard Package
1481 // Releated definitions are in Section of EFI_HII_DATABASE_PROTOCOL
1482 //
1483
1484 ///
1485 /// Each enumeration values maps a physical key on a keyboard.
1486 ///
1487 typedef enum {
1488 EfiKeyLCtrl,
1489 EfiKeyA0,
1490 EfiKeyLAlt,
1491 EfiKeySpaceBar,
1492 EfiKeyA2,
1493 EfiKeyA3,
1494 EfiKeyA4,
1495 EfiKeyRCtrl,
1496 EfiKeyLeftArrow,
1497 EfiKeyDownArrow,
1498 EfiKeyRightArrow,
1499 EfiKeyZero,
1500 EfiKeyPeriod,
1501 EfiKeyEnter,
1502 EfiKeyLShift,
1503 EfiKeyB0,
1504 EfiKeyB1,
1505 EfiKeyB2,
1506 EfiKeyB3,
1507 EfiKeyB4,
1508 EfiKeyB5,
1509 EfiKeyB6,
1510 EfiKeyB7,
1511 EfiKeyB8,
1512 EfiKeyB9,
1513 EfiKeyB10,
1514 EfiKeyRShift,
1515 EfiKeyUpArrow,
1516 EfiKeyOne,
1517 EfiKeyTwo,
1518 EfiKeyThree,
1519 EfiKeyCapsLock,
1520 EfiKeyC1,
1521 EfiKeyC2,
1522 EfiKeyC3,
1523 EfiKeyC4,
1524 EfiKeyC5,
1525 EfiKeyC6,
1526 EfiKeyC7,
1527 EfiKeyC8,
1528 EfiKeyC9,
1529 EfiKeyC10,
1530 EfiKeyC11,
1531 EfiKeyC12,
1532 EfiKeyFour,
1533 EfiKeyFive,
1534 EfiKeySix,
1535 EfiKeyPlus,
1536 EfiKeyTab,
1537 EfiKeyD1,
1538 EfiKeyD2,
1539 EfiKeyD3,
1540 EfiKeyD4,
1541 EfiKeyD5,
1542 EfiKeyD6,
1543 EfiKeyD7,
1544 EfiKeyD8,
1545 EfiKeyD9,
1546 EfiKeyD10,
1547 EfiKeyD11,
1548 EfiKeyD12,
1549 EfiKeyD13,
1550 EfiKeyDel,
1551 EfiKeyEnd,
1552 EfiKeyPgDn,
1553 EfiKeySeven,
1554 EfiKeyEight,
1555 EfiKeyNine,
1556 EfiKeyE0,
1557 EfiKeyE1,
1558 EfiKeyE2,
1559 EfiKeyE3,
1560 EfiKeyE4,
1561 EfiKeyE5,
1562 EfiKeyE6,
1563 EfiKeyE7,
1564 EfiKeyE8,
1565 EfiKeyE9,
1566 EfiKeyE10,
1567 EfiKeyE11,
1568 EfiKeyE12,
1569 EfiKeyBackSpace,
1570 EfiKeyIns,
1571 EfiKeyHome,
1572 EfiKeyPgUp,
1573 EfiKeyNLck,
1574 EfiKeySlash,
1575 EfiKeyAsterisk,
1576 EfiKeyMinus,
1577 EfiKeyEsc,
1578 EfiKeyF1,
1579 EfiKeyF2,
1580 EfiKeyF3,
1581 EfiKeyF4,
1582 EfiKeyF5,
1583 EfiKeyF6,
1584 EfiKeyF7,
1585 EfiKeyF8,
1586 EfiKeyF9,
1587 EfiKeyF10,
1588 EfiKeyF11,
1589 EfiKeyF12,
1590 EfiKeyPrint,
1591 EfiKeySLck,
1592 EfiKeyPause
1593 } EFI_KEY;
1594
1595 typedef struct {
1596 EFI_KEY Key;
1597 CHAR16 Unicode;
1598 CHAR16 ShiftedUnicode;
1599 CHAR16 AltGrUnicode;
1600 CHAR16 ShiftedAltGrUnicode;
1601 UINT16 Modifier;
1602 UINT16 AffectedAttribute;
1603 } EFI_KEY_DESCRIPTOR;
1604
1605 ///
1606 /// A key which is affected by all the standard shift modifiers.
1607 /// Most keys would be expected to have this bit active.
1608 ///
1609 #define EFI_AFFECTED_BY_STANDARD_SHIFT 0x0001
1610
1611 ///
1612 /// This key is affected by the caps lock so that if a keyboard driver
1613 /// would need to disambiguate between a key which had a "1" defined
1614 /// versus an "a" character. Having this bit turned on would tell
1615 /// the keyboard driver to use the appropriate shifted state or not.
1616 ///
1617 #define EFI_AFFECTED_BY_CAPS_LOCK 0x0002
1618
1619 ///
1620 /// Similar to the case of CAPS lock, if this bit is active, the key
1621 /// is affected by the num lock being turned on.
1622 ///
1623 #define EFI_AFFECTED_BY_NUM_LOCK 0x0004
1624
1625 typedef struct {
1626 UINT16 LayoutLength;
1627 EFI_GUID Guid;
1628 UINT32 LayoutDescriptorStringOffset;
1629 UINT8 DescriptorCount;
1630 // EFI_KEY_DESCRIPTOR Descriptors[];
1631 } EFI_HII_KEYBOARD_LAYOUT;
1632
1633 typedef struct {
1634 EFI_HII_PACKAGE_HEADER Header;
1635 UINT16 LayoutCount;
1636 // EFI_HII_KEYBOARD_LAYOUT Layout[];
1637 } EFI_HII_KEYBOARD_PACKAGE_HDR;
1638
1639 //
1640 // Modifier values
1641 //
1642 #define EFI_NULL_MODIFIER 0x0000
1643 #define EFI_LEFT_CONTROL_MODIFIER 0x0001
1644 #define EFI_RIGHT_CONTROL_MODIFIER 0x0002
1645 #define EFI_LEFT_ALT_MODIFIER 0x0003
1646 #define EFI_RIGHT_ALT_MODIFIER 0x0004
1647 #define EFI_ALT_GR_MODIFIER 0x0005
1648 #define EFI_INSERT_MODIFIER 0x0006
1649 #define EFI_DELETE_MODIFIER 0x0007
1650 #define EFI_PAGE_DOWN_MODIFIER 0x0008
1651 #define EFI_PAGE_UP_MODIFIER 0x0009
1652 #define EFI_HOME_MODIFIER 0x000A
1653 #define EFI_END_MODIFIER 0x000B
1654 #define EFI_LEFT_SHIFT_MODIFIER 0x000C
1655 #define EFI_RIGHT_SHIFT_MODIFIER 0x000D
1656 #define EFI_CAPS_LOCK_MODIFIER 0x000E
1657 #define EFI_NUM_LOCK_MODIFIER 0x000F
1658 #define EFI_LEFT_ARROW_MODIFIER 0x0010
1659 #define EFI_RIGHT_ARROW_MODIFIER 0x0011
1660 #define EFI_DOWN_ARROW_MODIFIER 0x0012
1661 #define EFI_UP_ARROW_MODIFIER 0x0013
1662 #define EFI_NS_KEY_MODIFIER 0x0014
1663 #define EFI_NS_KEY_DEPENDENCY_MODIFIER 0x0015
1664 #define EFI_FUNCTION_KEY_ONE_MODIFIER 0x0016
1665 #define EFI_FUNCTION_KEY_TWO_MODIFIER 0x0017
1666 #define EFI_FUNCTION_KEY_THREE_MODIFIER 0x0018
1667 #define EFI_FUNCTION_KEY_FOUR_MODIFIER 0x0019
1668 #define EFI_FUNCTION_KEY_FIVE_MODIFIER 0x001A
1669 #define EFI_FUNCTION_KEY_SIX_MODIFIER 0x001B
1670 #define EFI_FUNCTION_KEY_SEVEN_MODIFIER 0x001C
1671 #define EFI_FUNCTION_KEY_EIGHT_MODIFIER 0x001D
1672 #define EFI_FUNCTION_KEY_NINE_MODIFIER 0x001E
1673 #define EFI_FUNCTION_KEY_TEN_MODIFIER 0x001F
1674 #define EFI_FUNCTION_KEY_ELEVEN_MODIFIER 0x0020
1675 #define EFI_FUNCTION_KEY_TWELVE_MODIFIER 0x0021
1676
1677 //
1678 // Keys that have multiple control functions based on modifier
1679 // settings are handled in the keyboard driver implementation.
1680 // For instance, PRINT_KEY might have a modifier held down and
1681 // is still a nonprinting character, but might have an alternate
1682 // control function like SYSREQUEST
1683 //
1684 #define EFI_PRINT_MODIFIER 0x0022
1685 #define EFI_SYS_REQUEST_MODIFIER 0x0023
1686 #define EFI_SCROLL_LOCK_MODIFIER 0x0024
1687 #define EFI_PAUSE_MODIFIER 0x0025
1688 #define EFI_BREAK_MODIFIER 0x0026
1689
1690 #define EFI_LEFT_LOGO_MODIFIER 0x0027
1691 #define EFI_RIGHT_LOGO_MODIFIER 0x0028
1692 #define EFI_MENU_MODIFIER 0x0029
1693
1694 #pragma pack()
1695
1696
1697
1698 ///
1699 /// References to string tokens must use this macro to enable scanning for
1700 /// token usages.
1701 ///
1702 ///
1703 /// STRING_TOKEN is not defined in UEFI specification. But it is placed
1704 /// here for the easy access by C files and VFR source files.
1705 ///
1706 #define STRING_TOKEN(t) t
1707
1708 #endif