kvm.h 19.9 KB
Newer Older
A
Avi Kivity 已提交
1 2 3 4 5 6
#ifndef __LINUX_KVM_H
#define __LINUX_KVM_H

/*
 * Userspace interface for /dev/kvm - kernel based virtual machine
 *
7
 * Note: you must update KVM_API_VERSION if you change this interface.
A
Avi Kivity 已提交
8 9
 */

10
#include <linux/types.h>
11
#include <linux/compiler.h>
A
Avi Kivity 已提交
12
#include <linux/ioctl.h>
13
#include <asm/kvm.h>
A
Avi Kivity 已提交
14

15
#define KVM_API_VERSION 12
A
Avi Kivity 已提交
16

J
Jan Kiszka 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
/* *** Deprecated interfaces *** */

#define KVM_TRC_SHIFT           16

#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))

#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)

#define KVM_TRC_HEAD_SIZE       12
#define KVM_TRC_CYCLE_SIZE      8
#define KVM_TRC_EXTRA_MAX       7

#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)

F
Feng (Eric) Liu 已提交
57
struct kvm_user_trace_setup {
J
Jan Kiszka 已提交
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
	__u32 buf_size;
	__u32 buf_nr;
};

#define __KVM_DEPRECATED_MAIN_W_0x06 \
	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)

#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)

struct kvm_breakpoint {
	__u32 enabled;
	__u32 padding;
	__u64 address;
};

struct kvm_debug_guest {
	__u32 enabled;
	__u32 pad;
	struct kvm_breakpoint breakpoints[4];
	__u32 singlestep;
F
Feng (Eric) Liu 已提交
80 81
};

J
Jan Kiszka 已提交
82 83 84 85 86
#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)

/* *** End of deprecated interfaces *** */


A
Avi Kivity 已提交
87 88 89 90 91 92 93 94
/* for KVM_CREATE_MEMORY_REGION */
struct kvm_memory_region {
	__u32 slot;
	__u32 flags;
	__u64 guest_phys_addr;
	__u64 memory_size; /* bytes */
};

95 96 97 98 99 100 101 102 103
/* for KVM_SET_USER_MEMORY_REGION */
struct kvm_userspace_memory_region {
	__u32 slot;
	__u32 flags;
	__u64 guest_phys_addr;
	__u64 memory_size; /* bytes */
	__u64 userspace_addr; /* start of the userspace allocated memory */
};

A
Avi Kivity 已提交
104 105 106 107
/* for kvm_memory_region::flags */
#define KVM_MEM_LOG_DIRTY_PAGES  1UL


E
Eddie Dong 已提交
108
/* for KVM_IRQ_LINE */
109 110 111 112 113 114
struct kvm_irq_level {
	/*
	 * ACPI gsi notion of irq.
	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
	 */
115 116 117 118
	union {
		__u32 irq;
		__s32 status;
	};
119 120 121
	__u32 level;
};

122 123 124 125 126 127

struct kvm_irqchip {
	__u32 chip_id;
	__u32 pad;
        union {
		char dummy[512];  /* reserving space */
128
#ifdef __KVM_HAVE_PIT
129
		struct kvm_pic_state pic;
130
#endif
131
#ifdef __KVM_HAVE_IOAPIC
132
		struct kvm_ioapic_state ioapic;
133
#endif
134 135 136
	} chip;
};

137 138 139 140 141 142 143 144
/* for KVM_CREATE_PIT2 */
struct kvm_pit_config {
	__u32 flags;
	__u32 pad[15];
};

#define KVM_PIT_SPEAKER_DUMMY     1

