13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3f57387d54bd8f2c0261834b2ad16155f1db63291hhtianCopyright (c) 2004 - 2005, Intel Corporation. All rights reserved.<BR> 4f57387d54bd8f2c0261834b2ad16155f1db63291hhtianThis program and the accompanying materials 53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License 63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution. The full text of the license may be found at 73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php 83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name: 133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EfiInternalFormRepresentation.h 153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract: 173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang This file defines the encoding for the VFR (Visual Form Representation) language. 193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IFR is primarily consumed by the EFI presentation engine, and produced by EFI 203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang internal application and drivers as well as all add-in card option-ROM drivers 213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef _EFI_INTERNAL_FORM_REPRESENTATION_H_ 253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define _EFI_INTERNAL_FORM_REPRESENTATION_H_ 263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// The following types are currently defined: 293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT32 RELOFST; 313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef UINT16 STRING_REF; 323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef CHAR16 *EFI_STRING; 333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// IFR Op codes 363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FORM_OP 0x01 383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_SUBTITLE_OP 0x02 393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_TEXT_OP 0x03 403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_GRAPHIC_OP 0x04 413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_ONE_OF_OP 0x05 423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_CHECKBOX_OP 0x06 433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_NUMERIC_OP 0x07 443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_PASSWORD_OP 0x08 453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_ONE_OF_OPTION_OP 0x09 // ONEOF OPTION field 463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_SUPPRESS_IF_OP 0x0A 473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_END_FORM_OP 0x0B 483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_HIDDEN_OP 0x0C 493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_END_FORM_SET_OP 0x0D 503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FORM_SET_OP 0x0E 513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_REF_OP 0x0F 523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_END_ONE_OF_OP 0x10 533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_END_OP EFI_IFR_END_ONE_OF_OP 543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_INCONSISTENT_IF_OP 0x11 553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_EQ_ID_VAL_OP 0x12 563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_EQ_ID_ID_OP 0x13 573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_EQ_ID_LIST_OP 0x14 583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_AND_OP 0x15 593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_OR_OP 0x16 603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_NOT_OP 0x17 613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_END_IF_OP 0x18 // for endif of inconsistentif, suppressif, grayoutif 623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_GRAYOUT_IF_OP 0x19 633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_DATE_OP 0x1A 643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_TIME_OP 0x1B 653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_STRING_OP 0x1C 663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_LABEL_OP 0x1D 673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_SAVE_DEFAULTS_OP 0x1E 683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_RESTORE_DEFAULTS_OP 0x1F 693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_BANNER_OP 0x20 703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_INVENTORY_OP 0x21 713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_EQ_VAR_VAL_OP 0x22 723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_ORDERED_LIST_OP 0x23 733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_VARSTORE_OP 0x24 743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_VARSTORE_SELECT_OP 0x25 753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26 763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_TRUE_OP 0x27 773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FALSE_OP 0x28 783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_GT_OP 0x29 793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_GE_OP 0x2A 803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_OEM_DEFINED_OP 0x2B 813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_LAST_OPCODE EFI_IFR_OEM_DEFINED_OP 823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_OEM_OP 0xFE 833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_NV_ACCESS_COMMAND 0xFF 843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Define values for the flags fields in some VFR opcodes. These are 873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// bitmasks. 883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_DEFAULT 0x01 903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_MANUFACTURING 0x02 913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_INTERACTIVE 0x04 923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_NV_ACCESS 0x08 933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_LATE_CHECK 0x20 953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_NON_DEVICE_CLASS 0x00 // Useful when you do not want something in the Device Manager 973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_DISK_DEVICE_CLASS 0x01 983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_VIDEO_DEVICE_CLASS 0x02 993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_NETWORK_DEVICE_CLASS 0x04 1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_INPUT_DEVICE_CLASS 0x08 1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_ON_BOARD_DEVICE_CLASS 0x10 1023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_OTHER_DEVICE_CLASS 0x20 1033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SETUP_APPLICATION_SUBCLASS 0x00 1053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_GENERAL_APPLICATION_SUBCLASS 0x01 1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_FRONT_PAGE_SUBCLASS 0x02 1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SINGLE_USE_SUBCLASS 0x03 // Used to display a single entity and then exit 1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set 1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// and the browser since we need to distinguish between compiled NV map data and created data. 1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// We do not allow new entries to be created in the NV map dynamically however we still need 1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// to display this information correctly. To dynamically create op-codes and assume that their 1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// data will be saved, ensure that the NV starting location they refer to is pre-defined in the 1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// NV map. 1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_FLAG_CREATED 128 1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack(1) 1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// IFR Structure definitions 1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 OpCode; 1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Length; 1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_OP_HEADER; 1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_GUID Guid; 1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF FormSetTitle; 1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; 1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_PHYSICAL_ADDRESS CallbackHandle; 1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Class; 1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 SubClass; 1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 NvDataSize; // set once, size of the NV data as defined in the script 1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_FORM_SET; 1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 FormId; 1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF FormTitle; 1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_FORM; 1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 LabelId; 1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_LABEL; 1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF SubTitle; 1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_SUBTITLE; 1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; 1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Text; 1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF TextTwo; 1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_TEXT; 1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// goto 1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 FormId; 1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; 1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_REF; 1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_END_FORM; 1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_END_FORM_SET; 1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......code assumes this to be true, if this ever 1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// changes we need to revisit the InitializeTagStructures code 1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // The Size of the Data being saved 1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The String Token for the Prompt 1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_ONE_OF; 1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 1973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The offset in NV for storage of the data 1983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 MaxEntries; // The maximum number of options in the ordered list (=size of NVStore) 1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The string token for the prompt 2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string token for the context-help 2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_ORDERED_LIST; 2023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // The Size of the Data being saved 2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The String Token for the Prompt 2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely 2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_CHECK_BOX; 2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Option; // The string token describing the option 2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Value; // The value associated with this option that is stored in the NVRAM if chosen 2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely above 2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_ONE_OF_OPTION; 2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // The Size of the Data being saved 2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The String Token for the Prompt 2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Minimum; 2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Maximum; 2313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Step; // If step is 0, then manual input is specified, otherwise, left/right arrow selection is called for 2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Default; 2333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_NUMERIC; 2343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input from 2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// a user, however may or may not need to use storage in the NVRAM space. The decided method for determining if NVRAM space 2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an impossibility) then use system 2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// resources to store the data away and not NV resources. In other words, the setup engine will call gRT->SetTime, and gRT->SetDate 2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// for the saving of data, and the values displayed will be from the gRT->GetXXXX series of calls. 2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Hour; 2443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Minute; 2453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Second; 2463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_TIME; 2473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Year; 2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Month; 2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_NUMERIC Day; 2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_DATE; 2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 2573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday 2583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The String Token for the Prompt 2593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 2603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 2613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 2623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 MinSize; // Minimum allowable sized password 2633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 MaxSize; // Maximum allowable sized password 2643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Encoding; 2653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_PASSWORD; 2663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name 2703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday 2713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; // The String Token for the Prompt 2723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; // The string Token for the context-help 2733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; // This is included solely for purposes of interactive/dynamic support. 2743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; // Value to be passed to caller to identify this particular op-code 2753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 MinSize; // Minimum allowable sized password 2763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 MaxSize; // Maximum allowable sized password 2773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_STRING; 2783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_END_ONE_OF; 2823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Value; 2863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; 2873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_HIDDEN; 2883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; 2923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_SUPPRESS; 2933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 2953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 2963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; 2973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_GRAYOUT; 2983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 2993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Popup; 3023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; 3033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_INCONSISTENT; 3043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // offset into variable storage 3083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // size of variable storage 3093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Value; // value to compare against 3103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_EQ_ID_VAL; 3113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // offset into variable storage 3153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // size of variable storage 3163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 ListLength; 3173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 ValueList[1]; 3183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_EQ_ID_LIST; 3193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId1; // offset into variable storage for first value to compare 3233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Width; // size of variable storage (must be same for both) 3243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId2; // offset into variable storage for second value to compare 3253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_EQ_ID_ID; 3263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 VariableId; // offset into variable storage 3303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Value; // value to compare against 3313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_EQ_VAR_VAL; 3323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_AND; 3363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_OR; 3403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_NOT; 3443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_END_IF; 3483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 FormId; 3523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Prompt; 3533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; 3543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Flags; 3553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Key; 3563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_SAVE_DEFAULTS; 3573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Help; 3613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Text; 3623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF TextTwo; // optional text 3633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_INVENTORY; 3643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_GUID Guid; // GUID for the variable 3683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 VarId; // variable store ID, as referenced elsewhere in the form 3693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 Size; // size of the variable storage 3703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_VARSTORE; 3713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 VarId; // variable store ID, as referenced elsewhere in the form 3753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_VARSTORE_SELECT; 3763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 3783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Used for the ideqid VFR statement where two variable stores may be referenced in the 3793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// same VFR statement. 3803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// A browser should treat this as an EFI_IFR_VARSTORE_SELECT statement and assume that all following 3813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// IFR opcodes use the VarId as defined here. 3823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 3833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 VarId; // variable store ID, as referenced elsewhere in the form 3863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 SecondaryVarId; // variable store ID, as referenced elsewhere in the form 3873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_VARSTORE_SELECT_PAIR; 3883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_TRUE; 3923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_FALSE; 3963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 3973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 3983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 3993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_GT; 4003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 4023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 4033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_GE; 4043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 4063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Save defaults and restore defaults have same structure 4073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// 4083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_RESTORE_DEFAULTS EFI_IFR_SAVE_DEFAULTS 4093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 4113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 4123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang STRING_REF Title; // The string token for the banner title 4133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 LineNumber; // 1-based line number 4143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 Alignment; // left, center, or right-aligned 4153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_BANNER; 4163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct { 4183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_IFR_OP_HEADER Header; 4193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT16 QuestionId; // Offset into the map 4203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang UINT8 StorageWidth; // Width of the value 4213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang CHAR8 Data[1]; // The Data itself 4223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_IFR_NV_DATA; 4233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_BANNER_ALIGN_LEFT 0 4253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_BANNER_ALIGN_CENTER 1 4263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_BANNER_ALIGN_RIGHT 2 4273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_IFR_BANNER_TIMEOUT 0xFF 4283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack() 4303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 4313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif 432