]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1) Keep the original Varstore Name when replacing it with L"Setup" to allow Framework...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 16 Dec 2008 13:09:12 +0000 (13:09 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 16 Dec 2008 13:09:12 +0000 (13:09 +0000)
2) Fix a bug in UefiDefaultsToFwDefaults to correctly update the VariablePackList on output.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7045 6f19259b-4bc3-4df7-8a09-765794883524

EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/UefiIfrDefault.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/UefiIfrParser.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/UefiIfrParser.h
EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/Utility.c

index 738020aafe61d6c268ad9441ae79086a777cce5b..6be0496c61240a25e2517c20ce0d095ef43e1694 100644 (file)
@@ -150,13 +150,20 @@ GetStorageFromConfigString (
 {\r
   LIST_ENTRY             *StorageList;\r
   FORMSET_STORAGE        *Storage;\r
+  CHAR16                 *Name;\r
 \r
   StorageList = GetFirstNode (&FormSet->StorageListHead);\r
 \r
   while (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
     Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
 \r
-    if (IsConfigHdrMatch (ConfigString, &Storage->Guid, Storage->Name)) {\r
+    if ((Storage->VarStoreId == FormSet->DefaultVarStoreId) && (FormSet->OriginalDefaultVarStoreName != NULL)) {\r
+      Name = FormSet->OriginalDefaultVarStoreName;\r
+    } else {\r
+      Name = Storage->Name;\r
+    }\r
+    \r
+    if (IsConfigHdrMatch (ConfigString, &Storage->Guid, Name)) {\r
       return Storage;\r
     }\r
 \r
index 4b190477f17c1b6559d19865e5409cadd9f28701..e1924791afe0d6a6e5a5c35e1be5ab7e5b5fc2fa 100644 (file)
@@ -24,8 +24,6 @@ extern CONST EFI_HII_IMAGE_PROTOCOL               *mHiiImageProtocol;
 extern CONST EFI_HII_STRING_PROTOCOL              *mHiiStringProtocol;\r
 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL      *mHiiConfigRoutingProtocol;\r
 \r
-CHAR16 FrameworkReservedVarstoreName[] = FRAMEWORK_RESERVED_VARSTORE_NAME;\r
-\r
 /**\r
   Set the data position at Offset with Width in Node->Buffer based \r
   the value passed in.\r
@@ -442,14 +440,7 @@ UefiDefaultsToFwDefaults (
 \r
     if (Node->DefaultId == DefaultId) {\r
       Size += Node->Size;\r
-      if ((Node->StoreId == UefiFormSetDefaultVarStoreId) && (StrCmp (FrameworkReservedVarstoreName, Node->Name) != 0)) {\r
-        //    The name of default VARSTORE with a Explicit declaration statement will be updated to L"Setup" to make sure\r
-        //    the Framework HII Setup module will run correctly. Framework HII Setup module always assumed that default\r
-        //    VARSTORE to have L"Setup" as name, Formset GUID as GUID. \r
-        Size += StrSize (FrameworkReservedVarstoreName);\r
-      } else {\r
-        Size += StrSize (Node->Name);\r
-      }\r
+      Size += StrSize (Node->Name);\r
 \r
       Count++;\r
     }\r
@@ -480,26 +471,20 @@ UefiDefaultsToFwDefaults (
       Size += Node->Size;\r
       Size += sizeof (EFI_HII_VARIABLE_PACK);      \r
 \r
-      //\r
-      // In UEFI, 0 is defined to be invalid for EFI_IFR_VARSTORE.VarStoreId.\r
-      // So the default storage of Var Store in VFR from a Framework module \r
-      // should be translated to the default Varstore ID.\r
-      //\r
-      if (Node->StoreId == UefiFormSetDefaultVarStoreId && (StrCmp (FrameworkReservedVarstoreName, Node->Name) != 0)) {\r
-        //    The name of default VARSTORE with a Explicit declaration statement will be updated to L"Setup" to make sure\r
-        //    the Framework HII Setup module will run correctly. Framework HII Setup module always assumed that default\r
-        //    VARSTORE to have L"Setup" as name, Formset GUID as GUID. \r
+      Pack->VariableNameLength = (UINT32) StrSize (Node->Name);\r
+\r
+      if (Node->StoreId == UefiFormSetDefaultVarStoreId) {\r
+        //\r
+        // The default VARSTORE in VFR from a Framework module has Varstore ID of 0.\r
+        //\r
         Pack->VariableId = 0;\r
-        Pack->VariableNameLength = (UINT32) StrSize (FrameworkReservedVarstoreName);\r
-        CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), FrameworkReservedVarstoreName, StrSize (FrameworkReservedVarstoreName));\r
-        DEBUG ((EFI_D_INFO, "VarstoreID: %x; Name: %s -> %s.\n", UefiFormSetDefaultVarStoreId, Node->Name, FrameworkReservedVarstoreName));\r
       } else {\r
         Pack->VariableId = Node->StoreId;\r
-        Pack->VariableNameLength = (UINT32) StrSize (Node->Name);\r
-        CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), Node->Name, StrSize (Node->Name));\r
       }\r
 \r
+      CopyMem ((UINT8 *) Pack + sizeof (EFI_HII_VARIABLE_PACK), Node->Name, StrSize (Node->Name));\r
       Size += Pack->VariableNameLength;\r
+\r
       //\r
       // Initialize EFI_HII_VARIABLE_PACK\r
       //\r
@@ -518,6 +503,9 @@ UefiDefaultsToFwDefaults (
       Index++;\r
       if (Index < Count) {\r
         PackList->NextVariablePack = (EFI_HII_VARIABLE_PACK_LIST *)((UINT8 *) PackList + Size);\r
+\r
+        PackList = PackList->NextVariablePack;\r
+        Pack     = (EFI_HII_VARIABLE_PACK *) (PackList + 1);\r
       }\r
             \r
     }\r
index 32c40f8a14127b85adf59003bb607d9a6cbf30f2..050c3c29b8ee0f737d09024e9919eeee9d455905 100644 (file)
@@ -403,6 +403,10 @@ DestroyFormSet (
   }\r
 \r
   DestoryOneOfOptionMap (&FormSet->OneOfOptionMapListHead);\r
+\r
+  if (FormSet->OriginalDefaultVarStoreName != NULL) {\r
+    FreePool (FormSet->OriginalDefaultVarStoreName);\r
+  }\r
   \r
   FreePool (FormSet);\r
 }\r
index 4ca4c5e3bd6fd9f268ac65bca0ce296413da02b0..07265b34e4bc040c642b126493176dc4b550d0d3 100644 (file)
@@ -323,6 +323,7 @@ typedef struct {
   // by priority rules defined in GetFormsetDefaultVarstoreId (). See the function description for details.\r
   //\r
   EFI_VARSTORE_ID                 DefaultVarStoreId;\r
+  CHAR16                          *OriginalDefaultVarStoreName;\r
 \r
   UINTN                           NumberOfStatement;\r
     \r
index a18ef0aa099ecd9b811660073031782b6f565425..0ad0668f728e6d1cb1f725b61cf67b505663a951 100644 (file)
@@ -19,6 +19,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/DebugLib.h>\r
 \r
 CONST EFI_GUID  gZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
+CONST CHAR16 FrameworkReservedVarstoreName[] = FRAMEWORK_RESERVED_VARSTORE_NAME;\r
+\r
 \r
 /**\r
   Find the corressponding UEFI HII Handle from a Framework HII Handle given.\r
@@ -406,10 +408,12 @@ GetFormsetDefaultVarstoreId (
 {\r
   LIST_ENTRY             *StorageList;\r
   FORMSET_STORAGE        *Storage;\r
+  FORMSET_STORAGE        *DefaultStorage;\r
 \r
   //\r
   // VarStoreId 0 is invalid in UEFI IFR.\r
   //\r
+  DefaultStorage= NULL;\r
   FormSet->DefaultVarStoreId = 0;\r
   StorageList = GetFirstNode (&FormSet->StorageListHead);\r
 \r
@@ -423,6 +427,7 @@ GetFormsetDefaultVarstoreId (
       // 1) If VarStore ID of FRAMEWORK_RESERVED_VARSTORE_ID (0x01) is found, Var Store ID is used.\r
       //\r
       FormSet->DefaultVarStoreId = FRAMEWORK_RESERVED_VARSTORE_ID;\r
+      DefaultStorage = Storage;\r
       break;\r
     }\r
 \r
@@ -439,6 +444,7 @@ GetFormsetDefaultVarstoreId (
     if (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
       Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
       FormSet->DefaultVarStoreId = Storage->VarStoreId;\r
+      DefaultStorage = Storage;\r
     }\r
     \r
   }\r
@@ -447,7 +453,17 @@ GetFormsetDefaultVarstoreId (
   if (FormSet->DefaultVarStoreId == 0) {\r
     DEBUG ((EFI_D_INFO, "FormSet %g: No Varstore Found\n", &FormSet->Guid));\r
   } else {\r
-    DEBUG ((EFI_D_INFO, "FormSet %g: Default Varstore ID is %x\n", &FormSet->Guid, FormSet->DefaultVarStoreId));\r
+    //    The name of default VARSTORE with a Explicit declaration statement will be updated to L"Setup" to make sure\r
+    //    the Framework HII Setup module will run correctly. Framework HII Setup module always assumed that default\r
+    //    VARSTORE to have L"Setup" as name, Formset GUID as GUID. \r
+\r
+    DEBUG ((EFI_D_INFO, "FormSet %g: Default Varstore ID (0x%x) N(%s) G(%g)\n", &FormSet->Guid, FormSet->DefaultVarStoreId, DefaultStorage->Name, &DefaultStorage->Guid));\r
+\r
+    if (StrCmp (DefaultStorage->Name, FrameworkReservedVarstoreName) != 0) {\r
+      DEBUG ((EFI_D_INFO, "          : Name is updated from %s to %s.\n", DefaultStorage->Name, FrameworkReservedVarstoreName));\r
+      FormSet->OriginalDefaultVarStoreName = DefaultStorage->Name;\r
+      DefaultStorage->Name = AllocateCopyPool (StrSize (FrameworkReservedVarstoreName), FrameworkReservedVarstoreName);\r
+    }\r
   }\r
   DEBUG_CODE_END ();\r
   \r