]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c
MdeModulePkg/Variable: Parameterize GetNextVariableInternal () stores
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / Variable.c
index 76536308e6acaa9686e65b690d196dc24868fd0d..70af86db242bf9fb1827be67c3e507c5eba5e1eb 100644 (file)
@@ -2358,6 +2358,7 @@ VariableServiceGetNextVariableName (
   UINTN                   MaxLen;\r
   UINTN                   VarNameSize;\r
   VARIABLE_HEADER         *VariablePtr;\r
+  VARIABLE_STORE_HEADER   *VariableStoreHeader[VariableStoreTypeMax];\r
 \r
   if (VariableNameSize == NULL || VariableName == NULL || VendorGuid == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -2377,7 +2378,16 @@ VariableServiceGetNextVariableName (
 \r
   AcquireLockOnlyAtBootTime(&mVariableModuleGlobal->VariableGlobal.VariableServicesLock);\r
 \r
-  Status = VariableServiceGetNextVariableInternal (VariableName, VendorGuid, &VariablePtr);\r
+  //\r
+  // 0: Volatile, 1: HOB, 2: Non-Volatile.\r
+  // The index and attributes mapping must be kept in this order as FindVariable\r
+  // makes use of this mapping to implement search algorithm.\r
+  //\r
+  VariableStoreHeader[VariableStoreTypeVolatile] = (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal->VariableGlobal.VolatileVariableBase;\r
+  VariableStoreHeader[VariableStoreTypeHob]      = (VARIABLE_STORE_HEADER *) (UINTN) mVariableModuleGlobal->VariableGlobal.HobVariableBase;\r
+  VariableStoreHeader[VariableStoreTypeNv]       = mNvVariableCache;\r
+\r
+  Status = VariableServiceGetNextVariableInternal (VariableName, VendorGuid, VariableStoreHeader, &VariablePtr);\r
   if (!EFI_ERROR (Status)) {\r
     VarNameSize = NameSizeOfVariable (VariablePtr);\r
     ASSERT (VarNameSize != 0);\r