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