]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h
Minor code enhancement.
[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
0e0eeeca
LG
23typedef UINT16 STRING_REF;\r
24\r
61789197 25//\r
26// IFR Op codes\r
27//\r
28#define FRAMEWORK_EFI_IFR_FORM_OP 0x01\r
29#define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02\r
30#define FRAMEWORK_EFI_IFR_TEXT_OP 0x03\r
33801c0c 31#define EFI_IFR_GRAPHIC_OP 0x04\r
61789197 32#define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05\r
33#define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06\r
34#define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07\r
35#define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08\r
2bbaeb0d 36#define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 ///< ONEOF OPTION field\r
61789197 37#define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A\r
33801c0c
LG
38#define EFI_IFR_END_FORM_OP 0x0B\r
39#define EFI_IFR_HIDDEN_OP 0x0C\r
40#define EFI_IFR_END_FORM_SET_OP 0x0D\r
61789197 41#define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E\r
42#define FRAMEWORK_EFI_IFR_REF_OP 0x0F\r
33801c0c 43#define EFI_IFR_END_ONE_OF_OP 0x10\r
108854b2 44#define FRAMEWORK_EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP\r
61789197 45#define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11\r
46#define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12\r
47#define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13\r
48#define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14\r
49#define FRAMEWORK_EFI_IFR_AND_OP 0x15\r
50#define FRAMEWORK_EFI_IFR_OR_OP 0x16\r
51#define FRAMEWORK_EFI_IFR_NOT_OP 0x17\r
33801c0c
LG
52#define EFI_IFR_END_IF_OP 0x18 ///< for endif of inconsistentif, suppressif, grayoutif\r
53#define EFI_IFR_GRAYOUT_IF_OP 0x19\r
61789197 54#define FRAMEWORK_EFI_IFR_DATE_OP 0x1A\r
55#define FRAMEWORK_EFI_IFR_TIME_OP 0x1B\r
56#define FRAMEWORK_EFI_IFR_STRING_OP 0x1C\r
33801c0c
LG
57#define EFI_IFR_LABEL_OP 0x1D\r
58#define EFI_IFR_SAVE_DEFAULTS_OP 0x1E\r
59#define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F\r
60#define EFI_IFR_BANNER_OP 0x20\r
61#define EFI_IFR_INVENTORY_OP 0x21\r
62#define EFI_IFR_EQ_VAR_VAL_OP 0x22\r
61789197 63#define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23\r
64#define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24\r
33801c0c
LG
65#define EFI_IFR_VARSTORE_SELECT_OP 0x25\r
66#define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26\r
67#define EFI_IFR_LAST_OPCODE EFI_IFR_VARSTORE_SELECT_PAIR_OP\r
68#define EFI_IFR_OEM_OP 0xFE\r
69#define EFI_IFR_NV_ACCESS_COMMAND 0xFF\r
61789197 70\r
71//\r
72// Define values for the flags fields in some VFR opcodes. These are\r
73// bitmasks.\r
74//\r
108854b2
LG
75#define EFI_IFR_FLAG_DEFAULT 0x01\r
76#define EFI_IFR_FLAG_MANUFACTURING 0x02\r
77#define EFI_IFR_FLAG_INTERACTIVE 0x04\r
78#define EFI_IFR_FLAG_NV_ACCESS 0x08\r
79#define EFI_IFR_FLAG_RESET_REQUIRED 0x10\r
80#define EFI_IFR_FLAG_LATE_CHECK 0x20\r
61789197 81\r
2bbaeb0d 82#define EFI_NON_DEVICE_CLASS 0x00 ///< Useful when you do not want something in the Device Manager\r
61789197 83#define EFI_DISK_DEVICE_CLASS 0x01\r
84#define EFI_VIDEO_DEVICE_CLASS 0x02\r
85#define EFI_NETWORK_DEVICE_CLASS 0x04\r
86#define EFI_INPUT_DEVICE_CLASS 0x08\r
87#define EFI_ON_BOARD_DEVICE_CLASS 0x10\r
88#define EFI_OTHER_DEVICE_CLASS 0x20\r
89\r
90#define EFI_SETUP_APPLICATION_SUBCLASS 0x00\r
91#define EFI_GENERAL_APPLICATION_SUBCLASS 0x01\r
92#define EFI_FRONT_PAGE_SUBCLASS 0x02\r
2bbaeb0d 93#define EFI_SINGLE_USE_SUBCLASS 0x03 ///< Used to display a single entity and then exit\r
94\r
95///\r
96/// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set\r
97/// and the browser since we need to distinguish between compiled NV map data and created data.\r
5259c97d 98/// We do not allow new entries to be created in the NV map dynamically, but we do need\r
2bbaeb0d 99/// to display this information correctly. To dynamically create op-codes and assume that their\r
100/// data will be saved, ensure that the NV starting location they refer to is pre-defined in the\r
101/// NV map.\r
102///\r
108854b2 103#define EFI_IFR_FLAG_CREATED 128\r
61789197 104\r
105\r
106#pragma pack(1)\r
107//\r
108// IFR Structure definitions\r
109//\r
110typedef struct {\r
9205b2d7 111 UINT8 OpCode;\r
112 UINT8 Length;\r
61789197 113} FRAMEWORK_EFI_IFR_OP_HEADER;\r
114\r
115typedef struct {\r
9205b2d7 116 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
117 EFI_GUID Guid;\r
118 STRING_REF FormSetTitle;\r
119 STRING_REF Help;\r
120 EFI_PHYSICAL_ADDRESS CallbackHandle;\r
121 UINT16 Class;\r
122 UINT16 SubClass;\r
2bbaeb0d 123 UINT16 NvDataSize; ///< set once, size of the NV data as defined in the script\r
61789197 124} FRAMEWORK_EFI_IFR_FORM_SET;\r
125\r
126typedef struct {\r
9205b2d7 127 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
128 UINT16 FormId;\r
129 STRING_REF FormTitle;\r
61789197 130} FRAMEWORK_EFI_IFR_FORM;\r
131\r
132typedef struct {\r
9205b2d7 133 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
134 UINT16 LabelId;\r
108854b2 135} EFI_IFR_LABEL;\r
61789197 136\r
137typedef struct {\r
9205b2d7 138 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
139 STRING_REF SubTitle;\r
61789197 140} FRAMEWORK_EFI_IFR_SUBTITLE;\r
141\r
142typedef struct {\r
9205b2d7 143 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
144 STRING_REF Help;\r
145 STRING_REF Text;\r
146 STRING_REF TextTwo;\r
2bbaeb0d 147 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
148 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 149} FRAMEWORK_EFI_IFR_TEXT;\r
150\r
151//\r
152// goto\r
153//\r
154typedef struct {\r
9205b2d7 155 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
156 UINT16 FormId;\r
157 STRING_REF Prompt;\r
2bbaeb0d 158 STRING_REF Help; ///< The string Token for the context-help\r
159 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
160 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 161} FRAMEWORK_EFI_IFR_REF;\r
162\r
163typedef struct {\r
9205b2d7 164 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
108854b2 165} EFI_IFR_END_FORM;\r
61789197 166\r
167typedef struct {\r
9205b2d7 168 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
108854b2 169} EFI_IFR_END_FORM_SET;\r
61789197 170\r
171//\r
9205b2d7 172// Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......\r
173// code assumes this to be true, if this ever changes we need to revisit the InitializeTagStructures code\r
61789197 174//\r
175typedef struct {\r
9205b2d7 176 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 177 UINT16 QuestionId; ///< The ID designating what the question is about...\r
178 UINT8 Width; ///< The Size of the Data being saved\r
179 STRING_REF Prompt; ///< The String Token for the Prompt\r
180 STRING_REF Help; ///< The string Token for the context-help\r
61789197 181} FRAMEWORK_EFI_IFR_ONE_OF;\r
182\r
183typedef struct {\r
9205b2d7 184 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 185 UINT16 QuestionId; ///< The offset in NV for storage of the data\r
186 UINT8 MaxEntries; ///< The maximum number of options in the ordered list (=size of NVStore)\r
187 STRING_REF Prompt; ///< The string token for the prompt\r
188 STRING_REF Help; ///< The string token for the context-help\r
61789197 189} FRAMEWORK_EFI_IFR_ORDERED_LIST;\r
190\r
191typedef struct {\r
9205b2d7 192 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 193 UINT16 QuestionId; ///< The ID designating what the question is about...\r
194 UINT8 Width; ///< The Size of the Data being saved\r
195 STRING_REF Prompt; ///< The String Token for the Prompt\r
196 STRING_REF Help; ///< The string Token for the context-help\r
197 UINT8 Flags; ///< If non-zero, means that it is the default option\r
198 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
108854b2 199} FRAMEWORK_EFI_IFR_CHECKBOX, EFI_IFR_CHECK_BOX;\r
61789197 200\r
201typedef struct {\r
9205b2d7 202 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 203 STRING_REF Option; ///< The string token describing the option\r
204 UINT16 Value; ///< The value associated with this option that is stored in the NVRAM\r
205 UINT8 Flags; ///< If non-zero, means that it is the default option\r
206 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
61789197 207} FRAMEWORK_EFI_IFR_ONE_OF_OPTION;\r
208\r
209typedef struct {\r
9205b2d7 210 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 211 UINT16 QuestionId; ///< The ID designating what the question is about...\r
212 UINT8 Width; ///< The Size of the Data being saved\r
213 STRING_REF Prompt; ///< The String Token for the Prompt\r
214 STRING_REF Help; ///< The string Token for the context-help\r
215 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
216 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
9205b2d7 217 UINT16 Minimum;\r
218 UINT16 Maximum;\r
2bbaeb0d 219 UINT16 Step; ///< Zero means manual input, otherwise, arrow selection is called for\r
9205b2d7 220 UINT16 Default;\r
61789197 221} FRAMEWORK_EFI_IFR_NUMERIC;\r
222\r
223//\r
9205b2d7 224// There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input\r
5259c97d 225// from a user, and may or may not need to use storage in the NVRAM space. The decided method for determining \r
9205b2d7 226// if NVRAM space will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an \r
227// impossibility) then use system resources to store the data away and not NV resources. In other words, the setup\r
228// engine will call gRT->SetTime, and gRT->SetDate for the saving of data, and the values displayed will be from the\r
229// gRT->GetXXXX series of calls.\r
61789197 230//\r
231typedef struct {\r
9205b2d7 232 FRAMEWORK_EFI_IFR_NUMERIC Hour;\r
233 FRAMEWORK_EFI_IFR_NUMERIC Minute;\r
234 FRAMEWORK_EFI_IFR_NUMERIC Second;\r
61789197 235} FRAMEWORK_EFI_IFR_TIME;\r
236\r
237typedef struct {\r
9205b2d7 238 FRAMEWORK_EFI_IFR_NUMERIC Year;\r
239 FRAMEWORK_EFI_IFR_NUMERIC Month;\r
240 FRAMEWORK_EFI_IFR_NUMERIC Day;\r
61789197 241} FRAMEWORK_EFI_IFR_DATE;\r
242\r
243typedef struct {\r
9205b2d7 244 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 245 UINT16 QuestionId;///< The ID designating what the question is about...\r
246 UINT8 Width; ///< The Size of the Data being saved\r
247 STRING_REF Prompt; ///< The String Token for the Prompt\r
248 STRING_REF Help; ///< The string Token for the context-help\r
249 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
250 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
251 UINT8 MinSize; ///< Minimum allowable sized password\r
252 UINT8 MaxSize; ///< Maximum allowable sized password\r
9205b2d7 253 UINT16 Encoding;\r
61789197 254} FRAMEWORK_EFI_IFR_PASSWORD;\r
255\r
256typedef struct {\r
9205b2d7 257 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 258 UINT16 QuestionId; ///< The ID designating what the question is about...\r
259 UINT8 Width; ///< The Size of the Data being saved \r
260 STRING_REF Prompt; ///< The String Token for the Prompt\r
261 STRING_REF Help; ///< The string Token for the context-help\r
262 UINT8 Flags; ///< This is included solely for purposes of interactive/dynamic support.\r
263 UINT16 Key; ///< Value to be passed to caller to identify this particular op-code\r
264 UINT8 MinSize; ///< Minimum allowable sized password\r
265 UINT8 MaxSize; ///< Maximum allowable sized password\r
61789197 266} FRAMEWORK_EFI_IFR_STRING;\r
267\r
268typedef struct {\r
9205b2d7 269 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
108854b2 270} EFI_IFR_END_ONE_OF;\r
61789197 271\r
272typedef struct {\r
9205b2d7 273 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
274 UINT16 Value;\r
275 UINT16 Key;\r
108854b2 276} EFI_IFR_HIDDEN;\r
61789197 277\r
6d1824fc 278///\r
279/// Inconsistent with specification here:\r
280/// Following defintion may not comply with Framework Specification HII 0.92. To \r
281/// keep the inconsistant is for implementation needed.\r
33d228aa 282///@{\r
61789197 283typedef struct {\r
9205b2d7 284 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
285 UINT8 Flags;\r
108854b2 286} EFI_IFR_SUPPRESS;\r
61789197 287\r
288typedef struct {\r
9205b2d7 289 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
290 UINT8 Flags;\r
108854b2 291} EFI_IFR_GRAY_OUT;\r
61789197 292\r
293typedef struct {\r
9205b2d7 294 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
295 STRING_REF Popup;\r
296 UINT8 Flags;\r
108854b2 297} EFI_IFR_INCONSISTENT;\r
61789197 298\r
299typedef struct {\r
9205b2d7 300 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 301 UINT16 QuestionId; ///< offset into variable storage\r
302 UINT8 Width; ///< size of variable storage\r
303 UINT16 Value; ///< value to compare against\r
61789197 304} FRAMEWORK_EFI_IFR_EQ_ID_VAL;\r
305\r
306typedef struct {\r
9205b2d7 307 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 308 UINT16 QuestionId; ///< offset into variable storage\r
309 UINT8 Width; ///< size of variable storage\r
9205b2d7 310 UINT16 ListLength;\r
311 UINT16 ValueList[1];\r
61789197 312} FRAMEWORK_EFI_IFR_EQ_ID_LIST;\r
313\r
314typedef struct {\r
9205b2d7 315 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 316 UINT16 QuestionId1; ///< offset into variable storage for first value to compare\r
317 UINT8 Width; ///< size of variable storage (must be same for both)\r
318 UINT16 QuestionId2; ///< offset into variable storage for second value to compare\r
61789197 319} FRAMEWORK_EFI_IFR_EQ_ID_ID;\r
320\r
321typedef struct {\r
9205b2d7 322 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 323 UINT16 VariableId; ///< offset into variable storage\r
324 UINT16 Value; ///< value to compare against\r
108854b2 325} EFI_IFR_EQ_VAR_VAL;\r
33d228aa 326///@}\r
61789197 327\r
328typedef struct {\r
9205b2d7 329 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 330} FRAMEWORK_EFI_IFR_AND;\r
331\r
332typedef struct {\r
9205b2d7 333 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 334} FRAMEWORK_EFI_IFR_OR;\r
335\r
336typedef struct {\r
9205b2d7 337 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
61789197 338} FRAMEWORK_EFI_IFR_NOT;\r
339\r
340typedef struct {\r
9205b2d7 341 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
108854b2 342} EFI_IFR_END_EXPR, EFI_IFR_END_IF;\r
61789197 343\r
344typedef struct {\r
9205b2d7 345 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
346 UINT16 FormId;\r
347 STRING_REF Prompt;\r
348 STRING_REF Help;\r
349 UINT8 Flags;\r
350 UINT16 Key;\r
108854b2 351} EFI_IFR_SAVE_DEFAULTS;\r
61789197 352\r
353typedef struct {\r
9205b2d7 354 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
355 STRING_REF Help;\r
356 STRING_REF Text;\r
2bbaeb0d 357 STRING_REF TextTwo; ///< optional text\r
108854b2 358} EFI_IFR_INVENTORY;\r
61789197 359\r
360typedef struct {\r
9205b2d7 361 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 362 EFI_GUID Guid; ///< GUID for the variable\r
363 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
364 UINT16 Size; ///< size of the variable storage\r
61789197 365} FRAMEWORK_EFI_IFR_VARSTORE;\r
366\r
367typedef struct {\r
9205b2d7 368 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 369 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
108854b2 370} EFI_IFR_VARSTORE_SELECT;\r
61789197 371\r
2bbaeb0d 372///\r
373/// Used for the ideqid VFR statement where two variable stores may be referenced in the\r
374/// same VFR statement.\r
375/// A browser should treat this as an FRAMEWORK_EFI_IFR_VARSTORE_SELECT statement and assume that all following\r
376/// IFR opcodes use the VarId as defined here.\r
377///\r
61789197 378typedef struct {\r
9205b2d7 379 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 380 UINT16 VarId; ///< variable store ID, as referenced elsewhere in the form\r
381 UINT16 SecondaryVarId; ///< variable store ID, as referenced elsewhere in the form\r
108854b2 382} EFI_IFR_VARSTORE_SELECT_PAIR;\r
61789197 383\r
2bbaeb0d 384///\r
385/// Save defaults and restore defaults have same structure\r
386///\r
108854b2 387#define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS\r
61789197 388\r
389typedef struct {\r
9205b2d7 390 FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
2bbaeb0d 391 STRING_REF Title; ///< The string token for the banner title\r
392 UINT16 LineNumber; ///< 1-based line number\r
393 UINT8 Alignment; ///< left, center, or right-aligned\r
108854b2 394} EFI_IFR_BANNER;\r
61789197 395\r
108854b2
LG
396#define EFI_IFR_BANNER_ALIGN_LEFT 0\r
397#define EFI_IFR_BANNER_ALIGN_CENTER 1\r
398#define EFI_IFR_BANNER_ALIGN_RIGHT 2\r
399#define EFI_IFR_BANNER_TIMEOUT 0xFF\r
61789197 400\r
401#pragma pack()\r
402\r
403#endif\r