1 /* 2 * Copyright (C) 2025 Intel Corporation 3 * 4 * Author: Isaku Yamahata <isaku.yamahata at gmail.com> 5 * <isaku.yamahata at intel.com> 6 * Xiaoyao Li <xiaoyao.li@intel.com> 7 * 8 * SPDX-License-Identifier: GPL-2.0-or-later 9 */ 10 11 #ifndef HW_I386_UEFI_H 12 #define HW_I386_UEFI_H 13 14 /***************************************************************************/ 15 /* 16 * basic EFI definitions 17 * supplemented with UEFI Specification Version 2.8 (Errata A) 18 * released February 2020 19 */ 20 /* UEFI integer is little endian */ 21 22 typedef struct { 23 uint32_t Data1; 24 uint16_t Data2; 25 uint16_t Data3; 26 uint8_t Data4[8]; 27 } EFI_GUID; 28 29 typedef enum { 30 EfiReservedMemoryType, 31 EfiLoaderCode, 32 EfiLoaderData, 33 EfiBootServicesCode, 34 EfiBootServicesData, 35 EfiRuntimeServicesCode, 36 EfiRuntimeServicesData, 37 EfiConventionalMemory, 38 EfiUnusableMemory, 39 EfiACPIReclaimMemory, 40 EfiACPIMemoryNVS, 41 EfiMemoryMappedIO, 42 EfiMemoryMappedIOPortSpace, 43 EfiPalCode, 44 EfiPersistentMemory, 45 EfiUnacceptedMemoryType, 46 EfiMaxMemoryType 47 } EFI_MEMORY_TYPE; 48 49 #define EFI_HOB_HANDOFF_TABLE_VERSION 0x0009 50 51 #define EFI_HOB_TYPE_HANDOFF 0x0001 52 #define EFI_HOB_TYPE_MEMORY_ALLOCATION 0x0002 53 #define EFI_HOB_TYPE_RESOURCE_DESCRIPTOR 0x0003 54 #define EFI_HOB_TYPE_GUID_EXTENSION 0x0004 55 #define EFI_HOB_TYPE_FV 0x0005 56 #define EFI_HOB_TYPE_CPU 0x0006 57 #define EFI_HOB_TYPE_MEMORY_POOL 0x0007 58 #define EFI_HOB_TYPE_FV2 0x0009 59 #define EFI_HOB_TYPE_LOAD_PEIM_UNUSED 0x000A 60 #define EFI_HOB_TYPE_UEFI_CAPSULE 0x000B 61 #define EFI_HOB_TYPE_FV3 0x000C 62 #define EFI_HOB_TYPE_UNUSED 0xFFFE 63 #define EFI_HOB_TYPE_END_OF_HOB_LIST 0xFFFF 64 65 typedef struct { 66 uint16_t HobType; 67 uint16_t HobLength; 68 uint32_t Reserved; 69 } EFI_HOB_GENERIC_HEADER; 70 71 typedef uint64_t EFI_PHYSICAL_ADDRESS; 72 typedef uint32_t EFI_BOOT_MODE; 73 74 typedef struct { 75 EFI_HOB_GENERIC_HEADER Header; 76 uint32_t Version; 77 EFI_BOOT_MODE BootMode; 78 EFI_PHYSICAL_ADDRESS EfiMemoryTop; 79 EFI_PHYSICAL_ADDRESS EfiMemoryBottom; 80 EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop; 81 EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom; 82 EFI_PHYSICAL_ADDRESS EfiEndOfHobList; 83 } EFI_HOB_HANDOFF_INFO_TABLE; 84 85 #define EFI_RESOURCE_SYSTEM_MEMORY 0x00000000 86 #define EFI_RESOURCE_MEMORY_MAPPED_IO 0x00000001 87 #define EFI_RESOURCE_IO 0x00000002 88 #define EFI_RESOURCE_FIRMWARE_DEVICE 0x00000003 89 #define EFI_RESOURCE_MEMORY_MAPPED_IO_PORT 0x00000004 90 #define EFI_RESOURCE_MEMORY_RESERVED 0x00000005 91 #define EFI_RESOURCE_IO_RESERVED 0x00000006 92 #define EFI_RESOURCE_MEMORY_UNACCEPTED 0x00000007 93 #define EFI_RESOURCE_MAX_MEMORY_TYPE 0x00000008 94 95 #define EFI_RESOURCE_ATTRIBUTE_PRESENT 0x00000001 96 #define EFI_RESOURCE_ATTRIBUTE_INITIALIZED 0x00000002 97 #define EFI_RESOURCE_ATTRIBUTE_TESTED 0x00000004 98 #define EFI_RESOURCE_ATTRIBUTE_SINGLE_BIT_ECC 0x00000008 99 #define EFI_RESOURCE_ATTRIBUTE_MULTIPLE_BIT_ECC 0x00000010 100 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_1 0x00000020 101 #define EFI_RESOURCE_ATTRIBUTE_ECC_RESERVED_2 0x00000040 102 #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED 0x00000080 103 #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED 0x00000100 104 #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED 0x00000200 105 #define EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE 0x00000400 106 #define EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE 0x00000800 107 #define EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE 0x00001000 108 #define EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE 0x00002000 109 #define EFI_RESOURCE_ATTRIBUTE_16_BIT_IO 0x00004000 110 #define EFI_RESOURCE_ATTRIBUTE_32_BIT_IO 0x00008000 111 #define EFI_RESOURCE_ATTRIBUTE_64_BIT_IO 0x00010000 112 #define EFI_RESOURCE_ATTRIBUTE_UNCACHED_EXPORTED 0x00020000 113 #define EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED 0x00040000 114 #define EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE 0x00080000 115 #define EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE 0x00100000 116 #define EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE 0x00200000 117 #define EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE 0x00400000 118 #define EFI_RESOURCE_ATTRIBUTE_PERSISTENT 0x00800000 119 #define EFI_RESOURCE_ATTRIBUTE_PERSISTABLE 0x01000000 120 #define EFI_RESOURCE_ATTRIBUTE_MORE_RELIABLE 0x02000000 121 122 typedef uint32_t EFI_RESOURCE_TYPE; 123 typedef uint32_t EFI_RESOURCE_ATTRIBUTE_TYPE; 124 125 typedef struct { 126 EFI_HOB_GENERIC_HEADER Header; 127 EFI_GUID Owner; 128 EFI_RESOURCE_TYPE ResourceType; 129 EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute; 130 EFI_PHYSICAL_ADDRESS PhysicalStart; 131 uint64_t ResourceLength; 132 } EFI_HOB_RESOURCE_DESCRIPTOR; 133 134 typedef struct { 135 EFI_HOB_GENERIC_HEADER Header; 136 EFI_GUID Name; 137 138 /* guid specific data follows */ 139 } EFI_HOB_GUID_TYPE; 140 141 typedef struct { 142 EFI_HOB_GENERIC_HEADER Header; 143 EFI_PHYSICAL_ADDRESS BaseAddress; 144 uint64_t Length; 145 } EFI_HOB_FIRMWARE_VOLUME; 146 147 typedef struct { 148 EFI_HOB_GENERIC_HEADER Header; 149 EFI_PHYSICAL_ADDRESS BaseAddress; 150 uint64_t Length; 151 EFI_GUID FvName; 152 EFI_GUID FileName; 153 } EFI_HOB_FIRMWARE_VOLUME2; 154 155 typedef struct { 156 EFI_HOB_GENERIC_HEADER Header; 157 EFI_PHYSICAL_ADDRESS BaseAddress; 158 uint64_t Length; 159 uint32_t AuthenticationStatus; 160 bool ExtractedFv; 161 EFI_GUID FvName; 162 EFI_GUID FileName; 163 } EFI_HOB_FIRMWARE_VOLUME3; 164 165 typedef struct { 166 EFI_HOB_GENERIC_HEADER Header; 167 uint8_t SizeOfMemorySpace; 168 uint8_t SizeOfIoSpace; 169 uint8_t Reserved[6]; 170 } EFI_HOB_CPU; 171 172 typedef struct { 173 EFI_HOB_GENERIC_HEADER Header; 174 } EFI_HOB_MEMORY_POOL; 175 176 typedef struct { 177 EFI_HOB_GENERIC_HEADER Header; 178 179 EFI_PHYSICAL_ADDRESS BaseAddress; 180 uint64_t Length; 181 } EFI_HOB_UEFI_CAPSULE; 182 183 #define EFI_HOB_OWNER_ZERO \ 184 ((EFI_GUID){ 0x00000000, 0x0000, 0x0000, \ 185 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }) 186 187 #endif 188