1 /** @file 2 Runtime Architectural Protocol as defined in PI Specification VOLUME 2 DXE 3 4 Allows the runtime functionality of the DXE Foundation to be contained 5 in a separate driver. It also provides hooks for the DXE Foundation to 6 export information that is needed at runtime. As such, this protocol allows 7 services to the DXE Foundation to manage runtime drivers and events. 8 This protocol also implies that the runtime services required to transition 9 to virtual mode, SetVirtualAddressMap() and ConvertPointer(), have been 10 registered into the UEFI Runtime Table in the UEFI System Table. This protocol 11 must be produced by a runtime DXE driver and may only be consumed by the DXE Foundation. 12 13 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 14 SPDX-License-Identifier: BSD-2-Clause-Patent 15 16 **/ 17 18 #ifndef __ARCH_PROTOCOL_RUNTIME_H__ 19 #define __ARCH_PROTOCOL_RUNTIME_H__ 20 21 /// 22 /// Global ID for the Runtime Architectural Protocol 23 /// 24 #define EFI_RUNTIME_ARCH_PROTOCOL_GUID \ 25 { 0xb7dfb4e1, 0x52f, 0x449f, {0x87, 0xbe, 0x98, 0x18, 0xfc, 0x91, 0xb7, 0x33 } } 26 27 typedef struct _EFI_RUNTIME_ARCH_PROTOCOL EFI_RUNTIME_ARCH_PROTOCOL; 28 29 /// 30 /// LIST_ENTRY from BaseType 31 /// 32 typedef LIST_ENTRY EFI_LIST_ENTRY; 33 34 typedef struct _EFI_RUNTIME_IMAGE_ENTRY EFI_RUNTIME_IMAGE_ENTRY; 35 36 /// 37 /// EFI_RUNTIME_IMAGE_ENTRY 38 /// 39 struct _EFI_RUNTIME_IMAGE_ENTRY { 40 /// 41 /// Start of image that has been loaded in memory. It is a pointer 42 /// to either the DOS header or PE header of the image. 43 /// 44 VOID *ImageBase; 45 /// 46 /// Size in bytes of the image represented by ImageBase. 47 /// 48 UINT64 ImageSize; 49 /// 50 /// Information about the fix-ups that were performed on ImageBase when it was 51 /// loaded into memory. 52 /// 53 VOID *RelocationData; 54 /// 55 /// The ImageHandle passed into ImageBase when it was loaded. 56 /// 57 EFI_HANDLE Handle; 58 /// 59 /// Entry for this node in the EFI_RUNTIME_ARCHITECTURE_PROTOCOL.ImageHead list. 60 /// 61 EFI_LIST_ENTRY Link; 62 }; 63 64 typedef struct _EFI_RUNTIME_EVENT_ENTRY EFI_RUNTIME_EVENT_ENTRY; 65 66 /// 67 /// EFI_RUNTIME_EVENT_ENTRY 68 /// 69 struct _EFI_RUNTIME_EVENT_ENTRY { 70 /// 71 /// The same as Type passed into CreateEvent(). 72 /// 73 UINT32 Type; 74 /// 75 /// The same as NotifyTpl passed into CreateEvent(). 76 /// 77 EFI_TPL NotifyTpl; 78 /// 79 /// The same as NotifyFunction passed into CreateEvent(). 80 /// 81 EFI_EVENT_NOTIFY NotifyFunction; 82 /// 83 /// The same as NotifyContext passed into CreateEvent(). 84 /// 85 VOID *NotifyContext; 86 /// 87 /// The EFI_EVENT returned by CreateEvent(). Event must be in runtime memory. 88 /// 89 EFI_EVENT *Event; 90 /// 91 /// Entry for this node in the 92 /// EFI_RUNTIME_ARCHITECTURE_PROTOCOL.EventHead list. 93 /// 94 EFI_LIST_ENTRY Link; 95 }; 96 97 /// 98 /// Allows the runtime functionality of the DXE Foundation to be contained in a 99 /// separate driver. It also provides hooks for the DXE Foundation to export 100 /// information that is needed at runtime. As such, this protocol allows the DXE 101 /// Foundation to manage runtime drivers and events. This protocol also implies 102 /// that the runtime services required to transition to virtual mode, 103 /// SetVirtualAddressMap() and ConvertPointer(), have been registered into the 104 /// EFI Runtime Table in the EFI System Partition. This protocol must be produced 105 /// by a runtime DXE driver and may only be consumed by the DXE Foundation. 106 /// 107 struct _EFI_RUNTIME_ARCH_PROTOCOL { 108 EFI_LIST_ENTRY ImageHead; ///< A list of type EFI_RUNTIME_IMAGE_ENTRY. 109 EFI_LIST_ENTRY EventHead; ///< A list of type EFI_RUNTIME_EVENT_ENTRY. 110 UINTN MemoryDescriptorSize; ///< Size of a memory descriptor that is returned by GetMemoryMap(). 111 UINT32 MemoryDesciptorVersion; ///< Version of a memory descriptor that is returned by GetMemoryMap(). 112 UINTN MemoryMapSize; ///< Size of the memory map in bytes contained in MemoryMapPhysical and MemoryMapVirtual. 113 EFI_MEMORY_DESCRIPTOR *MemoryMapPhysical; ///< Pointer to a runtime buffer that contains a copy of 114 ///< the memory map returned via GetMemoryMap(). 115 EFI_MEMORY_DESCRIPTOR *MemoryMapVirtual; ///< Pointer to MemoryMapPhysical that is updated to virtual mode after SetVirtualAddressMap(). 116 BOOLEAN VirtualMode; ///< Boolean that is TRUE if SetVirtualAddressMap() has been called. 117 BOOLEAN AtRuntime; ///< Boolean that is TRUE if ExitBootServices () has been called. 118 }; 119 120 extern EFI_GUID gEfiRuntimeArchProtocolGuid; 121 122 #endif 123