hammer2 - Merge Mihai Carabas's VKERNEL/VMM GSOC project into the main tree
[dragonfly.git] / sys / platform / pc64 / vmm / svm.h
1 #ifndef _VMM_SVM_H_
2 #define _VMM_SVM_H_
3
4 struct vmcb {
5         /* Control Area */
6         uint16_t        vmcb_cr_read;
7         uint16_t        vmcb_cr_write;
8         uint16_t        vmcb_dr_read;
9         uint16_t        vmcb_dr_write;
10         uint32_t        vmcb_exception;
11         uint32_t        vmcb_ctrl1;
12         uint32_t        vmcb_ctrl2;
13         uint8_t         vmcb_unused1[40];
14         uint16_t        vmcb_pause_filter_threshold;
15         uint16_t        vmcb_pause_filter_count;
16         uint64_t        vmcb_iopm_base_pa;
17         uint64_t        vmcb_msrpm_base_pa;
18         uint64_t        vmcb_tsc_offset;
19         uint32_t        vmcb_asid;
20         uint8_t         vmcb_tlb_ctrl;
21         uint8_t         vmcb_unused2[3];
22         uint8_t         vmcb_v_tpr;
23         uint8_t         vmcb_v_irq;
24         /* ... */
25         uint8_t         vmcb_v_intr_vector;
26         uint8_t         vmcb_unused3[3];
27         uint64_t        vmcb_intr_shadow;
28         uint64_t        vmcb_exitcode;
29         uint64_t        vmcb_exitinfo1;
30         uint64_t        vmcb_exitinfo2;
31         uint64_t        vmcb_exitintinfo;
32         uint64_t        vmcb_np_enable;
33         uint8_t         vmcb_unused4[16];
34         uint64_t        vmcb_event_injection;
35         uint64_t        vmcb_n_cr3;
36
37         /* Saved Guest State */
38 };
39
40 /* SVM Intercept Codes (vmcb_exitcode) */
41 #define VMEXIT_CR_READ(_cr)     (0 + (_cr))
42 #define VMEXIT_CR_WRITE(_cr)    (16 + (_cr))
43 #define VMEXIT_DR_READ(_dr)     (32 + (_dr))
44 #define VMEXIT_DR_WRITE(_dr)    (48 + (_dr))
45 #define VMEXIT_EXCP(_excp)      (64 + (_excp))
46 #define VMEXIT_INTR             96
47 #define VMEXIT_NMI              97
48 #define VMEXIT_SMI              98
49 #define VMEXIT_INIT             99
50 #define VMEXIT_VINTR            100
51 #define VMEXIT_CR0_SEL_WRITE    101
52 #define VMEXIT_IDTR_READ        102
53 #define VMEXIT_GDTR_READ        103
54 #define VMEXIT_LDTR_READ        104
55 #define VMEXIT_TR_READ          105
56 #define VMEXIT_IDTR_WRITE       106
57 #define VMEXIT_GDTR_WRITE       107
58 #define VMEXIT_LDTR_WRITE       108
59 #define VMEXIT_TR_WRITE         109
60 #define VMEXIT_RDTSC            110
61 #define VMEXIT_RDPMC            111
62 #define VMEXIT_PUSHF            112
63 #define VMEXIT_POPF             113
64 #define VMEXIT_CPUID            114
65 #define VMEXIT_RSM              115
66 #define VMEXIT_IRET             116
67 #define VMEXIT_SWINT            117
68 #define VMEXIT_INVD             118
69 #define VMEXIT_PAUSE            119
70 #define VMEXIT_HLT              120
71 #define VMEXIT_INVLPG           121
72 #define VMEXIT_INVLPGA          122
73 #define VMEXIT_IOIO             123
74 #define VMEXIT_MSR              124
75 #define VMEXIT_TASK_SWITCH      125
76 #define VMEXIT_FERR_FREEZE      126
77 #define VMEXIT_SHUTDOWN 127
78 #define VMEXIT_VMRUN            128
79 #define VMEXIT_VMMCALL          129
80 #define VMEXIT_VMLOAD           130
81 #define VMEXIT_VMSAVE           131
82 #define VMEXIT_STGI             132
83 #define VMEXIT_CLGI             133
84 #define VMEXIT_SKINIT           134
85 #define VMEXIT_RDTSCP           135
86 #define VMEXIT_ICEBP            137
87 #define VMEXIT_NPF              1024
88 #define VMEXIT_INVALID          -1
89
90 #endif  /* ndef _VMM_SVM_H_ */