5 // TODO: Make this sharable with user-land (see uarts)
6 struct Vmcb_control_area
8 Unsigned16 intercept_rd_crX;
9 Unsigned16 intercept_wr_crX;
11 Unsigned16 intercept_rd_drX;
12 Unsigned16 intercept_wr_drX;
14 Unsigned32 intercept_exceptions;
16 Unsigned32 intercept_instruction0;
17 Unsigned32 intercept_instruction1;
19 Unsigned8 _reserved0[44];
21 Unsigned64 iopm_base_pa;
22 Unsigned64 msrpm_base_pa;
23 Unsigned64 tsc_offset;
24 Unsigned64 guest_asid_tlb_ctl;
25 Unsigned64 interrupt_ctl;
26 Unsigned64 interrupt_shadow;
30 Unsigned64 exitintinfo;
33 Unsigned8 _reserved1[16];
37 Unsigned64 lbr_virtualization_enable;
39 Unsigned8 _reserved2[832];
40 } __attribute__((packed));
42 struct Vmcb_state_save_area
75 Unsigned16 gdtr_attrib;
76 Unsigned32 gdtr_limit;
80 Unsigned16 ldtr_attrib;
81 Unsigned32 ldtr_limit;
85 Unsigned16 idtr_attrib;
86 Unsigned32 idtr_limit;
94 Unsigned8 _reserved0[43];
98 Unsigned32 _reserved1;
102 Unsigned8 _reserved2[112];
112 Unsigned8 _reserved3[88];
116 Unsigned8 _reserved4[24];
123 Unsigned64 kernelgsbase;
124 Unsigned64 sysenter_cs;
125 Unsigned64 sysenter_esp;
126 Unsigned64 sysenter_eip;
129 Unsigned8 _reserved5[32];
135 Unsigned64 lastexcpfrom;
136 Unsigned64 last_excpto;
138 Unsigned8 _reserved6[2408];
139 } __attribute__((packed));
143 unsigned np_enabled() const { return control_area.np_enable & 1; }
145 Vmcb_control_area control_area;
146 Vmcb_state_save_area state_save_area;
147 } __attribute__((packed));