typedef enum {
VMXASSIST_DISABLED,
- VMXASSIST_ENABLED
+ VMXASSIST_OFF,
+ VMXASSIST_ON
} vmxassist_state_t;
typedef enum {
};
+struct vmcs_msr_save_area {
+ union {
+ struct vmcs_msr_entry guest_msrs[4];
+ struct {
+ struct vmcs_msr_entry guest_star;
+ struct vmcs_msr_entry guest_lstar;
+ struct vmcs_msr_entry guest_fmask;
+ struct vmcs_msr_entry guest_kern_gs;
+ } __attribute__((packed));
+ } __attribute__((packed));
+
+ union {
+ struct vmcs_msr_entry host_msrs[4];
+ struct {
+ struct vmcs_msr_entry host_star;
+ struct vmcs_msr_entry host_lstar;
+ struct vmcs_msr_entry host_fmask;
+ struct vmcs_msr_entry host_kern_gs;
+ } __attribute__((packed));
+ } __attribute__((packed));
+
+} __attribute__((packed));
+
struct vmx_data {
vmx_state_t state;
struct vmx_exception_bitmap excp_bmap;
- void * msr_area;
+ addr_t msr_area_paddr;
+ struct vmcs_msr_save_area * msr_area;
};
int v3_is_vmx_capable();
void v3_init_vmx_cpu(int cpu_id);
void v3_deinit_vmx_cpu(int cpu_id);
+int v3_init_vmx_vmcs(struct guest_info * info, v3_vm_class_t vm_class);
+int v3_deinit_vmx_vmcs(struct guest_info * core);
+
int v3_start_vmx_guest(struct guest_info* info);
+int v3_reset_vmx_vm_core(struct guest_info * core, addr_t rip);
+void v3_flush_vmx_vm_core(struct guest_info * core);
+
int v3_vmx_enter(struct guest_info * info);
-int v3_init_vmx_vmcs(struct guest_info * info, v3_vm_class_t vm_class);
-int v3_deinit_vmx_vmcs(struct guest_info * core);
+int v3_vmx_load_core(struct guest_info * core, void * ctx);
+int v3_vmx_save_core(struct guest_info * core, void * ctx);
+
+
+
+
#endif // ! __V3VEE__