\r
Copyright (C) 2013, Red Hat, Inc.\r
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
\r
#include "Variable.h"\r
\r
-extern VARIABLE_STORE_HEADER *mNvVariableCache;\r
-extern VARIABLE_INFO_ENTRY *gVariableInfo;\r
-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
-EDKII_VARIABLE_LOCK_PROTOCOL mVariableLock = { VariableLockRequestToLock };\r
-EDKII_VAR_CHECK_PROTOCOL mVarCheck = { VarCheckRegisterSetVariableCheckHandler,\r
- VarCheckVariablePropertySet,\r
- VarCheckVariablePropertyGet };\r
+extern VARIABLE_STORE_HEADER *mNvVariableCache;\r
+extern EFI_FIRMWARE_VOLUME_HEADER *mNvFvHeaderCache;\r
+extern VARIABLE_INFO_ENTRY *gVariableInfo;\r
+EFI_HANDLE mHandle = NULL;\r
+EFI_EVENT mVirtualAddressChangeEvent = NULL;\r
+EFI_EVENT mFtwRegistration = NULL;\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
+ VarCheckVariablePropertyGet };\r
\r
/**\r
Return TRUE if ExitBootServices () has been called.\r
IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
UINTN Index;\r
\r
EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal->FvbInstance->GetBlockSize);\r
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
+ EfiConvertPointer (0x0, (VOID **) &mNvFvHeaderCache);\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
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
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