Cross Reference: svm.h
xref
: /
vbox
/
src
/
recompiler
/
target-i386
/
svm.h
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
#
ifndef
__SVM_H
#
define
__SVM_H
#
define
TLB_CONTROL_DO_NOTHING
0
#
define
TLB_CONTROL_FLUSH_ALL_ASID
1
#
define
V_TPR_MASK
0x0f
#
define
V_IRQ_SHIFT
8
#
define
V_IRQ_MASK
(
1
<<
V_IRQ_SHIFT
)
#
define
V_INTR_PRIO_SHIFT
16
#
define
V_INTR_PRIO_MASK
(
0x0f
<<
V_INTR_PRIO_SHIFT
)
#
define
V_IGN_TPR_SHIFT
20
#
define
V_IGN_TPR_MASK
(
1
<<
V_IGN_TPR_SHIFT
)
#
define
V_INTR_MASKING_SHIFT
24
#
define
V_INTR_MASKING_MASK
(
1
<<
V_INTR_MASKING_SHIFT
)
#
define
SVM_INTERRUPT_SHADOW_MASK
1
#
define
SVM_IOIO_STR_SHIFT
2
#
define
SVM_IOIO_REP_SHIFT
3
#
define
SVM_IOIO_SIZE_SHIFT
4
#
define
SVM_IOIO_ASIZE_SHIFT
7
#
define
SVM_IOIO_TYPE_MASK
1
#
define
SVM_IOIO_STR_MASK
(
1
<<
SVM_IOIO_STR_SHIFT
)
#
define
SVM_IOIO_REP_MASK
(
1
<<
SVM_IOIO_REP_SHIFT
)
#
define
SVM_IOIO_SIZE_MASK
(
7
<<
SVM_IOIO_SIZE_SHIFT
)
#
define
SVM_IOIO_ASIZE_MASK
(
7
<<
SVM_IOIO_ASIZE_SHIFT
)
#
define
SVM_EVTINJ_VEC_MASK
0xff
#
define
SVM_EVTINJ_TYPE_SHIFT
8
#
define
SVM_EVTINJ_TYPE_MASK
(
7
<<
SVM_EVTINJ_TYPE_SHIFT
)
#
define
SVM_EVTINJ_TYPE_INTR
(0 <<
SVM_EVTINJ_TYPE_SHIFT
)
#
define
SVM_EVTINJ_TYPE_NMI
(
2
<<
SVM_EVTINJ_TYPE_SHIFT
)
#
define
SVM_EVTINJ_TYPE_EXEPT
(
3
<<
SVM_EVTINJ_TYPE_SHIFT
)
#
define
SVM_EVTINJ_TYPE_SOFT
(
4
<<
SVM_EVTINJ_TYPE_SHIFT
)
#
define
SVM_EVTINJ_VALID
(
1
<<
31
)
#
define
SVM_EVTINJ_VALID_ERR
(
1
<<
11
)
#
define
SVM_EXITINTINFO_VEC_MASK
SVM_EVTINJ_VEC_MASK
#
define
SVM_EXITINTINFO_TYPE_INTR
SVM_EVTINJ_TYPE_INTR
#
define
SVM_EXITINTINFO_TYPE_NMI
SVM_EVTINJ_TYPE_NMI
#
define
SVM_EXITINTINFO_TYPE_EXEPT
SVM_EVTINJ_TYPE_EXEPT
#
define
SVM_EXITINTINFO_TYPE_SOFT
SVM_EVTINJ_TYPE_SOFT
#
define
SVM_EXITINTINFO_VALID
SVM_EVTINJ_VALID
#
define
SVM_EXITINTINFO_VALID_ERR
SVM_EVTINJ_VALID_ERR
#
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
/* only included in documentation, maybe wrong */
#
define
SVM_EXIT_MONITOR
0x08a
#
define
SVM_EXIT_MWAIT
0x08b
#
define
SVM_EXIT_NPF
0x400
#
define
SVM_EXIT_ERR
-
1
#
define
SVM_CR0_SELECTIVE_MASK
(
1
<<
3
|
1
)
/* TS and MP */
struct
__attribute__
((
__packed__
))
vmcb_control_area
{
uint16_t
intercept_cr_read
;
uint16_t
intercept_cr_write
;
uint16_t
intercept_dr_read
;
uint16_t
intercept_dr_write
;
uint32_t
intercept_exceptions
;
uint64_t
intercept
;
uint8_t
reserved_1
[
44
];
uint64_t
iopm_base_pa
;
uint64_t
msrpm_base_pa
;
uint64_t
tsc_offset
;
uint32_t
asid
;
uint8_t
tlb_ctl
;
uint8_t
reserved_2
[
3
];
uint32_t
int_ctl
;
uint32_t
int_vector
;
uint32_t
int_state
;
uint8_t
reserved_3
[
4
];
uint64_t
exit_code
;
uint64_t
exit_info_1
;
uint64_t
exit_info_2
;
uint32_t
exit_int_info
;
uint32_t
exit_int_info_err
;
uint64_t
nested_ctl
;
uint8_t
reserved_4
[
16
];
uint32_t
event_inj
;
uint32_t
event_inj_err
;
uint64_t
nested_cr3
;
uint64_t
lbr_ctl
;
uint8_t
reserved_5
[
832
];
};
struct
__attribute__
((
__packed__
))
vmcb_seg
{
uint16_t
selector
;
uint16_t
attrib
;
uint32_t
limit
;
uint64_t
base
;
};
struct
__attribute__
((
__packed__
))
vmcb_save_area
{
struct
vmcb_seg
es
;
struct
vmcb_seg
cs
;
struct
vmcb_seg
ss
;
struct
vmcb_seg
ds
;
struct
vmcb_seg
fs
;
struct
vmcb_seg
gs
;
struct
vmcb_seg
gdtr
;
struct
vmcb_seg
ldtr
;
struct
vmcb_seg
idtr
;
struct
vmcb_seg
tr
;
uint8_t
reserved_1
[
43
];
uint8_t
cpl
;
uint8_t
reserved_2
[
4
];
uint64_t
efer
;
uint8_t
reserved_3
[
112
];
uint64_t
cr4
;
uint64_t
cr3
;
uint64_t
cr0
;
uint64_t
dr7
;
uint64_t
dr6
;
uint64_t
rflags
;
uint64_t
rip
;
uint8_t
reserved_4
[
88
];
uint64_t
rsp
;
uint8_t
reserved_5
[
24
];
uint64_t
rax
;
uint64_t
star
;
uint64_t
lstar
;
uint64_t
cstar
;
uint64_t
sfmask
;
uint64_t
kernel_gs_base
;
uint64_t
sysenter_cs
;
uint64_t
sysenter_esp
;
uint64_t
sysenter_eip
;
uint64_t
cr2
;
uint8_t
reserved_6
[
32
];
uint64_t
g_pat
;
uint64_t
dbgctl
;
uint64_t
br_from
;
uint64_t
br_to
;
uint64_t
last_excp_from
;
uint64_t
last_excp_to
;
};
struct
__attribute__
((
__packed__
))
vmcb
{
struct
vmcb_control_area
control
;
struct
vmcb_save_area
save
;
};
#
endif