| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 1 | #ifndef __LINUX_KVM_H | 
 | 2 | #define __LINUX_KVM_H | 
 | 3 |  | 
 | 4 | /* | 
 | 5 |  * Userspace interface for /dev/kvm - kernel based virtual machine | 
 | 6 |  * | 
| Rusty Russell | dea8cae | 2007-07-17 23:12:26 +1000 | [diff] [blame] | 7 |  * Note: you must update KVM_API_VERSION if you change this interface. | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 8 |  */ | 
 | 9 |  | 
 | 10 | #include <asm/types.h> | 
 | 11 | #include <linux/ioctl.h> | 
 | 12 |  | 
| Avi Kivity | 2ff81f7 | 2007-04-29 16:25:49 +0300 | [diff] [blame] | 13 | #define KVM_API_VERSION 12 | 
| Avi Kivity | 0b76e20 | 2006-12-22 01:06:02 -0800 | [diff] [blame] | 14 |  | 
| Rusty Russell | 9eb829c | 2007-07-18 13:05:58 +1000 | [diff] [blame] | 15 | /* Architectural interrupt line count. */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 16 | #define KVM_NR_INTERRUPTS 256 | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 |  | 
| Avi Kivity | e820754 | 2007-03-30 16:54:30 +0300 | [diff] [blame] | 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 | }; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 36 |  | 
| Eddie Dong | 97222cc | 2007-09-12 10:58:04 +0300 | [diff] [blame] | 37 | /* for KVM_IRQ_LINE */ | 
| Eddie Dong | 85f455f | 2007-07-06 12:20:49 +0300 | [diff] [blame] | 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 |  | 
| He, Qing | 6bf9e96 | 2007-08-05 10:49:16 +0300 | [diff] [blame] | 48 | /* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */ | 
| He, Qing | 6ceb9d7 | 2007-07-26 11:05:18 +0300 | [diff] [blame] | 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 |  | 
| He, Qing | 6bf9e96 | 2007-08-05 10:49:16 +0300 | [diff] [blame] | 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 |  | 
| Avi Kivity | 8a45450 | 2007-10-10 14:03:16 +0200 | [diff] [blame] | 93 | #define KVM_IRQCHIP_PIC_MASTER   0 | 
 | 94 | #define KVM_IRQCHIP_PIC_SLAVE    1 | 
 | 95 | #define KVM_IRQCHIP_IOAPIC       2 | 
| He, Qing | 6ceb9d7 | 2007-07-26 11:05:18 +0300 | [diff] [blame] | 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; | 
| He, Qing | 6bf9e96 | 2007-08-05 10:49:16 +0300 | [diff] [blame] | 103 | 		struct kvm_ioapic_state ioapic; | 
| He, Qing | 6ceb9d7 | 2007-07-26 11:05:18 +0300 | [diff] [blame] | 104 | 	} chip; | 
 | 105 | }; | 
 | 106 |  | 