A
Avi Kivity 已提交
145 146 147 148 149 150 151 152 153 154 155 156
#define KVM_EXIT_UNKNOWN          0
#define KVM_EXIT_EXCEPTION        1
#define KVM_EXIT_IO               2
#define KVM_EXIT_HYPERCALL        3
#define KVM_EXIT_DEBUG            4
#define KVM_EXIT_HLT              5
#define KVM_EXIT_MMIO             6
#define KVM_EXIT_IRQ_WINDOW_OPEN  7
#define KVM_EXIT_SHUTDOWN         8
#define KVM_EXIT_FAIL_ENTRY       9
#define KVM_EXIT_INTR             10
#define KVM_EXIT_SET_TPR          11
157
#define KVM_EXIT_TPR_ACCESS       12
158
#define KVM_EXIT_S390_SIEIC       13
159
#define KVM_EXIT_S390_RESET       14
160
#define KVM_EXIT_DCR              15
161
#define KVM_EXIT_NMI              16
162 163 164 165
#define KVM_EXIT_INTERNAL_ERROR   17

/* For KVM_EXIT_INTERNAL_ERROR */
#define KVM_INTERNAL_ERROR_EMULATION 1
166
#define KVM_INTERNAL_ERROR_SIMUL_EX 2
A
Avi Kivity 已提交
167

168
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
A
Avi Kivity 已提交
169 170
struct kvm_run {
	/* in */
171
	__u8 request_interrupt_window;
172
	__u8 padding1[7];
A
Avi Kivity 已提交
173 174 175

	/* out */
	__u32 exit_reason;
176 177
	__u8 ready_for_interrupt_injection;
	__u8 if_flag;
178
	__u8 padding2[2];
179 180

	/* in (pre_kvm_run), out (post_kvm_run) */
181 182 183
	__u64 cr8;
	__u64 apic_base;

184 185 186 187 188
#ifdef __KVM_S390
	/* the processor status word for s390 */
	__u64 psw_mask; /* psw upper half */
	__u64 psw_addr; /* psw lower half */
#endif
A
Avi Kivity 已提交
189 190 191
	union {
		/* KVM_EXIT_UNKNOWN */
		struct {
192
			__u64 hardware_exit_reason;
A
Avi Kivity 已提交
193
		} hw;
194 195 196 197
		/* KVM_EXIT_FAIL_ENTRY */
		struct {
			__u64 hardware_entry_failure_reason;
		} fail_entry;
A
Avi Kivity 已提交
198 199 200 201 202 203
		/* KVM_EXIT_EXCEPTION */
		struct {
			__u32 exception;
			__u32 error_code;
		} ex;
		/* KVM_EXIT_IO */
204
		struct {
A
Avi Kivity 已提交
205 206 207 208 209
#define KVM_EXIT_IO_IN  0
#define KVM_EXIT_IO_OUT 1
			__u8 direction;
			__u8 size; /* bytes */
			__u16 port;
210 211
			__u32 count;
			__u64 data_offset; /* relative to kvm_run start */
A
Avi Kivity 已提交
212 213
		} io;
		struct {
J
Jan Kiszka 已提交
214
			struct kvm_debug_exit_arch arch;
A
Avi Kivity 已提交
215 216 217 218 219 220 221 222
		} debug;
		/* KVM_EXIT_MMIO */
		struct {
			__u64 phys_addr;
			__u8  data[8];
			__u32 len;
			__u8  is_write;
		} mmio;
223 224
		/* KVM_EXIT_HYPERCALL */
		struct {
J
Jeff Dike 已提交
225
			__u64 nr;
226 227 228 229 230
			__u64 args[6];
			__u64 ret;
			__u32 longmode;
			__u32 pad;
		} hypercall;
231 232 233 234 235 236
		/* KVM_EXIT_TPR_ACCESS */
		struct {
			__u64 rip;
			__u32 is_write;
			__u32 pad;
		} tpr_access;
237 238 239 240 241 242
		/* KVM_EXIT_S390_SIEIC */
		struct {
			__u8 icptcode;
			__u16 ipa;
			__u32 ipb;
		} s390_sieic;
243 244 245 246 247 248 249
		/* KVM_EXIT_S390_RESET */
#define KVM_S390_RESET_POR       1
#define KVM_S390_RESET_CLEAR     2
#define KVM_S390_RESET_SUBSYSTEM 4
#define KVM_S390_RESET_CPU_INIT  8
#define KVM_S390_RESET_IPL       16
		__u64 s390_reset_flags;
250 251 252 253 254 255
		/* KVM_EXIT_DCR */
		struct {
			__u32 dcrn;
			__u32 data;
			__u8  is_write;
		} dcr;
256 257
		struct {
			__u32 suberror;
258 259 260
			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
			__u32 ndata;
			__u64 data[16];
261
		} internal;
262 263
		/* Fix the size of the union. */
		char padding[256];
A
Avi Kivity 已提交
264 265 266
	};
};

