diff options
Diffstat (limited to 'arch/x86/include/asm/svm.h')
| -rw-r--r-- | arch/x86/include/asm/svm.h | 132 | 
1 files changed, 39 insertions, 93 deletions
diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index 0e831059ac5..6136d99f537 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -1,6 +1,9 @@  #ifndef __SVM_H  #define __SVM_H +#include <uapi/asm/svm.h> + +  enum {  	INTERCEPT_INTR,  	INTERCEPT_NMI, @@ -47,14 +50,13 @@ enum {  	INTERCEPT_MONITOR,  	INTERCEPT_MWAIT,  	INTERCEPT_MWAIT_COND, +	INTERCEPT_XSETBV,  };  struct __attribute__ ((__packed__)) vmcb_control_area { -	u16 intercept_cr_read; -	u16 intercept_cr_write; -	u16 intercept_dr_read; -	u16 intercept_dr_write; +	u32 intercept_cr; +	u32 intercept_dr;  	u32 intercept_exceptions;  	u64 intercept;  	u8 reserved_1[42]; @@ -81,14 +83,19 @@ struct __attribute__ ((__packed__)) vmcb_control_area {  	u32 event_inj_err;  	u64 nested_cr3;  	u64 lbr_ctl; -	u64 reserved_5; +	u32 clean; +	u32 reserved_5;  	u64 next_rip; -	u8 reserved_6[816]; +	u8 insn_len; +	u8 insn_bytes[15]; +	u8 reserved_6[800];  };  #define TLB_CONTROL_DO_NOTHING 0  #define TLB_CONTROL_FLUSH_ALL_ASID 1 +#define TLB_CONTROL_FLUSH_ASID 3 +#define TLB_CONTROL_FLUSH_ASID_LOCAL 7  #define V_TPR_MASK 0x0f @@ -204,19 +211,31 @@ struct __attribute__ ((__packed__)) vmcb {  #define SVM_SELECTOR_READ_MASK SVM_SELECTOR_WRITE_MASK  #define SVM_SELECTOR_CODE_MASK (1 << 3) -#define INTERCEPT_CR0_MASK 1 -#define INTERCEPT_CR3_MASK (1 << 3) -#define INTERCEPT_CR4_MASK (1 << 4) -#define INTERCEPT_CR8_MASK (1 << 8) - -#define INTERCEPT_DR0_MASK 1 -#define INTERCEPT_DR1_MASK (1 << 1) -#define INTERCEPT_DR2_MASK (1 << 2) -#define INTERCEPT_DR3_MASK (1 << 3) -#define INTERCEPT_DR4_MASK (1 << 4) -#define INTERCEPT_DR5_MASK (1 << 5) -#define INTERCEPT_DR6_MASK (1 << 6) -#define INTERCEPT_DR7_MASK (1 << 7) +#define INTERCEPT_CR0_READ	0 +#define INTERCEPT_CR3_READ	3 +#define INTERCEPT_CR4_READ	4 +#define INTERCEPT_CR8_READ	8 +#define INTERCEPT_CR0_WRITE	(16 + 0) +#define INTERCEPT_CR3_WRITE	(16 + 3) +#define INTERCEPT_CR4_WRITE	(16 + 4) +#define INTERCEPT_CR8_WRITE	(16 + 8) + +#define INTERCEPT_DR0_READ	0 +#define INTERCEPT_DR1_READ	1 +#define INTERCEPT_DR2_READ	2 +#define INTERCEPT_DR3_READ	3 +#define INTERCEPT_DR4_READ	4 +#define INTERCEPT_DR5_READ	5 +#define INTERCEPT_DR6_READ	6 +#define INTERCEPT_DR7_READ	7 +#define INTERCEPT_DR0_WRITE	(16 + 0) +#define INTERCEPT_DR1_WRITE	(16 + 1) +#define INTERCEPT_DR2_WRITE	(16 + 2) +#define INTERCEPT_DR3_WRITE	(16 + 3) +#define INTERCEPT_DR4_WRITE	(16 + 4) +#define INTERCEPT_DR5_WRITE	(16 + 5) +#define INTERCEPT_DR6_WRITE	(16 + 6) +#define INTERCEPT_DR7_WRITE	(16 + 7)  #define SVM_EVTINJ_VEC_MASK 0xff @@ -246,79 +265,7 @@ struct __attribute__ ((__packed__)) vmcb {  #define SVM_EXITINFOSHIFT_TS_REASON_JMP 38  #define SVM_EXITINFOSHIFT_TS_HAS_ERROR_CODE 44 -#define	SVM_EXIT_READ_CR0 	0x000 -#define	SVM_EXIT_READ_CR3 	0x003 -#define	SVM_EXIT_READ_CR4 	0x004 -#define	SVM_EXIT_READ_CR8 	0x008 -#define	SVM_EXIT_WRITE_CR0 	0x010 -#define	SVM_EXIT_WRITE_CR3 	0x013 -#define	SVM_EXIT_WRITE_CR4 	0x014 -#define	SVM_EXIT_WRITE_CR8 	0x018 -#define	SVM_EXIT_READ_DR0 	0x020 -#define	SVM_EXIT_READ_DR1 	0x021 -#define	SVM_EXIT_READ_DR2 	0x022 -#define	SVM_EXIT_READ_DR3 	0x023 -#define	SVM_EXIT_READ_DR4 	0x024 -#define	SVM_EXIT_READ_DR5 	0x025 -#define	SVM_EXIT_READ_DR6 	0x026 -#define	SVM_EXIT_READ_DR7 	0x027 -#define	SVM_EXIT_WRITE_DR0 	0x030 -#define	SVM_EXIT_WRITE_DR1 	0x031 -#define	SVM_EXIT_WRITE_DR2 	0x032 -#define	SVM_EXIT_WRITE_DR3 	0x033 -#define	SVM_EXIT_WRITE_DR4 	0x034 -#define	SVM_EXIT_WRITE_DR5 	0x035 -#define	SVM_EXIT_WRITE_DR6 	0x036 -#define	SVM_EXIT_WRITE_DR7 	0x037 -#define SVM_EXIT_EXCP_BASE      0x040 -#define SVM_EXIT_INTR		0x060 -#define SVM_EXIT_NMI		0x061 -#define SVM_EXIT_SMI		0x062 -#define SVM_EXIT_INIT		0x063 -#define SVM_EXIT_VINTR		0x064 -#define SVM_EXIT_CR0_SEL_WRITE	0x065 -#define SVM_EXIT_IDTR_READ	0x066 -#define SVM_EXIT_GDTR_READ	0x067 -#define SVM_EXIT_LDTR_READ	0x068 -#define SVM_EXIT_TR_READ	0x069 -#define SVM_EXIT_IDTR_WRITE	0x06a -#define SVM_EXIT_GDTR_WRITE	0x06b -#define SVM_EXIT_LDTR_WRITE	0x06c -#define SVM_EXIT_TR_WRITE	0x06d -#define SVM_EXIT_RDTSC		0x06e -#define SVM_EXIT_RDPMC		0x06f -#define SVM_EXIT_PUSHF		0x070 -#define SVM_EXIT_POPF		0x071 -#define SVM_EXIT_CPUID		0x072 -#define SVM_EXIT_RSM		0x073 -#define SVM_EXIT_IRET		0x074 -#define SVM_EXIT_SWINT		0x075 -#define SVM_EXIT_INVD		0x076 -#define SVM_EXIT_PAUSE		0x077 -#define SVM_EXIT_HLT		0x078 -#define SVM_EXIT_INVLPG		0x079 -#define SVM_EXIT_INVLPGA	0x07a -#define SVM_EXIT_IOIO		0x07b -#define SVM_EXIT_MSR		0x07c -#define SVM_EXIT_TASK_SWITCH	0x07d -#define SVM_EXIT_FERR_FREEZE	0x07e -#define SVM_EXIT_SHUTDOWN	0x07f -#define SVM_EXIT_VMRUN		0x080 -#define SVM_EXIT_VMMCALL	0x081 -#define SVM_EXIT_VMLOAD		0x082 -#define SVM_EXIT_VMSAVE		0x083 -#define SVM_EXIT_STGI		0x084 -#define SVM_EXIT_CLGI		0x085 -#define SVM_EXIT_SKINIT		0x086 -#define SVM_EXIT_RDTSCP		0x087 -#define SVM_EXIT_ICEBP		0x088 -#define SVM_EXIT_WBINVD		0x089 -#define SVM_EXIT_MONITOR	0x08a -#define SVM_EXIT_MWAIT		0x08b -#define SVM_EXIT_MWAIT_COND	0x08c -#define SVM_EXIT_NPF  		0x400 - -#define SVM_EXIT_ERR		-1 +#define SVM_EXITINFO_REG_MASK 0x0F  #define SVM_CR0_SELECTIVE_MASK (X86_CR0_TS | X86_CR0_MP) @@ -330,4 +277,3 @@ struct __attribute__ ((__packed__)) vmcb {  #define SVM_INVLPGA ".byte 0x0f, 0x01, 0xdf"  #endif -  | 