| Avi Kivity | 8a45450 | 2007-10-10 14:03:16 +0200 | [diff] [blame] | 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 | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 119 |  | 
| Avi Kivity | 9a2bb7f | 2007-02-22 12:58:31 +0200 | [diff] [blame] | 120 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 121 | struct kvm_run { | 
 | 122 | 	/* in */ | 
| Dor Laor | c1150d8 | 2007-01-05 16:36:24 -0800 | [diff] [blame] | 123 | 	__u8 request_interrupt_window; | 
| Avi Kivity | 02c8320 | 2007-04-29 15:02:17 +0300 | [diff] [blame] | 124 | 	__u8 padding1[7]; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 125 |  | 
 | 126 | 	/* out */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 127 | 	__u32 exit_reason; | 
| Dor Laor | c1150d8 | 2007-01-05 16:36:24 -0800 | [diff] [blame] | 128 | 	__u8 ready_for_interrupt_injection; | 
 | 129 | 	__u8 if_flag; | 
| Avi Kivity | 2ff81f7 | 2007-04-29 16:25:49 +0300 | [diff] [blame] | 130 | 	__u8 padding2[2]; | 
| Dor Laor | 5481034 | 2007-02-12 00:54:39 -0800 | [diff] [blame] | 131 |  | 
 | 132 | 	/* in (pre_kvm_run), out (post_kvm_run) */ | 
| Dor Laor | c1150d8 | 2007-01-05 16:36:24 -0800 | [diff] [blame] | 133 | 	__u64 cr8; | 
 | 134 | 	__u64 apic_base; | 
 | 135 |  | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 136 | 	union { | 
 | 137 | 		/* KVM_EXIT_UNKNOWN */ | 
 | 138 | 		struct { | 
| Avi Kivity | 8eb7d33 | 2007-03-04 14:17:08 +0200 | [diff] [blame] | 139 | 			__u64 hardware_exit_reason; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 140 | 		} hw; | 
| Avi Kivity | 8eb7d33 | 2007-03-04 14:17:08 +0200 | [diff] [blame] | 141 | 		/* KVM_EXIT_FAIL_ENTRY */ | 
 | 142 | 		struct { | 
 | 143 | 			__u64 hardware_entry_failure_reason; | 
 | 144 | 		} fail_entry; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 145 | 		/* KVM_EXIT_EXCEPTION */ | 
 | 146 | 		struct { | 
 | 147 | 			__u32 exception; | 
 | 148 | 			__u32 error_code; | 
 | 149 | 		} ex; | 
 | 150 | 		/* KVM_EXIT_IO */ | 
| Avi Kivity | 46fc147 | 2007-02-22 19:39:30 +0200 | [diff] [blame] | 151 | 		struct kvm_io { | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 152 | #define KVM_EXIT_IO_IN  0 | 
 | 153 | #define KVM_EXIT_IO_OUT 1 | 
 | 154 | 			__u8 direction; | 
 | 155 | 			__u8 size; /* bytes */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 156 | 			__u16 port; | 
| Avi Kivity | 039576c | 2007-03-20 12:46:50 +0200 | [diff] [blame] | 157 | 			__u32 count; | 
 | 158 | 			__u64 data_offset; /* relative to kvm_run start */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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; | 
| Avi Kivity | b4e63f5 | 2007-03-04 13:59:30 +0200 | [diff] [blame] | 169 | 		/* KVM_EXIT_HYPERCALL */ | 
 | 170 | 		struct { | 
| Jeff Dike | 519ef35 | 2007-07-16 15:24:47 -0400 | [diff] [blame] | 171 | 			__u64 nr; | 
| Avi Kivity | b4e63f5 | 2007-03-04 13:59:30 +0200 | [diff] [blame] | 172 | 			__u64 args[6]; | 
 | 173 | 			__u64 ret; | 
 | 174 | 			__u32 longmode; | 
 | 175 | 			__u32 pad; | 
 | 176 | 		} hypercall; | 
| Avi Kivity | 24cbc7e | 2007-07-17 11:45:55 +0300 | [diff] [blame] | 177 | 		/* Fix the size of the union. */ | 
 | 178 | 		char padding[256]; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 179 | 	}; | 
 | 180 | }; | 
 | 181 |  | 
 | 182 | /* for KVM_GET_REGS and KVM_SET_REGS */ | 
 | 183 | struct kvm_regs { | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 |  | 
| Avi Kivity | b883673 | 2007-04-01 16:34:31 +0300 | [diff] [blame] | 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 |  | 
| Eddie Dong | 96ad2cc | 2007-09-06 12:22:56 +0300 | [diff] [blame] | 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 |  | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 { | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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; | 
| Rusty Russell | 9eb829c | 2007-07-18 13:05:58 +1000 | [diff] [blame] | 238 | 	__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64]; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 { | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 249 | 	__u32 nmsrs; /* number of msrs in entries */ | 
| Avi Kivity | bccf215 | 2007-02-21 18:04:26 +0200 | [diff] [blame] | 250 | 	__u32 pad; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 265 |  | 
 | 266 | 	/* out */ | 
 | 267 | 	__u64 physical_address; | 
 | 268 | 	__u8  valid; | 
 | 269 | 	__u8  writeable; | 
 | 270 | 	__u8  usermode; | 
| Avi Kivity | 8cd1330 | 2007-02-12 00:54:41 -0800 | [diff] [blame] | 271 | 	__u8  pad[5]; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 272 | }; | 
 | 273 |  | 
 | 274 | /* for KVM_INTERRUPT */ | 
 | 275 | struct kvm_interrupt { | 
 | 276 | 	/* in */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 */ | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 289 | 	__u32 enabled; | 
| Avi Kivity | bccf215 | 2007-02-21 18:04:26 +0200 | [diff] [blame] | 290 | 	__u32 pad; | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 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 |  | 
| Avi Kivity | 06465c5 | 2007-02-28 20:46:53 +0200 | [diff] [blame] | 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 |  | 
| Avi Kivity | 1961d27 | 2007-03-05 19:46:05 +0200 | [diff] [blame] | 321 | /* for KVM_SET_SIGNAL_MASK */ | 
 | 322 | struct kvm_signal_mask { | 
 | 323 | 	__u32 len; | 
 | 324 | 	__u8  sigset[0]; | 
 | 325 | }; | 
 | 326 |  | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 327 | #define KVMIO 0xAE | 
 | 328 |  | 
| Avi Kivity | f17abe9 | 2007-02-21 19:28:04 +0200 | [diff] [blame] | 329 | /* | 
 | 330 |  * ioctls for /dev/kvm fds: | 
 | 331 |  */ | 
| Avi Kivity | 739872c | 2007-03-01 17:20:13 +0200 | [diff] [blame] | 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) | 
| Avi Kivity | 5d308f4 | 2007-03-01 17:56:20 +0200 | [diff] [blame] | 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) | 
| Avi Kivity | 07c45a3 | 2007-03-07 13:05:38 +0200 | [diff] [blame] | 340 | /* | 
 | 341 |  * Get size for mmap(vcpu_fd) | 
 | 342 |  */ | 
 | 343 | #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */ | 
| Avi Kivity | f17abe9 | 2007-02-21 19:28:04 +0200 | [diff] [blame] | 344 |  | 
 | 345 | /* | 
| Eddie Dong | 85f455f | 2007-07-06 12:20:49 +0300 | [diff] [blame] | 346 |  * Extension capability list. | 
 | 347 |  */ | 
 | 348 | #define KVM_CAP_IRQCHIP	  0 | 
| Eddie Dong | b6958ce | 2007-07-18 12:15:21 +0300 | [diff] [blame] | 349 | #define KVM_CAP_HLT	  1 | 
| Eddie Dong | 85f455f | 2007-07-06 12:20:49 +0300 | [diff] [blame] | 350 |  | 
 | 351 | /* | 
| Avi Kivity | f17abe9 | 2007-02-21 19:28:04 +0200 | [diff] [blame] | 352 |  * ioctls for VM fds | 
 | 353 |  */ | 
| Avi Kivity | 739872c | 2007-03-01 17:20:13 +0200 | [diff] [blame] | 354 | #define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region) | 
| Avi Kivity | bccf215 | 2007-02-21 18:04:26 +0200 | [diff] [blame] | 355 | /* | 
 | 356 |  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns | 
 | 357 |  * a vcpu fd. | 
 | 358 |  */ | 
| Avi Kivity | 739872c | 2007-03-01 17:20:13 +0200 | [diff] [blame] | 359 | #define KVM_CREATE_VCPU           _IO(KVMIO,  0x41) | 
 | 360 | #define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log) | 
| Avi Kivity | e820754 | 2007-03-30 16:54:30 +0300 | [diff] [blame] | 361 | #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias) | 
| Eddie Dong | 85f455f | 2007-07-06 12:20:49 +0300 | [diff] [blame] | 362 | /* Device model IOC */ | 
 | 363 | #define KVM_CREATE_IRQCHIP	  _IO(KVMIO,  0x60) | 
| Eddie Dong | 97222cc | 2007-09-12 10:58:04 +0300 | [diff] [blame] | 364 | #define KVM_IRQ_LINE		  _IOW(KVMIO, 0x61, struct kvm_irq_level) | 
| He, Qing | 6ceb9d7 | 2007-07-26 11:05:18 +0300 | [diff] [blame] | 365 | #define KVM_GET_IRQCHIP		  _IOWR(KVMIO, 0x62, struct kvm_irqchip) | 
 | 366 | #define KVM_SET_IRQCHIP		  _IOR(KVMIO,  0x63, struct kvm_irqchip) | 
| Avi Kivity | bccf215 | 2007-02-21 18:04:26 +0200 | [diff] [blame] | 367 |  | 
 | 368 | /* | 
 | 369 |  * ioctls for vcpu fds | 
 | 370 |  */ | 
| Avi Kivity | 739872c | 2007-03-01 17:20:13 +0200 | [diff] [blame] | 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) | 
| Avi Kivity | 1961d27 | 2007-03-05 19:46:05 +0200 | [diff] [blame] | 382 | #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask) | 
| Avi Kivity | b883673 | 2007-04-01 16:34:31 +0300 | [diff] [blame] | 383 | #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu) | 
 | 384 | #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu) | 
| Eddie Dong | 96ad2cc | 2007-09-06 12:22:56 +0300 | [diff] [blame] | 385 | #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state) | 
 | 386 | #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state) | 
| Avi Kivity | 6aa8b73 | 2006-12-10 02:21:36 -0800 | [diff] [blame] | 387 |  | 
 | 388 | #endif |