diff --git a/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoader.c b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoader.c new file mode 100644 index 0000000000..783e87579c --- /dev/null +++ b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoader.c @@ -0,0 +1,129 @@ +/*++ + +Copyright (c) 2006 - 2007, 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: + + EdkPeCoffLoader.c + +Abstract: + + Wrap the Base PE/COFF loader with the PE COFF Protocol + + +--*/ + +// +// The package level header files this module uses +// +#include +// +// The protocols, PPI and GUID defintions for this module +// +#include +// +// The Library classes this module consumes +// +#include + +#include + + +STATIC +EFI_STATUS +EFIAPI +PeCoffLoaderLibGetImageInfo ( + IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + EFI_STATUS Status; + + Status = PeCoffLoaderGetImageInfo (ImageContext); + if (EFI_ERROR (Status)) { + return Status; + } + + switch (ImageContext->ImageType) { + + case EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION: + ImageContext->ImageCodeMemoryType = EfiLoaderCode; + ImageContext->ImageDataMemoryType = EfiLoaderData; + break; + + case EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER: + ImageContext->ImageCodeMemoryType = EfiBootServicesCode; + ImageContext->ImageDataMemoryType = EfiBootServicesData; + break; + + case EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER: + case EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER: + ImageContext->ImageCodeMemoryType = EfiRuntimeServicesCode; + ImageContext->ImageDataMemoryType = EfiRuntimeServicesData; + break; + + default: + ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM; + return RETURN_UNSUPPORTED; + } + + return Status; +} + +STATIC +EFI_STATUS +EFIAPI +PeCoffLoaderLibLoadImage ( + IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + return PeCoffLoaderLoadImage (ImageContext); +} + +STATIC +EFI_STATUS +EFIAPI +PeCoffLoaderLibRelocateImage ( + IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + return PeCoffLoaderRelocateImage (ImageContext); +} + +STATIC +EFI_STATUS +EFIAPI +PeCoffLoaderLibUnloadimage ( + IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, + IN PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + return EFI_SUCCESS; +} + + +EFI_PEI_PE_COFF_LOADER_PROTOCOL mPeiEfiPeiPeCoffLoader = { + PeCoffLoaderLibGetImageInfo, + PeCoffLoaderLibLoadImage, + PeCoffLoaderLibRelocateImage, + PeCoffLoaderLibUnloadimage +}; + +EFI_PEI_PE_COFF_LOADER_PROTOCOL * +EFIAPI +GetPeCoffLoaderProtocol ( + ) +{ + return &mPeiEfiPeiPeCoffLoader; +} + + diff --git a/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.inf b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.inf new file mode 100644 index 0000000000..236f7e8c52 --- /dev/null +++ b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.inf @@ -0,0 +1,70 @@ +#/** @file +# DxePeCoffLoaderLib library instance +# +# This library provides PeCoffLoader protocol based on PeCoffLib functions. +# 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. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PeiDxePeCoffLoaderLib + FILE_GUID = 858bbbc9-474f-4556-a361-0ae52a44ffa5 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + LIBRARY_CLASS = PeiDxeCorePeCoffLoaderLib|DXE_CORE PEIM + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + PeCoffLoader.c + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + PeCoffLib + diff --git a/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.msa b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.msa new file mode 100644 index 0000000000..b015020ec3 --- /dev/null +++ b/MdeModulePkg/Library/PeiDxePeCoffLoaderLib/PeCoffLoaderLib.msa @@ -0,0 +1,44 @@ + + + + PeiDxePeCoffLoaderLib + PEIM + 858bbbc9-474f-4556-a361-0ae52a44ffa5 + 1.0 + DxePeCoffLoaderLib library instance + This library provides PeCoffLoader protocol based on PeCoffLib functions. + 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + PeiDxePeCoffLoaderLib + + + + PeiDxeCorePeCoffLoaderLib + + + PeCoffLib + + + + PeCoffLoader.c + PeCoffLoaderLibInternals.h + + + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + \ No newline at end of file