]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h
Add comments to describe the difference between code and spec to fix the bug #202430
[mirror_edk2.git] / IntelFrameworkPkg / Include / Framework / FrameworkInternalFormRepresentation.h
CommitLineData
61789197 1/** @file\r
2 This file defines the encoding for the VFR (Visual Form Representation) language.\r
3 Framework IFR is primarily consumed by the EFI presentation engine, and produced by EFI\r
4 internal application and drivers as well as all add-in card option-ROM drivers\r
5\r
2bbaeb0d 6 Copyright (c) 2007 - 2009, Intel Corporation \r
61789197 7 All rights reserved. This program and the accompanying materials \r
8 are licensed and made available under the terms and conditions of the BSD License \r
9 which accompanies this distribution. The full text of the license may be found at \r
10 http://opensource.org/licenses/bsd-license.php \r
11\r
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
14\r
15 @par Revision Reference:\r
16 These definitions are from Framework Specification HII 0.92.\r
17\r
18**/\r
19\r
20#ifndef __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__\r
21#define __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__\r
22\r
61789197 23//\r
24// IFR Op codes\r
25//\r
26#define FRAMEWORK_EFI_IFR_FORM_OP 0x01\r
27#define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02\r
28#define FRAMEWORK_EFI_IFR_TEXT_OP 0x03\r
29#define FRAMEWORK_EFI_IFR_GRAPHIC_OP 0x04\r
30#define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05\r
31#define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06\r
32#define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07\r
33#define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08\r
2bbaeb0d 34#define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 ///< ONEOF OPTION field\r
61789197 35#define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A\r
36#define FRAMEWORK_EFI_IFR_END_FORM_OP 0x0B\r
37#define FRAMEWORK_EFI_IFR_HIDDEN_OP 0x0C\r
38#define FRAMEWORK_EFI_IFR_END_FORM_SET_OP 0x0D\r
39#define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E\r
40#define FRAMEWORK_EFI_IFR_REF_OP 0x0F\r
41#define FRAMEWORK_EFI_IFR_END_ONE_OF_OP 0x10\r
42#define FRAMEWORK_EFI_IFR_END_OP FRAMEWORK_EFI_IFR_END_ONE_OF_OP\r
43#define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11\r
44#define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12\r
45#define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13\r
46#define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14\r
47#define FRAMEWORK_EFI_IFR_AND_OP 0x15\r
48#define FRAMEWORK_EFI_IFR_OR_OP 0x16\r
49#define FRAMEWORK_EFI_IFR_NOT_OP 0x17\r
2bbaeb0d 50#define FRAMEWORK_EFI_IFR_END_IF_OP 0x18 ///< for endif of inconsistentif, suppressif, grayoutif\r
61789197 51#define FRAMEWORK_EFI_IFR_GRAYOUT_IF_OP 0x19\r
52#define FRAMEWORK_EFI_IFR_DATE_OP 0x1A\r
53#define FRAMEWORK_EFI_IFR_TIME_OP 0x1B\r
54#define FRAMEWORK_EFI_IFR_STRING_OP 0x1C\r
55#define FRAMEWORK_EFI_IFR_LABEL_OP 0x1D\r
56#define FRAMEWORK_EFI_IFR_SAVE_DEFAULTS_OP 0x1E\r
57#define FRAMEWORK_EFI_IFR_RESTORE_DEFAULTS_OP 0x1F\r
58#define FRAMEWORK_EFI_IFR_BANNER_OP 0x20\r
59#define FRAMEWORK_EFI_IFR_INVENTORY_OP 0x21\r
60#define FRAMEWORK_EFI_IFR_EQ_VAR_VAL_OP 0x22\r
61#define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23\r
62#define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24\r
63#define FRAMEWORK_EFI_IFR_VARSTORE_SELECT_OP 0x25\r
64#define FRAMEWORK_EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26\r
920d2c23 65#define FRAMEWORK_EFI_IFR_LAST_OPCODE FRAMEWORK_EFI_IFR_VARSTORE_SELECT_PAIR_OP\r
61789197 66#define FRAMEWORK_EFI_IFR_OEM_OP 0xFE\r
67#define FRAMEWORK_EFI_IFR_NV_ACCESS_COMMAND 0xFF\r
68\r
69//\r
70// Define values for the flags fields in some VFR opcodes. These are\r
71// bitmasks.\r
72//\r
9205b2d7 73#define FRAMEWORK_EFI_IFR_FLAG_DEFAULT 0x01\r
74#define FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING 0x02\r
75#define FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE 0x04\r
76#define FRAMEWORK_EFI_IFR_FLAG_NV_ACCESS 0x08\r
77#define FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED 0x10\r
78#define FRAMEWORK_EFI_IFR_FLAG_LATE_CHECK 0x20\r
61789197 79\r
2bbaeb0d 80#define EFI_NON_DEVICE_CLASS 0x00 ///< Useful when you do not want something in the Device Manager\r
61789197 81#define EFI_DISK_DEVICE_CLASS 0x01\r
82#define EFI_VIDEO_DEVICE_CLASS 0x02\r
83#define EFI_NETWORK_DEVICE_CLASS 0x04\r
84#define EFI_INPUT_DEVICE_CLASS 0x08\r
85#define EFI_ON_BOARD_DEVICE_CLASS 0x10\r
86#define EFI_OTHER_DEVICE_CLASS 0x20\r
87\r
88#define EFI_SETUP_APPLICATION_SUBCLASS 0x00\r
89#define EFI_GENERAL_APPLICATION_SUBCLASS 0x01\r
90#define EFI_FRONT_PAGE_SUBCLASS 0x02\r
2bbaeb0d 91#define EFI_SINGLE_USE_SUBCLASS 0x03 ///< Used to display a single entity and then exit\r
92\r
93///\r
94/// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set\r
95/// and the browser since we need to distinguish between compiled NV map data and created data.\r
96/// We do not allow new entries to be created in the NV map dynamically however we still need\r
97/// to display this information correctly. To dynamically create op-codes and assume that their\r
98/// data will be saved, ensure that the NV starting location they refer to is pre-defined in the\r
99/// NV map.\r
100///\r
61789197 101#define FRAMEWORK_EFI_IFR_FLAG_CREATED 128\r
102\r
103\r
104#pragma pack(1)\r
105//\r
106// IFR Structure definitions\r
107//\r
108typedef struct {\r
9205b2d7 109 UINT8 OpCode;\r
110 UINT8 Length;\r
61789197 111} FRAMEWORK_EFI_IFR_OP_HEADER;\r
112\r
113typedef struct {\r
9205b2d7 114 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
115 EFI_GUID Guid;\r
116 STRING_REF FormSetTitle;\r
117 STRING_REF Help;\r
118 EFI_PHYSICAL_ADDRESS CallbackHandle;\r
119 UINT16 Class;\r
120 UINT16 SubClass;\r
2bbaeb0d 121 UINT16 NvDataSize; ///< set once, size of the NV data as defined in the script\r
61789197 122} FRAMEWORK_EFI_IFR_FORM_SET;\r
123\r
124typedef struct {\r
9205b2d7 125 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
126 UINT16 FormId;\r
127 STRING_REF FormTitle;\r
61789197 128} FRAMEWORK_EFI_IFR_FORM;\r
129\r
130typedef struct {\r
9205b2d7 131 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
132 UINT16 LabelId;\r
61789197 133} FRAMEWORK_EFI_IFR_LABEL;\r
134\r
135typedef struct {\r
9205b2d7 136 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
137 STRING_REF SubTitle;\r
61789197 138} FRAMEWORK_EFI_IFR_SUBTITLE;\r
139\r
140typedef struct {\r
9205b2d7 141 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
142 STRING_REF Help;\r
143 STRING_REF Text;\r
144 STRING_REF TextTwo;\r
2bbaeb0d 145 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
146 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 147} FRAMEWORK_EFI_IFR_TEXT;\r
148\r
149//\r
150// goto\r
151//\r
152typedef struct {\r
9205b2d7 153 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
154 UINT16 FormId;\r
155 STRING_REF Prompt;\r
2bbaeb0d 156 STRING_REF Help; ///< The string Token for the context-help\r
157 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
158 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 159} FRAMEWORK_EFI_IFR_REF;\r
160\r
161typedef struct {\r
9205b2d7 162 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 163} FRAMEWORK_EFI_IFR_END_FORM;\r
164\r
165typedef struct {\r
9205b2d7 166 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 167} FRAMEWORK_EFI_IFR_END_FORM_SET;\r
168\r
169//\r
9205b2d7 170// Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......\r
171// code assumes this to be true, if this ever changes we need to revisit the InitializeTagStructures code\r
61789197 172//\r
173typedef struct {\r
9205b2d7 174 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 175 UINT16 QuestionId; ///< The ID designating what the question is about...\r
176 UINT8 Width; ///< The Size of the Data being saved\r
177 STRING_REF Prompt; ///< The String Token for the Prompt\r
178 STRING_REF Help; ///< The string Token for the context-help\r
61789197 179} FRAMEWORK_EFI_IFR_ONE_OF;\r
180\r
181typedef struct {\r
9205b2d7 182 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 183 UINT16 QuestionId; ///< The offset in NV for storage of the data\r
184 UINT8 MaxEntries; ///< The maximum number of options in the ordered list (=size of NVStore)\r
185 STRING_REF Prompt; ///< The string token for the prompt\r
186 STRING_REF Help; ///< The string token for the context-help\r
61789197 187} FRAMEWORK_EFI_IFR_ORDERED_LIST;\r
188\r
189typedef struct {\r
9205b2d7 190 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 191 UINT16 QuestionId; ///< The ID designating what the question is about...\r
192 UINT8 Width; ///< The Size of the Data being saved\r
193 STRING_REF Prompt; ///< The String Token for the Prompt\r
194 STRING_REF Help; ///< The string Token for the context-help\r
195 UINT8 Flags; ///< If non-zero, means that it is the default option\r
196 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 197} FRAMEWORK_EFI_IFR_CHECKBOX, FRAMEWORK_EFI_IFR_CHECK_BOX;\r
198\r
199typedef struct {\r
9205b2d7 200 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 201 STRING_REF Option; ///< The string token describing the option\r
202 UINT16 Value; ///< The value associated with this option that is stored in the NVRAM\r
203 UINT8 Flags; ///< If non-zero, means that it is the default option\r
204 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 205} FRAMEWORK_EFI_IFR_ONE_OF_OPTION;\r
206\r
207typedef struct {\r
9205b2d7 208 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 209 UINT16 QuestionId; ///< The ID designating what the question is about...\r
210 UINT8 Width; ///< The Size of the Data being saved\r
211 STRING_REF Prompt; ///< The String Token for the Prompt\r
212 STRING_REF Help; ///< The string Token for the context-help\r
213 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
214 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
9205b2d7 215 UINT16 Minimum;\r
216 UINT16 Maximum;\r
2bbaeb0d 217 UINT16 Step; ///< Zero means manual input, otherwise, arrow selection is called for\r
9205b2d7 218 UINT16 Default;\r
61789197 219} FRAMEWORK_EFI_IFR_NUMERIC;\r
220\r
221//\r
9205b2d7 222// There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input\r
223// from a user, however may or may not need to use storage in the NVRAM space. The decided method for determining \r
224// if NVRAM space will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an \r
225// impossibility) then use system resources to store the data away and not NV resources. In other words, the setup\r
226// engine will call gRT->SetTime, and gRT->SetDate for the saving of data, and the values displayed will be from the\r
227// gRT->GetXXXX series of calls.\r
61789197 228//\r
229typedef struct {\r
9205b2d7 230 FRAMEWORK_EFI_IFR_NUMERIC Hour;\r
231 FRAMEWORK_EFI_IFR_NUMERIC Minute;\r
232 FRAMEWORK_EFI_IFR_NUMERIC Second;\r
61789197 233} FRAMEWORK_EFI_IFR_TIME;\r
234\r
235typedef struct {\r
9205b2d7 236 FRAMEWORK_EFI_IFR_NUMERIC Year;\r
237 FRAMEWORK_EFI_IFR_NUMERIC Month;\r
238 FRAMEWORK_EFI_IFR_NUMERIC Day;\r
61789197 239} FRAMEWORK_EFI_IFR_DATE;\r
240\r
241typedef struct {\r
9205b2d7 242 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 243 UINT16 QuestionId;///< The ID designating what the question is about...\r
244 UINT8 Width; ///< The Size of the Data being saved\r
245 STRING_REF Prompt; ///< The String Token for the Prompt\r
246 STRING_REF Help; ///< The string Token for the context-help\r
247 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
248 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
249 UINT8 MinSize; ///< Minimum allowable sized password\r
250 UINT8 MaxSize; ///< Maximum allowable sized password\r
9205b2d7 251 UINT16 Encoding;\r
61789197 252} FRAMEWORK_EFI_IFR_PASSWORD;\r
253\r
254typedef struct {\r
9205b2d7 255 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 256 UINT16 QuestionId; ///< The ID designating what the question is about...\r
257 UINT8 Width; ///< The Size of the Data being saved \r
258 STRING_REF Prompt; ///< The String Token for the Prompt\r
259 STRING_REF Help; ///< The string Token for the context-help\r
260 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
261 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
262 UINT8 MinSize; ///< Minimum allowable sized password\r
263 UINT8 MaxSize; ///< Maximum allowable sized password\r
61789197 264} FRAMEWORK_EFI_IFR_STRING;\r
265\r
266typedef struct {\r
9205b2d7 267 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 268} FRAMEWORK_EFI_IFR_END_ONE_OF;\r
269\r
270typedef struct {\r
9205b2d7 271 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
272 UINT16 Value;\r
273 UINT16 Key;\r
61789197 274} FRAMEWORK_EFI_IFR_HIDDEN;\r
275\r
6d1824fc 276///\r
277/// Inconsistent with specification here:\r
278/// Following defintion may not comply with Framework Specification HII 0.92. To \r
279/// keep the inconsistant is for implementation needed.\r
280///\r
61789197 281typedef struct {\r
9205b2d7 282 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
283 UINT8 Flags;\r
61789197 284} FRAMEWORK_EFI_IFR_SUPPRESS;\r
285\r
286typedef struct {\r
9205b2d7 287 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
288 UINT8 Flags;\r
61789197 289} FRAMEWORK_EFI_IFR_GRAY_OUT;\r
290\r
291typedef struct {\r
9205b2d7 292 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
293 STRING_REF Popup;\r
294 UINT8 Flags;\r
61789197 295} FRAMEWORK_EFI_IFR_INCONSISTENT;\r
296\r
297typedef struct {\r
9205b2d7 298 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 299 UINT16 QuestionId; ///< offset into variable storage\r
300 UINT8 Width; ///< size of variable storage\r
301 UINT16 Value; ///< value to compare against\r
61789197 302} FRAMEWORK_EFI_IFR_EQ_ID_VAL;\r
303\r
304typedef struct {\r
9205b2d7 305 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 306 UINT16 QuestionId; ///< offset into variable storage\r
307 UINT8 Width; ///< size of variable storage\r
9205b2d7 308 UINT16 ListLength;\r
309 UINT16 ValueList[1];\r
61789197 310} FRAMEWORK_EFI_IFR_EQ_ID_LIST;\r
311\r
312typedef struct {\r
9205b2d7 313 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 314 UINT16 QuestionId1; ///< offset into variable storage for first value to compare\r
315 UINT8 Width; ///< size of variable storage (must be same for both)\r
316 UINT16 QuestionId2; ///< offset into variable storage for second value to compare\r
61789197 317} FRAMEWORK_EFI_IFR_EQ_ID_ID;\r
318\r
319typedef struct {\r
9205b2d7 320 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 321 UINT16 VariableId; ///< offset into variable storage\r
322 UINT16 Value; ///< value to compare against\r
61789197 323} FRAMEWORK_EFI_IFR_EQ_VAR_VAL;\r
324\r
325typedef struct {\r
9205b2d7 326 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 327} FRAMEWORK_EFI_IFR_AND;\r
328\r
329typedef struct {\r
9205b2d7 330 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 331} FRAMEWORK_EFI_IFR_OR;\r
332\r
333typedef struct {\r
9205b2d7 334 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 335} FRAMEWORK_EFI_IFR_NOT;\r
336\r
337typedef struct {\r
9205b2d7 338 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 339} FRAMEWORK_EFI_IFR_END_EXPR, FRAMEWORK_EFI_IFR_END_IF;\r
340\r
341typedef struct {\r
9205b2d7 342 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
343 UINT16 FormId;\r
344 STRING_REF Prompt;\r
345 STRING_REF Help;\r
346 UINT8 Flags;\r
347 UINT16 Key;\r
61789197 348} FRAMEWORK_EFI_IFR_SAVE_DEFAULTS;\r
349\r
350typedef struct {\r
9205b2d7 351 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
352 STRING_REF Help;\r
353 STRING_REF Text;\r
2bbaeb0d 354 STRING_REF TextTwo; ///< optional text\r
61789197 355} FRAMEWORK_EFI_IFR_INVENTORY;\r
356\r
357typedef struct {\r
9205b2d7 358 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 359 EFI_GUID Guid; ///< GUID for the variable\r
360 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
361 UINT16 Size; ///< size of the variable storage\r
61789197 362} FRAMEWORK_EFI_IFR_VARSTORE;\r
363\r
364typedef struct {\r
9205b2d7 365 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 366 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
61789197 367} FRAMEWORK_EFI_IFR_VARSTORE_SELECT;\r
368\r
2bbaeb0d 369///\r
370/// Used for the ideqid VFR statement where two variable stores may be referenced in the\r
371/// same VFR statement.\r
372/// A browser should treat this as an FRAMEWORK_EFI_IFR_VARSTORE_SELECT statement and assume that all following\r
373/// IFR opcodes use the VarId as defined here.\r
374///\r
61789197 375typedef struct {\r
9205b2d7 376 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 377 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
378 UINT16 SecondaryVarId; ///< variable store ID, as referenced elsewhere in the form\r
61789197 379} FRAMEWORK_EFI_IFR_VARSTORE_SELECT_PAIR;\r
380\r
2bbaeb0d 381///\r
382/// Save defaults and restore defaults have same structure\r
383///\r
61789197 384#define FRAMEWORK_EFI_IFR_RESTORE_DEFAULTS FRAMEWORK_EFI_IFR_SAVE_DEFAULTS\r
385\r
386typedef struct {\r
9205b2d7 387 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 388 STRING_REF Title; ///< The string token for the banner title\r
389 UINT16 LineNumber; ///< 1-based line number\r
390 UINT8 Alignment; ///< left, center, or right-aligned\r
61789197 391} FRAMEWORK_EFI_IFR_BANNER;\r
392\r
393#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_LEFT 0\r
394#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_CENTER 1\r
395#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_RIGHT 2\r
396#define FRAMEWORK_EFI_IFR_BANNER_TIMEOUT 0xFF\r
397\r
398#pragma pack()\r
399\r
400#endif\r