diff options
author | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-07-01 15:45:52 +0000 |
---|---|---|
committer | oliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524> | 2011-07-01 15:45:52 +0000 |
commit | 3c4b742c182785b0e3ae0217a8e3a08b47b5c7a8 (patch) | |
tree | 0a0b81cb554cb2887738e48df56f55e3955eddc3 | |
parent | 633724f462a7117bc26838e66825e3b1bec506cc (diff) | |
download | edk2-platforms-3c4b742c182785b0e3ae0217a8e3a08b47b5c7a8.tar.xz |
ArmPlatformPkg/PrePiHobListPointerLib: Get the HobListPointer from the stop of the stack
When using ArmPlatformPkg/PrePeiCore or ArmPlatformPkg/PrePi, the global variable during
the XIP phase are stored on the top of the stack.
Global variables are defined by their PCD offset from the top of this stack.
For example, the HobListPtr is defined at the offset PcdHobListPtrGlobalOffset.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11958 6f19259b-4bc3-4df7-8a09-765794883524
-rwxr-xr-x | ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c | 69 | ||||
-rwxr-xr-x | ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf | 37 |
2 files changed, 106 insertions, 0 deletions
diff --git a/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c new file mode 100755 index 0000000000..dfcc27edf5 --- /dev/null +++ b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c @@ -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 <PiPei.h>
+#include <Library/PrePiHobListPointerLib.h>
+#include <Library/DebugLib.h>
+#include <Library/PcdLib.h>
+
+// +// Have to use build system to set the original value in case we are running +// from FLASH and globals don't work. So if you do a GetHobList() and gHobList +// and gHobList is NULL the PCD default values are used. +// +VOID *gHobList = NULL;
+
+
+/**
+ Returns the pointer to the HOB list.
+
+ This function returns the pointer to first HOB in the list.
+
+ @return The pointer to the HOB list.
+
+**/
+VOID *
+EFIAPI
+PrePeiGetHobList (
+ VOID
+ )
+{
+ if (gHobList == NULL) {
+ return (VOID *)*(UINTN*)(PcdGet32 (PcdCPUCoresNonSecStackBase) + (PcdGet32 (PcdCPUCoresNonSecStackSize) / 2) - PcdGet32 (PcdHobListPtrGlobalOffset));
+ } else {
+ return gHobList;
+ }
+}
+
+
+
+/**
+ Updates the pointer to the HOB list.
+
+ @param HobList Hob list pointer to store
+
+**/
+EFI_STATUS
+EFIAPI
+PrePeiSetHobList (
+ IN VOID *HobList
+ )
+{
+ gHobList = HobList;
+
+ //
+ // If this code is running from ROM this could fail
+ //
+ return (gHobList == HobList) ? EFI_SUCCESS: EFI_UNSUPPORTED;
+}
diff --git a/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf new file mode 100755 index 0000000000..5142f19a4e --- /dev/null +++ b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf @@ -0,0 +1,37 @@ +#/** @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.
+#
+#**/
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = PrePiHobListPointerLib
+ FILE_GUID = d751d880-5ee2-11e0-b93e-0002a5d5c51b
+ MODULE_TYPE = BASE
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = PrePiHobListPointerLib
+
+[Sources]
+ PrePiHobListPointer.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ ArmPlatformPkg/ArmPlatformPkg.dec
+ EmbeddedPkg/EmbeddedPkg.dec
+
+[LibraryClasses]
+
+[FixedPcd.common]
+ gArmPlatformTokenSpaceGuid.PcdHobListPtrGlobalOffset
+ gArmPlatformTokenSpaceGuid.PcdCPUCoresNonSecStackBase
+ gArmPlatformTokenSpaceGuid.PcdCPUCoresNonSecStackSize
+
\ No newline at end of file |