Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


9e7bf58c4087f4598cc7273960161730da0185d5
[palacios.git] / palacios / include / geekos / vmcb.h
1 #ifndef __VMCB_H
2 #define __VMCB_H
3
4
5
6
7 #if __TINYC__
8 #define PACKED
9 #else
10 #define PACKED __attribute__((packed))
11 #endif
12
13 union Ctrl_Registers {
14   ushort_t bitmap                PACKED;
15   struct {
16     uint_t cr0        : 1        PACKED;
17     uint_t cr1        : 1        PACKED;
18     uint_t cr2        : 1        PACKED;
19     uint_t cr3        : 1        PACKED;
20     uint_t cr4        : 1        PACKED;
21     uint_t cr5        : 1        PACKED;
22     uint_t cr6        : 1        PACKED;
23     uint_t cr7        : 1        PACKED;
24     uint_t cr8        : 1        PACKED;
25     uint_t cr9        : 1        PACKED;
26     uint_t cr10       : 1        PACKED;
27     uint_t cr11       : 1        PACKED;
28     uint_t cr12       : 1        PACKED;
29     uint_t cr13       : 1        PACKED;
30     uint_t cr14       : 1        PACKED;
31     uint_t cr15       : 1        PACKED;
32   } crs;
33 };
34
35
36 union Debug_Registers {
37   ushort_t bitmap                PACKED;
38   struct {
39     uint_t dr0        : 1        PACKED;
40     uint_t dr1        : 1        PACKED;
41     uint_t dr2        : 1        PACKED;
42     uint_t dr3        : 1        PACKED;
43     uint_t dr4        : 1        PACKED;
44     uint_t dr5        : 1        PACKED;
45     uint_t dr6        : 1        PACKED;
46     uint_t dr7        : 1        PACKED;
47     uint_t dr8        : 1        PACKED;
48     uint_t dr9        : 1        PACKED;
49     uint_t dr10       : 1        PACKED;
50     uint_t dr11       : 1        PACKED;
51     uint_t dr12       : 1        PACKED;
52     uint_t dr13       : 1        PACKED;
53     uint_t dr14       : 1        PACKED;
54     uint_t dr15       : 1        PACKED;
55   } drs;
56 };
57
58
59 union Exception_Vectors {
60   ulong_t bitmap                  PACKED;
61   struct {
62     uint_t ex0         : 1        PACKED;
63     uint_t ex1         : 1        PACKED;
64     uint_t ex2         : 1        PACKED;
65     uint_t ex3         : 1        PACKED;
66     uint_t ex4         : 1        PACKED;
67     uint_t ex5         : 1        PACKED;
68     uint_t ex6         : 1        PACKED;
69     uint_t ex7         : 1        PACKED;
70     uint_t ex8         : 1        PACKED;
71     uint_t ex9         : 1        PACKED;
72     uint_t ex10        : 1        PACKED;
73     uint_t ex11        : 1        PACKED;
74     uint_t ex12        : 1        PACKED;
75     uint_t ex13        : 1        PACKED;
76     uint_t ex14        : 1        PACKED;
77     uint_t ex15        : 1        PACKED;
78     uint_t ex16        : 1        PACKED;
79     uint_t ex17        : 1        PACKED;
80     uint_t ex18        : 1        PACKED;
81     uint_t ex19        : 1        PACKED;
82     uint_t ex20        : 1        PACKED;
83     uint_t ex21        : 1        PACKED;
84     uint_t ex22        : 1        PACKED;
85     uint_t ex23        : 1        PACKED;
86     uint_t ex24        : 1        PACKED;
87     uint_t ex25        : 1        PACKED;
88     uint_t ex26        : 1        PACKED;
89     uint_t ex27        : 1        PACKED;
90     uint_t ex28        : 1        PACKED;
91     uint_t ex29        : 1        PACKED;
92     uint_t ex30        : 1        PACKED;
93     uint_t ex31        : 1        PACKED;
94   } exceptions;
95 };
96
97
98 union Instr_Intercepts {
99   ulong_t bitmap                  PACKED;
100   struct {
101     uint_t INTR        : 1        PACKED;
102     uint_t NMI         : 1        PACKED;
103     uint_t SMI         : 1        PACKED;
104     uint_t INIT        : 1        PACKED;
105     uint_t VINTR       : 1        PACKED;
106     uint_t CR0         : 1        PACKED;
107     uint_t RD_IDTR     : 1        PACKED;
108     uint_t RD_GDTR     : 1        PACKED;
109     uint_t RD_LDTR     : 1        PACKED;
110     uint_t RD_TR       : 1        PACKED;
111     uint_t WR_IDTR     : 1        PACKED;
112     uint_t WR_GDTR     : 1        PACKED;
113     uint_t WR_LDTR     : 1        PACKED;
114     uint_t WR_TR       : 1        PACKED;
115     uint_t RDTSC       : 1        PACKED;
116     uint_t RDPMC       : 1        PACKED;
117     uint_t PUSHF       : 1        PACKED;
118     uint_t POPF        : 1        PACKED;
119     uint_t CPUID       : 1        PACKED;
120     uint_t RSM         : 1        PACKED;
121     uint_t IRET        : 1        PACKED;
122     uint_t INTn        : 1        PACKED;
123     uint_t INVD        : 1        PACKED;
124     uint_t PAUSE       : 1        PACKED;
125     uint_t HLT         : 1        PACKED;
126     uint_t INVPLG      : 1        PACKED;
127     uint_t INVPLGA     : 1        PACKED;
128     uint_t IOIO_PROT   : 1        PACKED;
129     uint_t MSR_PROT    : 1        PACKED;
130     uint_t task_switch : 1        PACKED;
131     uint_t FERR_FREEZE : 1        PACKED;
132     uint_t shutdown_evts: 1       PACKED;
133   } instrs;
134 };
135
136 union SVM_Instr_Intercepts { 
137   ulong_t bitmap                  PACKED;
138   struct {
139     uint_t VMRUN      : 1         PACKED;
140     uint_t VMMCALL    : 1         PACKED;
141     uint_t VMLOAD     : 1         PACKED;
142     uint_t VMSAVE     : 1         PACKED;
143     uint_t STGI       : 1         PACKED;
144     uint_t CLGI       : 1         PACKED;
145     uint_t SKINIT     : 1         PACKED;
146     uint_t RDTSCP     : 1         PACKED;
147     uint_t ICEBP      : 1         PACKED;
148     uint_t WBINVD     : 1         PACKED;
149     uint_t MONITOR    : 1         PACKED;
150     uint_t MWAIT_always : 1       PACKED;
151     uint_t MWAIT_if_armed : 1     PACKED;
152     ulong_t reserved  : 19        PACKED;
153   } instrs;
154 };
155
156
157
158 typedef struct VMCB_Control_Area {
159   union Ctrl_Registers cr_reads        PACKED;
160   union Ctrl_Registers cr_writes       PACKED;
161   union Debug_Registers dr_reads       PACKED;
162   union Debug_Registers dr_writes      PACKED;
163   union Exception_Vectors exceptions   PACKED;
164   union Instr_Intercepts instrs        PACKED;
165   union SVM_Instr_Intercepts svm_instrs PACKED;
166   char rsvd1[43]                       PACKED;
167   
168
169
170 } svm_vmcb_t;
171
172
173
174
175 #endif