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