X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmx.h;h=4384b13b8807b1341d8ed32bdf692c9dbabf66c9;hb=88648ddca6003a438826e7d86e28a2ba7b5bfcac;hp=7a0a0395064195f9e93fb64e2104a9d1a71b75c3;hpb=15f1869089d6d3c4dc745ac2673e3cc0dd315962;p=palacios.git diff --git a/palacios/include/palacios/vmx.h b/palacios/include/palacios/vmx.h index 7a0a039..4384b13 100644 --- a/palacios/include/palacios/vmx.h +++ b/palacios/include/palacios/vmx.h @@ -7,12 +7,10 @@ * and the University of New Mexico. You can find out more at * http://www.v3vee.org * - * Copyright (c) 2008, Peter Dinda - * Copyright (c) 2008, Jack Lange - * Copyright (c) 2008, The V3VEE Project + * Copyright (c) 2011, Jack Lange + * Copyright (c) 2011, The V3VEE Project * All rights reserved. * - * Author: Peter Dinda * Author: Jack Lange * * This is free software. You are permitted to use, @@ -37,9 +35,6 @@ #define VMM_ERROR 3 - - - struct vmx_pin_ctrls { union { uint32_t value; @@ -101,7 +96,8 @@ struct vmx_sec_proc_ctrls { uint_t enable_rdtscp : 1; uint_t virt_x2apic : 1; uint_t enable_vpid : 1; - uint_t unrstrct_guest : 1; + uint_t wbinvd_exit : 1; + uint_t unrstrct_guest : 1; /* un restricted guest (CAN RUN IN REAL MODE) */ uint_t rsvd1 : 2; uint_t pause_loop_exit : 1; uint_t rsvd2 : 21; @@ -183,7 +179,7 @@ struct tss_descriptor { uint_t zero4 : 5; uint_t rsvd2 : 19; #endif -}__attribute__((packed)); +} __attribute__((packed)); struct vmcs_host_state { struct v3_segment gdtr; @@ -192,7 +188,28 @@ struct vmcs_host_state { }; +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 { @@ -200,9 +217,9 @@ struct vmx_data { vmxassist_state_t assist_state; struct vmcs_host_state host_state; - addr_t vmcs_ptr_phys; - uint8_t ia32e_avail; + + addr_t vmcs_ptr_phys; v3_reg_t guest_cr4; /// corresponds to the CR4 Read shadow @@ -213,6 +230,11 @@ struct vmx_data { struct vmx_sec_proc_ctrls sec_proc_ctrls; struct vmx_exit_ctrls exit_ctrls; struct vmx_entry_ctrls entry_ctrls; + + struct vmx_exception_bitmap excp_bmap; + + addr_t msr_area_paddr; + struct vmcs_msr_save_area * msr_area; }; int v3_is_vmx_capable(); @@ -220,11 +242,21 @@ 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__