]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableDxe.c
MdeModulePkg Variable: Consume the separated VarCheckLib
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / VariableDxe.c
index 314ffddef1ec10864aa04215aa59735200791881..caf51dfba6150069094795dd7eeace1d7ae41273 100644 (file)
@@ -21,11 +21,9 @@ extern VARIABLE_INFO_ENTRY     *gVariableInfo;
 EFI_HANDLE                     mHandle                    = NULL;\r
 EFI_EVENT                      mVirtualAddressChangeEvent = NULL;\r
 EFI_EVENT                      mFtwRegistration           = NULL;\r
-extern LIST_ENTRY              mLockedVariableList;\r
-extern LIST_ENTRY              mVarCheckVariableList;\r
-extern UINT32                  mNumberOfHandler;\r
-extern VAR_CHECK_SET_VARIABLE_CHECK_HANDLER *mHandlerTable;\r
 extern BOOLEAN                 mEndOfDxe;\r
+VOID                           ***mVarCheckAddressPointer = NULL;\r
+UINTN                          mVarCheckAddressPointerCount = 0;\r
 EDKII_VARIABLE_LOCK_PROTOCOL   mVariableLock              = { VariableLockRequestToLock };\r
 EDKII_VAR_CHECK_PROTOCOL       mVarCheck                  = { VarCheckRegisterSetVariableCheckHandler,\r
                                                               VarCheckVariablePropertySet,\r
@@ -227,7 +225,6 @@ VariableClassAddressChangeEvent (
   IN VOID                                 *Context\r
   )\r
 {\r
-  EFI_STATUS     Status;\r
   UINTN          Index;\r
 \r
   EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize);\r
@@ -246,20 +243,16 @@ VariableClassAddressChangeEvent (
   EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->VariableGlobal.HobVariableBase);\r
   EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);\r
   EfiConvertPointer (0x0, (VOID **) &mNvVariableCache);\r
-  EfiConvertPointer (0x0, (VOID **) &mHandlerTable);\r
-  for (Index = 0; Index < mNumberOfHandler; Index++) {\r
-    EfiConvertPointer (0x0, (VOID **) &mHandlerTable[Index]);\r
-  }\r
-\r
-  Status = EfiConvertList (0x0, &mLockedVariableList);\r
-  ASSERT_EFI_ERROR (Status);\r
 \r
-  Status = EfiConvertList (0x0, &mVarCheckVariableList);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (mAuthContextOut.AddressPointer != NULL) {\r
+    for (Index = 0; Index < mAuthContextOut.AddressPointerCount; Index++) {\r
+      EfiConvertPointer (0x0, (VOID **) mAuthContextOut.AddressPointer[Index]);\r
+    }\r
+  }\r
 \r
-  if (mContextOut.AddressPointer != NULL) {\r
-    for (Index = 0; Index < mContextOut.AddressPointerCount; Index++) {\r
-      EfiConvertPointer (0x0, (VOID **) mContextOut.AddressPointer[Index]);\r
+  if (mVarCheckAddressPointer != NULL) {\r
+    for (Index = 0; Index < mVarCheckAddressPointerCount; Index++) {\r
+      EfiConvertPointer (0x0, (VOID **) mVarCheckAddressPointer[Index]);\r
     }\r
   }\r
 }\r
@@ -283,14 +276,17 @@ OnReadyToBoot (
   VOID                                    *Context\r
   )\r
 {\r
-  //\r
-  // Set the End Of DXE bit in case the EFI_END_OF_DXE_EVENT_GROUP_GUID event is not signaled.\r
-  //\r
-  mEndOfDxe = TRUE;\r
-  //\r
-  // The initialization for variable quota.\r
-  //\r
-  InitializeVariableQuota ();\r
+  if (!mEndOfDxe) {\r
+    //\r
+    // Set the End Of DXE bit in case the EFI_END_OF_DXE_EVENT_GROUP_GUID event is not signaled.\r
+    //\r
+    mEndOfDxe = TRUE;\r
+    mVarCheckAddressPointer = VarCheckLibInitializeAtEndOfDxe (&mVarCheckAddressPointerCount);\r
+    //\r
+    // The initialization for variable quota.\r
+    //\r
+    InitializeVariableQuota ();\r
+  }\r
   ReclaimForOS ();\r
   if (FeaturePcdGet (PcdVariableCollectStatistics)) {\r
     if (mVariableModuleGlobal->VariableGlobal.AuthFormat) {\r
@@ -319,7 +315,9 @@ OnEndOfDxe (
   VOID                                    *Context\r
   )\r
 {\r
+  DEBUG ((EFI_D_INFO, "[Variable]END_OF_DXE is signaled\n"));\r
   mEndOfDxe = TRUE;\r
+  mVarCheckAddressPointer = VarCheckLibInitializeAtEndOfDxe (&mVarCheckAddressPointerCount);\r
   //\r
   // The initialization for variable quota.\r
   //\r