1pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
7 0x2755590c,
8 0x6f3c,
9 0x42fa,
10 0x9e,
11 0xa4,
12 &[0xa3, 0xba, 0x54, 0x3c, 0xda, 0x25],
13);
14
15pub type InstructionSetArchitecture = u32;
16
17pub const ISA_IA32: InstructionSetArchitecture = 0x014c;
18pub const ISA_X64: InstructionSetArchitecture = 0x8664;
19pub const ISA_IPF: InstructionSetArchitecture = 0x0200;
20pub const ISA_EBC: InstructionSetArchitecture = 0x0ebc;
21pub const ISA_ARM: InstructionSetArchitecture = 0x1c2;
22pub const ISA_AARCH64: InstructionSetArchitecture = 0xaa64;
23pub const ISA_RISCV32: InstructionSetArchitecture = 0x5032;
24pub const ISA_RISCV64: InstructionSetArchitecture = 0x5064;
25pub const ISA_RISCV128: InstructionSetArchitecture = 0x5128;
26
27#[repr(C)]
28#[derive(Clone, Copy)]
29pub union SystemContext {
30 pub system_context_ebc: *mut SystemContextEbc,
31 pub system_context_ia32: *mut SystemContextIa32,
32 pub system_context_x64: *mut SystemContextX64,
33 pub system_context_ipf: *mut SystemContextIpf,
34 pub system_context_arm: *mut SystemContextArm,
35 pub system_context_aarch64: *mut SystemContextAArch64,
36 pub system_context_riscv32: *mut SystemContextRiscV32,
37 pub system_context_riscv64: *mut SystemContextRiscV64,
38 pub system_context_riscv128: *mut SystemContextRiscV128,
39}
40
41#[repr(C)]
42#[derive(Clone, Copy, Debug)]
43pub struct SystemContextEbc {
44 pub r0: u64,
45 pub r1: u64,
46 pub r2: u64,
47 pub r3: u64,
48 pub r4: u64,
49 pub r5: u64,
50 pub r6: u64,
51 pub r7: u64,
52 pub flags: u64,
53 pub control_flags: u64,
54 pub ip: u64,
55}
56
57#[repr(C)]
58#[derive(Clone, Copy, Debug)]
59pub struct SystemContextRiscV32 {
60 pub zero: u32,
62 pub ra: u32,
63 pub sp: u32,
64 pub gp: u32,
65 pub tp: u32,
66 pub t0: u32,
67 pub t1: u32,
68 pub t2: u32,
69 pub s0fp: u32,
70 pub s1: u32,
71 pub a0: u32,
72 pub a1: u32,
73 pub a2: u32,
74 pub a3: u32,
75 pub a4: u32,
76 pub a5: u32,
77 pub a6: u32,
78 pub a7: u32,
79 pub s2: u32,
80 pub s3: u32,
81 pub s4: u32,
82 pub s5: u32,
83 pub s6: u32,
84 pub s7: u32,
85 pub s8: u32,
86 pub s9: u32,
87 pub s10: u32,
88 pub s11: u32,
89 pub t3: u32,
90 pub t4: u32,
91 pub t5: u32,
92 pub t6: u32,
93 pub ft0: u128,
95 pub ft1: u128,
96 pub ft2: u128,
97 pub ft3: u128,
98 pub ft4: u128,
99 pub ft5: u128,
100 pub ft6: u128,
101 pub ft7: u128,
102 pub fs0: u128,
103 pub fs1: u128,
104 pub fa0: u128,
105 pub fa1: u128,
106 pub fa2: u128,
107 pub fa3: u128,
108 pub fa4: u128,
109 pub fa5: u128,
110 pub fa6: u128,
111 pub fa7: u128,
112 pub fs2: u128,
113 pub fs3: u128,
114 pub fs4: u128,
115 pub fs5: u128,
116 pub fs6: u128,
117 pub fs7: u128,
118 pub fs8: u128,
119 pub fs9: u128,
120 pub fs10: u128,
121 pub fs11: u128,
122 pub ft8: u128,
123 pub ft9: u128,
124 pub ft10: u128,
125 pub ft11: u128,
126}
127
128#[repr(C)]
129#[derive(Clone, Copy, Debug)]
130pub struct SystemContextRiscV64 {
131 pub zero: u64,
133 pub ra: u64,
134 pub sp: u64,
135 pub gp: u64,
136 pub tp: u64,
137 pub t0: u64,
138 pub t1: u64,
139 pub t2: u64,
140 pub s0fp: u64,
141 pub s1: u64,
142 pub a0: u64,
143 pub a1: u64,
144 pub a2: u64,
145 pub a3: u64,
146 pub a4: u64,
147 pub a5: u64,
148 pub a6: u64,
149 pub a7: u64,
150 pub s2: u64,
151 pub s3: u64,
152 pub s4: u64,
153 pub s5: u64,
154 pub s6: u64,
155 pub s7: u64,
156 pub s8: u64,
157 pub s9: u64,
158 pub s10: u64,
159 pub s11: u64,
160 pub t3: u64,
161 pub t4: u64,
162 pub t5: u64,
163 pub t6: u64,
164 pub ft0: u128,
166 pub ft1: u128,
167 pub ft2: u128,
168 pub ft3: u128,
169 pub ft4: u128,
170 pub ft5: u128,
171 pub ft6: u128,
172 pub ft7: u128,
173 pub fs0: u128,
174 pub fs1: u128,
175 pub fa0: u128,
176 pub fa1: u128,
177 pub fa2: u128,
178 pub fa3: u128,
179 pub fa4: u128,
180 pub fa5: u128,
181 pub fa6: u128,
182 pub fa7: u128,
183 pub fs2: u128,
184 pub fs3: u128,
185 pub fs4: u128,
186 pub fs5: u128,
187 pub fs6: u128,
188 pub fs7: u128,
189 pub fs8: u128,
190 pub fs9: u128,
191 pub fs10: u128,
192 pub fs11: u128,
193 pub ft8: u128,
194 pub ft9: u128,
195 pub ft10: u128,
196 pub ft11: u128,
197}
198
199#[repr(C)]
200#[derive(Clone, Copy, Debug)]
201pub struct SystemContextRiscV128 {
202 pub zero: u128,
204 pub ra: u128,
205 pub sp: u128,
206 pub gp: u128,
207 pub tp: u128,
208 pub t0: u128,
209 pub t1: u128,
210 pub t2: u128,
211 pub s0fp: u128,
212 pub s1: u128,
213 pub a0: u128,
214 pub a1: u128,
215 pub a2: u128,
216 pub a3: u128,
217 pub a4: u128,
218 pub a5: u128,
219 pub a6: u128,
220 pub a7: u128,
221 pub s2: u128,
222 pub s3: u128,
223 pub s4: u128,
224 pub s5: u128,
225 pub s6: u128,
226 pub s7: u128,
227 pub s8: u128,
228 pub s9: u128,
229 pub s10: u128,
230 pub s11: u128,
231 pub t3: u128,
232 pub t4: u128,
233 pub t5: u128,
234 pub t6: u128,
235 pub ft0: u128,
237 pub ft1: u128,
238 pub ft2: u128,
239 pub ft3: u128,
240 pub ft4: u128,
241 pub ft5: u128,
242 pub ft6: u128,
243 pub ft7: u128,
244 pub fs0: u128,
245 pub fs1: u128,
246 pub fa0: u128,
247 pub fa1: u128,
248 pub fa2: u128,
249 pub fa3: u128,
250 pub fa4: u128,
251 pub fa5: u128,
252 pub fa6: u128,
253 pub fa7: u128,
254 pub fs2: u128,
255 pub fs3: u128,
256 pub fs4: u128,
257 pub fs5: u128,
258 pub fs6: u128,
259 pub fs7: u128,
260 pub fs8: u128,
261 pub fs9: u128,
262 pub fs10: u128,
263 pub fs11: u128,
264 pub ft8: u128,
265 pub ft9: u128,
266 pub ft10: u128,
267 pub ft11: u128,
268}
269
270#[repr(C)]
271#[derive(Clone, Copy, Debug)]
272pub struct SystemContextIa32 {
273 pub exception_data: u32,
275 pub fx_save_state: FxSaveStateIA32,
276 pub dr0: u32,
277 pub dr1: u32,
278 pub dr2: u32,
279 pub dr3: u32,
280 pub dr6: u32,
281 pub dr7: u32,
282 pub cr0: u32,
283 pub cr1: u32,
285 pub cr2: u32,
286 pub cr3: u32,
287 pub cr4: u32,
288 pub eflags: u32,
289 pub ldtr: u32,
290 pub tr: u32,
291 pub gdtr: [u32; 2],
292 pub idtr: [u32; 2],
293 pub eip: u32,
294 pub gs: u32,
295 pub fs: u32,
296 pub es: u32,
297 pub ds: u32,
298 pub cs: u32,
299 pub ss: u32,
300 pub edi: u32,
301 pub esi: u32,
302 pub ebp: u32,
303 pub esp: u32,
304 pub ebx: u32,
305 pub edx: u32,
306 pub ecx: u32,
307 pub eax: u32,
308}
309
310#[repr(C)]
312#[derive(Clone, Copy, Debug)]
313pub struct FxSaveStateIA32 {
314 pub fcw: u16,
315 pub fsw: u16,
316 pub ftw: u16,
317 pub opcode: u16,
318 pub eip: u32,
319 pub cs: u16,
320 pub reserved_1: u16,
321 pub data_offset: u32,
322 pub ds: u16,
323 pub reserved_2: [u8; 10],
324 pub st0mm0: [u8; 10],
325 pub reserved_3: [u8; 6],
326 pub st1mm1: [u8; 10],
327 pub reserved_4: [u8; 6],
328 pub st2mm2: [u8; 10],
329 pub reserved_5: [u8; 6],
330 pub st3mm3: [u8; 10],
331 pub reserved_6: [u8; 6],
332 pub st4mm4: [u8; 10],
333 pub reserved_7: [u8; 6],
334 pub st5mm5: [u8; 10],
335 pub reserved_8: [u8; 6],
336 pub st6mm6: [u8; 10],
337 pub reserved_9: [u8; 6],
338 pub st7mm7: [u8; 10],
339 pub reserved_10: [u8; 6],
340 pub xmm0: [u8; 16],
341 pub xmm1: [u8; 16],
342 pub xmm2: [u8; 16],
343 pub xmm3: [u8; 16],
344 pub xmm4: [u8; 16],
345 pub xmm5: [u8; 16],
346 pub xmm6: [u8; 16],
347 pub xmm7: [u8; 16],
348 pub reserved_11: [u8; 14 * 16],
349}
350
351#[repr(C)]
352#[derive(Clone, Copy, Debug)]
353pub struct SystemContextX64 {
354 pub exception_data: u64,
356 pub fx_save_state: FxSaveStateX64,
357 pub dr0: u64,
358 pub dr1: u64,
359 pub dr2: u64,
360 pub dr3: u64,
361 pub dr6: u64,
362 pub dr7: u64,
363 pub cr0: u64,
364 pub cr1: u64,
366 pub cr2: u64,
367 pub cr3: u64,
368 pub cr4: u64,
369 pub cr8: u64,
370 pub rflags: u64,
371 pub ldtr: u64,
372 pub tr: u64,
373 pub gdtr: [u64; 2],
374 pub idtr: [u64; 2],
375 pub rip: u64,
376 pub gs: u64,
377 pub fs: u64,
378 pub es: u64,
379 pub ds: u64,
380 pub cs: u64,
381 pub ss: u64,
382 pub rdi: u64,
383 pub rsi: u64,
384 pub rbp: u64,
385 pub rsp: u64,
386 pub rbx: u64,
387 pub rdx: u64,
388 pub rcx: u64,
389 pub rax: u64,
390 pub r8: u64,
391 pub r9: u64,
392 pub r10: u64,
393 pub r11: u64,
394 pub r12: u64,
395 pub r13: u64,
396 pub r14: u64,
397 pub r15: u64,
398}
399
400#[repr(C)]
402#[derive(Clone, Copy, Debug)]
403pub struct FxSaveStateX64 {
404 pub fcw: u16,
405 pub fsw: u16,
406 pub ftw: u16,
407 pub opcode: u16,
408 pub rip: u64,
409 pub data_offset: u64,
410 pub reserved_1: [u8; 8],
411 pub st0mm0: [u8; 10],
412 pub reserved_2: [u8; 6],
413 pub st1mm1: [u8; 10],
414 pub reserved_3: [u8; 6],
415 pub st2mm2: [u8; 10],
416 pub reserved_4: [u8; 6],
417 pub st3mm3: [u8; 10],
418 pub reserved_5: [u8; 6],
419 pub st4mm4: [u8; 10],
420 pub reserved_6: [u8; 6],
421 pub st5mm5: [u8; 10],
422 pub reserved_7: [u8; 6],
423 pub st6mm6: [u8; 10],
424 pub reserved_8: [u8; 6],
425 pub st7mm7: [u8; 10],
426 pub reserved_9: [u8; 6],
427 pub xmm0: [u8; 16],
428 pub xmm1: [u8; 16],
429 pub xmm2: [u8; 16],
430 pub xmm3: [u8; 16],
431 pub xmm4: [u8; 16],
432 pub xmm5: [u8; 16],
433 pub xmm6: [u8; 16],
434 pub xmm7: [u8; 16],
435 pub reserved_11: [u8; 14 * 16],
436}
437
438#[repr(C)]
439#[derive(Clone, Copy, Debug)]
440pub struct SystemContextIpf {
441 pub reserved: u64,
442 pub r1: u64,
443 pub r2: u64,
444 pub r3: u64,
445 pub r4: u64,
446 pub r5: u64,
447 pub r6: u64,
448 pub r7: u64,
449 pub r8: u64,
450 pub r9: u64,
451 pub r10: u64,
452 pub r11: u64,
453 pub r12: u64,
454 pub r13: u64,
455 pub r14: u64,
456 pub r15: u64,
457 pub r16: u64,
458 pub r17: u64,
459 pub r18: u64,
460 pub r19: u64,
461 pub r20: u64,
462 pub r21: u64,
463 pub r22: u64,
464 pub r23: u64,
465 pub r24: u64,
466 pub r25: u64,
467 pub r26: u64,
468 pub r27: u64,
469 pub r28: u64,
470 pub r29: u64,
471 pub r30: u64,
472 pub r31: u64,
473 pub f2: [u64; 2],
474 pub f3: [u64; 2],
475 pub f4: [u64; 2],
476 pub f5: [u64; 2],
477 pub f6: [u64; 2],
478 pub f7: [u64; 2],
479 pub f8: [u64; 2],
480 pub f9: [u64; 2],
481 pub f10: [u64; 2],
482 pub f11: [u64; 2],
483 pub f12: [u64; 2],
484 pub f13: [u64; 2],
485 pub f14: [u64; 2],
486 pub f15: [u64; 2],
487 pub f16: [u64; 2],
488 pub f17: [u64; 2],
489 pub f18: [u64; 2],
490 pub f19: [u64; 2],
491 pub f20: [u64; 2],
492 pub f21: [u64; 2],
493 pub f22: [u64; 2],
494 pub f23: [u64; 2],
495 pub f24: [u64; 2],
496 pub f25: [u64; 2],
497 pub f26: [u64; 2],
498 pub f27: [u64; 2],
499 pub f28: [u64; 2],
500 pub f29: [u64; 2],
501 pub f30: [u64; 2],
502 pub f31: [u64; 2],
503 pub pr: u64,
504 pub b0: u64,
505 pub b1: u64,
506 pub b2: u64,
507 pub b3: u64,
508 pub b4: u64,
509 pub b5: u64,
510 pub b6: u64,
511 pub b7: u64,
512 pub ar_rsc: u64,
514 pub ar_bsp: u64,
515 pub ar_bspstore: u64,
516 pub ar_rnat: u64,
517 pub ar_fcr: u64,
518 pub ar_eflag: u64,
519 pub ar_csd: u64,
520 pub ar_ssd: u64,
521 pub ar_cflg: u64,
522 pub ar_fsr: u64,
523 pub ar_fir: u64,
524 pub ar_fdr: u64,
525 pub ar_ccv: u64,
526 pub ar_unat: u64,
527 pub ar_fpsr: u64,
528 pub ar_pfs: u64,
529 pub ar_lc: u64,
530 pub ar_ec: u64,
531 pub cr_dcr: u64,
533 pub cr_itm: u64,
534 pub cr_iva: u64,
535 pub cr_pta: u64,
536 pub cr_ipsr: u64,
537 pub cr_isr: u64,
538 pub cr_iip: u64,
539 pub cr_ifa: u64,
540 pub cr_itir: u64,
541 pub cr_iipa: u64,
542 pub cr_ifs: u64,
543 pub cr_iim: u64,
544 pub cr_iha: u64,
545 pub dbr0: u64,
547 pub dbr1: u64,
548 pub dbr2: u64,
549 pub dbr3: u64,
550 pub dbr4: u64,
551 pub dbr5: u64,
552 pub dbr6: u64,
553 pub dbr7: u64,
554 pub ibr0: u64,
555 pub ibr1: u64,
556 pub ibr2: u64,
557 pub ibr3: u64,
558 pub ibr4: u64,
559 pub ibr5: u64,
560 pub ibr6: u64,
561 pub ibr7: u64,
562 pub int_nat: u64, }
565
566#[repr(C)]
567#[derive(Clone, Copy, Debug)]
568pub struct SystemContextArm {
569 pub r0: u32,
570 pub r1: u32,
571 pub r2: u32,
572 pub r3: u32,
573 pub r4: u32,
574 pub r5: u32,
575 pub r6: u32,
576 pub r7: u32,
577 pub r8: u32,
578 pub r9: u32,
579 pub r10: u32,
580 pub r11: u32,
581 pub r12: u32,
582 pub sp: u32,
583 pub lr: u32,
584 pub pc: u32,
585 pub cpsr: u32,
586 pub dfsr: u32,
587 pub dfar: u32,
588 pub ifsr: u32,
589}
590
591#[repr(C)]
592#[derive(Clone, Copy, Debug)]
593pub struct SystemContextAArch64 {
594 pub x0: u64,
596 pub x1: u64,
597 pub x2: u64,
598 pub x3: u64,
599 pub x4: u64,
600 pub x5: u64,
601 pub x6: u64,
602 pub x7: u64,
603 pub x8: u64,
604 pub x9: u64,
605 pub x10: u64,
606 pub x11: u64,
607 pub x12: u64,
608 pub x13: u64,
609 pub x14: u64,
610 pub x15: u64,
611 pub x16: u64,
612 pub x17: u64,
613 pub x18: u64,
614 pub x19: u64,
615 pub x20: u64,
616 pub x21: u64,
617 pub x22: u64,
618 pub x23: u64,
619 pub x24: u64,
620 pub x25: u64,
621 pub x26: u64,
622 pub x27: u64,
623 pub x28: u64,
624 pub fp: u64, pub lr: u64, pub sp: u64, pub v0: [u64; 2],
629 pub v1: [u64; 2],
630 pub v2: [u64; 2],
631 pub v3: [u64; 2],
632 pub v4: [u64; 2],
633 pub v5: [u64; 2],
634 pub v6: [u64; 2],
635 pub v7: [u64; 2],
636 pub v8: [u64; 2],
637 pub v9: [u64; 2],
638 pub v10: [u64; 2],
639 pub v11: [u64; 2],
640 pub v12: [u64; 2],
641 pub v13: [u64; 2],
642 pub v14: [u64; 2],
643 pub v15: [u64; 2],
644 pub v16: [u64; 2],
645 pub v17: [u64; 2],
646 pub v18: [u64; 2],
647 pub v19: [u64; 2],
648 pub v20: [u64; 2],
649 pub v21: [u64; 2],
650 pub v22: [u64; 2],
651 pub v23: [u64; 2],
652 pub v24: [u64; 2],
653 pub v25: [u64; 2],
654 pub v26: [u64; 2],
655 pub v27: [u64; 2],
656 pub v28: [u64; 2],
657 pub v29: [u64; 2],
658 pub v30: [u64; 2],
659 pub v31: [u64; 2],
660 pub elr: u64, pub spsr: u64, pub fpsr: u64, pub esr: u64, pub far: u64, }
666
667pub type ExceptionType = isize;
668
669pub const EXCEPT_EBC_UNDEFINED: ExceptionType = 0;
671pub const EXCEPT_EBC_DIVIDE_ERROR: ExceptionType = 1;
672pub const EXCEPT_EBC_DEBUG: ExceptionType = 2;
673pub const EXCEPT_EBC_BREAKPOINT: ExceptionType = 3;
674pub const EXCEPT_EBC_OVERFLOW: ExceptionType = 4;
675pub const EXCEPT_EBC_INVALID_OPCODE: ExceptionType = 5;
676pub const EXCEPT_EBC_STACK_FAULT: ExceptionType = 6;
677pub const EXCEPT_EBC_ALIGNMENT_CHECK: ExceptionType = 7;
678pub const EXCEPT_EBC_INSTRUCTION_ENCODING: ExceptionType = 8;
679pub const EXCEPT_EBC_BAD_BREAK: ExceptionType = 9;
680pub const EXCEPT_EBC_SINGLE_STEP: ExceptionType = 10;
681
682pub const EXCEPT_IA32_DIVIDE_ERROR: ExceptionType = 0;
684pub const EXCEPT_IA32_DEBUG: ExceptionType = 1;
685pub const EXCEPT_IA32_NMI: ExceptionType = 2;
686pub const EXCEPT_IA32_BREAKPOINT: ExceptionType = 3;
687pub const EXCEPT_IA32_OVERFLOW: ExceptionType = 4;
688pub const EXCEPT_IA32_BOUND: ExceptionType = 5;
689pub const EXCEPT_IA32_INVALID_OPCODE: ExceptionType = 6;
690pub const EXCEPT_IA32_DOUBLE_FAULT: ExceptionType = 8;
691pub const EXCEPT_IA32_INVALID_TSS: ExceptionType = 10;
692pub const EXCEPT_IA32_SEG_NOT_PRESENT: ExceptionType = 11;
693pub const EXCEPT_IA32_STACK_FAULT: ExceptionType = 12;
694pub const EXCEPT_IA32_GP_FAULT: ExceptionType = 13;
695pub const EXCEPT_IA32_PAGE_FAULT: ExceptionType = 14;
696pub const EXCEPT_IA32_FP_ERROR: ExceptionType = 16;
697pub const EXCEPT_IA32_ALIGNMENT_CHECK: ExceptionType = 17;
698pub const EXCEPT_IA32_MACHINE_CHECK: ExceptionType = 18;
699pub const EXCEPT_IA32_SIMD: ExceptionType = 19;
700
701pub const EXCEPT_X64_DIVIDE_ERROR: ExceptionType = 0;
703pub const EXCEPT_X64_DEBUG: ExceptionType = 1;
704pub const EXCEPT_X64_NMI: ExceptionType = 2;
705pub const EXCEPT_X64_BREAKPOINT: ExceptionType = 3;
706pub const EXCEPT_X64_OVERFLOW: ExceptionType = 4;
707pub const EXCEPT_X64_BOUND: ExceptionType = 5;
708pub const EXCEPT_X64_INVALID_OPCODE: ExceptionType = 6;
709pub const EXCEPT_X64_DOUBLE_FAULT: ExceptionType = 8;
710pub const EXCEPT_X64_INVALID_TSS: ExceptionType = 10;
711pub const EXCEPT_X64_SEG_NOT_PRESENT: ExceptionType = 11;
712pub const EXCEPT_X64_STACK_FAULT: ExceptionType = 12;
713pub const EXCEPT_X64_GP_FAULT: ExceptionType = 13;
714pub const EXCEPT_X64_PAGE_FAULT: ExceptionType = 14;
715pub const EXCEPT_X64_FP_ERROR: ExceptionType = 16;
716pub const EXCEPT_X64_ALIGNMENT_CHECK: ExceptionType = 17;
717pub const EXCEPT_X64_MACHINE_CHECK: ExceptionType = 18;
718pub const EXCEPT_X64_SIMD: ExceptionType = 19;
719
720pub const EXCEPT_IPF_VHTP_TRANSLATION: ExceptionType = 0;
722pub const EXCEPT_IPF_INSTRUCTION_TLB: ExceptionType = 1;
723pub const EXCEPT_IPF_DATA_TLB: ExceptionType = 2;
724pub const EXCEPT_IPF_ALT_INSTRUCTION_TLB: ExceptionType = 3;
725pub const EXCEPT_IPF_ALT_DATA_TLB: ExceptionType = 4;
726pub const EXCEPT_IPF_DATA_NESTED_TLB: ExceptionType = 5;
727pub const EXCEPT_IPF_INSTRUCTION_KEY_MISSED: ExceptionType = 6;
728pub const EXCEPT_IPF_DATA_KEY_MISSED: ExceptionType = 7;
729pub const EXCEPT_IPF_DIRTY_BIT: ExceptionType = 8;
730pub const EXCEPT_IPF_INSTRUCTION_ACCESS_BIT: ExceptionType = 9;
731pub const EXCEPT_IPF_DATA_ACCESS_BIT: ExceptionType = 10;
732pub const EXCEPT_IPF_BREAKPOINT: ExceptionType = 11;
733pub const EXCEPT_IPF_EXTERNAL_INTERRUPT: ExceptionType = 12;
734pub const EXCEPT_IPF_PAGE_NOT_PRESENT: ExceptionType = 20;
736pub const EXCEPT_IPF_KEY_PERMISSION: ExceptionType = 21;
737pub const EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS: ExceptionType = 22;
738pub const EXCEPT_IPF_DATA_ACCESS_RIGHTS: ExceptionType = 23;
739pub const EXCEPT_IPF_GENERAL_EXCEPTION: ExceptionType = 24;
740pub const EXCEPT_IPF_DISABLED_FP_REGISTER: ExceptionType = 25;
741pub const EXCEPT_IPF_NAT_CONSUMPTION: ExceptionType = 26;
742pub const EXCEPT_IPF_SPECULATION: ExceptionType = 27;
743pub const EXCEPT_IPF_DEBUG: ExceptionType = 29;
745pub const EXCEPT_IPF_UNALIGNED_REFERENCE: ExceptionType = 30;
746pub const EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE: ExceptionType = 31;
747pub const EXCEPT_IPF_FP_FAULT: ExceptionType = 32;
748pub const EXCEPT_IPF_FP_TRAP: ExceptionType = 33;
749pub const EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP: ExceptionType = 34;
750pub const EXCEPT_IPF_TAKEN_BRANCH: ExceptionType = 35;
751pub const EXCEPT_IPF_SINGLE_STEP: ExceptionType = 36;
752pub const EXCEPT_IPF_IA32_EXCEPTION: ExceptionType = 45;
754pub const EXCEPT_IPF_IA32_INTERCEPT: ExceptionType = 46;
755pub const EXCEPT_IPF_IA32_INTERRUPT: ExceptionType = 47;
756
757pub const EXCEPT_ARM_RESET: ExceptionType = 0;
759pub const EXCEPT_ARM_UNDEFINED_INSTRUCTION: ExceptionType = 1;
760pub const EXCEPT_ARM_SOFTWARE_INTERRUPT: ExceptionType = 2;
761pub const EXCEPT_ARM_PREFETCH_ABORT: ExceptionType = 3;
762pub const EXCEPT_ARM_DATA_ABORT: ExceptionType = 4;
763pub const EXCEPT_ARM_RESERVED: ExceptionType = 5;
764pub const EXCEPT_ARM_IRQ: ExceptionType = 6;
765pub const EXCEPT_ARM_FIQ: ExceptionType = 7;
766pub const MAX_ARM_EXCEPTION: ExceptionType = EXCEPT_ARM_FIQ;
767
768pub const EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS: ExceptionType = 0;
770pub const EXCEPT_AARCH64_IRQ: ExceptionType = 1;
771pub const EXCEPT_AARCH64_FIQ: ExceptionType = 2;
772pub const EXCEPT_AARCH64_SERROR: ExceptionType = 3;
773pub const MAX_AARCH64_EXCEPTION: ExceptionType = EXCEPT_AARCH64_SERROR;
774
775pub const EXCEPT_RISCV_INST_MISALIGNED: ExceptionType = 0;
777pub const EXCEPT_RISCV_INST_ACCESS_FAULT: ExceptionType = 1;
778pub const EXCEPT_RISCV_ILLEGAL_INST: ExceptionType = 2;
779pub const EXCEPT_RISCV_BREAKPOINT: ExceptionType = 3;
780pub const EXCEPT_RISCV_LOAD_ADDRESS_MISALIGNED: ExceptionType = 4;
781pub const EXCEPT_RISCV_LOAD_ACCESS_FAULT: ExceptionType = 5;
782pub const EXCEPT_RISCV_STORE_AMO_ADDRESS_MISALIGNED: ExceptionType = 6;
783pub const EXCEPT_RISCV_STORE_AMO_ACCESS_FAULT: ExceptionType = 7;
784pub const EXCEPT_RISCV_ENV_CALL_FROM_UMODE: ExceptionType = 8;
785pub const EXCEPT_RISCV_ENV_CALL_FROM_SMODE: ExceptionType = 9;
786pub const EXCEPT_RISCV_ENV_CALL_FROM_MMODE: ExceptionType = 11;
787pub const EXCEPT_RISCV_INST_PAGE_FAULT: ExceptionType = 12;
788pub const EXCEPT_RISCV_LOAD_PAGE_FAULT: ExceptionType = 13;
789pub const EXCEPT_RISCV_STORE_AMO_PAGE_FAULT: ExceptionType = 15;
790
791pub const EXCEPT_RISCV_SUPERVISOR_SOFTWARE_INT: ExceptionType = 1;
793pub const EXCEPT_RISCV_MACHINE_SOFTWARE_INT: ExceptionType = 3;
794pub const EXCEPT_RISCV_SUPERVISOR_TIMER_INT: ExceptionType = 5;
795pub const EXCEPT_RISCV_MACHINE_TIMER_INT: ExceptionType = 7;
796pub const EXCEPT_RISCV_SUPERVISOR_EXTERNAL_INT: ExceptionType = 9;
797pub const EXCEPT_RISCV_MACHINE_EXTERNAL_INT: ExceptionType = 11;
798
799pub type GetMaximumProcessorIndex = eficall! {fn(
800 *mut Protocol,
801 *mut usize,
802) -> crate::base::Status};
803
804pub type PeriodicCallback = eficall! {fn(SystemContext)};
805
806pub type RegisterPeriodicCallback = eficall! {fn(
807 *mut Protocol,
808 usize,
809 Option<PeriodicCallback>,
810) -> crate::base::Status};
811
812pub type ExceptionCallback = eficall! {fn(ExceptionType, SystemContext)};
813
814pub type RegisterExceptionCallback = eficall! {fn(
815 *mut Protocol,
816 usize,
817 Option<ExceptionCallback>,
818 ExceptionType,
819) -> crate::base::Status};
820
821pub type InvalidateInstructionCache = eficall! {fn(
822 *mut Protocol,
823 usize,
824 *mut core::ffi::c_void,
825 u64,
826) -> crate::base::Status};
827
828#[repr(C)]
829pub struct Protocol {
830 pub isa: InstructionSetArchitecture,
831 pub get_maximum_processor_index: GetMaximumProcessorIndex,
832 pub register_periodic_callback: RegisterPeriodicCallback,
833 pub register_exception_callback: RegisterExceptionCallback,
834 pub invalidate_instruction_cache: InvalidateInstructionCache,
835}