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