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:
niruiyu 2011-11-17 02:40:28 +00:00
parent 53e6937c20
commit 4f8ef5ce4e
4 changed files with 64 additions and 0 deletions

View File

@ -57,6 +57,7 @@
PcdLib
ExtendedSalLib
BaseCryptLib
HobLib
[Protocols]
gEfiFirmwareVolumeBlockProtocolGuid # PROTOCOL SOMETIMES_CONSUMED

View File

@ -223,6 +223,8 @@ VariableServiceInitialize (
Status = AutenticatedVariableServiceInitialize ();
ASSERT_EFI_ERROR (Status);
FlushHob2Nv ();
//
// Register All the Functions with Extended SAL Variable Services Class
//

View File

@ -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.

View File

@ -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