diff options
author | qhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-08-24 15:22:14 +0000 |
---|---|---|
committer | qhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-08-24 15:22:14 +0000 |
commit | 248515801a51e7a78f815caa44ed0e308b8d71d9 (patch) | |
tree | 84d1d1e6a2ec41080c3c172dd8c8cfc1ef8315e2 /MdeModulePkg/Core | |
parent | 16a97771adb0678d5e22935a091aebfbfbd3f071 (diff) | |
download | edk2-platforms-248515801a51e7a78f815caa44ed0e308b8d71d9.tar.xz |
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
Diffstat (limited to 'MdeModulePkg/Core')
-rw-r--r-- | MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 20 | ||||
-rw-r--r-- | MdeModulePkg/Core/DxeIplPeim/Arm/DxeLoadFunc.c | 70 | ||||
-rw-r--r-- | MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 237 |
3 files changed, 210 insertions, 117 deletions
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. <BR> +Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR> + +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. <BR>
-# 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. <BR> +# 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 +# +# |