]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Guid/PeiPeCoffLoader/PeiPeCoffLoader.h
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Guid / PeiPeCoffLoader / PeiPeCoffLoader.h
1 /*++
2
3 Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>
4 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
8
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.
11
12 Module Name:
13
14 PeiPeCoffLoader.h
15
16 Abstract:
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
30 EFI_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
44 typedef
45 EFI_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
53 typedef 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
83 typedef
84 EFI_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
90 typedef
91 EFI_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
97 typedef
98 EFI_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
104 typedef
105 EFI_STATUS
106 (EFIAPI *EFI_PEI_PE_COFF_LOADER_UNLOAD_IMAGE) (
107 IN EFI_PEI_PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
108 );
109
110 struct _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
117 extern EFI_GUID gEfiPeiPeCoffLoaderGuid;
118
119 #endif