KVM: in-kernel LAPIC save and restore support
[linux-2.6.git] / include / linux / kvm.h
1 #ifndef __LINUX_KVM_H
2 #define __LINUX_KVM_H
3
4 /*
5  * Userspace interface for /dev/kvm - kernel based virtual machine
6  *
7  * Note: you must update KVM_API_VERSION if you change this interface.
8  */
9
10 #include <asm/types.h>
11 #include <linux/ioctl.h>
12
13 #define KVM_API_VERSION 12
14
15 /* Architectural interrupt line count. */
16 #define KVM_NR_INTERRUPTS 256
17
18 /* for KVM_CREATE_MEMORY_REGION */
19 struct kvm_memory_region {
20         __u32 slot;
21         __u32 flags;
22         __u64 guest_phys_addr;
23         __u64 memory_size; /* bytes */
24 };
25
26 /* for kvm_memory_region::flags */
27 #define KVM_MEM_LOG_DIRTY_PAGES  1UL
28
29 struct kvm_memory_alias {
30         __u32 slot;  /* this has a different namespace than memory slots */
31         __u32 flags;
32         __u64 guest_phys_addr;
33         __u64 memory_size;
34         __u64 target_phys_addr;
35 };
36
37 /* for KVM_IRQ_LINE */
38 struct kvm_irq_level {
39         /*
40          * ACPI gsi notion of irq.
41          * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
42          * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
43          */
44         __u32 irq;
45         __u32 level;
46 };
47
48 /* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
49 struct kvm_pic_state {
50         __u8 last_irr;  /* edge detection */
51         __u8 irr;               /* interrupt request register */
52         __u8 imr;               /* interrupt mask register */
53         __u8 isr;               /* interrupt service register */
54         __u8 priority_add;      /* highest irq priority */
55         __u8 irq_base;
56         __u8 read_reg_select;
57         __u8 poll;
58         __u8 special_mask;
59         __u8 init_state;
60         __u8 auto_eoi;
61         __u8 rotate_on_auto_eoi;
62         __u8 special_fully_nested_mode;
63         __u8 init4;             /* true if 4 byte init */
64         __u8 elcr;              /* PIIX edge/trigger selection */
65         __u8 elcr_mask;
66 };
67
68 #define KVM_IOAPIC_NUM_PINS  24
69 struct kvm_ioapic_state {
70         __u64 base_address;
71         __u32 ioregsel;
72         __u32 id;
73         __u32 irr;
74         __u32 pad;
75         union {
76                 __u64 bits;
77                 struct {
78                         __u8 vector;
79                         __u8 delivery_mode:3;
80                         __u8 dest_mode:1;
81                         __u8 delivery_status:1;
82                         __u8 polarity:1;
83                         __u8 remote_irr:1;
84                         __u8 trig_mode:1;
85                         __u8 mask:1;
86                         __u8 reserve:7;
87                         __u8 reserved[4];
88                         __u8 dest_id;
89                 } fields;
90         } redirtbl[KVM_IOAPIC_NUM_PINS];
91 };
92
93 enum kvm_irqchip_id {
94         KVM_IRQCHIP_PIC_MASTER   = 0,
95         KVM_IRQCHIP_PIC_SLAVE    = 1,
96         KVM_IRQCHIP_IOAPIC       = 2,
97 };
98
99 struct kvm_irqchip {
100         __u32 chip_id;
101         __u32 pad;
102         union {
103                 char dummy[512];  /* reserving space */
104                 struct kvm_pic_state pic;
105                 struct kvm_ioapic_state ioapic;
106         } chip;
107 };
108
109 enum kvm_exit_reason {
110         KVM_EXIT_UNKNOWN          = 0,
111         KVM_EXIT_EXCEPTION        = 1,
112         KVM_EXIT_IO               = 2,
113         KVM_EXIT_HYPERCALL        = 3,
114         KVM_EXIT_DEBUG            = 4,
115         KVM_EXIT_HLT              = 5,
116         KVM_EXIT_MMIO             = 6,
117         KVM_EXIT_IRQ_WINDOW_OPEN  = 7,
118         KVM_EXIT_SHUTDOWN         = 8,
119         KVM_EXIT_FAIL_ENTRY       = 9,
120         KVM_EXIT_INTR             = 10,
121         KVM_EXIT_SET_TPR          = 11
122 };
123
124 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
125 struct kvm_run {
126         /* in */
127         __u8 request_interrupt_window;
128         __u8 padding1[7];
129
130         /* out */
131         __u32 exit_reason;
132         __u8 ready_for_interrupt_injection;
133         __u8 if_flag;
134         __u8 padding2[2];
135
136         /* in (pre_kvm_run), out (post_kvm_run) */
137         __u64 cr8;
138         __u64 apic_base;
139
140         union {
141                 /* KVM_EXIT_UNKNOWN */
142                 struct {
143                         __u64 hardware_exit_reason;
144                 } hw;
145                 /* KVM_EXIT_FAIL_ENTRY */
146                 struct {
147                         __u64 hardware_entry_failure_reason;
148                 } fail_entry;
149                 /* KVM_EXIT_EXCEPTION */
150                 struct {
151                         __u32 exception;
152                         __u32 error_code;
153                 } ex;
154                 /* KVM_EXIT_IO */
155                 struct kvm_io {
156 #define KVM_EXIT_IO_IN  0
157 #define KVM_EXIT_IO_OUT 1
158                         __u8 direction;
159                         __u8 size; /* bytes */
160                         __u16 port;
161                         __u32 count;
162                         __u64 data_offset; /* relative to kvm_run start */
163                 } io;
164                 struct {
165                 } debug;
166                 /* KVM_EXIT_MMIO */
167                 struct {
168                         __u64 phys_addr;
169                         __u8  data[8];
170                         __u32 len;
171                         __u8  is_write;
172                 } mmio;
173                 /* KVM_EXIT_HYPERCALL */
174                 struct {
175                         __u64 nr;
176                         __u64 args[6];
177                         __u64 ret;
178                         __u32 longmode;
179                         __u32 pad;
180                 } hypercall;
181                 /* Fix the size of the union. */
182                 char padding[256];
183         };
184 };
185
186 /* for KVM_GET_REGS and KVM_SET_REGS */
187 struct kvm_regs {
188         /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
189         __u64 rax, rbx, rcx, rdx;
190         __u64 rsi, rdi, rsp, rbp;
191         __u64 r8,  r9,  r10, r11;
192         __u64 r12, r13, r14, r15;
193         __u64 rip, rflags;
194 };
195
196 /* for KVM_GET_FPU and KVM_SET_FPU */
197 struct kvm_fpu {
198         __u8  fpr[8][16];
199         __u16 fcw;
200         __u16 fsw;
201         __u8  ftwx;  /* in fxsave format */
202         __u8  pad1;
203         __u16 last_opcode;
204         __u64 last_ip;
205         __u64 last_dp;
206         __u8  xmm[16][16];
207         __u32 mxcsr;
208         __u32 pad2;
209 };
210
211 /* for KVM_GET_LAPIC and KVM_SET_LAPIC */
212 #define KVM_APIC_REG_SIZE 0x400
213 struct kvm_lapic_state {
214         char regs[KVM_APIC_REG_SIZE];
215 };
216
217 struct kvm_segment {
218         __u64 base;
219         __u32 limit;
220         __u16 selector;
221         __u8  type;
222         __u8  present, dpl, db, s, l, g, avl;
223         __u8  unusable;
224         __u8  padding;
225 };
226
227 struct kvm_dtable {
228         __u64 base;
229         __u16 limit;
230         __u16 padding[3];
231 };
232
233 /* for KVM_GET_SREGS and KVM_SET_SREGS */
234 struct kvm_sregs {
235         /* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */
236         struct kvm_segment cs, ds, es, fs, gs, ss;
237         struct kvm_segment tr, ldt;
238         struct kvm_dtable gdt, idt;
239         __u64 cr0, cr2, cr3, cr4, cr8;
240         __u64 efer;
241         __u64 apic_base;
242         __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
243 };
244
245 struct kvm_msr_entry {
246         __u32 index;
247         __u32 reserved;
248         __u64 data;
249 };
250
251 /* for KVM_GET_MSRS and KVM_SET_MSRS */
252 struct kvm_msrs {
253         __u32 nmsrs; /* number of msrs in entries */
254         __u32 pad;
255
256         struct kvm_msr_entry entries[0];
257 };
258
259 /* for KVM_GET_MSR_INDEX_LIST */
260 struct kvm_msr_list {
261         __u32 nmsrs; /* number of msrs in entries */
262         __u32 indices[0];
263 };
264
265 /* for KVM_TRANSLATE */
266 struct kvm_translation {
267         /* in */
268         __u64 linear_address;
269
270         /* out */
271         __u64 physical_address;
272         __u8  valid;
273         __u8  writeable;
274         __u8  usermode;
275         __u8  pad[5];
276 };
277
278 /* for KVM_INTERRUPT */
279 struct kvm_interrupt {
280         /* in */
281         __u32 irq;
282 };
283
284 struct kvm_breakpoint {
285         __u32 enabled;
286         __u32 padding;
287         __u64 address;
288 };
289
290 /* for KVM_DEBUG_GUEST */
291 struct kvm_debug_guest {
292         /* int */
293         __u32 enabled;
294         __u32 pad;
295         struct kvm_breakpoint breakpoints[4];
296         __u32 singlestep;
297 };
298
299 /* for KVM_GET_DIRTY_LOG */
300 struct kvm_dirty_log {
301         __u32 slot;
302         __u32 padding;
303         union {
304                 void __user *dirty_bitmap; /* one bit per page */
305                 __u64 padding;
306         };
307 };
308
309 struct kvm_cpuid_entry {
310         __u32 function;
311         __u32 eax;
312         __u32 ebx;
313         __u32 ecx;
314         __u32 edx;
315         __u32 padding;
316 };
317
318 /* for KVM_SET_CPUID */
319 struct kvm_cpuid {
320         __u32 nent;
321         __u32 padding;
322         struct kvm_cpuid_entry entries[0];
323 };
324
325 /* for KVM_SET_SIGNAL_MASK */
326 struct kvm_signal_mask {
327         __u32 len;
328         __u8  sigset[0];
329 };
330
331 #define KVMIO 0xAE
332
333 /*
334  * ioctls for /dev/kvm fds:
335  */
336 #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
337 #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
338 #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
339 /*
340  * Check if a kvm extension is available.  Argument is extension number,
341  * return is 1 (yes) or 0 (no, sorry).
342  */
343 #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
344 /*
345  * Get size for mmap(vcpu_fd)
346  */
347 #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
348
349 /*
350  * Extension capability list.
351  */
352 #define KVM_CAP_IRQCHIP   0
353 #define KVM_CAP_HLT       1
354
355 /*
356  * ioctls for VM fds
357  */
358 #define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
359 /*
360  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
361  * a vcpu fd.
362  */
363 #define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
364 #define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
365 #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
366 /* Device model IOC */
367 #define KVM_CREATE_IRQCHIP        _IO(KVMIO,  0x60)
368 #define KVM_IRQ_LINE              _IOW(KVMIO, 0x61, struct kvm_irq_level)
369 #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
370 #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
371
372 /*
373  * ioctls for vcpu fds
374  */
375 #define KVM_RUN                   _IO(KVMIO,   0x80)
376 #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
377 #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
378 #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
379 #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
380 #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
381 #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
382 #define KVM_DEBUG_GUEST           _IOW(KVMIO,  0x87, struct kvm_debug_guest)
383 #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
384 #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
385 #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
386 #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
387 #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
388 #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
389 #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
390 #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
391
392 #endif