From 248515801a51e7a78f815caa44ed0e308b8d71d9 Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Mon, 24 Aug 2009 15:22:14 +0000 Subject: Integrate the patch contributed by Andrew Fish to port MdeModulePkg to support ARM. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9174 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 20 +++ MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c | 70 ++++++++ MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 237 +++++++++++++------------ 3 files changed, 210 insertions(+), 117 deletions(-) create mode 100644 MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c (limited to 'MdeModulePkg/Core') diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c index 777e1db65a..3d8c00ce78 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -307,6 +307,26 @@ DxeMain ( DEBUG ((DEBUG_INFO | DEBUG_LOAD, "HOBLIST address in DXE = 0x%p\n", HobStart)); + DEBUG_CODE_BEGIN (); + EFI_PEI_HOB_POINTERS Hob; + + for (Hob.Raw = HobStart; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) { + if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_MEMORY_ALLOCATION) { + DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Memory Allocation %08x %0lx - %0lx\n", \ + Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress, \ + Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress + Hob.MemoryAllocation->AllocDescriptor.MemoryLength - 1, \ + Hob.MemoryAllocation->AllocDescriptor.MemoryType)); + } + } + for (Hob.Raw = HobStart; !END_OF_HOB_LIST(Hob); Hob.Raw = GET_NEXT_HOB(Hob)) { + if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV2) { + DEBUG ((DEBUG_INFO | DEBUG_LOAD, "FV2 Hob %08x %0lx - %0lx\n", Hob.FirmwareVolume2->BaseAddress, Hob.FirmwareVolume2->BaseAddress + Hob.FirmwareVolume2->Length - 1, Hob.ResourceDescriptor->ResourceType)); + } else if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV) { + DEBUG ((DEBUG_INFO | DEBUG_LOAD, "FV Hob %08x %0lx - %0lx\n", Hob.FirmwareVolume->BaseAddress, Hob.FirmwareVolume->BaseAddress + Hob.FirmwareVolume2->Length - 1, Hob.ResourceDescriptor->ResourceType)); + } + } + DEBUG_CODE_END (); + // // Initialize the Event Services // diff --git a/MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c b/MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c new file mode 100644 index 0000000000..dd64a35843 --- /dev/null +++ b/MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c @@ -0,0 +1,70 @@ +/** @file + ARM specifc functionality for DxeLoad. + +Copyright (c) 2006 - 2008, Intel Corporation.
+Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.
+ +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 "DxeIpl.h" + +/** + Transfers control to DxeCore. + + This function performs a CPU architecture specific operations to execute + the entry point of DxeCore with the parameters of HobList. + It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase. + + @param DxeCoreEntryPoint The entry point of DxeCore. + @param HobList The start of HobList passed to DxeCore. + +**/ +VOID +HandOffToDxeCore ( + IN EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint, + IN EFI_PEI_HOB_POINTERS HobList + ) +{ + VOID *BaseOfStack; + VOID *TopOfStack; + EFI_STATUS Status; + + // + // Allocate 128KB for the Stack + // + BaseOfStack = AllocatePages (EFI_SIZE_TO_PAGES (STACK_SIZE)); + ASSERT (BaseOfStack != NULL); + + // + // Compute the top of the stack we were allocated. Pre-allocate a UINTN + // for safety. + // + TopOfStack = (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT); + TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); + + // + // End of PEI phase singal + // + Status = PeiServicesInstallPpi (&gEndOfPeiSignalPpi); + ASSERT_EFI_ERROR (Status); + + // + // Update the contents of BSP stack HOB to reflect the real stack info passed to DxeCore. + // + UpdateStackHob ((EFI_PHYSICAL_ADDRESS)(UINTN) BaseOfStack, STACK_SIZE); + + SwitchStack ( + (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, + HobList.Raw, + NULL, + TopOfStack + ); +} diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf index fadf2ebc52..a345035f1f 100644 --- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf +++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf @@ -1,117 +1,120 @@ -#/** @file -# Last PEIM executed in PEI phase to load DXE Core from a Firmware Volume. -# -# This module produces a special PPI named the DXE Initial Program Load (IPL) -# PPI to discover and dispatch the DXE Foundation and components that are -# needed to run the DXE Foundation. -# -# Copyright (c) 2006 - 2009, Intel Corporation.
-# 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 = DxeIpl - FILE_GUID = 86D70125-BAA3-4296-A62F-602BEBBB9081 - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - - ENTRY_POINT = PeimInitializeDxeIpl - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is for build only) -# - -[Sources.common] - DxeIpl.h - DxeLoad.c - -[Sources.Ia32] - Ia32/VirtualMemory.h ||||PcdDxeIplSwitchToLongMode - Ia32/VirtualMemory.c ||||PcdDxeIplSwitchToLongMode - Ia32/DxeLoadFunc.c - Ia32/IdtVectorAsm.asm||||PcdDxeIplSwitchToLongMode - Ia32/IdtVectorAsm.S ||||PcdDxeIplSwitchToLongMode - -[Sources.X64] - X64/VirtualMemory.h - X64/VirtualMemory.c - X64/DxeLoadFunc.c - -[Sources.IPF] - Ipf/DxeLoadFunc.c - -[Sources.EBC] - Ebc/DxeLoadFunc.c - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - PcdLib - MemoryAllocationLib - BaseMemoryLib - ExtractGuidedSectionLib - UefiDecompressLib - ReportStatusCodeLib - PeiServicesLib - HobLib - BaseLib - PeimEntryPoint - DebugLib - -[Ppis] - gEfiDxeIplPpiGuid ## PRODUCES - gEfiEndOfPeiSignalPpiGuid ## SOMETIMES_PRODUCES(Not produced on S3 boot path) - gEfiPeiDecompressPpiGuid ## SOMETIMES_PRODUCES - gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES - gEfiPeiLoadFilePpiGuid ## CONSUMES - gEfiPeiS3ResumePpiGuid ## SOMETIMES_CONSUMES(Consumed on S3 boot path) - gEfiPeiRecoveryModulePpiGuid ## SOMETIMES_CONSUMES(Consumed on recovery boot path) - -[Guids] - gEfiMemoryTypeInformationGuid ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation" - gEfiMemoryTypeInformationGuid ## SOMETIMES_PRODUCES ## HOB - -[FeaturePcd.IA32] - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode - -[FeaturePcd.common] - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress - -[FixedPcd.common] - gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiHandoffToDxe - -[Depex] - gEfiPeiMemoryDiscoveredPpiGuid AND gEfiPeiLoadFilePpiGuid - -# -# [BootMode] -# S3_RESUME ## SOMETIMES_CONSUMES -# RECOVERY ## SOMETIMES_CONSUMES -# -# -# [Hob] -# ## -# # New Stack HoB -# MEMORY_ALLOCATION ## PRODUCES -# ## -# # Old Stack HOB -# MEMORY_ALLOCATION ## CONSUMES -# -# [Hob.IPF] -# ## -# # BSP Stack HOB for IPF -# MEMORY_ALLOCATION ## PRODUCES -# -# +#/** @file +# Last PEIM executed in PEI phase to load DXE Core from a Firmware Volume. +# +# This module produces a special PPI named the DXE Initial Program Load (IPL) +# PPI to discover and dispatch the DXE Foundation and components that are +# needed to run the DXE Foundation. +# +# Copyright (c) 2006 - 2009, Intel Corporation.
+# 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 = DxeIpl + FILE_GUID = 86D70125-BAA3-4296-A62F-602BEBBB9081 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + + ENTRY_POINT = PeimInitializeDxeIpl + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is for build only) +# + +[Sources.common] + DxeIpl.h + DxeLoad.c + +[Sources.Ia32] + Ia32/VirtualMemory.h ||||PcdDxeIplSwitchToLongMode + Ia32/VirtualMemory.c ||||PcdDxeIplSwitchToLongMode + Ia32/DxeLoadFunc.c + Ia32/IdtVectorAsm.asm||||PcdDxeIplSwitchToLongMode + Ia32/IdtVectorAsm.S ||||PcdDxeIplSwitchToLongMode + +[Sources.X64] + X64/VirtualMemory.h + X64/VirtualMemory.c + X64/DxeLoadFunc.c + +[Sources.IPF] + Ipf/DxeLoadFunc.c + +[Sources.EBC] + Ebc/DxeLoadFunc.c + +[Sources.ARM] + Arm/DxeLoadFunc.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + PcdLib + MemoryAllocationLib + BaseMemoryLib + ExtractGuidedSectionLib + UefiDecompressLib + ReportStatusCodeLib + PeiServicesLib + HobLib + BaseLib + PeimEntryPoint + DebugLib + +[Ppis] + gEfiDxeIplPpiGuid ## PRODUCES + gEfiEndOfPeiSignalPpiGuid ## SOMETIMES_PRODUCES(Not produced on S3 boot path) + gEfiPeiDecompressPpiGuid ## SOMETIMES_PRODUCES + gEfiPeiReadOnlyVariable2PpiGuid ## SOMETIMES_CONSUMES + gEfiPeiLoadFilePpiGuid ## CONSUMES + gEfiPeiS3ResumePpiGuid ## SOMETIMES_CONSUMES(Consumed on S3 boot path) + gEfiPeiRecoveryModulePpiGuid ## SOMETIMES_CONSUMES(Consumed on recovery boot path) + +[Guids] + gEfiMemoryTypeInformationGuid ## SOMETIMES_CONSUMES ## Variable:L"MemoryTypeInformation" + gEfiMemoryTypeInformationGuid ## SOMETIMES_PRODUCES ## HOB + +[FeaturePcd.IA32] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode + +[FeaturePcd.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportUefiDecompress + +[FixedPcd.common] + gEfiMdePkgTokenSpaceGuid.PcdStatusCodeValuePeiHandoffToDxe + +[Depex] + gEfiPeiMemoryDiscoveredPpiGuid AND gEfiPeiLoadFilePpiGuid + +# +# [BootMode] +# S3_RESUME ## SOMETIMES_CONSUMES +# RECOVERY ## SOMETIMES_CONSUMES +# +# +# [Hob] +# ## +# # New Stack HoB +# MEMORY_ALLOCATION ## PRODUCES +# ## +# # Old Stack HOB +# MEMORY_ALLOCATION ## CONSUMES +# +# [Hob.IPF] +# ## +# # BSP Stack HOB for IPF +# MEMORY_ALLOCATION ## PRODUCES +# +# -- cgit v1.2.3