1/*++ 2 3Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR> 4This program and the accompanying materials 5are licensed and made available under the terms and conditions of the BSD License 6which accompanies this distribution. The full text of the license may be found at 7http://opensource.org/licenses/bsd-license.php 8 9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12Module Name: 13 14 PeiPeCoffLoader.h 15 16Abstract: 17 18 GUID for the PE/COFF Loader APIs shared between PEI and DXE 19 20--*/ 21 22#ifndef _PEI_PE_COFF_LOADER_H_ 23#define _PEI_PE_COFF_LOADER_H_ 24 25#include "EfiImage.h" 26 27#define EFI_PEI_PE_COFF_LOADER_GUID \ 28 { 0xd8117cff, 0x94a6, 0x11d4, {0x9a, 0x3a, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 29 30EFI_FORWARD_DECLARATION (EFI_PEI_PE_COFF_LOADER_PROTOCOL); 31 32#define EFI_IMAGE_ERROR_SUCCESS 0 33#define EFI_IMAGE_ERROR_IMAGE_READ 1 34#define EFI_IMAGE_ERROR_INVALID_PE_HEADER_SIGNATURE 2 35#define EFI_IMAGE_ERROR_INVALID_MACHINE_TYPE 3 36#define EFI_IMAGE_ERROR_INVALID_SUBSYSTEM 4 37#define EFI_IMAGE_ERROR_INVALID_IMAGE_ADDRESS 5 38#define EFI_IMAGE_ERROR_INVALID_IMAGE_SIZE 6 39#define EFI_IMAGE_ERROR_INVALID_SECTION_ALIGNMENT 7 40#define EFI_IMAGE_ERROR_SECTION_NOT_LOADED 8 41#define EFI_IMAGE_ERROR_FAILED_RELOCATION 9 42#define EFI_IMAGE_ERROR_FAILED_ICACHE_FLUSH 10 43 44typedef 45EFI_STATUS 46(EFIAPI *EFI_PEI_PE_COFF_LOADER_READ_FILE) ( 47 IN VOID *FileHandle, 48 IN UINTN FileOffset, 49 IN OUT UINTN *ReadSize, 50 OUT VOID *Buffer 51 ); 52 53typedef struct { 54 EFI_PHYSICAL_ADDRESS ImageAddress; 55 UINT64 ImageSize; 56 EFI_PHYSICAL_ADDRESS DestinationAddress; 57 EFI_PHYSICAL_ADDRESS EntryPoint; 58 EFI_PEI_PE_COFF_LOADER_READ_FILE ImageRead; 59 VOID *Handle; 60 VOID *FixupData; 61 UINT32 SectionAlignment; 62 UINT32 PeCoffHeaderOffset; 63 UINT32 DebugDirectoryEntryRva; 64 VOID *CodeView; 65 CHAR8 *PdbPointer; 66 UINTN SizeOfHeaders; 67 UINT32 ImageCodeMemoryType; 68 UINT32 ImageDataMemoryType; 69 UINT32 ImageError; 70 UINTN FixupDataSize; 71 UINT16 Machine; 72 UINT16 ImageType; 73 BOOLEAN RelocationsStripped; 74 BOOLEAN IsTeImage; 75#ifdef EFI_NT_EMULATOR 76 VOID **ModHandle; 77#endif 78#if (EFI_SPECIFICATION_VERSION >= 0x0002000A) 79 EFI_PHYSICAL_ADDRESS HiiResourceData; 80#endif 81} EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT; 82 83typedef 84EFI_STATUS 85(EFIAPI *EFI_PEI_PE_COFF_LOADER_GET_IMAGE_INFO) ( 86 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, 87 IN OUT EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 88 ); 89 90typedef 91EFI_STATUS 92(EFIAPI *EFI_PEI_PE_COFF_LOADER_LOAD_IMAGE) ( 93 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, 94 IN OUT EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 95 ); 96 97typedef 98EFI_STATUS 99(EFIAPI *EFI_PEI_PE_COFF_LOADER_RELOCATE_IMAGE) ( 100 IN EFI_PEI_PE_COFF_LOADER_PROTOCOL *This, 101 IN OUT EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 102 ); 103 104typedef 105EFI_STATUS 106(EFIAPI *EFI_PEI_PE_COFF_LOADER_UNLOAD_IMAGE) ( 107 IN EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext 108 ); 109 110struct _EFI_PEI_PE_COFF_LOADER_PROTOCOL { 111 EFI_PEI_PE_COFF_LOADER_GET_IMAGE_INFO GetImageInfo; 112 EFI_PEI_PE_COFF_LOADER_LOAD_IMAGE LoadImage; 113 EFI_PEI_PE_COFF_LOADER_RELOCATE_IMAGE RelocateImage; 114 EFI_PEI_PE_COFF_LOADER_UNLOAD_IMAGE UnloadImage; 115}; 116 117extern EFI_GUID gEfiPeiPeCoffLoaderGuid; 118 119#endif 120