Skip to main content

dyspxkrypt_libuefi/protocols/debug/
debug.rs

1/*
2 * Dyspxkrypt LibUEFI: Raw bindings of UEFI that conforms to the definitions of the UEFI Specification.
3 * Copyright (C) 2023-2024 HTGAzureX1212.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17 */
18
19pub const EFI_DEBUG_SUPPORT_PROTOCOL_GUID: EFI_GUID = unsafe {
20    EFI_GUID::from_raw_parts(
21        0x2755590C,
22        0x6F3C,
23        0x42FA,
24        [0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25],
25    )
26};
27
28pub const EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS: INTN = 0;
29pub const EXCEPT_AARCH64_IRQ: INTN = 1;
30pub const EXCEPT_AARCH64_FIQ: INTN = 2;
31pub const EXCEPT_AARCH64_SERROR: INTN = 3;
32
33pub const EXCEPT_ARM_RESET: INTN = 0;
34pub const EXCEPT_ARM_UNDEFINED_INSTRUCTION: INTN = 1;
35pub const EXCEPT_ARM_SOFTWARE_INTERRUPT: INTN = 2;
36pub const EXCEPT_ARM_PREFETCH_ABORT: INTN = 3;
37pub const EXCEPT_ARM_DATA_ABORT: INTN = 4;
38pub const EXCEPT_ARM_RESERVED: INTN = 5;
39pub const EXCEPT_ARM_IRQ: INTN = 6;
40pub const EXCEPT_ARM_FIQ: INTN = 7;
41
42pub const EXCEPT_EBC_UNDEFINED: INTN = 0;
43pub const EXCEPT_EBC_DIVIDE_ERROR: INTN = 1;
44pub const EXCEPT_EBC_DEBUG: INTN = 2;
45pub const EXCEPT_EBC_BREAKPOINT: INTN = 3;
46pub const EXCEPT_EBC_OVERFLOW: INTN = 4;
47pub const EXCEPT_EBC_INVALID_OPCODE: INTN = 5;
48pub const EXCEPT_EBC_STACK_FAULT: INTN = 6;
49pub const EXCEPT_EBC_ALIGNMENT_CHECK: INTN = 7;
50pub const EXCEPT_EBC_INSTRUCTION_ENCODING: INTN = 8;
51pub const EXCEPT_EBC_BAD_BREAK: INTN = 9;
52pub const EXCEPT_EBC_SINGLE_STEP: INTN = 10;
53
54pub const EXCEPT_IA32_DIVIDE_ERROR: INTN = 0;
55pub const EXCEPT_IA32_DEBUG: INTN = 1;
56pub const EXCEPT_IA32_NMI: INTN = 2;
57pub const EXCEPT_IA32_BREAKPOINT: INTN = 3;
58pub const EXCEPT_IA32_OVERFLOW: INTN = 4;
59pub const EXCEPT_IA32_BOUND: INTN = 5;
60pub const EXCEPT_IA32_INVALID_OPCODE: INTN = 6;
61pub const EXCEPT_IA32_DOUBLE_FAULT: INTN = 8;
62pub const EXCEPT_IA32_INVALID_TSS: INTN = 10;
63pub const EXCEPT_IA32_SEG_NOT_PRESENT: INTN = 11;
64pub const EXCEPT_IA32_STACK_FAULT: INTN = 12;
65pub const EXCEPT_IA32_GP_FAULT: INTN = 13;
66pub const EXCEPT_IA32_PAGE_FAULT: INTN = 14;
67pub const EXCEPT_IA32_FP_ERROR: INTN = 16;
68pub const EXCEPT_IA32_ALIGNMENT_CHECK: INTN = 17;
69pub const EXCEPT_IA32_MACHINE_CHECK: INTN = 18;
70pub const EXCEPT_IA32_SIMD: INTN = 19;
71
72pub const EXCEPT_IPF_VHTP_TRANSLATION: INTN = 0;
73pub const EXCEPT_IPF_INSTRUCTION_TLB: INTN = 1;
74pub const EXCEPT_IPF_DATA_TLB: INTN = 2;
75pub const EXCEPT_IPF_ALT_INSTRUCTION_TLB: INTN = 3;
76pub const EXCEPT_IPF_ALT_DATA_TLB: INTN = 4;
77pub const EXCEPT_IPF_DATA_NESTED_TLB: INTN = 5;
78pub const EXCEPT_IPF_INSTRUCTION_KEY_MISSED: INTN = 6;
79pub const EXCEPT_IPF_DATA_KEY_MISSED: INTN = 7;
80pub const EXCEPT_IPF_DIRTY_BIT: INTN = 8;
81pub const EXCEPT_IPF_INSTRUCTION_ACCESS_BIT: INTN = 9;
82pub const EXCEPT_IPF_DATA_ACCESS_BIT: INTN = 10;
83pub const EXCEPT_IPF_BREAKPOINT: INTN = 11;
84pub const EXCEPT_IPF_EXTERNAL_INTERRUPT: INTN = 12;
85pub const EXCEPT_IPF_PAGE_NOT_PRESENT: INTN = 20;
86pub const EXCEPT_IPF_KEY_PERMISSION: INTN = 21;
87pub const EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS: INTN = 22;
88pub const EXCEPT_IPF_DATA_ACCESS_RIGHTS: INTN = 23;
89pub const EXCEPT_IPF_GENERAL_EXCEPTION: INTN = 24;
90pub const EXCEPT_IPF_DISABLED_FP_REGISTER: INTN = 25;
91pub const EXCEPT_IPF_NAT_CONSUMPTION: INTN = 26;
92pub const EXCEPT_IPF_SPECULATION: INTN = 27;
93pub const EXCEPT_IPF_DEBUG: INTN = 29;
94pub const EXCEPT_IPF_UNALIGNED_REFERENCE: INTN = 30;
95pub const EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE: INTN = 31;
96pub const EXCEPT_IPF_FP_FAULT: INTN = 32;
97pub const EXCEPT_IPF_FP_TRAP: INTN = 33;
98pub const EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP: INTN = 34;
99pub const EXCEPT_IPF_TAKEN_BRANCH: INTN = 35;
100pub const EXCEPT_IPF_SINGLE_STEP: INTN = 36;
101pub const EXCEPT_IPF_IA32_EXCEPTION: INTN = 45;
102pub const EXCEPT_IPF_IA32_INTERCEPT: INTN = 46;
103pub const EXCEPT_IPF_IA32_INTERRUPT: INTN = 47;
104
105pub const EXCEPT_LOONGARCH_INT: INTN = 0;
106pub const EXCEPT_LOONGARCH_PIL: INTN = 1;
107pub const EXCEPT_LOONGARCH_PIS: INTN = 2;
108pub const EXCEPT_LOONGARCH_PIF: INTN = 3;
109pub const EXCEPT_LOONGARCH_PME: INTN = 4;
110pub const EXCEPT_LOONGARCH_PNR: INTN = 5;
111pub const EXCEPT_LOONGARCH_PNX: INTN = 6;
112pub const EXCEPT_LOONGARCH_PPI: INTN = 7;
113pub const EXCEPT_LOONGARCH_ADE: INTN = 8;
114pub const EXCEPT_LOONGARCH_ALE: INTN = 9;
115pub const EXCEPT_LOONGARCH_BCE: INTN = 10;
116pub const EXCEPT_LOONGARCH_SYS: INTN = 11;
117pub const EXCEPT_LOONGARCH_BRK: INTN = 12;
118pub const EXCEPT_LOONGARCH_INE: INTN = 13;
119pub const EXCEPT_LOONGARCH_IPE: INTN = 14;
120pub const EXCEPT_LOONGARCH_FPD: INTN = 15;
121pub const EXCEPT_LOONGARCH_SXD: INTN = 16;
122pub const EXCEPT_LOONGARCH_ASXD: INTN = 17;
123pub const EXCEPT_LOONGARCH_FPE: INTN = 18;
124
125pub const EXCEPT_LOONGARCH_INT_SIP0: INTN = 0;
126pub const EXCEPT_LOONGARCH_INT_SIP1: INTN = 1;
127pub const EXCEPT_LOONGARCH_INT_IP0: INTN = 2;
128pub const EXCEPT_LOONGARCH_INT_IP1: INTN = 3;
129pub const EXCEPT_LOONGARCH_INT_IP2: INTN = 4;
130pub const EXCEPT_LOONGARCH_INT_IP3: INTN = 5;
131pub const EXCEPT_LOONGARCH_INT_IP4: INTN = 6;
132pub const EXCEPT_LOONGARCH_INT_IP5: INTN = 7;
133pub const EXCEPT_LOONGARCH_INT_IP6: INTN = 8;
134pub const EXCEPT_LOONGARCH_INT_IP7: INTN = 9;
135pub const EXCEPT_LOONGARCH_INT_PMC: INTN = 10;
136pub const EXCEPT_LOONGARCH_INT_TIMER: INTN = 11;
137pub const EXCEPT_LOONGARCH_INT_IPI: INTN = 12;
138
139pub const EXCEPT_RISCV_INST_MISALIGNED: INTN = 0;
140pub const EXCEPT_RISCV_INST_ACCESS_FAULT: INTN = 1;
141pub const EXCEPT_RISCV_ILLEGAL_INST: INTN = 2;
142pub const EXCEPT_RISCV_BREAKPOINT: INTN = 3;
143pub const EXCEPT_RISCV_LOAD_ADDRESS_MISALIGNED: INTN = 4;
144pub const EXCEPT_RISCV_LOAD_ACCESS_FAULT: INTN = 5;
145pub const EXCEPT_RISCV_STORE_AMO_ADDRESS_MISALIGNED: INTN = 6;
146pub const EXCEPT_RISCV_STORE_AMO_ACCESS_FAULT: INTN = 7;
147pub const EXCEPT_RISCV_ENV_CALL_FROM_UMODE: INTN = 8;
148pub const EXCEPT_RISCV_ENV_CALL_FROM_SMODE: INTN = 9;
149pub const EXCEPT_RISCV_ENV_CALL_FROM_MMODE: INTN = 11;
150pub const EXCEPT_RISCV_INST_PAGE_FAULT: INTN = 12;
151pub const EXCEPT_RISCV_LOAD_PAGE_FAULT: INTN = 13;
152pub const EXCEPT_RISCV_STORE_AMO_PAGE_FAULT: INTN = 15;
153
154pub const EXCEPT_RISCV_SUPERVISOR_SOFTWARE_INT: INTN = 1;
155pub const EXCEPT_RISCV_MACHINE_SOFTWARE_INT: INTN = 3;
156pub const EXCEPT_RISCV_SUPERVISOR_TIMER_INT: INTN = 5;
157pub const EXCEPT_RISCV_MACHINE_TIMER_INT: INTN = 7;
158pub const EXCEPT_RISCV_SUPERVISOR_EXTERNAL_INT: INTN = 9;
159pub const EXCEPT_RISCV_MACHINE_EXTERNAL_INT: INTN = 11;
160
161pub const EXCEPT_X64_DIVIDE_ERROR: INTN = 0;
162pub const EXCEPT_X64_DEBUG: INTN = 1;
163pub const EXCEPT_X64_NMI: INTN = 2;
164pub const EXCEPT_X64_BREAKPOINT: INTN = 3;
165pub const EXCEPT_X64_OVERFLOW: INTN = 4;
166pub const EXCEPT_X64_BOUND: INTN = 5;
167pub const EXCEPT_X64_INVALID_OPCODE: INTN = 6;
168pub const EXCEPT_X64_DOUBLE_FAULT: INTN = 8;
169pub const EXCEPT_X64_INVALID_TSS: INTN = 10;
170pub const EXCEPT_X64_SEG_NOT_PRESENT: INTN = 11;
171pub const EXCEPT_X64_STACK_FAULT: INTN = 12;
172pub const EXCEPT_X64_GP_FAULT: INTN = 13;
173pub const EXCEPT_X64_PAGE_FAULT: INTN = 14;
174pub const EXCEPT_X64_FP_ERROR: INTN = 16;
175pub const EXCEPT_X64_ALIGNMENT_CHECK: INTN = 17;
176pub const EXCEPT_X64_MACHINE_CHECK: INTN = 18;
177pub const EXCEPT_X64_SIMD: INTN = 19;
178
179pub const MAX_LOONGARCH_INTERRUPT: INTN = 14;
180
181#[repr(C)]
182pub enum EFI_INSTRUCTION_SET_ARCHITECTURE {
183    IsaIa32 = 0x014C,
184    IsaX64 = 0x8664,
185    IsaIpf = 0x0200,
186    IsaEbc = 0x0EBC,
187    IsaArm = 0x01C2,
188    IsaAArch64 = 0xAA64,
189    IsaRISCV32 = 0x5032,
190    IsaRISCV64 = 0x5064,
191    IsaRISCV128 = 0x5128,
192    IsaLoongArch32 = 0x6232,
193    IsaLoongArch64 = 0x6264,
194}
195
196#[repr(C)]
197pub struct EFI_DEBUG_SUPPORT_PROTOCOL {
198    pub Isa: EFI_INSTRUCTION_SET_ARCHITECTURE,
199    pub GetMaximumProcessorIndex: unsafe extern "efiapi" fn(
200        This: *mut EFI_DEBUG_SUPPORT_PROTOCOL,
201        MaxProcessorIndex: *mut UINTN,
202    ) -> EFI_STATUS,
203    pub RegisterPeriodicCallback: unsafe extern "efiapi" fn(
204        This: *mut EFI_DEBUG_SUPPORT_PROTOCOL,
205        ProcessorIndex: UINTN,
206        PeriodicCallback: EFI_PERIODIC_CALLBACK,
207    ) -> EFI_STATUS,
208    pub RegisterExceptionCallback: unsafe extern "efiapi" fn(
209        This: *mut EFI_DEBUG_SUPPORT_PROTOCOL,
210        ProcessorIndex: UINTN,
211        ExceptionCallback: EFI_EXCEPTION_CALLBACK,
212        ExceptionType: EFI_EXCEPTION_TYPE,
213    ) -> EFI_STATUS,
214    pub InvalidateInstructionCache: unsafe extern "efiapi" fn(
215        This: *mut EFI_DEBUG_SUPPORT_PROTOCOL,
216        ProcessorIndex: UINTN,
217        Start: *mut VOID,
218        Length: UINT64,
219    ) -> EFI_STATUS,
220}
221
222#[repr(C)]
223pub struct EFI_FX_SAVE_STATE_IA32 {
224    pub Fcw: UINT16,
225    pub Fsw: UINT16,
226    pub Ftw: UINT16,
227    pub Opcode: UINT16,
228    pub Eip: UINT32,
229    pub Cs: UINT16,
230    Reserved1: UINT16,
231    pub DataOffset: UINT32,
232    pub Ds: UINT16,
233    Reserved2: [UINT8; 10],
234    pub St0Mm0: [UINT8; 10],
235    Reserved3: [UINT8; 6],
236    pub St0Mm1: [UINT8; 10],
237    Reserved4: [UINT8; 6],
238    pub St0Mm2: [UINT8; 10],
239    Reserved5: [UINT8; 6],
240    pub St0Mm3: [UINT8; 10],
241    Reserved6: [UINT8; 6],
242    pub St0Mm4: [UINT8; 10],
243    Reserved7: [UINT8; 6],
244    pub St0Mm5: [UINT8; 10],
245    Reserved8: [UINT8; 6],
246    pub St0Mm6: [UINT8; 10],
247    Reserved9: [UINT8; 6],
248    pub St0Mm7: [UINT8; 10],
249    Reserved10: [UINT8; 6],
250    pub Xmm0: [UINT8; 16],
251    pub Xmm1: [UINT8; 16],
252    pub Xmm2: [UINT8; 16],
253    pub Xmm3: [UINT8; 16],
254    pub Xmm4: [UINT8; 16],
255    pub Xmm5: [UINT8; 16],
256    pub Xmm6: [UINT8; 16],
257    pub Xmm7: [UINT8; 16],
258    Reserved11: [UINT8; 224],
259}
260
261#[repr(C)]
262pub struct EFI_FX_SAVE_STATE_X64 {
263    pub Fcw: UINT16,
264    pub Fsw: UINT16,
265    pub Ftw: UINT16,
266    pub Opcode: UINT16,
267    pub Rip: UINT64,
268    pub DataOffset: UINT64,
269    Reserved1: [UINT8; 8],
270    pub St0Mm0: [UINT8; 10],
271    Reserved2: [UINT8; 6],
272    pub St0Mm1: [UINT8; 10],
273    Reserved3: [UINT8; 6],
274    pub St0Mm2: [UINT8; 10],
275    Reserved4: [UINT8; 6],
276    pub St0Mm3: [UINT8; 10],
277    Reserved5: [UINT8; 6],
278    pub St0Mm4: [UINT8; 10],
279    Reserved6: [UINT8; 6],
280    pub St0Mm5: [UINT8; 10],
281    Reserved7: [UINT8; 6],
282    pub St0Mm6: [UINT8; 10],
283    Reserved8: [UINT8; 6],
284    pub St0Mm7: [UINT8; 10],
285    Reserved9: [UINT8; 6],
286    pub Xmm0: [UINT8; 16],
287    pub Xmm1: [UINT8; 16],
288    pub Xmm2: [UINT8; 16],
289    pub Xmm3: [UINT8; 16],
290    pub Xmm4: [UINT8; 16],
291    pub Xmm5: [UINT8; 16],
292    pub Xmm6: [UINT8; 16],
293    pub Xmm7: [UINT8; 16],
294    Reserved11: [UINT8; 224],
295}
296
297#[repr(C)]
298pub struct EFI_SYSTEM_CONTEXT_AARCH64 {
299    pub X0: UINT64,
300    pub X1: UINT64,
301    pub X2: UINT64,
302    pub X3: UINT64,
303    pub X4: UINT64,
304    pub X5: UINT64,
305    pub X6: UINT64,
306    pub X7: UINT64,
307    pub X8: UINT64,
308    pub X9: UINT64,
309    pub X10: UINT64,
310    pub X11: UINT64,
311    pub X12: UINT64,
312    pub X13: UINT64,
313    pub X14: UINT64,
314    pub X15: UINT64,
315    pub X16: UINT64,
316    pub X17: UINT64,
317    pub X18: UINT64,
318    pub X19: UINT64,
319    pub X20: UINT64,
320    pub X21: UINT64,
321    pub X22: UINT64,
322    pub X23: UINT64,
323    pub X24: UINT64,
324    pub X25: UINT64,
325    pub X26: UINT64,
326    pub X27: UINT64,
327    pub X28: UINT64,
328    pub FP: UINT64,
329    pub LR: UINT64,
330    pub SP: UINT64,
331    pub V0: [UINT64; 2],
332    pub V1: [UINT64; 2],
333    pub V2: [UINT64; 2],
334    pub V3: [UINT64; 2],
335    pub V4: [UINT64; 2],
336    pub V5: [UINT64; 2],
337    pub V6: [UINT64; 2],
338    pub V7: [UINT64; 2],
339    pub V8: [UINT64; 2],
340    pub V9: [UINT64; 2],
341    pub V10: [UINT64; 2],
342    pub V11: [UINT64; 2],
343    pub V12: [UINT64; 2],
344    pub V13: [UINT64; 2],
345    pub V14: [UINT64; 2],
346    pub V15: [UINT64; 2],
347    pub V16: [UINT64; 2],
348    pub V17: [UINT64; 2],
349    pub V18: [UINT64; 2],
350    pub V19: [UINT64; 2],
351    pub V20: [UINT64; 2],
352    pub V21: [UINT64; 2],
353    pub V22: [UINT64; 2],
354    pub V23: [UINT64; 2],
355    pub V24: [UINT64; 2],
356    pub V25: [UINT64; 2],
357    pub V26: [UINT64; 2],
358    pub V27: [UINT64; 2],
359    pub V28: [UINT64; 2],
360    pub V29: [UINT64; 2],
361    pub V30: [UINT64; 2],
362    pub V31: [UINT64; 2],
363    pub ELR: UINT64,
364    pub SPSR: UINT64,
365    pub FPSR: UINT64,
366    pub ESR: UINT64,
367    pub FAR: UINT64,
368}
369
370#[repr(C)]
371pub struct EFI_SYSTEM_CONTEXT_ARM {
372    pub R0: UINT32,
373    pub R1: UINT32,
374    pub R2: UINT32,
375    pub R3: UINT32,
376    pub R4: UINT32,
377    pub R5: UINT32,
378    pub R6: UINT32,
379    pub R7: UINT32,
380    pub R8: UINT32,
381    pub R9: UINT32,
382    pub R10: UINT32,
383    pub R11: UINT32,
384    pub R12: UINT32,
385    pub SP: UINT32,
386    pub LR: UINT32,
387    pub PC: UINT32,
388    pub CPSR: UINT32,
389    pub DFSR: UINT32,
390    pub DFAR: UINT32,
391    pub IFSR: UINT32,
392}
393
394#[repr(C)]
395pub struct EFI_SYSTEM_CONTEXT_EBC {
396    pub R0: UINT64,
397    pub R1: UINT64,
398    pub R2: UINT64,
399    pub R3: UINT64,
400    pub R4: UINT64,
401    pub R5: UINT64,
402    pub R6: UINT64,
403    pub R7: UINT64,
404    pub Flags: UINT64,
405    pub ControlFlags: UINT64,
406    pub Ip: UINT64,
407}
408
409#[repr(C)]
410pub struct EFI_SYSTEM_CONTEXT_IA32 {
411    pub ExceptionData: UINT32,
412    pub FxSaveState: EFI_FX_SAVE_STATE_IA32,
413    pub Dr0: UINT32,
414    pub Dr1: UINT32,
415    pub Dr2: UINT32,
416    pub Dr3: UINT32,
417    pub Dr6: UINT32,
418    pub Dr7: UINT32,
419    pub Cr0: UINT32,
420    pub Cr1: UINT32,
421    Reserved: UINT32,
422    pub Cr2: UINT32,
423    pub Cr3: UINT32,
424    pub Cr4: UINT32,
425    pub Eflags: UINT32,
426    pub Ldtr: UINT32,
427    pub Tr: UINT32,
428    pub Gdtr: [UINT32; 2],
429    pub Idtr: [UINT32; 2],
430    pub Eip: UINT32,
431    pub Gs: UINT32,
432    pub Fs: UINT32,
433    pub Es: UINT32,
434    pub Ds: UINT32,
435    pub Cs: UINT32,
436    pub Ss: UINT32,
437    pub Edi: UINT32,
438    pub Esi: UINT32,
439    pub Ebp: UINT32,
440    pub Esp: UINT32,
441    pub Ebx: UINT32,
442    pub Edx: UINT32,
443    pub Ecx: UINT32,
444    pub Eax: UINT32,
445}
446
447#[repr(C)]
448pub struct EFI_SYSTEM_CONTEXT_IPF {
449    Reserved: UINT64,
450    pub R1: UINT64,
451    pub R2: UINT64,
452    pub R3: UINT64,
453    pub R4: UINT64,
454    pub R5: UINT64,
455    pub R6: UINT64,
456    pub R7: UINT64,
457    pub R8: UINT64,
458    pub R9: UINT64,
459    pub R10: UINT64,
460    pub R11: UINT64,
461    pub R12: UINT64,
462    pub R13: UINT64,
463    pub R14: UINT64,
464    pub R15: UINT64,
465    pub R16: UINT64,
466    pub R17: UINT64,
467    pub R18: UINT64,
468    pub R19: UINT64,
469    pub R20: UINT64,
470    pub R21: UINT64,
471    pub R22: UINT64,
472    pub R23: UINT64,
473    pub R24: UINT64,
474    pub R25: UINT64,
475    pub R26: UINT64,
476    pub R27: UINT64,
477    pub R28: UINT64,
478    pub R29: UINT64,
479    pub R30: UINT64,
480    pub F2: [UINT64; 2],
481    pub F3: [UINT64; 2],
482    pub F4: [UINT64; 2],
483    pub F5: [UINT64; 2],
484    pub F6: [UINT64; 2],
485    pub F7: [UINT64; 2],
486    pub F8: [UINT64; 2],
487    pub F9: [UINT64; 2],
488    pub F10: [UINT64; 2],
489    pub F11: [UINT64; 2],
490    pub F12: [UINT64; 2],
491    pub F13: [UINT64; 2],
492    pub F14: [UINT64; 2],
493    pub F15: [UINT64; 2],
494    pub F16: [UINT64; 2],
495    pub F17: [UINT64; 2],
496    pub F18: [UINT64; 2],
497    pub F19: [UINT64; 2],
498    pub F20: [UINT64; 2],
499    pub F21: [UINT64; 2],
500    pub F22: [UINT64; 2],
501    pub F23: [UINT64; 2],
502    pub F24: [UINT64; 2],
503    pub F25: [UINT64; 2],
504    pub F26: [UINT64; 2],
505    pub F27: [UINT64; 2],
506    pub F28: [UINT64; 2],
507    pub F29: [UINT64; 2],
508    pub F30: [UINT64; 2],
509    pub F31: [UINT64; 2],
510    pub Pr: UINT64,
511    pub B0: UINT64,
512    pub B1: UINT64,
513    pub B2: UINT64,
514    pub B3: UINT64,
515    pub B4: UINT64,
516    pub B5: UINT64,
517    pub B6: UINT64,
518    pub B7: UINT64,
519    pub ArRsc: UINT64,
520    pub ArBsp: UINT64,
521    pub ArBspstore: UINT64,
522    pub ArRnat: UINT64,
523    pub ArFcr: UINT64,
524    pub ArEflag: UINT64,
525    pub ArCsd: UINT64,
526    pub ArSsd: UINT64,
527    pub ArCflg: UINT64,
528    pub ArFsr: UINT64,
529    pub ArFir: UINT64,
530    pub ArFdr: UINT64,
531    pub ArCcv: UINT64,
532    pub ArUnat: UINT64,
533    pub ArFpsr: UINT64,
534    pub ArPfs: UINT64,
535    pub ArLc: UINT64,
536    pub ArEc: UINT64,
537    pub CrDcr: UINT64,
538    pub CrItm: UINT64,
539    pub CrIva: UINT64,
540    pub CrPta: UINT64,
541    pub CrIpsr: UINT64,
542    pub CrIsr: UINT64,
543    pub CrIip: UINT64,
544    pub CrIfa: UINT64,
545    pub CrItir: UINT64,
546    pub CrIipa: UINT64,
547    pub CrIfs: UINT64,
548    pub CrIim: UINT64,
549    pub CrIha: UINT64,
550    pub Dbr0: UINT64,
551    pub Dbr1: UINT64,
552    pub Dbr2: UINT64,
553    pub Dbr3: UINT64,
554    pub Dbr4: UINT64,
555    pub Dbr5: UINT64,
556    pub Dbr6: UINT64,
557    pub Dbr7: UINT64,
558    pub Ibr0: UINT64,
559    pub Ibr1: UINT64,
560    pub Ibr2: UINT64,
561    pub Ibr3: UINT64,
562    pub Ibr4: UINT64,
563    pub Ibr5: UINT64,
564    pub Ibr6: UINT64,
565    pub Ibr7: UINT64,
566    pub IntNat: UINT64,
567}
568
569#[repr(C)]
570pub struct EFI_SYSTEM_CONTEXT_LOONGARCH64 {
571    pub R0: UINT64,
572    pub R1: UINT64,
573    pub R2: UINT64,
574    pub R3: UINT64,
575    pub R4: UINT64,
576    pub R5: UINT64,
577    pub R6: UINT64,
578    pub R7: UINT64,
579    pub R8: UINT64,
580    pub R9: UINT64,
581    pub R10: UINT64,
582    pub R11: UINT64,
583    pub R12: UINT64,
584    pub R13: UINT64,
585    pub R14: UINT64,
586    pub R15: UINT64,
587    pub R16: UINT64,
588    pub R17: UINT64,
589    pub R18: UINT64,
590    pub R19: UINT64,
591    pub R20: UINT64,
592    pub R21: UINT64,
593    pub R22: UINT64,
594    pub R23: UINT64,
595    pub R24: UINT64,
596    pub R25: UINT64,
597    pub R26: UINT64,
598    pub R27: UINT64,
599    pub R28: UINT64,
600    pub R29: UINT64,
601    pub R30: UINT64,
602    pub R31: UINT64,
603    pub CRMD: UINT64,
604    pub PRMD: UINT64,
605    pub EUEN: UINT64,
606    pub MISC: UINT64,
607    pub ECFG: UINT64,
608    pub ESTAT: UINT64,
609    pub ERA: UINT64,
610    pub BADV: UINT64,
611    pub BADI: UINT64,
612}
613
614#[repr(C)]
615pub struct EFI_SYSTEM_CONTEXT_RISCV32 {
616    pub Zero: UINT32,
617    pub Ra: UINT32,
618    pub Sp: UINT32,
619    pub Gp: UINT32,
620    pub Tp: UINT32,
621    pub T0: UINT32,
622    pub T1: UINT32,
623    pub T2: UINT32,
624    pub S0FP: UINT32,
625    pub S1: UINT32,
626    pub A0: UINT32,
627    pub A1: UINT32,
628    pub A2: UINT32,
629    pub A3: UINT32,
630    pub A4: UINT32,
631    pub A5: UINT32,
632    pub A6: UINT32,
633    pub A7: UINT32,
634    pub S2: UINT32,
635    pub S3: UINT32,
636    pub S4: UINT32,
637    pub S5: UINT32,
638    pub S6: UINT32,
639    pub S7: UINT32,
640    pub S8: UINT32,
641    pub S9: UINT32,
642    pub S10: UINT32,
643    pub S11: UINT32,
644    pub T3: UINT32,
645    pub T4: UINT32,
646    pub T5: UINT32,
647    pub T6: UINT32,
648    pub Ft0: UINT128,
649    pub Ft1: UINT128,
650    pub Ft2: UINT128,
651    pub Ft3: UINT128,
652    pub Ft4: UINT128,
653    pub Ft5: UINT128,
654    pub Ft6: UINT128,
655    pub Ft7: UINT128,
656    pub Fs0: UINT128,
657    pub Fs1: UINT128,
658    pub Fa0: UINT128,
659    pub Fa1: UINT128,
660    pub Fa2: UINT128,
661    pub Fa3: UINT128,
662    pub Fa4: UINT128,
663    pub Fa5: UINT128,
664    pub Fa6: UINT128,
665    pub Fa7: UINT128,
666    pub Fs2: UINT128,
667    pub Fs3: UINT128,
668    pub Fs4: UINT128,
669    pub Fs5: UINT128,
670    pub Fs6: UINT128,
671    pub Fs7: UINT128,
672    pub Fs8: UINT128,
673    pub Fs9: UINT128,
674    pub Fs10: UINT128,
675    pub Fs11: UINT128,
676    pub Ft8: UINT128,
677    pub Ft9: UINT128,
678    pub Ft10: UINT128,
679    pub Ft11: UINT128,
680}
681
682#[repr(C)]
683pub struct EFI_SYSTEM_CONTEXT_RISCV64 {
684    pub Zero: UINT64,
685    pub Ra: UINT64,
686    pub Sp: UINT64,
687    pub Gp: UINT64,
688    pub Tp: UINT64,
689    pub T0: UINT64,
690    pub T1: UINT64,
691    pub T2: UINT64,
692    pub S0FP: UINT64,
693    pub S1: UINT64,
694    pub A0: UINT64,
695    pub A1: UINT64,
696    pub A2: UINT64,
697    pub A3: UINT64,
698    pub A4: UINT64,
699    pub A5: UINT64,
700    pub A6: UINT64,
701    pub A7: UINT64,
702    pub S2: UINT64,
703    pub S3: UINT64,
704    pub S4: UINT64,
705    pub S5: UINT64,
706    pub S6: UINT64,
707    pub S7: UINT64,
708    pub S8: UINT64,
709    pub S9: UINT64,
710    pub S10: UINT64,
711    pub S11: UINT64,
712    pub T3: UINT64,
713    pub T4: UINT64,
714    pub T5: UINT64,
715    pub T6: UINT64,
716    pub Ft0: UINT128,
717    pub Ft1: UINT128,
718    pub Ft2: UINT128,
719    pub Ft3: UINT128,
720    pub Ft4: UINT128,
721    pub Ft5: UINT128,
722    pub Ft6: UINT128,
723    pub Ft7: UINT128,
724    pub Fs0: UINT128,
725    pub Fs1: UINT128,
726    pub Fa0: UINT128,
727    pub Fa1: UINT128,
728    pub Fa2: UINT128,
729    pub Fa3: UINT128,
730    pub Fa4: UINT128,
731    pub Fa5: UINT128,
732    pub Fa6: UINT128,
733    pub Fa7: UINT128,
734    pub Fs2: UINT128,
735    pub Fs3: UINT128,
736    pub Fs4: UINT128,
737    pub Fs5: UINT128,
738    pub Fs6: UINT128,
739    pub Fs7: UINT128,
740    pub Fs8: UINT128,
741    pub Fs9: UINT128,
742    pub Fs10: UINT128,
743    pub Fs11: UINT128,
744    pub Ft8: UINT128,
745    pub Ft9: UINT128,
746    pub Ft10: UINT128,
747    pub Ft11: UINT128,
748}
749
750#[repr(C)]
751pub struct EFI_SYSTEM_CONTEXT_RISCV128 {
752    pub Zero: UINT128,
753    pub Ra: UINT128,
754    pub Sp: UINT128,
755    pub Gp: UINT128,
756    pub Tp: UINT128,
757    pub T0: UINT128,
758    pub T1: UINT128,
759    pub T2: UINT128,
760    pub S0FP: UINT128,
761    pub S1: UINT128,
762    pub A0: UINT128,
763    pub A1: UINT128,
764    pub A2: UINT128,
765    pub A3: UINT128,
766    pub A4: UINT128,
767    pub A5: UINT128,
768    pub A6: UINT128,
769    pub A7: UINT128,
770    pub S2: UINT128,
771    pub S3: UINT128,
772    pub S4: UINT128,
773    pub S5: UINT128,
774    pub S6: UINT128,
775    pub S7: UINT128,
776    pub S8: UINT128,
777    pub S9: UINT128,
778    pub S10: UINT128,
779    pub S11: UINT128,
780    pub T3: UINT128,
781    pub T4: UINT128,
782    pub T5: UINT128,
783    pub T6: UINT128,
784    pub Ft0: UINT128,
785    pub Ft1: UINT128,
786    pub Ft2: UINT128,
787    pub Ft3: UINT128,
788    pub Ft4: UINT128,
789    pub Ft5: UINT128,
790    pub Ft6: UINT128,
791    pub Ft7: UINT128,
792    pub Fs0: UINT128,
793    pub Fs1: UINT128,
794    pub Fa0: UINT128,
795    pub Fa1: UINT128,
796    pub Fa2: UINT128,
797    pub Fa3: UINT128,
798    pub Fa4: UINT128,
799    pub Fa5: UINT128,
800    pub Fa6: UINT128,
801    pub Fa7: UINT128,
802    pub Fs2: UINT128,
803    pub Fs3: UINT128,
804    pub Fs4: UINT128,
805    pub Fs5: UINT128,
806    pub Fs6: UINT128,
807    pub Fs7: UINT128,
808    pub Fs8: UINT128,
809    pub Fs9: UINT128,
810    pub Fs10: UINT128,
811    pub Fs11: UINT128,
812    pub Ft8: UINT128,
813    pub Ft9: UINT128,
814    pub Ft10: UINT128,
815    pub Ft11: UINT128,
816}
817
818#[repr(C)]
819pub struct EFI_SYSTEM_CONTEXT_X64 {
820    pub ExceptionData: UINT64,
821    pub FxSaveState: EFI_FX_SAVE_STATE_X64,
822    pub Dr0: UINT32,
823    pub Dr1: UINT32,
824    pub Dr2: UINT32,
825    pub Dr3: UINT32,
826    pub Dr6: UINT32,
827    pub Dr7: UINT32,
828    pub Cr0: UINT32,
829    pub Cr1: UINT32,
830    Reserved: UINT32,
831    pub Cr2: UINT32,
832    pub Cr3: UINT32,
833    pub Cr4: UINT32,
834    pub Cr8: UINT32,
835    pub Rflags: UINT32,
836    pub Ldtr: UINT32,
837    pub Tr: UINT32,
838    pub Gdtr: [UINT32; 2],
839    pub Idtr: [UINT32; 2],
840    pub Rip: UINT32,
841    pub Gs: UINT32,
842    pub Fs: UINT32,
843    pub Es: UINT32,
844    pub Ds: UINT32,
845    pub Cs: UINT32,
846    pub Ss: UINT32,
847    pub Rdi: UINT32,
848    pub Rsi: UINT32,
849    pub Rbp: UINT32,
850    pub Rsp: UINT32,
851    pub Rbx: UINT32,
852    pub Rdx: UINT32,
853    pub Rcx: UINT32,
854    pub Rax: UINT32,
855    pub R8: UINT32,
856    pub R9: UINT32,
857    pub R10: UINT32,
858    pub R11: UINT32,
859    pub R12: UINT32,
860    pub R13: UINT32,
861    pub R14: UINT32,
862    pub R15: UINT32,
863}
864
865pub type EFI_EXCEPTION_CALLBACK =
866    unsafe extern "efiapi" fn(ExceptionType: EFI_EXCEPTION_TYPE, SystemContext: EFI_SYSTEM_CONTEXT);
867
868pub type EFI_EXCEPTION_TYPE = INTN;
869
870pub type EFI_PERIODIC_CALLBACK = unsafe extern "efiapi" fn(SystemContext: EFI_SYSTEM_CONTEXT);
871
872#[repr(C)]
873pub union EFI_SYSTEM_CONTEXT {
874    pub SystemContextEbc: *mut EFI_SYSTEM_CONTEXT_EBC,
875    pub SystemContextIa32: *mut EFI_SYSTEM_CONTEXT_IA32,
876    pub SystemContextX64: *mut EFI_SYSTEM_CONTEXT_X64,
877    pub SystemContextIpf: *mut EFI_SYSTEM_CONTEXT_IPF,
878    pub SystemContextArm: *mut EFI_SYSTEM_CONTEXT_ARM,
879    pub SystemContextRiscV32: *mut EFI_SYSTEM_CONTEXT_RISCV32,
880    pub SystemContextRiscV64: *mut EFI_SYSTEM_CONTEXT_RISCV64,
881    pub SystemContextRiscV128: *mut EFI_SYSTEM_CONTEXT_RISCV128,
882    pub SystemContextLongArch64: *mut EFI_SYSTEM_CONTEXT_LOONGARCH64,
883}