]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - include/linux/kvm.h
KVM: Add get/set irqchip ioctls for in-kernel PIC live migration support
[linux-2.6-omap-h63xx.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 / 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 enum kvm_irqchip_id {
69         KVM_IRQCHIP_PIC_MASTER   = 0,
70         KVM_IRQCHIP_PIC_SLAVE    = 1,
71 };
72
73 struct kvm_irqchip {
74         __u32 chip_id;
75         __u32 pad;
76         union {
77                 char dummy[512];  /* reserving space */
78                 struct kvm_pic_state pic;
79         } chip;
80 };
81
82 enum kvm_exit_reason {
83         KVM_EXIT_UNKNOWN          = 0,
84         KVM_EXIT_EXCEPTION        = 1,
85         KVM_EXIT_IO               = 2,
86         KVM_EXIT_HYPERCALL        = 3,
87         KVM_EXIT_DEBUG            = 4,
88         KVM_EXIT_HLT              = 5,
89         KVM_EXIT_MMIO             = 6,
90         KVM_EXIT_IRQ_WINDOW_OPEN  = 7,
91         KVM_EXIT_SHUTDOWN         = 8,
92         KVM_EXIT_FAIL_ENTRY       = 9,
93         KVM_EXIT_INTR             = 10,
94         KVM_EXIT_SET_TPR          = 11
95 };
96
97 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
98 struct kvm_run {
99         /* in */
100         __u8 request_interrupt_window;
101         __u8 padding1[7];
102
103         /* out */
104         __u32 exit_reason;
105         __u8 ready_for_interrupt_injection;
106         __u8 if_flag;
107         __u8 padding2[2];
108
109         /* in (pre_kvm_run), out (post_kvm_run) */
110         __u64 cr8;
111         __u64 apic_base;
112
113         union {
114                 /* KVM_EXIT_UNKNOWN */
115                 struct {
116                         __u64 hardware_exit_reason;
117                 } hw;
118                 /* KVM_EXIT_FAIL_ENTRY */
119                 struct {
120                         __u64 hardware_entry_failure_reason;
121                 } fail_entry;
122                 /* KVM_EXIT_EXCEPTION */
123                 struct {
124                         __u32 exception;
125                         __u32 error_code;
126                 } ex;
127                 /* KVM_EXIT_IO */
128                 struct kvm_io {
129 #define KVM_EXIT_IO_IN  0
130 #define KVM_EXIT_IO_OUT 1
131                         __u8 direction;
132                         __u8 size; /* bytes */
133                         __u16 port;
134                         __u32 count;
135                         __u64 data_offset; /* relative to kvm_run start */
136                 } io;
137                 struct {
138                 } debug;
139                 /* KVM_EXIT_MMIO */
140                 struct {
141                         __u64 phys_addr;
142                         __u8  data[8];
143                         __u32 len;
144                         __u8  is_write;
145                 } mmio;
146                 /* KVM_EXIT_HYPERCALL */
147                 struct {
148                         __u64 nr;
149                         __u64 args[6];
150                         __u64 ret;
151                         __u32 longmode;
152                         __u32 pad;
153                 } hypercall;
154                 /* Fix the size of the union. */
155                 char padding[256];
156         };
157 };
158
159 /* for KVM_GET_REGS and KVM_SET_REGS */
160 struct kvm_regs {
161         /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
162         __u64 rax, rbx, rcx, rdx;
163         __u64 rsi, rdi, rsp, rbp;
164         __u64 r8,  r9,  r10, r11;
165         __u64 r12, r13, r14, r15;
166         __u64 rip, rflags;
167 };
168
169 /* for KVM_GET_FPU and KVM_SET_FPU */
170 struct kvm_fpu {
171         __u8  fpr[8][16];
172         __u16 fcw;
173         __u16 fsw;
174         __u8  ftwx;  /* in fxsave format */
175         __u8  pad1;
176         __u16 last_opcode;
177         __u64 last_ip;
178         __u64 last_dp;
179         __u8  xmm[16][16];
180         __u32 mxcsr;
181         __u32 pad2;
182 };
183
184 struct kvm_segment {
185         __u64 base;
186         __u32 limit;
187         __u16 selector;
188         __u8  type;
189         __u8  present, dpl, db, s, l, g, avl;
190         __u8  unusable;
191         __u8  padding;
192 };
193
194 struct kvm_dtable {
195         __u64 base;
196         __u16 limit;
197         __u16 padding[3];
198 };
199
200 /* for KVM_GET_SREGS and KVM_SET_SREGS */
201 struct kvm_sregs {
202         /* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */
203         struct kvm_segment cs, ds, es, fs, gs, ss;
204         struct kvm_segment tr, ldt;
205         struct kvm_dtable gdt, idt;
206         __u64 cr0, cr2, cr3, cr4, cr8;
207         __u64 efer;
208         __u64 apic_base;
209         __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
210 };
211
212 struct kvm_msr_entry {
213         __u32 index;
214         __u32 reserved;
215         __u64 data;
216 };
217
218 /* for KVM_GET_MSRS and KVM_SET_MSRS */
219 struct kvm_msrs {
220         __u32 nmsrs; /* number of msrs in entries */
221         __u32 pad;
222
223         struct kvm_msr_entry entries[0];
224 };
225
226 /* for KVM_GET_MSR_INDEX_LIST */
227 struct kvm_msr_list {
228         __u32 nmsrs; /* number of msrs in entries */
229         __u32 indices[0];
230 };
231
232 /* for KVM_TRANSLATE */
233 struct kvm_translation {
234         /* in */
235         __u64 linear_address;
236
237         /* out */
238         __u64 physical_address;
239         __u8  valid;
240         __u8  writeable;
241         __u8  usermode;
242         __u8  pad[5];
243 };
244
245 /* for KVM_INTERRUPT */
246 struct kvm_interrupt {
247         /* in */
248         __u32 irq;
249 };
250
251 struct kvm_breakpoint {
252         __u32 enabled;
253         __u32 padding;
254         __u64 address;
255 };
256
257 /* for KVM_DEBUG_GUEST */
258 struct kvm_debug_guest {
259         /* int */
260         __u32 enabled;
261         __u32 pad;
262         struct kvm_breakpoint breakpoints[4];
263         __u32 singlestep;
264 };
265
266 /* for KVM_GET_DIRTY_LOG */
267 struct kvm_dirty_log {
268         __u32 slot;
269         __u32 padding;
270         union {
271                 void __user *dirty_bitmap; /* one bit per page */
272                 __u64 padding;
273         };
274 };
275
276 struct kvm_cpuid_entry {
277         __u32 function;
278         __u32 eax;
279         __u32 ebx;
280         __u32 ecx;
281         __u32 edx;
282         __u32 padding;
283 };
284
285 /* for KVM_SET_CPUID */
286 struct kvm_cpuid {
287         __u32 nent;
288         __u32 padding;
289         struct kvm_cpuid_entry entries[0];
290 };
291
292 /* for KVM_SET_SIGNAL_MASK */
293 struct kvm_signal_mask {
294         __u32 len;
295         __u8  sigset[0];
296 };
297
298 #define KVMIO 0xAE
299
300 /*
301  * ioctls for /dev/kvm fds:
302  */
303 #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
304 #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
305 #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
306 /*
307  * Check if a kvm extension is available.  Argument is extension number,
308  * return is 1 (yes) or 0 (no, sorry).
309  */
310 #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
311 /*
312  * Get size for mmap(vcpu_fd)
313  */
314 #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
315
316 /*
317  * Extension capability list.
318  */
319 #define KVM_CAP_IRQCHIP   0
320 #define KVM_CAP_HLT       1
321
322 /*
323  * ioctls for VM fds
324  */
325 #define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
326 /*
327  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
328  * a vcpu fd.
329  */
330 #define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
331 #define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
332 #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
333 /* Device model IOC */
334 #define KVM_CREATE_IRQCHIP        _IO(KVMIO,  0x60)
335 #define KVM_IRQ_LINE              _IOW(KVMIO, 0x61, struct kvm_irq_level)
336 #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
337 #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
338
339 /*
340  * ioctls for vcpu fds
341  */
342 #define KVM_RUN                   _IO(KVMIO,   0x80)
343 #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
344 #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
345 #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
346 #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
347 #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
348 #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
349 #define KVM_DEBUG_GUEST           _IOW(KVMIO,  0x87, struct kvm_debug_guest)
350 #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
351 #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
352 #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
353 #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
354 #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
355 #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
356
357 #endif