ArmPlatformPkg: Introduce ArmPlatformGlobalVariableLib
This library hides where the 'XIP' Global Variable are located in the memory. It is expected the Sec/PrePi modules define the Global Variable area through the GlobalVariable HOB. The ArmPlatformGlobalVariableLib library allows access to global variables by their offsets in this region. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12420 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -17,15 +17,22 @@
|
||||
//
|
||||
// The protocols, PPI and GUID defintions for this module
|
||||
//
|
||||
#include <Ppi/ArmGlobalVariable.h>
|
||||
#include <Ppi/MasterBootMode.h>
|
||||
#include <Ppi/BootInRecoveryMode.h>
|
||||
#include <Ppi/GuidedSectionExtraction.h>
|
||||
//
|
||||
// The Library classes this module consumes
|
||||
//
|
||||
#include <Library/PeimEntryPoint.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/ArmPlatformLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/PeimEntryPoint.h>
|
||||
#include <Library/PeiServicesLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <Guid/ArmGlobalVariableHob.h>
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
@@ -55,6 +62,24 @@ EFI_PEI_PPI_DESCRIPTOR mPpiListRecoveryBootMode = {
|
||||
NULL
|
||||
};
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
BuildGlobalVariableHob (
|
||||
IN EFI_PHYSICAL_ADDRESS GlobalVariableBase,
|
||||
IN UINT32 GlobalVariableSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ARM_HOB_GLOBAL_VARIABLE *Hob;
|
||||
|
||||
Status = PeiServicesCreateHob (EFI_HOB_TYPE_GUID_EXTENSION, sizeof (ARM_HOB_GLOBAL_VARIABLE), (VOID**)&Hob);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
CopyGuid (&(Hob->Header.Name), &gArmGlobalVariableGuid);
|
||||
Hob->GlobalVariableBase = GlobalVariableBase;
|
||||
Hob->GlobalVariableSize = GlobalVariableSize;
|
||||
}
|
||||
}
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
@@ -80,11 +105,23 @@ InitializePlatformPeim (
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN BootMode;
|
||||
ARM_GLOBAL_VARIABLE_PPI *ArmGlobalVariablePpi;
|
||||
EFI_PHYSICAL_ADDRESS GlobalVariableBase;
|
||||
|
||||
DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));
|
||||
|
||||
PlatformPeim ();
|
||||
|
||||
Status = PeiServicesLocatePpi (&gArmGlobalVariablePpiGuid, 0, NULL, (VOID**)&ArmGlobalVariablePpi);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
Status = ArmGlobalVariablePpi->GetGlobalVariableMemory (&GlobalVariableBase);
|
||||
|
||||
if (!EFI_ERROR(Status)) {
|
||||
// Declare the Global Variable HOB
|
||||
BuildGlobalVariableHob (GlobalVariableBase, FixedPcdGet32 (PcdPeiGlobalVariableSize));
|
||||
}
|
||||
}
|
||||
|
||||
BootMode = ArmPlatformGetBootMode ();
|
||||
Status = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
Reference in New Issue
Block a user