1 /** @file
2   UEFI 2.0 Loaded image protocol definition.
3 
4   Every EFI driver and application is passed an image handle when it is loaded.
5   This image handle will contain a Loaded Image Protocol.
6 
7   Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
8   SPDX-License-Identifier: BSD-2-Clause-Patent
9 
10 **/
11 
12 #ifndef __LOADED_IMAGE_PROTOCOL_H__
13 #define __LOADED_IMAGE_PROTOCOL_H__
14 
15 #define EFI_LOADED_IMAGE_PROTOCOL_GUID \
16   { \
17     0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } \
18   }
19 
20 #define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
21   { \
22     0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf } \
23   }
24 
25 ///
26 /// Protocol GUID defined in EFI1.1.
27 ///
28 #define LOADED_IMAGE_PROTOCOL  EFI_LOADED_IMAGE_PROTOCOL_GUID
29 
30 ///
31 /// EFI_SYSTEM_TABLE & EFI_IMAGE_UNLOAD are defined in EfiApi.h
32 ///
33 #define EFI_LOADED_IMAGE_PROTOCOL_REVISION  0x1000
34 
35 ///
36 /// Revision defined in EFI1.1.
37 ///
38 #define EFI_LOADED_IMAGE_INFORMATION_REVISION  EFI_LOADED_IMAGE_PROTOCOL_REVISION
39 
40 ///
41 /// Can be used on any image handle to obtain information about the loaded image.
42 ///
43 typedef struct {
44   UINT32                      Revision;     ///< Defines the revision of the EFI_LOADED_IMAGE_PROTOCOL structure.
45                                             ///< All future revisions will be backward compatible to the current revision.
46   EFI_HANDLE                  ParentHandle; ///< Parent image's image handle. NULL if the image is loaded directly from
47                                             ///< the firmware's boot manager.
48   EFI_SYSTEM_TABLE            *SystemTable; ///< the image's EFI system table pointer.
49 
50   //
51   // Source location of image
52   //
53   EFI_HANDLE                  DeviceHandle; ///< The device handle that the EFI Image was loaded from.
54   EFI_DEVICE_PATH_PROTOCOL    *FilePath;    ///< A pointer to the file path portion specific to DeviceHandle
55                                             ///< that the EFI Image was loaded from.
56   VOID                        *Reserved;    ///< Reserved. DO NOT USE.
57 
58   //
59   // Images load options
60   //
61   UINT32                      LoadOptionsSize; ///< The size in bytes of LoadOptions.
62   VOID                        *LoadOptions;    ///< A pointer to the image's binary load options.
63 
64   //
65   // Location of where image was loaded
66   //
67   VOID                        *ImageBase;    ///< The base address at which the image was loaded.
68   UINT64                      ImageSize;     ///< The size in bytes of the loaded image.
69   EFI_MEMORY_TYPE             ImageCodeType; ///< The memory type that the code sections were loaded as.
70   EFI_MEMORY_TYPE             ImageDataType; ///< The memory type that the data sections were loaded as.
71   EFI_IMAGE_UNLOAD            Unload;
72 } EFI_LOADED_IMAGE_PROTOCOL;
73 
74 //
75 // For backward-compatible with EFI1.1.
76 //
77 typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
78 
79 extern EFI_GUID  gEfiLoadedImageProtocolGuid;
80 extern EFI_GUID  gEfiLoadedImageDevicePathProtocolGuid;
81 
82 #endif
83