kvm.h 30.4 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 */
};

104 105 106 107 108
/*
 * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace,
 * other bits are reserved for kvm internal use which are defined in
 * include/linux/kvm_host.h.
 */
X
Xiao Guangrong 已提交
109 110
#define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
#define KVM_MEM_READONLY	(1UL << 1)
A
Avi Kivity 已提交
111

E
Eddie Dong 已提交
112
/* for KVM_IRQ_LINE */
113 114 115 116 117
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..
118
	 * For ARM: See Documentation/virtual/kvm/api.txt
119
	 */
120 121 122 123
	union {
		__u32 irq;
		__s32 status;
	};
124 125 126
	__u32 level;
};

127 128 129 130 131 132

struct kvm_irqchip {
	__u32 chip_id;
	__u32 pad;
        union {
		char dummy[512];  /* reserving space */
133
#ifdef __KVM_HAVE_PIT
134
		struct kvm_pic_state pic;
135
#endif
136
#ifdef __KVM_HAVE_IOAPIC
137
		struct kvm_ioapic_state ioapic;
138
#endif
139 140 141
	} chip;
};

142 143 144 145 146 147 148 149
/* for KVM_CREATE_PIT2 */
struct kvm_pit_config {
	__u32 flags;
	__u32 pad[15];
};

#define KVM_PIT_SPEAKER_DUMMY     1

A
Avi Kivity 已提交
150 151 152 153 154 155 156 157 158 159 160 161
#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
162
#define KVM_EXIT_TPR_ACCESS       12
163
#define KVM_EXIT_S390_SIEIC       13
164
#define KVM_EXIT_S390_RESET       14
165
#define KVM_EXIT_DCR              15
166
#define KVM_EXIT_NMI              16
167
#define KVM_EXIT_INTERNAL_ERROR   17
168
#define KVM_EXIT_OSI              18
169
#define KVM_EXIT_PAPR_HCALL	  19
170
#define KVM_EXIT_S390_UCONTROL	  20
171
#define KVM_EXIT_WATCHDOG         21
172
#define KVM_EXIT_S390_TSCH        22
173
#define KVM_EXIT_EPR              23
174 175

/* For KVM_EXIT_INTERNAL_ERROR */
176 177 178 179 180 181
/* Emulate instruction failed. */
#define KVM_INTERNAL_ERROR_EMULATION	1
/* Encounter unexpected simultaneous exceptions. */
#define KVM_INTERNAL_ERROR_SIMUL_EX	2
/* Encounter unexpected vm-exit due to delivery event. */
#define KVM_INTERNAL_ERROR_DELIVERY_EV	3
A
Avi Kivity 已提交
182

183
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
A
Avi Kivity 已提交
184 185
struct kvm_run {
	/* in */
186
	__u8 request_interrupt_window;
187
	__u8 padding1[7];
A
Avi Kivity 已提交
188 189 190

	/* out */
	__u32 exit_reason;
191 192
	__u8 ready_for_interrupt_injection;
	__u8 if_flag;
193
	__u8 padding2[2];
194 195

	/* in (pre_kvm_run), out (post_kvm_run) */
196 197 198
	__u64 cr8;
	__u64 apic_base;

199 200 201 202 203
#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 已提交
204 205 206
	union {
		/* KVM_EXIT_UNKNOWN */
		struct {
207
			__u64 hardware_exit_reason;
A
Avi Kivity 已提交
208
		} hw;
209 210 211 212
		/* KVM_EXIT_FAIL_ENTRY */
		struct {
			__u64 hardware_entry_failure_reason;
		} fail_entry;
A
Avi Kivity 已提交
213 214 215 216 217 218
		/* KVM_EXIT_EXCEPTION */
		struct {
			__u32 exception;
			__u32 error_code;
		} ex;
		/* KVM_EXIT_IO */
219
		struct {
A
Avi Kivity 已提交
220 221 222 223 224
#define KVM_EXIT_IO_IN  0
#define KVM_EXIT_IO_OUT 1
			__u8 direction;
			__u8 size; /* bytes */
			__u16 port;
225 226
			__u32 count;
			__u64 data_offset; /* relative to kvm_run start */
A
Avi Kivity 已提交
227 228
		} io;
		struct {
J
Jan Kiszka 已提交
229
			struct kvm_debug_exit_arch arch;
A
Avi Kivity 已提交
230 231 232 233 234 235 236 237
		} debug;
		/* KVM_EXIT_MMIO */
		struct {
			__u64 phys_addr;
			__u8  data[8];
			__u32 len;
			__u8  is_write;
		} mmio;
238 239
		/* KVM_EXIT_HYPERCALL */
		struct {
J
Jeff Dike 已提交
240
			__u64 nr;
241 242 243 244 245
			__u64 args[6];
			__u64 ret;
			__u32 longmode;
			__u32 pad;
		} hypercall;
246 247 248 249 250 251
		/* KVM_EXIT_TPR_ACCESS */
		struct {
			__u64 rip;
			__u32 is_write;
			__u32 pad;
		} tpr_access;
252 253 254 255 256 257
		/* KVM_EXIT_S390_SIEIC */
		struct {
			__u8 icptcode;
			__u16 ipa;
			__u32 ipb;
		} s390_sieic;
258 259 260 261 262 263 264
		/* 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;
265 266 267 268 269
		/* KVM_EXIT_S390_UCONTROL */
		struct {
			__u64 trans_exc_code;
			__u32 pgm_code;
		} s390_ucontrol;
270 271 272 273 274 275
		/* KVM_EXIT_DCR */
		struct {
			__u32 dcrn;
			__u32 data;
			__u8  is_write;
		} dcr;
276 277
		struct {
			__u32 suberror;
278 279 280
			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
			__u32 ndata;
			__u64 data[16];
281
		} internal;
282 283 284 285
		/* KVM_EXIT_OSI */
		struct {
			__u64 gprs[32];
		} osi;
286 287 288 289 290
		struct {
			__u64 nr;
			__u64 ret;
			__u64 args[9];
		} papr_hcall;
291 292 293 294 295 296 297 298 299
		/* KVM_EXIT_S390_TSCH */
		struct {
			__u16 subchannel_id;
			__u16 subchannel_nr;
			__u32 io_int_parm;
			__u32 io_int_word;
			__u32 ipb;
			__u8 dequeued;
		} s390_tsch;
300 301 302 303
		/* KVM_EXIT_EPR */
		struct {
			__u32 epr;
		} epr;
304 305
		/* Fix the size of the union. */
		char padding[256];
A
Avi Kivity 已提交
306
	};
307 308 309 310 311 312 313 314 315 316 317 318 319 320

	/*
	 * shared registers between kvm and userspace.
	 * kvm_valid_regs specifies the register classes set by the host
	 * kvm_dirty_regs specified the register classes dirtied by userspace
	 * struct kvm_sync_regs is architecture specific, as well as the
	 * bits for kvm_valid_regs and kvm_dirty_regs
	 */
	__u64 kvm_valid_regs;
	__u64 kvm_dirty_regs;
	union {
		struct kvm_sync_regs regs;
		char padding[1024];
	} s;
A
Avi Kivity 已提交
321 322
};

323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
/* 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 已提交
347 348 349 350 351 352 353 354 355 356
/* for KVM_TRANSLATE */
struct kvm_translation {
	/* in */
	__u64 linear_address;

	/* out */
	__u64 physical_address;
	__u8  valid;
	__u8  writeable;
	__u8  usermode;
357
	__u8  pad[5];
A
Avi Kivity 已提交
358 359 360 361 362 363 364 365 366 367 368
};

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

/* for KVM_GET_DIRTY_LOG */
struct kvm_dirty_log {
	__u32 slot;
369
	__u32 padding1;
A
Avi Kivity 已提交
370 371
	union {
		void __user *dirty_bitmap; /* one bit per page */
372
		__u64 padding2;
A
Avi Kivity 已提交
373 374 375
	};
};

A
Avi Kivity 已提交
376 377 378 379 380 381
/* for KVM_SET_SIGNAL_MASK */
struct kvm_signal_mask {
	__u32 len;
	__u8  sigset[0];
};

382 383 384 385 386 387 388
/* for KVM_TPR_ACCESS_REPORTING */
struct kvm_tpr_access_ctl {
	__u32 enabled;
	__u32 flags;
	__u32 reserved[8];
};

A
Avi Kivity 已提交
389 390 391 392 393
/* for KVM_SET_VAPIC_ADDR */
struct kvm_vapic_addr {
	__u64 vapic_addr;
};

394 395 396 397 398 399 400 401 402 403 404 405
/* 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;
};

406 407 408 409 410
struct kvm_s390_psw {
	__u64 mask;
	__u64 addr;
};

411 412 413 414 415
/* 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
416
#define KVM_S390_MCHK			0xfffe1000u
417 418 419
#define KVM_S390_INT_VIRTIO		0xffff2603u
#define KVM_S390_INT_SERVICE		0xffff2401u
#define KVM_S390_INT_EMERGENCY		0xffff1201u
420
#define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
421 422 423 424 425 426 427 428 429
/* Anything below 0xfffe0000u is taken by INT_IO */
#define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
	(((schid)) |			       \
	 ((ssid) << 16) |		       \
	 ((cssid) << 18) |		       \
	 ((ai) << 26))
#define KVM_S390_INT_IO_MIN		0x00000000u
#define KVM_S390_INT_IO_MAX		0xfffdffffu

430 431 432 433 434 435 436

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

J
Jan Kiszka 已提交
437 438 439 440 441 442 443 444 445 446 447
/* 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 已提交
448 449 450 451
enum {
	kvm_ioeventfd_flag_nr_datamatch,
	kvm_ioeventfd_flag_nr_pio,
	kvm_ioeventfd_flag_nr_deassign,
452
	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
G
Gregory Haskins 已提交
453 454 455 456 457 458
	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)
459 460
#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
G
Gregory Haskins 已提交
461 462 463 464 465 466 467 468 469 470 471 472

#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];
};

473 474 475 476 477 478 479 480 481
/* for KVM_ENABLE_CAP */
struct kvm_enable_cap {
	/* in */
	__u32 cap;
	__u32 flags;
	__u64 args[4];
	__u8  pad[64];
};

482 483 484 485 486 487 488 489
/* for KVM_PPC_GET_PVINFO */
struct kvm_ppc_pvinfo {
	/* out */
	__u32 flags;
	__u32 hcall[4];
	__u8  pad[108];
};

490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
/* for KVM_PPC_GET_SMMU_INFO */
#define KVM_PPC_PAGE_SIZES_MAX_SZ	8

struct kvm_ppc_one_page_size {
	__u32 page_shift;	/* Page shift (or 0) */
	__u32 pte_enc;		/* Encoding in the HPTE (>>12) */
};

struct kvm_ppc_one_seg_page_size {
	__u32 page_shift;	/* Base page shift of segment (or 0) */
	__u32 slb_enc;		/* SLB encoding for BookS */
	struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
};

#define KVM_PPC_PAGE_SIZES_REAL		0x00000001
#define KVM_PPC_1T_SEGMENTS		0x00000002

struct kvm_ppc_smmu_info {
	__u64 flags;
	__u32 slb_size;
	__u32 pad;
	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
};

514 515
#define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)

A
Avi Kivity 已提交
516 517
#define KVMIO 0xAE

518 519 520
/* machine type bits, to be used as argument to KVM_CREATE_VM */
#define KVM_VM_S390_UCONTROL	1

521 522 523 524
/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
#define KVM_VM_PPC_HV 1
#define KVM_VM_PPC_PR 2

525 526
#define KVM_S390_SIE_PAGE_OFFSET 1

527 528 529
/*
 * ioctls for /dev/kvm fds:
 */
A
Avi Kivity 已提交
530 531 532
#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)
533 534

#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
535 536 537 538 539
/*
 * 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)
540 541 542 543
/*
 * Get size for mmap(vcpu_fd)
 */
#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
544
#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
J
Jan Kiszka 已提交
545 546 547
#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
B
Borislav Petkov 已提交
548
#define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
J
Jan Kiszka 已提交
549

550 551 552 553
/*
 * Extension capability list.
 */
#define KVM_CAP_IRQCHIP	  0
E
Eddie Dong 已提交
554
#define KVM_CAP_HLT	  1
555
#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
556
#define KVM_CAP_USER_MEMORY 3
557
#define KVM_CAP_SET_TSS_ADDR 4
558
#define KVM_CAP_VAPIC 6
559
#define KVM_CAP_EXT_CPUID 7
560
#define KVM_CAP_CLOCKSOURCE 8
561
#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
562
#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
S
Sheng Yang 已提交
563
#define KVM_CAP_PIT 11
564
#define KVM_CAP_NOP_IO_DELAY 12
565
#define KVM_CAP_PV_MMU 13
566
#define KVM_CAP_MP_STATE 14
567
#define KVM_CAP_COALESCED_MMIO 15
568
#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
B
Ben-Ami Yassour 已提交
569
#define KVM_CAP_DEVICE_ASSIGNMENT 17
B
Ben-Ami Yassour 已提交
570
#define KVM_CAP_IOMMU 18
571
#ifdef __KVM_HAVE_MSI
S
Sheng Yang 已提交
572 573
#define KVM_CAP_DEVICE_MSI 20
#endif
574 575
/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
576
#ifdef __KVM_HAVE_USER_NMI
577 578
#define KVM_CAP_USER_NMI 22
#endif
579
#ifdef __KVM_HAVE_GUEST_DEBUG
J
Jan Kiszka 已提交
580
#define KVM_CAP_SET_GUEST_DEBUG 23
581
#endif
582
#ifdef __KVM_HAVE_PIT
583
#define KVM_CAP_REINJECT_CONTROL 24
584 585
#endif
#define KVM_CAP_IRQ_ROUTING 25
586
#define KVM_CAP_IRQ_INJECT_STATUS 26
587
#define KVM_CAP_DEVICE_DEASSIGNMENT 27
588 589 590
#ifdef __KVM_HAVE_MSIX
#define KVM_CAP_DEVICE_MSIX 28
#endif
591
#define KVM_CAP_ASSIGN_DEV_IRQ 29
592 593
/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
H
Huang Ying 已提交
594 595 596
#ifdef __KVM_HAVE_MCE
#define KVM_CAP_MCE 31
#endif
G
Gregory Haskins 已提交
597
#define KVM_CAP_IRQFD 32
598 599 600
#ifdef __KVM_HAVE_PIT
#define KVM_CAP_PIT2 33
#endif
601
#define KVM_CAP_SET_BOOT_CPU_ID 34
B
Beth Kon 已提交
602 603 604
#ifdef __KVM_HAVE_PIT_STATE2
#define KVM_CAP_PIT_STATE2 35
#endif
G
Gregory Haskins 已提交
605
#define KVM_CAP_IOEVENTFD 36
606
#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
E
Ed Swierk 已提交
607 608 609
#ifdef __KVM_HAVE_XEN_HVM
#define KVM_CAP_XEN_HVM 38
#endif
610
#define KVM_CAP_ADJUST_CLOCK 39
611
#define KVM_CAP_INTERNAL_ERROR_DATA 40
J
Jan Kiszka 已提交
612 613 614
#ifdef __KVM_HAVE_VCPU_EVENTS
#define KVM_CAP_VCPU_EVENTS 41
#endif
615
#define KVM_CAP_S390_PSW 42
616
#define KVM_CAP_PPC_SEGSTATE 43
617
#define KVM_CAP_HYPERV 44
G
Gleb Natapov 已提交
618
#define KVM_CAP_HYPERV_VAPIC 45
619
#define KVM_CAP_HYPERV_SPIN 46
620
#define KVM_CAP_PCI_SEGMENT 47
621
#define KVM_CAP_PPC_PAIRED_SINGLES 48
622
#define KVM_CAP_INTR_SHADOW 49
623 624 625
#ifdef __KVM_HAVE_DEBUGREGS
#define KVM_CAP_DEBUGREGS 50
#endif
626
#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
627
#define KVM_CAP_PPC_OSI 52
628
#define KVM_CAP_PPC_UNSET_IRQ 53
629
#define KVM_CAP_ENABLE_CAP 54
630 631 632 633 634 635
#ifdef __KVM_HAVE_XSAVE
#define KVM_CAP_XSAVE 55
#endif
#ifdef __KVM_HAVE_XCRS
#define KVM_CAP_XCRS 56
#endif
636
#define KVM_CAP_PPC_GET_PVINFO 57
637
#define KVM_CAP_PPC_IRQ_LEVEL 58
638
#define KVM_CAP_ASYNC_PF 59
639 640
#define KVM_CAP_TSC_CONTROL 60
#define KVM_CAP_GET_TSC_KHZ 61
S
Scott Wood 已提交
641
#define KVM_CAP_PPC_BOOKE_SREGS 62
642
#define KVM_CAP_SPAPR_TCE 63
643
#define KVM_CAP_PPC_SMT 64
644
#define KVM_CAP_PPC_RMA	65
645
#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
646
#define KVM_CAP_PPC_HIOR 67
647
#define KVM_CAP_PPC_PAPR 68
S
Scott Wood 已提交
648
#define KVM_CAP_SW_TLB 69
649
#define KVM_CAP_ONE_REG 70
650
#define KVM_CAP_S390_GMAP 71
651
#define KVM_CAP_TSC_DEADLINE_TIMER 72
652
#define KVM_CAP_S390_UCONTROL 73
653
#define KVM_CAP_SYNC_REGS 74
654
#define KVM_CAP_PCI_2_3 75
655
#define KVM_CAP_KVMCLOCK_CTRL 76
656
#define KVM_CAP_SIGNAL_MSI 77
657
#define KVM_CAP_PPC_GET_SMMU_INFO 78
658
#define KVM_CAP_S390_COW 79
659
#define KVM_CAP_PPC_ALLOC_HTAB 80
X
Xiao Guangrong 已提交
660 661 662
#ifdef __KVM_HAVE_READONLY_MEM
#define KVM_CAP_READONLY_MEM 81
#endif
663
#define KVM_CAP_IRQFD_RESAMPLE 82
664
#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
665
#define KVM_CAP_PPC_HTAB_FD 84
666
#define KVM_CAP_S390_CSS_SUPPORT 85
667
#define KVM_CAP_PPC_EPR 86
668
#define KVM_CAP_ARM_PSCI 87
669
#define KVM_CAP_ARM_SET_DEVICE_ADDR 88
S
Scott Wood 已提交
670
#define KVM_CAP_DEVICE_CTRL 89
S
Scott Wood 已提交
671
#define KVM_CAP_IRQ_MPIC 90
672
#define KVM_CAP_PPC_RTAS 91
673
#define KVM_CAP_IRQ_XICS 92
674
#define KVM_CAP_ARM_EL1_32BIT 93
675
#define KVM_CAP_SPAPR_MULTITCE 94
B
Borislav Petkov 已提交
676
#define KVM_CAP_EXT_EMUL_CPUID 95
677 678 679 680 681 682 683 684

#ifdef KVM_CAP_IRQ_ROUTING

struct kvm_irq_routing_irqchip {
	__u32 irqchip;
	__u32 pin;
};

S
Sheng Yang 已提交
685 686 687 688 689 690 691
struct kvm_irq_routing_msi {
	__u32 address_lo;
	__u32 address_hi;
	__u32 data;
	__u32 pad;
};

692 693
/* gsi routing entry types */
#define KVM_IRQ_ROUTING_IRQCHIP 1
S
Sheng Yang 已提交
694
#define KVM_IRQ_ROUTING_MSI 2
695 696 697 698 699 700 701 702

struct kvm_irq_routing_entry {
	__u32 gsi;
	__u32 type;
	__u32 flags;
	__u32 pad;
	union {
		struct kvm_irq_routing_irqchip irqchip;
S
Sheng Yang 已提交
703
		struct kvm_irq_routing_msi msi;
704 705 706 707 708 709 710 711 712 713
		__u32 pad[8];
	} u;
};

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

714
#endif
715

H
Huang Ying 已提交
716 717 718 719 720 721 722 723 724 725 726 727 728
#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 已提交
729 730 731 732 733 734 735 736 737 738 739 740
#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 已提交
741
#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
742 743 744 745 746 747 748 749
/*
 * Available with KVM_CAP_IRQFD_RESAMPLE
 *
 * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
 * the irqfd to operate in resampling mode for level triggered interrupt
 * emlation.  See Documentation/virtual/kvm/api.txt.
 */
#define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
G
Gregory Haskins 已提交
750 751 752 753 754

struct kvm_irqfd {
	__u32 fd;
	__u32 gsi;
	__u32 flags;
755 756
	__u32 resamplefd;
	__u8  pad[16];
G
Gregory Haskins 已提交
757 758
};

759 760 761 762 763 764
struct kvm_clock_data {
	__u64 clock;
	__u32 flags;
	__u32 pad[9];
};

S
Scott Wood 已提交
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779
#define KVM_MMU_FSL_BOOKE_NOHV		0
#define KVM_MMU_FSL_BOOKE_HV		1

struct kvm_config_tlb {
	__u64 params;
	__u64 array;
	__u32 mmu_type;
	__u32 array_len;
};

struct kvm_dirty_tlb {
	__u64 bitmap;
	__u32 num_dirty;
};

780 781 782 783 784 785 786 787 788 789 790 791 792 793
/* Available with KVM_CAP_ONE_REG */

#define KVM_REG_ARCH_MASK	0xff00000000000000ULL
#define KVM_REG_GENERIC		0x0000000000000000ULL

/*
 * Architecture specific registers are to be defined in arch headers and
 * ORed with the arch identifier.
 */
#define KVM_REG_PPC		0x1000000000000000ULL
#define KVM_REG_X86		0x2000000000000000ULL
#define KVM_REG_IA64		0x3000000000000000ULL
#define KVM_REG_ARM		0x4000000000000000ULL
#define KVM_REG_S390		0x5000000000000000ULL
794
#define KVM_REG_ARM64		0x6000000000000000ULL
795
#define KVM_REG_MIPS		0x7000000000000000ULL
796 797 798 799 800 801 802 803 804 805 806 807

#define KVM_REG_SIZE_SHIFT	52
#define KVM_REG_SIZE_MASK	0x00f0000000000000ULL
#define KVM_REG_SIZE_U8		0x0000000000000000ULL
#define KVM_REG_SIZE_U16	0x0010000000000000ULL
#define KVM_REG_SIZE_U32	0x0020000000000000ULL
#define KVM_REG_SIZE_U64	0x0030000000000000ULL
#define KVM_REG_SIZE_U128	0x0040000000000000ULL
#define KVM_REG_SIZE_U256	0x0050000000000000ULL
#define KVM_REG_SIZE_U512	0x0060000000000000ULL
#define KVM_REG_SIZE_U1024	0x0070000000000000ULL

808 809 810 811 812
struct kvm_reg_list {
	__u64 n; /* number of regs */
	__u64 reg[0];
};

813 814 815 816 817
struct kvm_one_reg {
	__u64 id;
	__u64 addr;
};

818 819 820 821 822 823 824 825
struct kvm_msi {
	__u32 address_lo;
	__u32 address_hi;
	__u32 data;
	__u32 flags;
	__u8  pad[16];
};

826 827 828 829 830
struct kvm_arm_device_addr {
	__u64 id;
	__u64 addr;
};

S
Scott Wood 已提交
831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848
/*
 * Device control API, available with KVM_CAP_DEVICE_CTRL
 */
#define KVM_CREATE_DEVICE_TEST		1

struct kvm_create_device {
	__u32	type;	/* in: KVM_DEV_TYPE_xxx */
	__u32	fd;	/* out: device handle */
	__u32	flags;	/* in: KVM_CREATE_DEVICE_xxx */
};

struct kvm_device_attr {
	__u32	flags;		/* no flags currently defined */
	__u32	group;		/* device-defined */
	__u64	attr;		/* group-defined */
	__u64	addr;		/* userspace address of attr data */
};

849 850
#define KVM_DEV_TYPE_FSL_MPIC_20	1
#define KVM_DEV_TYPE_FSL_MPIC_42	2
851
#define KVM_DEV_TYPE_XICS		3
A
Alex Williamson 已提交
852 853 854 855
#define KVM_DEV_TYPE_VFIO		4
#define  KVM_DEV_VFIO_GROUP			1
#define   KVM_DEV_VFIO_GROUP_ADD			1
#define   KVM_DEV_VFIO_GROUP_DEL			2
856

857 858 859
/*
 * ioctls for VM fds
 */
J
Jan Kiszka 已提交
860
#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
A
Avi Kivity 已提交
861 862 863 864
/*
 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 * a vcpu fd.
 */
J
Jan Kiszka 已提交
865 866
#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
A
Avi Kivity 已提交
867
/* KVM_SET_MEMORY_ALIAS is obsolete: */
J
Jan Kiszka 已提交
868 869 870 871
#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 已提交
872
					struct kvm_userspace_memory_region)
J
Jan Kiszka 已提交
873 874
#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
875 876 877 878 879 880 881 882 883

/* enable ucontrol for s390 */
struct kvm_s390_ucas_mapping {
	__u64 user_addr;
	__u64 vcpu_addr;
	__u64 length;
};
#define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
#define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
884
#define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long)
885

886
/* Device model IOC */
J
Jan Kiszka 已提交
887 888 889 890 891 892 893 894
#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)
895 896 897 898
#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 已提交
899 900 901
#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)
902
/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
J
Jan Kiszka 已提交
903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922
#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)
923 924
/* Available with KVM_CAP_PPC_GET_PVINFO */
#define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
925 926 927
/* Available with KVM_CAP_TSC_CONTROL */
#define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
#define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
928 929 930
/* Available with KVM_CAP_PCI_2_3 */
#define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
				       struct kvm_assigned_pci_dev)
931 932
/* Available with KVM_CAP_SIGNAL_MSI */
#define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
933 934
/* Available with KVM_CAP_PPC_GET_SMMU_INFO */
#define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
935 936
/* Available with KVM_CAP_PPC_ALLOC_HTAB */
#define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32)
937 938 939
#define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
/* Available with KVM_CAP_RMA */
#define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
940 941
/* Available with KVM_CAP_PPC_HTAB_FD */
#define KVM_PPC_GET_HTAB_FD	  _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
942 943
/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
#define KVM_ARM_SET_DEVICE_ADDR	  _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
944 945
/* Available with KVM_CAP_PPC_RTAS */
#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
A
Avi Kivity 已提交
946

S
Scott Wood 已提交
947 948 949 950 951 952 953 954
/* ioctl for vm fd */
#define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)

/* ioctls for fds returned by KVM_CREATE_DEVICE */
#define KVM_SET_DEVICE_ATTR	  _IOW(KVMIO,  0xe1, struct kvm_device_attr)
#define KVM_GET_DEVICE_ATTR	  _IOW(KVMIO,  0xe2, struct kvm_device_attr)
#define KVM_HAS_DEVICE_ATTR	  _IOW(KVMIO,  0xe3, struct kvm_device_attr)

A
Avi Kivity 已提交
955 956 957
/*
 * ioctls for vcpu fds
 */
A
Avi Kivity 已提交
958 959 960 961 962 963 964
#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 已提交
965
/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
J
Jan Kiszka 已提交
966
#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
A
Avi Kivity 已提交
967 968 969
#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 已提交
970
#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
A
Avi Kivity 已提交
971 972
#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
973 974
#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
975 976
#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
977
/* Available with KVM_CAP_VAPIC */
J
Jan Kiszka 已提交
978
#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
A
Avi Kivity 已提交
979 980
/* Available with KVM_CAP_VAPIC */
#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
981 982
/* valid for virtual machine (for floating interrupt)_and_ vcpu */
#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
983 984 985 986 987 988 989
/* 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 已提交
990
#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
991 992
#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
993
/* Available with KVM_CAP_NMI */
J
Jan Kiszka 已提交
994
#define KVM_NMI                   _IO(KVMIO,   0x9a)
J
Jan Kiszka 已提交
995 996
/* Available with KVM_CAP_SET_GUEST_DEBUG */
#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
H
Huang Ying 已提交
997 998 999 1000
/* 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 已提交
1001
/* IA64 stack access */
1002 1003
#define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
#define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
J
Jan Kiszka 已提交
1004 1005 1006
/* 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)
1007 1008 1009
/* Available with KVM_CAP_DEBUGREGS */
#define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
#define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
1010
#define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
1011 1012 1013 1014 1015 1016
/* Available with KVM_CAP_XSAVE */
#define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave)
#define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave)
/* Available with KVM_CAP_XCRS */
#define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs)
#define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs)
S
Scott Wood 已提交
1017 1018
/* Available with KVM_CAP_SW_TLB */
#define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
1019 1020 1021
/* Available with KVM_CAP_ONE_REG */
#define KVM_GET_ONE_REG		  _IOW(KVMIO,  0xab, struct kvm_one_reg)
#define KVM_SET_ONE_REG		  _IOW(KVMIO,  0xac, struct kvm_one_reg)
1022 1023
/* VM is being stopped by host */
#define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)
1024
#define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
1025
#define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
1026
#define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
1027

1028
#define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)
1029 1030
#define KVM_DEV_ASSIGN_PCI_2_3		(1 << 1)
#define KVM_DEV_ASSIGN_MASK_INTX	(1 << 2)
1031

B
Ben-Ami Yassour 已提交
1032 1033 1034 1035 1036
struct kvm_assigned_pci_dev {
	__u32 assigned_dev_id;
	__u32 busnr;
	__u32 devfn;
	__u32 flags;
1037
	__u32 segnr;
1038
	union {
1039
		__u32 reserved[11];
1040
	};
B
Ben-Ami Yassour 已提交
1041 1042
};

1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053
#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 已提交
1054 1055
struct kvm_assigned_irq {
	__u32 assigned_dev_id;
1056
	__u32 host_irq; /* ignored (legacy field) */
B
Ben-Ami Yassour 已提交
1057 1058
	__u32 guest_irq;
	__u32 flags;
1059 1060 1061
	union {
		__u32 reserved[12];
	};
B
Ben-Ami Yassour 已提交
1062 1063
};

S
Sheng Yang 已提交
1064 1065 1066 1067 1068 1069
struct kvm_assigned_msix_nr {
	__u32 assigned_dev_id;
	__u16 entry_nr;
	__u16 padding;
};

1070
#define KVM_MAX_MSIX_PER_DEV		256
S
Sheng Yang 已提交
1071 1072 1073 1074 1075 1076 1077
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 已提交
1078
#endif /* __LINUX_KVM_H */