267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */

struct kvm_coalesced_mmio_zone {
	__u64 addr;
	__u32 size;
	__u32 pad;
};

struct kvm_coalesced_mmio {
	__u64 phys_addr;
	__u32 len;
	__u32 pad;
	__u8  data[8];
};

struct kvm_coalesced_mmio_ring {
	__u32 first, last;
	struct kvm_coalesced_mmio coalesced_mmio[0];
};

#define KVM_COALESCED_MMIO_MAX \
	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
	 sizeof(struct kvm_coalesced_mmio))

A
Avi Kivity 已提交
291 292 293 294 295 296 297 298 299 300
/* for KVM_TRANSLATE */
struct kvm_translation {
	/* in */
	__u64 linear_address;

	/* out */
	__u64 physical_address;
	__u8  valid;
	__u8  writeable;
	__u8  usermode;
301
	__u8  pad[5];
A
Avi Kivity 已提交
302 303 304 305 306 307 308 309 310 311 312
};

/* for KVM_INTERRUPT */
struct kvm_interrupt {
	/* in */
	__u32 irq;
};

/* for KVM_GET_DIRTY_LOG */
struct kvm_dirty_log {
	__u32 slot;
313
	__u32 padding1;
A
Avi Kivity 已提交
314 315
	union {
		void __user *dirty_bitmap; /* one bit per page */
316
		__u64 padding2;
A
Avi Kivity 已提交
317 318 319
	};
};

A
Avi Kivity 已提交
320 321 322 323 324 325
/* for KVM_SET_SIGNAL_MASK */
struct kvm_signal_mask {
	__u32 len;
	__u8  sigset[0];
};

326 327 328 329 330 331 332
/* for KVM_TPR_ACCESS_REPORTING */
struct kvm_tpr_access_ctl {
	__u32 enabled;
	__u32 flags;
	__u32 reserved[8];
};

A
Avi Kivity 已提交
333 334 335 336 337
/* for KVM_SET_VAPIC_ADDR */
struct kvm_vapic_addr {
	__u64 vapic_addr;
};

338 339 340 341 342 343 344 345 346 347 348 349
/* for KVM_SET_MPSTATE */

#define KVM_MP_STATE_RUNNABLE          0
#define KVM_MP_STATE_UNINITIALIZED     1
#define KVM_MP_STATE_INIT_RECEIVED     2
#define KVM_MP_STATE_HALTED            3
#define KVM_MP_STATE_SIPI_RECEIVED     4

struct kvm_mp_state {
	__u32 mp_state;
};

350 351 352 353 354
struct kvm_s390_psw {
	__u64 mask;
	__u64 addr;
};

355 356 357 358 359 360 361 362 363 364 365 366 367 368 369
/* valid values for type in kvm_s390_interrupt */
#define KVM_S390_SIGP_STOP		0xfffe0000u
#define KVM_S390_PROGRAM_INT		0xfffe0001u
#define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u
#define KVM_S390_RESTART		0xfffe0003u
#define KVM_S390_INT_VIRTIO		0xffff2603u
#define KVM_S390_INT_SERVICE		0xffff2401u
#define KVM_S390_INT_EMERGENCY		0xffff1201u

struct kvm_s390_interrupt {
	__u32 type;
	__u32 parm;
	__u64 parm64;
};

J
Jan Kiszka 已提交
370 371 372 373 374 375 376 377 378 379 380
/* for KVM_SET_GUEST_DEBUG */

#define KVM_GUESTDBG_ENABLE		0x00000001
#define KVM_GUESTDBG_SINGLESTEP		0x00000002

