]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/PrePeiCore/MainUniCore.c
Add ArmPlatformPkg from ARM Ltd. patch.
[mirror_edk2.git] / ArmPlatformPkg / PrePeiCore / MainUniCore.c
diff --git a/ArmPlatformPkg/PrePeiCore/MainUniCore.c b/ArmPlatformPkg/PrePeiCore/MainUniCore.c
new file mode 100644 (file)
index 0000000..cf7d029
--- /dev/null
@@ -0,0 +1,53 @@
+/** @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/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+#include <Chipset/ArmV7.h>\r
+\r
+extern EFI_PEI_PPI_DESCRIPTOR *gSecPpiTable;\r
+\r
+VOID\r
+EFIAPI\r
+secondary_main(IN UINTN CoreId)\r
+{\r
+       ASSERT(FALSE);\r
+}\r
+\r
+VOID primary_main (\r
+  IN  EFI_PEI_CORE_ENTRY_POINT  PeiCoreEntryPoint\r
+  )\r
+{\r
+       EFI_SEC_PEI_HAND_OFF        SecCoreData;\r
+\r
+\r
+       //\r
+       // Bind this information into the SEC hand-off state\r
+       // Note: this must be in sync with the stuff in the asm file\r
+       // Note also:  HOBs (pei temp ram) MUST be above stack\r
+       //\r
+       SecCoreData.DataSize               = sizeof(EFI_SEC_PEI_HAND_OFF);\r
+       SecCoreData.BootFirmwareVolumeBase = (VOID *)(UINTN)PcdGet32 (PcdEmbeddedFdBaseAddress);\r
+       SecCoreData.BootFirmwareVolumeSize = PcdGet32 (PcdEmbeddedFdSize);\r
+       SecCoreData.TemporaryRamBase       = (VOID *)(UINTN)PcdGet32 (PcdCPUCoresNonSecStackBase); // We consider we run on the primary core (and so we use the first stack)\r
+       SecCoreData.TemporaryRamSize       = (UINTN)(UINTN)PcdGet32 (PcdCPUCoresNonSecStackSize);\r
+       SecCoreData.PeiTemporaryRamBase    = (VOID *)((UINTN)(SecCoreData.TemporaryRamBase) + (SecCoreData.TemporaryRamSize / 2));\r
+       SecCoreData.PeiTemporaryRamSize    = SecCoreData.TemporaryRamSize / 2;\r
+       SecCoreData.StackBase              = SecCoreData.TemporaryRamBase;\r
+       SecCoreData.StackSize              = SecCoreData.TemporaryRamSize - SecCoreData.PeiTemporaryRamSize;\r
+\r
+       // jump to pei core entry point\r
+       (PeiCoreEntryPoint)(&SecCoreData, (VOID *)&gSecPpiTable);\r
+}\r