--- /dev/null
+\r
+/** @file\r
+ This file defines the encoding for the VFR (Visual Form Representation) language.\r
+ Framework IFR is primarily consumed by the EFI presentation engine, and produced by EFI\r
+ internal application and drivers as well as all add-in card option-ROM drivers\r
+\r
+ Copyright (c) 2007, Intel Corporation \r
+ All rights reserved. This program and the accompanying materials \r
+ are licensed and made available under the terms and conditions of the BSD License \r
+ which accompanies this distribution. The full text of the license may be found at \r
+ http://opensource.org/licenses/bsd-license.php \r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+ @par Revision Reference:\r
+ These definitions are from Framework Specification HII 0.92.\r
+\r
+**/\r
+\r
+#ifndef __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__\r
+#define __FRAMEWORK_INTERNAL_FORMREPRESENTATION_H__\r
+\r
+\r
+\r
+//\r
+// IFR Op codes\r
+//\r
+#define FRAMEWORK_EFI_IFR_FORM_OP 0x01\r
+#define FRAMEWORK_EFI_IFR_SUBTITLE_OP 0x02\r
+#define FRAMEWORK_EFI_IFR_TEXT_OP 0x03\r
+#define FRAMEWORK_EFI_IFR_GRAPHIC_OP 0x04\r
+#define FRAMEWORK_EFI_IFR_ONE_OF_OP 0x05\r
+#define FRAMEWORK_EFI_IFR_CHECKBOX_OP 0x06\r
+#define FRAMEWORK_EFI_IFR_NUMERIC_OP 0x07\r
+#define FRAMEWORK_EFI_IFR_PASSWORD_OP 0x08\r
+#define FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP 0x09 // ONEOF OPTION field\r
+#define FRAMEWORK_EFI_IFR_SUPPRESS_IF_OP 0x0A\r
+#define FRAMEWORK_EFI_IFR_END_FORM_OP 0x0B\r
+#define FRAMEWORK_EFI_IFR_HIDDEN_OP 0x0C\r
+#define FRAMEWORK_EFI_IFR_END_FORM_SET_OP 0x0D\r
+#define FRAMEWORK_EFI_IFR_FORM_SET_OP 0x0E\r
+#define FRAMEWORK_EFI_IFR_REF_OP 0x0F\r
+#define FRAMEWORK_EFI_IFR_END_ONE_OF_OP 0x10\r
+#define FRAMEWORK_EFI_IFR_END_OP FRAMEWORK_EFI_IFR_END_ONE_OF_OP\r
+#define FRAMEWORK_EFI_IFR_INCONSISTENT_IF_OP 0x11\r
+#define FRAMEWORK_EFI_IFR_EQ_ID_VAL_OP 0x12\r
+#define FRAMEWORK_EFI_IFR_EQ_ID_ID_OP 0x13\r
+#define FRAMEWORK_EFI_IFR_EQ_ID_LIST_OP 0x14\r
+#define FRAMEWORK_EFI_IFR_AND_OP 0x15\r
+#define FRAMEWORK_EFI_IFR_OR_OP 0x16\r
+#define FRAMEWORK_EFI_IFR_NOT_OP 0x17\r
+#define FRAMEWORK_EFI_IFR_END_IF_OP 0x18 // for endif of inconsistentif, suppressif, grayoutif\r
+#define FRAMEWORK_EFI_IFR_GRAYOUT_IF_OP 0x19\r
+#define FRAMEWORK_EFI_IFR_DATE_OP 0x1A\r
+#define FRAMEWORK_EFI_IFR_TIME_OP 0x1B\r
+#define FRAMEWORK_EFI_IFR_STRING_OP 0x1C\r
+#define FRAMEWORK_EFI_IFR_LABEL_OP 0x1D\r
+#define FRAMEWORK_EFI_IFR_SAVE_DEFAULTS_OP 0x1E\r
+#define FRAMEWORK_EFI_IFR_RESTORE_DEFAULTS_OP 0x1F\r
+#define FRAMEWORK_EFI_IFR_BANNER_OP 0x20\r
+#define FRAMEWORK_EFI_IFR_INVENTORY_OP 0x21\r
+#define FRAMEWORK_EFI_IFR_EQ_VAR_VAL_OP 0x22\r
+#define FRAMEWORK_EFI_IFR_ORDERED_LIST_OP 0x23\r
+#define FRAMEWORK_EFI_IFR_VARSTORE_OP 0x24\r
+#define FRAMEWORK_EFI_IFR_VARSTORE_SELECT_OP 0x25\r
+#define FRAMEWORK_EFI_IFR_VARSTORE_SELECT_PAIR_OP 0x26\r
+#define FRAMEWORK_EFI_IFR_TRUE_OP 0x27\r
+#define FRAMEWORK_EFI_IFR_FALSE_OP 0x28\r
+#define FRAMEWORK_EFI_IFR_GT_OP 0x29\r
+#define FRAMEWORK_EFI_IFR_GE_OP 0x2A\r
+#define FRAMEWORK_EFI_IFR_OEM_DEFINED_OP 0x2B\r
+#define FRAMEWORK_EFI_IFR_LAST_OPCODE FRAMEWORK_EFI_IFR_OEM_DEFINED_OP\r
+#define FRAMEWORK_EFI_IFR_OEM_OP 0xFE\r
+#define FRAMEWORK_EFI_IFR_NV_ACCESS_COMMAND 0xFF\r
+\r
+//\r
+// Define values for the flags fields in some VFR opcodes. These are\r
+// bitmasks.\r
+//\r
+#define FRAMEWORK_EFI_IFR_FLAG_DEFAULT 0x01\r
+#define FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING 0x02\r
+#define FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE 0x04\r
+#define FRAMEWORK_EFI_IFR_FLAG_NV_ACCESS 0x08\r
+#define FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED 0x10\r
+#define FRAMEWORK_EFI_IFR_FLAG_LATE_CHECK 0x20\r
+\r
+#define EFI_NON_DEVICE_CLASS 0x00 // Useful when you do not want something in the Device Manager\r
+#define EFI_DISK_DEVICE_CLASS 0x01\r
+#define EFI_VIDEO_DEVICE_CLASS 0x02\r
+#define EFI_NETWORK_DEVICE_CLASS 0x04\r
+#define EFI_INPUT_DEVICE_CLASS 0x08\r
+#define EFI_ON_BOARD_DEVICE_CLASS 0x10\r
+#define EFI_OTHER_DEVICE_CLASS 0x20\r
+\r
+#define EFI_SETUP_APPLICATION_SUBCLASS 0x00\r
+#define EFI_GENERAL_APPLICATION_SUBCLASS 0x01\r
+#define EFI_FRONT_PAGE_SUBCLASS 0x02\r
+#define EFI_SINGLE_USE_SUBCLASS 0x03 // Used to display a single entity and then exit\r
+\r
+//\r
+// Used to flag dynamically created op-codes. This is meaningful to the IFR Library set\r
+// and the browser since we need to distinguish between compiled NV map data and created data.\r
+// We do not allow new entries to be created in the NV map dynamically however we still need\r
+// to display this information correctly. To dynamically create op-codes and assume that their\r
+// data will be saved, ensure that the NV starting location they refer to is pre-defined in the\r
+// NV map.\r
+//\r
+#define FRAMEWORK_EFI_IFR_FLAG_CREATED 128\r
+\r
+\r
+#pragma pack(1)\r
+//\r
+// IFR Structure definitions\r
+//\r
+typedef struct {\r
+ UINT8 OpCode;\r
+ UINT8 Length;\r
+} FRAMEWORK_EFI_IFR_OP_HEADER;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ EFI_GUID Guid;\r
+ STRING_REF FormSetTitle;\r
+ STRING_REF Help;\r
+ EFI_PHYSICAL_ADDRESS CallbackHandle;\r
+ UINT16 Class;\r
+ UINT16 SubClass;\r
+ UINT16 NvDataSize; // set once, size of the NV data as defined in the script\r
+} FRAMEWORK_EFI_IFR_FORM_SET;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 FormId;\r
+ STRING_REF FormTitle;\r
+} FRAMEWORK_EFI_IFR_FORM;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 LabelId;\r
+} FRAMEWORK_EFI_IFR_LABEL;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF SubTitle;\r
+} FRAMEWORK_EFI_IFR_SUBTITLE;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF Help;\r
+ STRING_REF Text;\r
+ STRING_REF TextTwo;\r
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+} FRAMEWORK_EFI_IFR_TEXT;\r
+\r
+//\r
+// goto\r
+//\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 FormId;\r
+ STRING_REF Prompt;\r
+ STRING_REF Help; // The string Token for the context-help\r
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+} FRAMEWORK_EFI_IFR_REF;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_END_FORM;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_END_FORM_SET;\r
+\r
+//\r
+// Also notice that the IFR_ONE_OF and IFR_CHECK_BOX are identical in structure......code assumes this to be true, if this ever\r
+// changes we need to revisit the InitializeTagStructures code\r
+//\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name\r
+ UINT8 Width; // The Size of the Data being saved\r
+ STRING_REF Prompt; // The String Token for the Prompt\r
+ STRING_REF Help; // The string Token for the context-help\r
+} FRAMEWORK_EFI_IFR_ONE_OF;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The offset in NV for storage of the data\r
+ UINT8 MaxEntries; // The maximum number of options in the ordered list (=size of NVStore)\r
+ STRING_REF Prompt; // The string token for the prompt\r
+ STRING_REF Help; // The string token for the context-help\r
+} FRAMEWORK_EFI_IFR_ORDERED_LIST;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name\r
+ UINT8 Width; // The Size of the Data being saved\r
+ STRING_REF Prompt; // The String Token for the Prompt\r
+ STRING_REF Help; // The string Token for the context-help\r
+ UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+} FRAMEWORK_EFI_IFR_CHECKBOX, FRAMEWORK_EFI_IFR_CHECK_BOX;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF Option; // The string token describing the option\r
+ UINT16 Value; // The value associated with this option that is stored in the NVRAM if chosen\r
+ UINT8 Flags; // For now, if non-zero, means that it is the default option, - further definition likely above\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+} FRAMEWORK_EFI_IFR_ONE_OF_OPTION;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name\r
+ UINT8 Width; // The Size of the Data being saved\r
+ STRING_REF Prompt; // The String Token for the Prompt\r
+ STRING_REF Help; // The string Token for the context-help\r
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+ UINT16 Minimum;\r
+ UINT16 Maximum;\r
+ UINT16 Step; // If step is 0, then manual input is specified, otherwise, left/right arrow selection is called for\r
+ UINT16 Default;\r
+} FRAMEWORK_EFI_IFR_NUMERIC;\r
+\r
+//\r
+// There is an interesting twist with regards to Time and Date. This is one of the few items which can accept input from\r
+// a user, however may or may not need to use storage in the NVRAM space. The decided method for determining if NVRAM space\r
+// will be used (only for a TimeOp or DateOp) is: If .QuestionId == 0 && .Width == 0 (normally an impossibility) then use system\r
+// resources to store the data away and not NV resources. In other words, the setup engine will call gRT->SetTime, and gRT->SetDate\r
+// for the saving of data, and the values displayed will be from the gRT->GetXXXX series of calls.\r
+//\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_NUMERIC Hour;\r
+ FRAMEWORK_EFI_IFR_NUMERIC Minute;\r
+ FRAMEWORK_EFI_IFR_NUMERIC Second;\r
+} FRAMEWORK_EFI_IFR_TIME;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_NUMERIC Year;\r
+ FRAMEWORK_EFI_IFR_NUMERIC Month;\r
+ FRAMEWORK_EFI_IFR_NUMERIC Day;\r
+} FRAMEWORK_EFI_IFR_DATE;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name\r
+ UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday\r
+ STRING_REF Prompt; // The String Token for the Prompt\r
+ STRING_REF Help; // The string Token for the context-help\r
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+ UINT8 MinSize; // Minimum allowable sized password\r
+ UINT8 MaxSize; // Maximum allowable sized password\r
+ UINT16 Encoding;\r
+} FRAMEWORK_EFI_IFR_PASSWORD;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // The ID designating what the question is about...sucked in from a #define, likely in the form of a variable name\r
+ UINT8 Width; // The Size of the Data being saved -- BUGBUG -- remove someday\r
+ STRING_REF Prompt; // The String Token for the Prompt\r
+ STRING_REF Help; // The string Token for the context-help\r
+ UINT8 Flags; // This is included solely for purposes of interactive/dynamic support.\r
+ UINT16 Key; // Value to be passed to caller to identify this particular op-code\r
+ UINT8 MinSize; // Minimum allowable sized password\r
+ UINT8 MaxSize; // Maximum allowable sized password\r
+} FRAMEWORK_EFI_IFR_STRING;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_END_ONE_OF;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 Value;\r
+ UINT16 Key;\r
+} FRAMEWORK_EFI_IFR_HIDDEN;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT8 Flags;\r
+} FRAMEWORK_EFI_IFR_SUPPRESS;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT8 Flags;\r
+} FRAMEWORK_EFI_IFR_GRAY_OUT;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF Popup;\r
+ UINT8 Flags;\r
+} FRAMEWORK_EFI_IFR_INCONSISTENT;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // offset into variable storage\r
+ UINT8 Width; // size of variable storage\r
+ UINT16 Value; // value to compare against\r
+} FRAMEWORK_EFI_IFR_EQ_ID_VAL;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId; // offset into variable storage\r
+ UINT8 Width; // size of variable storage\r
+ UINT16 ListLength;\r
+ UINT16 ValueList[1];\r
+} FRAMEWORK_EFI_IFR_EQ_ID_LIST;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 QuestionId1; // offset into variable storage for first value to compare\r
+ UINT8 Width; // size of variable storage (must be same for both)\r
+ UINT16 QuestionId2; // offset into variable storage for second value to compare\r
+} FRAMEWORK_EFI_IFR_EQ_ID_ID;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 VariableId; // offset into variable storage\r
+ UINT16 Value; // value to compare against\r
+} FRAMEWORK_EFI_IFR_EQ_VAR_VAL;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_AND;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_OR;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_NOT;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_END_EXPR, FRAMEWORK_EFI_IFR_END_IF;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 FormId;\r
+ STRING_REF Prompt;\r
+ STRING_REF Help;\r
+ UINT8 Flags;\r
+ UINT16 Key;\r
+} FRAMEWORK_EFI_IFR_SAVE_DEFAULTS;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF Help;\r
+ STRING_REF Text;\r
+ STRING_REF TextTwo; // optional text\r
+} FRAMEWORK_EFI_IFR_INVENTORY;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ EFI_GUID Guid; // GUID for the variable\r
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form\r
+ UINT16 Size; // size of the variable storage\r
+} FRAMEWORK_EFI_IFR_VARSTORE;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form\r
+} FRAMEWORK_EFI_IFR_VARSTORE_SELECT;\r
+\r
+//\r
+// Used for the ideqid VFR statement where two variable stores may be referenced in the\r
+// same VFR statement.\r
+// A browser should treat this as an FRAMEWORK_EFI_IFR_VARSTORE_SELECT statement and assume that all following\r
+// IFR opcodes use the VarId as defined here.\r
+//\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ UINT16 VarId; // variable store ID, as referenced elsewhere in the form\r
+ UINT16 SecondaryVarId; // variable store ID, as referenced elsewhere in the form\r
+} FRAMEWORK_EFI_IFR_VARSTORE_SELECT_PAIR;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_TRUE;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_FALSE;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_GT;\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+} FRAMEWORK_EFI_IFR_GE;\r
+\r
+//\r
+// Save defaults and restore defaults have same structure\r
+//\r
+#define FRAMEWORK_EFI_IFR_RESTORE_DEFAULTS FRAMEWORK_EFI_IFR_SAVE_DEFAULTS\r
+\r
+typedef struct {\r
+ FRAMEWORK_EFI_IFR_OP_HEADER Header;\r
+ STRING_REF Title; // The string token for the banner title\r
+ UINT16 LineNumber; // 1-based line number\r
+ UINT8 Alignment; // left, center, or right-aligned\r
+} FRAMEWORK_EFI_IFR_BANNER;\r
+\r
+#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_LEFT 0\r
+#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_CENTER 1\r
+#define FRAMEWORK_EFI_IFR_BANNER_ALIGN_RIGHT 2\r
+#define FRAMEWORK_EFI_IFR_BANNER_TIMEOUT 0xFF\r
+\r
+#pragma pack()\r
+\r
+#endif\r