1221828Sgrehan/*- 2221828Sgrehan * Copyright (c) 2011 NetApp, Inc. 3221828Sgrehan * All rights reserved. 4221828Sgrehan * 5221828Sgrehan * Redistribution and use in source and binary forms, with or without 6221828Sgrehan * modification, are permitted provided that the following conditions 7221828Sgrehan * are met: 8221828Sgrehan * 1. Redistributions of source code must retain the above copyright 9221828Sgrehan * notice, this list of conditions and the following disclaimer. 10221828Sgrehan * 2. Redistributions in binary form must reproduce the above copyright 11221828Sgrehan * notice, this list of conditions and the following disclaimer in the 12221828Sgrehan * documentation and/or other materials provided with the distribution. 13221828Sgrehan * 14221828Sgrehan * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND 15221828Sgrehan * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16221828Sgrehan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17221828Sgrehan * ARE DISCLAIMED. IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE 18221828Sgrehan * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19221828Sgrehan * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20221828Sgrehan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21221828Sgrehan * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22221828Sgrehan * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23221828Sgrehan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24221828Sgrehan * SUCH DAMAGE. 25221828Sgrehan * 26221828Sgrehan * $FreeBSD$ 27221828Sgrehan */ 28221828Sgrehan 29221828Sgrehan#ifndef _VMCS_H_ 30221828Sgrehan#define _VMCS_H_ 31221828Sgrehan 32221828Sgrehan#ifdef _KERNEL 33221828Sgrehanstruct vmcs { 34221828Sgrehan uint32_t identifier; 35221828Sgrehan uint32_t abort_code; 36221828Sgrehan char _impl_specific[PAGE_SIZE - sizeof(uint32_t) * 2]; 37221828Sgrehan}; 38221828SgrehanCTASSERT(sizeof(struct vmcs) == PAGE_SIZE); 39221828Sgrehan 40221828Sgrehan/* MSR save region is composed of an array of 'struct msr_entry' */ 41221828Sgrehanstruct msr_entry { 42221828Sgrehan uint32_t index; 43221828Sgrehan uint32_t reserved; 44221828Sgrehan uint64_t val; 45221828Sgrehan 46221828Sgrehan}; 47221828Sgrehan 48221828Sgrehanint vmcs_set_msr_save(struct vmcs *vmcs, u_long g_area, u_int g_count); 49221828Sgrehanint vmcs_set_defaults(struct vmcs *vmcs, u_long host_rip, u_long host_rsp, 50256072Sneel uint64_t eptp, 51221828Sgrehan uint32_t pinbased_ctls, uint32_t procbased_ctls, 52221828Sgrehan uint32_t procbased_ctls2, uint32_t exit_ctls, 53221828Sgrehan uint32_t entry_ctls, u_long msr_bitmap, 54221828Sgrehan uint16_t vpid); 55249879Sgrehanint vmcs_getreg(struct vmcs *vmcs, int running, int ident, uint64_t *rv); 56249879Sgrehanint vmcs_setreg(struct vmcs *vmcs, int running, int ident, uint64_t val); 57221828Sgrehanint vmcs_getdesc(struct vmcs *vmcs, int ident, 58221828Sgrehan struct seg_desc *desc); 59221828Sgrehanint vmcs_setdesc(struct vmcs *vmcs, int ident, 60221828Sgrehan struct seg_desc *desc); 61221828Sgrehanuint64_t vmcs_read(uint32_t encoding); 62221828Sgrehan 63221828Sgrehan#define vmexit_instruction_length() vmcs_read(VMCS_EXIT_INSTRUCTION_LENGTH) 64221828Sgrehan#define vmcs_guest_rip() vmcs_read(VMCS_GUEST_RIP) 65221828Sgrehan#define vmcs_instruction_error() vmcs_read(VMCS_INSTRUCTION_ERROR) 66221828Sgrehan#define vmcs_exit_reason() (vmcs_read(VMCS_EXIT_REASON) & 0xffff) 67221828Sgrehan#define vmcs_exit_qualification() vmcs_read(VMCS_EXIT_QUALIFICATION) 68234761Sgrehan#define vmcs_guest_cr3() vmcs_read(VMCS_GUEST_CR3) 69240941Sneel#define vmcs_gpa() vmcs_read(VMCS_GUEST_PHYSICAL_ADDRESS) 70243640Sneel#define vmcs_gla() vmcs_read(VMCS_GUEST_LINEAR_ADDRESS) 71256072Sneel#define vmcs_idt_vectoring_info() vmcs_read(VMCS_IDT_VECTORING_INFO) 72256072Sneel#define vmcs_idt_vectoring_err() vmcs_read(VMCS_IDT_VECTORING_ERROR) 73221828Sgrehan 74221828Sgrehan#endif /* _KERNEL */ 75221828Sgrehan 76222605Sjhb#define VMCS_INITIAL 0xffffffffffffffff 77222605Sjhb 78221828Sgrehan#define VMCS_IDENT(encoding) ((encoding) | 0x80000000) 79221828Sgrehan/* 80221828Sgrehan * VMCS field encodings from Appendix H, Intel Architecture Manual Vol3B. 81221828Sgrehan */ 82221828Sgrehan#define VMCS_INVALID_ENCODING 0xffffffff 83221828Sgrehan 84221828Sgrehan/* 16-bit control fields */ 85221828Sgrehan#define VMCS_VPID 0x00000000 86221828Sgrehan 87221828Sgrehan/* 16-bit guest-state fields */ 88221828Sgrehan#define VMCS_GUEST_ES_SELECTOR 0x00000800 89221828Sgrehan#define VMCS_GUEST_CS_SELECTOR 0x00000802 90221828Sgrehan#define VMCS_GUEST_SS_SELECTOR 0x00000804 91221828Sgrehan#define VMCS_GUEST_DS_SELECTOR 0x00000806 92221828Sgrehan#define VMCS_GUEST_FS_SELECTOR 0x00000808 93221828Sgrehan#define VMCS_GUEST_GS_SELECTOR 0x0000080A 94221828Sgrehan#define VMCS_GUEST_LDTR_SELECTOR 0x0000080C 95221828Sgrehan#define VMCS_GUEST_TR_SELECTOR 0x0000080E 96221828Sgrehan 97221828Sgrehan/* 16-bit host-state fields */ 98221828Sgrehan#define VMCS_HOST_ES_SELECTOR 0x00000C00 99221828Sgrehan#define VMCS_HOST_CS_SELECTOR 0x00000C02 100221828Sgrehan#define VMCS_HOST_SS_SELECTOR 0x00000C04 101221828Sgrehan#define VMCS_HOST_DS_SELECTOR 0x00000C06 102221828Sgrehan#define VMCS_HOST_FS_SELECTOR 0x00000C08 103221828Sgrehan#define VMCS_HOST_GS_SELECTOR 0x00000C0A 104221828Sgrehan#define VMCS_HOST_TR_SELECTOR 0x00000C0C 105221828Sgrehan 106221828Sgrehan/* 64-bit control fields */ 107221828Sgrehan#define VMCS_IO_BITMAP_A 0x00002000 108221828Sgrehan#define VMCS_IO_BITMAP_B 0x00002002 109221828Sgrehan#define VMCS_MSR_BITMAP 0x00002004 110221828Sgrehan#define VMCS_EXIT_MSR_STORE 0x00002006 111221828Sgrehan#define VMCS_EXIT_MSR_LOAD 0x00002008 112221828Sgrehan#define VMCS_ENTRY_MSR_LOAD 0x0000200A 113221828Sgrehan#define VMCS_EXECUTIVE_VMCS 0x0000200C 114221828Sgrehan#define VMCS_TSC_OFFSET 0x00002010 115221828Sgrehan#define VMCS_VIRTUAL_APIC 0x00002012 116221828Sgrehan#define VMCS_APIC_ACCESS 0x00002014 117221828Sgrehan#define VMCS_EPTP 0x0000201A 118221828Sgrehan 119221828Sgrehan/* 64-bit read-only fields */ 120221828Sgrehan#define VMCS_GUEST_PHYSICAL_ADDRESS 0x00002400 121221828Sgrehan 122221828Sgrehan/* 64-bit guest-state fields */ 123221828Sgrehan#define VMCS_LINK_POINTER 0x00002800 124221828Sgrehan#define VMCS_GUEST_IA32_DEBUGCTL 0x00002802 125221828Sgrehan#define VMCS_GUEST_IA32_PAT 0x00002804 126221828Sgrehan#define VMCS_GUEST_IA32_EFER 0x00002806 127221828Sgrehan#define VMCS_GUEST_IA32_PERF_GLOBAL_CTRL 0x00002808 128221828Sgrehan#define VMCS_GUEST_PDPTE0 0x0000280A 129221828Sgrehan#define VMCS_GUEST_PDPTE1 0x0000280C 130221828Sgrehan#define VMCS_GUEST_PDPTE2 0x0000280E 131221828Sgrehan#define VMCS_GUEST_PDPTE3 0x00002810 132221828Sgrehan 133221828Sgrehan/* 64-bit host-state fields */ 134221828Sgrehan#define VMCS_HOST_IA32_PAT 0x00002C00 135221828Sgrehan#define VMCS_HOST_IA32_EFER 0x00002C02 136221828Sgrehan#define VMCS_HOST_IA32_PERF_GLOBAL_CTRL 0x00002C04 137221828Sgrehan 138221828Sgrehan/* 32-bit control fields */ 139221828Sgrehan#define VMCS_PIN_BASED_CTLS 0x00004000 140221828Sgrehan#define VMCS_PRI_PROC_BASED_CTLS 0x00004002 141221828Sgrehan#define VMCS_EXCEPTION_BITMAP 0x00004004 142221828Sgrehan#define VMCS_PF_ERROR_MASK 0x00004006 143221828Sgrehan#define VMCS_PF_ERROR_MATCH 0x00004008 144221828Sgrehan#define VMCS_CR3_TARGET_COUNT 0x0000400A 145221828Sgrehan#define VMCS_EXIT_CTLS 0x0000400C 146221828Sgrehan#define VMCS_EXIT_MSR_STORE_COUNT 0x0000400E 147221828Sgrehan#define VMCS_EXIT_MSR_LOAD_COUNT 0x00004010 148221828Sgrehan#define VMCS_ENTRY_CTLS 0x00004012 149221828Sgrehan#define VMCS_ENTRY_MSR_LOAD_COUNT 0x00004014 150221828Sgrehan#define VMCS_ENTRY_INTR_INFO 0x00004016 151221828Sgrehan#define VMCS_ENTRY_EXCEPTION_ERROR 0x00004018 152221828Sgrehan#define VMCS_ENTRY_INST_LENGTH 0x0000401A 153221828Sgrehan#define VMCS_TPR_THRESHOLD 0x0000401C 154221828Sgrehan#define VMCS_SEC_PROC_BASED_CTLS 0x0000401E 155221828Sgrehan#define VMCS_PLE_GAP 0x00004020 156221828Sgrehan#define VMCS_PLE_WINDOW 0x00004022 157221828Sgrehan 158221828Sgrehan/* 32-bit read-only data fields */ 159221828Sgrehan#define VMCS_INSTRUCTION_ERROR 0x00004400 160221828Sgrehan#define VMCS_EXIT_REASON 0x00004402 161221828Sgrehan#define VMCS_EXIT_INTERRUPTION_INFO 0x00004404 162221828Sgrehan#define VMCS_EXIT_INTERRUPTION_ERROR 0x00004406 163221828Sgrehan#define VMCS_IDT_VECTORING_INFO 0x00004408 164221828Sgrehan#define VMCS_IDT_VECTORING_ERROR 0x0000440A 165221828Sgrehan#define VMCS_EXIT_INSTRUCTION_LENGTH 0x0000440C 166221828Sgrehan#define VMCS_EXIT_INSTRUCTION_INFO 0x0000440E 167221828Sgrehan 168221828Sgrehan/* 32-bit guest-state fields */ 169221828Sgrehan#define VMCS_GUEST_ES_LIMIT 0x00004800 170221828Sgrehan#define VMCS_GUEST_CS_LIMIT 0x00004802 171221828Sgrehan#define VMCS_GUEST_SS_LIMIT 0x00004804 172221828Sgrehan#define VMCS_GUEST_DS_LIMIT 0x00004806 173221828Sgrehan#define VMCS_GUEST_FS_LIMIT 0x00004808 174221828Sgrehan#define VMCS_GUEST_GS_LIMIT 0x0000480A 175221828Sgrehan#define VMCS_GUEST_LDTR_LIMIT 0x0000480C 176221828Sgrehan#define VMCS_GUEST_TR_LIMIT 0x0000480E 177221828Sgrehan#define VMCS_GUEST_GDTR_LIMIT 0x00004810 178221828Sgrehan#define VMCS_GUEST_IDTR_LIMIT 0x00004812 179221828Sgrehan#define VMCS_GUEST_ES_ACCESS_RIGHTS 0x00004814 180221828Sgrehan#define VMCS_GUEST_CS_ACCESS_RIGHTS 0x00004816 181221828Sgrehan#define VMCS_GUEST_SS_ACCESS_RIGHTS 0x00004818 182221828Sgrehan#define VMCS_GUEST_DS_ACCESS_RIGHTS 0x0000481A 183221828Sgrehan#define VMCS_GUEST_FS_ACCESS_RIGHTS 0x0000481C 184221828Sgrehan#define VMCS_GUEST_GS_ACCESS_RIGHTS 0x0000481E 185221828Sgrehan#define VMCS_GUEST_LDTR_ACCESS_RIGHTS 0x00004820 186221828Sgrehan#define VMCS_GUEST_TR_ACCESS_RIGHTS 0x00004822 187221828Sgrehan#define VMCS_GUEST_INTERRUPTIBILITY 0x00004824 188221828Sgrehan#define VMCS_GUEST_ACTIVITY 0x00004826 189221828Sgrehan#define VMCS_GUEST_SMBASE 0x00004828 190221828Sgrehan#define VMCS_GUEST_IA32_SYSENTER_CS 0x0000482A 191221828Sgrehan#define VMCS_PREEMPTION_TIMER_VALUE 0x0000482E 192221828Sgrehan 193221828Sgrehan/* 32-bit host state fields */ 194221828Sgrehan#define VMCS_HOST_IA32_SYSENTER_CS 0x00004C00 195221828Sgrehan 196221828Sgrehan/* Natural Width control fields */ 197221828Sgrehan#define VMCS_CR0_MASK 0x00006000 198221828Sgrehan#define VMCS_CR4_MASK 0x00006002 199221828Sgrehan#define VMCS_CR0_SHADOW 0x00006004 200221828Sgrehan#define VMCS_CR4_SHADOW 0x00006006 201221828Sgrehan#define VMCS_CR3_TARGET0 0x00006008 202221828Sgrehan#define VMCS_CR3_TARGET1 0x0000600A 203221828Sgrehan#define VMCS_CR3_TARGET2 0x0000600C 204221828Sgrehan#define VMCS_CR3_TARGET3 0x0000600E 205221828Sgrehan 206221828Sgrehan/* Natural Width read-only fields */ 207221828Sgrehan#define VMCS_EXIT_QUALIFICATION 0x00006400 208221828Sgrehan#define VMCS_IO_RCX 0x00006402 209221828Sgrehan#define VMCS_IO_RSI 0x00006404 210221828Sgrehan#define VMCS_IO_RDI 0x00006406 211221828Sgrehan#define VMCS_IO_RIP 0x00006408 212221828Sgrehan#define VMCS_GUEST_LINEAR_ADDRESS 0x0000640A 213221828Sgrehan 214221828Sgrehan/* Natural Width guest-state fields */ 215221828Sgrehan#define VMCS_GUEST_CR0 0x00006800 216221828Sgrehan#define VMCS_GUEST_CR3 0x00006802 217221828Sgrehan#define VMCS_GUEST_CR4 0x00006804 218221828Sgrehan#define VMCS_GUEST_ES_BASE 0x00006806 219221828Sgrehan#define VMCS_GUEST_CS_BASE 0x00006808 220221828Sgrehan#define VMCS_GUEST_SS_BASE 0x0000680A 221221828Sgrehan#define VMCS_GUEST_DS_BASE 0x0000680C 222221828Sgrehan#define VMCS_GUEST_FS_BASE 0x0000680E 223221828Sgrehan#define VMCS_GUEST_GS_BASE 0x00006810 224221828Sgrehan#define VMCS_GUEST_LDTR_BASE 0x00006812 225221828Sgrehan#define VMCS_GUEST_TR_BASE 0x00006814 226221828Sgrehan#define VMCS_GUEST_GDTR_BASE 0x00006816 227221828Sgrehan#define VMCS_GUEST_IDTR_BASE 0x00006818 228221828Sgrehan#define VMCS_GUEST_DR7 0x0000681A 229221828Sgrehan#define VMCS_GUEST_RSP 0x0000681C 230221828Sgrehan#define VMCS_GUEST_RIP 0x0000681E 231221828Sgrehan#define VMCS_GUEST_RFLAGS 0x00006820 232221828Sgrehan#define VMCS_GUEST_PENDING_DBG_EXCEPTIONS 0x00006822 233221828Sgrehan#define VMCS_GUEST_IA32_SYSENTER_ESP 0x00006824 234221828Sgrehan#define VMCS_GUEST_IA32_SYSENTER_EIP 0x00006826 235221828Sgrehan 236221828Sgrehan/* Natural Width host-state fields */ 237221828Sgrehan#define VMCS_HOST_CR0 0x00006C00 238221828Sgrehan#define VMCS_HOST_CR3 0x00006C02 239221828Sgrehan#define VMCS_HOST_CR4 0x00006C04 240221828Sgrehan#define VMCS_HOST_FS_BASE 0x00006C06 241221828Sgrehan#define VMCS_HOST_GS_BASE 0x00006C08 242221828Sgrehan#define VMCS_HOST_TR_BASE 0x00006C0A 243221828Sgrehan#define VMCS_HOST_GDTR_BASE 0x00006C0C 244221828Sgrehan#define VMCS_HOST_IDTR_BASE 0x00006C0E 245221828Sgrehan#define VMCS_HOST_IA32_SYSENTER_ESP 0x00006C10 246221828Sgrehan#define VMCS_HOST_IA32_SYSENTER_EIP 0x00006C12 247221828Sgrehan#define VMCS_HOST_RSP 0x00006C14 248221828Sgrehan#define VMCS_HOST_RIP 0x00006c16 249221828Sgrehan 250221828Sgrehan/* 251221828Sgrehan * VM instruction error numbers 252221828Sgrehan */ 253221828Sgrehan#define VMRESUME_WITH_NON_LAUNCHED_VMCS 5 254221828Sgrehan 255221828Sgrehan/* 256221828Sgrehan * VMCS exit reasons 257221828Sgrehan */ 258221828Sgrehan#define EXIT_REASON_EXCEPTION 0 259221828Sgrehan#define EXIT_REASON_EXT_INTR 1 260221828Sgrehan#define EXIT_REASON_TRIPLE_FAULT 2 261221828Sgrehan#define EXIT_REASON_INIT 3 262221828Sgrehan#define EXIT_REASON_SIPI 4 263221828Sgrehan#define EXIT_REASON_IO_SMI 5 264221828Sgrehan#define EXIT_REASON_SMI 6 265221828Sgrehan#define EXIT_REASON_INTR_WINDOW 7 266221828Sgrehan#define EXIT_REASON_NMI_WINDOW 8 267221828Sgrehan#define EXIT_REASON_TASK_SWITCH 9 268221828Sgrehan#define EXIT_REASON_CPUID 10 269221828Sgrehan#define EXIT_REASON_GETSEC 11 270221828Sgrehan#define EXIT_REASON_HLT 12 271221828Sgrehan#define EXIT_REASON_INVD 13 272221828Sgrehan#define EXIT_REASON_INVLPG 14 273221828Sgrehan#define EXIT_REASON_RDPMC 15 274221828Sgrehan#define EXIT_REASON_RDTSC 16 275221828Sgrehan#define EXIT_REASON_RSM 17 276221828Sgrehan#define EXIT_REASON_VMCALL 18 277221828Sgrehan#define EXIT_REASON_VMCLEAR 19 278221828Sgrehan#define EXIT_REASON_VMLAUNCH 20 279221828Sgrehan#define EXIT_REASON_VMPTRLD 21 280221828Sgrehan#define EXIT_REASON_VMPTRST 22 281221828Sgrehan#define EXIT_REASON_VMREAD 23 282221828Sgrehan#define EXIT_REASON_VMRESUME 24 283221828Sgrehan#define EXIT_REASON_VMWRITE 25 284221828Sgrehan#define EXIT_REASON_VMXOFF 26 285221828Sgrehan#define EXIT_REASON_VMXON 27 286221828Sgrehan#define EXIT_REASON_CR_ACCESS 28 287221828Sgrehan#define EXIT_REASON_DR_ACCESS 29 288221828Sgrehan#define EXIT_REASON_INOUT 30 289221828Sgrehan#define EXIT_REASON_RDMSR 31 290221828Sgrehan#define EXIT_REASON_WRMSR 32 291221828Sgrehan#define EXIT_REASON_INVAL_VMCS 33 292221828Sgrehan#define EXIT_REASON_INVAL_MSR 34 293221828Sgrehan#define EXIT_REASON_MWAIT 36 294221828Sgrehan#define EXIT_REASON_MTF 37 295221828Sgrehan#define EXIT_REASON_MONITOR 39 296221828Sgrehan#define EXIT_REASON_PAUSE 40 297221828Sgrehan#define EXIT_REASON_MCE 41 298221828Sgrehan#define EXIT_REASON_TPR 43 299221828Sgrehan#define EXIT_REASON_APIC 44 300221828Sgrehan#define EXIT_REASON_GDTR_IDTR 46 301221828Sgrehan#define EXIT_REASON_LDTR_TR 47 302221828Sgrehan#define EXIT_REASON_EPT_FAULT 48 303221828Sgrehan#define EXIT_REASON_EPT_MISCONFIG 49 304221828Sgrehan#define EXIT_REASON_INVEPT 50 305221828Sgrehan#define EXIT_REASON_RDTSCP 51 306221828Sgrehan#define EXIT_REASON_VMX_PREEMPT 52 307221828Sgrehan#define EXIT_REASON_INVVPID 53 308221828Sgrehan#define EXIT_REASON_WBINVD 54 309221828Sgrehan#define EXIT_REASON_XSETBV 55 310221828Sgrehan 311221828Sgrehan/* 312221828Sgrehan * VMCS interrupt information fields 313221828Sgrehan */ 314222111Sneel#define VMCS_INTERRUPTION_INFO_VALID (1U << 31) 315221828Sgrehan#define VMCS_INTERRUPTION_INFO_HW_INTR (0 << 8) 316221828Sgrehan#define VMCS_INTERRUPTION_INFO_NMI (2 << 8) 317221828Sgrehan 318221828Sgrehan/* 319256072Sneel * VMCS IDT-Vectoring information fields 320256072Sneel */ 321256072Sneel#define VMCS_IDT_VEC_VALID (1 << 31) 322256072Sneel#define VMCS_IDT_VEC_ERRCODE_VALID (1 << 11) 323256072Sneel 324256072Sneel/* 325221828Sgrehan * VMCS Guest interruptibility field 326221828Sgrehan */ 327221828Sgrehan#define VMCS_INTERRUPTIBILITY_STI_BLOCKING (1 << 0) 328221828Sgrehan#define VMCS_INTERRUPTIBILITY_MOVSS_BLOCKING (1 << 1) 329221828Sgrehan#define VMCS_INTERRUPTIBILITY_SMI_BLOCKING (1 << 2) 330221828Sgrehan#define VMCS_INTERRUPTIBILITY_NMI_BLOCKING (1 << 3) 331221828Sgrehan 332221828Sgrehan/* 333221828Sgrehan * Exit qualification for EXIT_REASON_INVAL_VMCS 334221828Sgrehan */ 335221828Sgrehan#define EXIT_QUAL_NMI_WHILE_STI_BLOCKING 3 336221828Sgrehan 337240941Sneel/* 338240941Sneel * Exit qualification for EPT violation 339240941Sneel */ 340240941Sneel#define EPT_VIOLATION_DATA_READ (1UL << 0) 341240941Sneel#define EPT_VIOLATION_DATA_WRITE (1UL << 1) 342240941Sneel#define EPT_VIOLATION_INST_FETCH (1UL << 2) 343256072Sneel#define EPT_VIOLATION_GPA_READABLE (1UL << 3) 344256072Sneel#define EPT_VIOLATION_GPA_WRITEABLE (1UL << 4) 345256072Sneel#define EPT_VIOLATION_GPA_EXECUTABLE (1UL << 5) 346240941Sneel#define EPT_VIOLATION_GLA_VALID (1UL << 7) 347240941Sneel#define EPT_VIOLATION_XLAT_VALID (1UL << 8) 348240941Sneel 349221828Sgrehan#endif 350