1 /*++ 2 3 Copyright (c) 2004 - 2005, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 EfiInternalFormRepresentation.h 15 16 Abstract: 17 18 This file defines the encoding for the VFR (Visual Form Representation) language. 19 IFR is primarily consumed by the EFI presentation engine, and produced by EFI 20 internal application and drivers as well as all add-in card option-ROM drivers 21 22 --*/ 23 24 #ifndef _EFI_INTERNAL_FORM_REPRESENTATION_H_ 25 #define _EFI_INTERNAL_FORM_REPRESENTATION_H_ 26 27 // 28 // The following types are currently defined: 29 // 30 typedef UINT32 RELOFST; 31 typedef UINT16 STRING_REF; 32 typedef CHAR16 *EFI_STRING; 33 34 // 35 // IFR Op codes 36 // 37 #define EFI_IFR_FORM_OP 0x01 38 #define EFI_IFR_SUBTITLE_OP 0x02 39 #define EFI_IFR_TEXT_OP 0x03 40 #define EFI_IFR_GRAPHIC_OP 0x04 41 #define EFI_IFR_ONE_OF_OP 0x05 42 #define EFI_IFR_CHECKBOX_OP 0x06 43 #define EFI_IFR_NUMERIC_OP 0x07 44 #define EFI_IFR_PASSWORD_OP 0x08 45 #define EFI_IFR_ONE_OF_OPTION_OP 0x09 // ONEOF OPTION field 46 #define EFI_IFR_SUPPRESS_IF_OP 0x0A 47 #define EFI_IFR_END_FORM_OP 0x0B 48 #define EFI_IFR_HIDDEN_OP 0x0C 49 #define EFI_IFR_END_FORM_SET_OP 0x0D 50 #define EFI_IFR_FORM_SET_OP 0x0E 51 #define EFI_IFR_REF_OP 0x0F 52 #define EFI_IFR_END_ONE_OF_OP 0x10 53 #define EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP 54 #define EFI_IFR_INCONSISTENT_IF_OP 0x11 55 #define EFI_IFR_EQ_ID_VAL_OP 0x12 56 #define EFI_IFR_EQ_ID_ID_OP 0x13 57 #define EFI_IFR_EQ_ID_LIST_OP 0x14 58 #define EFI_IFR_AND_OP 0x15 59 #define EFI_IFR_OR_OP 0x16 60 #define EFI_IFR_NOT_OP 0x17 61 #define EFI_IFR_END_IF_OP 0x18 // for endif of inconsistentif, suppressif, grayoutif 62 #define EFI_IFR_GRAYOUT_IF_OP 0x19 63 #define EFI_IFR_DATE_OP 0x1A 64 #define EFI_IFR_TIME_OP 0x1B 65 #define EFI_IFR_STRING_OP 0x1C 66 #define EFI_IFR_LABEL_OP 0x1D 67 #define EFI_IFR_SAVE_DEFAULTS_OP 0x1E 68 #define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F 69 #define EFI_IFR_BANNER_OP 0x20 70 #define EFI_IFR_INVENTORY_OP 0x21 71 #define EFI_IFR_EQ_VAR_VAL_OP 0x22 72 #define EFI_IFR_ORDERED_LIST_OP 0x23 73 #define EFI_IFR_VARSTORE_OP 0x24 74 #define EFI_IFR_VARSTORE_SELECT_OP 0x25 75 #define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26 76 #define EFI_IFR_TRUE_OP 0x27 77 #define EFI_IFR_FALSE_OP 0x28 78 #define EFI_IFR_GT_OP 0x29 79 #define EFI_IFR_GE_OP 0x2A 80 #define EFI_IFR_OEM_DEFINED_OP 0x2B 81 #define EFI_IFR_LAST_OPCODE EFI_IFR_OEM_DEFINED_OP 82 #define EFI_IFR_OEM_OP 0xFE 83 #define EFI_IFR_NV_ACCESS_COMMAND 0xFF 84 85 // 86 // Define values for the flags fields in some VFR opcodes. These are 87 // bitmasks. 88 // 89 #define EFI_IFR_FLAG_DEFAULT 0x01 90 #define EFI_IFR_FLAG_MANUFACTURING 0x02 91 #define EFI_IFR_FLAG_INTERACTIVE 0x04 92 #define EFI_IFR_FLAG_NV_ACCESS 0x08 93 #define EFI_IFR_FLAG_RESET_REQUIRED 0x10 94 #define EFI_IFR_FLAG_LATE_CHECK 0x20 95 96 #define EFI_NON_DEVICE_CLASS 0x00 // Useful when you do not want something in the Device Manager 97 #define EFI_DISK_DEVICE_CLASS 0x01 98 #define EFI_VIDEO_DEVICE_CLASS 0x02 99 #define EFI_NETWORK_DEVICE_CLASS 0x04 100 #define EFI_INPUT_DEVICE_CLASS 0x08 101 #define EFI_ON_BOARD_DEVICE_CLASS 0x10 102 #define EFI_OTHER_DEVICE_CLASS 0x20 103 104 #define EFI_SETUP_APPLICATION_SUBCLASS 0x00 105 #define EFI_GENERAL_APPLICATION_SUBCLASS 0x01 106 #define EFI_FRONT_PAGE_SUBCLASS 0x02 107 #define EFI_SINGLE_USE_SUBCLASS 0x03 // Used to display a single entity and then exit 108 // 109 // Used to flag dynamically created op-codes. This is meaningful to the IFR Library set 110 // and the browser since we need to distinguish between compiled NV map data and created data. 111 // We do not allow new entries to be created in the NV map dynamically however we still need 112 // to display this information correctly. To dynamically create op-codes and assume that their 113 // data will be saved, ensure that the NV starting location they refer to is pre-defined in the 114 // NV map. 115 // 116 #define EFI_IFR_FLAG_CREATED 128 117 118 #pragma pack(1) 119 // 120 // IFR Structure definitions 121 // 122 typedef struct { 123 UINT8 OpCode; 124 UINT8 Length; 125 } EFI_IFR_OP_HEADER; 126 127 typedef struct { 128 EFI_IFR_OP_HEADER Header; 129 EFI_GUID Guid; 130 STRING_REF FormSetTitle; 131 STRING_REF Help; 132 EFI_PHYSICAL_ADDRESS CallbackHandle; 133 UINT16 Class; 134 UINT16 SubClass; 135 UINT16 NvDataSize; // set once, size of the NV data as defined in the script 136 } EFI_IFR_FORM_SET; 137 138 typedef struct { 139 EFI_IFR_OP_HEADER Header; 140 UINT16 FormId; 141 STRING_REF FormTitle; 142 } EFI_IFR_FORM; 143 144 typedef struct { 145 EFI_IFR_OP_HEADER Header; 146 UINT16 LabelId; 147 } EFI_IFR_LABEL; 148 149 typedef struct { 150 EFI_IFR_OP_HEADER Header; 151 STRING_REF SubTitle; 152 } EFI_IFR_SUBTITLE; 153 154 typedef struct { 155 EFI_IFR_OP_HEADER Header; 156 STRING_REF Help; 157 STRING_REF Text; 158 STRING_REF TextTwo; 159 UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 160 UINT16 Key; // Value to be passed to caller to identify this particular op-code 161 } EFI_IFR_TEXT; 162 163 // 164 // goto 165 // 166 typedef struct { 167 EFI_IFR_OP_HEADER Header; 168 UINT16 FormId; 169 STRING_REF Prompt; 170 STRING_REF Help; // The string Token for the context-help 171 UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 172 UINT16 Key; // Value to be passed to caller to identify this particular op-code 173 } EFI_IFR_REF; 174 175 typedef struct { 176 EFI_IFR_OP_HEADER Header; 177 } EFI_IFR_END_FORM; 178 179 typedef struct { 180 EFI_IFR_OP_HEADER Header; 181 } EFI_IFR_END_FORM_SET; 182 183 // 184 // Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......code assumes this to be true, if this ever 185 // changes we need to revisit the InitializeTagStructures code 186 // 187 typedef struct { 188 EFI_IFR_OP_HEADER Header; 189 UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 190 UINT8 Width; // The Size of the Data being saved 191 STRING_REF Prompt; // The String Token for the Prompt 192 STRING_REF Help; // The string Token for the context-help 193 } EFI_IFR_ONE_OF; 194 195 typedef struct { 196 EFI_IFR_OP_HEADER Header; 197 UINT16 QuestionId; // The offset in NV for storage of the data 198 UINT8 MaxEntries; // The maximum number of options in the ordered list (=size of NVStore) 199 STRING_REF Prompt; // The string token for the prompt 200 STRING_REF Help; // The string token for the context-help 201 } EFI_IFR_ORDERED_LIST; 202 203 typedef struct { 204 EFI_IFR_OP_HEADER Header; 205 UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 206 UINT8 Width; // The Size of the Data being saved 207 STRING_REF Prompt; // The String Token for the Prompt 208 STRING_REF Help; // The string Token for the context-help 209 UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely 210 UINT16 Key; // Value to be passed to caller to identify this particular op-code 211 } EFI_IFR_CHECK_BOX; 212 213 typedef struct { 214 EFI_IFR_OP_HEADER Header; 215 STRING_REF Option; // The string token describing the option 216 UINT16 Value; // The value associated with this option that is stored in the NVRAM if chosen 217 UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely above 218 UINT16 Key; // Value to be passed to caller to identify this particular op-code 219 } EFI_IFR_ONE_OF_OPTION; 220 221 typedef struct { 222 EFI_IFR_OP_HEADER Header; 223 UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 224 UINT8 Width; // The Size of the Data being saved 225 STRING_REF Prompt; // The String Token for the Prompt 226 STRING_REF Help; // The string Token for the context-help 227 UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 228 UINT16 Key; // Value to be passed to caller to identify this particular op-code 229 UINT16 Minimum; 230 UINT16 Maximum; 231 UINT16 Step; // If step is 0, then manual input is specified, otherwise, left/right arrow selection is called for 232 UINT16 Default; 233 } EFI_IFR_NUMERIC; 234 235 // 236 // There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input from 237 // a user, however may or may not need to use storage in the NVRAM space. The decided method for determining if NVRAM space 238 // will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an impossibility) then use system 239 // resources to store the data away and not NV resources. In other words, the setup engine will call gRT->SetTime, and gRT->SetDate 240 // for the saving of data, and the values displayed will be from the gRT->GetXXXX series of calls. 241 // 242 typedef struct { 243 EFI_IFR_NUMERIC Hour; 244 EFI_IFR_NUMERIC Minute; 245 EFI_IFR_NUMERIC Second; 246 } EFI_IFR_TIME; 247 248 typedef struct { 249 EFI_IFR_NUMERIC Year; 250 EFI_IFR_NUMERIC Month; 251 EFI_IFR_NUMERIC Day; 252 } EFI_IFR_DATE; 253 254 typedef struct { 255 EFI_IFR_OP_HEADER Header; 256 UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 257 UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday 258 STRING_REF Prompt; // The String Token for the Prompt 259 STRING_REF Help; // The string Token for the context-help 260 UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 261 UINT16 Key; // Value to be passed to caller to identify this particular op-code 262 UINT8 MinSize; // Minimum allowable sized password 263 UINT8 MaxSize; // Maximum allowable sized password 264 UINT16 Encoding; 265 } EFI_IFR_PASSWORD; 266 267 typedef struct { 268 EFI_IFR_OP_HEADER Header; 269 UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 270 UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday 271 STRING_REF Prompt; // The String Token for the Prompt 272 STRING_REF Help; // The string Token for the context-help 273 UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 274 UINT16 Key; // Value to be passed to caller to identify this particular op-code 275 UINT8 MinSize; // Minimum allowable sized password 276 UINT8 MaxSize; // Maximum allowable sized password 277 } EFI_IFR_STRING; 278 279 typedef struct { 280 EFI_IFR_OP_HEADER Header; 281 } EFI_IFR_END_ONE_OF; 282 283 typedef struct { 284 EFI_IFR_OP_HEADER Header; 285 UINT16 Value; 286 UINT16 Key; 287 } EFI_IFR_HIDDEN; 288 289 typedef struct { 290 EFI_IFR_OP_HEADER Header; 291 UINT8 Flags; 292 } EFI_IFR_SUPPRESS; 293 294 typedef struct { 295 EFI_IFR_OP_HEADER Header; 296 UINT8 Flags; 297 } EFI_IFR_GRAYOUT; 298 299 typedef struct { 300 EFI_IFR_OP_HEADER Header; 301 STRING_REF Popup; 302 UINT8 Flags; 303 } EFI_IFR_INCONSISTENT; 304 305 typedef struct { 306 EFI_IFR_OP_HEADER Header; 307 UINT16 QuestionId; // offset into variable storage 308 UINT8 Width; // size of variable storage 309 UINT16 Value; // value to compare against 310 } EFI_IFR_EQ_ID_VAL; 311 312 typedef struct { 313 EFI_IFR_OP_HEADER Header; 314 UINT16 QuestionId; // offset into variable storage 315 UINT8 Width; // size of variable storage 316 UINT16 ListLength; 317 UINT16 ValueList[1]; 318 } EFI_IFR_EQ_ID_LIST; 319 320 typedef struct { 321 EFI_IFR_OP_HEADER Header; 322 UINT16 QuestionId1; // offset into variable storage for first value to compare 323 UINT8 Width; // size of variable storage (must be same for both) 324 UINT16 QuestionId2; // offset into variable storage for second value to compare 325 } EFI_IFR_EQ_ID_ID; 326 327 typedef struct { 328 EFI_IFR_OP_HEADER Header; 329 UINT16 VariableId; // offset into variable storage 330 UINT16 Value; // value to compare against 331 } EFI_IFR_EQ_VAR_VAL; 332 333 typedef struct { 334 EFI_IFR_OP_HEADER Header; 335 } EFI_IFR_AND; 336 337 typedef struct { 338 EFI_IFR_OP_HEADER Header; 339 } EFI_IFR_OR; 340 341 typedef struct { 342 EFI_IFR_OP_HEADER Header; 343 } EFI_IFR_NOT; 344 345 typedef struct { 346 EFI_IFR_OP_HEADER Header; 347 } EFI_IFR_END_IF; 348 349 typedef struct { 350 EFI_IFR_OP_HEADER Header; 351 UINT16 FormId; 352 STRING_REF Prompt; 353 STRING_REF Help; 354 UINT8 Flags; 355 UINT16 Key; 356 } EFI_IFR_SAVE_DEFAULTS; 357 358 typedef struct { 359 EFI_IFR_OP_HEADER Header; 360 STRING_REF Help; 361 STRING_REF Text; 362 STRING_REF TextTwo; // optional text 363 } EFI_IFR_INVENTORY; 364 365 typedef struct { 366 EFI_IFR_OP_HEADER Header; 367 EFI_GUID Guid; // GUID for the variable 368 UINT16 VarId; // variable store ID, as referenced elsewhere in the form 369 UINT16 Size; // size of the variable storage 370 } EFI_IFR_VARSTORE; 371 372 typedef struct { 373 EFI_IFR_OP_HEADER Header; 374 UINT16 VarId; // variable store ID, as referenced elsewhere in the form 375 } EFI_IFR_VARSTORE_SELECT; 376 377 // 378 // Used for the ideqid VFR statement where two variable stores may be referenced in the 379 // same VFR statement. 380 // A browser should treat this as an EFI_IFR_VARSTORE_SELECT statement and assume that all following 381 // IFR opcodes use the VarId as defined here. 382 // 383 typedef struct { 384 EFI_IFR_OP_HEADER Header; 385 UINT16 VarId; // variable store ID, as referenced elsewhere in the form 386 UINT16 SecondaryVarId; // variable store ID, as referenced elsewhere in the form 387 } EFI_IFR_VARSTORE_SELECT_PAIR; 388 389 typedef struct { 390 EFI_IFR_OP_HEADER Header; 391 } EFI_IFR_TRUE; 392 393 typedef struct { 394 EFI_IFR_OP_HEADER Header; 395 } EFI_IFR_FALSE; 396 397 typedef struct { 398 EFI_IFR_OP_HEADER Header; 399 } EFI_IFR_GT; 400 401 typedef struct { 402 EFI_IFR_OP_HEADER Header; 403 } EFI_IFR_GE; 404 405 // 406 // Save defaults and restore defaults have same structure 407 // 408 #define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS 409 410 typedef struct { 411 EFI_IFR_OP_HEADER Header; 412 STRING_REF Title; // The string token for the banner title 413 UINT16 LineNumber; // 1-based line number 414 UINT8 Alignment; // left, center, or right-aligned 415 } EFI_IFR_BANNER; 416 417 typedef struct { 418 EFI_IFR_OP_HEADER Header; 419 UINT16 QuestionId; // Offset into the map 420 UINT8 StorageWidth; // Width of the value 421 CHAR8 Data[1]; // The Data itself 422 } EFI_IFR_NV_DATA; 423 424 #define EFI_IFR_BANNER_ALIGN_LEFT 0 425 #define EFI_IFR_BANNER_ALIGN_CENTER 1 426 #define EFI_IFR_BANNER_ALIGN_RIGHT 2 427 #define EFI_IFR_BANNER_TIMEOUT 0xFF 428 429 #pragma pack() 430 431 #endif 432