xref: /openbmc/qemu/include/standard-headers/uefi/uefi.h (revision 98721058d6d50ef218e0c26e4f67c8ef96965859)
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