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 #include <asm/kvm.h> 13 14 #define KVM_API_VERSION 12 15 16 /* for KVM_TRACE_ENABLE */ 17 struct kvm_user_trace_setup { 18 __u32 buf_size; /* sub_buffer size of each per-cpu */ 19 __u32 buf_nr; /* the number of sub_buffers of each per-cpu */ 20 }; 21 22 /* for KVM_CREATE_MEMORY_REGION */ 23 struct kvm_memory_region { 24 __u32 slot; 25 __u32 flags; 26 __u64 guest_phys_addr; 27 __u64 memory_size; /* bytes */ 28 }; 29 30 /* for KVM_SET_USER_MEMORY_REGION */ 31 struct kvm_userspace_memory_region { 32 __u32 slot; 33 __u32 flags; 34 __u64 guest_phys_addr; 35 __u64 memory_size; /* bytes */ 36 __u64 userspace_addr; /* start of the userspace allocated memory */ 37 }; 38 39 /* for kvm_memory_region::flags */ 40 #define KVM_MEM_LOG_DIRTY_PAGES 1UL 41 42 43 /* for KVM_IRQ_LINE */ 44 struct kvm_irq_level { 45 /* 46 * ACPI gsi notion of irq. 47 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. 48 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. 49 */ 50 __u32 irq; 51 __u32 level; 52 }; 53 54 55 struct kvm_irqchip { 56 __u32 chip_id; 57 __u32 pad; 58 union { 59 char dummy[512]; /* reserving space */ 60 #ifdef CONFIG_X86 61 struct kvm_pic_state pic; 62 #endif 63 #if defined(CONFIG_X86) || defined(CONFIG_IA64) 64 struct kvm_ioapic_state ioapic; 65 #endif 66 } chip; 67 }; 68 69 #define KVM_EXIT_UNKNOWN 0 70 #define KVM_EXIT_EXCEPTION 1 71 #define KVM_EXIT_IO 2 72 #define KVM_EXIT_HYPERCALL 3 73 #define KVM_EXIT_DEBUG 4 74 #define KVM_EXIT_HLT 5 75 #define KVM_EXIT_MMIO 6 76 #define KVM_EXIT_IRQ_WINDOW_OPEN 7 77 #define KVM_EXIT_SHUTDOWN 8 78 #define KVM_EXIT_FAIL_ENTRY 9 79 #define KVM_EXIT_INTR 10 80 #define KVM_EXIT_SET_TPR 11 81 #define KVM_EXIT_TPR_ACCESS 12 82 #define KVM_EXIT_S390_SIEIC 13 83 #define KVM_EXIT_S390_RESET 14 84 #define KVM_EXIT_DCR 15 85 86 /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ 87 struct kvm_run { 88 /* in */ 89 __u8 request_interrupt_window; 90 __u8 padding1[7]; 91 92 /* out */ 93 __u32 exit_reason; 94 __u8 ready_for_interrupt_injection; 95 __u8 if_flag; 96 __u8 padding2[2]; 97 98 /* in (pre_kvm_run), out (post_kvm_run) */ 99 __u64 cr8; 100 __u64 apic_base; 101 102 union { 103 /* KVM_EXIT_UNKNOWN */ 104 struct { 105 __u64 hardware_exit_reason; 106 } hw; 107 /* KVM_EXIT_FAIL_ENTRY */ 108 struct { 109 __u64 hardware_entry_failure_reason; 110 } fail_entry; 111 /* KVM_EXIT_EXCEPTION */ 112 struct { 113 __u32 exception; 114 __u32 error_code; 115 } ex; 116 /* KVM_EXIT_IO */ 117 struct kvm_io { 118 #define KVM_EXIT_IO_IN 0 119 #define KVM_EXIT_IO_OUT 1 120 __u8 direction; 121 __u8 size; /* bytes */ 122 __u16 port; 123 __u32 count; 124 __u64 data_offset; /* relative to kvm_run start */ 125 } io; 126 struct { 127 } debug; 128 /* KVM_EXIT_MMIO */ 129 struct { 130 __u64 phys_addr; 131 __u8 data[8]; 132 __u32 len; 133 __u8 is_write; 134 } mmio; 135 /* KVM_EXIT_HYPERCALL */ 136 struct { 137 __u64 nr; 138 __u64 args[6]; 139 __u64 ret; 140 __u32 longmode; 141 __u32 pad; 142 } hypercall; 143 /* KVM_EXIT_TPR_ACCESS */ 144 struct { 145 __u64 rip; 146 __u32 is_write; 147 __u32 pad; 148 } tpr_access; 149 /* KVM_EXIT_S390_SIEIC */ 150 struct { 151 __u8 icptcode; 152 __u64 mask; /* psw upper half */ 153 __u64 addr; /* psw lower half */ 154 __u16 ipa; 155 __u32 ipb; 156 } s390_sieic; 157 /* KVM_EXIT_S390_RESET */ 158 #define KVM_S390_RESET_POR 1 159 #define KVM_S390_RESET_CLEAR 2 160 #define KVM_S390_RESET_SUBSYSTEM 4 161 #define KVM_S390_RESET_CPU_INIT 8 162 #define KVM_S390_RESET_IPL 16 163 __u64 s390_reset_flags; 164 /* KVM_EXIT_DCR */ 165 struct { 166 __u32 dcrn; 167 __u32 data; 168 __u8 is_write; 169 } dcr; 170 /* Fix the size of the union. */ 171 char padding[256]; 172 }; 173 }; 174 175 /* for KVM_TRANSLATE */ 176 struct kvm_translation { 177 /* in */ 178 __u64 linear_address; 179 180 /* out */ 181 __u64 physical_address; 182 __u8 valid; 183 __u8 writeable; 184 __u8 usermode; 185 __u8 pad[5]; 186 }; 187 188 /* for KVM_INTERRUPT */ 189 struct kvm_interrupt { 190 /* in */ 191 __u32 irq; 192 }; 193 194 struct kvm_breakpoint { 195 __u32 enabled; 196 __u32 padding; 197 __u64 address; 198 }; 199 200 /* for KVM_DEBUG_GUEST */ 201 struct kvm_debug_guest { 202 /* int */ 203 __u32 enabled; 204 __u32 pad; 205 struct kvm_breakpoint breakpoints[4]; 206 __u32 singlestep; 207 }; 208 209 /* for KVM_GET_DIRTY_LOG */ 210 struct kvm_dirty_log { 211 __u32 slot; 212 __u32 padding; 213 union { 214 void *dirty_bitmap; /* one bit per page */ 215 __u64 padding; 216 }; 217 }; 218 219 /* for KVM_SET_SIGNAL_MASK */ 220 struct kvm_signal_mask { 221 __u32 len; 222 __u8 sigset[0]; 223 }; 224 225 /* for KVM_TPR_ACCESS_REPORTING */ 226 struct kvm_tpr_access_ctl { 227 __u32 enabled; 228 __u32 flags; 229 __u32 reserved[8]; 230 }; 231 232 /* for KVM_SET_VAPIC_ADDR */ 233 struct kvm_vapic_addr { 234 __u64 vapic_addr; 235 }; 236 237 /* for KVM_SET_MPSTATE */ 238 239 #define KVM_MP_STATE_RUNNABLE 0 240 #define KVM_MP_STATE_UNINITIALIZED 1 241 #define KVM_MP_STATE_INIT_RECEIVED 2 242 #define KVM_MP_STATE_HALTED 3 243 #define KVM_MP_STATE_SIPI_RECEIVED 4 244 245 struct kvm_mp_state { 246 __u32 mp_state; 247 }; 248 249 struct kvm_s390_psw { 250 __u64 mask; 251 __u64 addr; 252 }; 253 254 /* valid values for type in kvm_s390_interrupt */ 255 #define KVM_S390_SIGP_STOP 0xfffe0000u 256 #define KVM_S390_PROGRAM_INT 0xfffe0001u 257 #define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u 258 #define KVM_S390_RESTART 0xfffe0003u 259 #define KVM_S390_INT_VIRTIO 0xffff2603u 260 #define KVM_S390_INT_SERVICE 0xffff2401u 261 #define KVM_S390_INT_EMERGENCY 0xffff1201u 262 263 struct kvm_s390_interrupt { 264 __u32 type; 265 __u32 parm; 266 __u64 parm64; 267 }; 268 269 #define KVM_TRC_SHIFT 16 270 /* 271 * kvm trace categories 272 */ 273 #define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT) 274 #define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */ 275 276 /* 277 * kvm trace action 278 */ 279 #define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01) 280 #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) 281 #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) 282 283 #define KVM_TRC_HEAD_SIZE 12 284 #define KVM_TRC_CYCLE_SIZE 8 285 #define KVM_TRC_EXTRA_MAX 7 286 287 /* This structure represents a single trace buffer record. */ 288 struct kvm_trace_rec { 289 __u32 event:28; 290 __u32 extra_u32:3; 291 __u32 cycle_in:1; 292 __u32 pid; 293 __u32 vcpu_id; 294 union { 295 struct { 296 __u32 cycle_lo, cycle_hi; 297 __u32 extra_u32[KVM_TRC_EXTRA_MAX]; 298 } cycle; 299 struct { 300 __u32 extra_u32[KVM_TRC_EXTRA_MAX]; 301 } nocycle; 302 } u; 303 }; 304 305 #define KVMIO 0xAE 306 307 /* 308 * ioctls for /dev/kvm fds: 309 */ 310 #define KVM_GET_API_VERSION _IO(KVMIO, 0x00) 311 #define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ 312 #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) 313 314 #define KVM_S390_ENABLE_SIE _IO(KVMIO, 0x06) 315 /* 316 * Check if a kvm extension is available. Argument is extension number, 317 * return is 1 (yes) or 0 (no, sorry). 318 */ 319 #define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03) 320 /* 321 * Get size for mmap(vcpu_fd) 322 */ 323 #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ 324 #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) 325 /* 326 * ioctls for kvm trace 327 */ 328 #define KVM_TRACE_ENABLE _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) 329 #define KVM_TRACE_PAUSE _IO(KVMIO, 0x07) 330 #define KVM_TRACE_DISABLE _IO(KVMIO, 0x08) 331 /* 332 * Extension capability list. 333 */ 334 #define KVM_CAP_IRQCHIP 0 335 #define KVM_CAP_HLT 1 336 #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2 337 #define KVM_CAP_USER_MEMORY 3 338 #define KVM_CAP_SET_TSS_ADDR 4 339 #define KVM_CAP_VAPIC 6 340 #define KVM_CAP_EXT_CPUID 7 341 #define KVM_CAP_CLOCKSOURCE 8 342 #define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */ 343 #define KVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */ 344 #define KVM_CAP_PIT 11 345 #define KVM_CAP_NOP_IO_DELAY 12 346 #define KVM_CAP_PV_MMU 13 347 #define KVM_CAP_MP_STATE 14 348 349 /* 350 * ioctls for VM fds 351 */ 352 #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) 353 #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) 354 #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) 355 #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ 356 struct kvm_userspace_memory_region) 357 #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) 358 /* 359 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns 360 * a vcpu fd. 361 */ 362 #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) 363 #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) 364 #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) 365 /* Device model IOC */ 366 #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) 367 #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) 368 #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) 369 #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) 370 #define KVM_CREATE_PIT _IO(KVMIO, 0x64) 371 #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) 372 #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) 373 374 /* 375 * ioctls for vcpu fds 376 */ 377 #define KVM_RUN _IO(KVMIO, 0x80) 378 #define KVM_GET_REGS _IOR(KVMIO, 0x81, struct kvm_regs) 379 #define KVM_SET_REGS _IOW(KVMIO, 0x82, struct kvm_regs) 380 #define KVM_GET_SREGS _IOR(KVMIO, 0x83, struct kvm_sregs) 381 #define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) 382 #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) 383 #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) 384 #define KVM_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) 385 #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) 386 #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) 387 #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) 388 #define KVM_SET_SIGNAL_MASK _IOW(KVMIO, 0x8b, struct kvm_signal_mask) 389 #define KVM_GET_FPU _IOR(KVMIO, 0x8c, struct kvm_fpu) 390 #define KVM_SET_FPU _IOW(KVMIO, 0x8d, struct kvm_fpu) 391 #define KVM_GET_LAPIC _IOR(KVMIO, 0x8e, struct kvm_lapic_state) 392 #define KVM_SET_LAPIC _IOW(KVMIO, 0x8f, struct kvm_lapic_state) 393 #define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2) 394 #define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2) 395 /* Available with KVM_CAP_VAPIC */ 396 #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) 397 /* Available with KVM_CAP_VAPIC */ 398 #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) 399 /* valid for virtual machine (for floating interrupt)_and_ vcpu */ 400 #define KVM_S390_INTERRUPT _IOW(KVMIO, 0x94, struct kvm_s390_interrupt) 401 /* store status for s390 */ 402 #define KVM_S390_STORE_STATUS_NOADDR (-1ul) 403 #define KVM_S390_STORE_STATUS_PREFIXED (-2ul) 404 #define KVM_S390_STORE_STATUS _IOW(KVMIO, 0x95, unsigned long) 405 /* initial ipl psw for s390 */ 406 #define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) 407 /* initial reset for s390 */ 408 #define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) 409 #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) 410 #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) 411 412 #endif 413