mirror of https://github.com/acidanthera/audk.git
Introduce PcdDxeIplSwitchToLongMode to DxeIplPeim and remove DxeIplX64Peim.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2018 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
ad3e8660d3
commit
abb26634f2
|
@ -23,6 +23,8 @@ Abstract:
|
|||
#define STACK_SIZE 0x20000
|
||||
#define BSP_STORE_SIZE 0x4000
|
||||
|
||||
#define GET_OCCUPIED_SIZE(ActualSize, Alignment) ((ActualSize + (Alignment - 1)) & ~(Alignment - 1))
|
||||
|
||||
extern BOOLEAN gInMemory;
|
||||
|
||||
/**
|
||||
|
@ -125,8 +127,9 @@ DxeLoadCore (
|
|||
EFI_STATUS
|
||||
PeiProcessFile (
|
||||
IN UINT16 SectionType,
|
||||
IN OUT EFI_FFS_FILE_HEADER **RealFfsFileHeader,
|
||||
OUT VOID **Pe32Data
|
||||
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
|
||||
OUT VOID **Pe32Data,
|
||||
IN EFI_PEI_HOB_POINTERS *OrigHob
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<MsaHeader>
|
||||
<ModuleName>DxeIpl</ModuleName>
|
||||
<ModuleType>PEIM</ModuleType>
|
||||
|
@ -8,11 +8,11 @@
|
|||
<Abstract>Component description file for DxeIpl module</Abstract>
|
||||
<Description>The responsibility of this module is to load the DXE Core from a Firmware Volume. This implementation i used to load a 32-bit DXE Core.</Description>
|
||||
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
|
||||
<License>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,
|
||||
<License>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.</License>
|
||||
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||
</MsaHeader>
|
||||
|
@ -67,6 +67,9 @@
|
|||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>MemoryAllocationLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PcdLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>DxeLoad.c</Filename>
|
||||
|
@ -74,12 +77,17 @@
|
|||
<Filename>DxeIpl.dxs</Filename>
|
||||
<Filename SupArchList="IA32">Ia32/ImageRead.c</Filename>
|
||||
<Filename SupArchList="IA32">Ia32/DxeLoadFunc.c</Filename>
|
||||
<Filename SupArchList="IA32">Ia32/LongMode.asm</Filename>
|
||||
<Filename ToolChainFamily="GCC" SupArchList="IA32">Ia32/LongMode.S</Filename>
|
||||
<Filename SupArchList="IA32">Ia32/VirtualMemory.c</Filename>
|
||||
<Filename SupArchList="IA32">Ia32/VirtualMemory.h</Filename>
|
||||
<Filename SupArchList="X64">Ia32/ImageRead.c</Filename>
|
||||
<Filename SupArchList="X64">Ia32/DxeLoadFunc.c</Filename>
|
||||
<Filename SupArchList="IPF">ipf/ImageRead.c</Filename>
|
||||
<Filename SupArchList="IPF">ipf/DxeLoadFunc.c</Filename>
|
||||
<Filename SupArchList="EBC">Ia32/ImageRead.c</Filename>
|
||||
<Filename SupArchList="EBC">Ia32/DxeLoadFunc.c</Filename>
|
||||
<Filename SupArchList="X64 IPF EBC">Non-existing.c</Filename>
|
||||
</SourceFiles>
|
||||
<PackageDependencies>
|
||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||
|
@ -118,9 +126,6 @@
|
|||
<Ppi Usage="SOMETIMES_CONSUMED">
|
||||
<PpiCName>gEfiPeiSecurityPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="PRIVATE">
|
||||
<PpiCName>gPeiInMemoryGuid</PpiCName>
|
||||
</Ppi>
|
||||
</PPIs>
|
||||
<Guids>
|
||||
<GuidCNames Usage="SOMETIMES_CONSUMED">
|
||||
|
@ -134,4 +139,30 @@
|
|||
<ModuleEntryPoint>PeimInitializeDxeIpl</ModuleEntryPoint>
|
||||
</Extern>
|
||||
</Externs>
|
||||
<PcdCoded>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>FALSE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL will load a 64-bit DxeCore.</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the EFI Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Tiano Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Custom Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
</PcdCoded>
|
||||
</ModuleSurfaceArea>
|
|
@ -20,7 +20,11 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
#include "DxeIpl.h"
|
||||
|
||||
#ifndef __GNUC__
|
||||
#pragma warning( disable : 4305 )
|
||||
#endif
|
||||
|
||||
BOOLEAN gInMemory = FALSE;
|
||||
|
||||
|
@ -36,22 +40,17 @@ static EFI_PEI_FV_FILE_LOADER_PPI mLoadFilePpi = {
|
|||
DxeIplLoadFile
|
||||
};
|
||||
|
||||
static EFI_PEI_PPI_DESCRIPTOR mPpiLoadFile = {
|
||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||
static EFI_PEI_PPI_DESCRIPTOR mPpiList[] = {
|
||||
{
|
||||
EFI_PEI_PPI_DESCRIPTOR_PPI,
|
||||
&gEfiPeiFvFileLoaderPpiGuid,
|
||||
&mLoadFilePpi
|
||||
};
|
||||
|
||||
static EFI_PEI_PPI_DESCRIPTOR mPpiList = {
|
||||
},
|
||||
{
|
||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||
&gEfiDxeIplPpiGuid,
|
||||
&mDxeIplPpi
|
||||
};
|
||||
|
||||
static EFI_PEI_PPI_DESCRIPTOR mPpiPeiInMemory = {
|
||||
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
|
||||
&gPeiInMemoryGuid,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
static EFI_PEI_PPI_DESCRIPTOR mPpiSignal = {
|
||||
|
@ -60,38 +59,21 @@ static EFI_PEI_PPI_DESCRIPTOR mPpiSignal = {
|
|||
NULL
|
||||
};
|
||||
|
||||
DECOMPRESS_LIBRARY gEfiDecompress = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED DECOMPRESS_LIBRARY gEfiDecompress = {
|
||||
UefiDecompressGetInfo,
|
||||
UefiDecompress
|
||||
};
|
||||
|
||||
DECOMPRESS_LIBRARY gTianoDecompress = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED DECOMPRESS_LIBRARY gTianoDecompress = {
|
||||
TianoDecompressGetInfo,
|
||||
TianoDecompress
|
||||
};
|
||||
|
||||
DECOMPRESS_LIBRARY gCustomDecompress = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED DECOMPRESS_LIBRARY gCustomDecompress = {
|
||||
CustomDecompressGetInfo,
|
||||
CustomDecompress
|
||||
};
|
||||
|
||||
STATIC
|
||||
UINTN
|
||||
GetOccupiedSize (
|
||||
IN UINTN ActualSize,
|
||||
IN UINTN Alignment
|
||||
)
|
||||
{
|
||||
UINTN OccupiedSize;
|
||||
|
||||
OccupiedSize = ActualSize;
|
||||
while ((OccupiedSize & (Alignment - 1)) != 0) {
|
||||
OccupiedSize++;
|
||||
}
|
||||
|
||||
return OccupiedSize;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeimInitializeDxeIpl (
|
||||
|
@ -120,17 +102,9 @@ Returns:
|
|||
EFI_BOOT_MODE BootMode;
|
||||
|
||||
Status = PeiServicesGetBootMode (&BootMode);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gPeiInMemoryGuid,
|
||||
0,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) {
|
||||
if (!gInMemory && (BootMode != BOOT_ON_S3_RESUME)) {
|
||||
//
|
||||
// The DxeIpl has not yet been shadowed
|
||||
//
|
||||
|
@ -140,38 +114,15 @@ Returns:
|
|||
// Shadow DxeIpl and then re-run its entry point
|
||||
//
|
||||
Status = ShadowDxeIpl (FfsHeader, PeiEfiPeiPeCoffLoader);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (BootMode != BOOT_ON_S3_RESUME) {
|
||||
//
|
||||
// The DxeIpl has been shadowed
|
||||
// Install FvFileLoader and DxeIpl PPIs.
|
||||
//
|
||||
gInMemory = TRUE;
|
||||
|
||||
//
|
||||
// Install LoadFile PPI
|
||||
//
|
||||
Status = PeiServicesInstallPpi (&mPpiLoadFile);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Install DxeIpl PPI
|
||||
//
|
||||
PeiServicesInstallPpi (&mPpiList);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = PeiServicesInstallPpi (mPpiList);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
|
@ -200,12 +151,13 @@ Returns:
|
|||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
VOID *TopOfStack;
|
||||
VOID *BaseOfStack;
|
||||
EFI_PHYSICAL_ADDRESS TopOfStack;
|
||||
EFI_PHYSICAL_ADDRESS BaseOfStack;
|
||||
EFI_PHYSICAL_ADDRESS BspStore;
|
||||
EFI_GUID DxeCoreFileName;
|
||||
EFI_GUID FirmwareFileName;
|
||||
VOID *Pe32Data;
|
||||
VOID *FvImageData;
|
||||
EFI_PHYSICAL_ADDRESS DxeCoreAddress;
|
||||
UINT64 DxeCoreSize;
|
||||
EFI_PHYSICAL_ADDRESS DxeCoreEntryPoint;
|
||||
|
@ -213,104 +165,32 @@ Returns:
|
|||
EFI_BOOT_MODE BootMode;
|
||||
EFI_PEI_RECOVERY_MODULE_PPI *PeiRecovery;
|
||||
EFI_PEI_S3_RESUME_PPI *S3Resume;
|
||||
EFI_PHYSICAL_ADDRESS PageTables;
|
||||
|
||||
// PERF_START (PeiServices, L"DxeIpl", NULL, 0);
|
||||
TopOfStack = NULL;
|
||||
BaseOfStack = NULL;
|
||||
TopOfStack = 0;
|
||||
BaseOfStack = 0;
|
||||
BspStore = 0;
|
||||
Status = EFI_SUCCESS;
|
||||
PageTables = 0;
|
||||
|
||||
//
|
||||
// if in S3 Resume, restore configure
|
||||
//
|
||||
Status = PeiServicesGetBootMode (&BootMode);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
|
||||
if (!EFI_ERROR (Status) && (BootMode == BOOT_ON_S3_RESUME)) {
|
||||
if (BootMode == BOOT_ON_S3_RESUME) {
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiPeiS3ResumePpiGuid,
|
||||
0,
|
||||
NULL,
|
||||
(VOID **)&S3Resume
|
||||
);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
Status = S3Resume->S3RestoreConfig (PeiServices);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
//
|
||||
// Install the PEI Protocols that are shared between PEI and DXE
|
||||
//
|
||||
PeiEfiPeiPeCoffLoader = (EFI_PEI_PE_COFF_LOADER_PROTOCOL *)GetPeCoffLoaderProtocol ();
|
||||
ASSERT (PeiEfiPeiPeCoffLoader != NULL);
|
||||
|
||||
|
||||
//
|
||||
// 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);
|
||||
|
||||
//
|
||||
// Add architecture-specifc HOBs (including the BspStore HOB)
|
||||
//
|
||||
Status = CreateArchSpecificHobs (&BspStore);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Add HOB for the EFI Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiDecompressProtocolGuid,
|
||||
(VOID *)&gEfiDecompress,
|
||||
sizeof (gEfiDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the Tiano Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiTianoDecompressProtocolGuid,
|
||||
(VOID *)&gTianoDecompress,
|
||||
sizeof (gTianoDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the user customized Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiCustomizedDecompressProtocolGuid,
|
||||
(VOID *)&gCustomDecompress,
|
||||
sizeof (gCustomDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the PE/COFF Loader Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiPeiPeCoffLoaderGuid,
|
||||
(VOID *)&PeiEfiPeiPeCoffLoader,
|
||||
sizeof (VOID *)
|
||||
);
|
||||
|
||||
//
|
||||
// See if we are in crisis recovery
|
||||
//
|
||||
Status = PeiServicesGetBootMode (&BootMode);
|
||||
|
||||
if (!EFI_ERROR (Status) && (BootMode == BOOT_IN_RECOVERY_MODE)) {
|
||||
} else if (BootMode == BOOT_IN_RECOVERY_MODE) {
|
||||
|
||||
Status = PeiServicesLocatePpi (
|
||||
&gEfiPeiRecoveryModulePpiGuid,
|
||||
|
@ -318,8 +198,8 @@ Returns:
|
|||
NULL,
|
||||
(VOID **)&PeiRecovery
|
||||
);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
Status = PeiRecovery->LoadRecoveryCapsule (PeiServices, PeiRecovery);
|
||||
if (EFI_ERROR (Status)) {
|
||||
DEBUG ((EFI_D_ERROR, "Load Recovery Capsule Failed.(Status = %r)\n", Status));
|
||||
|
@ -332,19 +212,34 @@ Returns:
|
|||
}
|
||||
|
||||
//
|
||||
// Find the EFI_FV_FILETYPE_RAW type compressed Firmware Volume file in FTW spare block
|
||||
// Install the PEI Protocols that are shared between PEI and DXE
|
||||
//
|
||||
PeiEfiPeiPeCoffLoader = (EFI_PEI_PE_COFF_LOADER_PROTOCOL *)GetPeCoffLoaderProtocol ();
|
||||
ASSERT (PeiEfiPeiPeCoffLoader != NULL);
|
||||
|
||||
//
|
||||
// Allocate 128KB for the Stack
|
||||
//
|
||||
PeiServicesAllocatePages (EfiBootServicesData, EFI_SIZE_TO_PAGES (STACK_SIZE), &BaseOfStack);
|
||||
ASSERT (BaseOfStack != 0);
|
||||
|
||||
//
|
||||
// Add architecture-specifc HOBs (including the BspStore HOB)
|
||||
//
|
||||
Status = CreateArchSpecificHobs (&BspStore);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Find the EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE type compressed Firmware Volume file
|
||||
// The file found will be processed by PeiProcessFile: It will first be decompressed to
|
||||
// a normal FV, then a corresponding FV type hob will be built which is provided for DXE
|
||||
// core to find and dispatch drivers in this FV. Because PeiProcessFile typically checks
|
||||
// for EFI_FV_FILETYPE_DXE_CORE type file, in this condition we need not check returned
|
||||
// status
|
||||
// a normal FV, then a corresponding FV type hob will be built.
|
||||
//
|
||||
Status = PeiFindFile (
|
||||
EFI_FV_FILETYPE_RAW,
|
||||
EFI_SECTION_PE32,
|
||||
&FirmwareFileName,
|
||||
&Pe32Data
|
||||
);
|
||||
EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE,
|
||||
EFI_SECTION_FIRMWARE_VOLUME_IMAGE,
|
||||
&FirmwareFileName,
|
||||
&FvImageData
|
||||
);
|
||||
|
||||
//
|
||||
// Find the DXE Core in a Firmware Volume
|
||||
|
@ -355,20 +250,18 @@ Returns:
|
|||
&DxeCoreFileName,
|
||||
&Pe32Data
|
||||
);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Load the DXE Core from a Firmware Volume
|
||||
//
|
||||
Status = PeiLoadFile (
|
||||
PeiEfiPeiPeCoffLoader,
|
||||
Pe32Data,
|
||||
&DxeCoreAddress,
|
||||
&DxeCoreSize,
|
||||
&DxeCoreEntryPoint
|
||||
);
|
||||
|
||||
PeiEfiPeiPeCoffLoader,
|
||||
Pe32Data,
|
||||
&DxeCoreAddress,
|
||||
&DxeCoreSize,
|
||||
&DxeCoreEntryPoint
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
|
@ -377,7 +270,6 @@ Returns:
|
|||
//
|
||||
|
||||
Status = PeiServicesInstallPpi (&mPpiSignal);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
|
@ -399,14 +291,93 @@ Returns:
|
|||
);
|
||||
|
||||
DEBUG ((EFI_D_INFO, "DXE Core Entry\n"));
|
||||
SwitchIplStacks (
|
||||
(SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
|
||||
HobList.Raw,
|
||||
NULL,
|
||||
TopOfStack,
|
||||
(VOID *) (UINTN) BspStore
|
||||
);
|
||||
if (FeaturePcdGet(PcdDxeIplSwitchToLongMode)) {
|
||||
//
|
||||
// Compute the top of the stack we were allocated, which is used to load X64 dxe core.
|
||||
// Pre-allocate a 32 bytes which confroms to x64 calling convention.
|
||||
//
|
||||
// The first four parameters to a function are passed in rcx, rdx, r8 and r9.
|
||||
// Any further parameters are pushed on the stack. Furthermore, space (4 * 8bytes) for the
|
||||
// register parameters is reserved on the stack, in case the called function
|
||||
// wants to spill them; this is important if the function is variadic.
|
||||
//
|
||||
TopOfStack = BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - 32;
|
||||
|
||||
//
|
||||
// X64 Calling Conventions requires that the stack must be aligned to 16 bytes
|
||||
//
|
||||
TopOfStack = (EFI_PHYSICAL_ADDRESS) (UINTN) ALIGN_POINTER (TopOfStack, 16);
|
||||
//
|
||||
// Load the GDT of Go64. Since the GDT of 32-bit Tiano locates in the BS_DATA
|
||||
// memory, it may be corrupted when copying FV to high-end memory
|
||||
//
|
||||
LoadGo64Gdt();
|
||||
//
|
||||
// Limit to 36 bits of addressing for debug. Should get it from CPU
|
||||
//
|
||||
PageTables = CreateIdentityMappingPageTables (36);
|
||||
//
|
||||
// Go to Long Mode. Interrupts will not get turned on until the CPU AP is loaded.
|
||||
// Call x64 drivers passing in single argument, a pointer to the HOBs.
|
||||
//
|
||||
ActivateLongMode (
|
||||
PageTables,
|
||||
(EFI_PHYSICAL_ADDRESS)(UINTN)(HobList.Raw),
|
||||
TopOfStack,
|
||||
0x00000000,
|
||||
DxeCoreEntryPoint
|
||||
);
|
||||
} else {
|
||||
//
|
||||
// Add HOB for the EFI Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiDecompressProtocolGuid,
|
||||
(VOID *)&gEfiDecompress,
|
||||
sizeof (gEfiDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the Tiano Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiTianoDecompressProtocolGuid,
|
||||
(VOID *)&gTianoDecompress,
|
||||
sizeof (gTianoDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the user customized Decompress Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiCustomizedDecompressProtocolGuid,
|
||||
(VOID *)&gCustomDecompress,
|
||||
sizeof (gCustomDecompress)
|
||||
);
|
||||
|
||||
//
|
||||
// Add HOB for the PE/COFF Loader Protocol
|
||||
//
|
||||
BuildGuidDataHob (
|
||||
&gEfiPeiPeCoffLoaderGuid,
|
||||
(VOID *)&PeiEfiPeiPeCoffLoader,
|
||||
sizeof (VOID *)
|
||||
);
|
||||
//
|
||||
// Compute the top of the stack we were allocated. Pre-allocate a UINTN
|
||||
// for safety.
|
||||
//
|
||||
TopOfStack = BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT;
|
||||
TopOfStack = (EFI_PHYSICAL_ADDRESS) (UINTN) ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
|
||||
|
||||
SwitchIplStacks (
|
||||
(SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,
|
||||
HobList.Raw,
|
||||
NULL,
|
||||
(VOID *) (UINTN) TopOfStack,
|
||||
(VOID *) (UINTN) BspStore
|
||||
);
|
||||
}
|
||||
//
|
||||
// If we get here, then the DXE Core returned. This is an error
|
||||
// Dxe Core should not return.
|
||||
|
@ -462,10 +433,11 @@ Returns:
|
|||
FwVolHeader = NULL;
|
||||
FfsFileHeader = NULL;
|
||||
SectionData = NULL;
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
//
|
||||
// Foreach Firmware Volume, look for a specified type
|
||||
// of file and break out when one is found
|
||||
// For each Firmware Volume, look for a specified type
|
||||
// of file and break out until no one is found
|
||||
//
|
||||
Hob.Raw = GetHobList ();
|
||||
while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_FV, Hob.Raw)) != NULL) {
|
||||
|
@ -478,11 +450,14 @@ Returns:
|
|||
if (!EFI_ERROR (Status)) {
|
||||
Status = PeiProcessFile (
|
||||
SectionType,
|
||||
&FfsFileHeader,
|
||||
Pe32Data
|
||||
FfsFileHeader,
|
||||
Pe32Data,
|
||||
&Hob
|
||||
);
|
||||
CopyMem (FileName, &FfsFileHeader->Name, sizeof (EFI_GUID));
|
||||
return Status;
|
||||
if (!EFI_ERROR (Status)) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||
}
|
||||
|
@ -608,7 +583,7 @@ Returns:
|
|||
|
||||
while ((Section->Type != EFI_SECTION_PE32) && (Section->Type != EFI_SECTION_TE)) {
|
||||
SectionLength = *(UINT32 *) (Section->Size) & 0x00ffffff;
|
||||
OccupiedSectionLength = GetOccupiedSize (SectionLength, 4);
|
||||
OccupiedSectionLength = GET_OCCUPIED_SIZE (SectionLength, 4);
|
||||
Section = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) Section + OccupiedSectionLength);
|
||||
}
|
||||
//
|
||||
|
@ -624,14 +599,9 @@ Returns:
|
|||
|
||||
if (Status == EFI_SUCCESS) {
|
||||
//
|
||||
// Install PeiInMemory to indicate the Dxeipl is shadowed
|
||||
// Set gInMemory global variable to TRUE to indicate the dxeipl is shadowed.
|
||||
//
|
||||
Status = PeiServicesInstallPpi (&mPpiPeiInMemory);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
*(BOOLEAN *) ((UINTN) &gInMemory + (UINTN) DxeIplEntryPoint - (UINTN) _ModuleEntryPoint) = TRUE;
|
||||
Status = ((EFI_PEIM_ENTRY_POINT) (UINTN) DxeIplEntryPoint) (DxeIplFileHeader, GetPeiServicesTablePointer());
|
||||
}
|
||||
|
||||
|
@ -689,8 +659,9 @@ Returns:
|
|||
//
|
||||
Status = PeiProcessFile (
|
||||
EFI_SECTION_PE32,
|
||||
&FfsHeader,
|
||||
&Pe32Data
|
||||
FfsHeader,
|
||||
&Pe32Data,
|
||||
NULL
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
|
@ -713,8 +684,9 @@ Returns:
|
|||
EFI_STATUS
|
||||
PeiProcessFile (
|
||||
IN UINT16 SectionType,
|
||||
IN OUT EFI_FFS_FILE_HEADER **RealFfsFileHeader,
|
||||
OUT VOID **Pe32Data
|
||||
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
|
||||
OUT VOID **Pe32Data,
|
||||
IN EFI_PEI_HOB_POINTERS *OrigHob
|
||||
)
|
||||
/*++
|
||||
|
||||
|
@ -762,9 +734,7 @@ Returns:
|
|||
EFI_GUID TempGuid;
|
||||
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
|
||||
EFI_COMPRESSION_SECTION *CompressionSection;
|
||||
EFI_FFS_FILE_HEADER *FfsFileHeader;
|
||||
|
||||
FfsFileHeader = *RealFfsFileHeader;
|
||||
UINT32 FvAlignment;
|
||||
|
||||
Status = PeiServicesFfsFindSectionData (
|
||||
EFI_SECTION_COMPRESSION,
|
||||
|
@ -773,7 +743,7 @@ Returns:
|
|||
);
|
||||
|
||||
//
|
||||
// Upon finding a DXE Core file, see if there is first a compression section
|
||||
// First process the compression section
|
||||
//
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
|
@ -784,7 +754,7 @@ Returns:
|
|||
|
||||
do {
|
||||
SectionLength = *(UINT32 *) (Section->Size) & 0x00ffffff;
|
||||
OccupiedSectionLength = GetOccupiedSize (SectionLength, 4);
|
||||
OccupiedSectionLength = GET_OCCUPIED_SIZE (SectionLength, 4);
|
||||
|
||||
//
|
||||
// Was the DXE Core file encapsulated in a GUID'd section?
|
||||
|
@ -881,14 +851,24 @@ Returns:
|
|||
|
||||
switch (CompressionSection->CompressionType) {
|
||||
case EFI_STANDARD_COMPRESSION:
|
||||
DecompressLibrary = &gTianoDecompress;
|
||||
if (FeaturePcdGet (PcdDxeIplSupportTianoDecompress)) {
|
||||
DecompressLibrary = &gTianoDecompress;
|
||||
} else {
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
break;
|
||||
|
||||
case EFI_CUSTOMIZED_COMPRESSION:
|
||||
//
|
||||
// Load user customized compression protocol.
|
||||
//
|
||||
DecompressLibrary = &gCustomDecompress;
|
||||
if (FeaturePcdGet (PcdDxeIplSupportCustomDecompress)) {
|
||||
DecompressLibrary = &gCustomDecompress;
|
||||
} else {
|
||||
ASSERT (FALSE);
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
break;
|
||||
|
||||
case EFI_NOT_COMPRESSED:
|
||||
|
@ -939,31 +919,64 @@ Returns:
|
|||
);
|
||||
|
||||
CmpSection = (EFI_COMMON_SECTION_HEADER *) DstBuffer;
|
||||
if (CmpSection->Type == EFI_SECTION_RAW) {
|
||||
if (CmpSection->Type == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) {
|
||||
//
|
||||
// Firmware Volume Image in this Section
|
||||
// Skip the section header to get FvHeader
|
||||
//
|
||||
// Skip the section header and
|
||||
// adjust the pointer alignment to 16
|
||||
//
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (DstBuffer + 16);
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) (CmpSection + 1);
|
||||
|
||||
if (FvHeader->Signature == EFI_FVH_SIGNATURE) {
|
||||
FfsFileHeader = NULL;
|
||||
if (FvHeader->Signature == EFI_FVH_SIGNATURE) {
|
||||
//
|
||||
// Adjust Fv Base Address Alignment based on Align Attributes in Fv Header
|
||||
//
|
||||
|
||||
//
|
||||
// When FvImage support Alignment, we need to check whether
|
||||
// its alignment is correct.
|
||||
//
|
||||
if (FvHeader->Attributes | EFI_FVB_ALIGNMENT_CAP) {
|
||||
|
||||
//
|
||||
// Calculate the mini alignment for this FvImage
|
||||
//
|
||||
FvAlignment = 1 << (LowBitSet32 (FvHeader->Attributes >> 16) + 1);
|
||||
|
||||
//
|
||||
// If current FvImage base address doesn't meet the its alignment,
|
||||
// we need to reload this FvImage to another correct memory address.
|
||||
//
|
||||
if (((UINTN) FvHeader % FvAlignment) != 0) {
|
||||
DstBuffer = AllocateAlignedPages (EFI_SIZE_TO_PAGES ((UINTN) FvHeader->FvLength), FvAlignment);
|
||||
if (DstBuffer == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
CopyMem (DstBuffer, FvHeader, (UINTN) FvHeader->FvLength);
|
||||
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) DstBuffer;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Build new FvHob for new decompressed Fv image.
|
||||
//
|
||||
BuildFvHob ((EFI_PHYSICAL_ADDRESS) (UINTN) FvHeader, FvHeader->FvLength);
|
||||
Status = PeiServicesFfsFindNextFile (
|
||||
EFI_FV_FILETYPE_DXE_CORE,
|
||||
FvHeader,
|
||||
&FfsFileHeader
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
|
||||
//
|
||||
// Set the original FvHob to unused.
|
||||
//
|
||||
if (OrigHob != NULL) {
|
||||
OrigHob->Header->HobType = EFI_HOB_TYPE_UNUSED;
|
||||
}
|
||||
|
||||
//
|
||||
// when search FvImage Section return true.
|
||||
//
|
||||
if (SectionType == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) {
|
||||
*Pe32Data = (VOID *) FvHeader;
|
||||
return EFI_SUCCESS;
|
||||
} else {
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
//
|
||||
// Reture the FfsHeader that contain Pe32Data.
|
||||
//
|
||||
*RealFfsFileHeader = FfsFileHeader;
|
||||
return PeiProcessFile (SectionType, RealFfsFileHeader, Pe32Data);
|
||||
}
|
||||
}
|
||||
//
|
||||
|
@ -982,10 +995,13 @@ Returns:
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
OccupiedCmpSectionLength = GetOccupiedSize (CmpSectionLength, 4);
|
||||
OccupiedCmpSectionLength = GET_OCCUPIED_SIZE (CmpSectionLength, 4);
|
||||
CmpSection = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) CmpSection + OccupiedCmpSectionLength);
|
||||
} while (CmpSection->Type != 0 && (UINTN) ((UINT8 *) CmpSection - (UINT8 *) CmpFileData) < CmpFileSize);
|
||||
}
|
||||
//
|
||||
// End of the decompression activity
|
||||
//
|
||||
|
||||
Section = (EFI_COMMON_SECTION_HEADER *) ((UINT8 *) Section + OccupiedSectionLength);
|
||||
FileSize = FfsFileHeader->Size[0] & 0xFF;
|
||||
|
@ -993,11 +1009,17 @@ Returns:
|
|||
FileSize += (FfsFileHeader->Size[2] << 16) & 0xFF0000;
|
||||
FileSize &= 0x00FFFFFF;
|
||||
} while (Section->Type != 0 && (UINTN) ((UINT8 *) Section - (UINT8 *) FfsFileHeader) < FileSize);
|
||||
|
||||
|
||||
//
|
||||
// End of the decompression activity
|
||||
// search all sections (compression and non compression) in this FFS, don't
|
||||
// find expected section.
|
||||
//
|
||||
return EFI_NOT_FOUND;
|
||||
} else {
|
||||
//
|
||||
// For those FFS that doesn't contain compression section, directly search
|
||||
// PE or TE section in this FFS.
|
||||
//
|
||||
|
||||
Status = PeiServicesFfsFindSectionData (
|
||||
EFI_SECTION_PE32,
|
||||
|
@ -1021,3 +1043,4 @@ Returns:
|
|||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
#include "DxeIpl.h"
|
||||
|
||||
EFI_STATUS
|
||||
CreateArchSpecificHobs (
|
||||
|
|
|
@ -17,7 +17,7 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
#include "DxeIpl.h"
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
|
|
|
@ -19,7 +19,7 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
#include "DxeIpl.h"
|
||||
|
||||
EFI_STATUS
|
||||
CreateArchSpecificHobs (
|
||||
|
|
|
@ -17,7 +17,7 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
#include "DxeIpl.h"
|
||||
|
||||
EFI_STATUS
|
||||
PeiImageRead (
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/** @file
|
||||
Non-existing functions other than Ia32 architecture.
|
||||
|
||||
Copyright (c) 2006, 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.
|
||||
|
||||
Module Name: Non-existing.c
|
||||
|
||||
**/
|
||||
|
||||
#include "DxeIpl.h"
|
||||
|
||||
EFI_PHYSICAL_ADDRESS
|
||||
CreateIdentityMappingPageTables (
|
||||
IN UINT32 NumberOfProcessorPhysicalAddressBits
|
||||
)
|
||||
{
|
||||
//
|
||||
// This function cannot work on non-Ia32 architecture.
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID
|
||||
ActivateLongMode (
|
||||
IN EFI_PHYSICAL_ADDRESS PageTables,
|
||||
IN EFI_PHYSICAL_ADDRESS HobStart,
|
||||
IN EFI_PHYSICAL_ADDRESS Stack,
|
||||
IN EFI_PHYSICAL_ADDRESS CodeEntryPoint1,
|
||||
IN EFI_PHYSICAL_ADDRESS CodeEntryPoint2
|
||||
)
|
||||
{
|
||||
//
|
||||
// This function cannot work on non-Ia32 architecture.
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
}
|
||||
|
||||
VOID
|
||||
LoadGo64Gdt(
|
||||
VOID
|
||||
)
|
||||
{
|
||||
//
|
||||
// This function cannot work on non-Ia32 architecture.
|
||||
//
|
||||
ASSERT (FALSE);
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 2006, 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.
|
||||
|
||||
Module Name:
|
||||
|
||||
DxeIpl.dxs
|
||||
|
||||
Abstract:
|
||||
|
||||
Dependency expression file for DXE Initial Program Loader PEIM.
|
||||
|
||||
--*/
|
||||
|
||||
#include <AutoGen.h>
|
||||
#include <PeimDepex.h>
|
||||
|
||||
DEPENDENCY_START
|
||||
EFI_PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID
|
||||
DEPENDENCY_END
|
||||
|
||||
|
|
@ -1,147 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 2006, 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.
|
||||
|
||||
Module Name:
|
||||
|
||||
DxeIpl.h
|
||||
|
||||
Abstract:
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef __PEI_DXEIPL_H__
|
||||
#define __PEI_DXEIPL_H__
|
||||
|
||||
#define STACK_SIZE 0x20000
|
||||
#define BSP_STORE_SIZE 0x4000
|
||||
|
||||
extern BOOLEAN gInMemory;
|
||||
|
||||
VOID
|
||||
SwitchIplStacks (
|
||||
VOID *EntryPoint,
|
||||
UINTN Parameter1,
|
||||
UINTN Parameter2,
|
||||
VOID *NewStack,
|
||||
VOID *NewBsp
|
||||
)
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
PeiFindFile (
|
||||
IN UINT8 Type,
|
||||
IN UINT16 SectionType,
|
||||
OUT EFI_GUID *FileName,
|
||||
OUT VOID **Pe32Data
|
||||
)
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
PeiLoadFile (
|
||||
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *PeiEfiPeiPeCoffLoader,
|
||||
IN VOID *Pe32Data,
|
||||
OUT EFI_PHYSICAL_ADDRESS *ImageAddress,
|
||||
OUT UINT64 *ImageSize,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EntryPoint
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
CreateArchSpecificHobs (
|
||||
OUT EFI_PHYSICAL_ADDRESS *BspStore
|
||||
)
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
GetImageReadFunction (
|
||||
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
PeiImageRead (
|
||||
IN VOID *FileHandle,
|
||||
IN UINTN FileOffset,
|
||||
IN OUT UINTN *ReadSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
;
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
DxeIplLoadFile (
|
||||
IN EFI_PEI_FV_FILE_LOADER_PPI *This,
|
||||
IN EFI_FFS_FILE_HEADER *FfsHeader,
|
||||
OUT EFI_PHYSICAL_ADDRESS *ImageAddress,
|
||||
OUT UINT64 *ImageSize,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EntryPoint
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
ShadowDxeIpl (
|
||||
IN EFI_FFS_FILE_HEADER *DxeIpl,
|
||||
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *PeiEfiPeiPeCoffLoader
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
DxeLoadCore (
|
||||
IN EFI_DXE_IPL_PPI *This,
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PEI_HOB_POINTERS HobList
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
PeiProcessFile (
|
||||
IN UINT16 SectionType,
|
||||
IN EFI_FFS_FILE_HEADER *FfsFileHeader,
|
||||
OUT VOID **Pe32Data,
|
||||
IN EFI_PEI_HOB_POINTERS *OrigHob
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeimInitializeDxeIpl (
|
||||
IN EFI_FFS_FILE_HEADER *FfsHeader,
|
||||
IN EFI_PEI_SERVICES **PeiServices
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
PeiLoadPeImage (
|
||||
IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *PeiEfiPeiPeCoffLoader,
|
||||
IN VOID *Pe32Data,
|
||||
IN EFI_MEMORY_TYPE MemoryType,
|
||||
OUT EFI_PHYSICAL_ADDRESS *ImageAddress,
|
||||
OUT UINT64 *ImageSize,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EntryPoint
|
||||
)
|
||||
;
|
||||
|
||||
EFI_PHYSICAL_ADDRESS
|
||||
CreateIdentityMappingPageTables (
|
||||
IN UINT32 NumberOfProcessorPhysicalAddressBits
|
||||
)
|
||||
;
|
||||
|
||||
VOID
|
||||
ActivateLongMode (
|
||||
IN EFI_PHYSICAL_ADDRESS PageTables,
|
||||
IN EFI_PHYSICAL_ADDRESS HobStart,
|
||||
IN EFI_PHYSICAL_ADDRESS Stack,
|
||||
IN EFI_PHYSICAL_ADDRESS CodeEntryPoint1,
|
||||
IN EFI_PHYSICAL_ADDRESS CodeEntryPoint2
|
||||
);
|
||||
|
||||
VOID
|
||||
LoadGo64Gdt();
|
||||
|
||||
#endif
|
|
@ -1,152 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<MsaHeader>
|
||||
<ModuleName>DxeIplX64</ModuleName>
|
||||
<ModuleType>PEIM</ModuleType>
|
||||
<GuidValue>0c55bdf7-d71d-4962-8fcb-348773e48929</GuidValue>
|
||||
<Version>1.0</Version>
|
||||
<Abstract>Component description file for DxeIplX64 module</Abstract>
|
||||
<Description>The responsibility of this module is to load the DXE Core from a Firmware Volume. This implementation i used to load a 64-bit DXE Core.</Description>
|
||||
<Copyright>Copyright 2006, Intel Corporation</Copyright>
|
||||
<License>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.</License>
|
||||
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||
</MsaHeader>
|
||||
<ModuleDefinitions>
|
||||
<SupportedArchitectures>IA32</SupportedArchitectures>
|
||||
<BinaryModule>false</BinaryModule>
|
||||
<OutputFileBasename>DxeIplX64</OutputFileBasename>
|
||||
</ModuleDefinitions>
|
||||
<LibraryClassDefinitions>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>DebugLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PeimEntryPoint</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>HobLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PeiServicesLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>ReportStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>CacheMaintenanceLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>EdkPeCoffLoaderLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiDecompressLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>TianoDecompressLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>CustomDecompressLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PeiServicesTablePointerLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseMemoryLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>MemoryAllocationLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PcdLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>DxeIpl.dxs</Filename>
|
||||
<Filename>DxeIpl.h</Filename>
|
||||
<Filename>DxeLoadX64.c</Filename>
|
||||
<Filename SupArchList="IA32">x64/ImageRead.c</Filename>
|
||||
<Filename SupArchList="IA32">x64/LongMode.asm</Filename>
|
||||
<Filename SupArchList="IA32" ToolChainFamily="gcc">x64/LongMode.S</Filename>
|
||||
<Filename SupArchList="IA32">x64/DxeLoadFunc.c</Filename>
|
||||
<Filename SupArchList="IA32">x64/VirtualMemory.h</Filename>
|
||||
<Filename SupArchList="IA32">x64/VirtualMemory.c</Filename>
|
||||
</SourceFiles>
|
||||
<PackageDependencies>
|
||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||
<Package PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d"/>
|
||||
</PackageDependencies>
|
||||
<Protocols>
|
||||
<Protocol Usage="ALWAYS_CONSUMED">
|
||||
<ProtocolCName>gEfiDecompressProtocolGuid</ProtocolCName>
|
||||
</Protocol>
|
||||
<Protocol Usage="ALWAYS_CONSUMED">
|
||||
<ProtocolCName>gEfiTianoDecompressProtocolGuid</ProtocolCName>
|
||||
</Protocol>
|
||||
<Protocol Usage="ALWAYS_CONSUMED">
|
||||
<ProtocolCName>gEfiCustomizedDecompressProtocolGuid</ProtocolCName>
|
||||
</Protocol>
|
||||
</Protocols>
|
||||
<PPIs>
|
||||
<Ppi Usage="SOMETIMES_PRODUCED">
|
||||
<PpiCName>gEfiDxeIplPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_PRODUCED">
|
||||
<PpiCName>gEfiPeiFvFileLoaderPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_PRODUCED">
|
||||
<PpiCName>gEfiEndOfPeiSignalPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_CONSUMED">
|
||||
<PpiCName>gEfiPeiRecoveryModulePpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_CONSUMED">
|
||||
<PpiCName>gEfiPeiS3ResumePpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_CONSUMED">
|
||||
<PpiCName>gEfiPeiSectionExtractionPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
<Ppi Usage="SOMETIMES_CONSUMED">
|
||||
<PpiCName>gEfiPeiSecurityPpiGuid</PpiCName>
|
||||
</Ppi>
|
||||
</PPIs>
|
||||
<Guids>
|
||||
<GuidCNames Usage="ALWAYS_CONSUMED">
|
||||
<GuidCName>gEfiPeiPeCoffLoaderGuid</GuidCName>
|
||||
</GuidCNames>
|
||||
</Guids>
|
||||
<Externs>
|
||||
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||
<Extern>
|
||||
<ModuleEntryPoint>PeimInitializeDxeIpl</ModuleEntryPoint>
|
||||
</Extern>
|
||||
</Externs>
|
||||
<PcdCoded>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the EFI Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Tiano Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry PcdItemType="FEATURE_FLAG" Usage="ALWAYS_CONSUMED">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DefaultValue>TRUE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Custom Compression algorithm</HelpText>
|
||||
</PcdEntry>
|
||||
</PcdCoded>
|
||||
</ModuleSurfaceArea>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,53 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 2006, 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.
|
||||
|
||||
Module Name:
|
||||
|
||||
DxeLoadFunc.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Ia32-specifc functionality for DxeLoad X64 Lakeport.
|
||||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
|
||||
EFI_STATUS
|
||||
CreateArchSpecificHobs (
|
||||
OUT EFI_PHYSICAL_ADDRESS *BspStore
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Creates architecture-specific HOBs.
|
||||
|
||||
Note: New parameters should NOT be added for any HOBs that are added to this
|
||||
function. BspStore is a special case because it is required for the
|
||||
call to SwitchStacks() in DxeLoad().
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - General purpose services available to every PEIM.
|
||||
BspStore - The address of the BSP Store for those architectures that need
|
||||
it. Otherwise 0.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - The HOBs were created successfully.
|
||||
|
||||
--*/
|
||||
{
|
||||
*BspStore = 0;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 2006, 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.
|
||||
|
||||
Module Name:
|
||||
|
||||
ImageRead.c
|
||||
|
||||
Abstract:
|
||||
|
||||
--*/
|
||||
|
||||
#include <DxeIpl.h>
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PeiImageRead (
|
||||
IN VOID *FileHandle,
|
||||
IN UINTN FileOffset,
|
||||
IN OUT UINTN *ReadSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Support routine for the PE/COFF Loader that reads a buffer from a PE/COFF file
|
||||
|
||||
Arguments:
|
||||
|
||||
FileHandle - The handle to the PE/COFF file
|
||||
|
||||
FileOffset - The offset, in bytes, into the file to read
|
||||
|
||||
ReadSize - The number of bytes to read from the file starting at FileOffset
|
||||
|
||||
Buffer - A pointer to the buffer to read the data into.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - ReadSize bytes of data were read into Buffer from the PE/COFF file starting at FileOffset
|
||||
|
||||
--*/
|
||||
{
|
||||
CHAR8 *Destination8;
|
||||
CHAR8 *Source8;
|
||||
UINTN Length;
|
||||
|
||||
Destination8 = Buffer;
|
||||
Source8 = (CHAR8 *) ((UINTN) FileHandle + FileOffset);
|
||||
Length = *ReadSize;
|
||||
while (Length--) {
|
||||
*(Destination8++) = *(Source8++);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
GetImageReadFunction (
|
||||
IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Support routine to return the PE32 Image Reader.
|
||||
If the PeiImageRead() function is less than a page
|
||||
in legnth. If the function is more than a page the DXE IPL will crash!!!!
|
||||
|
||||
Arguments:
|
||||
ImageContext - The context of the image being loaded
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - If Image function location is found
|
||||
|
||||
--*/
|
||||
{
|
||||
VOID *MemoryBuffer;
|
||||
|
||||
if (gInMemory) {
|
||||
ImageContext->ImageRead = PeiImageRead;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
//
|
||||
// BugBug; This code assumes PeiImageRead() is less than a page in size!
|
||||
// Allocate a page so we can shaddow the read function from FLASH into
|
||||
// memory to increase performance.
|
||||
//
|
||||
|
||||
MemoryBuffer = AllocateCopyPool (0x400, (VOID *)(UINTN) PeiImageRead);
|
||||
ASSERT (MemoryBuffer != NULL);
|
||||
|
||||
ImageContext->ImageRead = (PE_COFF_LOADER_READ_FILE) (UINTN) MemoryBuffer;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
|
@ -986,6 +986,38 @@
|
|||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>10000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<Token>0x0001003b</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>FALSE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<Token>0x00010034</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<Token>0x00010035</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<Token>0x00010036</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
</PcdBuildDefinition>
|
||||
<ModuleSaBuildOptions>
|
||||
<FvBinding>NULL</FvBinding>
|
||||
|
@ -6620,6 +6652,38 @@
|
|||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>10000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<Token>0x0001003b</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>FALSE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<Token>0x00010034</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<Token>0x00010035</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<Token>0x00010036</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
</PcdBuildDefinition>
|
||||
<ModuleSaBuildOptions>
|
||||
<FvBinding>NULL</FvBinding>
|
||||
|
@ -11035,6 +11099,38 @@
|
|||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>10000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<Token>0x0001003b</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>FALSE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<Token>0x00010034</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<Token>0x00010035</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<Token>0x00010036</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
</PcdBuildDefinition>
|
||||
<ModuleSaBuildOptions>
|
||||
<FvBinding>NULL</FvBinding>
|
||||
|
@ -15454,6 +15550,38 @@
|
|||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>10000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<Token>0x0001003b</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>FALSE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<Token>0x00010034</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<Token>0x00010035</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<Token>0x00010036</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
</PcdBuildDefinition>
|
||||
<ModuleSaBuildOptions>
|
||||
<FvBinding>NULL</FvBinding>
|
||||
|
@ -19420,146 +19548,6 @@
|
|||
</ModuleSaBuildOptions>
|
||||
</ModuleSA>
|
||||
<!--Mod: DxeIplX64 Type: PEIM Path: EdkModulePkg\Core\DxeIplX64Peim\DxeIplX64.msa-->
|
||||
<ModuleSA ModuleGuid="0c55bdf7-d71d-4962-8fcb-348773e48929" ModuleVersion="1.0" PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d" PackageVersion="0.3" SupArchList="IA32">
|
||||
<Libraries>
|
||||
<!--Pkg: EdkModulePkg Mod: BaseCustomDecompressLibNull Path: EdkModulePkg\Library\BaseCustomDecompressLibNull\BaseCustomDecompressLibNull.msa-->
|
||||
<Instance ModuleGuid="e5566134-c75e-4ace-bad1-e23a3b335e30" ModuleVersion="1.0" PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d" PackageVersion="0.3"/>
|
||||
<!--Pkg: EdkModulePkg Mod: BaseUefiTianoDecompressLib Path: EdkModulePkg\Library\BaseUefiTianoDecompressLib\BaseUefiTianoDecompressLib.msa-->
|
||||
<Instance ModuleGuid="d774c4d9-c121-4da3-a5e2-0f317e3c630c" ModuleVersion="1.0" PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiMemoryAllocationLib Path: MdePkg\Library\PeiMemoryAllocationLib\PeiMemoryAllocationLib.msa-->
|
||||
<Instance ModuleGuid="b694e0dc-cd4e-4b30-885b-9c164ed3e74a" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiDxeDebugLibReportStatusCode Path: MdePkg\Library\PeiDxeDebugLibReportStatusCode\PeiDxeDebugLibReportStatusCode.msa-->
|
||||
<Instance ModuleGuid="bda39d3a-451b-4350-8266-81ab10fa0523" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiPcdLib Path: MdePkg\Library\PeiPcdLib\PeiPcdLib.msa-->
|
||||
<Instance ModuleGuid="9dbf6f25-0da2-4a1d-8e12-e78de6ab4d0e" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: EdkModulePkg Mod: EdkPeCoffLoaderLib Path: EdkModulePkg\Library\EdkPeCoffLoaderLib\EdkPeCoffLoaderLib.msa-->
|
||||
<Instance ModuleGuid="858bbbc9-474f-4556-a361-0ae52a44ffa5" ModuleVersion="1.0" PackageGuid="68169ab0-d41b-4009-9060-292c253ac43d" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: BasePeCoffLib Path: MdePkg\Library\BasePeCoffLib\BasePeCoffLib.msa-->
|
||||
<Instance ModuleGuid="556f5d10-7309-4af4-b80a-8196bd60946f" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiHobLib Path: MdePkg\Library\PeiHobLib\PeiHobLib.msa-->
|
||||
<Instance ModuleGuid="9643128f-ac24-4b3e-b6be-d8849a306153" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiMemoryLib Path: MdePkg\Library\PeiMemoryLib\PeiMemoryLib.msa-->
|
||||
<Instance ModuleGuid="3a9759d2-53bc-4eb2-abcd-c93099419063" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiReportStatusCodeLib Path: MdePkg\Library\PeiReportStatusCodeLib\PeiReportStatusCodeLib.msa-->
|
||||
<Instance ModuleGuid="8c690838-7a22-45c4-aa58-a33e3e515cd4" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiIoLibCpuIo Path: MdePkg\Library\PeiIoLibCpuIo\PeiIoLibCpuIo.msa-->
|
||||
<Instance ModuleGuid="b2585b69-fb63-4220-844a-8fbea8bf01af" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiServicesTablePointerLibMm7 Path: MdePkg\Library\PeiServicesTablePointerLibMm7\PeiServicesTablePointerLibMm7.msa-->
|
||||
<Instance ModuleGuid="e6e9c1f8-2c8a-4f4b-a27c-c382e4bb8e67" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: BaseLib Path: MdePkg\Library\BaseLib\BaseLib.msa-->
|
||||
<Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeiServicesLib Path: MdePkg\Library\PeiServicesLib\PeiServicesLib.msa-->
|
||||
<Instance ModuleGuid="a804239b-4155-446f-acc8-f0825d74908c" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: BaseTimerLibLocalApic Path: MdePkg\Library\BaseTimerLibLocalApic\BaseTimerLibLocalApic.msa-->
|
||||
<Instance ModuleGuid="b5a05743-9b71-489b-a0ed-a0eb3950d23b" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: PeimEntryPoint Path: MdePkg\Library\PeimEntryPoint\PeimEntryPoint.msa-->
|
||||
<Instance ModuleGuid="fa177ff7-1fc7-458d-a358-d9d62ae61cec" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
<!--Pkg: MdePkg Mod: BaseCacheMaintenanceLib Path: MdePkg\Library\BaseCacheMaintenanceLib\BaseCacheMaintenanceLib.msa-->
|
||||
<Instance ModuleGuid="123dd843-57c9-4158-8418-ce68b3944ce7" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/>
|
||||
</Libraries>
|
||||
<PcdBuildDefinition>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportEfiDecompress</C_Name>
|
||||
<Token>0x00010034</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportTianoDecompress</C_Name>
|
||||
<Token>0x00010035</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FEATURE_FLAG">
|
||||
<C_Name>PcdDxeIplSupportCustomDecompress</C_Name>
|
||||
<Token>0x00010036</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>TRUE</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdDebugPropertyMask</C_Name>
|
||||
<Token>0x00000005</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT8</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>0x0f</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdDebugClearMemoryValue</C_Name>
|
||||
<Token>0x00000008</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT8</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>0xAF</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdDebugPrintErrorLevel</C_Name>
|
||||
<Token>0x00000006</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>0x80000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdReportStatusCodePropertyMask</C_Name>
|
||||
<Token>0x00000007</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT8</DatumType>
|
||||
<MaxDatumSize>1</MaxDatumSize>
|
||||
<Value>0x06</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdMaximumUnicodeStringLength</C_Name>
|
||||
<Token>0x00000001</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>1000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdMaximumAsciiStringLength</C_Name>
|
||||
<Token>0x00000002</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>1000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdMaximumLinkedListLength</C_Name>
|
||||
<Token>0x00000003</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>1000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdSpinLockTimeout</C_Name>
|
||||
<Token>0x00000004</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>10000000</Value>
|
||||
</PcdData>
|
||||
<PcdData ItemType="FIXED_AT_BUILD">
|
||||
<C_Name>PcdFSBClock</C_Name>
|
||||
<Token>0x0000000c</Token>
|
||||
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>UINT32</DatumType>
|
||||
<MaxDatumSize>4</MaxDatumSize>
|
||||
<Value>200000000</Value>
|
||||
</PcdData>
|
||||
</PcdBuildDefinition>
|
||||
<ModuleSaBuildOptions>
|
||||
<FvBinding>NULL</FvBinding>
|
||||
<FfsFormatKey>PE32_PEIM</FfsFormatKey>
|
||||
</ModuleSaBuildOptions>
|
||||
</ModuleSA>
|
||||
</FrameworkModules>
|
||||
<DynamicPcdBuildDefinitions>
|
||||
<PcdBuildData ItemType="DYNAMIC">
|
||||
|
|
|
@ -379,7 +379,6 @@
|
|||
<Filename>Bus/Usb/UsbMouse/Dxe/UsbMouse.msa</Filename>
|
||||
<Filename>Core/Dxe/DxeMain.msa</Filename>
|
||||
<Filename>Core/DxeIplPeim/DxeIpl.msa</Filename>
|
||||
<Filename>Core/DxeIplX64Peim/DxeIplX64.msa</Filename>
|
||||
<Filename>Core/Pei/PeiMain.msa</Filename>
|
||||
<Filename>Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.msa</Filename>
|
||||
<Filename>Library/BaseUefiTianoDecompressLib/BaseUefiTianoDecompressLib.msa</Filename>
|
||||
|
@ -1248,5 +1247,14 @@
|
|||
<DefaultValue>FALSE</DefaultValue>
|
||||
<HelpText>Whether VGA decoding is enabled on this platform so we should avoid those aliased resources</HelpText>
|
||||
</PcdEntry>
|
||||
<PcdEntry>
|
||||
<C_Name>PcdDxeIplSwitchToLongMode</C_Name>
|
||||
<Token>0x0001003b</Token>
|
||||
<TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
|
||||
<DatumType>BOOLEAN</DatumType>
|
||||
<ValidUsage>FEATURE_FLAG</ValidUsage>
|
||||
<DefaultValue>FALSE</DefaultValue>
|
||||
<HelpText>If this feature is enabled, then the DXE IPL will load a 64-bit DxeCore.</HelpText>
|
||||
</PcdEntry>
|
||||
</PcdDeclarations>
|
||||
</PackageSurfaceArea>
|
Loading…
Reference in New Issue