]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/PrePiHobListPointerLib: Get the HobListPointer from the stop of the...
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 1 Jul 2011 15:45:52 +0000 (15:45 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 1 Jul 2011 15:45:52 +0000 (15:45 +0000)
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

ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c [new file with mode: 0755]
ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf [new file with mode: 0755]

diff --git a/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointer.c
new file mode 100755 (executable)
index 0000000..dfcc27e
--- /dev/null
@@ -0,0 +1,69 @@
+/** @file\r
+*\r
+*  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+*  \r
+*  This program and the accompanying materials                          \r
+*  are licensed and made available under the terms and conditions of the BSD License         \r
+*  which accompanies this distribution.  The full text of the license may be found at        \r
+*  http://opensource.org/licenses/bsd-license.php                                            \r
+*\r
+*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+*\r
+**/\r
+\r
+#include <PiPei.h>\r
+#include <Library/PrePiHobListPointerLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+\r
+//
+// 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;\r
+\r
+\r
+/**\r
+  Returns the pointer to the HOB list.\r
+\r
+  This function returns the pointer to first HOB in the list.\r
+\r
+  @return The pointer to the HOB list.\r
+\r
+**/\r
+VOID *\r
+EFIAPI\r
+PrePeiGetHobList (\r
+  VOID\r
+  )\r
+{\r
+  if (gHobList == NULL) {\r
+    return (VOID *)*(UINTN*)(PcdGet32 (PcdCPUCoresNonSecStackBase) + (PcdGet32 (PcdCPUCoresNonSecStackSize) / 2) - PcdGet32 (PcdHobListPtrGlobalOffset));\r
+  } else {\r
+    return gHobList;\r
+  }\r
+}\r
+\r
+\r
+\r
+/**\r
+  Updates the pointer to the HOB list.\r
+\r
+  @param  HobList       Hob list pointer to store\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PrePeiSetHobList (\r
+  IN  VOID      *HobList\r
+  )\r
+{\r
+  gHobList = HobList;\r
+  \r
+  //\r
+  // If this code is running from ROM this could fail\r
+  //\r
+  return (gHobList == HobList) ? EFI_SUCCESS: EFI_UNSUPPORTED;\r
+}\r
diff --git a/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf b/ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
new file mode 100755 (executable)
index 0000000..5142f19
--- /dev/null
@@ -0,0 +1,37 @@
+#/** @file\r
+#\r
+#  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+#  \r
+#  This program and the accompanying materials                          \r
+#  are licensed and made available under the terms and conditions of the BSD License         \r
+#  which accompanies this distribution.  The full text of the license may be found at        \r
+#  http://opensource.org/licenses/bsd-license.php                                            \r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+#\r
+#**/\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = PrePiHobListPointerLib\r
+  FILE_GUID                      = d751d880-5ee2-11e0-b93e-0002a5d5c51b\r
+  MODULE_TYPE                    = BASE\r
+  VERSION_STRING                 = 1.0\r
+  LIBRARY_CLASS                  = PrePiHobListPointerLib\r
+\r
+[Sources]\r
+  PrePiHobListPointer.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  ArmPlatformPkg/ArmPlatformPkg.dec\r
+  EmbeddedPkg/EmbeddedPkg.dec\r
+\r
+[LibraryClasses]\r
+  \r
+[FixedPcd.common]\r
+  gArmPlatformTokenSpaceGuid.PcdHobListPtrGlobalOffset\r
+  gArmPlatformTokenSpaceGuid.PcdCPUCoresNonSecStackBase\r
+  gArmPlatformTokenSpaceGuid.PcdCPUCoresNonSecStackSize\r
+  
\ No newline at end of file