-
Notifications
You must be signed in to change notification settings - Fork 2
/
efi_types.h
272 lines (238 loc) · 7.76 KB
/
efi_types.h
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#ifndef EFI_TYPES_H
#define EFI_TYPES_H
#include <stdint.h>
// Common UEFI Data types
typedef int8_t EFI_INT8;
typedef uint8_t EFI_UINT8;
typedef int16_t EFI_INT16;
typedef uint16_t EFI_UINT16;
typedef int32_t EFI_INT32;
typedef uint32_t EFI_UINT32;
typedef int64_t EFI_INT64;
typedef uint64_t EFI_UINT64;
typedef int64_t EFI_INTN;
typedef uint64_t EFI_UINTN;
typedef char CHAR8;
typedef uint16_t CHAR16;
typedef void VOID;
typedef EFI_INT32 EFI_INT;
typedef enum _EFI_BOOLEAN {
EFI_TRUE = 1,
EFI_FALSE = 0
} EFI_BOOLEAN;
typedef struct {
EFI_UINT64 Uint64;
EFI_UINT64 Uint64_1;
} EFI_UINT128;
typedef long EFI_INTPTR;
typedef unsigned long EFI_UINTPTR;
typedef long SSIZE;
typedef unsigned long SIZE;
typedef __builtin_va_list VA_LIST;
#define va_start(ap, arg) __builtin_va_start(ap, arg)
#define va_arg(ap, type) __builtin_va_arg(ap, type)
#define va_end(ap) __builtin_va_end(ap)
typedef EFI_UINTN EFI_STATUS;
typedef VOID *EFI_HANDLE;
typedef VOID *EFI_EVENT;
typedef EFI_UINT64 EFI_LBA;
typedef EFI_UINTN EFI_TPL;
// https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Base.h
#define IN
#define OUT
#define OPTIONAL
#define CONST const
// x86_64 Microsoft calling convention
// https://github.com/vathpela/gnu-efi/blob/master/inc/x86_64/efibind.h
#define EFIAPI __attribute__((ms_abi))
// EFI Physical Address
typedef EFI_UINT64 EFI_PHYSICAL_ADDRESS;
// EFI Virtual Address
typedef EFI_UINT64 EFI_VIRTUAL_ADDRESS;
// Task Priority Level
typedef EFI_UINTN EFI_TPL;
// String ID
typedef EFI_UINT16 EFI_STRING_ID;
// HII Handle
typedef VOID *EFI_HII_HANDLE;
// LBA
typedef EFI_UINT64 EFI_LBA;
// EFI IPv4 Address
typedef struct {
EFI_UINT8 Addr[4];
} EFI_IPv4_ADDRESS;
// EFI IPv6 Address
typedef struct {
EFI_UINT8 Addr[16];
} EFI_IPv6_ADDRESS;
// EFI IP Address
typedef union {
EFI_UINT32 Addr[4];
EFI_IPv4_ADDRESS v4;
EFI_IPv6_ADDRESS v6;
} EFI_IP_ADDRESS;
// EFI Mac Address
typedef struct {
EFI_UINT8 Addr[32];
} EFI_MAC_ADDRESS;
// EFI Status Codes
#define EFI_SUCCESS (0x00)
#define EFI_LOAD_ERROR (0x8000000000000001)
#define EFI_INVALID_PARAMETER (0x8000000000000002)
#define EFI_UNSUPPORTED (0x8000000000000003)
#define EFI_BAD_BUFFER_SIZE (0x8000000000000004)
#define EFI_BUFFER_TOO_SMALL (0x8000000000000005)
#define EFI_NOT_READY (0x8000000000000006)
#define EFI_DEVICE_ERROR (0x8000000000000007)
#define EFI_WRITE_PROTECTED (0x8000000000000008)
#define EFI_OUT_OF_RESOURCES (0x8000000000000009)
#define EFI_VOLUME_CORRUPTED (0x800000000000000A)
#define EFI_VOLUME_FULL (0x800000000000000B)
#define EFI_NO_MEDIA (0x800000000000000C)
#define EFI_MEDIA_CHANGED (0x800000000000000D)
#define EFI_NOT_FOUND (0x800000000000000E)
#define EFI_ACCESS_DENIED (0x800000000000000F)
#define EFI_NO_RESPONSE (0x8000000000000010)
#define EFI_NO_MAPPING (0x8000000000000011)
#define EFI_TIMEOUT (0x8000000000000012)
#define EFI_NOT_STARTED (0x8000000000000013)
#define EFI_ALREADY_STARTED (0x8000000000000014)
#define EFI_ABORTED (0x8000000000000015)
#define EFI_ICMP_ERROR (0x8000000000000016)
#define EFI_TFTP_ERROR (0x8000000000000017)
#define EFI_PROTOCOL_ERROR (0x8000000000000018)
#define EFI_INCOMPATIBLE_VERSION (0x8000000000000019)
#define EFI_SECURITY_VIOLATION (0x800000000000001A)
#define EFI_CRC_ERROR (0x800000000000001B)
#define EFI_END_OF_MEDIA (0x800000000000001C)
#define EFI_END_OF_FILE (0x800000000000001F)
#define EFI_INVALID_LANGUAGE (0x8000000000000020)
#define EFI_COMPROMISED_DATA (0x8000000000000021)
#define EFI_IP_ADDRESS_CONFLICT (0x8000000000000022)
#define EFI_HTTP_ERROR (0x8000000000000023)
// Text color attributes
#define EFI_BLACK 0x00
#define EFI_BLUE 0x01
#define EFI_GREEN 0x02
#define EFI_CYAN 0x03
#define EFI_RED 0x04
#define EFI_MAGENTA 0x05
#define EFI_BROWN 0x06
#define EFI_LIGHTGRAY 0x07
#define EFI_BRIGHT 0x08
#define EFI_DARKGRAY (EFI_BLACK | EFI_BRIGHT) 0x08
#define EFI_LIGHTBLUE 0x09
#define EFI_LIGHTGREEN 0x0A
#define EFI_LIGHTCYAN 0x0B
#define EFI_LIGHTRED 0x0C
#define EFI_LIGHTMAGENTA 0x0D
#define EFI_YELLOW 0x0E
#define EFI_WHITE 0x0F
// Text background colors
#define EFI_BACKGROUND_BLACK 0x00
#define EFI_BACKGROUND_BLUE 0x10
#define EFI_BACKGROUND_GREEN 0x20
#define EFI_BACKGROUND_CYAN 0x30
#define EFI_BACKGROUND_RED 0x40
#define EFI_BACKGROUND_MAGENTA 0x50
#define EFI_BACKGROUND_BROWN 0x60
#define EFI_BACKGROUND_LIGHTGRAY 0x70
// Converts Foreground and Background colors into a single value
#define EFI_TEXT_ATTR(Foreground,Background) \
((Foreground) | ((Background) << 4))
// Box Drawings
#define BOXDRAW_HORIZONTAL 0x2500
#define BOXDRAW_VERTICAL 0x2502
#define BOXDRAW_DOWN_RIGHT 0x250c
#define BOXDRAW_DOWN_LEFT 0x2510
#define BOXDRAW_UP_RIGHT 0x2514
#define BOXDRAW_UP_LEFT 0x2518
#define BOXDRAW_VERTICAL_RIGHT 0x251c
#define BOXDRAW_VERTICAL_LEFT 0x2524
#define BOXDRAW_DOWN_HORIZONTAL 0x252c
#define BOXDRAW_UP_HORIZONTAL 0x2534
#define BOXDRAW_VERTICAL_HORIZONTAL 0x253c
#define BOXDRAW_DOUBLE_HORIZONTAL 0x2550
#define BOXDRAW_DOUBLE_VERTICAL 0x2551
#define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552
#define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553
#define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554
#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555
#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556
#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557
#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558
#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559
#define BOXDRAW_DOUBLE_UP_RIGHT 0x255a
#define BOXDRAW_UP_LEFT_DOUBLE 0x255b
#define BOXDRAW_UP_DOUBLE_LEFT 0x255c
#define BOXDRAW_DOUBLE_UP_LEFT 0x255d
#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e
#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f
#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560
#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561
#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562
#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563
#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564
#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565
#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566
#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567
#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568
#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569
#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a
#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b
#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c
// Block elements
#define BLOCKELEMENT_FULL_BLOCK 0x2588
#define BLOCKELEMENT_LIGHT_SHADE 0x2591
// Geometric Shapes
#define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2
#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba
#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc
#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4
// Arrows
#define ARROW_UP 0x2191
#define ARROW_DOWN 0x2193
// EFI_GUID
typedef struct {
EFI_UINT32 Data1;
EFI_UINT16 Data2;
EFI_UINT16 Data3;
EFI_UINT8 Data4[8];
} EFI_GUID;
// MBR Partition Entry
#pragma pack(1)
typedef struct {
EFI_UINT8 BootIndicator;
EFI_UINT8 StartHead;
EFI_UINT8 StartSector;
EFI_UINT8 StartTrack;
EFI_UINT8 OSIndicator;
EFI_UINT8 EndHead;
EFI_UINT8 EndSector;
EFI_UINT8 EndTrack;
EFI_UINT8 StartingLBA[4];
EFI_UINT8 SizeInLBA[4];
} MBR_PARTITION_RECORD;
#pragma pack()
// Master Boot Record
#pragma pack(1)
typedef struct {
EFI_UINT8 BootStrapCode[440];
EFI_UINT8 UniqueMbrSignature[4];
EFI_UINT8 Unknown[2];
MBR_PARTITION_RECORD Partition[4];
EFI_UINT16 Signature;
} MASTER_BOOT_RECORD;
#pragma pack()
// GPT Partition Entry
#pragma pack(1)
typedef struct {
EFI_GUID PartitionTypeGUID;
EFI_GUID UniquePartitionGUID;
EFI_LBA StartingLBA;
EFI_LBA EndingLBA;
EFI_UINT64 Attributes;
CHAR16 PartitionName[36];
} EFI_PARTITION_ENTRY;
#pragma pack()
#endif /* EFI_TYPES_H */