UEFI HII: Merge UEFI HII support changes from branch.
authorqwang12 <qwang12@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 22 Jan 2008 01:27:53 +0000 (01:27 +0000)
committerqwang12 <qwang12@de2fecce-e211-0410-80a6-f3fac2684e05>
Tue, 22 Jan 2008 01:27:53 +0000 (01:27 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@4603 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h [new file with mode: 0644]
edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.c [new file with mode: 0644]
edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.inf [new file with mode: 0644]

diff --git a/edk2/IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h b/edk2/IntelFrameworkPkg/Include/Framework/FrameworkInternalFormRepresentation.h
new file mode 100644 (file)
index 0000000..8280117
--- /dev/null
@@ -0,0 +1,418 @@
+\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
diff --git a/edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.c b/edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.c
new file mode 100644 (file)
index 0000000..ca7febd
--- /dev/null
@@ -0,0 +1,118 @@
+/** @file\r
+  HII Library implementation that uses DXE protocols and services.\r
+\r
+  Copyright (c) 2006, Intel Corporation<BR>\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
+  Module Name:  HiiLib.c\r
+\r
+**/\r
+\r
+\r
+#include <FrameworkDxe.h>\r
+\r
+\r
+#include <Protocol/FrameworkHii.h>\r
+\r
+#include <Library/HiiLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+EFI_HII_PROTOCOL      *gHiiProtocol = NULL;\r
+\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+HiiLibFrameworkConstructor (\r
+  IN      EFI_HANDLE                ImageHandle,\r
+  IN      EFI_SYSTEM_TABLE          *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS Status;\r
+\r
+  Status = gBS->LocateProtocol (\r
+                  &gEfiHiiProtocolGuid,\r
+                  NULL,\r
+                  &gHiiProtocol\r
+                  );\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return Status;\r
+  \r
+}\r
+\r
+/**\r
+  This function allocates pool for an EFI_HII_PACKAGES structure\r
+  with enough space for the variable argument list of package pointers.\r
+  The allocated structure is initialized using NumberOfPackages, Guid,\r
+  and the variable length argument list of package pointers.\r
+\r
+  @param  NumberOfPackages The number of HII packages to prepare.\r
+  @param  Guid Package GUID.\r
+\r
+  @return The allocated and initialized packages.\r
+\r
+**/\r
+EFI_HII_PACKAGES *\r
+InternalPreparePackages (\r
+  IN UINTN           NumberOfPackages,\r
+  IN CONST EFI_GUID  *Guid OPTIONAL,\r
+  IN VA_LIST         Args\r
+  )\r
+{\r
+  EFI_HII_PACKAGES  *HiiPackages;\r
+  VOID              **Package;\r
+  UINTN             Index;\r
+\r
+  ASSERT (NumberOfPackages > 0);\r
+\r
+  HiiPackages                   = AllocateZeroPool (sizeof (EFI_HII_PACKAGES) + NumberOfPackages * sizeof (VOID *));\r
+  ASSERT (HiiPackages != NULL);\r
+\r
+  HiiPackages->GuidId           = (EFI_GUID *) Guid;\r
+  HiiPackages->NumberOfPackages = NumberOfPackages;\r
+  Package                       = (VOID **) (((UINT8 *) HiiPackages) + sizeof (EFI_HII_PACKAGES));\r
+\r
+  for (Index = 0; Index < NumberOfPackages; Index++) {\r
+    *Package = VA_ARG (Args, VOID *);\r
+    Package++;\r
+  }\r
+\r
+  return HiiPackages;\r
+\r
+}\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+PrepareAndCreateNewPackages (\r
+  IN            UINTN      NumberOfPackages,\r
+  IN CONST      EFI_GUID   *GuidId,\r
+  OUT           VOID      **HiiHandle,         //Framework is FRAMEWORK_HII_HANDLE; UEFI is EFI_HII_HANDLE; \r
+                                     // C:\D\Work\Tiano\Tiano_Main_Trunk\TIANO\Platform\IntelEpg\SR870BN4\MemorySubClassDriver\DualChannelDdr\MemorySubClass.c make use of this output value\r
+  ...\r
+  )\r
+{\r
+  EFI_STATUS                Status;\r
+  EFI_HII_PACKAGES          *PackageList;\r
+  VA_LIST                   Args;\r
+  FRAMEWORK_EFI_HII_HANDLE  FrameworkHiiHandle;\r
+\r
+  \r
+  VA_START (Args, HiiHandle);\r
+  PackageList = InternalPreparePackages (NumberOfPackages, GuidId, Args);\r
+  VA_END (Args);\r
+  \r
+  Status      = gHiiProtocol->NewPack (gHiiProtocol, PackageList, &FrameworkHiiHandle);\r
+  *HiiHandle  = (VOID *) (UINTN) FrameworkHiiHandle;\r
+\r
+  return Status;\r
+}\r
+\r
+\r
diff --git a/edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.inf b/edk2/IntelFrameworkPkg/Library/HiiLibFramework/HiiLibFramework.inf
new file mode 100644 (file)
index 0000000..169cf00
--- /dev/null
@@ -0,0 +1,47 @@
+#/** @file\r
+# Library instance for HII common routines.\r
+#\r
+# This library instance implements the common HII routines.\r
+# Copyright (c) 2006, Intel Corporation\r
+#\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
+#  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
+#\r
+#**/\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = HiiLibFramework\r
+  FILE_GUID                      = BD4BB0E3-1AFF-4304-AD0B-32A80B20FCAD\r
+  MODULE_TYPE                    = DXE_DRIVER\r
+  VERSION_STRING                 = 1.0\r
+  LIBRARY_CLASS                  = HiiLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER\r
+  EDK_RELEASE_VERSION            = 0x00020000\r
+  EFI_SPECIFICATION_VERSION      = 0x00020000\r
+  \r
+  CONSTRUCTOR                    = HiiLibFrameworkConstructor\r
+\r
+\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC\r
+#\r
+\r
+[Sources.common]\r
+  HiiLibFramework.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  IntelFrameworkPkg/IntelFrameworkPkg.dec\r
+\r
+[LibraryClasses]\r
+  MemoryAllocationLib\r
+  DebugLib\r
+\r