struct kvm_guest_debug {
	__u32 control;
	__u32 pad;
	struct kvm_guest_debug_arch arch;
};

G
Gregory Haskins 已提交
381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402
enum {
	kvm_ioeventfd_flag_nr_datamatch,
	kvm_ioeventfd_flag_nr_pio,
	kvm_ioeventfd_flag_nr_deassign,
	kvm_ioeventfd_flag_nr_max,
};

#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
#define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
#define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)

#define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)

struct kvm_ioeventfd {
	__u64 datamatch;
	__u64 addr;        /* legal pio/mmio address */
	__u32 len;         /* 1, 2, 4, or 8 bytes    */
	__s32 fd;
	__u32 flags;
	__u8  pad[36];
};

A
Avi Kivity 已提交
403 404
#define KVMIO 0xAE

405 406 407
/*
 * ioctls for /dev/kvm fds:
 */
A
Avi Kivity 已提交
408 409 410
#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
411 412

#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
413 414 415 416 417
/*
 * Check if a kvm extension is available.  Argument is extension number,
 * return is 1 (yes) or 0 (no, sorry).
 */
#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
418 419 420 421
/*
 * Get size for mmap(vcpu_fd)
 */
#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
422
#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
J
Jan Kiszka 已提交
423 424 425 426
#define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
#define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
#define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08

427 428 429 430
/*
 * Extension capability list.
 */
#define KVM_CAP_IRQCHIP	  0
E
Eddie Dong 已提交
431
#define KVM_CAP_HLT	  1
432
#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
433
#define KVM_CAP_USER_MEMORY 3
434
#define KVM_CAP_SET_TSS_ADDR 4
435
#define KVM_CAP_VAPIC 6
436
#define KVM_CAP_EXT_CPUID 7
437
#define KVM_CAP_CLOCKSOURCE 8
438
#define KVM_CAP_NR_VCPUS 9       /* returns max vcpus per vm */
439
#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
S
Sheng Yang 已提交
440
#define KVM_CAP_PIT 11
441
#define KVM_CAP_NOP_IO_DELAY 12
442
#define KVM_CAP_PV_MMU 13
443
#define KVM_CAP_MP_STATE 14
444
#define KVM_CAP_COALESCED_MMIO 15
445
#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
446
#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
B
Ben-Ami Yassour 已提交
447
#define KVM_CAP_DEVICE_ASSIGNMENT 17
448
#endif
B
Ben-Ami Yassour 已提交
449
#define KVM_CAP_IOMMU 18
450
#ifdef __KVM_HAVE_MSI
S
Sheng Yang 已提交
451 452
#define KVM_CAP_DEVICE_MSI 20
#endif
453 454
/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
455
#ifdef __KVM_HAVE_USER_NMI
456 457
#define KVM_CAP_USER_NMI 22
#endif
458
#ifdef __KVM_HAVE_GUEST_DEBUG
J
Jan Kiszka 已提交
459
#define KVM_CAP_SET_GUEST_DEBUG 23
460
#endif
461
#ifdef __KVM_HAVE_PIT
462
#define KVM_CAP_REINJECT_CONTROL 24
463
#endif
464
#ifdef __KVM_HAVE_IOAPIC
465 466
#define KVM_CAP_IRQ_ROUTING 25
#endif
467
#define KVM_CAP_IRQ_INJECT_STATUS 26
468 469 470
#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
#define KVM_CAP_DEVICE_DEASSIGNMENT 27
#endif
471 472 473
#ifdef __KVM_HAVE_MSIX
#define KVM_CAP_DEVICE_MSIX 28
#endif
474
#define KVM_CAP_ASSIGN_DEV_IRQ 29
475 476
/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
H
Huang Ying 已提交
477 478 479
#ifdef __KVM_HAVE_MCE
#define KVM_CAP_MCE 31
#endif
G
Gregory Haskins 已提交
480
#define KVM_CAP_IRQFD 32
481 482 483
#ifdef __KVM_HAVE_PIT
#define KVM_CAP_PIT2 33
#endif
484
#define KVM_CAP_SET_BOOT_CPU_ID 34
B
Beth Kon 已提交
485 486 487
#ifdef __KVM_HAVE_PIT_STATE2
#define KVM_CAP_PIT_STATE2 35
#endif
G
Gregory Haskins 已提交
488
#define KVM_CAP_IOEVENTFD 36
489
#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
E
Ed Swierk 已提交
490 491 492
#ifdef __KVM_HAVE_XEN_HVM
#define KVM_CAP_XEN_HVM 38
#endif
493
#define KVM_CAP_ADJUST_CLOCK 39
494
#define KVM_CAP_INTERNAL_ERROR_DATA 40
J
Jan Kiszka 已提交
495 496 497
#ifdef __KVM_HAVE_VCPU_EVENTS
#define KVM_CAP_VCPU_EVENTS 41
#endif
498
#define KVM_CAP_S390_PSW 42
499 500 501 502 503 504 505 506

