1use xen_sys::{vm_event_emul_insn_data, vm_event_emul_read_data, vm_event_regs_x86};
2
3use super::VmEventRegs;
4
5const SIZE_OF_EMUL_DATA: usize = size_of::<vm_event_regs_x86>() - size_of::<u32>();
6
7#[derive(Debug)]
8pub struct VmEventEmulReadData {
9 pub size: u32,
10
11 pub data: [u8; SIZE_OF_EMUL_DATA],
13}
14
15impl Default for VmEventEmulReadData {
16 fn default() -> Self {
17 Self {
18 size: 0,
19 data: [0; SIZE_OF_EMUL_DATA],
20 }
21 }
22}
23
24impl From<vm_event_emul_read_data> for VmEventEmulReadData {
25 fn from(value: vm_event_emul_read_data) -> Self {
26 Self {
27 size: value.size,
28 data: value.data,
29 }
30 }
31}
32
33impl From<VmEventEmulReadData> for vm_event_emul_read_data {
34 fn from(value: VmEventEmulReadData) -> Self {
35 Self {
36 size: value.size,
37 data: value.data,
38 }
39 }
40}
41
42#[derive(Debug, Default)]
43pub struct VmEventEmulInsnData {
44 pub data: [u8; 16], }
46
47impl From<vm_event_emul_insn_data> for VmEventEmulInsnData {
48 fn from(value: vm_event_emul_insn_data) -> Self {
49 Self { data: value.data }
50 }
51}
52
53impl From<VmEventEmulInsnData> for vm_event_emul_insn_data {
54 fn from(value: VmEventEmulInsnData) -> Self {
55 Self { data: value.data }
56 }
57}
58
59#[derive(Debug)]
60pub enum VmEventData {
61 Registers(VmEventRegs),
62 EmulReadData(VmEventEmulReadData),
63 EmulInstructionData(VmEventEmulInsnData),
64}