186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#ifndef __SVM_H
286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define __SVM_H
386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define TLB_CONTROL_DO_NOTHING 0
586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define TLB_CONTROL_FLUSH_ALL_ASID 1
686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_TPR_MASK 0x0f
886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_IRQ_SHIFT 8
1086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_IRQ_MASK (1 << V_IRQ_SHIFT)
1186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
1286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_INTR_PRIO_SHIFT 16
1386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_INTR_PRIO_MASK (0x0f << V_INTR_PRIO_SHIFT)
1486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
1586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_IGN_TPR_SHIFT 20
1686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_IGN_TPR_MASK (1 << V_IGN_TPR_SHIFT)
1786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
1886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_INTR_MASKING_SHIFT 24
1986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define V_INTR_MASKING_MASK (1 << V_INTR_MASKING_SHIFT)
2086797937017f52bff088d02edf64fb931177a7eaJun Nakajima
2186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_INTERRUPT_SHADOW_MASK 1
2286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
2386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_STR_SHIFT 2
2486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_REP_SHIFT 3
2586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_SIZE_SHIFT 4
2686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_ASIZE_SHIFT 7
2786797937017f52bff088d02edf64fb931177a7eaJun Nakajima
2886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_TYPE_MASK 1
2986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_STR_MASK (1 << SVM_IOIO_STR_SHIFT)
3086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_REP_MASK (1 << SVM_IOIO_REP_SHIFT)
3186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_SIZE_MASK (7 << SVM_IOIO_SIZE_SHIFT)
3286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_IOIO_ASIZE_MASK (7 << SVM_IOIO_ASIZE_SHIFT)
3386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
3486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_VEC_MASK 0xff
3586797937017f52bff088d02edf64fb931177a7eaJun Nakajima
3686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_SHIFT 8
3786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_MASK (7 << SVM_EVTINJ_TYPE_SHIFT)
3886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
3986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_INTR (0 << SVM_EVTINJ_TYPE_SHIFT)
4086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_NMI (2 << SVM_EVTINJ_TYPE_SHIFT)
4186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_EXEPT (3 << SVM_EVTINJ_TYPE_SHIFT)
4286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_TYPE_SOFT (4 << SVM_EVTINJ_TYPE_SHIFT)
4386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
4486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_VALID (1 << 31)
4586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EVTINJ_VALID_ERR (1 << 11)
4686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
4786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXITINTINFO_VEC_MASK SVM_EVTINJ_VEC_MASK
4886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
4986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXITINTINFO_TYPE_INTR SVM_EVTINJ_TYPE_INTR
5086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXITINTINFO_TYPE_NMI SVM_EVTINJ_TYPE_NMI
5186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXITINTINFO_TYPE_EXEPT SVM_EVTINJ_TYPE_EXEPT
5286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXITINTINFO_TYPE_SOFT SVM_EVTINJ_TYPE_SOFT
5386797937017f52bff088d02edf64fb931177a7eaJun Nakajima
5486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXITINTINFO_VALID SVM_EVTINJ_VALID
5586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXITINTINFO_VALID_ERR SVM_EVTINJ_VALID_ERR
5686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
5786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_CR0 	0x000
5886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_CR3 	0x003
5986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_CR4 	0x004
6086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_CR8 	0x008
6186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_CR0 	0x010
6286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_CR3 	0x013
6386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_CR4 	0x014
6486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_CR8 	0x018
6586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR0 	0x020
6686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR1 	0x021
6786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR2 	0x022
6886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR3 	0x023
6986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR4 	0x024
7086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR5 	0x025
7186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR6 	0x026
7286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_READ_DR7 	0x027
7386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR0 	0x030
7486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR1 	0x031
7586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR2 	0x032
7686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR3 	0x033
7786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR4 	0x034
7886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR5 	0x035
7986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR6 	0x036
8086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define	SVM_EXIT_WRITE_DR7 	0x037
8186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_EXCP_BASE      0x040
8286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_INTR		0x060
8386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_NMI		0x061
8486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_SMI		0x062
8586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_INIT		0x063
8686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_VINTR		0x064
8786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_CR0_SEL_WRITE	0x065
8886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_IDTR_READ	0x066
8986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_GDTR_READ	0x067
9086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_LDTR_READ	0x068
9186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_TR_READ	0x069
9286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_IDTR_WRITE	0x06a
9386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_GDTR_WRITE	0x06b
9486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_LDTR_WRITE	0x06c
9586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_TR_WRITE	0x06d
9686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_RDTSC		0x06e
9786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_RDPMC		0x06f
9886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_PUSHF		0x070
9986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_POPF		0x071
10086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_CPUID		0x072
10186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_RSM		0x073
10286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_IRET		0x074
10386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_SWINT		0x075
10486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_INVD		0x076
10586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_PAUSE		0x077
10686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_HLT		0x078
10786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_INVLPG		0x079
10886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_INVLPGA	0x07a
10986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_IOIO		0x07b
11086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_MSR		0x07c
11186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_TASK_SWITCH	0x07d
11286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_FERR_FREEZE	0x07e
11386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_SHUTDOWN	0x07f
11486797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_VMRUN		0x080
11586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_VMMCALL	0x081
11686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_VMLOAD		0x082
11786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_VMSAVE		0x083
11886797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_STGI		0x084
11986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_CLGI		0x085
12086797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_SKINIT		0x086
12186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_RDTSCP		0x087
12286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_ICEBP		0x088
12386797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_WBINVD		0x089
12486797937017f52bff088d02edf64fb931177a7eaJun Nakajima/* only included in documentation, maybe wrong */
12586797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_MONITOR	0x08a
12686797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_MWAIT		0x08b
12786797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_NPF  		0x400
12886797937017f52bff088d02edf64fb931177a7eaJun Nakajima
12986797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_EXIT_ERR		-1
13086797937017f52bff088d02edf64fb931177a7eaJun Nakajima
13186797937017f52bff088d02edf64fb931177a7eaJun Nakajima#define SVM_CR0_SELECTIVE_MASK (1 << 3 | 1) /* TS and MP */
13286797937017f52bff088d02edf64fb931177a7eaJun Nakajima
13386797937017f52bff088d02edf64fb931177a7eaJun Nakajimastruct __attribute__ ((__packed__)) vmcb_control_area {
13486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t intercept_cr_read;
13586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t intercept_cr_write;
13686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t intercept_dr_read;
13786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t intercept_dr_write;
13886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t intercept_exceptions;
13986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t intercept;
14086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_1[44];
14186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t iopm_base_pa;
14286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t msrpm_base_pa;
14386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t tsc_offset;
14486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t asid;
14586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t tlb_ctl;
14686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_2[3];
14786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t int_ctl;
14886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t int_vector;
14986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t int_state;
15086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_3[4];
15186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t exit_code;
15286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t exit_info_1;
15386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t exit_info_2;
15486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t exit_int_info;
15586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t exit_int_info_err;
15686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t nested_ctl;
15786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_4[16];
15886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t event_inj;
15986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t event_inj_err;
16086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t nested_cr3;
16186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t lbr_ctl;
16286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_5[832];
16386797937017f52bff088d02edf64fb931177a7eaJun Nakajima};
16486797937017f52bff088d02edf64fb931177a7eaJun Nakajima
16586797937017f52bff088d02edf64fb931177a7eaJun Nakajimastruct __attribute__ ((__packed__)) vmcb_seg {
16686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t selector;
16786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint16_t attrib;
16886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint32_t limit;
16986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t base;
17086797937017f52bff088d02edf64fb931177a7eaJun Nakajima};
17186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
17286797937017f52bff088d02edf64fb931177a7eaJun Nakajimastruct __attribute__ ((__packed__)) vmcb_save_area {
17386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg es;
17486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg cs;
17586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg ss;
17686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg ds;
17786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg fs;
17886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg gs;
17986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg gdtr;
18086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg ldtr;
18186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg idtr;
18286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_seg tr;
18386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_1[43];
18486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t cpl;
18586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_2[4];
18686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t efer;
18786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_3[112];
18886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t cr4;
18986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t cr3;
19086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t cr0;
19186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t dr7;
19286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t dr6;
19386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t rflags;
19486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t rip;
19586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_4[88];
19686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t rsp;
19786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_5[24];
19886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t rax;
19986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t star;
20086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t lstar;
20186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t cstar;
20286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t sfmask;
20386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t kernel_gs_base;
20486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t sysenter_cs;
20586797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t sysenter_esp;
20686797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t sysenter_eip;
20786797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t cr2;
20886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint8_t reserved_6[32];
20986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t g_pat;
21086797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t dbgctl;
21186797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t br_from;
21286797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t br_to;
21386797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t last_excp_from;
21486797937017f52bff088d02edf64fb931177a7eaJun Nakajima	uint64_t last_excp_to;
21586797937017f52bff088d02edf64fb931177a7eaJun Nakajima};
21686797937017f52bff088d02edf64fb931177a7eaJun Nakajima
21786797937017f52bff088d02edf64fb931177a7eaJun Nakajimastruct __attribute__ ((__packed__)) vmcb {
21886797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_control_area control;
21986797937017f52bff088d02edf64fb931177a7eaJun Nakajima	struct vmcb_save_area save;
22086797937017f52bff088d02edf64fb931177a7eaJun Nakajima};
22186797937017f52bff088d02edf64fb931177a7eaJun Nakajima
22286797937017f52bff088d02edf64fb931177a7eaJun Nakajima#endif
223