-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathefi_rs.h
312 lines (261 loc) · 7.37 KB
/
efi_rs.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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
#ifndef EFI_RUNTIME_SERVICES_H
#define EFI_RUNTIME_SERVICES_H
#include "efi_types.h"
#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION
#define EFI_VARIABLE_NON_VOLATILE 0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008
// NOTE: EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated
// and should be considered reserved.
#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010
#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
#define EFI_VARIABLE_APPEND_WRITE 0x00000040
#define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS 0x00000080
#define EFI_VARIABLE_AUTHENTICATION_3_CERT_ID_SHA256 1
#define EFI_VARIABLE_AUTHENTICATION_3_TIMESTAMP_TYPE 1
#define EFI_VARIABLE_AUTHENTICATION_3_NONCE_TYPE 2
#define EFI_HARDWARE_ERROR_VARIABLE {0x414e6Bdd,0xe47b,0x47cc, {0xb2,0x44,0xbb,0x61,0x02,0x0c,0xf5,0x16}}
#define EFI_TIME_ADJUST_DAYLIGHT 0x01
#define EFI_TIME_IN_DAYLIGHT 0x02
#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
#define EFI_OPTIONAL_PTR 0x00000001
#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000
#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000
#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000
#define EFI_MEMORY_RANGE_CAPSULE_GUID {0xde9f0ec,0x88b6,0x428f, {0x97,0x7a,0x25,0x8f,0x1d,0xe,0x5e,0x72}}
#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001
#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002
#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004
#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008
#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010
#define EFI_OS_INDICATIONS_START_OS_RECOVERY 0x0000000000000020
#define EFI_OS_INDICATIONS_START_PLATFORM_RECOVERY 0x0000000000000040
#define EFI_OS_INDICATIONS_JSON_CONFIG_DATA_REFRESH 0x0000000000000080
#define EFI_CAPSULE_REPORT_GUID {0x39b68c46,0xf7fb,0x441b, {0xb6,0xec,0x16,0xb0,0xf6,0x98,0x21,0xf3}}
typedef struct _EFI_RUNTIME_SERVICES EFI_RUNTIME_SERVICES;
typedef enum {
EfiResetCold,
EfiResetWarm,
EfiResetShutdown,
EfiResetPlatformSpecific
} EFI_RESET_TYPE;
typedef struct {
EFI_UINT16 Year;
EFI_UINT8 Month;
EFI_UINT8 Day;
EFI_UINT8 Hour;
EFI_UINT8 Minute;
EFI_UINT8 Second;
EFI_UINT8 Pad1;
EFI_UINT32 Nanosecond;
EFI_INT16 TimeZone;
EFI_UINT8 Daylight;
EFI_UINT8 Pad2;
} EFI_TIME;
typedef struct {
EFI_UINT32 Resolution;
EFI_UINT32 Accuracy;
EFI_BOOLEAN SetsToZero;
} EFI_TIME_CAPABILITIES;
// NOTE: EFI_VARIABLE_AUTHENTICATION is deprecated
typedef struct {
EFI_UINT64 MonotonicCount;
//WIN_CERTIFICATE_UEFI_GUID AuthInfo;
} EFI_VARIABLE_AUTHENTICATION;
typedef struct {
EFI_TIME TimeStamp;
//WIN_CERTIFICATE_UEFI_GUID AuthInfo;
} EFI_VARIABLE_AUTHENTICATION_2;
typedef struct {
EFI_UINT8 Version;
EFI_UINT8 Type;
EFI_UINT32 MetadataSize;
EFI_UINT32 Flags;
} EFI_VARIABLE_AUTHENTICATION_3;
typedef struct {
EFI_UINT8 Type;
EFI_UINT32 IdSize;
//EFI_UINT8 Id[IdSize];
} EFI_VARIABLE_AUTHENTICATION_3_CERT_ID;
typedef struct {
EFI_UINT32 NonceSize;
//EFI_UINT8 Nonce[NonceSize];
} EFI_VARIABLE_AUTHENTICATION_3_NONCE;
typedef struct {
EFI_GUID CapsuleGuid;
EFI_UINT32 HeaderSize;
EFI_UINT32 Flags;
EFI_UINT32 CapsuleImageSize;
} EFI_CAPSULE_HEADER;
typedef struct {
EFI_UINT32 CapsuleArrayNumber;
VOID *CapsulePtr[1];
} EFI_CAPSULE_TABLE;
typedef struct {
EFI_UINT64 Length;
union {
EFI_PHYSICAL_ADDRESS DataBlock;
EFI_PHYSICAL_ADDRESS ContinuationPointer;
} Union;
} EFI_CAPSULE_BLOCK_DESCRIPTOR;
typedef struct {
EFI_PHYSICAL_ADDRESS Address;
EFI_UINT64 Length;
} EFI_MEMORY_RANGE;
typedef struct {
EFI_CAPSULE_HEADER Header;
EFI_UINT32 OsRequestedMemoryType;
EFI_UINT64 NumberOfMemoryRanges;
EFI_MEMORY_RANGE MemoryRanges[];
} EFI_MEMORY_RANGE_CAPSULE;
typedef struct {
EFI_UINT64 FirmwareMemoryRequirement;
EFI_UINT64 NumberOfMemoryRanges;
} EFI_MEMORY_RANGE_CAPSULE_RESULT;
typedef struct {
EFI_UINT32 VariableTotalSize;
EFI_UINT32 Reserved;
EFI_GUID CapsuleGuid;
EFI_TIME CapsuleProcessed;
EFI_STATUS CapsuleStatus;
} EFI_CAPSULE_RESULT_VARIABLE_HEADER;
typedef struct {
EFI_UINT16 Version;
EFI_UINT8 PayloadIndex;
EFI_UINT8 UpdateImageIndex;
EFI_GUID UpdateImageTypeId;
//CHAR16 CapsuleFileName[];
//CHAR16 CapsuleTarget[];
} EFI_CAPSULE_RESULT_VARIABLE_FMP;
typedef struct {
EFI_UINT32 Version;
EFI_UINT32 CapsuleId;
EFI_UINT32 RespLength;
EFI_UINT8 Resp[];
} EFI_CAPSULE_RESULT_VARIABLE_JSON;
typedef
EFI_STATUS
(EFIAPI *EFI_GET_TIME)(
OUT EFI_TIME *Time,
OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SET_TIME)(
IN EFI_TIME *Time
);
typedef
EFI_STATUS
(EFIAPI *EFI_GET_WAKEUP_TIME)(
OUT EFI_BOOLEAN *Enable,
OUT EFI_BOOLEAN *Pending,
OUT EFI_TIME *Time
);
typedef
EFI_STATUS
(EFIAPI *EFI_SET_WAKEUP_TIME)(
IN EFI_BOOLEAN Enable,
IN EFI_TIME *Time
);
typedef
EFI_STATUS
(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)(
IN EFI_UINTN MemoryMapSize,
IN EFI_UINTN DescriptorSize,
IN EFI_UINT32 DescriptorVersion,
IN EFI_MEMORY_DESCRIPTOR *VirtualMap
);
typedef
EFI_STATUS
(EFIAPI *EFI_CONVERT_POINTER)(
IN EFI_UINTN DebugDisposition,
IN VOID **Address
);
typedef
EFI_STATUS
(EFIAPI *EFI_GET_VARIABLE)(
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
OUT EFI_UINT32 *Attributes OPTIONAL,
IN OUT EFI_UINTN *DataSize,
OUT VOID *Data OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)(
IN OUT EFI_UINTN *VariableNameSize,
IN OUT CHAR16 *VariableName,
IN OUT EFI_GUID *VendorGuid
);
typedef
EFI_STATUS
(EFIAPI *EFI_SET_VARIABLE)(
IN CHAR16 *VariableName,
IN EFI_GUID *VendorGuid,
IN EFI_UINT32 Attributes,
IN EFI_UINTN DataSize,
IN VOID *Data
);
typedef
EFI_STATUS
(EFIAPI *EFI_GET_NEXT_HIGH_MONOTONIC_COUNT)(
OUT EFI_UINT32 *HighCount
);
typedef
EFI_STATUS
(EFIAPI *EFI_RESET_SYSTEM)(
IN EFI_RESET_TYPE ResetType,
IN EFI_STATUS ResetStatus,
IN EFI_UINTN DataSize,
IN VOID *ResetData OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_UPDATE_CAPSULE)(
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray,
IN EFI_UINTN CapsuleCount,
IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES)(
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray,
IN EFI_UINTN CapsuleCount,
OUT EFI_UINT64 *MaximumCapsuleSize,
OUT EFI_RESET_TYPE *ResetType
);
typedef
EFI_STATUS
(EFIAPI *EFI_QUERY_VARIABLE_INFO)(
IN EFI_UINT32 Attributes,
OUT EFI_UINT64 *MaximumVariableStorageSize,
OUT EFI_UINT64 *RemainingVariableStorageSize,
OUT EFI_UINT64 *MaximumVariableSize
);
// EFI Runtime Services
typedef struct _EFI_RUNTIME_SERVICES {
EFI_TABLE_HEADER Hdr;
// Time Services
EFI_GET_TIME GetTime;
EFI_SET_TIME SetTime;
EFI_GET_WAKEUP_TIME GetWakeupTime;
EFI_SET_WAKEUP_TIME SetWakeupTime;
// Virtual Memory Services
EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
EFI_CONVERT_POINTER ConvertPointer;
// Variable Services
EFI_GET_VARIABLE GetVariable;
EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
EFI_SET_VARIABLE SetVariable;
// Miscellaneous Services
EFI_GET_NEXT_HIGH_MONOTONIC_COUNT GetNextHighMonotonicCount;
EFI_RESET_SYSTEM ResetSystem;
// UEFI 2.0 Capsule Services
EFI_UPDATE_CAPSULE UpdateCapsule;
EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities;
// Miscellaneous UEFI 2.0 Service
EFI_QUERY_VARIABLE_INFO QueryVariableInfo;
} EFI_RUNTIME_SERVICES;
#endif /* EFI_RUNTIME_SERVICES_H */