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