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