#ifdef KVM_CAP_IRQ_ROUTING

struct kvm_irq_routing_irqchip {
	__u32 irqchip;
	__u32 pin;
};

S
Sheng Yang 已提交
507 508 509 510 511 512 513
struct kvm_irq_routing_msi {
	__u32 address_lo;
	__u32 address_hi;
	__u32 data;
	__u32 pad;
};

514 515
/* gsi routing entry types */
#define KVM_IRQ_ROUTING_IRQCHIP 1
S
Sheng Yang 已提交
516
#define KVM_IRQ_ROUTING_MSI 2
517 518 519 520 521 522 523 524

struct kvm_irq_routing_entry {
	__u32 gsi;
	__u32 type;
	__u32 flags;
	__u32 pad;
	union {
		struct kvm_irq_routing_irqchip irqchip;
S
Sheng Yang 已提交
525
		struct kvm_irq_routing_msi msi;
526 527 528 529 530 531 532 533 534 535
		__u32 pad[8];
	} u;
};

struct kvm_irq_routing {
	__u32 nr;
	__u32 flags;
	struct kvm_irq_routing_entry entries[0];
};

536
#endif
537

H
Huang Ying 已提交
538 539 540 541 542 543 544 545 546 547 548 549 550
#ifdef KVM_CAP_MCE
/* x86 MCE */
struct kvm_x86_mce {
	__u64 status;
	__u64 addr;
	__u64 misc;
	__u64 mcg_status;
	__u8 bank;
	__u8 pad1[7];
	__u64 pad2[3];
};
#endif

E
Ed Swierk 已提交
551 552 553 554 555 556 557 558 559 560 561 562
#ifdef KVM_CAP_XEN_HVM
struct kvm_xen_hvm_config {
	__u32 flags;
	__u32 msr;
	__u64 blob_addr_32;
	__u64 blob_addr_64;
	__u8 blob_size_32;
	__u8 blob_size_64;
	__u8 pad2[30];
};
#endif

G
Gregory Haskins 已提交
563 564 565 566 567 568 569 570 571
#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)

struct kvm_irqfd {
	__u32 fd;
	__u32 gsi;
	__u32 flags;
	__u8  pad[20];
};

572 573 574 575 576 577
struct kvm_clock_data {
	__u64 clock;
	__u32 flags;
	__u32 pad[9];
};

578 579 580
/*
 * ioctls for VM fds
 */
J
Jan Kiszka 已提交
581
#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
A
Avi Kivity 已提交
582 583 584 585
/*
 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 * a vcpu fd.
 */
J
Jan Kiszka 已提交
586 587 588 589 590 591
#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
A
Avi Kivity 已提交
592
					struct kvm_userspace_memory_region)
J
Jan Kiszka 已提交
593 594
#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
595
/* Device model IOC */
J
Jan Kiszka 已提交
596 597 598 599 600 601 602 603
#define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
#define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
#define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
604 605 606 607
#define KVM_REGISTER_COALESCED_MMIO \
			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
#define KVM_UNREGISTER_COALESCED_MMIO \
			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
