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:
@@ -0,0 +1,69 @@
|
||||
/** @file
|
||||
*
|
||||
* Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
*
|
||||
* This program and the accompanying materials
|
||||
* are licensed and made available under the terms and conditions of the BSD License
|
||||
* which accompanies this distribution. The full text of the license may be found at
|
||||
* http://opensource.org/licenses/bsd-license.php
|
||||
*
|
||||
* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
*
|
||||
**/
|
||||
|
||||
#include <PiDxe.h>
|
||||
#include <Library/ArmPlatformGlobalVariableLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
|
||||
#include <Guid/ArmGlobalVariableHob.h>
|
||||
|
||||
UINTN mGlobalVariableBase = 0;
|
||||
|
||||
RETURN_STATUS
|
||||
EFIAPI
|
||||
ArmPlatformGlobalVariableConstructor (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
ARM_HOB_GLOBAL_VARIABLE *Hob;
|
||||
|
||||
Hob = GetFirstGuidHob (&gArmGlobalVariableGuid);
|
||||
ASSERT (Hob != NULL);
|
||||
|
||||
mGlobalVariableBase = Hob->GlobalVariableBase;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
ArmPlatformGetGlobalVariable (
|
||||
IN UINTN VariableOffset,
|
||||
IN UINTN VariableSize,
|
||||
OUT VOID* Variable
|
||||
)
|
||||
{
|
||||
if (mGlobalVariableBase == 0) {
|
||||
ArmPlatformGlobalVariableConstructor ();
|
||||
}
|
||||
|
||||
CopyMem (Variable, (VOID*)(mGlobalVariableBase + VariableOffset), VariableSize);
|
||||
}
|
||||
|
||||
VOID
|
||||
ArmPlatformSetGlobalVariable (
|
||||
IN UINTN VariableOffset,
|
||||
IN UINTN VariableSize,
|
||||
OUT VOID* Variable
|
||||
)
|
||||
{
|
||||
if (mGlobalVariableBase == 0) {
|
||||
ArmPlatformGlobalVariableConstructor ();
|
||||
}
|
||||
|
||||
CopyMem ((VOID*)(mGlobalVariableBase + VariableOffset), Variable, VariableSize);
|
||||
}
|
||||
|
Reference in New Issue
Block a user