]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/UefiIfrParser.c
Support Name/Value Storage in UEFI2.1 HII driver.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / UefiIfrParser.c
index 563ddcd0e743ce4269c26d37634534fb6388e19a..52b253a5590295dc5fdf99e21033ed5282f3e2ed 100644 (file)
@@ -12,25 +12,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 **/\r
 \r
-#include <PiDxe.h>\r
-\r
-#include <Protocol/HiiConfigAccess.h>\r
-#include <Protocol/HiiConfigRouting.h>\r
-#include <Protocol/HiiDatabase.h>\r
-#include <Protocol/HiiString.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PrintLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
-#include <Guid/MdeModuleHii.h>\r
-\r
-#include "UefiIfrParser.h"\r
+#include "HiiDatabase.h"\r
 \r
 #include "UefiIfrParserExpression.h"\r
 \r
@@ -519,12 +501,14 @@ ParseOpCodes (
   ONE_OF_OPTION_MAP_ENTRY *OneOfOptionMapEntry;\r
   UINT8                   OneOfType;\r
   EFI_IFR_ONE_OF          *OneOfOpcode;\r
+  HII_THUNK_CONTEXT       *ThunkContext;\r
 \r
-  mInScopeSubtitle         = FALSE;\r
-  mInScopeSuppress         = FALSE;\r
-  mInScopeGrayOut          = FALSE;\r
-  CurrentDefault           = NULL;\r
-  CurrentOption            = NULL;\r
+  mInScopeSubtitle = FALSE;\r
+  mInScopeSuppress = FALSE;\r
+  mInScopeGrayOut  = FALSE;\r
+  CurrentDefault   = NULL;\r
+  CurrentOption    = NULL;\r
+  ThunkContext     = UefiHiiHandleToThunkContext ((CONST HII_THUNK_PRIVATE_DATA*) mHiiThunkPrivateData, FormSet->HiiHandle);\r
 \r
   //\r
   // Set to a invalid value.\r
@@ -632,7 +616,21 @@ ParseOpCodes (
       break;\r
 \r
     case EFI_IFR_VARSTORE_NAME_VALUE_OP:\r
-      ASSERT (FALSE);\r
+      //\r
+      // Framework IFR doesn't support Name/Value VarStore opcode\r
+      //\r
+      if (ThunkContext != NULL && ThunkContext->ByFrameworkHiiNewPack) {\r
+        ASSERT (FALSE);\r
+      }\r
+\r
+      //\r
+      // Create a name/value Storage for this FormSet\r
+      //\r
+      Storage = CreateStorage (FormSet);\r
+      Storage->Type = EFI_HII_VARSTORE_NAME_VALUE;\r
+\r
+      CopyMem (&Storage->VarStoreId, &((EFI_IFR_VARSTORE_NAME_VALUE *) OpCodeData)->VarStoreId, sizeof (EFI_VARSTORE_ID));\r
+      CopyMem (&Storage->Guid,       &((EFI_IFR_VARSTORE_NAME_VALUE *) OpCodeData)->Guid,       sizeof (EFI_GUID));\r
 \r
       break;\r
 \r
@@ -699,8 +697,7 @@ ParseOpCodes (
       break;\r
 \r
     case EFI_IFR_RESET_BUTTON_OP:\r
-      CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);\r
-\r
+      CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);\r
       CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));\r
       break;\r
 \r
@@ -909,8 +906,12 @@ ParseOpCodes (
       break;\r
 \r
     case EFI_IFR_DISABLE_IF_OP:\r
-      ASSERT (FALSE);\r
-\r
+      //\r
+      // Framework IFR doesn't support DisableIf opcode\r
+      //\r
+      if (ThunkContext != NULL && ThunkContext->ByFrameworkHiiNewPack) {\r
+        ASSERT (FALSE);\r
+      }\r
 \r
     //\r
     // Expression\r
@@ -988,8 +989,7 @@ ParseOpCodes (
         default:\r
           break;\r
         }\r
-      } \r
-      else if (CompareGuid ((EFI_GUID *)(VOID *)&OptionMap->Guid, &mFrameworkHiiCompatibilityGuid)) {\r
+      } else if (CompareGuid ((EFI_GUID *)(VOID *)&OptionMap->Guid, &mFrameworkHiiCompatibilityGuid)) {\r
         if (OptionMap->ExtendOpCode == EFI_IFR_EXTEND_OP_OPTIONKEY) {\r
           OneOfOptinMapEntryListHead = GetOneOfOptionMapEntryListHead (FormSet, OptionMap->QuestionId);\r
           if (OneOfOptinMapEntryListHead == NULL) {\r