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