3 Copyright (c) 2006 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 Wrap the Base PE/COFF loader with the PE COFF Protocol
24 // The package level header files this module uses
28 // The protocols, PPI and GUID defintions for this module
30 #include <Guid/PeiPeCoffLoader.h>
32 // The Library classes this module consumes
34 #include <Library/PeCoffLib.h>
36 #include <IndustryStandard/PeImage.h>
42 PeCoffLoaderLibGetImageInfo (
43 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
44 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
49 Status
= PeCoffLoaderGetImageInfo (ImageContext
);
50 if (EFI_ERROR (Status
)) {
54 switch (ImageContext
->ImageType
) {
56 case EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION
:
57 ImageContext
->ImageCodeMemoryType
= EfiLoaderCode
;
58 ImageContext
->ImageDataMemoryType
= EfiLoaderData
;
61 case EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
:
62 ImageContext
->ImageCodeMemoryType
= EfiBootServicesCode
;
63 ImageContext
->ImageDataMemoryType
= EfiBootServicesData
;
66 case EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
:
67 case EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER
:
68 ImageContext
->ImageCodeMemoryType
= EfiRuntimeServicesCode
;
69 ImageContext
->ImageDataMemoryType
= EfiRuntimeServicesData
;
73 ImageContext
->ImageError
= IMAGE_ERROR_INVALID_SUBSYSTEM
;
74 return RETURN_UNSUPPORTED
;
83 PeCoffLoaderLibLoadImage (
84 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
85 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
88 return PeCoffLoaderLoadImage (ImageContext
);
94 PeCoffLoaderLibRelocateImage (
95 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
96 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
99 return PeCoffLoaderRelocateImage (ImageContext
);
105 PeCoffLoaderLibUnloadimage (
106 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL
*This
,
107 IN PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
114 EFI_PEI_PE_COFF_LOADER_PROTOCOL mPeiEfiPeiPeCoffLoader
= {
115 PeCoffLoaderLibGetImageInfo
,
116 PeCoffLoaderLibLoadImage
,
117 PeCoffLoaderLibRelocateImage
,
118 PeCoffLoaderLibUnloadimage
121 EFI_PEI_PE_COFF_LOADER_PROTOCOL
*
123 GetPeCoffLoaderProtocol (
126 return &mPeiEfiPeiPeCoffLoader
;