0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #ifndef _UAPIVMX_H
0026 #define _UAPIVMX_H
0027
0028
0029 #define VMX_EXIT_REASONS_FAILED_VMENTRY 0x80000000
0030 #define VMX_EXIT_REASONS_SGX_ENCLAVE_MODE 0x08000000
0031
0032 #define EXIT_REASON_EXCEPTION_NMI 0
0033 #define EXIT_REASON_EXTERNAL_INTERRUPT 1
0034 #define EXIT_REASON_TRIPLE_FAULT 2
0035 #define EXIT_REASON_INIT_SIGNAL 3
0036 #define EXIT_REASON_SIPI_SIGNAL 4
0037
0038 #define EXIT_REASON_INTERRUPT_WINDOW 7
0039 #define EXIT_REASON_NMI_WINDOW 8
0040 #define EXIT_REASON_TASK_SWITCH 9
0041 #define EXIT_REASON_CPUID 10
0042 #define EXIT_REASON_HLT 12
0043 #define EXIT_REASON_INVD 13
0044 #define EXIT_REASON_INVLPG 14
0045 #define EXIT_REASON_RDPMC 15
0046 #define EXIT_REASON_RDTSC 16
0047 #define EXIT_REASON_VMCALL 18
0048 #define EXIT_REASON_VMCLEAR 19
0049 #define EXIT_REASON_VMLAUNCH 20
0050 #define EXIT_REASON_VMPTRLD 21
0051 #define EXIT_REASON_VMPTRST 22
0052 #define EXIT_REASON_VMREAD 23
0053 #define EXIT_REASON_VMRESUME 24
0054 #define EXIT_REASON_VMWRITE 25
0055 #define EXIT_REASON_VMOFF 26
0056 #define EXIT_REASON_VMON 27
0057 #define EXIT_REASON_CR_ACCESS 28
0058 #define EXIT_REASON_DR_ACCESS 29
0059 #define EXIT_REASON_IO_INSTRUCTION 30
0060 #define EXIT_REASON_MSR_READ 31
0061 #define EXIT_REASON_MSR_WRITE 32
0062 #define EXIT_REASON_INVALID_STATE 33
0063 #define EXIT_REASON_MSR_LOAD_FAIL 34
0064 #define EXIT_REASON_MWAIT_INSTRUCTION 36
0065 #define EXIT_REASON_MONITOR_TRAP_FLAG 37
0066 #define EXIT_REASON_MONITOR_INSTRUCTION 39
0067 #define EXIT_REASON_PAUSE_INSTRUCTION 40
0068 #define EXIT_REASON_MCE_DURING_VMENTRY 41
0069 #define EXIT_REASON_TPR_BELOW_THRESHOLD 43
0070 #define EXIT_REASON_APIC_ACCESS 44
0071 #define EXIT_REASON_EOI_INDUCED 45
0072 #define EXIT_REASON_GDTR_IDTR 46
0073 #define EXIT_REASON_LDTR_TR 47
0074 #define EXIT_REASON_EPT_VIOLATION 48
0075 #define EXIT_REASON_EPT_MISCONFIG 49
0076 #define EXIT_REASON_INVEPT 50
0077 #define EXIT_REASON_RDTSCP 51
0078 #define EXIT_REASON_PREEMPTION_TIMER 52
0079 #define EXIT_REASON_INVVPID 53
0080 #define EXIT_REASON_WBINVD 54
0081 #define EXIT_REASON_XSETBV 55
0082 #define EXIT_REASON_APIC_WRITE 56
0083 #define EXIT_REASON_RDRAND 57
0084 #define EXIT_REASON_INVPCID 58
0085 #define EXIT_REASON_VMFUNC 59
0086 #define EXIT_REASON_ENCLS 60
0087 #define EXIT_REASON_RDSEED 61
0088 #define EXIT_REASON_PML_FULL 62
0089 #define EXIT_REASON_XSAVES 63
0090 #define EXIT_REASON_XRSTORS 64
0091 #define EXIT_REASON_UMWAIT 67
0092 #define EXIT_REASON_TPAUSE 68
0093 #define EXIT_REASON_BUS_LOCK 74
0094 #define EXIT_REASON_NOTIFY 75
0095
0096 #define VMX_EXIT_REASONS \
0097 { EXIT_REASON_EXCEPTION_NMI, "EXCEPTION_NMI" }, \
0098 { EXIT_REASON_EXTERNAL_INTERRUPT, "EXTERNAL_INTERRUPT" }, \
0099 { EXIT_REASON_TRIPLE_FAULT, "TRIPLE_FAULT" }, \
0100 { EXIT_REASON_INIT_SIGNAL, "INIT_SIGNAL" }, \
0101 { EXIT_REASON_SIPI_SIGNAL, "SIPI_SIGNAL" }, \
0102 { EXIT_REASON_INTERRUPT_WINDOW, "INTERRUPT_WINDOW" }, \
0103 { EXIT_REASON_NMI_WINDOW, "NMI_WINDOW" }, \
0104 { EXIT_REASON_TASK_SWITCH, "TASK_SWITCH" }, \
0105 { EXIT_REASON_CPUID, "CPUID" }, \
0106 { EXIT_REASON_HLT, "HLT" }, \
0107 { EXIT_REASON_INVD, "INVD" }, \
0108 { EXIT_REASON_INVLPG, "INVLPG" }, \
0109 { EXIT_REASON_RDPMC, "RDPMC" }, \
0110 { EXIT_REASON_RDTSC, "RDTSC" }, \
0111 { EXIT_REASON_VMCALL, "VMCALL" }, \
0112 { EXIT_REASON_VMCLEAR, "VMCLEAR" }, \
0113 { EXIT_REASON_VMLAUNCH, "VMLAUNCH" }, \
0114 { EXIT_REASON_VMPTRLD, "VMPTRLD" }, \
0115 { EXIT_REASON_VMPTRST, "VMPTRST" }, \
0116 { EXIT_REASON_VMREAD, "VMREAD" }, \
0117 { EXIT_REASON_VMRESUME, "VMRESUME" }, \
0118 { EXIT_REASON_VMWRITE, "VMWRITE" }, \
0119 { EXIT_REASON_VMOFF, "VMOFF" }, \
0120 { EXIT_REASON_VMON, "VMON" }, \
0121 { EXIT_REASON_CR_ACCESS, "CR_ACCESS" }, \
0122 { EXIT_REASON_DR_ACCESS, "DR_ACCESS" }, \
0123 { EXIT_REASON_IO_INSTRUCTION, "IO_INSTRUCTION" }, \
0124 { EXIT_REASON_MSR_READ, "MSR_READ" }, \
0125 { EXIT_REASON_MSR_WRITE, "MSR_WRITE" }, \
0126 { EXIT_REASON_INVALID_STATE, "INVALID_STATE" }, \
0127 { EXIT_REASON_MSR_LOAD_FAIL, "MSR_LOAD_FAIL" }, \
0128 { EXIT_REASON_MWAIT_INSTRUCTION, "MWAIT_INSTRUCTION" }, \
0129 { EXIT_REASON_MONITOR_TRAP_FLAG, "MONITOR_TRAP_FLAG" }, \
0130 { EXIT_REASON_MONITOR_INSTRUCTION, "MONITOR_INSTRUCTION" }, \
0131 { EXIT_REASON_PAUSE_INSTRUCTION, "PAUSE_INSTRUCTION" }, \
0132 { EXIT_REASON_MCE_DURING_VMENTRY, "MCE_DURING_VMENTRY" }, \
0133 { EXIT_REASON_TPR_BELOW_THRESHOLD, "TPR_BELOW_THRESHOLD" }, \
0134 { EXIT_REASON_APIC_ACCESS, "APIC_ACCESS" }, \
0135 { EXIT_REASON_EOI_INDUCED, "EOI_INDUCED" }, \
0136 { EXIT_REASON_GDTR_IDTR, "GDTR_IDTR" }, \
0137 { EXIT_REASON_LDTR_TR, "LDTR_TR" }, \
0138 { EXIT_REASON_EPT_VIOLATION, "EPT_VIOLATION" }, \
0139 { EXIT_REASON_EPT_MISCONFIG, "EPT_MISCONFIG" }, \
0140 { EXIT_REASON_INVEPT, "INVEPT" }, \
0141 { EXIT_REASON_RDTSCP, "RDTSCP" }, \
0142 { EXIT_REASON_PREEMPTION_TIMER, "PREEMPTION_TIMER" }, \
0143 { EXIT_REASON_INVVPID, "INVVPID" }, \
0144 { EXIT_REASON_WBINVD, "WBINVD" }, \
0145 { EXIT_REASON_XSETBV, "XSETBV" }, \
0146 { EXIT_REASON_APIC_WRITE, "APIC_WRITE" }, \
0147 { EXIT_REASON_RDRAND, "RDRAND" }, \
0148 { EXIT_REASON_INVPCID, "INVPCID" }, \
0149 { EXIT_REASON_VMFUNC, "VMFUNC" }, \
0150 { EXIT_REASON_ENCLS, "ENCLS" }, \
0151 { EXIT_REASON_RDSEED, "RDSEED" }, \
0152 { EXIT_REASON_PML_FULL, "PML_FULL" }, \
0153 { EXIT_REASON_XSAVES, "XSAVES" }, \
0154 { EXIT_REASON_XRSTORS, "XRSTORS" }, \
0155 { EXIT_REASON_UMWAIT, "UMWAIT" }, \
0156 { EXIT_REASON_TPAUSE, "TPAUSE" }, \
0157 { EXIT_REASON_BUS_LOCK, "BUS_LOCK" }, \
0158 { EXIT_REASON_NOTIFY, "NOTIFY" }
0159
0160 #define VMX_EXIT_REASON_FLAGS \
0161 { VMX_EXIT_REASONS_FAILED_VMENTRY, "FAILED_VMENTRY" }
0162
0163 #define VMX_ABORT_SAVE_GUEST_MSR_FAIL 1
0164 #define VMX_ABORT_LOAD_HOST_PDPTE_FAIL 2
0165 #define VMX_ABORT_LOAD_HOST_MSR_FAIL 4
0166
0167 #endif