master
h 187 lines 6.01 KB
Raw
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