]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/UefiIfrParser.h
1) Fix a bug of DefaultVarStoreId of the Form Set should be used when Framework IfrSu...
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / UefiIfrParser.h
index 840c72428987010f3f8c5203f9cba5a221d83403..4ca4c5e3bd6fd9f268ac65bca0ce296413da02b0 100644 (file)
@@ -1,6 +1,12 @@
 /** @file\r
   Function and Macro defintions for IFR parsing. To get the default value from IFR package, the IFR\r
   opcode needs to be parsed. Most of code is taken from MdeModulePkg\Universal\SetupBrowserDxe\IfrParse.c.\r
+  This parser is simplified from the origianl IfrParser.c in the following way:\r
+\r
+  1) All data structure definition that have nothing to do with IFR Default value scanning (\r
+     required to implement Framework HII's GetDefaultImage ()) is removed.\r
+  2) Ignore the IFR opcode which is invalid for Form Package\r
+     generated using Framework VFR file.\r
 \r
   Copyright (c) 2008, Intel Corporation\r
   All rights reserved. This program and the accompanying materials\r
 #ifndef _HII_THUNK_UEFI_IFR_PARSER_\r
 #define _HII_THUNK_UEFI_IFR_PARSER_\r
 \r
-#include <PiDxe.h>\r
-\r
-#include <Protocol/Print.h>\r
-#include <Protocol/HiiConfigAccess.h>\r
-#include <Protocol/HiiConfigRouting.h>\r
-#include <Protocol/HiiDatabase.h>\r
-#include <Protocol/HiiString.h>\r
 \r
 //\r
 // IFR relative definition\r
 \r
 extern EFI_GUID  gTianoHiiIfrGuid;\r
 \r
+#define ONE_OF_OPTION_MAP_ENTRY_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP_ENTRY, Link, ONE_OF_OPTION_MAP_ENTRY_SIGNATURE)\r
+#define ONE_OF_OPTION_MAP_ENTRY_SIGNATURE            EFI_SIGNATURE_32 ('O', 'O', 'M', 'E')\r
+typedef struct {\r
+  UINT32              Signature;\r
+  LIST_ENTRY          Link;\r
+\r
+  UINT16              FwKey;\r
+  EFI_IFR_TYPE_VALUE  Value;\r
+  \r
+} ONE_OF_OPTION_MAP_ENTRY;\r
+\r
+\r
+\r
+#define ONE_OF_OPTION_MAP_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP, Link, ONE_OF_OPTION_MAP_SIGNATURE)\r
+#define ONE_OF_OPTION_MAP_SIGNATURE            EFI_SIGNATURE_32 ('O', 'O', 'O', 'M')\r
+typedef struct {\r
+  UINT32            Signature;\r
+  LIST_ENTRY        Link;       \r
+\r
+  UINT16            VarStoreId;\r
+\r
+  UINT8             ValueType; //EFI_IFR_TYPE_NUM_* \r
+\r
+  EFI_QUESTION_ID   QuestionId;\r
+\r
+  LIST_ENTRY        OneOfOptionMapEntryListHead; //ONE_OF_OPTION_MAP_ENTRY\r
+} ONE_OF_OPTION_MAP;\r
+\r
 \r
 typedef struct {\r
   UINT8               Type;\r
@@ -52,16 +79,6 @@ typedef struct {
 \r
 #define NAME_VALUE_NODE_SIGNATURE  EFI_SIGNATURE_32 ('N', 'V', 'S', 'T')\r
 \r
-typedef struct {\r
-  UINTN            Signature;\r
-  LIST_ENTRY       Link;\r
-  CHAR16           *Name;\r
-  CHAR16           *Value;\r
-  CHAR16           *EditValue;\r
-} NAME_VALUE_NODE;\r
-\r
-#define NAME_VALUE_NODE_FROM_LINK(a)  CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)\r
-\r
 #define FORMSET_STORAGE_SIGNATURE  EFI_SIGNATURE_32 ('F', 'S', 'T', 'G')\r
 \r
 typedef struct {\r
@@ -75,21 +92,15 @@ typedef struct {
 \r
   CHAR16           *Name;          // For EFI_IFR_VARSTORE\r
   UINT16           Size;\r
-  UINT8            *Buffer;\r
-  UINT8            *EditBuffer;    // Edit copy for Buffer Storage\r
-\r
-  LIST_ENTRY       NameValueListHead; // List of NAME_VALUE_NODE\r
 \r
   UINT32           Attributes;     // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
 \r
-  CHAR16           *ConfigHdr;     // <ConfigHdr>\r
-  CHAR16           *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
-  UINTN            ElementCount;   // Number of <RequestElement> in the <ConfigRequest>\r
-  UINTN            SpareStrLen;    // Spare length of ConfigRequest string buffer\r
 } FORMSET_STORAGE;\r
 \r
 #define FORMSET_STORAGE_FROM_LINK(a)  CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
 \r
+#if 0\r
+\r
 #define EXPRESSION_OPCODE_SIGNATURE  EFI_SIGNATURE_32 ('E', 'X', 'O', 'P')\r
 \r
 typedef struct {\r
@@ -133,6 +144,7 @@ typedef struct {
 } FORM_EXPRESSION;\r
 \r
 #define FORM_EXPRESSION_FROM_LINK(a)  CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)\r
+#endif\r
 \r
 #define QUESTION_DEFAULT_SIGNATURE  EFI_SIGNATURE_32 ('Q', 'D', 'F', 'T')\r
 \r
@@ -143,7 +155,6 @@ typedef struct {
   UINT16              DefaultId;\r
   EFI_HII_VALUE       Value;              // Default value\r
 \r
-  FORM_EXPRESSION     *ValueExpression;   // Not-NULL indicates default value is provided by EFI_IFR_VALUE\r
 } QUESTION_DEFAULT;\r
 \r
 #define QUESTION_DEFAULT_FROM_LINK(a)  CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)\r
@@ -159,7 +170,9 @@ typedef struct {
   EFI_HII_VALUE       Value;\r
   EFI_IMAGE_ID        ImageId;\r
 \r
+#if 0\r
   FORM_EXPRESSION     *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
+#endif\r
 } QUESTION_OPTION;\r
 \r
 #define QUESTION_OPTION_FROM_LINK(a)  CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
@@ -188,10 +201,17 @@ typedef struct {
     EFI_STRING_ID       VarName;\r
     UINT16              VarOffset;\r
   }  VarStoreInfo;\r
+#if 0\r
+  CHAR16                *UnicodeVarName;\r
+#endif\r
+  \r
   UINT16                StorageWidth;\r
   UINT8                 QuestionFlags;\r
+\r
+#if 0\r
   CHAR16                *VariableName;    // Name/Value or EFI Variable name\r
   CHAR16                *BlockName;       // Buffer storage block name: "OFFSET=...WIDTH=..."\r
+#endif\r
 \r
   EFI_HII_VALUE         HiiValue;         // Edit copy for checkbox, numberic, oneof\r
   UINT8                 *BufferValue;     // Edit copy for string, password, orderedlist\r
@@ -219,7 +239,9 @@ typedef struct {
   //\r
   // Get from IFR parsing\r
   //\r
+#if 0\r
   FORM_EXPRESSION       *ValueExpression;    // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly\r
+#endif\r
   LIST_ENTRY            DefaultListHead;     // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values\r
   LIST_ENTRY            OptionListHead;      // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
 \r
@@ -227,10 +249,12 @@ typedef struct {
   UINT8                 RefreshInterval;     // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
   BOOLEAN               InSubtitle;          // nesting inside of EFI_IFR_SUBTITLE\r
 \r
+#if 0\r
   LIST_ENTRY            InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)\r
   LIST_ENTRY            NoSubmitListHead;    // nested nosubmit expression list (FORM_EXPRESSION)\r
   FORM_EXPRESSION       *GrayOutExpression;  // nesting inside of GrayOutIf\r
   FORM_EXPRESSION       *SuppressExpression; // nesting inside of SuppressIf\r
+#endif\r
 \r
 } FORM_BROWSER_STATEMENT;\r
 \r
@@ -247,7 +271,9 @@ typedef struct {
 \r
   EFI_IMAGE_ID      ImageId;\r
 \r
+#if 0\r
   LIST_ENTRY        ExpressionListHead;   // List of Expressions (FORM_EXPRESSION)\r
+#endif\r
   LIST_ENTRY        StatementListHead;    // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
 } FORM_BROWSER_FORM;\r
 \r
@@ -267,9 +293,6 @@ typedef struct {
 \r
 typedef struct {\r
   EFI_HII_HANDLE                  HiiHandle;\r
-  EFI_HANDLE                      DriverHandle;\r
-  EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess;\r
-  EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
 \r
   UINTN                           IfrBinaryLength;\r
   UINT8                           *IfrBinaryData;\r
@@ -282,33 +305,39 @@ typedef struct {
   EFI_IMAGE_ID                    ImageId;\r
 \r
   FORM_BROWSER_STATEMENT          *StatementBuffer;     // Buffer for all Statements and Questions\r
+#if 0\r
   EXPRESSION_OPCODE               *ExpressionBuffer;    // Buffer for all Expression OpCode\r
+#endif\r
 \r
   LIST_ENTRY                      StorageListHead;      // Storage list (FORMSET_STORAGE)\r
   LIST_ENTRY                      DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
   LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)\r
-} FORM_BROWSER_FORMSET;\r
 \r
+  LIST_ENTRY                      OneOfOptionMapListHead; //ONE_OF_OPTION_MAP\r
+\r
+  UINT16                          MaxQuestionId;\r
+\r
+  //\r
+  // Added for Framework HII Thunk. \r
+  // Default Variable Storage built from a Framework VFR file using UEFI VFR Compiler in Compatibility mode is determined \r
+  // by priority rules defined in GetFormsetDefaultVarstoreId (). See the function description for details.\r
+  //\r
+  EFI_VARSTORE_ID                 DefaultVarStoreId;\r
+\r
+  UINTN                           NumberOfStatement;\r
+    \r
+} FORM_BROWSER_FORMSET;\r
 \r
-EFI_STATUS\r
-EvaluateExpression (\r
-  IN FORM_BROWSER_FORMSET  *FormSet,\r
-  IN FORM_BROWSER_FORM     *Form,\r
-  IN OUT FORM_EXPRESSION   *Expression\r
-  )\r
-;\r
 \r
 EFI_STATUS\r
 ParseOpCodes (\r
   IN FORM_BROWSER_FORMSET              *FormSet\r
-  )\r
-;\r
+  );\r
 \r
 VOID\r
 DestroyFormSet (\r
   IN OUT FORM_BROWSER_FORMSET  *FormSet\r
-  )\r
-;\r
+  );\r
 \r
 #endif\r
 \r