99 lines
3.3 KiB
C
99 lines
3.3 KiB
C
/**
|
|
* \file
|
|
* \brief Contains definitions of VMX controls along with the controls
|
|
* that are desired to be used for each VMCS.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 2014, University of Washington.
|
|
* All rights reserved.
|
|
*
|
|
* This file is distributed under the terms in the attached LICENSE file.
|
|
* If you do not find this file, copies can be found by writing to:
|
|
* ETH Zurich D-INFK, CAB F.78, Universitaetstrasse 6, CH-8092 Zurich.
|
|
* Attn: Systems Group.
|
|
*/
|
|
|
|
#ifndef VMX_CONTROLS_H
|
|
#define VMX_CONTROLS_H
|
|
|
|
typedef uint32_t vmx_controls;
|
|
|
|
enum vmx_ctls_t {
|
|
VMX_CTLS_PIN_BASED = 0,
|
|
VMX_CTLS_PRIMARY_PROCESSOR = 1,
|
|
VMX_CTLS_SECONDARY_PROCESSOR = 2,
|
|
VMX_CTLS_EXIT = 3,
|
|
VMX_CTLS_ENTRY = 4
|
|
};
|
|
|
|
// Pin-based VM-execution controls
|
|
#define PIN_CTLS_EXT_INTR (1 << 0)
|
|
#define PIN_CTLS_NMI (1 << 3)
|
|
#define PIN_CTLS_VIRT_NMI (1 << 5)
|
|
#define PIN_CTLS_PREEMPT_TIMER (1 << 6)
|
|
#define PIN_CTLS_POSTED_INTR (1 << 7)
|
|
|
|
// Primary processor-based VM-execution controls
|
|
#define PP_CTLS_INTR_WINDOW (1 << 2)
|
|
#define PP_CLTS_TSC_OFF (1 << 3)
|
|
#define PP_CLTS_HLT (1 << 7)
|
|
#define PP_CLTS_INVLPG (1 << 9)
|
|
#define PP_CLTS_MWAIT (1 << 10)
|
|
#define PP_CLTS_RDPMC (1 << 11)
|
|
#define PP_CLTS_RDTSC (1 << 12)
|
|
#define PP_CLTS_C3_LOAD (1 << 15)
|
|
#define PP_CLTS_C3_STORE (1 << 16)
|
|
#define PP_CLTS_C8_LOAD (1 << 19)
|
|
#define PP_CLTS_C8_STORE (1 << 20)
|
|
#define PP_CLTS_TPR_SHADOW (1 << 21)
|
|
#define PP_CLTS_NMI_WINDOW (1 << 22)
|
|
#define PP_CLTS_MOVDR (1 << 23)
|
|
#define PP_CLTS_UNCOND_IO (1 << 24)
|
|
#define PP_CLTS_IOBMP (1 << 25)
|
|
#define PP_CLTS_MONITOR_TF (1 << 27)
|
|
#define PP_CLTS_MSRBMP (1 << 28)
|
|
#define PP_CLTS_MONITOR (1 << 29)
|
|
#define PP_CLTS_PAUSE (1 << 30)
|
|
#define PP_CLTS_SEC_CTLS (1 << 31)
|
|
|
|
// Secondary processor-based VM-execution controls
|
|
#define SP_CLTS_VIRT_APIC (1 << 0)
|
|
#define SP_CLTS_ENABLE_EPT (1 << 1)
|
|
#define SP_CLTS_DESC_TABLE (1 << 2)
|
|
#define SP_CLTS_RDTSCP (1 << 3)
|
|
#define SP_CLTS_VIRT_X2APIC (1 << 4)
|
|
#define SP_CLTS_ENABLE_VPID (1 << 5)
|
|
#define SP_CLTS_WBINVD (1 << 6)
|
|
#define SP_CLTS_UNRSTD_GUEST (1 << 7)
|
|
#define SP_CLTS_VIRT_APIC_REG (1 << 8)
|
|
#define SP_CLTS_VIRQ_DEL (1 << 9)
|
|
#define SP_CLTS_PAUSE_LOOP (1 << 10)
|
|
#define SP_CLTS_RDRAND (1 << 11)
|
|
#define SP_CLTS_ENABLE_INVPCID (1 << 12)
|
|
#define SP_CLTS_VMFUNC (1 << 13)
|
|
#define SP_CLTS_VMCS_SHADOW (1 << 14)
|
|
#define SP_CLTS_EPT_VIOL (1 << 18)
|
|
|
|
// VM-exit controls
|
|
#define EXIT_CLTS_SAVE_DBG (1 << 2)
|
|
#define EXIT_CLTS_HOST_SIZE (1 << 9)
|
|
#define EXIT_CLTS_LOAD_PGC (1 << 12)
|
|
#define EXIT_CLTS_ACK_INTR (1 << 15)
|
|
#define EXIT_CLTS_SAVE_PAT (1 << 18)
|
|
#define EXIT_CLTS_LOAD_PAT (1 << 19)
|
|
#define EXIT_CLTS_SAVE_EFER (1 << 20)
|
|
#define EXIT_CLTS_LOAD_EFER (1 << 21)
|
|
#define EXIT_CLTS_SAVE_PREEMPT (1 << 22)
|
|
|
|
// VM-entry controls
|
|
#define ENTRY_CLTS_LOAD_DBG (1 << 2)
|
|
#define ENTRY_CLTS_IA32E_MODE (1 << 9)
|
|
#define ENTRY_CLTS_SMM (1 << 10)
|
|
#define ENTRY_CLTS_DUAL_MONITOR (1 << 11)
|
|
#define ENTRY_CLTS_LOAD_PGC (1 << 13)
|
|
#define ENTRY_CLTS_LOAD_PAT (1 << 14)
|
|
#define ENTRY_CLTS_LOAD_EFER (1 << 15)
|
|
|
|
#endif // VMX_CONTROLS_H
|