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.


rename exit codes to avoid namespace collisions
[palacios.git] / palacios / include / palacios / svm_handler.h
1 /* 
2  * This file is part of the Palacios Virtual Machine Monitor developed
3  * by the V3VEE Project with funding from the United States National 
4  * Science Foundation and the Department of Energy.  
5  *
6  * The V3VEE Project is a joint project between Northwestern University
7  * and the University of New Mexico.  You can find out more at 
8  * http://www.v3vee.org
9  *
10  * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> 
11  * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org> 
12  * All rights reserved.
13  *
14  * Author: Jack Lange <jarusl@cs.northwestern.edu>
15  *
16  * This is free software.  You are permitted to use,
17  * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
18  */
19
20 #ifndef __SVM_HANDLER_H
21 #define __SVM_HANDLER_H
22
23 #ifdef __V3VEE__
24
25 #include <palacios/svm.h>
26 #include <palacios/vmcb.h>
27 #include <palacios/vmm.h>
28
29
30
31 /******************************************/
32 /* SVM Intercept Exit Codes               */
33 /* AMD Arch Vol 3, Appendix C, pg 477-478 */
34 /******************************************/
35 #define SVM_EXIT_CR_READ_MASK 0xfffffff0
36 #define SVM_EXIT_CR0_READ   0x00000000
37 #define SVM_EXIT_CR1_READ   0x00000001
38 #define SVM_EXIT_CR2_READ   0x00000002
39 #define SVM_EXIT_CR3_READ   0x00000003
40 #define SVM_EXIT_CR4_READ   0x00000004
41 #define SVM_EXIT_CR5_READ   0x00000005
42 #define SVM_EXIT_CR6_READ   0x00000006
43 #define SVM_EXIT_CR7_READ   0x00000007
44 #define SVM_EXIT_CR8_READ   0x00000008
45 #define SVM_EXIT_CR9_READ   0x00000009
46 #define SVM_EXIT_CR10_READ  0x0000000a
47 #define SVM_EXIT_CR11_READ  0x0000000b
48 #define SVM_EXIT_CR12_READ  0x0000000c
49 #define SVM_EXIT_CR13_READ  0x0000000d
50 #define SVM_EXIT_CR14_READ  0x0000000e
51 #define SVM_EXIT_CR15_READ  0x0000000f
52
53 #define SVM_EXIT_CR_WRITE_MASK 0xffffffe0
54 #define SVM_EXIT_CR0_WRITE   0x00000010
55 #define SVM_EXIT_CR1_WRITE   0x00000011
56 #define SVM_EXIT_CR2_WRITE   0x00000012
57 #define SVM_EXIT_CR3_WRITE   0x00000013
58 #define SVM_EXIT_CR4_WRITE   0x00000014
59 #define SVM_EXIT_CR5_WRITE   0x00000015
60 #define SVM_EXIT_CR6_WRITE   0x00000016
61 #define SVM_EXIT_CR7_WRITE   0x00000017
62 #define SVM_EXIT_CR8_WRITE   0x00000018
63 #define SVM_EXIT_CR9_WRITE   0x00000019
64 #define SVM_EXIT_CR10_WRITE  0x0000001a
65 #define SVM_EXIT_CR11_WRITE  0x0000001b
66 #define SVM_EXIT_CR12_WRITE  0x0000001c
67 #define SVM_EXIT_CR13_WRITE  0x0000001d
68 #define SVM_EXIT_CR14_WRITE  0x0000001e
69 #define SVM_EXIT_CR15_WRITE  0x0000001f
70
71 #define SVM_EXIT_DR_READ_MASK 0xffffffd0
72 #define SVM_EXIT_DR0_READ   0x00000020
73 #define SVM_EXIT_DR1_READ   0x00000021
74 #define SVM_EXIT_DR2_READ   0x00000022
75 #define SVM_EXIT_DR3_READ   0x00000023
76 #define SVM_EXIT_DR4_READ   0x00000024
77 #define SVM_EXIT_DR5_READ   0x00000025
78 #define SVM_EXIT_DR6_READ   0x00000026
79 #define SVM_EXIT_DR7_READ   0x00000027
80 #define SVM_EXIT_DR8_READ   0x00000028
81 #define SVM_EXIT_DR9_READ   0x00000029
82 #define SVM_EXIT_DR10_READ  0x0000002a
83 #define SVM_EXIT_DR11_READ  0x0000002b
84 #define SVM_EXIT_DR12_READ  0x0000002c
85 #define SVM_EXIT_DR13_READ  0x0000002d
86 #define SVM_EXIT_DR14_READ  0x0000002e
87 #define SVM_EXIT_DR15_READ  0x0000002f
88
89 #define SVM_EXIT_DR_WRITE_MASK     0xffffffc0
90 #define SVM_EXIT_DR0_WRITE   0x00000030 // ? this was previously 3f
91 #define SVM_EXIT_DR1_WRITE   0x00000031
92 #define SVM_EXIT_DR2_WRITE   0x00000032
93 #define SVM_EXIT_DR3_WRITE   0x00000033
94 #define SVM_EXIT_DR4_WRITE   0x00000034
95 #define SVM_EXIT_DR5_WRITE   0x00000035
96 #define SVM_EXIT_DR6_WRITE   0x00000036
97 #define SVM_EXIT_DR7_WRITE   0x00000037
98 #define SVM_EXIT_DR8_WRITE   0x00000038
99 #define SVM_EXIT_DR9_WRITE   0x00000039
100 #define SVM_EXIT_DR10_WRITE  0x0000003a
101 #define SVM_EXIT_DR11_WRITE  0x0000003b
102 #define SVM_EXIT_DR12_WRITE  0x0000003c
103 #define SVM_EXIT_DR13_WRITE  0x0000003d
104 #define SVM_EXIT_DR14_WRITE  0x0000003e
105 #define SVM_EXIT_DR15_WRITE  0x0000003f
106
107 #define SVM_EXIT_EXCP_MASK   0xffffffa0
108 #define SVM_EXIT_EXCP0       0x00000040
109 #define SVM_EXIT_EXCP1       0x00000041
110 #define SVM_EXIT_EXCP2       0x00000042
111 #define SVM_EXIT_EXCP3       0x00000043
112 #define SVM_EXIT_EXCP4       0x00000044
113 #define SVM_EXIT_EXCP5       0x00000045
114 #define SVM_EXIT_EXCP6       0x00000046
115 #define SVM_EXIT_EXCP7       0x00000047
116 #define SVM_EXIT_EXCP8       0x00000048
117 #define SVM_EXIT_EXCP9       0x00000049
118 #define SVM_EXIT_EXCP10      0x0000004a
119 #define SVM_EXIT_EXCP11      0x0000004b
120 #define SVM_EXIT_EXCP12      0x0000004c
121 #define SVM_EXIT_EXCP13      0x0000004d
122 #define SVM_EXIT_EXCP14      0x0000004e
123 #define SVM_EXIT_EXCP15      0x0000004f
124 #define SVM_EXIT_EXCP16      0x00000050
125 #define SVM_EXIT_EXCP17      0x00000051
126 #define SVM_EXIT_EXCP18      0x00000052
127 #define SVM_EXIT_EXCP19      0x00000053
128 #define SVM_EXIT_EXCP20      0x00000054
129 #define SVM_EXIT_EXCP21      0x00000055
130 #define SVM_EXIT_EXCP22      0x00000056
131 #define SVM_EXIT_EXCP23      0x00000057
132 #define SVM_EXIT_EXCP24      0x00000058
133 #define SVM_EXIT_EXCP25      0x00000059
134 #define SVM_EXIT_EXCP26      0x0000005a
135 #define SVM_EXIT_EXCP27      0x0000005b
136 #define SVM_EXIT_EXCP28      0x0000005c
137 #define SVM_EXIT_EXCP29      0x0000005d
138 #define SVM_EXIT_EXCP30      0x0000005e
139 #define SVM_EXIT_EXCP31      0x0000005f
140
141
142 #define SVM_EXIT_INTR                 0x00000060
143 #define SVM_EXIT_NMI                  0x00000061
144 #define SVM_EXIT_SMI                  0x00000062
145 #define SVM_EXIT_INIT                 0x00000063
146 #define SVM_EXIT_VINITR               0x00000064
147 #define SVM_EXIT_CR0_SEL_WRITE        0x00000065
148 #define SVM_EXIT_IDTR_READ            0x00000066
149 #define SVM_EXIT_GDTR_READ            0x00000067
150 #define SVM_EXIT_LDTR_READ            0x00000068
151 #define SVM_EXIT_TR_READ              0x00000069
152 #define SVM_EXIT_IDTR_WRITE           0x0000006a
153 #define SVM_EXIT_GDTR_WRITE           0x0000006b
154 #define SVM_EXIT_LDTR_WRITE           0x0000006c
155 #define SVM_EXIT_TR_WRITE             0x0000006d
156 #define SVM_EXIT_RDTSC                0x0000006e
157 #define SVM_EXIT_RDPMC                0x0000006f
158 #define SVM_EXIT_PUSHF                0x00000070
159 #define SVM_EXIT_POPF                 0x00000071
160 #define SVM_EXIT_CPUID                0x00000072
161 #define SVM_EXIT_RSM                  0x00000073
162 #define SVM_EXIT_IRET                 0x00000074
163 #define SVM_EXIT_SWINT                0x00000075
164 #define SVM_EXIT_INVD                 0x00000076
165 #define SVM_EXIT_PAUSE                0x00000077
166 #define SVM_EXIT_HLT                  0x00000078
167 #define SVM_EXIT_INVLPG               0x00000079
168 #define SVM_EXIT_INVLPGA              0x0000007a
169 #define SVM_EXIT_IOIO                 0x0000007b
170 #define SVM_EXIT_MSR                  0x0000007c
171 #define SVM_EXIT_TASK_SWITCH          0x0000007d
172 #define SVM_EXIT_FERR_FREEZE          0x0000007e
173 #define SVM_EXIT_SHUTDOWN             0x0000007f
174 #define SVM_EXIT_VMRUN                0x00000080
175 #define SVM_EXIT_VMMCALL              0x00000081
176 #define SVM_EXIT_VMLOAD               0x00000082
177 #define SVM_EXIT_VMSAVE               0x00000083
178 #define SVM_EXIT_STGI                 0x00000084
179 #define SVM_EXIT_CLGI                 0x00000085
180 #define SVM_EXIT_SKINIT               0x00000086
181 #define SVM_EXIT_RDTSCP               0x00000087
182 #define SVM_EXIT_ICEBP                0x00000088
183 #define SVM_EXIT_WBINVD               0x00000089
184 #define SVM_EXIT_MONITOR              0x0000008a
185 #define SVM_EXIT_MWAIT                0x0000008b
186 #define SVM_EXIT_MWAIT_CONDITIONAL    0x0000008c
187
188 #define SVM_EXIT_NPF                  0x00000400
189
190 #define SVM_EXIT_INVALID_VMCB         -1
191
192 /******************************************/
193
194
195 int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, 
196                        addr_t exit_info1, addr_t exit_info2);
197 const char * v3_svm_exit_code_to_str(uint_t exit_code);
198
199
200 #endif // ! __V3VEE__
201
202 #endif