J
Jan Kiszka 已提交
608 609 610
#define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
				       struct kvm_assigned_pci_dev)
#define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
611
/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
J
Jan Kiszka 已提交
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
#define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
#define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
#define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
				       struct kvm_assigned_pci_dev)
#define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
				       struct kvm_assigned_msix_nr)
#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
				       struct kvm_assigned_msix_entry)
#define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
#define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
#define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config)
#define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
#define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
#define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
#define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
#define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
/* Available with KVM_CAP_PIT_STATE2 */
#define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
#define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
A
Avi Kivity 已提交
632 633 634 635

/*
 * ioctls for vcpu fds
 */
A
Avi Kivity 已提交
636 637 638 639 640 641 642
#define KVM_RUN                   _IO(KVMIO,   0x80)
#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
J
Jan Kiszka 已提交
643
/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
J
Jan Kiszka 已提交
644
#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
A
Avi Kivity 已提交
645 646 647
#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
A
Avi Kivity 已提交
648
#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
A
Avi Kivity 已提交
649 650
#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
651 652
#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
653 654
#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
655
/* Available with KVM_CAP_VAPIC */
J
Jan Kiszka 已提交
656
#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
A
Avi Kivity 已提交
657 658
/* Available with KVM_CAP_VAPIC */
#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
659 660
/* valid for virtual machine (for floating interrupt)_and_ vcpu */
#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
661 662 663 664 665 666 667
/* store status for s390 */
#define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
#define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long)
/* initial ipl psw for s390 */
#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
/* initial reset for s390 */
J
Jan Kiszka 已提交
668
#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
669 670
#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
671
/* Available with KVM_CAP_NMI */
J
Jan Kiszka 已提交
672
#define KVM_NMI                   _IO(KVMIO,   0x9a)
J
Jan Kiszka 已提交
673 674
/* Available with KVM_CAP_SET_GUEST_DEBUG */
#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
H
Huang Ying 已提交
675 676 677 678
/* MCE for x86 */
#define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
#define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
J
Jan Kiszka 已提交
679
/* IA64 stack access */
680 681
#define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
#define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
J
Jan Kiszka 已提交
682 683 684
/* Available with KVM_CAP_VCPU_EVENTS */
#define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
#define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
685

686 687
#define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)

B
Ben-Ami Yassour 已提交
688 689 690 691 692
struct kvm_assigned_pci_dev {
	__u32 assigned_dev_id;
	__u32 busnr;
	__u32 devfn;
	__u32 flags;
693 694 695
	union {
		__u32 reserved[12];
	};
B
Ben-Ami Yassour 已提交
696 697
};

698 699 700 701 702 703 704 705 706 707 708
#define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
#define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
#define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)

#define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
#define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
#define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)

#define KVM_DEV_IRQ_HOST_MASK	 0x00ff
#define KVM_DEV_IRQ_GUEST_MASK   0xff00

B
Ben-Ami Yassour 已提交
709 710 711 712 713
struct kvm_assigned_irq {
	__u32 assigned_dev_id;
	__u32 host_irq;
	__u32 guest_irq;
	__u32 flags;
714
	union {
715 716 717 718 719
		struct {
			__u32 addr_lo;
			__u32 addr_hi;
			__u32 data;
		} guest_msi;
720 721
		__u32 reserved[12];
	};
B
Ben-Ami Yassour 已提交
722 723
};

724

S
Sheng Yang 已提交
725 726 727 728 729 730
struct kvm_assigned_msix_nr {
	__u32 assigned_dev_id;
	__u16 entry_nr;
	__u16 padding;
};

731
#define KVM_MAX_MSIX_PER_DEV		256
S
Sheng Yang 已提交
732 733 734 735 736 737 738
struct kvm_assigned_msix_entry {
	__u32 assigned_dev_id;
	__u32 gsi;
	__u16 entry; /* The index of entry in the MSI-X table */
	__u16 padding[3];
};

J
Jan Kiszka 已提交
739
#endif /* __LINUX_KVM_H */