X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmx_handler.h;h=632277acbe8edd764b9bbb52438e51db34e9359e;hb=659151a0b655c619f3acbb98a45e9eeb8002a4b3;hp=2845e2154d325c9e2a5ca7b264e78263072b0073;hpb=9e5edc5349bbd8d3e8e4f0dabe78e6543f32708a;p=palacios.git diff --git a/palacios/include/palacios/vmx_handler.h b/palacios/include/palacios/vmx_handler.h index 2845e21..632277a 100644 --- a/palacios/include/palacios/vmx_handler.h +++ b/palacios/include/palacios/vmx_handler.h @@ -29,56 +29,56 @@ /* VMX Intercept Exit Codes */ /******************************************/ typedef enum { - VMEXIT_INFO_EXCEPTION_OR_NMI = 0, - VMEXIT_EXTERNAL_INTR = 1, - VMEXIT_TRIPLE_FAULT = 2, - VMEXIT_INIT_SIGNAL = 3, - VMEXIT_STARTUP_IPI = 4, - VMEXIT_IO_SMI = 5, - VMEXIT_OTHER_SMI = 6, - VMEXIT_INTR_WINDOW = 7, - VMEXIT_NMI_WINDOW = 8, - VMEXIT_TASK_SWITCH = 9, - VMEXIT_CPUID = 10, - VMEXIT_HLT = 12, - VMEXIT_INVD = 13, - VMEXIT_INVLPG = 14, - VMEXIT_RDPMC = 15, - VMEXIT_RDTSC = 16, - VMEXIT_RSM = 17, - VMEXIT_VMCALL = 18, - VMEXIT_VMCLEAR = 19, - VMEXIT_VMLAUNCH = 20, - VMEXIT_VMPTRLD = 21, - VMEXIT_VMPTRST = 22, - VMEXIT_VMREAD = 23, - VMEXIT_VMRESUME = 24, - VMEXIT_VMWRITE = 25, - VMEXIT_VMXOFF = 26, - VMEXIT_VMXON = 27, - VMEXIT_CR_REG_ACCESSES = 28, - VMEXIT_MOV_DR = 29, - VMEXIT_IO_INSTR = 30, - VMEXIT_RDMSR = 31, - VMEXIT_WRMSR = 32, - VMEXIT_ENTRY_FAIL_INVALID_GUEST_STATE = 33, - VMEXIT_ENTRY_FAIL_MSR_LOAD = 34, - VMEXIT_MWAIT = 36, - VMEXIT_MONITOR = 39, - VMEXIT_PAUSE = 40, - VMEXIT_ENTRY_FAILURE_MACHINE_CHECK = 41, - VMEXIT_TPR_BELOW_THRESHOLD = 43, - VMEXIT_APIC = 44, - VMEXIT_GDTR_IDTR = 46, - VMEXIT_LDTR_TR = 47, - VMEXIT_EPT_VIOLATION = 48, - VMEXIT_EPT_CONFIG = 49, - VMEXIT_INVEPT = 50, - VMEXIT_RDTSCP = 51, - VMEXIT_EXPIRED_PREEMPT_TIMER = 52, - VMEXIT_INVVPID = 53, - VMEXIT_WBINVD = 54, - VMEXIT_XSETBV = 55 + VMX_EXIT_INFO_EXCEPTION_OR_NMI = 0, + VMX_EXIT_EXTERNAL_INTR = 1, + VMX_EXIT_TRIPLE_FAULT = 2, + VMX_EXIT_INIT_SIGNAL = 3, + VMX_EXIT_STARTUP_IPI = 4, + VMX_EXIT_IO_SMI = 5, + VMX_EXIT_OTHER_SMI = 6, + VMX_EXIT_INTR_WINDOW = 7, + VMX_EXIT_NMI_WINDOW = 8, + VMX_EXIT_TASK_SWITCH = 9, + VMX_EXIT_CPUID = 10, + VMX_EXIT_HLT = 12, + VMX_EXIT_INVD = 13, + VMX_EXIT_INVLPG = 14, + VMX_EXIT_RDPMC = 15, + VMX_EXIT_RDTSC = 16, + VMX_EXIT_RSM = 17, + VMX_EXIT_VMCALL = 18, + VMX_EXIT_VMCLEAR = 19, + VMX_EXIT_VMLAUNCH = 20, + VMX_EXIT_VMPTRLD = 21, + VMX_EXIT_VMPTRST = 22, + VMX_EXIT_VMREAD = 23, + VMX_EXIT_VMRESUME = 24, + VMX_EXIT_VMWRITE = 25, + VMX_EXIT_VMXOFF = 26, + VMX_EXIT_VMXON = 27, + VMX_EXIT_CR_REG_ACCESSES = 28, + VMX_EXIT_MOV_DR = 29, + VMX_EXIT_IO_INSTR = 30, + VMX_EXIT_RDMSR = 31, + VMX_EXIT_WRMSR = 32, + VMX_EXIT_INVALID_GUEST_STATE = 33, + VMX_EXIT_INVALID_MSR_LOAD = 34, + VMX_EXIT_MWAIT = 36, + VMX_EXIT_MONITOR = 39, + VMX_EXIT_PAUSE = 40, + VMX_EXIT_INVALID_MACHINE_CHECK = 41, + VMX_EXIT_TPR_BELOW_THRESHOLD = 43, + VMX_EXIT_APIC = 44, + VMX_EXIT_GDTR_IDTR = 46, + VMX_EXIT_LDTR_TR = 47, + VMX_EXIT_EPT_VIOLATION = 48, + VMX_EXIT_EPT_CONFIG = 49, + VMX_EXIT_INVEPT = 50, + VMX_EXIT_RDTSCP = 51, + VMX_EXIT_EXPIRED_PREEMPT_TIMER = 52, + VMX_EXIT_INVVPID = 53, + VMX_EXIT_WBINVD = 54, + VMX_EXIT_XSETBV = 55 } vmx_exit_t; /* VMCS Exit QUALIFICATIONs */ @@ -153,7 +153,7 @@ struct VMExitDBGQual { } __attribute__((packed)); -struct VMExitTSQual { + struct VMExitTSQual { uint32_t selector : 16; // selector of destination TSS uint32_t rsvd : 14; // reserved to 0 uint32_t src : 2; // (0: CALL ; 1: IRET ; 2: JMP ; 3: Task gate in IDT) @@ -200,6 +200,20 @@ struct vmx_exit_idt_vec_info { +struct vmx_basic_exit_info { + union { + uint32_t value; + struct { + uint16_t reason; + uint16_t rsvd1 :12; + uint8_t mtf_pending : 1; + uint8_t vmx_root_op : 1; + uint8_t rsvd2 : 1; + uint8_t entry_error : 1; + } __attribute__((packed)); + } __attribute__((packed)); +} __attribute__((packed)); + struct vmx_exit_info { uint32_t instr_len; @@ -212,6 +226,10 @@ struct vmx_exit_info { uint32_t int_err; addr_t guest_linear_addr; + + /* EPT INFO */ + addr_t ept_fault_addr; + };