1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
/*
* This file and its contents are supplied under the terms of the
* Common Development and Distribution License ("CDDL"), version 1.0.
* You may only use this file in accordance with the terms of version
* 1.0 of the CDDL.
*
* A full copy of the text of the CDDL should have accompanied this
* source. A copy of the CDDL is also available via the Internet at
* http://www.illumos.org/license/CDDL.
*/
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
*/
#ifndef _SYS_EFI_H
#define _SYS_EFI_H
/*
* UEFI related data. Based on UEFI 2.5 specs.
*/
#include <sys/uuid.h>
#ifdef __cplusplus
extern "C" {
#endif
/* EFI GUIDS */
#define EFI_GLOBAL_VARIABLE \
{ 0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, \
{ 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c } }
#define MPS_TABLE_GUID \
{ 0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, \
{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
#define ACPI_10_TABLE_GUID \
{ 0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, \
{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
#define EFI_ACPI_TABLE_GUID \
{ 0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, \
{ 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
#define SMBIOS_TABLE_GUID \
{ 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, \
{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
#define SAL_SYSTEM_TABLE_GUID \
{ 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, \
{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
#define SMBIOS3_TABLE_GUID \
{ 0xf2fd1544, 0x9794, 0x4a2c, 0x99, 0x2e, \
{ 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 } }
#define FDT_TABLE_GUID \
{ 0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, \
{ 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } }
#define DXE_SERVICES_TABLE_GUID \
{ 0x5ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, \
{ 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9 } }
#define HOB_LIST_TABLE_GUID \
{ 0x7739f24c, 0x93d7, 0x11d4, 0x9a, 0x3a, \
{ 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } }
#define MEMORY_TYPE_INFORMATION_TABLE_GUID \
{ 0x4c19049f, 0x4137, 0x4dd3, 0x9c, 0x10, \
{ 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa } }
#define DEBUG_IMAGE_INFO_TABLE_GUID \
{ 0x49152e77, 0x1ada, 0x4764, 0xb7, 0xa2, \
{ 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b } }
#define EFI_PROPERTIES_TABLE_GUID \
{ 0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, \
{ 0xb7, 0x47, 0x34, 0x8, 0x25, 0xe5 } }
typedef struct uuid efi_guid_t __aligned(8);
/* Memory data */
typedef uint64_t EFI_PHYSICAL_ADDRESS;
typedef uint64_t EFI_VIRTUAL_ADDRESS;
/*
* EFI_MEMORY_TYPE enum is defined in UEFI v2.7 page 185.
*/
typedef enum {
EfiReservedMemoryType,
EfiLoaderCode,
EfiLoaderData,
EfiBootServicesCode,
EfiBootServicesData,
EfiRuntimeServicesCode,
EfiRuntimeServicesData,
EfiConventionalMemory,
EfiUnusableMemory,
EfiACPIReclaimMemory,
EfiACPIMemoryNVS,
EfiMemoryMappedIO,
EfiMemoryMappedIOPortSpace,
EfiPalCode,
EfiPersistentMemory,
EfiMaxMemoryType
} EFI_MEMORY_TYPE;
/* Possible caching types for the memory range */
#define EFI_MEMORY_UC 0x0000000000000001
#define EFI_MEMORY_WC 0x0000000000000002
#define EFI_MEMORY_WT 0x0000000000000004
#define EFI_MEMORY_WB 0x0000000000000008
#define EFI_MEMORY_UCE 0x0000000000000010
/* Physical memory protection on range */
#define EFI_MEMORY_WP 0x0000000000001000
#define EFI_MEMORY_RP 0x0000000000002000
#define EFI_MEMORY_XP 0x0000000000004000
#define EFI_MEMORY_NV 0x0000000000008000
#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000
#define EFI_MEMORY_RO 0x0000000000020000
/* Range requires a runtime mapping */
#define EFI_MEMORY_RUNTIME 0x8000000000000000
#define EFI_MEMORY_DESCRIPTOR_VERSION 1
typedef struct {
uint32_t Type;
EFI_PHYSICAL_ADDRESS PhysicalStart;
uint32_t Pad;
EFI_VIRTUAL_ADDRESS VirtualStart;
uint64_t NumberOfPages;
uint64_t Attribute;
} __packed EFI_MEMORY_DESCRIPTOR;
/* Tables */
typedef struct {
uint64_t Signature;
uint32_t Revision;
uint32_t HeaderSize;
uint32_t CRC32;
uint32_t Reserved;
} EFI_TABLE_HEADER;
/*
* The upper 16 bits of the revision contain the major revision value,
* and the lower 16 bits contain the minor revision value. The minor revision
* values are binary coded decimals and are limited to the range of 00..99.
* If the lower digit of the minor revision is 0, the version is printed as:
* major.minor upper decimal
* Otherwise the version is printed as:
* major.minor upper decimal.minor lower decimal
*/
#define EFI_REV(x, y) (((x) << 16) || (y))
#define EFI_REV_MAJOR(x) (((x) >> 16) & 0xffff)
#define EFI_REV_MINOR(x) ((x) & 0xffff)
#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
typedef uint32_t efiptr32_t;
typedef uint64_t efiptr64_t;
typedef struct _EFI_CONFIGURATION_TABLE32 {
efi_guid_t VendorGuid;
efiptr32_t VendorTable;
} __packed EFI_CONFIGURATION_TABLE32;
typedef struct _EFI_CONFIGURATION_TABLE64 {
efi_guid_t VendorGuid;
efiptr64_t VendorTable;
} __packed EFI_CONFIGURATION_TABLE64;
typedef struct _EFI_SYSTEM_TABLE32 {
EFI_TABLE_HEADER Hdr;
efiptr32_t FirmwareVendor;
uint32_t FirmwareRevision;
efiptr32_t ConsoleInHandle;
efiptr32_t ConIn;
efiptr32_t ConsoleOutHandle;
efiptr32_t ConOut;
efiptr32_t StandardErrorHandle;
efiptr32_t StdErr;
efiptr32_t RuntimeServices;
efiptr32_t BootServices;
uint32_t NumberOfTableEntries;
efiptr32_t ConfigurationTable;
} __packed EFI_SYSTEM_TABLE32;
typedef struct _EFI_SYSTEM_TABLE64 {
EFI_TABLE_HEADER Hdr;
efiptr64_t FirmwareVendor;
uint32_t FirmwareRevision;
uint32_t Pad;
efiptr64_t ConsoleInHandle;
efiptr64_t ConIn;
efiptr64_t ConsoleOutHandle;
efiptr64_t ConOut;
efiptr64_t StandardErrorHandle;
efiptr64_t StdErr;
efiptr64_t RuntimeServices;
efiptr64_t BootServices;
uint64_t NumberOfTableEntries;
efiptr64_t ConfigurationTable;
} __packed EFI_SYSTEM_TABLE64;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_EFI_H */
|