Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
kvm.h
Go to the documentation of this file.
1 #ifndef _ASM_X86_KVM_H
2 #define _ASM_X86_KVM_H
3 
4 /*
5  * KVM x86 specific structures and definitions
6  *
7  */
8 
9 #include <linux/types.h>
10 #include <linux/ioctl.h>
11 
12 #define DE_VECTOR 0
13 #define DB_VECTOR 1
14 #define BP_VECTOR 3
15 #define OF_VECTOR 4
16 #define BR_VECTOR 5
17 #define UD_VECTOR 6
18 #define NM_VECTOR 7
19 #define DF_VECTOR 8
20 #define TS_VECTOR 10
21 #define NP_VECTOR 11
22 #define SS_VECTOR 12
23 #define GP_VECTOR 13
24 #define PF_VECTOR 14
25 #define MF_VECTOR 16
26 #define MC_VECTOR 18
27 
28 /* Select x86 specific features in <linux/kvm.h> */
29 #define __KVM_HAVE_PIT
30 #define __KVM_HAVE_IOAPIC
31 #define __KVM_HAVE_IRQ_LINE
32 #define __KVM_HAVE_DEVICE_ASSIGNMENT
33 #define __KVM_HAVE_MSI
34 #define __KVM_HAVE_USER_NMI
35 #define __KVM_HAVE_GUEST_DEBUG
36 #define __KVM_HAVE_MSIX
37 #define __KVM_HAVE_MCE
38 #define __KVM_HAVE_PIT_STATE2
39 #define __KVM_HAVE_XEN_HVM
40 #define __KVM_HAVE_VCPU_EVENTS
41 #define __KVM_HAVE_DEBUGREGS
42 #define __KVM_HAVE_XSAVE
43 #define __KVM_HAVE_XCRS
44 #define __KVM_HAVE_READONLY_MEM
45 
46 /* Architectural interrupt line count. */
47 #define KVM_NR_INTERRUPTS 256
48 
50  __u32 slot; /* this has a different namespace than memory slots */
55 };
56 
57 /* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
58 struct kvm_pic_state {
59  __u8 last_irr; /* edge detection */
60  __u8 irr; /* interrupt request register */
61  __u8 imr; /* interrupt mask register */
62  __u8 isr; /* interrupt service register */
63  __u8 priority_add; /* highest irq priority */
72  __u8 init4; /* true if 4 byte init */
73  __u8 elcr; /* PIIX edge/trigger selection */
75 };
76 
77 #define KVM_IOAPIC_NUM_PINS 24
78 struct kvm_ioapic_state {
81  __u32 id;
82  __u32 irr;
83  __u32 pad;
84  union {
85  __u64 bits;
86  struct {
87  __u8 vector;
89  __u8 dest_mode:1;
91  __u8 polarity:1;
92  __u8 remote_irr:1;
93  __u8 trig_mode:1;
94  __u8 mask:1;
95  __u8 reserve:7;
96  __u8 reserved[4];
97  __u8 dest_id;
98  } fields;
100 };
101 
102 #define KVM_IRQCHIP_PIC_MASTER 0
103 #define KVM_IRQCHIP_PIC_SLAVE 1
104 #define KVM_IRQCHIP_IOAPIC 2
105 #define KVM_NR_IRQCHIPS 3
106 
107 /* for KVM_GET_REGS and KVM_SET_REGS */
108 struct kvm_regs {
109  /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
115 };
116 
117 /* for KVM_GET_LAPIC and KVM_SET_LAPIC */
118 #define KVM_APIC_REG_SIZE 0x400
121 };
122 
123 struct kvm_segment {
131 };
132 
133 struct kvm_dtable {
137 };
138 
139 
140 /* for KVM_GET_SREGS and KVM_SET_SREGS */
141 struct kvm_sregs {
142  /* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */
143  struct kvm_segment cs, ds, es, fs, gs, ss;
144  struct kvm_segment tr, ldt;
145  struct kvm_dtable gdt, idt;
150 };
151 
152 /* for KVM_GET_FPU and KVM_SET_FPU */
153 struct kvm_fpu {
154  __u8 fpr[8][16];
157  __u8 ftwx; /* in fxsave format */
162  __u8 xmm[16][16];
165 };
166 
171 };
172 
173 /* for KVM_GET_MSRS and KVM_SET_MSRS */
174 struct kvm_msrs {
175  __u32 nmsrs; /* number of msrs in entries */
177 
179 };
180 
181 /* for KVM_GET_MSR_INDEX_LIST */
182 struct kvm_msr_list {
183  __u32 nmsrs; /* number of msrs in entries */
185 };
186 
187 
189  __u32 function;
195 };
196 
197 /* for KVM_SET_CPUID */
198 struct kvm_cpuid {
202 };
203 
205  __u32 function;
213 };
214 
215 #define KVM_CPUID_FLAG_SIGNIFCANT_INDEX 1
216 #define KVM_CPUID_FLAG_STATEFUL_FUNC 2
217 #define KVM_CPUID_FLAG_STATE_READ_NEXT 4
218 
219 /* for KVM_SET_CPUID2 */
220 struct kvm_cpuid2 {
224 };
225 
226 /* for KVM_GET_PIT and KVM_SET_PIT */
228  __u32 count; /* can be 65536 */
241 };
242 
243 struct kvm_debug_exit_arch {
249 };
250 
251 #define KVM_GUESTDBG_USE_SW_BP 0x00010000
252 #define KVM_GUESTDBG_USE_HW_BP 0x00020000
253 #define KVM_GUESTDBG_INJECT_DB 0x00040000
254 #define KVM_GUESTDBG_INJECT_BP 0x00080000
255 
256 /* for KVM_SET_GUEST_DEBUG */
257 struct kvm_guest_debug_arch {
259 };
260 
263 };
264 
265 #define KVM_PIT_FLAGS_HPET_LEGACY 0x00000001
266 
271 };
272 
276 };
277 
278 /* When set in flags, include corresponding fields on KVM_SET_VCPU_EVENTS */
279 #define KVM_VCPUEVENT_VALID_NMI_PENDING 0x00000001
280 #define KVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002
281 #define KVM_VCPUEVENT_VALID_SHADOW 0x00000004
282 
283 /* Interrupt shadow states */
284 #define KVM_X86_SHADOW_INT_MOV_SS 0x01
285 #define KVM_X86_SHADOW_INT_STI 0x02
286 
287 /* for KVM_GET/SET_VCPU_EVENTS */
289  struct {
295  } exception;
296  struct {
297  __u8 injected;
298  __u8 nr;
301  } interrupt;
302  struct {
303  __u8 injected;
306  __u8 pad;
307  } nmi;
311 };
312 
313 /* for KVM_GET/SET_DEBUGREGS */
315  __u64 db[4];
320 };
321 
322 /* for KVM_CAP_XSAVE */
323 struct kvm_xsave {
324  __u32 region[1024];
325 };
326 
327 #define KVM_MAX_XCRS 16
328 
329 struct kvm_xcr {
333 };
334 
335 struct kvm_xcrs {
340 };
341 
342 /* definition of registers in kvm_run */
343 struct kvm_sync_regs {
344 };
345 
346 #endif /* _ASM_X86_KVM_H */