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