mirror of https://github.com/acidanthera/audk.git
Change IPF version AuthVariable driver to support multiple-platform feature.
Signed-off-by: rni2 Reviewed-by: erictian git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12730 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
53e6937c20
commit
4f8ef5ce4e
|
@ -57,6 +57,7 @@
|
|||
PcdLib
|
||||
ExtendedSalLib
|
||||
BaseCryptLib
|
||||
HobLib
|
||||
|
||||
[Protocols]
|
||||
gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL SOMETIMES_CONSUMED
|
||||
|
|
|
@ -223,6 +223,8 @@ VariableServiceInitialize (
|
|||
Status = AutenticatedVariableServiceInitialize ();
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
FlushHob2Nv ();
|
||||
|
||||
//
|
||||
// Register All the Functions with Extended SAL Variable Services Class
|
||||
//
|
||||
|
|
|
@ -2938,6 +2938,58 @@ ReclaimForOS(
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Flush the HOB variable to NV variable storage.
|
||||
**/
|
||||
VOID
|
||||
FlushHob2Nv (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *GuidHob;
|
||||
VARIABLE_STORE_HEADER *VariableStoreHeader;
|
||||
VARIABLE_HEADER *VariableHeader;
|
||||
//
|
||||
// Get HOB variable store.
|
||||
//
|
||||
GuidHob = GetFirstGuidHob (&gEfiAuthenticatedVariableGuid);
|
||||
if (GuidHob != NULL) {
|
||||
VariableStoreHeader = (VARIABLE_STORE_HEADER *) GET_GUID_HOB_DATA (GuidHob);
|
||||
if (CompareGuid (&VariableStoreHeader->Signature, &gEfiAuthenticatedVariableGuid) &&
|
||||
(VariableStoreHeader->Format == VARIABLE_STORE_FORMATTED) &&
|
||||
(VariableStoreHeader->State == VARIABLE_STORE_HEALTHY)
|
||||
) {
|
||||
DEBUG ((EFI_D_INFO, "HOB Variable Store appears to be valid.\n"));
|
||||
//
|
||||
// Flush the HOB variable to NV Variable storage.
|
||||
//
|
||||
for ( VariableHeader = (VARIABLE_HEADER *) HEADER_ALIGN (VariableStoreHeader + 1)
|
||||
; (VariableHeader < (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) VariableStoreHeader + VariableStoreHeader->Size)
|
||||
&&
|
||||
(VariableHeader->StartId == VARIABLE_DATA))
|
||||
; VariableHeader = (VARIABLE_HEADER *) HEADER_ALIGN ((UINTN) (VariableHeader + 1)
|
||||
+ VariableHeader->NameSize + GET_PAD_SIZE (VariableHeader->NameSize)
|
||||
+ VariableHeader->DataSize + GET_PAD_SIZE (VariableHeader->DataSize)
|
||||
)
|
||||
) {
|
||||
ASSERT (VariableHeader->State == VAR_ADDED);
|
||||
ASSERT ((VariableHeader->Attributes & EFI_VARIABLE_NON_VOLATILE) != 0);
|
||||
Status = EsalSetVariable (
|
||||
(CHAR16 *) (VariableHeader + 1),
|
||||
&VariableHeader->VendorGuid,
|
||||
VariableHeader->Attributes,
|
||||
VariableHeader->DataSize,
|
||||
(UINT8 *) (VariableHeader + 1) + VariableHeader->NameSize + GET_PAD_SIZE (VariableHeader->NameSize),
|
||||
Physical,
|
||||
mVariableModuleGlobal
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Initializes variable store area for non-volatile and volatile variable.
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Guid/EventGroup.h>
|
||||
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/UefiDriverEntryPoint.h>
|
||||
#include <Library/DxeServicesTableLib.h>
|
||||
#include <Library/UefiRuntimeLib.h>
|
||||
|
@ -493,4 +494,12 @@ IsValidVariableHeader (
|
|||
OUT VARIABLE_HEADER *VariableHeader OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Flush the HOB variable to NV variable storage.
|
||||
**/
|
||||
VOID
|
||||
FlushHob2Nv (
|
||||
VOID
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue