kvm.h 60.7 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
A
Avi Kivity 已提交
2 3 4 5 6 7
#ifndef __LINUX_KVM_H
#define __LINUX_KVM_H

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

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

17
#define KVM_API_VERSION 12
A
Avi Kivity 已提交
18

J
Jan Kiszka 已提交
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 57 58
/* *** 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 已提交
59
struct kvm_user_trace_setup {
J
Jan Kiszka 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
	__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 已提交
82 83
};

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

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


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

97 98 99 100 101 102 103 104 105
/* 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 */
};

106 107 108 109 110
/*
 * 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 已提交
111 112
#define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
#define KVM_MEM_READONLY	(1UL << 1)
A
Avi Kivity 已提交
113

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

129 130 131 132 133 134

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

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

#define KVM_PIT_SPEAKER_DUMMY     1

152 153 154 155 156 157 158
struct kvm_s390_skeys {
	__u64 start_gfn;
	__u64 count;
	__u64 skeydata_addr;
	__u32 flags;
	__u32 reserved[9];
};
A
Andrey Smetanin 已提交
159

160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
#define KVM_S390_CMMA_PEEK (1 << 0)

/**
 * kvm_s390_cmma_log - Used for CMMA migration.
 *
 * Used both for input and output.
 *
 * @start_gfn: Guest page number to start from.
 * @count: Size of the result buffer.
 * @flags: Control operation mode via KVM_S390_CMMA_* flags
 * @remaining: Used with KVM_S390_GET_CMMA_BITS. Indicates how many dirty
 *             pages are still remaining.
 * @mask: Used with KVM_S390_SET_CMMA_BITS. Bitmap of bits to actually set
 *        in the PGSTE.
 * @values: Pointer to the values buffer.
 *
 * Used in KVM_S390_{G,S}ET_CMMA_BITS ioctls.
 */
struct kvm_s390_cmma_log {
	__u64 start_gfn;
	__u32 count;
	__u32 flags;
	union {
		__u64 remaining;
		__u64 mask;
	};
	__u64 values;
};

A
Andrey Smetanin 已提交
189 190
struct kvm_hyperv_exit {
#define KVM_EXIT_HYPERV_SYNIC          1
191
#define KVM_EXIT_HYPERV_HCALL          2
192
#define KVM_EXIT_HYPERV_SYNDBG         3
A
Andrey Smetanin 已提交
193
	__u32 type;
194
	__u32 pad1;
A
Andrey Smetanin 已提交
195 196 197
	union {
		struct {
			__u32 msr;
198
			__u32 pad2;
A
Andrey Smetanin 已提交
199 200 201 202
			__u64 control;
			__u64 evt_page;
			__u64 msg_page;
		} synic;
203 204 205 206 207
		struct {
			__u64 input;
			__u64 result;
			__u64 params[2];
		} hcall;
208 209 210 211 212 213 214 215 216
		struct {
			__u32 msr;
			__u32 pad2;
			__u64 control;
			__u64 status;
			__u64 send_page;
			__u64 recv_page;
			__u64 pending_page;
		} syndbg;
A
Andrey Smetanin 已提交
217 218 219
	} u;
};

220 221 222 223 224 225 226 227 228 229 230 231 232 233
struct kvm_xen_exit {
#define KVM_EXIT_XEN_HCALL          1
	__u32 type;
	union {
		struct {
			__u32 longmode;
			__u32 cpl;
			__u64 input;
			__u64 result;
			__u64 params[6];
		} hcall;
	} u;
};

234 235 236
#define KVM_S390_GET_SKEYS_NONE   1
#define KVM_S390_SKEYS_MAX        1048576

A
Avi Kivity 已提交
237 238 239 240 241 242 243 244 245 246 247 248
#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
249
#define KVM_EXIT_TPR_ACCESS       12
250
#define KVM_EXIT_S390_SIEIC       13
251
#define KVM_EXIT_S390_RESET       14
A
Alexander Graf 已提交
252
#define KVM_EXIT_DCR              15 /* deprecated */
253
#define KVM_EXIT_NMI              16
254
#define KVM_EXIT_INTERNAL_ERROR   17
255
#define KVM_EXIT_OSI              18
256
#define KVM_EXIT_PAPR_HCALL	  19
257
#define KVM_EXIT_S390_UCONTROL	  20
258
#define KVM_EXIT_WATCHDOG         21
259
#define KVM_EXIT_S390_TSCH        22
260
#define KVM_EXIT_EPR              23
261
#define KVM_EXIT_SYSTEM_EVENT     24
262
#define KVM_EXIT_S390_STSI        25
263
#define KVM_EXIT_IOAPIC_EOI       26
A
Andrey Smetanin 已提交
264
#define KVM_EXIT_HYPERV           27
265
#define KVM_EXIT_ARM_NISV         28
266 267
#define KVM_EXIT_X86_RDMSR        29
#define KVM_EXIT_X86_WRMSR        30
268
#define KVM_EXIT_DIRTY_RING_FULL  31
269
#define KVM_EXIT_AP_RESET_HOLD    32
C
Chenyi Qiang 已提交
270
#define KVM_EXIT_X86_BUS_LOCK     33
271
#define KVM_EXIT_XEN              34
A
Atish Patra 已提交
272
#define KVM_EXIT_RISCV_SBI        35
273 274

/* For KVM_EXIT_INTERNAL_ERROR */
275 276 277 278 279 280
/* 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
281 282
/* Encounter unexpected vm-exit reason */
#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
A
Avi Kivity 已提交
283

284 285 286
/* Flags that describe what fields in emulation_failure hold valid data. */
#define KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES (1ULL << 0)

287
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
A
Avi Kivity 已提交
288 289
struct kvm_run {
	/* in */
290
	__u8 request_interrupt_window;
291 292
	__u8 immediate_exit;
	__u8 padding1[6];
A
Avi Kivity 已提交
293 294 295

	/* out */
	__u32 exit_reason;
296 297
	__u8 ready_for_interrupt_injection;
	__u8 if_flag;
298
	__u16 flags;
299 300

	/* in (pre_kvm_run), out (post_kvm_run) */
301 302 303
	__u64 cr8;
	__u64 apic_base;

304 305 306 307 308
#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 已提交
309 310 311
	union {
		/* KVM_EXIT_UNKNOWN */
		struct {
312
			__u64 hardware_exit_reason;
A
Avi Kivity 已提交
313
		} hw;
314 315 316
		/* KVM_EXIT_FAIL_ENTRY */
		struct {
			__u64 hardware_entry_failure_reason;
317
			__u32 cpu;
318
		} fail_entry;
A
Avi Kivity 已提交
319 320 321 322 323 324
		/* KVM_EXIT_EXCEPTION */
		struct {
			__u32 exception;
			__u32 error_code;
		} ex;
		/* KVM_EXIT_IO */
325
		struct {
A
Avi Kivity 已提交
326 327 328 329 330
#define KVM_EXIT_IO_IN  0
#define KVM_EXIT_IO_OUT 1
			__u8 direction;
			__u8 size; /* bytes */
			__u16 port;
331 332
			__u32 count;
			__u64 data_offset; /* relative to kvm_run start */
A
Avi Kivity 已提交
333
		} io;
334
		/* KVM_EXIT_DEBUG */
A
Avi Kivity 已提交
335
		struct {
J
Jan Kiszka 已提交
336
			struct kvm_debug_exit_arch arch;
A
Avi Kivity 已提交
337 338 339 340 341 342 343 344
		} debug;
		/* KVM_EXIT_MMIO */
		struct {
			__u64 phys_addr;
			__u8  data[8];
			__u32 len;
			__u8  is_write;
		} mmio;
345 346
		/* KVM_EXIT_HYPERCALL */
		struct {
J
Jeff Dike 已提交
347
			__u64 nr;
348 349 350 351 352
			__u64 args[6];
			__u64 ret;
			__u32 longmode;
			__u32 pad;
		} hypercall;
353 354 355 356 357 358
		/* KVM_EXIT_TPR_ACCESS */
		struct {
			__u64 rip;
			__u32 is_write;
			__u32 pad;
		} tpr_access;
359 360 361 362 363 364
		/* KVM_EXIT_S390_SIEIC */
		struct {
			__u8 icptcode;
			__u16 ipa;
			__u32 ipb;
		} s390_sieic;
365 366 367 368 369 370 371
		/* 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;
372 373 374 375 376
		/* KVM_EXIT_S390_UCONTROL */
		struct {
			__u64 trans_exc_code;
			__u32 pgm_code;
		} s390_ucontrol;
A
Alexander Graf 已提交
377
		/* KVM_EXIT_DCR (deprecated) */
378 379 380 381 382
		struct {
			__u32 dcrn;
			__u32 data;
			__u8  is_write;
		} dcr;
383
		/* KVM_EXIT_INTERNAL_ERROR */
384 385
		struct {
			__u32 suberror;
386 387 388
			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
			__u32 ndata;
			__u64 data[16];
389
		} internal;
390 391 392 393 394 395 396 397 398 399 400
		/*
		 * KVM_INTERNAL_ERROR_EMULATION
		 *
		 * "struct emulation_failure" is an overlay of "struct internal"
		 * that is used for the KVM_INTERNAL_ERROR_EMULATION sub-type of
		 * KVM_EXIT_INTERNAL_ERROR.  Note, unlike other internal error
		 * sub-types, this struct is ABI!  It also needs to be backwards
		 * compatible with "struct internal".  Take special care that
		 * "ndata" is correct, that new fields are enumerated in "flags",
		 * and that each flag enumerates fields that are 64-bit aligned
		 * and sized (so that ndata+internal.data[] is valid/accurate).
401 402 403 404 405
		 *
		 * Space beyond the defined fields may be used to store arbitrary
		 * debug information relating to the emulation failure. It is
		 * accounted for in "ndata" but the format is unspecified and is
		 * not represented in "flags". Any such information is *not* ABI!
406 407 408 409 410
		 */
		struct {
			__u32 suberror;
			__u32 ndata;
			__u64 flags;
411 412 413 414 415 416
			union {
				struct {
					__u8  insn_size;
					__u8  insn_bytes[15];
				};
			};
417
			/* Arbitrary debug data may follow. */
418
		} emulation_failure;
419 420 421 422
		/* KVM_EXIT_OSI */
		struct {
			__u64 gprs[32];
		} osi;
423
		/* KVM_EXIT_PAPR_HCALL */
424 425 426 427 428
		struct {
			__u64 nr;
			__u64 ret;
			__u64 args[9];
		} papr_hcall;
429 430 431 432 433 434 435 436 437
		/* 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;
438 439 440 441
		/* KVM_EXIT_EPR */
		struct {
			__u32 epr;
		} epr;
442 443 444 445
		/* KVM_EXIT_SYSTEM_EVENT */
		struct {
#define KVM_SYSTEM_EVENT_SHUTDOWN       1
#define KVM_SYSTEM_EVENT_RESET          2
446
#define KVM_SYSTEM_EVENT_CRASH          3
447
#define KVM_SYSTEM_EVENT_WAKEUP         4
448
#define KVM_SYSTEM_EVENT_SUSPEND        5
449
#define KVM_SYSTEM_EVENT_SEV_TERM       6
450
			__u32 type;
451
			__u32 ndata;
452 453 454 455 456 457
			union {
#ifndef __KERNEL__
				__u64 flags;
#endif
				__u64 data[16];
			};
458
		} system_event;
459 460 461 462 463 464 465 466 467
		/* KVM_EXIT_S390_STSI */
		struct {
			__u64 addr;
			__u8 ar;
			__u8 reserved;
			__u8 fc;
			__u8 sel1;
			__u16 sel2;
		} s390_stsi;
468 469 470 471
		/* KVM_EXIT_IOAPIC_EOI */
		struct {
			__u8 vector;
		} eoi;
A
Andrey Smetanin 已提交
472 473
		/* KVM_EXIT_HYPERV */
		struct kvm_hyperv_exit hyperv;
474 475 476 477 478
		/* KVM_EXIT_ARM_NISV */
		struct {
			__u64 esr_iss;
			__u64 fault_ipa;
		} arm_nisv;
479 480 481 482 483 484
		/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
		struct {
			__u8 error; /* user -> kernel */
			__u8 pad[7];
#define KVM_MSR_EXIT_REASON_INVAL	(1 << 0)
#define KVM_MSR_EXIT_REASON_UNKNOWN	(1 << 1)
485
#define KVM_MSR_EXIT_REASON_FILTER	(1 << 2)
486 487 488 489
			__u32 reason; /* kernel -> user */
			__u32 index; /* kernel -> user */
			__u64 data; /* kernel <-> user */
		} msr;
490 491
		/* KVM_EXIT_XEN */
		struct kvm_xen_exit xen;
A
Atish Patra 已提交
492 493 494 495 496 497 498
		/* KVM_EXIT_RISCV_SBI */
		struct {
			unsigned long extension_id;
			unsigned long function_id;
			unsigned long args[6];
			unsigned long ret[2];
		} riscv_sbi;
499 500
		/* Fix the size of the union. */
		char padding[256];
A
Avi Kivity 已提交
501
	};
502

503 504 505 506
	/* 2048 is the size of the char array used to bound/pad the size
	 * of the union that holds sync regs.
	 */
	#define SYNC_REGS_SIZE_BYTES 2048
507 508 509 510 511 512 513 514 515 516 517
	/*
	 * 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;
518
		char padding[SYNC_REGS_SIZE_BYTES];
519
	} s;
A
Avi Kivity 已提交
520 521
};

522 523 524 525 526
/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */

struct kvm_coalesced_mmio_zone {
	__u64 addr;
	__u32 size;
P
Peng Hao 已提交
527 528 529 530
	union {
		__u32 pad;
		__u32 pio;
	};
531 532 533 534 535
};

struct kvm_coalesced_mmio {
	__u64 phys_addr;
	__u32 len;
P
Peng Hao 已提交
536 537 538 539
	union {
		__u32 pad;
		__u32 pio;
	};
540 541 542 543 544 545 546 547 548 549 550 551
	__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 已提交
552 553 554 555 556 557 558 559 560 561
/* for KVM_TRANSLATE */
struct kvm_translation {
	/* in */
	__u64 linear_address;

	/* out */
	__u64 physical_address;
	__u8  valid;
	__u8  writeable;
	__u8  usermode;
562
	__u8  pad[5];
A
Avi Kivity 已提交
563 564
};

565 566 567 568 569 570 571 572
/* for KVM_S390_MEM_OP */
struct kvm_s390_mem_op {
	/* in */
	__u64 gaddr;		/* the guest address */
	__u64 flags;		/* flags */
	__u32 size;		/* amount of bytes */
	__u32 op;		/* type of operation */
	__u64 buf;		/* buffer in userspace */
573
	union {
574 575 576 577
		struct {
			__u8 ar;	/* the access register number */
			__u8 key;	/* access key, ignored if flag unset */
		};
578
		__u32 sida_offset; /* offset into the sida */
579
		__u8 reserved[32]; /* ignored */
580
	};
581 582 583 584
};
/* types for kvm_s390_mem_op->op */
#define KVM_S390_MEMOP_LOGICAL_READ	0
#define KVM_S390_MEMOP_LOGICAL_WRITE	1
585 586
#define KVM_S390_MEMOP_SIDA_READ	2
#define KVM_S390_MEMOP_SIDA_WRITE	3
587 588
#define KVM_S390_MEMOP_ABSOLUTE_READ	4
#define KVM_S390_MEMOP_ABSOLUTE_WRITE	5
589 590 591
/* flags for kvm_s390_mem_op->flags */
#define KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
#define KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)
592
#define KVM_S390_MEMOP_F_SKEY_PROTECTION	(1ULL << 2)
593

A
Avi Kivity 已提交
594 595 596 597 598 599 600 601 602
/* for KVM_INTERRUPT */
struct kvm_interrupt {
	/* in */
	__u32 irq;
};

/* for KVM_GET_DIRTY_LOG */
struct kvm_dirty_log {
	__u32 slot;
603
	__u32 padding1;
A
Avi Kivity 已提交
604 605
	union {
		void __user *dirty_bitmap; /* one bit per page */
606
		__u64 padding2;
A
Avi Kivity 已提交
607 608 609
	};
};

610 611 612 613 614 615 616 617 618 619 620
/* for KVM_CLEAR_DIRTY_LOG */
struct kvm_clear_dirty_log {
	__u32 slot;
	__u32 num_pages;
	__u64 first_page;
	union {
		void __user *dirty_bitmap; /* one bit per page */
		__u64 padding2;
	};
};

A
Avi Kivity 已提交
621 622 623 624 625 626
/* for KVM_SET_SIGNAL_MASK */
struct kvm_signal_mask {
	__u32 len;
	__u8  sigset[0];
};

627 628 629 630 631 632 633
/* for KVM_TPR_ACCESS_REPORTING */
struct kvm_tpr_access_ctl {
	__u32 enabled;
	__u32 flags;
	__u32 reserved[8];
};

A
Avi Kivity 已提交
634 635 636 637 638
/* for KVM_SET_VAPIC_ADDR */
struct kvm_vapic_addr {
	__u64 vapic_addr;
};

639
/* for KVM_SET_MP_STATE */
640

641
/* not all states are valid on all architectures */
642 643 644 645 646
#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
647 648 649 650
#define KVM_MP_STATE_STOPPED           5
#define KVM_MP_STATE_CHECK_STOP        6
#define KVM_MP_STATE_OPERATING         7
#define KVM_MP_STATE_LOAD              8
651
#define KVM_MP_STATE_AP_RESET_HOLD     9
652
#define KVM_MP_STATE_SUSPENDED         10
653 654 655 656 657

struct kvm_mp_state {
	__u32 mp_state;
};

658 659 660 661 662
struct kvm_s390_psw {
	__u64 mask;
	__u64 addr;
};

663 664 665 666 667
/* 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
668 669
#define KVM_S390_INT_PFAULT_INIT	0xfffe0004u
#define KVM_S390_INT_PFAULT_DONE	0xfffe0005u
670
#define KVM_S390_MCHK			0xfffe1000u
671 672
#define KVM_S390_INT_CLOCK_COMP		0xffff1004u
#define KVM_S390_INT_CPU_TIMER		0xffff1005u
673 674 675
#define KVM_S390_INT_VIRTIO		0xffff2603u
#define KVM_S390_INT_SERVICE		0xffff2401u
#define KVM_S390_INT_EMERGENCY		0xffff1201u
676
#define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
677 678 679 680 681 682 683 684
/* 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
685
#define KVM_S390_INT_IO_AI_MASK		0x04000000u
686

687 688 689 690 691 692 693

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

694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718
struct kvm_s390_io_info {
	__u16 subchannel_id;
	__u16 subchannel_nr;
	__u32 io_int_parm;
	__u32 io_int_word;
};

struct kvm_s390_ext_info {
	__u32 ext_params;
	__u32 pad;
	__u64 ext_params2;
};

struct kvm_s390_pgm_info {
	__u64 trans_exc_code;
	__u64 mon_code;
	__u64 per_address;
	__u32 data_exc_code;
	__u16 code;
	__u16 mon_class_nr;
	__u8 per_code;
	__u8 per_atmid;
	__u8 exc_access_id;
	__u8 per_access_id;
	__u8 op_access_id;
719 720 721 722
#define KVM_S390_PGM_FLAGS_ILC_VALID	0x01
#define KVM_S390_PGM_FLAGS_ILC_0	0x02
#define KVM_S390_PGM_FLAGS_ILC_1	0x04
#define KVM_S390_PGM_FLAGS_ILC_MASK	0x06
723
#define KVM_S390_PGM_FLAGS_NO_REWIND	0x08
724 725
	__u8 flags;
	__u8 pad[2];
726 727 728 729 730 731 732 733 734 735 736 737 738 739
};

struct kvm_s390_prefix_info {
	__u32 address;
};

struct kvm_s390_extcall_info {
	__u16 code;
};

struct kvm_s390_emerg_info {
	__u16 code;
};

740 741 742 743 744
#define KVM_S390_STOP_FLAG_STORE_STATUS	0x01
struct kvm_s390_stop_info {
	__u32 flags;
};

745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
struct kvm_s390_mchk_info {
	__u64 cr14;
	__u64 mcic;
	__u64 failing_storage_address;
	__u32 ext_damage_code;
	__u32 pad;
	__u8 fixed_logout[16];
};

struct kvm_s390_irq {
	__u64 type;
	union {
		struct kvm_s390_io_info io;
		struct kvm_s390_ext_info ext;
		struct kvm_s390_pgm_info pgm;
		struct kvm_s390_emerg_info emerg;
		struct kvm_s390_extcall_info extcall;
		struct kvm_s390_prefix_info prefix;
763
		struct kvm_s390_stop_info stop;
764 765 766 767 768
		struct kvm_s390_mchk_info mchk;
		char reserved[64];
	} u;
};

769 770
struct kvm_s390_irq_state {
	__u64 buf;
771
	__u32 flags;        /* will stay unused for compatibility reasons */
772
	__u32 len;
773
	__u32 reserved[4];  /* will stay unused for compatibility reasons */
774 775
};

J
Jan Kiszka 已提交
776 777 778 779 780 781 782 783 784 785 786
/* 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 已提交
787 788 789 790
enum {
	kvm_ioeventfd_flag_nr_datamatch,
	kvm_ioeventfd_flag_nr_pio,
	kvm_ioeventfd_flag_nr_deassign,
791
	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
792
	kvm_ioeventfd_flag_nr_fast_mmio,
G
Gregory Haskins 已提交
793 794 795 796 797 798
	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)
799 800
#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
G
Gregory Haskins 已提交
801 802 803 804 805 806

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

struct kvm_ioeventfd {
	__u64 datamatch;
	__u64 addr;        /* legal pio/mmio address */
807
	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
G
Gregory Haskins 已提交
808 809 810 811 812
	__s32 fd;
	__u32 flags;
	__u8  pad[36];
};

813
#define KVM_X86_DISABLE_EXITS_MWAIT          (1 << 0)
M
Michael S. Tsirkin 已提交
814
#define KVM_X86_DISABLE_EXITS_HLT            (1 << 1)
815
#define KVM_X86_DISABLE_EXITS_PAUSE          (1 << 2)
816
#define KVM_X86_DISABLE_EXITS_CSTATE         (1 << 3)
817
#define KVM_X86_DISABLE_VALID_EXITS          (KVM_X86_DISABLE_EXITS_MWAIT | \
M
Michael S. Tsirkin 已提交
818
                                              KVM_X86_DISABLE_EXITS_HLT | \
819 820
                                              KVM_X86_DISABLE_EXITS_PAUSE | \
                                              KVM_X86_DISABLE_EXITS_CSTATE)
821

822 823 824 825 826 827 828 829 830
/* for KVM_ENABLE_CAP */
struct kvm_enable_cap {
	/* in */
	__u32 cap;
	__u32 flags;
	__u64 args[4];
	__u8  pad[64];
};

831
/* for KVM_PPC_GET_PVINFO */
832 833 834

#define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)

835 836 837 838 839 840 841
struct kvm_ppc_pvinfo {
	/* out */
	__u32 flags;
	__u32 hcall[4];
	__u8  pad[108];
};

842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857
/* 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
858
#define KVM_PPC_NO_HASH			0x00000004
859 860 861 862

struct kvm_ppc_smmu_info {
	__u64 flags;
	__u32 slb_size;
863 864
	__u16 data_keys;	/* # storage keys supported for data */
	__u16 instr_keys;	/* # storage keys supported for instructions */
865 866 867
	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
};

868 869 870 871 872 873 874
/* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */
struct kvm_ppc_resize_hpt {
	__u64 flags;
	__u32 shift;
	__u32 pad;
};

A
Avi Kivity 已提交
875 876
#define KVMIO 0xAE

877 878 879
/* machine type bits, to be used as argument to KVM_CREATE_VM */
#define KVM_VM_S390_UCONTROL	1

880 881 882 883
/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
#define KVM_VM_PPC_HV 1
#define KVM_VM_PPC_PR 2

884 885
/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
#define KVM_VM_MIPS_AUTO	0
886
#define KVM_VM_MIPS_VZ		1
887
#define KVM_VM_MIPS_TE		2
888

889 890
#define KVM_S390_SIE_PAGE_OFFSET 1

891 892 893 894 895 896 897 898 899
/*
 * On arm64, machine type can be used to request the physical
 * address size for the VM. Bits[7-0] are reserved for the guest
 * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
 * value 0 implies the default IPA size, 40bits.
 */
#define KVM_VM_TYPE_ARM_IPA_SIZE_MASK	0xffULL
#define KVM_VM_TYPE_ARM_IPA_SIZE(x)		\
	((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
900 901 902
/*
 * ioctls for /dev/kvm fds:
 */
A
Avi Kivity 已提交
903 904 905
#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)
906 907

#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
908 909 910 911 912
/*
 * 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)
913 914 915 916
/*
 * Get size for mmap(vcpu_fd)
 */
#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
917
#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
J
Jan Kiszka 已提交
918 919 920
#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 已提交
921
#define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
922
#define KVM_GET_MSR_FEATURE_INDEX_LIST    _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
J
Jan Kiszka 已提交
923

924 925 926 927
/*
 * Extension capability list.
 */
#define KVM_CAP_IRQCHIP	  0
E
Eddie Dong 已提交
928
#define KVM_CAP_HLT	  1
929
#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
930
#define KVM_CAP_USER_MEMORY 3
931
#define KVM_CAP_SET_TSS_ADDR 4
932
#define KVM_CAP_VAPIC 6
933
#define KVM_CAP_EXT_CPUID 7
934
#define KVM_CAP_CLOCKSOURCE 8
935
#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
936
#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
S
Sheng Yang 已提交
937
#define KVM_CAP_PIT 11
938
#define KVM_CAP_NOP_IO_DELAY 12
939
#define KVM_CAP_PV_MMU 13
940
#define KVM_CAP_MP_STATE 14
941
#define KVM_CAP_COALESCED_MMIO 15
942
#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
B
Ben-Ami Yassour 已提交
943
#define KVM_CAP_IOMMU 18
944 945
/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
946
#define KVM_CAP_USER_NMI 22
947
#ifdef __KVM_HAVE_GUEST_DEBUG
J
Jan Kiszka 已提交
948
#define KVM_CAP_SET_GUEST_DEBUG 23
949
#endif
950
#ifdef __KVM_HAVE_PIT
951
#define KVM_CAP_REINJECT_CONTROL 24
952 953
#endif
#define KVM_CAP_IRQ_ROUTING 25
954
#define KVM_CAP_IRQ_INJECT_STATUS 26
955
#define KVM_CAP_ASSIGN_DEV_IRQ 29
956 957
/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
H
Huang Ying 已提交
958 959 960
#ifdef __KVM_HAVE_MCE
#define KVM_CAP_MCE 31
#endif
G
Gregory Haskins 已提交
961
#define KVM_CAP_IRQFD 32
962 963 964
#ifdef __KVM_HAVE_PIT
#define KVM_CAP_PIT2 33
#endif
965
#define KVM_CAP_SET_BOOT_CPU_ID 34
B
Beth Kon 已提交
966 967 968
#ifdef __KVM_HAVE_PIT_STATE2
#define KVM_CAP_PIT_STATE2 35
#endif
G
Gregory Haskins 已提交
969
#define KVM_CAP_IOEVENTFD 36
970
#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
E
Ed Swierk 已提交
971 972 973
#ifdef __KVM_HAVE_XEN_HVM
#define KVM_CAP_XEN_HVM 38
#endif
974
#define KVM_CAP_ADJUST_CLOCK 39
975
#define KVM_CAP_INTERNAL_ERROR_DATA 40
J
Jan Kiszka 已提交
976 977 978
#ifdef __KVM_HAVE_VCPU_EVENTS
#define KVM_CAP_VCPU_EVENTS 41
#endif
979
#define KVM_CAP_S390_PSW 42
980
#define KVM_CAP_PPC_SEGSTATE 43
981
#define KVM_CAP_HYPERV 44
G
Gleb Natapov 已提交
982
#define KVM_CAP_HYPERV_VAPIC 45
983
#define KVM_CAP_HYPERV_SPIN 46
984
#define KVM_CAP_PCI_SEGMENT 47
985
#define KVM_CAP_PPC_PAIRED_SINGLES 48
986
#define KVM_CAP_INTR_SHADOW 49
987 988 989
#ifdef __KVM_HAVE_DEBUGREGS
#define KVM_CAP_DEBUGREGS 50
#endif
990
#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
991
#define KVM_CAP_PPC_OSI 52
992
#define KVM_CAP_PPC_UNSET_IRQ 53
993
#define KVM_CAP_ENABLE_CAP 54
994 995 996 997 998 999
#ifdef __KVM_HAVE_XSAVE
#define KVM_CAP_XSAVE 55
#endif
#ifdef __KVM_HAVE_XCRS
#define KVM_CAP_XCRS 56
#endif
1000
#define KVM_CAP_PPC_GET_PVINFO 57
1001
#define KVM_CAP_PPC_IRQ_LEVEL 58
1002
#define KVM_CAP_ASYNC_PF 59
1003 1004
#define KVM_CAP_TSC_CONTROL 60
#define KVM_CAP_GET_TSC_KHZ 61
S
Scott Wood 已提交
1005
#define KVM_CAP_PPC_BOOKE_SREGS 62
1006
#define KVM_CAP_SPAPR_TCE 63
1007
#define KVM_CAP_PPC_SMT 64
1008
#define KVM_CAP_PPC_RMA	65
1009
#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
1010
#define KVM_CAP_PPC_HIOR 67
1011
#define KVM_CAP_PPC_PAPR 68
S
Scott Wood 已提交
1012
#define KVM_CAP_SW_TLB 69
1013
#define KVM_CAP_ONE_REG 70
1014
#define KVM_CAP_S390_GMAP 71
1015
#define KVM_CAP_TSC_DEADLINE_TIMER 72
1016
#define KVM_CAP_S390_UCONTROL 73
1017
#define KVM_CAP_SYNC_REGS 74
1018
#define KVM_CAP_PCI_2_3 75
1019
#define KVM_CAP_KVMCLOCK_CTRL 76
1020
#define KVM_CAP_SIGNAL_MSI 77
1021
#define KVM_CAP_PPC_GET_SMMU_INFO 78
1022
#define KVM_CAP_S390_COW 79
1023
#define KVM_CAP_PPC_ALLOC_HTAB 80
X
Xiao Guangrong 已提交
1024
#define KVM_CAP_READONLY_MEM 81
1025
#define KVM_CAP_IRQFD_RESAMPLE 82
1026
#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
1027
#define KVM_CAP_PPC_HTAB_FD 84
1028
#define KVM_CAP_S390_CSS_SUPPORT 85
1029
#define KVM_CAP_PPC_EPR 86
1030
#define KVM_CAP_ARM_PSCI 87
1031
#define KVM_CAP_ARM_SET_DEVICE_ADDR 88
S
Scott Wood 已提交
1032
#define KVM_CAP_DEVICE_CTRL 89
S
Scott Wood 已提交
1033
#define KVM_CAP_IRQ_MPIC 90
1034
#define KVM_CAP_PPC_RTAS 91
1035
#define KVM_CAP_IRQ_XICS 92
1036
#define KVM_CAP_ARM_EL1_32BIT 93
1037
#define KVM_CAP_SPAPR_MULTITCE 94
B
Borislav Petkov 已提交
1038
#define KVM_CAP_EXT_EMUL_CPUID 95
1039
#define KVM_CAP_HYPERV_TIME 96
1040
#define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
1041
#define KVM_CAP_ENABLE_CAP_VM 98
1042
#define KVM_CAP_S390_IRQCHIP 99
1043
#define KVM_CAP_IOEVENTFD_NO_LENGTH 100
1044
#define KVM_CAP_VM_ATTRIBUTES 101
1045
#define KVM_CAP_ARM_PSCI_0_2 102
1046
#define KVM_CAP_PPC_FIXUP_HCALL 103
1047
#define KVM_CAP_PPC_ENABLE_HCALL 104
1048
#define KVM_CAP_CHECK_EXTENSION_VM 105
1049
#define KVM_CAP_S390_USER_SIGP 106
1050
#define KVM_CAP_S390_VECTOR_REGISTERS 107
1051
#define KVM_CAP_S390_MEM_OP 108
1052
#define KVM_CAP_S390_USER_STSI 109
1053
#define KVM_CAP_S390_SKEYS 110
J
James Hogan 已提交
1054
#define KVM_CAP_MIPS_FPU 111
J
James Hogan 已提交
1055
#define KVM_CAP_MIPS_MSA 112
1056
#define KVM_CAP_S390_INJECT_IRQ 113
1057
#define KVM_CAP_S390_IRQ_STATE 114
1058
#define KVM_CAP_PPC_HWRNG 115
1059
#define KVM_CAP_DISABLE_QUIRKS 116
1060
#define KVM_CAP_X86_SMM 117
1061
#define KVM_CAP_MULTI_ADDRESS_SPACE 118
1062 1063
#define KVM_CAP_GUEST_DEBUG_HW_BPS 119
#define KVM_CAP_GUEST_DEBUG_HW_WPS 120
1064
#define KVM_CAP_SPLIT_IRQCHIP 121
1065
#define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
1066
#define KVM_CAP_HYPERV_SYNIC 123
1067
#define KVM_CAP_S390_RI 124
1068
#define KVM_CAP_SPAPR_TCE_64 125
1069 1070
#define KVM_CAP_ARM_PMU_V3 126
#define KVM_CAP_VCPU_ATTRIBUTES 127
G
Greg Kurz 已提交
1071
#define KVM_CAP_MAX_VCPU_ID 128
1072
#define KVM_CAP_X2APIC_API 129
1073
#define KVM_CAP_S390_USER_INSTR0 130
1074
#define KVM_CAP_MSI_DEVID 131
1075
#define KVM_CAP_PPC_HTM 132
1076
#define KVM_CAP_SPAPR_RESIZE_HPT 133
1077 1078
#define KVM_CAP_PPC_MMU_RADIX 134
#define KVM_CAP_PPC_MMU_HASH_V3 135
1079
#define KVM_CAP_IMMEDIATE_EXIT 136
1080 1081
#define KVM_CAP_MIPS_VZ 137
#define KVM_CAP_MIPS_TE 138
J
James Hogan 已提交
1082
#define KVM_CAP_MIPS_64BIT 139
1083 1084
#define KVM_CAP_S390_GS 140
#define KVM_CAP_S390_AIS 141
1085
#define KVM_CAP_SPAPR_TCE_VFIO 142
1086
#define KVM_CAP_X86_DISABLE_EXITS 143
1087
#define KVM_CAP_ARM_USER_IRQ 144
1088
#define KVM_CAP_S390_CMMA_MIGRATION 145
1089 1090
#define KVM_CAP_PPC_FWNMI 146
#define KVM_CAP_PPC_SMT_POSSIBLE 147
1091
#define KVM_CAP_HYPERV_SYNIC2 148
1092
#define KVM_CAP_HYPERV_VP_INDEX 149
1093
#define KVM_CAP_S390_AIS_MIGRATION 150
1094
#define KVM_CAP_PPC_GET_CPU_CHAR 151
1095
#define KVM_CAP_S390_BPB 152
1096
#define KVM_CAP_GET_MSR_FEATURES 153
1097
#define KVM_CAP_HYPERV_EVENTFD 154
1098
#define KVM_CAP_HYPERV_TLBFLUSH 155
1099
#define KVM_CAP_S390_HPAGE_1M 156
1100
#define KVM_CAP_NESTED_STATE 157
1101
#define KVM_CAP_ARM_INJECT_SERROR_ESR 158
1102
#define KVM_CAP_MSR_PLATFORM_INFO 159
1103
#define KVM_CAP_PPC_NESTED_HV 160
1104
#define KVM_CAP_HYPERV_SEND_IPI 161
P
Peng Hao 已提交
1105
#define KVM_CAP_COALESCED_PIO 162
1106
#define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
1107
#define KVM_CAP_EXCEPTION_PAYLOAD 164
P
Paolo Bonzini 已提交
1108
#define KVM_CAP_ARM_VM_IPA_SIZE 165
1109
#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166 /* Obsolete */
1110
#define KVM_CAP_HYPERV_CPUID 167
1111
#define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 168
1112
#define KVM_CAP_PPC_IRQ_XIVE 169
1113 1114 1115
#define KVM_CAP_ARM_SVE 170
#define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
#define KVM_CAP_ARM_PTRAUTH_GENERIC 172
E
Eric Hankland 已提交
1116
#define KVM_CAP_PMU_EVENT_FILTER 173
1117
#define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174
1118
#define KVM_CAP_HYPERV_DIRECT_TLBFLUSH 175
1119
#define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176
1120 1121
#define KVM_CAP_ARM_NISV_TO_USER 177
#define KVM_CAP_ARM_INJECT_EXT_DABT 178
1122
#define KVM_CAP_S390_VCPU_RESETS 179
1123
#define KVM_CAP_S390_PROTECTED 180
1124
#define KVM_CAP_PPC_SECURE_GUEST 181
1125
#define KVM_CAP_HALT_POLL 182
1126
#define KVM_CAP_ASYNC_PF_INT 183
1127
#define KVM_CAP_LAST_CPU 184
1128
#define KVM_CAP_SMALLER_MAXPHYADDR 185
1129
#define KVM_CAP_S390_DIAG318 186
1130
#define KVM_CAP_STEAL_TIME 187
1131
#define KVM_CAP_X86_USER_SPACE_MSR 188
1132
#define KVM_CAP_X86_MSR_FILTER 189
1133
#define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
1134
#define KVM_CAP_SYS_HYPERV_CPUID 191
1135
#define KVM_CAP_DIRTY_LOG_RING 192
C
Chenyi Qiang 已提交
1136
#define KVM_CAP_X86_BUS_LOCK_EXIT 193
1137
#define KVM_CAP_PPC_DAWR1 194
1138
#define KVM_CAP_SET_GUEST_DEBUG2 195
1139
#define KVM_CAP_SGX_ATTRIBUTE 196
1140
#define KVM_CAP_VM_COPY_ENC_CONTEXT_FROM 197
1141
#define KVM_CAP_PTP_KVM 198
1142
#define KVM_CAP_HYPERV_ENFORCE_CPUID 199
1143
#define KVM_CAP_SREGS2 200
1144
#define KVM_CAP_EXIT_HYPERCALL 201
1145
#define KVM_CAP_PPC_RPT_INVALIDATE 202
1146
#define KVM_CAP_BINARY_STATS_FD 203
1147
#define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
1148
#define KVM_CAP_ARM_MTE 205
1149
#define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
1150
#define KVM_CAP_VM_GPA_BITS 207
1151
#define KVM_CAP_XSAVE2 208
1152
#define KVM_CAP_SYS_ATTRIBUTES 209
1153
#define KVM_CAP_PPC_AIL_MODE_3 210
1154
#define KVM_CAP_S390_MEM_OP_EXTENSION 211
1155
#define KVM_CAP_PMU_CAPABILITY 212
1156
#define KVM_CAP_DISABLE_QUIRKS2 213
1157
#define KVM_CAP_VM_TSC_CONTROL 214
1158
#define KVM_CAP_SYSTEM_EVENT_DATA 215
1159
#define KVM_CAP_ARM_SYSTEM_SUSPEND 216
1160 1161 1162 1163 1164 1165 1166 1167

#ifdef KVM_CAP_IRQ_ROUTING

struct kvm_irq_routing_irqchip {
	__u32 irqchip;
	__u32 pin;
};

S
Sheng Yang 已提交
1168 1169 1170 1171
struct kvm_irq_routing_msi {
	__u32 address_lo;
	__u32 address_hi;
	__u32 data;
1172 1173 1174 1175
	union {
		__u32 pad;
		__u32 devid;
	};
S
Sheng Yang 已提交
1176 1177
};

1178 1179 1180 1181 1182 1183 1184 1185
struct kvm_irq_routing_s390_adapter {
	__u64 ind_addr;
	__u64 summary_addr;
	__u64 ind_offset;
	__u32 summary_offset;
	__u32 adapter_id;
};

1186 1187 1188 1189 1190
struct kvm_irq_routing_hv_sint {
	__u32 vcpu;
	__u32 sint;
};

1191 1192 1193 1194 1195 1196 1197 1198
struct kvm_irq_routing_xen_evtchn {
	__u32 port;
	__u32 vcpu;
	__u32 priority;
};

#define KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL ((__u32)(-1))

1199 1200
/* gsi routing entry types */
#define KVM_IRQ_ROUTING_IRQCHIP 1
S
Sheng Yang 已提交
1201
#define KVM_IRQ_ROUTING_MSI 2
1202
#define KVM_IRQ_ROUTING_S390_ADAPTER 3
1203
#define KVM_IRQ_ROUTING_HV_SINT 4
1204
#define KVM_IRQ_ROUTING_XEN_EVTCHN 5
1205 1206 1207 1208 1209 1210 1211 1212

struct kvm_irq_routing_entry {
	__u32 gsi;
	__u32 type;
	__u32 flags;
	__u32 pad;
	union {
		struct kvm_irq_routing_irqchip irqchip;
S
Sheng Yang 已提交
1213
		struct kvm_irq_routing_msi msi;
1214
		struct kvm_irq_routing_s390_adapter adapter;
1215
		struct kvm_irq_routing_hv_sint hv_sint;
1216
		struct kvm_irq_routing_xen_evtchn xen_evtchn;
1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
		__u32 pad[8];
	} u;
};

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

1227
#endif
1228

H
Huang Ying 已提交
1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241
#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 已提交
1242
#ifdef KVM_CAP_XEN_HVM
1243 1244
#define KVM_XEN_HVM_CONFIG_HYPERCALL_MSR	(1 << 0)
#define KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL	(1 << 1)
1245
#define KVM_XEN_HVM_CONFIG_SHARED_INFO		(1 << 2)
1246
#define KVM_XEN_HVM_CONFIG_RUNSTATE		(1 << 3)
1247
#define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL	(1 << 4)
1248
#define KVM_XEN_HVM_CONFIG_EVTCHN_SEND		(1 << 5)
1249

E
Ed Swierk 已提交
1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260
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 已提交
1261
#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
1262 1263 1264 1265 1266
/*
 * 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
1267
 * emulation.  See Documentation/virt/kvm/api.rst.
1268 1269
 */
#define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
G
Gregory Haskins 已提交
1270 1271 1272 1273 1274

struct kvm_irqfd {
	__u32 fd;
	__u32 gsi;
	__u32 flags;
1275 1276
	__u32 resamplefd;
	__u8  pad[16];
G
Gregory Haskins 已提交
1277 1278
};

1279 1280 1281 1282
/* For KVM_CAP_ADJUST_CLOCK */

/* Do not use 1, KVM_CHECK_EXTENSION returned it before we had flags.  */
#define KVM_CLOCK_TSC_STABLE		2
1283 1284
#define KVM_CLOCK_REALTIME		(1 << 2)
#define KVM_CLOCK_HOST_TSC		(1 << 3)
1285

1286 1287 1288
struct kvm_clock_data {
	__u64 clock;
	__u32 flags;
1289 1290 1291 1292
	__u32 pad0;
	__u64 realtime;
	__u64 host_tsc;
	__u32 pad[4];
1293 1294
};

1295 1296
/* For KVM_CAP_SW_TLB */

S
Scott Wood 已提交
1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311
#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;
};

1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325
/* 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
1326
#define KVM_REG_ARM64		0x6000000000000000ULL
1327
#define KVM_REG_MIPS		0x7000000000000000ULL
1328
#define KVM_REG_RISCV		0x8000000000000000ULL
1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339

#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
1340
#define KVM_REG_SIZE_U2048	0x0080000000000000ULL
1341

1342 1343 1344 1345 1346
struct kvm_reg_list {
	__u64 n; /* number of regs */
	__u64 reg[0];
};

1347 1348 1349 1350 1351
struct kvm_one_reg {
	__u64 id;
	__u64 addr;
};

1352
#define KVM_MSI_VALID_DEVID	(1U << 0)
1353 1354 1355 1356 1357
struct kvm_msi {
	__u32 address_lo;
	__u32 address_hi;
	__u32 data;
	__u32 flags;
1358 1359
	__u32 devid;
	__u8  pad[12];
1360 1361
};

1362 1363 1364 1365 1366
struct kvm_arm_device_addr {
	__u64 id;
	__u64 addr;
};

S
Scott Wood 已提交
1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384
/*
 * 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 */
};

A
Alex Williamson 已提交
1385 1386 1387
#define  KVM_DEV_VFIO_GROUP			1
#define   KVM_DEV_VFIO_GROUP_ADD			1
#define   KVM_DEV_VFIO_GROUP_DEL			2
1388
#define   KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE		3
1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402

enum kvm_device_type {
	KVM_DEV_TYPE_FSL_MPIC_20	= 1,
#define KVM_DEV_TYPE_FSL_MPIC_20	KVM_DEV_TYPE_FSL_MPIC_20
	KVM_DEV_TYPE_FSL_MPIC_42,
#define KVM_DEV_TYPE_FSL_MPIC_42	KVM_DEV_TYPE_FSL_MPIC_42
	KVM_DEV_TYPE_XICS,
#define KVM_DEV_TYPE_XICS		KVM_DEV_TYPE_XICS
	KVM_DEV_TYPE_VFIO,
#define KVM_DEV_TYPE_VFIO		KVM_DEV_TYPE_VFIO
	KVM_DEV_TYPE_ARM_VGIC_V2,
#define KVM_DEV_TYPE_ARM_VGIC_V2	KVM_DEV_TYPE_ARM_VGIC_V2
	KVM_DEV_TYPE_FLIC,
#define KVM_DEV_TYPE_FLIC		KVM_DEV_TYPE_FLIC
1403 1404
	KVM_DEV_TYPE_ARM_VGIC_V3,
#define KVM_DEV_TYPE_ARM_VGIC_V3	KVM_DEV_TYPE_ARM_VGIC_V3
1405 1406
	KVM_DEV_TYPE_ARM_VGIC_ITS,
#define KVM_DEV_TYPE_ARM_VGIC_ITS	KVM_DEV_TYPE_ARM_VGIC_ITS
1407 1408
	KVM_DEV_TYPE_XIVE,
#define KVM_DEV_TYPE_XIVE		KVM_DEV_TYPE_XIVE
1409 1410
	KVM_DEV_TYPE_ARM_PV_TIME,
#define KVM_DEV_TYPE_ARM_PV_TIME	KVM_DEV_TYPE_ARM_PV_TIME
1411 1412
	KVM_DEV_TYPE_MAX,
};
1413

1414 1415 1416 1417 1418
struct kvm_vfio_spapr_tce {
	__s32	groupfd;
	__s32	tablefd;
};

1419 1420 1421
/*
 * ioctls for VM fds
 */
J
Jan Kiszka 已提交
1422
#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
A
Avi Kivity 已提交
1423 1424 1425 1426
/*
 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 * a vcpu fd.
 */
J
Jan Kiszka 已提交
1427 1428
#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
A
Avi Kivity 已提交
1429
/* KVM_SET_MEMORY_ALIAS is obsolete: */
J
Jan Kiszka 已提交
1430 1431 1432 1433
#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 已提交
1434
					struct kvm_userspace_memory_region)
J
Jan Kiszka 已提交
1435 1436
#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
1437 1438 1439 1440 1441 1442 1443 1444 1445

/* 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)
1446
#define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long)
1447

1448
/* Device model IOC */
J
Jan Kiszka 已提交
1449 1450 1451 1452 1453 1454 1455 1456
#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)
1457 1458 1459 1460
#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 已提交
1461 1462 1463
#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)
1464
/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
J
Jan Kiszka 已提交
1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484
#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)
1485 1486
/* Available with KVM_CAP_PPC_GET_PVINFO */
#define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
1487 1488
/* Available with KVM_CAP_TSC_CONTROL for a vCPU, or with
*  KVM_CAP_VM_TSC_CONTROL to set defaults for a VM */
1489 1490
#define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
#define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
1491 1492 1493
/* Available with KVM_CAP_PCI_2_3 */
#define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
				       struct kvm_assigned_pci_dev)
1494 1495
/* Available with KVM_CAP_SIGNAL_MSI */
#define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
1496 1497
/* Available with KVM_CAP_PPC_GET_SMMU_INFO */
#define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
1498 1499
/* Available with KVM_CAP_PPC_ALLOC_HTAB */
#define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32)
1500
#define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
1501 1502
#define KVM_CREATE_SPAPR_TCE_64	  _IOW(KVMIO,  0xa8, \
				       struct kvm_create_spapr_tce_64)
1503 1504
/* Available with KVM_CAP_RMA */
#define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
1505 1506
/* Available with KVM_CAP_PPC_HTAB_FD */
#define KVM_PPC_GET_HTAB_FD	  _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
1507 1508
/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
#define KVM_ARM_SET_DEVICE_ADDR	  _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
1509 1510
/* Available with KVM_CAP_PPC_RTAS */
#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
1511 1512 1513
/* Available with KVM_CAP_SPAPR_RESIZE_HPT */
#define KVM_PPC_RESIZE_HPT_PREPARE _IOR(KVMIO, 0xad, struct kvm_ppc_resize_hpt)
#define KVM_PPC_RESIZE_HPT_COMMIT  _IOR(KVMIO, 0xae, struct kvm_ppc_resize_hpt)
1514 1515 1516 1517
/* Available with KVM_CAP_PPC_RADIX_MMU or KVM_CAP_PPC_HASH_MMU_V3 */
#define KVM_PPC_CONFIGURE_V3_MMU  _IOW(KVMIO,  0xaf, struct kvm_ppc_mmuv3_cfg)
/* Available with KVM_CAP_PPC_RADIX_MMU */
#define KVM_PPC_GET_RMMU_INFO	  _IOW(KVMIO,  0xb0, struct kvm_ppc_rmmu_info)
1518 1519
/* Available with KVM_CAP_PPC_GET_CPU_CHAR */
#define KVM_PPC_GET_CPU_CHAR	  _IOR(KVMIO,  0xb1, struct kvm_ppc_cpu_char)
E
Eric Hankland 已提交
1520 1521
/* Available with KVM_CAP_PMU_EVENT_FILTER */
#define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
1522
#define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
1523
#define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
A
Avi Kivity 已提交
1524

S
Scott Wood 已提交
1525 1526 1527 1528 1529 1530 1531 1532
/* 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 已提交
1533 1534 1535
/*
 * ioctls for vcpu fds
 */
A
Avi Kivity 已提交
1536 1537 1538 1539 1540 1541 1542
#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 已提交
1543
/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
J
Jan Kiszka 已提交
1544
#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
A
Avi Kivity 已提交
1545 1546 1547
#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 已提交
1548
#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
A
Avi Kivity 已提交
1549 1550
#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
1551 1552
#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
1553 1554
#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
1555
/* Available with KVM_CAP_VAPIC */
J
Jan Kiszka 已提交
1556
#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
A
Avi Kivity 已提交
1557 1558
/* Available with KVM_CAP_VAPIC */
#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
1559 1560
/* valid for virtual machine (for floating interrupt)_and_ vcpu */
#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
1561 1562 1563 1564 1565 1566 1567
/* 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 已提交
1568
#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
1569 1570
#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
1571
/* Available with KVM_CAP_USER_NMI */
J
Jan Kiszka 已提交
1572
#define KVM_NMI                   _IO(KVMIO,   0x9a)
J
Jan Kiszka 已提交
1573 1574
/* Available with KVM_CAP_SET_GUEST_DEBUG */
#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
H
Huang Ying 已提交
1575 1576 1577 1578
/* 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 已提交
1579 1580 1581
/* 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)
1582 1583 1584
/* 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)
1585 1586 1587 1588
/*
 * vcpu version available with KVM_ENABLE_CAP
 * vm version available with KVM_CAP_ENABLE_CAP_VM
 */
1589
#define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
1590 1591 1592 1593 1594 1595
/* 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 已提交
1596 1597
/* Available with KVM_CAP_SW_TLB */
#define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
1598 1599 1600
/* 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)
1601 1602
/* VM is being stopped by host */
#define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)
1603
#define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
1604
#define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
1605
#define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
1606 1607
/* Available with KVM_CAP_S390_MEM_OP */
#define KVM_S390_MEM_OP		  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
1608 1609 1610
/* Available with KVM_CAP_S390_SKEYS */
#define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
#define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
1611 1612
/* Available with KVM_CAP_S390_INJECT_IRQ */
#define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
1613 1614 1615
/* Available with KVM_CAP_S390_IRQ_STATE */
#define KVM_S390_SET_IRQ_STATE	  _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
#define KVM_S390_GET_IRQ_STATE	  _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
1616 1617
/* Available with KVM_CAP_X86_SMM */
#define KVM_SMI                   _IO(KVMIO,   0xb7)
1618
/* Available with KVM_CAP_S390_CMMA_MIGRATION */
1619
#define KVM_S390_GET_CMMA_BITS      _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log)
1620
#define KVM_S390_SET_CMMA_BITS      _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log)
1621 1622
/* Memory Encryption Commands */
#define KVM_MEMORY_ENCRYPT_OP      _IOWR(KVMIO, 0xba, unsigned long)
1623

1624 1625 1626 1627 1628 1629 1630 1631
struct kvm_enc_region {
	__u64 addr;
	__u64 size;
};

#define KVM_MEMORY_ENCRYPT_REG_REGION    _IOR(KVMIO, 0xbb, struct kvm_enc_region)
#define KVM_MEMORY_ENCRYPT_UNREG_REGION  _IOR(KVMIO, 0xbc, struct kvm_enc_region)

1632 1633 1634
/* Available with KVM_CAP_HYPERV_EVENTFD */
#define KVM_HYPERV_EVENTFD        _IOW(KVMIO,  0xbd, struct kvm_hyperv_eventfd)

1635 1636 1637
/* Available with KVM_CAP_NESTED_STATE */
#define KVM_GET_NESTED_STATE         _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
#define KVM_SET_NESTED_STATE         _IOW(KVMIO,  0xbf, struct kvm_nested_state)
1638

1639
/* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT_2 */
1640 1641
#define KVM_CLEAR_DIRTY_LOG          _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log)

1642
/* Available with KVM_CAP_HYPERV_CPUID (vcpu) / KVM_CAP_SYS_HYPERV_CPUID (system) */
1643 1644
#define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2)

1645 1646 1647
/* Available with KVM_CAP_ARM_SVE */
#define KVM_ARM_VCPU_FINALIZE	  _IOW(KVMIO,  0xc2, int)

1648 1649 1650 1651
/* Available with  KVM_CAP_S390_VCPU_RESETS */
#define KVM_S390_NORMAL_RESET	_IO(KVMIO,   0xc3)
#define KVM_S390_CLEAR_RESET	_IO(KVMIO,   0xc4)

1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662
struct kvm_s390_pv_sec_parm {
	__u64 origin;
	__u64 length;
};

struct kvm_s390_pv_unp {
	__u64 addr;
	__u64 size;
	__u64 tweak;
};

1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686
enum pv_cmd_info_id {
	KVM_PV_INFO_VM,
};

struct kvm_s390_pv_info_vm {
	__u64 inst_calls_list[4];
	__u64 max_cpus;
	__u64 max_guests;
	__u64 max_guest_addr;
	__u64 feature_indication;
};

struct kvm_s390_pv_info_header {
	__u32 id;
	__u32 len_max;
	__u32 len_written;
	__u32 reserved;
};

struct kvm_s390_pv_info {
	struct kvm_s390_pv_info_header header;
	struct kvm_s390_pv_info_vm vm;
};

1687 1688 1689 1690 1691 1692
enum pv_cmd_id {
	KVM_PV_ENABLE,
	KVM_PV_DISABLE,
	KVM_PV_SET_SEC_PARMS,
	KVM_PV_UNPACK,
	KVM_PV_VERIFY,
1693 1694
	KVM_PV_PREP_RESET,
	KVM_PV_UNSHARE_ALL,
1695
	KVM_PV_INFO,
1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709
};

struct kvm_pv_cmd {
	__u32 cmd;	/* Command to be executed */
	__u16 rc;	/* Ultravisor return code */
	__u16 rrc;	/* Ultravisor return reason code */
	__u64 data;	/* Data or address */
	__u32 flags;    /* flags for future extensions. Must be 0 for now */
	__u32 reserved[3];
};

/* Available with KVM_CAP_S390_PROTECTED */
#define KVM_S390_PV_COMMAND		_IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)

1710 1711 1712
/* Available with KVM_CAP_X86_MSR_FILTER */
#define KVM_X86_SET_MSR_FILTER	_IOW(KVMIO,  0xc6, struct kvm_msr_filter)

1713 1714 1715
/* Available with KVM_CAP_DIRTY_LOG_RING */
#define KVM_RESET_DIRTY_RINGS		_IO(KVMIO, 0xc7)

1716
/* Per-VM Xen attributes */
1717 1718 1719 1720 1721 1722 1723
#define KVM_XEN_HVM_GET_ATTR	_IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr)
#define KVM_XEN_HVM_SET_ATTR	_IOW(KVMIO,  0xc9, struct kvm_xen_hvm_attr)

struct kvm_xen_hvm_attr {
	__u16 type;
	__u16 pad[3];
	union {
1724
		__u8 long_mode;
1725
		__u8 vector;
1726 1727 1728
		struct {
			__u64 gfn;
		} shared_info;
1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753
		struct {
			__u32 send_port;
			__u32 type; /* EVTCHNSTAT_ipi / EVTCHNSTAT_interdomain */
			__u32 flags;
#define KVM_XEN_EVTCHN_DEASSIGN		(1 << 0)
#define KVM_XEN_EVTCHN_UPDATE		(1 << 1)
#define KVM_XEN_EVTCHN_RESET		(1 << 2)
			/*
			 * Events sent by the guest are either looped back to
			 * the guest itself (potentially on a different port#)
			 * or signalled via an eventfd.
			 */
			union {
				struct {
					__u32 port;
					__u32 vcpu;
					__u32 priority;
				} port;
				struct {
					__u32 port; /* Zero for eventfd */
					__s32 fd;
				} eventfd;
				__u32 padding[4];
			} deliver;
		} evtchn;
1754
		__u32 xen_version;
1755 1756 1757 1758
		__u64 pad[8];
	} u;
};

1759
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */
1760
#define KVM_XEN_ATTR_TYPE_LONG_MODE		0x0
1761
#define KVM_XEN_ATTR_TYPE_SHARED_INFO		0x1
1762
#define KVM_XEN_ATTR_TYPE_UPCALL_VECTOR		0x2
1763 1764
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
#define KVM_XEN_ATTR_TYPE_EVTCHN		0x3
1765
#define KVM_XEN_ATTR_TYPE_XEN_VERSION		0x4
1766

1767 1768 1769 1770
/* Per-vCPU Xen attributes */
#define KVM_XEN_VCPU_GET_ATTR	_IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr)
#define KVM_XEN_VCPU_SET_ATTR	_IOW(KVMIO,  0xcb, struct kvm_xen_vcpu_attr)

1771 1772 1773
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
#define KVM_XEN_HVM_EVTCHN_SEND	_IOW(KVMIO,  0xd0, struct kvm_irq_routing_xen_evtchn)

1774 1775 1776
#define KVM_GET_SREGS2             _IOR(KVMIO,  0xcc, struct kvm_sregs2)
#define KVM_SET_SREGS2             _IOW(KVMIO,  0xcd, struct kvm_sregs2)

1777 1778 1779 1780
struct kvm_xen_vcpu_attr {
	__u16 type;
	__u16 pad[3];
	union {
J
Joao Martins 已提交
1781
		__u64 gpa;
1782
		__u64 pad[8];
1783 1784 1785 1786 1787 1788 1789 1790
		struct {
			__u64 state;
			__u64 state_entry_time;
			__u64 time_running;
			__u64 time_runnable;
			__u64 time_blocked;
			__u64 time_offline;
		} runstate;
1791
		__u32 vcpu_id;
1792 1793 1794 1795 1796
		struct {
			__u32 port;
			__u32 priority;
			__u64 expires_ns;
		} timer;
1797
		__u8 vector;
1798 1799 1800
	} u;
};

1801
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */
J
Joao Martins 已提交
1802
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO	0x0
1803
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO	0x1
1804 1805 1806 1807
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR	0x2
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT	0x3
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA	0x4
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST	0x5
1808 1809
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID		0x6
1810
#define KVM_XEN_VCPU_ATTR_TYPE_TIMER		0x7
1811
#define KVM_XEN_VCPU_ATTR_TYPE_UPCALL_VECTOR	0x8
J
Joao Martins 已提交
1812

1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840
/* Secure Encrypted Virtualization command */
enum sev_cmd_id {
	/* Guest initialization commands */
	KVM_SEV_INIT = 0,
	KVM_SEV_ES_INIT,
	/* Guest launch commands */
	KVM_SEV_LAUNCH_START,
	KVM_SEV_LAUNCH_UPDATE_DATA,
	KVM_SEV_LAUNCH_UPDATE_VMSA,
	KVM_SEV_LAUNCH_SECRET,
	KVM_SEV_LAUNCH_MEASURE,
	KVM_SEV_LAUNCH_FINISH,
	/* Guest migration commands (outgoing) */
	KVM_SEV_SEND_START,
	KVM_SEV_SEND_UPDATE_DATA,
	KVM_SEV_SEND_UPDATE_VMSA,
	KVM_SEV_SEND_FINISH,
	/* Guest migration commands (incoming) */
	KVM_SEV_RECEIVE_START,
	KVM_SEV_RECEIVE_UPDATE_DATA,
	KVM_SEV_RECEIVE_UPDATE_VMSA,
	KVM_SEV_RECEIVE_FINISH,
	/* Guest status and debug commands */
	KVM_SEV_GUEST_STATUS,
	KVM_SEV_DBG_DECRYPT,
	KVM_SEV_DBG_ENCRYPT,
	/* Guest certificates commands */
	KVM_SEV_CERT_EXPORT,
1841 1842
	/* Attestation report */
	KVM_SEV_GET_ATTESTATION_REPORT,
1843 1844
	/* Guest Migration Extension */
	KVM_SEV_SEND_CANCEL,
1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895

	KVM_SEV_NR_MAX,
};

struct kvm_sev_cmd {
	__u32 id;
	__u64 data;
	__u32 error;
	__u32 sev_fd;
};

struct kvm_sev_launch_start {
	__u32 handle;
	__u32 policy;
	__u64 dh_uaddr;
	__u32 dh_len;
	__u64 session_uaddr;
	__u32 session_len;
};

struct kvm_sev_launch_update_data {
	__u64 uaddr;
	__u32 len;
};


struct kvm_sev_launch_secret {
	__u64 hdr_uaddr;
	__u32 hdr_len;
	__u64 guest_uaddr;
	__u32 guest_len;
	__u64 trans_uaddr;
	__u32 trans_len;
};

struct kvm_sev_launch_measure {
	__u64 uaddr;
	__u32 len;
};

struct kvm_sev_guest_status {
	__u32 handle;
	__u32 policy;
	__u32 state;
};

struct kvm_sev_dbg {
	__u64 src_uaddr;
	__u64 dst_uaddr;
	__u32 len;
};
1896

1897 1898 1899 1900 1901 1902
struct kvm_sev_attestation_report {
	__u8 mnonce[16];
	__u64 uaddr;
	__u32 len;
};

1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914
struct kvm_sev_send_start {
	__u32 policy;
	__u64 pdh_cert_uaddr;
	__u32 pdh_cert_len;
	__u64 plat_certs_uaddr;
	__u32 plat_certs_len;
	__u64 amd_certs_uaddr;
	__u32 amd_certs_len;
	__u64 session_uaddr;
	__u32 session_len;
};

1915 1916 1917 1918 1919 1920 1921 1922 1923
struct kvm_sev_send_update_data {
	__u64 hdr_uaddr;
	__u32 hdr_len;
	__u64 guest_uaddr;
	__u32 guest_len;
	__u64 trans_uaddr;
	__u32 trans_len;
};

1924 1925 1926 1927 1928 1929 1930 1931 1932
struct kvm_sev_receive_start {
	__u32 handle;
	__u32 policy;
	__u64 pdh_uaddr;
	__u32 pdh_len;
	__u64 session_uaddr;
	__u32 session_len;
};

1933 1934 1935 1936 1937 1938 1939 1940 1941
struct kvm_sev_receive_update_data {
	__u64 hdr_uaddr;
	__u32 hdr_len;
	__u64 guest_uaddr;
	__u32 guest_len;
	__u64 trans_uaddr;
	__u32 trans_len;
};

1942
#define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)
1943 1944
#define KVM_DEV_ASSIGN_PCI_2_3		(1 << 1)
#define KVM_DEV_ASSIGN_MASK_INTX	(1 << 2)
1945

B
Ben-Ami Yassour 已提交
1946 1947 1948 1949 1950
struct kvm_assigned_pci_dev {
	__u32 assigned_dev_id;
	__u32 busnr;
	__u32 devfn;
	__u32 flags;
1951
	__u32 segnr;
1952
	union {
1953
		__u32 reserved[11];
1954
	};
B
Ben-Ami Yassour 已提交
1955 1956
};

1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967
#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 已提交
1968 1969
struct kvm_assigned_irq {
	__u32 assigned_dev_id;
1970
	__u32 host_irq; /* ignored (legacy field) */
B
Ben-Ami Yassour 已提交
1971 1972
	__u32 guest_irq;
	__u32 flags;
1973 1974 1975
	union {
		__u32 reserved[12];
	};
B
Ben-Ami Yassour 已提交
1976 1977
};

S
Sheng Yang 已提交
1978 1979 1980 1981 1982 1983
struct kvm_assigned_msix_nr {
	__u32 assigned_dev_id;
	__u16 entry_nr;
	__u16 padding;
};

1984
#define KVM_MAX_MSIX_PER_DEV		256
S
Sheng Yang 已提交
1985 1986 1987 1988 1989 1990 1991
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];
};

1992
#define KVM_X2APIC_API_USE_32BIT_IDS            (1ULL << 0)
1993
#define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK  (1ULL << 1)
1994

1995 1996 1997 1998 1999 2000 2001
/* Available with KVM_CAP_ARM_USER_IRQ */

/* Bits for run->s.regs.device_irq_level */
#define KVM_ARM_DEV_EL1_VTIMER		(1 << 0)
#define KVM_ARM_DEV_EL1_PTIMER		(1 << 1)
#define KVM_ARM_DEV_PMU			(1 << 2)

2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
struct kvm_hyperv_eventfd {
	__u32 conn_id;
	__s32 fd;
	__u32 flags;
	__u32 padding[3];
};

#define KVM_HYPERV_CONN_ID_MASK		0x00ffffff
#define KVM_HYPERV_EVENTFD_DEASSIGN	(1 << 0)

2012 2013 2014
#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE    (1 << 0)
#define KVM_DIRTY_LOG_INITIALLY_SET            (1 << 1)

2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046
/*
 * Arch needs to define the macro after implementing the dirty ring
 * feature.  KVM_DIRTY_LOG_PAGE_OFFSET should be defined as the
 * starting page offset of the dirty ring structures.
 */
#ifndef KVM_DIRTY_LOG_PAGE_OFFSET
#define KVM_DIRTY_LOG_PAGE_OFFSET 0
#endif

/*
 * KVM dirty GFN flags, defined as:
 *
 * |---------------+---------------+--------------|
 * | bit 1 (reset) | bit 0 (dirty) | Status       |
 * |---------------+---------------+--------------|
 * |             0 |             0 | Invalid GFN  |
 * |             0 |             1 | Dirty GFN    |
 * |             1 |             X | GFN to reset |
 * |---------------+---------------+--------------|
 *
 * Lifecycle of a dirty GFN goes like:
 *
 *      dirtied         harvested        reset
 * 00 -----------> 01 -------------> 1X -------+
 *  ^                                          |
 *  |                                          |
 *  +------------------------------------------+
 *
 * The userspace program is only responsible for the 01->1X state
 * conversion after harvesting an entry.  Also, it must not skip any
 * dirty bits, so that dirty bits are always harvested in sequence.
 */
2047 2048
#define KVM_DIRTY_GFN_F_DIRTY           _BITUL(0)
#define KVM_DIRTY_GFN_F_RESET           _BITUL(1)
2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062
#define KVM_DIRTY_GFN_F_MASK            0x3

/*
 * KVM dirty rings should be mapped at KVM_DIRTY_LOG_PAGE_OFFSET of
 * per-vcpu mmaped regions as an array of struct kvm_dirty_gfn.  The
 * size of the gfn buffer is decided by the first argument when
 * enabling KVM_CAP_DIRTY_LOG_RING.
 */
struct kvm_dirty_gfn {
	__u32 flags;
	__u32 slot;
	__u64 offset;
};

C
Chenyi Qiang 已提交
2063 2064 2065
#define KVM_BUS_LOCK_DETECTION_OFF             (1 << 0)
#define KVM_BUS_LOCK_DETECTION_EXIT            (1 << 1)

2066 2067
#define KVM_PMU_CAP_DISABLE                    (1 << 0)

2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100
/**
 * struct kvm_stats_header - Header of per vm/vcpu binary statistics data.
 * @flags: Some extra information for header, always 0 for now.
 * @name_size: The size in bytes of the memory which contains statistics
 *             name string including trailing '\0'. The memory is allocated
 *             at the send of statistics descriptor.
 * @num_desc: The number of statistics the vm or vcpu has.
 * @id_offset: The offset of the vm/vcpu stats' id string in the file pointed
 *             by vm/vcpu stats fd.
 * @desc_offset: The offset of the vm/vcpu stats' descriptor block in the file
 *               pointd by vm/vcpu stats fd.
 * @data_offset: The offset of the vm/vcpu stats' data block in the file
 *               pointed by vm/vcpu stats fd.
 *
 * This is the header userspace needs to read from stats fd before any other
 * readings. It is used by userspace to discover all the information about the
 * vm/vcpu's binary statistics.
 * Userspace reads this header from the start of the vm/vcpu's stats fd.
 */
struct kvm_stats_header {
	__u32 flags;
	__u32 name_size;
	__u32 num_desc;
	__u32 id_offset;
	__u32 desc_offset;
	__u32 data_offset;
};

#define KVM_STATS_TYPE_SHIFT		0
#define KVM_STATS_TYPE_MASK		(0xF << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
2101 2102 2103
#define KVM_STATS_TYPE_LINEAR_HIST	(0x3 << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_LOG_HIST		(0x4 << KVM_STATS_TYPE_SHIFT)
#define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_LOG_HIST
2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125

#define KVM_STATS_UNIT_SHIFT		4
#define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_NONE		(0x0 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
#define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_CYCLES

#define KVM_STATS_BASE_SHIFT		8
#define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
#define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
#define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
#define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2

/**
 * struct kvm_stats_desc - Descriptor of a KVM statistics.
 * @flags: Annotations of the stats, like type, unit, etc.
 * @exponent: Used together with @flags to determine the unit.
 * @size: The number of data items for this stats.
 *        Every data item is of type __u64.
 * @offset: The offset of the stats to the start of stat structure in
2126 2127 2128
 *          structure kvm or kvm_vcpu.
 * @bucket_size: A parameter value used for histogram stats. It is only used
 *		for linear histogram stats, specifying the size of the bucket;
2129 2130 2131 2132 2133 2134 2135 2136
 * @name: The name string for the stats. Its size is indicated by the
 *        &kvm_stats_header->name_size.
 */
struct kvm_stats_desc {
	__u32 flags;
	__s16 exponent;
	__u16 size;
	__u32 offset;
2137
	__u32 bucket_size;
2138 2139 2140 2141 2142
	char name[];
};

#define KVM_GET_STATS_FD  _IO(KVMIO,  0xce)

2143 2144 2145
/* Available with KVM_CAP_XSAVE2 */
#define KVM_GET_XSAVE2		  _IOR(KVMIO,  0xcf, struct kvm_xsave)

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