xref: /linux-6.15/tools/include/uapi/linux/kvm.h (revision ddc59297)
1fb7df12dSIngo Molnar /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
23ce97513SArnaldo Carvalho de Melo #ifndef __LINUX_KVM_H
33ce97513SArnaldo Carvalho de Melo #define __LINUX_KVM_H
43ce97513SArnaldo Carvalho de Melo 
53ce97513SArnaldo Carvalho de Melo /*
63ce97513SArnaldo Carvalho de Melo  * Userspace interface for /dev/kvm - kernel based virtual machine
73ce97513SArnaldo Carvalho de Melo  *
83ce97513SArnaldo Carvalho de Melo  * Note: you must update KVM_API_VERSION if you change this interface.
93ce97513SArnaldo Carvalho de Melo  */
103ce97513SArnaldo Carvalho de Melo 
11fb1070d1SJoe Richey #include <linux/const.h>
123ce97513SArnaldo Carvalho de Melo #include <linux/types.h>
133ce97513SArnaldo Carvalho de Melo #include <linux/compiler.h>
143ce97513SArnaldo Carvalho de Melo #include <linux/ioctl.h>
153ce97513SArnaldo Carvalho de Melo #include <asm/kvm.h>
163ce97513SArnaldo Carvalho de Melo 
173ce97513SArnaldo Carvalho de Melo #define KVM_API_VERSION 12
183ce97513SArnaldo Carvalho de Melo 
19bee3b820SNamhyung Kim /*
20bee3b820SNamhyung Kim  * Backwards-compatible definitions.
21bee3b820SNamhyung Kim  */
22bee3b820SNamhyung Kim #define __KVM_HAVE_GUEST_DEBUG
23bee3b820SNamhyung Kim 
243ce97513SArnaldo Carvalho de Melo /* for KVM_SET_USER_MEMORY_REGION */
253ce97513SArnaldo Carvalho de Melo struct kvm_userspace_memory_region {
263ce97513SArnaldo Carvalho de Melo 	__u32 slot;
273ce97513SArnaldo Carvalho de Melo 	__u32 flags;
283ce97513SArnaldo Carvalho de Melo 	__u64 guest_phys_addr;
293ce97513SArnaldo Carvalho de Melo 	__u64 memory_size; /* bytes */
303ce97513SArnaldo Carvalho de Melo 	__u64 userspace_addr; /* start of the userspace allocated memory */
313ce97513SArnaldo Carvalho de Melo };
323ce97513SArnaldo Carvalho de Melo 
33e30dca91SArnaldo Carvalho de Melo /* for KVM_SET_USER_MEMORY_REGION2 */
34e30dca91SArnaldo Carvalho de Melo struct kvm_userspace_memory_region2 {
35e30dca91SArnaldo Carvalho de Melo 	__u32 slot;
36e30dca91SArnaldo Carvalho de Melo 	__u32 flags;
37e30dca91SArnaldo Carvalho de Melo 	__u64 guest_phys_addr;
38e30dca91SArnaldo Carvalho de Melo 	__u64 memory_size;
39e30dca91SArnaldo Carvalho de Melo 	__u64 userspace_addr;
40e30dca91SArnaldo Carvalho de Melo 	__u64 guest_memfd_offset;
41e30dca91SArnaldo Carvalho de Melo 	__u32 guest_memfd;
42e30dca91SArnaldo Carvalho de Melo 	__u32 pad1;
43e30dca91SArnaldo Carvalho de Melo 	__u64 pad2[14];
44e30dca91SArnaldo Carvalho de Melo };
45e30dca91SArnaldo Carvalho de Melo 
463ce97513SArnaldo Carvalho de Melo /*
4730ee198cSJavier Martinez Canillas  * The bit 0 ~ bit 15 of kvm_userspace_memory_region::flags are visible for
4830ee198cSJavier Martinez Canillas  * userspace, other bits are reserved for kvm internal use which are defined
4930ee198cSJavier Martinez Canillas  * in include/linux/kvm_host.h.
503ce97513SArnaldo Carvalho de Melo  */
513ce97513SArnaldo Carvalho de Melo #define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
523ce97513SArnaldo Carvalho de Melo #define KVM_MEM_READONLY	(1UL << 1)
53e30dca91SArnaldo Carvalho de Melo #define KVM_MEM_GUEST_MEMFD	(1UL << 2)
543ce97513SArnaldo Carvalho de Melo 
553ce97513SArnaldo Carvalho de Melo /* for KVM_IRQ_LINE */
563ce97513SArnaldo Carvalho de Melo struct kvm_irq_level {
573ce97513SArnaldo Carvalho de Melo 	/*
583ce97513SArnaldo Carvalho de Melo 	 * ACPI gsi notion of irq.
593ce97513SArnaldo Carvalho de Melo 	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
603ce97513SArnaldo Carvalho de Melo 	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
613ecad8c2SMauro Carvalho Chehab 	 * For ARM: See Documentation/virt/kvm/api.rst
623ce97513SArnaldo Carvalho de Melo 	 */
633ce97513SArnaldo Carvalho de Melo 	union {
643ce97513SArnaldo Carvalho de Melo 		__u32 irq;
653ce97513SArnaldo Carvalho de Melo 		__s32 status;
663ce97513SArnaldo Carvalho de Melo 	};
673ce97513SArnaldo Carvalho de Melo 	__u32 level;
683ce97513SArnaldo Carvalho de Melo };
693ce97513SArnaldo Carvalho de Melo 
703ce97513SArnaldo Carvalho de Melo 
713ce97513SArnaldo Carvalho de Melo struct kvm_irqchip {
723ce97513SArnaldo Carvalho de Melo 	__u32 chip_id;
733ce97513SArnaldo Carvalho de Melo 	__u32 pad;
743ce97513SArnaldo Carvalho de Melo         union {
753ce97513SArnaldo Carvalho de Melo 		char dummy[512];  /* reserving space */
763ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_PIT
773ce97513SArnaldo Carvalho de Melo 		struct kvm_pic_state pic;
783ce97513SArnaldo Carvalho de Melo #endif
793ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_IOAPIC
803ce97513SArnaldo Carvalho de Melo 		struct kvm_ioapic_state ioapic;
813ce97513SArnaldo Carvalho de Melo #endif
823ce97513SArnaldo Carvalho de Melo 	} chip;
833ce97513SArnaldo Carvalho de Melo };
843ce97513SArnaldo Carvalho de Melo 
853ce97513SArnaldo Carvalho de Melo /* for KVM_CREATE_PIT2 */
863ce97513SArnaldo Carvalho de Melo struct kvm_pit_config {
873ce97513SArnaldo Carvalho de Melo 	__u32 flags;
883ce97513SArnaldo Carvalho de Melo 	__u32 pad[15];
893ce97513SArnaldo Carvalho de Melo };
903ce97513SArnaldo Carvalho de Melo 
913ce97513SArnaldo Carvalho de Melo #define KVM_PIT_SPEAKER_DUMMY     1
923ce97513SArnaldo Carvalho de Melo 
933ce97513SArnaldo Carvalho de Melo struct kvm_hyperv_exit {
943ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_HYPERV_SYNIC          1
953ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_HYPERV_HCALL          2
96dd76c302SArnaldo Carvalho de Melo #define KVM_EXIT_HYPERV_SYNDBG         3
973ce97513SArnaldo Carvalho de Melo 	__u32 type;
98dd76c302SArnaldo Carvalho de Melo 	__u32 pad1;
993ce97513SArnaldo Carvalho de Melo 	union {
1003ce97513SArnaldo Carvalho de Melo 		struct {
1013ce97513SArnaldo Carvalho de Melo 			__u32 msr;
102dd76c302SArnaldo Carvalho de Melo 			__u32 pad2;
1033ce97513SArnaldo Carvalho de Melo 			__u64 control;
1043ce97513SArnaldo Carvalho de Melo 			__u64 evt_page;
1053ce97513SArnaldo Carvalho de Melo 			__u64 msg_page;
1063ce97513SArnaldo Carvalho de Melo 		} synic;
1073ce97513SArnaldo Carvalho de Melo 		struct {
1083ce97513SArnaldo Carvalho de Melo 			__u64 input;
1093ce97513SArnaldo Carvalho de Melo 			__u64 result;
1103ce97513SArnaldo Carvalho de Melo 			__u64 params[2];
1113ce97513SArnaldo Carvalho de Melo 		} hcall;
112dd76c302SArnaldo Carvalho de Melo 		struct {
113dd76c302SArnaldo Carvalho de Melo 			__u32 msr;
114dd76c302SArnaldo Carvalho de Melo 			__u32 pad2;
115dd76c302SArnaldo Carvalho de Melo 			__u64 control;
116dd76c302SArnaldo Carvalho de Melo 			__u64 status;
117dd76c302SArnaldo Carvalho de Melo 			__u64 send_page;
118dd76c302SArnaldo Carvalho de Melo 			__u64 recv_page;
119dd76c302SArnaldo Carvalho de Melo 			__u64 pending_page;
120dd76c302SArnaldo Carvalho de Melo 		} syndbg;
1213ce97513SArnaldo Carvalho de Melo 	} u;
1223ce97513SArnaldo Carvalho de Melo };
1233ce97513SArnaldo Carvalho de Melo 
12421b7e35bSArnaldo Carvalho de Melo struct kvm_xen_exit {
12521b7e35bSArnaldo Carvalho de Melo #define KVM_EXIT_XEN_HCALL          1
12621b7e35bSArnaldo Carvalho de Melo 	__u32 type;
12721b7e35bSArnaldo Carvalho de Melo 	union {
12821b7e35bSArnaldo Carvalho de Melo 		struct {
12921b7e35bSArnaldo Carvalho de Melo 			__u32 longmode;
13021b7e35bSArnaldo Carvalho de Melo 			__u32 cpl;
13121b7e35bSArnaldo Carvalho de Melo 			__u64 input;
13221b7e35bSArnaldo Carvalho de Melo 			__u64 result;
13321b7e35bSArnaldo Carvalho de Melo 			__u64 params[6];
13421b7e35bSArnaldo Carvalho de Melo 		} hcall;
13521b7e35bSArnaldo Carvalho de Melo 	} u;
13621b7e35bSArnaldo Carvalho de Melo };
13721b7e35bSArnaldo Carvalho de Melo 
1383ce97513SArnaldo Carvalho de Melo #define KVM_S390_GET_SKEYS_NONE   1
1393ce97513SArnaldo Carvalho de Melo #define KVM_S390_SKEYS_MAX        1048576
1403ce97513SArnaldo Carvalho de Melo 
1413ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_UNKNOWN          0
1423ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_EXCEPTION        1
1433ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_IO               2
1443ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_HYPERCALL        3
1453ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_DEBUG            4
1463ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_HLT              5
1473ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_MMIO             6
1483ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_IRQ_WINDOW_OPEN  7
1493ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_SHUTDOWN         8
1503ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_FAIL_ENTRY       9
1513ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_INTR             10
1523ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_SET_TPR          11
1533ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_TPR_ACCESS       12
1543ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_S390_SIEIC       13
1553ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_S390_RESET       14
1563ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_DCR              15 /* deprecated */
1573ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_NMI              16
1583ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_INTERNAL_ERROR   17
1593ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_OSI              18
1603ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_PAPR_HCALL	  19
1613ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_S390_UCONTROL	  20
1623ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_WATCHDOG         21
1633ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_S390_TSCH        22
1643ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_EPR              23
1653ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_SYSTEM_EVENT     24
1663ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_S390_STSI        25
1673ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_IOAPIC_EOI       26
1683ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_HYPERV           27
1691fc3d0eeSArnaldo Carvalho de Melo #define KVM_EXIT_ARM_NISV         28
170aa04899aSArnaldo Carvalho de Melo #define KVM_EXIT_X86_RDMSR        29
171aa04899aSArnaldo Carvalho de Melo #define KVM_EXIT_X86_WRMSR        30
172288807fcSArnaldo Carvalho de Melo #define KVM_EXIT_DIRTY_RING_FULL  31
17338c53947SArnaldo Carvalho de Melo #define KVM_EXIT_AP_RESET_HOLD    32
17421b7e35bSArnaldo Carvalho de Melo #define KVM_EXIT_X86_BUS_LOCK     33
17521b7e35bSArnaldo Carvalho de Melo #define KVM_EXIT_XEN              34
176346e9199SArnaldo Carvalho de Melo #define KVM_EXIT_RISCV_SBI        35
177bf465ca8SArnaldo Carvalho de Melo #define KVM_EXIT_RISCV_CSR        36
178bf465ca8SArnaldo Carvalho de Melo #define KVM_EXIT_NOTIFY           37
1795a9f95b6SNamhyung Kim #define KVM_EXIT_LOONGARCH_IOCSR  38
180e30dca91SArnaldo Carvalho de Melo #define KVM_EXIT_MEMORY_FAULT     39
1813ce97513SArnaldo Carvalho de Melo 
1823ce97513SArnaldo Carvalho de Melo /* For KVM_EXIT_INTERNAL_ERROR */
1833ce97513SArnaldo Carvalho de Melo /* Emulate instruction failed. */
1843ce97513SArnaldo Carvalho de Melo #define KVM_INTERNAL_ERROR_EMULATION	1
1853ce97513SArnaldo Carvalho de Melo /* Encounter unexpected simultaneous exceptions. */
1863ce97513SArnaldo Carvalho de Melo #define KVM_INTERNAL_ERROR_SIMUL_EX	2
1873ce97513SArnaldo Carvalho de Melo /* Encounter unexpected vm-exit due to delivery event. */
1883ce97513SArnaldo Carvalho de Melo #define KVM_INTERNAL_ERROR_DELIVERY_EV	3
189b7ad6108SArnaldo Carvalho de Melo /* Encounter unexpected vm-exit reason */
190b7ad6108SArnaldo Carvalho de Melo #define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
1913ce97513SArnaldo Carvalho de Melo 
192e48f62aeSArnaldo Carvalho de Melo /* Flags that describe what fields in emulation_failure hold valid data. */
193e48f62aeSArnaldo Carvalho de Melo #define KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES (1ULL << 0)
194e48f62aeSArnaldo Carvalho de Melo 
195a625df39SNamhyung Kim /*
196a625df39SNamhyung Kim  * struct kvm_run can be modified by userspace at any time, so KVM must be
197a625df39SNamhyung Kim  * careful to avoid TOCTOU bugs. In order to protect KVM, HINT_UNSAFE_IN_KVM()
198a625df39SNamhyung Kim  * renames fields in struct kvm_run from <symbol> to <symbol>__unsafe when
199a625df39SNamhyung Kim  * compiled into the kernel, ensuring that any use within KVM is obvious and
200a625df39SNamhyung Kim  * gets extra scrutiny.
201a625df39SNamhyung Kim  */
202a625df39SNamhyung Kim #ifdef __KERNEL__
203a625df39SNamhyung Kim #define HINT_UNSAFE_IN_KVM(_symbol) _symbol##__unsafe
204a625df39SNamhyung Kim #else
205a625df39SNamhyung Kim #define HINT_UNSAFE_IN_KVM(_symbol) _symbol
206a625df39SNamhyung Kim #endif
207a625df39SNamhyung Kim 
2083ce97513SArnaldo Carvalho de Melo /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
2093ce97513SArnaldo Carvalho de Melo struct kvm_run {
2103ce97513SArnaldo Carvalho de Melo 	/* in */
2113ce97513SArnaldo Carvalho de Melo 	__u8 request_interrupt_window;
212a625df39SNamhyung Kim 	__u8 HINT_UNSAFE_IN_KVM(immediate_exit);
2133ce97513SArnaldo Carvalho de Melo 	__u8 padding1[6];
2143ce97513SArnaldo Carvalho de Melo 
2153ce97513SArnaldo Carvalho de Melo 	/* out */
2163ce97513SArnaldo Carvalho de Melo 	__u32 exit_reason;
2173ce97513SArnaldo Carvalho de Melo 	__u8 ready_for_interrupt_injection;
2183ce97513SArnaldo Carvalho de Melo 	__u8 if_flag;
2193ce97513SArnaldo Carvalho de Melo 	__u16 flags;
2203ce97513SArnaldo Carvalho de Melo 
2213ce97513SArnaldo Carvalho de Melo 	/* in (pre_kvm_run), out (post_kvm_run) */
2223ce97513SArnaldo Carvalho de Melo 	__u64 cr8;
2233ce97513SArnaldo Carvalho de Melo 	__u64 apic_base;
2243ce97513SArnaldo Carvalho de Melo 
2253ce97513SArnaldo Carvalho de Melo #ifdef __KVM_S390
2263ce97513SArnaldo Carvalho de Melo 	/* the processor status word for s390 */
2273ce97513SArnaldo Carvalho de Melo 	__u64 psw_mask; /* psw upper half */
2283ce97513SArnaldo Carvalho de Melo 	__u64 psw_addr; /* psw lower half */
2293ce97513SArnaldo Carvalho de Melo #endif
2303ce97513SArnaldo Carvalho de Melo 	union {
2313ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_UNKNOWN */
2323ce97513SArnaldo Carvalho de Melo 		struct {
2333ce97513SArnaldo Carvalho de Melo 			__u64 hardware_exit_reason;
2343ce97513SArnaldo Carvalho de Melo 		} hw;
2353ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_FAIL_ENTRY */
2363ce97513SArnaldo Carvalho de Melo 		struct {
2373ce97513SArnaldo Carvalho de Melo 			__u64 hardware_entry_failure_reason;
2386016e034SArnaldo Carvalho de Melo 			__u32 cpu;
2393ce97513SArnaldo Carvalho de Melo 		} fail_entry;
2403ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_EXCEPTION */
2413ce97513SArnaldo Carvalho de Melo 		struct {
2423ce97513SArnaldo Carvalho de Melo 			__u32 exception;
2433ce97513SArnaldo Carvalho de Melo 			__u32 error_code;
2443ce97513SArnaldo Carvalho de Melo 		} ex;
2453ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_IO */
2463ce97513SArnaldo Carvalho de Melo 		struct {
2473ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_IO_IN  0
2483ce97513SArnaldo Carvalho de Melo #define KVM_EXIT_IO_OUT 1
2493ce97513SArnaldo Carvalho de Melo 			__u8 direction;
2503ce97513SArnaldo Carvalho de Melo 			__u8 size; /* bytes */
2513ce97513SArnaldo Carvalho de Melo 			__u16 port;
2523ce97513SArnaldo Carvalho de Melo 			__u32 count;
2533ce97513SArnaldo Carvalho de Melo 			__u64 data_offset; /* relative to kvm_run start */
2543ce97513SArnaldo Carvalho de Melo 		} io;
2553ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_DEBUG */
2563ce97513SArnaldo Carvalho de Melo 		struct {
2573ce97513SArnaldo Carvalho de Melo 			struct kvm_debug_exit_arch arch;
2583ce97513SArnaldo Carvalho de Melo 		} debug;
2593ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_MMIO */
2603ce97513SArnaldo Carvalho de Melo 		struct {
2613ce97513SArnaldo Carvalho de Melo 			__u64 phys_addr;
2623ce97513SArnaldo Carvalho de Melo 			__u8  data[8];
2633ce97513SArnaldo Carvalho de Melo 			__u32 len;
2643ce97513SArnaldo Carvalho de Melo 			__u8  is_write;
2653ce97513SArnaldo Carvalho de Melo 		} mmio;
2665a9f95b6SNamhyung Kim 		/* KVM_EXIT_LOONGARCH_IOCSR */
2675a9f95b6SNamhyung Kim 		struct {
2685a9f95b6SNamhyung Kim 			__u64 phys_addr;
2695a9f95b6SNamhyung Kim 			__u8  data[8];
2705a9f95b6SNamhyung Kim 			__u32 len;
2715a9f95b6SNamhyung Kim 			__u8  is_write;
2725a9f95b6SNamhyung Kim 		} iocsr_io;
2733ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_HYPERCALL */
2743ce97513SArnaldo Carvalho de Melo 		struct {
2753ce97513SArnaldo Carvalho de Melo 			__u64 nr;
2763ce97513SArnaldo Carvalho de Melo 			__u64 args[6];
2773ce97513SArnaldo Carvalho de Melo 			__u64 ret;
278705049caSYanteng Si 
279705049caSYanteng Si 			union {
280705049caSYanteng Si #ifndef __KERNEL__
2813ce97513SArnaldo Carvalho de Melo 				__u32 longmode;
282705049caSYanteng Si #endif
283705049caSYanteng Si 				__u64 flags;
284705049caSYanteng Si 			};
2853ce97513SArnaldo Carvalho de Melo 		} hypercall;
2863ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_TPR_ACCESS */
2873ce97513SArnaldo Carvalho de Melo 		struct {
2883ce97513SArnaldo Carvalho de Melo 			__u64 rip;
2893ce97513SArnaldo Carvalho de Melo 			__u32 is_write;
2903ce97513SArnaldo Carvalho de Melo 			__u32 pad;
2913ce97513SArnaldo Carvalho de Melo 		} tpr_access;
2923ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_S390_SIEIC */
2933ce97513SArnaldo Carvalho de Melo 		struct {
2943ce97513SArnaldo Carvalho de Melo 			__u8 icptcode;
2953ce97513SArnaldo Carvalho de Melo 			__u16 ipa;
2963ce97513SArnaldo Carvalho de Melo 			__u32 ipb;
2973ce97513SArnaldo Carvalho de Melo 		} s390_sieic;
2983ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_S390_RESET */
2993ce97513SArnaldo Carvalho de Melo 		__u64 s390_reset_flags;
3003ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_S390_UCONTROL */
3013ce97513SArnaldo Carvalho de Melo 		struct {
3023ce97513SArnaldo Carvalho de Melo 			__u64 trans_exc_code;
3033ce97513SArnaldo Carvalho de Melo 			__u32 pgm_code;
3043ce97513SArnaldo Carvalho de Melo 		} s390_ucontrol;
3053ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_DCR (deprecated) */
3063ce97513SArnaldo Carvalho de Melo 		struct {
3073ce97513SArnaldo Carvalho de Melo 			__u32 dcrn;
3083ce97513SArnaldo Carvalho de Melo 			__u32 data;
3093ce97513SArnaldo Carvalho de Melo 			__u8  is_write;
3103ce97513SArnaldo Carvalho de Melo 		} dcr;
3113ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_INTERNAL_ERROR */
3123ce97513SArnaldo Carvalho de Melo 		struct {
3133ce97513SArnaldo Carvalho de Melo 			__u32 suberror;
3143ce97513SArnaldo Carvalho de Melo 			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
3153ce97513SArnaldo Carvalho de Melo 			__u32 ndata;
3163ce97513SArnaldo Carvalho de Melo 			__u64 data[16];
3173ce97513SArnaldo Carvalho de Melo 		} internal;
318e48f62aeSArnaldo Carvalho de Melo 		/*
319e48f62aeSArnaldo Carvalho de Melo 		 * KVM_INTERNAL_ERROR_EMULATION
320e48f62aeSArnaldo Carvalho de Melo 		 *
321e48f62aeSArnaldo Carvalho de Melo 		 * "struct emulation_failure" is an overlay of "struct internal"
322e48f62aeSArnaldo Carvalho de Melo 		 * that is used for the KVM_INTERNAL_ERROR_EMULATION sub-type of
323e48f62aeSArnaldo Carvalho de Melo 		 * KVM_EXIT_INTERNAL_ERROR.  Note, unlike other internal error
324e48f62aeSArnaldo Carvalho de Melo 		 * sub-types, this struct is ABI!  It also needs to be backwards
325e48f62aeSArnaldo Carvalho de Melo 		 * compatible with "struct internal".  Take special care that
326e48f62aeSArnaldo Carvalho de Melo 		 * "ndata" is correct, that new fields are enumerated in "flags",
327e48f62aeSArnaldo Carvalho de Melo 		 * and that each flag enumerates fields that are 64-bit aligned
328e48f62aeSArnaldo Carvalho de Melo 		 * and sized (so that ndata+internal.data[] is valid/accurate).
329346e9199SArnaldo Carvalho de Melo 		 *
330346e9199SArnaldo Carvalho de Melo 		 * Space beyond the defined fields may be used to store arbitrary
331346e9199SArnaldo Carvalho de Melo 		 * debug information relating to the emulation failure. It is
332346e9199SArnaldo Carvalho de Melo 		 * accounted for in "ndata" but the format is unspecified and is
333346e9199SArnaldo Carvalho de Melo 		 * not represented in "flags". Any such information is *not* ABI!
334e48f62aeSArnaldo Carvalho de Melo 		 */
335e48f62aeSArnaldo Carvalho de Melo 		struct {
336e48f62aeSArnaldo Carvalho de Melo 			__u32 suberror;
337e48f62aeSArnaldo Carvalho de Melo 			__u32 ndata;
338e48f62aeSArnaldo Carvalho de Melo 			__u64 flags;
339346e9199SArnaldo Carvalho de Melo 			union {
340346e9199SArnaldo Carvalho de Melo 				struct {
341e48f62aeSArnaldo Carvalho de Melo 					__u8  insn_size;
342e48f62aeSArnaldo Carvalho de Melo 					__u8  insn_bytes[15];
343346e9199SArnaldo Carvalho de Melo 				};
344346e9199SArnaldo Carvalho de Melo 			};
345346e9199SArnaldo Carvalho de Melo 			/* Arbitrary debug data may follow. */
346e48f62aeSArnaldo Carvalho de Melo 		} emulation_failure;
3473ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_OSI */
3483ce97513SArnaldo Carvalho de Melo 		struct {
3493ce97513SArnaldo Carvalho de Melo 			__u64 gprs[32];
3503ce97513SArnaldo Carvalho de Melo 		} osi;
3513ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_PAPR_HCALL */
3523ce97513SArnaldo Carvalho de Melo 		struct {
3533ce97513SArnaldo Carvalho de Melo 			__u64 nr;
3543ce97513SArnaldo Carvalho de Melo 			__u64 ret;
3553ce97513SArnaldo Carvalho de Melo 			__u64 args[9];
3563ce97513SArnaldo Carvalho de Melo 		} papr_hcall;
3573ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_S390_TSCH */
3583ce97513SArnaldo Carvalho de Melo 		struct {
3593ce97513SArnaldo Carvalho de Melo 			__u16 subchannel_id;
3603ce97513SArnaldo Carvalho de Melo 			__u16 subchannel_nr;
3613ce97513SArnaldo Carvalho de Melo 			__u32 io_int_parm;
3623ce97513SArnaldo Carvalho de Melo 			__u32 io_int_word;
3633ce97513SArnaldo Carvalho de Melo 			__u32 ipb;
3643ce97513SArnaldo Carvalho de Melo 			__u8 dequeued;
3653ce97513SArnaldo Carvalho de Melo 		} s390_tsch;
3663ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_EPR */
3673ce97513SArnaldo Carvalho de Melo 		struct {
3683ce97513SArnaldo Carvalho de Melo 			__u32 epr;
3693ce97513SArnaldo Carvalho de Melo 		} epr;
3703ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_SYSTEM_EVENT */
3713ce97513SArnaldo Carvalho de Melo 		struct {
3723ce97513SArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_SHUTDOWN       1
3733ce97513SArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_RESET          2
3743ce97513SArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_CRASH          3
3757fe718fbSArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_WAKEUP         4
3767fe718fbSArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_SUSPEND        5
3777fe718fbSArnaldo Carvalho de Melo #define KVM_SYSTEM_EVENT_SEV_TERM       6
3783ce97513SArnaldo Carvalho de Melo 			__u32 type;
379474e76c4SArnaldo Carvalho de Melo 			__u32 ndata;
380474e76c4SArnaldo Carvalho de Melo 			union {
381474e76c4SArnaldo Carvalho de Melo #ifndef __KERNEL__
3823ce97513SArnaldo Carvalho de Melo 				__u64 flags;
383474e76c4SArnaldo Carvalho de Melo #endif
384474e76c4SArnaldo Carvalho de Melo 				__u64 data[16];
385474e76c4SArnaldo Carvalho de Melo 			};
3863ce97513SArnaldo Carvalho de Melo 		} system_event;
3873ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_S390_STSI */
3883ce97513SArnaldo Carvalho de Melo 		struct {
3893ce97513SArnaldo Carvalho de Melo 			__u64 addr;
3903ce97513SArnaldo Carvalho de Melo 			__u8 ar;
3913ce97513SArnaldo Carvalho de Melo 			__u8 reserved;
3923ce97513SArnaldo Carvalho de Melo 			__u8 fc;
3933ce97513SArnaldo Carvalho de Melo 			__u8 sel1;
3943ce97513SArnaldo Carvalho de Melo 			__u16 sel2;
3953ce97513SArnaldo Carvalho de Melo 		} s390_stsi;
3963ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_IOAPIC_EOI */
3973ce97513SArnaldo Carvalho de Melo 		struct {
3983ce97513SArnaldo Carvalho de Melo 			__u8 vector;
3993ce97513SArnaldo Carvalho de Melo 		} eoi;
4003ce97513SArnaldo Carvalho de Melo 		/* KVM_EXIT_HYPERV */
4013ce97513SArnaldo Carvalho de Melo 		struct kvm_hyperv_exit hyperv;
4021fc3d0eeSArnaldo Carvalho de Melo 		/* KVM_EXIT_ARM_NISV */
4031fc3d0eeSArnaldo Carvalho de Melo 		struct {
4041fc3d0eeSArnaldo Carvalho de Melo 			__u64 esr_iss;
4051fc3d0eeSArnaldo Carvalho de Melo 			__u64 fault_ipa;
4061fc3d0eeSArnaldo Carvalho de Melo 		} arm_nisv;
407aa04899aSArnaldo Carvalho de Melo 		/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
408aa04899aSArnaldo Carvalho de Melo 		struct {
409aa04899aSArnaldo Carvalho de Melo 			__u8 error; /* user -> kernel */
410aa04899aSArnaldo Carvalho de Melo 			__u8 pad[7];
411aa04899aSArnaldo Carvalho de Melo #define KVM_MSR_EXIT_REASON_INVAL	(1 << 0)
412aa04899aSArnaldo Carvalho de Melo #define KVM_MSR_EXIT_REASON_UNKNOWN	(1 << 1)
413aa04899aSArnaldo Carvalho de Melo #define KVM_MSR_EXIT_REASON_FILTER	(1 << 2)
414b235e5b5SArnaldo Carvalho de Melo #define KVM_MSR_EXIT_REASON_VALID_MASK	(KVM_MSR_EXIT_REASON_INVAL   |	\
415b235e5b5SArnaldo Carvalho de Melo 					 KVM_MSR_EXIT_REASON_UNKNOWN |	\
416b235e5b5SArnaldo Carvalho de Melo 					 KVM_MSR_EXIT_REASON_FILTER)
417aa04899aSArnaldo Carvalho de Melo 			__u32 reason; /* kernel -> user */
418aa04899aSArnaldo Carvalho de Melo 			__u32 index; /* kernel -> user */
419aa04899aSArnaldo Carvalho de Melo 			__u64 data; /* kernel <-> user */
420aa04899aSArnaldo Carvalho de Melo 		} msr;
42121b7e35bSArnaldo Carvalho de Melo 		/* KVM_EXIT_XEN */
42221b7e35bSArnaldo Carvalho de Melo 		struct kvm_xen_exit xen;
423346e9199SArnaldo Carvalho de Melo 		/* KVM_EXIT_RISCV_SBI */
424346e9199SArnaldo Carvalho de Melo 		struct {
425346e9199SArnaldo Carvalho de Melo 			unsigned long extension_id;
426346e9199SArnaldo Carvalho de Melo 			unsigned long function_id;
427346e9199SArnaldo Carvalho de Melo 			unsigned long args[6];
428346e9199SArnaldo Carvalho de Melo 			unsigned long ret[2];
429346e9199SArnaldo Carvalho de Melo 		} riscv_sbi;
430bf465ca8SArnaldo Carvalho de Melo 		/* KVM_EXIT_RISCV_CSR */
431bf465ca8SArnaldo Carvalho de Melo 		struct {
432bf465ca8SArnaldo Carvalho de Melo 			unsigned long csr_num;
433bf465ca8SArnaldo Carvalho de Melo 			unsigned long new_value;
434bf465ca8SArnaldo Carvalho de Melo 			unsigned long write_mask;
435bf465ca8SArnaldo Carvalho de Melo 			unsigned long ret_value;
436bf465ca8SArnaldo Carvalho de Melo 		} riscv_csr;
437bf465ca8SArnaldo Carvalho de Melo 		/* KVM_EXIT_NOTIFY */
438bf465ca8SArnaldo Carvalho de Melo 		struct {
439bf465ca8SArnaldo Carvalho de Melo #define KVM_NOTIFY_CONTEXT_INVALID	(1 << 0)
440bf465ca8SArnaldo Carvalho de Melo 			__u32 flags;
441bf465ca8SArnaldo Carvalho de Melo 		} notify;
442e30dca91SArnaldo Carvalho de Melo 		/* KVM_EXIT_MEMORY_FAULT */
443e30dca91SArnaldo Carvalho de Melo 		struct {
444e30dca91SArnaldo Carvalho de Melo #define KVM_MEMORY_EXIT_FLAG_PRIVATE	(1ULL << 3)
445e30dca91SArnaldo Carvalho de Melo 			__u64 flags;
446e30dca91SArnaldo Carvalho de Melo 			__u64 gpa;
447e30dca91SArnaldo Carvalho de Melo 			__u64 size;
448e30dca91SArnaldo Carvalho de Melo 		} memory_fault;
4493ce97513SArnaldo Carvalho de Melo 		/* Fix the size of the union. */
4503ce97513SArnaldo Carvalho de Melo 		char padding[256];
4513ce97513SArnaldo Carvalho de Melo 	};
4523ce97513SArnaldo Carvalho de Melo 
453e2f73a18SIngo Molnar 	/* 2048 is the size of the char array used to bound/pad the size
454e2f73a18SIngo Molnar 	 * of the union that holds sync regs.
455e2f73a18SIngo Molnar 	 */
456e2f73a18SIngo Molnar 	#define SYNC_REGS_SIZE_BYTES 2048
4573ce97513SArnaldo Carvalho de Melo 	/*
4583ce97513SArnaldo Carvalho de Melo 	 * shared registers between kvm and userspace.
4593ce97513SArnaldo Carvalho de Melo 	 * kvm_valid_regs specifies the register classes set by the host
4603ce97513SArnaldo Carvalho de Melo 	 * kvm_dirty_regs specified the register classes dirtied by userspace
4613ce97513SArnaldo Carvalho de Melo 	 * struct kvm_sync_regs is architecture specific, as well as the
4623ce97513SArnaldo Carvalho de Melo 	 * bits for kvm_valid_regs and kvm_dirty_regs
4633ce97513SArnaldo Carvalho de Melo 	 */
4643ce97513SArnaldo Carvalho de Melo 	__u64 kvm_valid_regs;
4653ce97513SArnaldo Carvalho de Melo 	__u64 kvm_dirty_regs;
4663ce97513SArnaldo Carvalho de Melo 	union {
4673ce97513SArnaldo Carvalho de Melo 		struct kvm_sync_regs regs;
468e2f73a18SIngo Molnar 		char padding[SYNC_REGS_SIZE_BYTES];
4693ce97513SArnaldo Carvalho de Melo 	} s;
4703ce97513SArnaldo Carvalho de Melo };
4713ce97513SArnaldo Carvalho de Melo 
4723ce97513SArnaldo Carvalho de Melo /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
4733ce97513SArnaldo Carvalho de Melo 
4743ce97513SArnaldo Carvalho de Melo struct kvm_coalesced_mmio_zone {
4753ce97513SArnaldo Carvalho de Melo 	__u64 addr;
4763ce97513SArnaldo Carvalho de Melo 	__u32 size;
47782775812SArnaldo Carvalho de Melo 	union {
4783ce97513SArnaldo Carvalho de Melo 		__u32 pad;
47982775812SArnaldo Carvalho de Melo 		__u32 pio;
48082775812SArnaldo Carvalho de Melo 	};
4813ce97513SArnaldo Carvalho de Melo };
4823ce97513SArnaldo Carvalho de Melo 
4833ce97513SArnaldo Carvalho de Melo struct kvm_coalesced_mmio {
4843ce97513SArnaldo Carvalho de Melo 	__u64 phys_addr;
4853ce97513SArnaldo Carvalho de Melo 	__u32 len;
48682775812SArnaldo Carvalho de Melo 	union {
4873ce97513SArnaldo Carvalho de Melo 		__u32 pad;
48882775812SArnaldo Carvalho de Melo 		__u32 pio;
48982775812SArnaldo Carvalho de Melo 	};
4903ce97513SArnaldo Carvalho de Melo 	__u8  data[8];
4913ce97513SArnaldo Carvalho de Melo };
4923ce97513SArnaldo Carvalho de Melo 
4933ce97513SArnaldo Carvalho de Melo struct kvm_coalesced_mmio_ring {
4943ce97513SArnaldo Carvalho de Melo 	__u32 first, last;
49594dfc73eSGustavo A. R. Silva 	struct kvm_coalesced_mmio coalesced_mmio[];
4963ce97513SArnaldo Carvalho de Melo };
4973ce97513SArnaldo Carvalho de Melo 
4983ce97513SArnaldo Carvalho de Melo #define KVM_COALESCED_MMIO_MAX \
4993ce97513SArnaldo Carvalho de Melo 	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
5003ce97513SArnaldo Carvalho de Melo 	 sizeof(struct kvm_coalesced_mmio))
5013ce97513SArnaldo Carvalho de Melo 
5023ce97513SArnaldo Carvalho de Melo /* for KVM_TRANSLATE */
5033ce97513SArnaldo Carvalho de Melo struct kvm_translation {
5043ce97513SArnaldo Carvalho de Melo 	/* in */
5053ce97513SArnaldo Carvalho de Melo 	__u64 linear_address;
5063ce97513SArnaldo Carvalho de Melo 
5073ce97513SArnaldo Carvalho de Melo 	/* out */
5083ce97513SArnaldo Carvalho de Melo 	__u64 physical_address;
5093ce97513SArnaldo Carvalho de Melo 	__u8  valid;
5103ce97513SArnaldo Carvalho de Melo 	__u8  writeable;
5113ce97513SArnaldo Carvalho de Melo 	__u8  usermode;
5123ce97513SArnaldo Carvalho de Melo 	__u8  pad[5];
5133ce97513SArnaldo Carvalho de Melo };
5143ce97513SArnaldo Carvalho de Melo 
5153ce97513SArnaldo Carvalho de Melo /* for KVM_INTERRUPT */
5163ce97513SArnaldo Carvalho de Melo struct kvm_interrupt {
5173ce97513SArnaldo Carvalho de Melo 	/* in */
5183ce97513SArnaldo Carvalho de Melo 	__u32 irq;
5193ce97513SArnaldo Carvalho de Melo };
5203ce97513SArnaldo Carvalho de Melo 
5213ce97513SArnaldo Carvalho de Melo /* for KVM_GET_DIRTY_LOG */
5223ce97513SArnaldo Carvalho de Melo struct kvm_dirty_log {
5233ce97513SArnaldo Carvalho de Melo 	__u32 slot;
5243ce97513SArnaldo Carvalho de Melo 	__u32 padding1;
5253ce97513SArnaldo Carvalho de Melo 	union {
5263ce97513SArnaldo Carvalho de Melo 		void __user *dirty_bitmap; /* one bit per page */
5273ce97513SArnaldo Carvalho de Melo 		__u64 padding2;
5283ce97513SArnaldo Carvalho de Melo 	};
5293ce97513SArnaldo Carvalho de Melo };
5303ce97513SArnaldo Carvalho de Melo 
531558517c5SArnaldo Carvalho de Melo /* for KVM_CLEAR_DIRTY_LOG */
532558517c5SArnaldo Carvalho de Melo struct kvm_clear_dirty_log {
533558517c5SArnaldo Carvalho de Melo 	__u32 slot;
534558517c5SArnaldo Carvalho de Melo 	__u32 num_pages;
535558517c5SArnaldo Carvalho de Melo 	__u64 first_page;
536558517c5SArnaldo Carvalho de Melo 	union {
537558517c5SArnaldo Carvalho de Melo 		void __user *dirty_bitmap; /* one bit per page */
538558517c5SArnaldo Carvalho de Melo 		__u64 padding2;
539558517c5SArnaldo Carvalho de Melo 	};
540558517c5SArnaldo Carvalho de Melo };
541558517c5SArnaldo Carvalho de Melo 
5423ce97513SArnaldo Carvalho de Melo /* for KVM_SET_SIGNAL_MASK */
5433ce97513SArnaldo Carvalho de Melo struct kvm_signal_mask {
5443ce97513SArnaldo Carvalho de Melo 	__u32 len;
54594dfc73eSGustavo A. R. Silva 	__u8  sigset[];
5463ce97513SArnaldo Carvalho de Melo };
5473ce97513SArnaldo Carvalho de Melo 
5483ce97513SArnaldo Carvalho de Melo /* for KVM_TPR_ACCESS_REPORTING */
5493ce97513SArnaldo Carvalho de Melo struct kvm_tpr_access_ctl {
5503ce97513SArnaldo Carvalho de Melo 	__u32 enabled;
5513ce97513SArnaldo Carvalho de Melo 	__u32 flags;
5523ce97513SArnaldo Carvalho de Melo 	__u32 reserved[8];
5533ce97513SArnaldo Carvalho de Melo };
5543ce97513SArnaldo Carvalho de Melo 
5553ce97513SArnaldo Carvalho de Melo /* for KVM_SET_VAPIC_ADDR */
5563ce97513SArnaldo Carvalho de Melo struct kvm_vapic_addr {
5573ce97513SArnaldo Carvalho de Melo 	__u64 vapic_addr;
5583ce97513SArnaldo Carvalho de Melo };
5593ce97513SArnaldo Carvalho de Melo 
5603ce97513SArnaldo Carvalho de Melo /* for KVM_SET_MP_STATE */
5613ce97513SArnaldo Carvalho de Melo 
5623ce97513SArnaldo Carvalho de Melo /* not all states are valid on all architectures */
5633ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_RUNNABLE          0
5643ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_UNINITIALIZED     1
5653ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_INIT_RECEIVED     2
5663ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_HALTED            3
5673ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_SIPI_RECEIVED     4
5683ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_STOPPED           5
5693ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_CHECK_STOP        6
5703ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_OPERATING         7
5713ce97513SArnaldo Carvalho de Melo #define KVM_MP_STATE_LOAD              8
57238c53947SArnaldo Carvalho de Melo #define KVM_MP_STATE_AP_RESET_HOLD     9
5737fe718fbSArnaldo Carvalho de Melo #define KVM_MP_STATE_SUSPENDED         10
5743ce97513SArnaldo Carvalho de Melo 
5753ce97513SArnaldo Carvalho de Melo struct kvm_mp_state {
5763ce97513SArnaldo Carvalho de Melo 	__u32 mp_state;
5773ce97513SArnaldo Carvalho de Melo };
5783ce97513SArnaldo Carvalho de Melo 
5793ce97513SArnaldo Carvalho de Melo /* for KVM_SET_GUEST_DEBUG */
5803ce97513SArnaldo Carvalho de Melo 
5813ce97513SArnaldo Carvalho de Melo #define KVM_GUESTDBG_ENABLE		0x00000001
5823ce97513SArnaldo Carvalho de Melo #define KVM_GUESTDBG_SINGLESTEP		0x00000002
5833ce97513SArnaldo Carvalho de Melo 
5843ce97513SArnaldo Carvalho de Melo struct kvm_guest_debug {
5853ce97513SArnaldo Carvalho de Melo 	__u32 control;
5863ce97513SArnaldo Carvalho de Melo 	__u32 pad;
5873ce97513SArnaldo Carvalho de Melo 	struct kvm_guest_debug_arch arch;
5883ce97513SArnaldo Carvalho de Melo };
5893ce97513SArnaldo Carvalho de Melo 
5903ce97513SArnaldo Carvalho de Melo enum {
5913ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_datamatch,
5923ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_pio,
5933ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_deassign,
5943ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
5953ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_fast_mmio,
5963ce97513SArnaldo Carvalho de Melo 	kvm_ioeventfd_flag_nr_max,
5973ce97513SArnaldo Carvalho de Melo };
5983ce97513SArnaldo Carvalho de Melo 
5993ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
6003ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
6013ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
6023ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
6033ce97513SArnaldo Carvalho de Melo 	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
6043ce97513SArnaldo Carvalho de Melo 
6053ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
6063ce97513SArnaldo Carvalho de Melo 
6073ce97513SArnaldo Carvalho de Melo struct kvm_ioeventfd {
6083ce97513SArnaldo Carvalho de Melo 	__u64 datamatch;
6093ce97513SArnaldo Carvalho de Melo 	__u64 addr;        /* legal pio/mmio address */
6103ce97513SArnaldo Carvalho de Melo 	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
6113ce97513SArnaldo Carvalho de Melo 	__s32 fd;
6123ce97513SArnaldo Carvalho de Melo 	__u32 flags;
6133ce97513SArnaldo Carvalho de Melo 	__u8  pad[36];
6143ce97513SArnaldo Carvalho de Melo };
6153ce97513SArnaldo Carvalho de Melo 
616d0e9f4c1SArnaldo Carvalho de Melo #define KVM_X86_DISABLE_EXITS_MWAIT          (1 << 0)
617766d3571SMichael S. Tsirkin #define KVM_X86_DISABLE_EXITS_HLT            (1 << 1)
618d0e9f4c1SArnaldo Carvalho de Melo #define KVM_X86_DISABLE_EXITS_PAUSE          (1 << 2)
619b5170063SWanpeng Li #define KVM_X86_DISABLE_EXITS_CSTATE         (1 << 3)
620d0e9f4c1SArnaldo Carvalho de Melo 
6213ce97513SArnaldo Carvalho de Melo /* for KVM_ENABLE_CAP */
6223ce97513SArnaldo Carvalho de Melo struct kvm_enable_cap {
6233ce97513SArnaldo Carvalho de Melo 	/* in */
6243ce97513SArnaldo Carvalho de Melo 	__u32 cap;
6253ce97513SArnaldo Carvalho de Melo 	__u32 flags;
6263ce97513SArnaldo Carvalho de Melo 	__u64 args[4];
6273ce97513SArnaldo Carvalho de Melo 	__u8  pad[64];
6283ce97513SArnaldo Carvalho de Melo };
6293ce97513SArnaldo Carvalho de Melo 
6303ce97513SArnaldo Carvalho de Melo #define KVMIO 0xAE
6313ce97513SArnaldo Carvalho de Melo 
6323ce97513SArnaldo Carvalho de Melo /* machine type bits, to be used as argument to KVM_CREATE_VM */
6333ce97513SArnaldo Carvalho de Melo #define KVM_VM_S390_UCONTROL	1
6343ce97513SArnaldo Carvalho de Melo 
6353ce97513SArnaldo Carvalho de Melo /* on ppc, 0 indicate default, 1 should force HV and 2 PR */
6363ce97513SArnaldo Carvalho de Melo #define KVM_VM_PPC_HV 1
6373ce97513SArnaldo Carvalho de Melo #define KVM_VM_PPC_PR 2
6383ce97513SArnaldo Carvalho de Melo 
6398d761d2cSArnaldo Carvalho de Melo /* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
6408d761d2cSArnaldo Carvalho de Melo #define KVM_VM_MIPS_AUTO	0
6413ce97513SArnaldo Carvalho de Melo #define KVM_VM_MIPS_VZ		1
6428d761d2cSArnaldo Carvalho de Melo #define KVM_VM_MIPS_TE		2
6433ce97513SArnaldo Carvalho de Melo 
6443ce97513SArnaldo Carvalho de Melo #define KVM_S390_SIE_PAGE_OFFSET 1
6453ce97513SArnaldo Carvalho de Melo 
6463ce97513SArnaldo Carvalho de Melo /*
64782775812SArnaldo Carvalho de Melo  * On arm64, machine type can be used to request the physical
64882775812SArnaldo Carvalho de Melo  * address size for the VM. Bits[7-0] are reserved for the guest
64982775812SArnaldo Carvalho de Melo  * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
65082775812SArnaldo Carvalho de Melo  * value 0 implies the default IPA size, 40bits.
65182775812SArnaldo Carvalho de Melo  */
65282775812SArnaldo Carvalho de Melo #define KVM_VM_TYPE_ARM_IPA_SIZE_MASK	0xffULL
65382775812SArnaldo Carvalho de Melo #define KVM_VM_TYPE_ARM_IPA_SIZE(x)		\
65482775812SArnaldo Carvalho de Melo 	((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
65582775812SArnaldo Carvalho de Melo /*
6563ce97513SArnaldo Carvalho de Melo  * ioctls for /dev/kvm fds:
6573ce97513SArnaldo Carvalho de Melo  */
6583ce97513SArnaldo Carvalho de Melo #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
6593ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
6603ce97513SArnaldo Carvalho de Melo #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
6613ce97513SArnaldo Carvalho de Melo 
6623ce97513SArnaldo Carvalho de Melo #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
6633ce97513SArnaldo Carvalho de Melo /*
6643ce97513SArnaldo Carvalho de Melo  * Check if a kvm extension is available.  Argument is extension number,
6653ce97513SArnaldo Carvalho de Melo  * return is 1 (yes) or 0 (no, sorry).
6663ce97513SArnaldo Carvalho de Melo  */
6673ce97513SArnaldo Carvalho de Melo #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
6683ce97513SArnaldo Carvalho de Melo /*
6693ce97513SArnaldo Carvalho de Melo  * Get size for mmap(vcpu_fd)
6703ce97513SArnaldo Carvalho de Melo  */
6713ce97513SArnaldo Carvalho de Melo #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
6723ce97513SArnaldo Carvalho de Melo #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
6733ce97513SArnaldo Carvalho de Melo #define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
674d976a6e9SArnaldo Carvalho de Melo #define KVM_GET_MSR_FEATURE_INDEX_LIST    _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
6753ce97513SArnaldo Carvalho de Melo 
6763ce97513SArnaldo Carvalho de Melo /*
6773ce97513SArnaldo Carvalho de Melo  * Extension capability list.
6783ce97513SArnaldo Carvalho de Melo  */
6793ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQCHIP	  0
6803ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HLT	  1
6813ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
6823ce97513SArnaldo Carvalho de Melo #define KVM_CAP_USER_MEMORY 3
6833ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SET_TSS_ADDR 4
6843ce97513SArnaldo Carvalho de Melo #define KVM_CAP_VAPIC 6
6853ce97513SArnaldo Carvalho de Melo #define KVM_CAP_EXT_CPUID 7
6863ce97513SArnaldo Carvalho de Melo #define KVM_CAP_CLOCKSOURCE 8
6873ce97513SArnaldo Carvalho de Melo #define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
6883ce97513SArnaldo Carvalho de Melo #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
6893ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PIT 11
6903ce97513SArnaldo Carvalho de Melo #define KVM_CAP_NOP_IO_DELAY 12
6913ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PV_MMU 13
6923ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MP_STATE 14
6933ce97513SArnaldo Carvalho de Melo #define KVM_CAP_COALESCED_MMIO 15
6943ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
6953ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IOMMU 18
6963ce97513SArnaldo Carvalho de Melo /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
6973ce97513SArnaldo Carvalho de Melo #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
6983ce97513SArnaldo Carvalho de Melo #define KVM_CAP_USER_NMI 22
6993ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SET_GUEST_DEBUG 23
7003ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_PIT
7013ce97513SArnaldo Carvalho de Melo #define KVM_CAP_REINJECT_CONTROL 24
7023ce97513SArnaldo Carvalho de Melo #endif
7033ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQ_ROUTING 25
7043ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQ_INJECT_STATUS 26
7053ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ASSIGN_DEV_IRQ 29
7063ce97513SArnaldo Carvalho de Melo /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
7073ce97513SArnaldo Carvalho de Melo #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
7083ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_MCE
7093ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MCE 31
7103ce97513SArnaldo Carvalho de Melo #endif
7113ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQFD 32
7123ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_PIT
7133ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PIT2 33
7143ce97513SArnaldo Carvalho de Melo #endif
7153ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SET_BOOT_CPU_ID 34
7163ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_PIT_STATE2
7173ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PIT_STATE2 35
7183ce97513SArnaldo Carvalho de Melo #endif
7193ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IOEVENTFD 36
7203ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
7213ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_XEN_HVM
7223ce97513SArnaldo Carvalho de Melo #define KVM_CAP_XEN_HVM 38
7233ce97513SArnaldo Carvalho de Melo #endif
7243ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ADJUST_CLOCK 39
7253ce97513SArnaldo Carvalho de Melo #define KVM_CAP_INTERNAL_ERROR_DATA 40
7263ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_VCPU_EVENTS
7273ce97513SArnaldo Carvalho de Melo #define KVM_CAP_VCPU_EVENTS 41
7283ce97513SArnaldo Carvalho de Melo #endif
7293ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_PSW 42
7303ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_SEGSTATE 43
7313ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV 44
7323ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_VAPIC 45
7333ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_SPIN 46
7343ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PCI_SEGMENT 47
7353ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_PAIRED_SINGLES 48
7363ce97513SArnaldo Carvalho de Melo #define KVM_CAP_INTR_SHADOW 49
7373ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_DEBUGREGS
7383ce97513SArnaldo Carvalho de Melo #define KVM_CAP_DEBUGREGS 50
7393ce97513SArnaldo Carvalho de Melo #endif
7403ce97513SArnaldo Carvalho de Melo #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
7413ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_OSI 52
7423ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_UNSET_IRQ 53
7433ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ENABLE_CAP 54
7443ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_XSAVE
7453ce97513SArnaldo Carvalho de Melo #define KVM_CAP_XSAVE 55
7463ce97513SArnaldo Carvalho de Melo #endif
7473ce97513SArnaldo Carvalho de Melo #ifdef __KVM_HAVE_XCRS
7483ce97513SArnaldo Carvalho de Melo #define KVM_CAP_XCRS 56
7493ce97513SArnaldo Carvalho de Melo #endif
7503ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_GET_PVINFO 57
7513ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_IRQ_LEVEL 58
7523ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ASYNC_PF 59
7533ce97513SArnaldo Carvalho de Melo #define KVM_CAP_TSC_CONTROL 60
7543ce97513SArnaldo Carvalho de Melo #define KVM_CAP_GET_TSC_KHZ 61
7553ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_BOOKE_SREGS 62
7563ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPAPR_TCE 63
7573ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_SMT 64
7583ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_RMA	65
7593ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
7603ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_HIOR 67
7613ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_PAPR 68
7623ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SW_TLB 69
7633ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ONE_REG 70
7643ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_GMAP 71
7653ce97513SArnaldo Carvalho de Melo #define KVM_CAP_TSC_DEADLINE_TIMER 72
7663ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_UCONTROL 73
7673ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SYNC_REGS 74
7683ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PCI_2_3 75
7693ce97513SArnaldo Carvalho de Melo #define KVM_CAP_KVMCLOCK_CTRL 76
7703ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SIGNAL_MSI 77
7713ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_GET_SMMU_INFO 78
7723ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_COW 79
7733ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_ALLOC_HTAB 80
7743ce97513SArnaldo Carvalho de Melo #define KVM_CAP_READONLY_MEM 81
7753ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQFD_RESAMPLE 82
7763ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_BOOKE_WATCHDOG 83
7773ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_HTAB_FD 84
7783ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_CSS_SUPPORT 85
7793ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_EPR 86
7803ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_PSCI 87
7813ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_SET_DEVICE_ADDR 88
7823ce97513SArnaldo Carvalho de Melo #define KVM_CAP_DEVICE_CTRL 89
7833ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQ_MPIC 90
7843ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_RTAS 91
7853ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IRQ_XICS 92
7863ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_EL1_32BIT 93
7873ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPAPR_MULTITCE 94
7883ce97513SArnaldo Carvalho de Melo #define KVM_CAP_EXT_EMUL_CPUID 95
7893ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_TIME 96
7903ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
7913ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ENABLE_CAP_VM 98
7923ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_IRQCHIP 99
7933ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IOEVENTFD_NO_LENGTH 100
7943ce97513SArnaldo Carvalho de Melo #define KVM_CAP_VM_ATTRIBUTES 101
7953ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_PSCI_0_2 102
7963ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_FIXUP_HCALL 103
7973ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_ENABLE_HCALL 104
7983ce97513SArnaldo Carvalho de Melo #define KVM_CAP_CHECK_EXTENSION_VM 105
7993ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_USER_SIGP 106
8003ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_VECTOR_REGISTERS 107
8013ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_MEM_OP 108
8023ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_USER_STSI 109
8033ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_SKEYS 110
8043ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MIPS_FPU 111
8053ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MIPS_MSA 112
8063ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_INJECT_IRQ 113
8073ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_IRQ_STATE 114
8083ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_HWRNG 115
8093ce97513SArnaldo Carvalho de Melo #define KVM_CAP_DISABLE_QUIRKS 116
8103ce97513SArnaldo Carvalho de Melo #define KVM_CAP_X86_SMM 117
8113ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MULTI_ADDRESS_SPACE 118
8123ce97513SArnaldo Carvalho de Melo #define KVM_CAP_GUEST_DEBUG_HW_BPS 119
8133ce97513SArnaldo Carvalho de Melo #define KVM_CAP_GUEST_DEBUG_HW_WPS 120
8143ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPLIT_IRQCHIP 121
8153ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
8163ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_SYNIC 123
8173ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_RI 124
8183ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPAPR_TCE_64 125
8193ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_PMU_V3 126
8203ce97513SArnaldo Carvalho de Melo #define KVM_CAP_VCPU_ATTRIBUTES 127
8213ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MAX_VCPU_ID 128
8223ce97513SArnaldo Carvalho de Melo #define KVM_CAP_X2APIC_API 129
8233ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_USER_INSTR0 130
8243ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MSI_DEVID 131
8253ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_HTM 132
8263ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPAPR_RESIZE_HPT 133
8273ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_MMU_RADIX 134
8283ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_MMU_HASH_V3 135
8293ce97513SArnaldo Carvalho de Melo #define KVM_CAP_IMMEDIATE_EXIT 136
8303ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MIPS_VZ 137
8313ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MIPS_TE 138
8323ce97513SArnaldo Carvalho de Melo #define KVM_CAP_MIPS_64BIT 139
8333ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_GS 140
8343ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_AIS 141
8353ce97513SArnaldo Carvalho de Melo #define KVM_CAP_SPAPR_TCE_VFIO 142
8364d5422ceSWanpeng Li #define KVM_CAP_X86_DISABLE_EXITS 143
8373ce97513SArnaldo Carvalho de Melo #define KVM_CAP_ARM_USER_IRQ 144
8383ce97513SArnaldo Carvalho de Melo #define KVM_CAP_S390_CMMA_MIGRATION 145
8393ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_FWNMI 146
8403ce97513SArnaldo Carvalho de Melo #define KVM_CAP_PPC_SMT_POSSIBLE 147
8413ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_SYNIC2 148
8423ce97513SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_VP_INDEX 149
843374fbe56SArnaldo Carvalho de Melo #define KVM_CAP_S390_AIS_MIGRATION 150
8441b8f5160SArnaldo Carvalho de Melo #define KVM_CAP_PPC_GET_CPU_CHAR 151
8451b8f5160SArnaldo Carvalho de Melo #define KVM_CAP_S390_BPB 152
846d976a6e9SArnaldo Carvalho de Melo #define KVM_CAP_GET_MSR_FEATURES 153
847e2f73a18SIngo Molnar #define KVM_CAP_HYPERV_EVENTFD 154
84832fdbd90SIngo Molnar #define KVM_CAP_HYPERV_TLBFLUSH 155
8490210c156SArnaldo Carvalho de Melo #define KVM_CAP_S390_HPAGE_1M 156
8500210c156SArnaldo Carvalho de Melo #define KVM_CAP_NESTED_STATE 157
8510210c156SArnaldo Carvalho de Melo #define KVM_CAP_ARM_INJECT_SERROR_ESR 158
852c939989dSVitaly Kuznetsov #define KVM_CAP_MSR_PLATFORM_INFO 159
853c939989dSVitaly Kuznetsov #define KVM_CAP_PPC_NESTED_HV 160
854c939989dSVitaly Kuznetsov #define KVM_CAP_HYPERV_SEND_IPI 161
855c939989dSVitaly Kuznetsov #define KVM_CAP_COALESCED_PIO 162
856c939989dSVitaly Kuznetsov #define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
85782775812SArnaldo Carvalho de Melo #define KVM_CAP_EXCEPTION_PAYLOAD 164
85882775812SArnaldo Carvalho de Melo #define KVM_CAP_ARM_VM_IPA_SIZE 165
859a7350998SArnaldo Carvalho de Melo #define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166 /* Obsolete */
860558517c5SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_CPUID 167
861a7350998SArnaldo Carvalho de Melo #define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 168
862a7350998SArnaldo Carvalho de Melo #define KVM_CAP_PPC_IRQ_XIVE 169
863a7350998SArnaldo Carvalho de Melo #define KVM_CAP_ARM_SVE 170
864a7350998SArnaldo Carvalho de Melo #define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
865a7350998SArnaldo Carvalho de Melo #define KVM_CAP_ARM_PTRAUTH_GENERIC 172
866e0d99c4dSArnaldo Carvalho de Melo #define KVM_CAP_PMU_EVENT_FILTER 173
867b7ad6108SArnaldo Carvalho de Melo #define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174
8688daf1fb7SArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_DIRECT_TLBFLUSH 175
8691fc3d0eeSArnaldo Carvalho de Melo #define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176
8701fc3d0eeSArnaldo Carvalho de Melo #define KVM_CAP_ARM_NISV_TO_USER 177
8711fc3d0eeSArnaldo Carvalho de Melo #define KVM_CAP_ARM_INJECT_EXT_DABT 178
8722a8d017dSArnaldo Carvalho de Melo #define KVM_CAP_S390_VCPU_RESETS 179
873b8fc2280SArnaldo Carvalho de Melo #define KVM_CAP_S390_PROTECTED 180
874b8fc2280SArnaldo Carvalho de Melo #define KVM_CAP_PPC_SECURE_GUEST 181
875dd76c302SArnaldo Carvalho de Melo #define KVM_CAP_HALT_POLL 182
876dd76c302SArnaldo Carvalho de Melo #define KVM_CAP_ASYNC_PF_INT 183
8776016e034SArnaldo Carvalho de Melo #define KVM_CAP_LAST_CPU 184
8786016e034SArnaldo Carvalho de Melo #define KVM_CAP_SMALLER_MAXPHYADDR 185
8796016e034SArnaldo Carvalho de Melo #define KVM_CAP_S390_DIAG318 186
8808d761d2cSArnaldo Carvalho de Melo #define KVM_CAP_STEAL_TIME 187
881aa04899aSArnaldo Carvalho de Melo #define KVM_CAP_X86_USER_SPACE_MSR 188
882aa04899aSArnaldo Carvalho de Melo #define KVM_CAP_X86_MSR_FILTER 189
883aa04899aSArnaldo Carvalho de Melo #define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
884288807fcSArnaldo Carvalho de Melo #define KVM_CAP_SYS_HYPERV_CPUID 191
885288807fcSArnaldo Carvalho de Melo #define KVM_CAP_DIRTY_LOG_RING 192
88621b7e35bSArnaldo Carvalho de Melo #define KVM_CAP_X86_BUS_LOCK_EXIT 193
887d9a47edaSRavi Bangoria #define KVM_CAP_PPC_DAWR1 194
8880d943d5fSArnaldo Carvalho de Melo #define KVM_CAP_SET_GUEST_DEBUG2 195
8890d943d5fSArnaldo Carvalho de Melo #define KVM_CAP_SGX_ATTRIBUTE 196
8900d943d5fSArnaldo Carvalho de Melo #define KVM_CAP_VM_COPY_ENC_CONTEXT_FROM 197
8910d943d5fSArnaldo Carvalho de Melo #define KVM_CAP_PTP_KVM 198
892e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_HYPERV_ENFORCE_CPUID 199
893e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_SREGS2 200
894e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_EXIT_HYPERCALL 201
895e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_PPC_RPT_INVALIDATE 202
896e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_BINARY_STATS_FD 203
897e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
898e48f62aeSArnaldo Carvalho de Melo #define KVM_CAP_ARM_MTE 205
899346e9199SArnaldo Carvalho de Melo #define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
900fa681181SPaolo Bonzini #define KVM_CAP_VM_GPA_BITS 207
901fa681181SPaolo Bonzini #define KVM_CAP_XSAVE2 208
902b19c99b9SPaolo Bonzini #define KVM_CAP_SYS_ATTRIBUTES 209
90393b71801SNicholas Piggin #define KVM_CAP_PPC_AIL_MODE_3 210
904ba7bb663SDavid Dunn #define KVM_CAP_S390_MEM_OP_EXTENSION 211
905ba7bb663SDavid Dunn #define KVM_CAP_PMU_CAPABILITY 212
9067ceda0cfSArnaldo Carvalho de Melo #define KVM_CAP_DISABLE_QUIRKS2 213
9077fe718fbSArnaldo Carvalho de Melo #define KVM_CAP_VM_TSC_CONTROL 214
908474e76c4SArnaldo Carvalho de Melo #define KVM_CAP_SYSTEM_EVENT_DATA 215
9097fe718fbSArnaldo Carvalho de Melo #define KVM_CAP_ARM_SYSTEM_SUSPEND 216
910bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_S390_PROTECTED_DUMP 217
911bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_X86_TRIPLE_FAULT_EVENT 218
912bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_X86_NOTIFY_VMEXIT 219
913bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_VM_DISABLE_NX_HUGE_PAGES 220
914bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_S390_ZPCI_OP 221
915bf465ca8SArnaldo Carvalho de Melo #define KVM_CAP_S390_CPU_TOPOLOGY 222
9169aec606cSPaolo Bonzini #define KVM_CAP_DIRTY_LOG_RING_ACQ_REL 223
917b235e5b5SArnaldo Carvalho de Melo #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
918b235e5b5SArnaldo Carvalho de Melo #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
91933c53f9bSArnaldo Carvalho de Melo #define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
920705049caSYanteng Si #define KVM_CAP_COUNTER_OFFSET 227
921225bbf44SArnaldo Carvalho de Melo #define KVM_CAP_ARM_EAGER_SPLIT_CHUNK_SIZE 228
922225bbf44SArnaldo Carvalho de Melo #define KVM_CAP_ARM_SUPPORTED_BLOCK_SIZES 229
9235a9f95b6SNamhyung Kim #define KVM_CAP_ARM_SUPPORTED_REG_MASK_RANGES 230
924e30dca91SArnaldo Carvalho de Melo #define KVM_CAP_USER_MEMORY2 231
925e30dca91SArnaldo Carvalho de Melo #define KVM_CAP_MEMORY_FAULT_INFO 232
926e30dca91SArnaldo Carvalho de Melo #define KVM_CAP_MEMORY_ATTRIBUTES 233
927e30dca91SArnaldo Carvalho de Melo #define KVM_CAP_GUEST_MEMFD 234
928e30dca91SArnaldo Carvalho de Melo #define KVM_CAP_VM_TYPES 235
9299ff0e37cSIsaku Yamahata #define KVM_CAP_PRE_FAULT_MEMORY 236
930a625df39SNamhyung Kim #define KVM_CAP_X86_APIC_BUS_CYCLES_NS 237
931a625df39SNamhyung Kim #define KVM_CAP_X86_GUEST_MODE 238
932*ddc59297SNamhyung Kim #define KVM_CAP_ARM_WRITABLE_IMP_ID_REGS 239
9333ce97513SArnaldo Carvalho de Melo 
9343ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing_irqchip {
9353ce97513SArnaldo Carvalho de Melo 	__u32 irqchip;
9363ce97513SArnaldo Carvalho de Melo 	__u32 pin;
9373ce97513SArnaldo Carvalho de Melo };
9383ce97513SArnaldo Carvalho de Melo 
9393ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing_msi {
9403ce97513SArnaldo Carvalho de Melo 	__u32 address_lo;
9413ce97513SArnaldo Carvalho de Melo 	__u32 address_hi;
9423ce97513SArnaldo Carvalho de Melo 	__u32 data;
9433ce97513SArnaldo Carvalho de Melo 	union {
9443ce97513SArnaldo Carvalho de Melo 		__u32 pad;
9453ce97513SArnaldo Carvalho de Melo 		__u32 devid;
9463ce97513SArnaldo Carvalho de Melo 	};
9473ce97513SArnaldo Carvalho de Melo };
9483ce97513SArnaldo Carvalho de Melo 
9493ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing_s390_adapter {
9503ce97513SArnaldo Carvalho de Melo 	__u64 ind_addr;
9513ce97513SArnaldo Carvalho de Melo 	__u64 summary_addr;
9523ce97513SArnaldo Carvalho de Melo 	__u64 ind_offset;
9533ce97513SArnaldo Carvalho de Melo 	__u32 summary_offset;
9543ce97513SArnaldo Carvalho de Melo 	__u32 adapter_id;
9553ce97513SArnaldo Carvalho de Melo };
9563ce97513SArnaldo Carvalho de Melo 
9573ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing_hv_sint {
9583ce97513SArnaldo Carvalho de Melo 	__u32 vcpu;
9593ce97513SArnaldo Carvalho de Melo 	__u32 sint;
9603ce97513SArnaldo Carvalho de Melo };
9613ce97513SArnaldo Carvalho de Melo 
962fa681181SPaolo Bonzini struct kvm_irq_routing_xen_evtchn {
963fa681181SPaolo Bonzini 	__u32 port;
964fa681181SPaolo Bonzini 	__u32 vcpu;
965fa681181SPaolo Bonzini 	__u32 priority;
966fa681181SPaolo Bonzini };
967fa681181SPaolo Bonzini 
968fa681181SPaolo Bonzini #define KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL ((__u32)(-1))
969fa681181SPaolo Bonzini 
9703ce97513SArnaldo Carvalho de Melo /* gsi routing entry types */
9713ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_ROUTING_IRQCHIP 1
9723ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_ROUTING_MSI 2
9733ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_ROUTING_S390_ADAPTER 3
9743ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_ROUTING_HV_SINT 4
975fa681181SPaolo Bonzini #define KVM_IRQ_ROUTING_XEN_EVTCHN 5
9763ce97513SArnaldo Carvalho de Melo 
9773ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing_entry {
9783ce97513SArnaldo Carvalho de Melo 	__u32 gsi;
9793ce97513SArnaldo Carvalho de Melo 	__u32 type;
9803ce97513SArnaldo Carvalho de Melo 	__u32 flags;
9813ce97513SArnaldo Carvalho de Melo 	__u32 pad;
9823ce97513SArnaldo Carvalho de Melo 	union {
9833ce97513SArnaldo Carvalho de Melo 		struct kvm_irq_routing_irqchip irqchip;
9843ce97513SArnaldo Carvalho de Melo 		struct kvm_irq_routing_msi msi;
9853ce97513SArnaldo Carvalho de Melo 		struct kvm_irq_routing_s390_adapter adapter;
9863ce97513SArnaldo Carvalho de Melo 		struct kvm_irq_routing_hv_sint hv_sint;
987fa681181SPaolo Bonzini 		struct kvm_irq_routing_xen_evtchn xen_evtchn;
9883ce97513SArnaldo Carvalho de Melo 		__u32 pad[8];
9893ce97513SArnaldo Carvalho de Melo 	} u;
9903ce97513SArnaldo Carvalho de Melo };
9913ce97513SArnaldo Carvalho de Melo 
9923ce97513SArnaldo Carvalho de Melo struct kvm_irq_routing {
9933ce97513SArnaldo Carvalho de Melo 	__u32 nr;
9943ce97513SArnaldo Carvalho de Melo 	__u32 flags;
99594dfc73eSGustavo A. R. Silva 	struct kvm_irq_routing_entry entries[];
9963ce97513SArnaldo Carvalho de Melo };
9973ce97513SArnaldo Carvalho de Melo 
9983ce97513SArnaldo Carvalho de Melo #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
9993ce97513SArnaldo Carvalho de Melo /*
10003ce97513SArnaldo Carvalho de Melo  * Available with KVM_CAP_IRQFD_RESAMPLE
10013ce97513SArnaldo Carvalho de Melo  *
10023ce97513SArnaldo Carvalho de Melo  * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
10033ce97513SArnaldo Carvalho de Melo  * the irqfd to operate in resampling mode for level triggered interrupt
10043ecad8c2SMauro Carvalho Chehab  * emulation.  See Documentation/virt/kvm/api.rst.
10053ce97513SArnaldo Carvalho de Melo  */
10063ce97513SArnaldo Carvalho de Melo #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
10073ce97513SArnaldo Carvalho de Melo 
10083ce97513SArnaldo Carvalho de Melo struct kvm_irqfd {
10093ce97513SArnaldo Carvalho de Melo 	__u32 fd;
10103ce97513SArnaldo Carvalho de Melo 	__u32 gsi;
10113ce97513SArnaldo Carvalho de Melo 	__u32 flags;
10123ce97513SArnaldo Carvalho de Melo 	__u32 resamplefd;
10133ce97513SArnaldo Carvalho de Melo 	__u8  pad[16];
10143ce97513SArnaldo Carvalho de Melo };
10153ce97513SArnaldo Carvalho de Melo 
10163ce97513SArnaldo Carvalho de Melo /* For KVM_CAP_ADJUST_CLOCK */
10173ce97513SArnaldo Carvalho de Melo 
10183ce97513SArnaldo Carvalho de Melo /* Do not use 1, KVM_CHECK_EXTENSION returned it before we had flags.  */
10193ce97513SArnaldo Carvalho de Melo #define KVM_CLOCK_TSC_STABLE		2
1020346e9199SArnaldo Carvalho de Melo #define KVM_CLOCK_REALTIME		(1 << 2)
1021346e9199SArnaldo Carvalho de Melo #define KVM_CLOCK_HOST_TSC		(1 << 3)
10223ce97513SArnaldo Carvalho de Melo 
10233ce97513SArnaldo Carvalho de Melo struct kvm_clock_data {
10243ce97513SArnaldo Carvalho de Melo 	__u64 clock;
10253ce97513SArnaldo Carvalho de Melo 	__u32 flags;
1026346e9199SArnaldo Carvalho de Melo 	__u32 pad0;
1027346e9199SArnaldo Carvalho de Melo 	__u64 realtime;
1028346e9199SArnaldo Carvalho de Melo 	__u64 host_tsc;
1029346e9199SArnaldo Carvalho de Melo 	__u32 pad[4];
10303ce97513SArnaldo Carvalho de Melo };
10313ce97513SArnaldo Carvalho de Melo 
10323ce97513SArnaldo Carvalho de Melo /* For KVM_CAP_SW_TLB */
10333ce97513SArnaldo Carvalho de Melo 
10343ce97513SArnaldo Carvalho de Melo #define KVM_MMU_FSL_BOOKE_NOHV		0
10353ce97513SArnaldo Carvalho de Melo #define KVM_MMU_FSL_BOOKE_HV		1
10363ce97513SArnaldo Carvalho de Melo 
10373ce97513SArnaldo Carvalho de Melo struct kvm_config_tlb {
10383ce97513SArnaldo Carvalho de Melo 	__u64 params;
10393ce97513SArnaldo Carvalho de Melo 	__u64 array;
10403ce97513SArnaldo Carvalho de Melo 	__u32 mmu_type;
10413ce97513SArnaldo Carvalho de Melo 	__u32 array_len;
10423ce97513SArnaldo Carvalho de Melo };
10433ce97513SArnaldo Carvalho de Melo 
10443ce97513SArnaldo Carvalho de Melo struct kvm_dirty_tlb {
10453ce97513SArnaldo Carvalho de Melo 	__u64 bitmap;
10463ce97513SArnaldo Carvalho de Melo 	__u32 num_dirty;
10473ce97513SArnaldo Carvalho de Melo };
10483ce97513SArnaldo Carvalho de Melo 
10493ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_ONE_REG */
10503ce97513SArnaldo Carvalho de Melo 
10513ce97513SArnaldo Carvalho de Melo #define KVM_REG_ARCH_MASK	0xff00000000000000ULL
10523ce97513SArnaldo Carvalho de Melo #define KVM_REG_GENERIC		0x0000000000000000ULL
10533ce97513SArnaldo Carvalho de Melo 
10543ce97513SArnaldo Carvalho de Melo /*
10553ce97513SArnaldo Carvalho de Melo  * Architecture specific registers are to be defined in arch headers and
10563ce97513SArnaldo Carvalho de Melo  * ORed with the arch identifier.
10573ce97513SArnaldo Carvalho de Melo  */
10583ce97513SArnaldo Carvalho de Melo #define KVM_REG_PPC		0x1000000000000000ULL
10593ce97513SArnaldo Carvalho de Melo #define KVM_REG_X86		0x2000000000000000ULL
10603ce97513SArnaldo Carvalho de Melo #define KVM_REG_IA64		0x3000000000000000ULL
10613ce97513SArnaldo Carvalho de Melo #define KVM_REG_ARM		0x4000000000000000ULL
10623ce97513SArnaldo Carvalho de Melo #define KVM_REG_S390		0x5000000000000000ULL
10633ce97513SArnaldo Carvalho de Melo #define KVM_REG_ARM64		0x6000000000000000ULL
10643ce97513SArnaldo Carvalho de Melo #define KVM_REG_MIPS		0x7000000000000000ULL
10658daf1fb7SArnaldo Carvalho de Melo #define KVM_REG_RISCV		0x8000000000000000ULL
10665a9f95b6SNamhyung Kim #define KVM_REG_LOONGARCH	0x9000000000000000ULL
10673ce97513SArnaldo Carvalho de Melo 
10683ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_SHIFT	52
10693ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_MASK	0x00f0000000000000ULL
1070*ddc59297SNamhyung Kim 
1071*ddc59297SNamhyung Kim #define KVM_REG_SIZE(id)		\
1072*ddc59297SNamhyung Kim 	(1U << (((id) & KVM_REG_SIZE_MASK) >> KVM_REG_SIZE_SHIFT))
1073*ddc59297SNamhyung Kim 
10743ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U8		0x0000000000000000ULL
10753ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U16	0x0010000000000000ULL
10763ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U32	0x0020000000000000ULL
10773ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U64	0x0030000000000000ULL
10783ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U128	0x0040000000000000ULL
10793ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U256	0x0050000000000000ULL
10803ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U512	0x0060000000000000ULL
10813ce97513SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U1024	0x0070000000000000ULL
1082a7350998SArnaldo Carvalho de Melo #define KVM_REG_SIZE_U2048	0x0080000000000000ULL
10833ce97513SArnaldo Carvalho de Melo 
10843ce97513SArnaldo Carvalho de Melo struct kvm_reg_list {
10853ce97513SArnaldo Carvalho de Melo 	__u64 n; /* number of regs */
108694dfc73eSGustavo A. R. Silva 	__u64 reg[];
10873ce97513SArnaldo Carvalho de Melo };
10883ce97513SArnaldo Carvalho de Melo 
10893ce97513SArnaldo Carvalho de Melo struct kvm_one_reg {
10903ce97513SArnaldo Carvalho de Melo 	__u64 id;
10913ce97513SArnaldo Carvalho de Melo 	__u64 addr;
10923ce97513SArnaldo Carvalho de Melo };
10933ce97513SArnaldo Carvalho de Melo 
10943ce97513SArnaldo Carvalho de Melo #define KVM_MSI_VALID_DEVID	(1U << 0)
10953ce97513SArnaldo Carvalho de Melo struct kvm_msi {
10963ce97513SArnaldo Carvalho de Melo 	__u32 address_lo;
10973ce97513SArnaldo Carvalho de Melo 	__u32 address_hi;
10983ce97513SArnaldo Carvalho de Melo 	__u32 data;
10993ce97513SArnaldo Carvalho de Melo 	__u32 flags;
11003ce97513SArnaldo Carvalho de Melo 	__u32 devid;
11013ce97513SArnaldo Carvalho de Melo 	__u8  pad[12];
11023ce97513SArnaldo Carvalho de Melo };
11033ce97513SArnaldo Carvalho de Melo 
11043ce97513SArnaldo Carvalho de Melo struct kvm_arm_device_addr {
11053ce97513SArnaldo Carvalho de Melo 	__u64 id;
11063ce97513SArnaldo Carvalho de Melo 	__u64 addr;
11073ce97513SArnaldo Carvalho de Melo };
11083ce97513SArnaldo Carvalho de Melo 
11093ce97513SArnaldo Carvalho de Melo /*
11103ce97513SArnaldo Carvalho de Melo  * Device control API, available with KVM_CAP_DEVICE_CTRL
11113ce97513SArnaldo Carvalho de Melo  */
11123ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_DEVICE_TEST		1
11133ce97513SArnaldo Carvalho de Melo 
11143ce97513SArnaldo Carvalho de Melo struct kvm_create_device {
11153ce97513SArnaldo Carvalho de Melo 	__u32	type;	/* in: KVM_DEV_TYPE_xxx */
11163ce97513SArnaldo Carvalho de Melo 	__u32	fd;	/* out: device handle */
11173ce97513SArnaldo Carvalho de Melo 	__u32	flags;	/* in: KVM_CREATE_DEVICE_xxx */
11183ce97513SArnaldo Carvalho de Melo };
11193ce97513SArnaldo Carvalho de Melo 
11203ce97513SArnaldo Carvalho de Melo struct kvm_device_attr {
11213ce97513SArnaldo Carvalho de Melo 	__u32	flags;		/* no flags currently defined */
11223ce97513SArnaldo Carvalho de Melo 	__u32	group;		/* device-defined */
11233ce97513SArnaldo Carvalho de Melo 	__u64	attr;		/* group-defined */
11243ce97513SArnaldo Carvalho de Melo 	__u64	addr;		/* userspace address of attr data */
11253ce97513SArnaldo Carvalho de Melo };
11263ce97513SArnaldo Carvalho de Melo 
11275a9f95b6SNamhyung Kim #define  KVM_DEV_VFIO_FILE			1
11285a9f95b6SNamhyung Kim 
11295a9f95b6SNamhyung Kim #define   KVM_DEV_VFIO_FILE_ADD			1
11305a9f95b6SNamhyung Kim #define   KVM_DEV_VFIO_FILE_DEL			2
11315a9f95b6SNamhyung Kim 
11325a9f95b6SNamhyung Kim /* KVM_DEV_VFIO_GROUP aliases are for compile time uapi compatibility */
11335a9f95b6SNamhyung Kim #define  KVM_DEV_VFIO_GROUP	KVM_DEV_VFIO_FILE
11345a9f95b6SNamhyung Kim 
11355a9f95b6SNamhyung Kim #define   KVM_DEV_VFIO_GROUP_ADD	KVM_DEV_VFIO_FILE_ADD
11365a9f95b6SNamhyung Kim #define   KVM_DEV_VFIO_GROUP_DEL	KVM_DEV_VFIO_FILE_DEL
11373ce97513SArnaldo Carvalho de Melo #define   KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE		3
11383ce97513SArnaldo Carvalho de Melo 
11393ce97513SArnaldo Carvalho de Melo enum kvm_device_type {
11403ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_FSL_MPIC_20	= 1,
11413ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_FSL_MPIC_20	KVM_DEV_TYPE_FSL_MPIC_20
11423ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_FSL_MPIC_42,
11433ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_FSL_MPIC_42	KVM_DEV_TYPE_FSL_MPIC_42
11443ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_XICS,
11453ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_XICS		KVM_DEV_TYPE_XICS
11463ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_VFIO,
11473ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_VFIO		KVM_DEV_TYPE_VFIO
11483ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_ARM_VGIC_V2,
11493ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_ARM_VGIC_V2	KVM_DEV_TYPE_ARM_VGIC_V2
11503ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_FLIC,
11513ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_FLIC		KVM_DEV_TYPE_FLIC
11523ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_ARM_VGIC_V3,
11533ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_ARM_VGIC_V3	KVM_DEV_TYPE_ARM_VGIC_V3
11543ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_ARM_VGIC_ITS,
11553ce97513SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_ARM_VGIC_ITS	KVM_DEV_TYPE_ARM_VGIC_ITS
1156a7350998SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_XIVE,
1157a7350998SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_XIVE		KVM_DEV_TYPE_XIVE
11581fc3d0eeSArnaldo Carvalho de Melo 	KVM_DEV_TYPE_ARM_PV_TIME,
11591fc3d0eeSArnaldo Carvalho de Melo #define KVM_DEV_TYPE_ARM_PV_TIME	KVM_DEV_TYPE_ARM_PV_TIME
1160225bbf44SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_RISCV_AIA,
1161225bbf44SArnaldo Carvalho de Melo #define KVM_DEV_TYPE_RISCV_AIA		KVM_DEV_TYPE_RISCV_AIA
1162e2064b7cSNamhyung Kim 	KVM_DEV_TYPE_LOONGARCH_IPI,
1163e2064b7cSNamhyung Kim #define KVM_DEV_TYPE_LOONGARCH_IPI	KVM_DEV_TYPE_LOONGARCH_IPI
1164e2064b7cSNamhyung Kim 	KVM_DEV_TYPE_LOONGARCH_EIOINTC,
1165e2064b7cSNamhyung Kim #define KVM_DEV_TYPE_LOONGARCH_EIOINTC	KVM_DEV_TYPE_LOONGARCH_EIOINTC
1166e2064b7cSNamhyung Kim 	KVM_DEV_TYPE_LOONGARCH_PCHPIC,
1167e2064b7cSNamhyung Kim #define KVM_DEV_TYPE_LOONGARCH_PCHPIC	KVM_DEV_TYPE_LOONGARCH_PCHPIC
1168e2064b7cSNamhyung Kim 
11693ce97513SArnaldo Carvalho de Melo 	KVM_DEV_TYPE_MAX,
1170e2064b7cSNamhyung Kim 
11713ce97513SArnaldo Carvalho de Melo };
11723ce97513SArnaldo Carvalho de Melo 
11733ce97513SArnaldo Carvalho de Melo struct kvm_vfio_spapr_tce {
11743ce97513SArnaldo Carvalho de Melo 	__s32	groupfd;
11753ce97513SArnaldo Carvalho de Melo 	__s32	tablefd;
11763ce97513SArnaldo Carvalho de Melo };
11773ce97513SArnaldo Carvalho de Melo 
11783ce97513SArnaldo Carvalho de Melo /*
11793ce97513SArnaldo Carvalho de Melo  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
11803ce97513SArnaldo Carvalho de Melo  * a vcpu fd.
11813ce97513SArnaldo Carvalho de Melo  */
11823ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
11833ce97513SArnaldo Carvalho de Melo #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
11843ce97513SArnaldo Carvalho de Melo #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
1185c5edd753SThomas Huth #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)  /* deprecated */
11863ce97513SArnaldo Carvalho de Melo #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
11873ce97513SArnaldo Carvalho de Melo 					struct kvm_userspace_memory_region)
11883ce97513SArnaldo Carvalho de Melo #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
11893ce97513SArnaldo Carvalho de Melo #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
1190e30dca91SArnaldo Carvalho de Melo #define KVM_SET_USER_MEMORY_REGION2 _IOW(KVMIO, 0x49, \
1191e30dca91SArnaldo Carvalho de Melo 					 struct kvm_userspace_memory_region2)
11923ce97513SArnaldo Carvalho de Melo 
11933ce97513SArnaldo Carvalho de Melo /* enable ucontrol for s390 */
11943ce97513SArnaldo Carvalho de Melo #define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
11953ce97513SArnaldo Carvalho de Melo #define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
11963ce97513SArnaldo Carvalho de Melo #define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long)
11973ce97513SArnaldo Carvalho de Melo 
11983ce97513SArnaldo Carvalho de Melo /* Device model IOC */
11993ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
12003ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
12013ce97513SArnaldo Carvalho de Melo #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
12023ce97513SArnaldo Carvalho de Melo #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
12033ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
12043ce97513SArnaldo Carvalho de Melo #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
12053ce97513SArnaldo Carvalho de Melo #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
12063ce97513SArnaldo Carvalho de Melo #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
12073ce97513SArnaldo Carvalho de Melo #define KVM_REGISTER_COALESCED_MMIO \
12083ce97513SArnaldo Carvalho de Melo 			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
12093ce97513SArnaldo Carvalho de Melo #define KVM_UNREGISTER_COALESCED_MMIO \
12103ce97513SArnaldo Carvalho de Melo 			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
12113ce97513SArnaldo Carvalho de Melo #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
12123ce97513SArnaldo Carvalho de Melo #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
12133ce97513SArnaldo Carvalho de Melo #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
12143ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config)
12153ce97513SArnaldo Carvalho de Melo #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
12163ce97513SArnaldo Carvalho de Melo #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
12173ce97513SArnaldo Carvalho de Melo #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
12183ce97513SArnaldo Carvalho de Melo #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
12193ce97513SArnaldo Carvalho de Melo #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
12203ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PIT_STATE2 */
12213ce97513SArnaldo Carvalho de Melo #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
12223ce97513SArnaldo Carvalho de Melo #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
12233ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_GET_PVINFO */
12243ce97513SArnaldo Carvalho de Melo #define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
12257fe718fbSArnaldo Carvalho de Melo /* Available with KVM_CAP_TSC_CONTROL for a vCPU, or with
12267fe718fbSArnaldo Carvalho de Melo *  KVM_CAP_VM_TSC_CONTROL to set defaults for a VM */
12273ce97513SArnaldo Carvalho de Melo #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
12283ce97513SArnaldo Carvalho de Melo #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
12293ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_SIGNAL_MSI */
12303ce97513SArnaldo Carvalho de Melo #define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
12313ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_GET_SMMU_INFO */
12323ce97513SArnaldo Carvalho de Melo #define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
12333ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_ALLOC_HTAB */
12343ce97513SArnaldo Carvalho de Melo #define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32)
12353ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
12363ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_SPAPR_TCE_64	  _IOW(KVMIO,  0xa8, \
12373ce97513SArnaldo Carvalho de Melo 				       struct kvm_create_spapr_tce_64)
12383ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_RMA */
12393ce97513SArnaldo Carvalho de Melo #define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
12403ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_HTAB_FD */
12413ce97513SArnaldo Carvalho de Melo #define KVM_PPC_GET_HTAB_FD	  _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
12423ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
12433ce97513SArnaldo Carvalho de Melo #define KVM_ARM_SET_DEVICE_ADDR	  _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
12443ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_RTAS */
12453ce97513SArnaldo Carvalho de Melo #define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
12463ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_SPAPR_RESIZE_HPT */
12473ce97513SArnaldo Carvalho de Melo #define KVM_PPC_RESIZE_HPT_PREPARE _IOR(KVMIO, 0xad, struct kvm_ppc_resize_hpt)
12483ce97513SArnaldo Carvalho de Melo #define KVM_PPC_RESIZE_HPT_COMMIT  _IOR(KVMIO, 0xae, struct kvm_ppc_resize_hpt)
12499ff0e37cSIsaku Yamahata /* Available with KVM_CAP_PPC_MMU_RADIX or KVM_CAP_PPC_MMU_HASH_V3 */
12503ce97513SArnaldo Carvalho de Melo #define KVM_PPC_CONFIGURE_V3_MMU  _IOW(KVMIO,  0xaf, struct kvm_ppc_mmuv3_cfg)
12519ff0e37cSIsaku Yamahata /* Available with KVM_CAP_PPC_MMU_RADIX */
12523ce97513SArnaldo Carvalho de Melo #define KVM_PPC_GET_RMMU_INFO	  _IOW(KVMIO,  0xb0, struct kvm_ppc_rmmu_info)
12531b8f5160SArnaldo Carvalho de Melo /* Available with KVM_CAP_PPC_GET_CPU_CHAR */
12541b8f5160SArnaldo Carvalho de Melo #define KVM_PPC_GET_CPU_CHAR	  _IOR(KVMIO,  0xb1, struct kvm_ppc_cpu_char)
1255e0d99c4dSArnaldo Carvalho de Melo /* Available with KVM_CAP_PMU_EVENT_FILTER */
1256e0d99c4dSArnaldo Carvalho de Melo #define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
1257b4442688SArnaldo Carvalho de Melo #define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
1258e48f62aeSArnaldo Carvalho de Melo #define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
1259705049caSYanteng Si /* Available with KVM_CAP_COUNTER_OFFSET */
1260705049caSYanteng Si #define KVM_ARM_SET_COUNTER_OFFSET _IOW(KVMIO,  0xb5, struct kvm_arm_counter_offset)
12615a9f95b6SNamhyung Kim #define KVM_ARM_GET_REG_WRITABLE_MASKS _IOR(KVMIO,  0xb6, struct reg_mask_range)
12623ce97513SArnaldo Carvalho de Melo 
12633ce97513SArnaldo Carvalho de Melo /* ioctl for vm fd */
12643ce97513SArnaldo Carvalho de Melo #define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
12653ce97513SArnaldo Carvalho de Melo 
12663ce97513SArnaldo Carvalho de Melo /* ioctls for fds returned by KVM_CREATE_DEVICE */
12673ce97513SArnaldo Carvalho de Melo #define KVM_SET_DEVICE_ATTR	  _IOW(KVMIO,  0xe1, struct kvm_device_attr)
12683ce97513SArnaldo Carvalho de Melo #define KVM_GET_DEVICE_ATTR	  _IOW(KVMIO,  0xe2, struct kvm_device_attr)
12693ce97513SArnaldo Carvalho de Melo #define KVM_HAS_DEVICE_ATTR	  _IOW(KVMIO,  0xe3, struct kvm_device_attr)
12703ce97513SArnaldo Carvalho de Melo 
12713ce97513SArnaldo Carvalho de Melo /*
12723ce97513SArnaldo Carvalho de Melo  * ioctls for vcpu fds
12733ce97513SArnaldo Carvalho de Melo  */
12743ce97513SArnaldo Carvalho de Melo #define KVM_RUN                   _IO(KVMIO,   0x80)
12753ce97513SArnaldo Carvalho de Melo #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
12763ce97513SArnaldo Carvalho de Melo #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
12773ce97513SArnaldo Carvalho de Melo #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
12783ce97513SArnaldo Carvalho de Melo #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
12793ce97513SArnaldo Carvalho de Melo #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
12803ce97513SArnaldo Carvalho de Melo #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
12813ce97513SArnaldo Carvalho de Melo #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
12823ce97513SArnaldo Carvalho de Melo #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
12833ce97513SArnaldo Carvalho de Melo #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
12843ce97513SArnaldo Carvalho de Melo #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
12853ce97513SArnaldo Carvalho de Melo #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
12863ce97513SArnaldo Carvalho de Melo #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
12873ce97513SArnaldo Carvalho de Melo #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
12883ce97513SArnaldo Carvalho de Melo #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
12893ce97513SArnaldo Carvalho de Melo #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
12903ce97513SArnaldo Carvalho de Melo #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
12913ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_VAPIC */
12923ce97513SArnaldo Carvalho de Melo #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
12933ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_VAPIC */
12943ce97513SArnaldo Carvalho de Melo #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
12953ce97513SArnaldo Carvalho de Melo /* valid for virtual machine (for floating interrupt)_and_ vcpu */
12963ce97513SArnaldo Carvalho de Melo #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
12973ce97513SArnaldo Carvalho de Melo /* store status for s390 */
12983ce97513SArnaldo Carvalho de Melo #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
12993ce97513SArnaldo Carvalho de Melo #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
13003ce97513SArnaldo Carvalho de Melo #define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long)
13013ce97513SArnaldo Carvalho de Melo /* initial ipl psw for s390 */
13023ce97513SArnaldo Carvalho de Melo #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
13033ce97513SArnaldo Carvalho de Melo /* initial reset for s390 */
13043ce97513SArnaldo Carvalho de Melo #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
13053ce97513SArnaldo Carvalho de Melo #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
13063ce97513SArnaldo Carvalho de Melo #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
13073ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_USER_NMI */
13083ce97513SArnaldo Carvalho de Melo #define KVM_NMI                   _IO(KVMIO,   0x9a)
13093ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_SET_GUEST_DEBUG */
13103ce97513SArnaldo Carvalho de Melo #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
13113ce97513SArnaldo Carvalho de Melo /* MCE for x86 */
13123ce97513SArnaldo Carvalho de Melo #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
13133ce97513SArnaldo Carvalho de Melo #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
13143ce97513SArnaldo Carvalho de Melo #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
13153ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_VCPU_EVENTS */
13163ce97513SArnaldo Carvalho de Melo #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
13173ce97513SArnaldo Carvalho de Melo #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
13183ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_DEBUGREGS */
13193ce97513SArnaldo Carvalho de Melo #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
13203ce97513SArnaldo Carvalho de Melo #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
13213ce97513SArnaldo Carvalho de Melo /*
1322225bbf44SArnaldo Carvalho de Melo  * vcpu version available with KVM_CAP_ENABLE_CAP
13233ce97513SArnaldo Carvalho de Melo  * vm version available with KVM_CAP_ENABLE_CAP_VM
13243ce97513SArnaldo Carvalho de Melo  */
13253ce97513SArnaldo Carvalho de Melo #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
13263ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_XSAVE */
13273ce97513SArnaldo Carvalho de Melo #define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave)
13283ce97513SArnaldo Carvalho de Melo #define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave)
13293ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_XCRS */
13303ce97513SArnaldo Carvalho de Melo #define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs)
13313ce97513SArnaldo Carvalho de Melo #define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs)
13323ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_SW_TLB */
13333ce97513SArnaldo Carvalho de Melo #define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
13343ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_ONE_REG */
13353ce97513SArnaldo Carvalho de Melo #define KVM_GET_ONE_REG		  _IOW(KVMIO,  0xab, struct kvm_one_reg)
13363ce97513SArnaldo Carvalho de Melo #define KVM_SET_ONE_REG		  _IOW(KVMIO,  0xac, struct kvm_one_reg)
13373ce97513SArnaldo Carvalho de Melo /* VM is being stopped by host */
13383ce97513SArnaldo Carvalho de Melo #define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)
13393ce97513SArnaldo Carvalho de Melo #define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
13403ce97513SArnaldo Carvalho de Melo #define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
13413ce97513SArnaldo Carvalho de Melo #define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
13423ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_MEM_OP */
13433ce97513SArnaldo Carvalho de Melo #define KVM_S390_MEM_OP		  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
13443ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_SKEYS */
13453ce97513SArnaldo Carvalho de Melo #define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
13463ce97513SArnaldo Carvalho de Melo #define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
13473ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_INJECT_IRQ */
13483ce97513SArnaldo Carvalho de Melo #define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
13493ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_IRQ_STATE */
13503ce97513SArnaldo Carvalho de Melo #define KVM_S390_SET_IRQ_STATE	  _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
13513ce97513SArnaldo Carvalho de Melo #define KVM_S390_GET_IRQ_STATE	  _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
13523ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_X86_SMM */
13533ce97513SArnaldo Carvalho de Melo #define KVM_SMI                   _IO(KVMIO,   0xb7)
13543ce97513SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_CMMA_MIGRATION */
13553ce97513SArnaldo Carvalho de Melo #define KVM_S390_GET_CMMA_BITS      _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log)
13563ce97513SArnaldo Carvalho de Melo #define KVM_S390_SET_CMMA_BITS      _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log)
1357f091f1d6SIngo Molnar /* Memory Encryption Commands */
1358f091f1d6SIngo Molnar #define KVM_MEMORY_ENCRYPT_OP      _IOWR(KVMIO, 0xba, unsigned long)
1359f091f1d6SIngo Molnar 
1360f091f1d6SIngo Molnar struct kvm_enc_region {
1361f091f1d6SIngo Molnar 	__u64 addr;
1362f091f1d6SIngo Molnar 	__u64 size;
1363f091f1d6SIngo Molnar };
1364f091f1d6SIngo Molnar 
1365f091f1d6SIngo Molnar #define KVM_MEMORY_ENCRYPT_REG_REGION    _IOR(KVMIO, 0xbb, struct kvm_enc_region)
1366f091f1d6SIngo Molnar #define KVM_MEMORY_ENCRYPT_UNREG_REGION  _IOR(KVMIO, 0xbc, struct kvm_enc_region)
1367f091f1d6SIngo Molnar 
1368e2f73a18SIngo Molnar /* Available with KVM_CAP_HYPERV_EVENTFD */
1369e2f73a18SIngo Molnar #define KVM_HYPERV_EVENTFD        _IOW(KVMIO,  0xbd, struct kvm_hyperv_eventfd)
1370e2f73a18SIngo Molnar 
13710210c156SArnaldo Carvalho de Melo /* Available with KVM_CAP_NESTED_STATE */
13720210c156SArnaldo Carvalho de Melo #define KVM_GET_NESTED_STATE         _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
13730210c156SArnaldo Carvalho de Melo #define KVM_SET_NESTED_STATE         _IOW(KVMIO,  0xbf, struct kvm_nested_state)
1374e2f73a18SIngo Molnar 
1375a7350998SArnaldo Carvalho de Melo /* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT_2 */
1376558517c5SArnaldo Carvalho de Melo #define KVM_CLEAR_DIRTY_LOG          _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log)
1377558517c5SArnaldo Carvalho de Melo 
1378288807fcSArnaldo Carvalho de Melo /* Available with KVM_CAP_HYPERV_CPUID (vcpu) / KVM_CAP_SYS_HYPERV_CPUID (system) */
1379558517c5SArnaldo Carvalho de Melo #define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2)
1380558517c5SArnaldo Carvalho de Melo 
1381a7350998SArnaldo Carvalho de Melo /* Available with KVM_CAP_ARM_SVE */
1382a7350998SArnaldo Carvalho de Melo #define KVM_ARM_VCPU_FINALIZE	  _IOW(KVMIO,  0xc2, int)
1383a7350998SArnaldo Carvalho de Melo 
13842a8d017dSArnaldo Carvalho de Melo /* Available with  KVM_CAP_S390_VCPU_RESETS */
13852a8d017dSArnaldo Carvalho de Melo #define KVM_S390_NORMAL_RESET	_IO(KVMIO,   0xc3)
13862a8d017dSArnaldo Carvalho de Melo #define KVM_S390_CLEAR_RESET	_IO(KVMIO,   0xc4)
13872a8d017dSArnaldo Carvalho de Melo 
1388b8fc2280SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_PROTECTED */
1389b8fc2280SArnaldo Carvalho de Melo #define KVM_S390_PV_COMMAND		_IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)
1390b8fc2280SArnaldo Carvalho de Melo 
1391aa04899aSArnaldo Carvalho de Melo /* Available with KVM_CAP_X86_MSR_FILTER */
1392aa04899aSArnaldo Carvalho de Melo #define KVM_X86_SET_MSR_FILTER	_IOW(KVMIO,  0xc6, struct kvm_msr_filter)
1393aa04899aSArnaldo Carvalho de Melo 
1394288807fcSArnaldo Carvalho de Melo /* Available with KVM_CAP_DIRTY_LOG_RING */
1395288807fcSArnaldo Carvalho de Melo #define KVM_RESET_DIRTY_RINGS		_IO(KVMIO, 0xc7)
1396288807fcSArnaldo Carvalho de Melo 
139721b7e35bSArnaldo Carvalho de Melo /* Per-VM Xen attributes */
139821b7e35bSArnaldo Carvalho de Melo #define KVM_XEN_HVM_GET_ATTR	_IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr)
139921b7e35bSArnaldo Carvalho de Melo #define KVM_XEN_HVM_SET_ATTR	_IOW(KVMIO,  0xc9, struct kvm_xen_hvm_attr)
140021b7e35bSArnaldo Carvalho de Melo 
140121b7e35bSArnaldo Carvalho de Melo /* Per-vCPU Xen attributes */
140221b7e35bSArnaldo Carvalho de Melo #define KVM_XEN_VCPU_GET_ATTR	_IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr)
140321b7e35bSArnaldo Carvalho de Melo #define KVM_XEN_VCPU_SET_ATTR	_IOW(KVMIO,  0xcb, struct kvm_xen_vcpu_attr)
140421b7e35bSArnaldo Carvalho de Melo 
14057fe718fbSArnaldo Carvalho de Melo /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
14067fe718fbSArnaldo Carvalho de Melo #define KVM_XEN_HVM_EVTCHN_SEND	_IOW(KVMIO,  0xd0, struct kvm_irq_routing_xen_evtchn)
14077fe718fbSArnaldo Carvalho de Melo 
1408e48f62aeSArnaldo Carvalho de Melo #define KVM_GET_SREGS2             _IOR(KVMIO,  0xcc, struct kvm_sregs2)
1409e48f62aeSArnaldo Carvalho de Melo #define KVM_SET_SREGS2             _IOW(KVMIO,  0xcd, struct kvm_sregs2)
1410e48f62aeSArnaldo Carvalho de Melo 
1411b8fc2280SArnaldo Carvalho de Melo #define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE    (1 << 0)
1412b8fc2280SArnaldo Carvalho de Melo #define KVM_DIRTY_LOG_INITIALLY_SET            (1 << 1)
1413b8fc2280SArnaldo Carvalho de Melo 
1414288807fcSArnaldo Carvalho de Melo /*
1415288807fcSArnaldo Carvalho de Melo  * Arch needs to define the macro after implementing the dirty ring
1416288807fcSArnaldo Carvalho de Melo  * feature.  KVM_DIRTY_LOG_PAGE_OFFSET should be defined as the
1417288807fcSArnaldo Carvalho de Melo  * starting page offset of the dirty ring structures.
1418288807fcSArnaldo Carvalho de Melo  */
1419288807fcSArnaldo Carvalho de Melo #ifndef KVM_DIRTY_LOG_PAGE_OFFSET
1420288807fcSArnaldo Carvalho de Melo #define KVM_DIRTY_LOG_PAGE_OFFSET 0
1421288807fcSArnaldo Carvalho de Melo #endif
1422288807fcSArnaldo Carvalho de Melo 
1423288807fcSArnaldo Carvalho de Melo /*
1424288807fcSArnaldo Carvalho de Melo  * KVM dirty GFN flags, defined as:
1425288807fcSArnaldo Carvalho de Melo  *
1426288807fcSArnaldo Carvalho de Melo  * |---------------+---------------+--------------|
1427288807fcSArnaldo Carvalho de Melo  * | bit 1 (reset) | bit 0 (dirty) | Status       |
1428288807fcSArnaldo Carvalho de Melo  * |---------------+---------------+--------------|
1429288807fcSArnaldo Carvalho de Melo  * |             0 |             0 | Invalid GFN  |
1430288807fcSArnaldo Carvalho de Melo  * |             0 |             1 | Dirty GFN    |
1431288807fcSArnaldo Carvalho de Melo  * |             1 |             X | GFN to reset |
1432288807fcSArnaldo Carvalho de Melo  * |---------------+---------------+--------------|
1433288807fcSArnaldo Carvalho de Melo  *
1434288807fcSArnaldo Carvalho de Melo  * Lifecycle of a dirty GFN goes like:
1435288807fcSArnaldo Carvalho de Melo  *
1436288807fcSArnaldo Carvalho de Melo  *      dirtied         harvested        reset
1437288807fcSArnaldo Carvalho de Melo  * 00 -----------> 01 -------------> 1X -------+
1438288807fcSArnaldo Carvalho de Melo  *  ^                                          |
1439288807fcSArnaldo Carvalho de Melo  *  |                                          |
1440288807fcSArnaldo Carvalho de Melo  *  +------------------------------------------+
1441288807fcSArnaldo Carvalho de Melo  *
1442288807fcSArnaldo Carvalho de Melo  * The userspace program is only responsible for the 01->1X state
1443288807fcSArnaldo Carvalho de Melo  * conversion after harvesting an entry.  Also, it must not skip any
1444288807fcSArnaldo Carvalho de Melo  * dirty bits, so that dirty bits are always harvested in sequence.
1445288807fcSArnaldo Carvalho de Melo  */
1446fb1070d1SJoe Richey #define KVM_DIRTY_GFN_F_DIRTY           _BITUL(0)
1447fb1070d1SJoe Richey #define KVM_DIRTY_GFN_F_RESET           _BITUL(1)
1448288807fcSArnaldo Carvalho de Melo #define KVM_DIRTY_GFN_F_MASK            0x3
1449288807fcSArnaldo Carvalho de Melo 
1450288807fcSArnaldo Carvalho de Melo /*
1451288807fcSArnaldo Carvalho de Melo  * KVM dirty rings should be mapped at KVM_DIRTY_LOG_PAGE_OFFSET of
1452288807fcSArnaldo Carvalho de Melo  * per-vcpu mmaped regions as an array of struct kvm_dirty_gfn.  The
1453288807fcSArnaldo Carvalho de Melo  * size of the gfn buffer is decided by the first argument when
1454288807fcSArnaldo Carvalho de Melo  * enabling KVM_CAP_DIRTY_LOG_RING.
1455288807fcSArnaldo Carvalho de Melo  */
1456288807fcSArnaldo Carvalho de Melo struct kvm_dirty_gfn {
1457288807fcSArnaldo Carvalho de Melo 	__u32 flags;
1458288807fcSArnaldo Carvalho de Melo 	__u32 slot;
1459288807fcSArnaldo Carvalho de Melo 	__u64 offset;
1460288807fcSArnaldo Carvalho de Melo };
1461288807fcSArnaldo Carvalho de Melo 
146221b7e35bSArnaldo Carvalho de Melo #define KVM_BUS_LOCK_DETECTION_OFF             (1 << 0)
146321b7e35bSArnaldo Carvalho de Melo #define KVM_BUS_LOCK_DETECTION_EXIT            (1 << 1)
146421b7e35bSArnaldo Carvalho de Melo 
1465ba7bb663SDavid Dunn #define KVM_PMU_CAP_DISABLE                    (1 << 0)
1466ba7bb663SDavid Dunn 
1467e48f62aeSArnaldo Carvalho de Melo /**
1468e48f62aeSArnaldo Carvalho de Melo  * struct kvm_stats_header - Header of per vm/vcpu binary statistics data.
1469e48f62aeSArnaldo Carvalho de Melo  * @flags: Some extra information for header, always 0 for now.
1470e48f62aeSArnaldo Carvalho de Melo  * @name_size: The size in bytes of the memory which contains statistics
1471e48f62aeSArnaldo Carvalho de Melo  *             name string including trailing '\0'. The memory is allocated
1472e48f62aeSArnaldo Carvalho de Melo  *             at the send of statistics descriptor.
1473e48f62aeSArnaldo Carvalho de Melo  * @num_desc: The number of statistics the vm or vcpu has.
1474e48f62aeSArnaldo Carvalho de Melo  * @id_offset: The offset of the vm/vcpu stats' id string in the file pointed
1475e48f62aeSArnaldo Carvalho de Melo  *             by vm/vcpu stats fd.
1476e48f62aeSArnaldo Carvalho de Melo  * @desc_offset: The offset of the vm/vcpu stats' descriptor block in the file
1477e48f62aeSArnaldo Carvalho de Melo  *               pointd by vm/vcpu stats fd.
1478e48f62aeSArnaldo Carvalho de Melo  * @data_offset: The offset of the vm/vcpu stats' data block in the file
1479e48f62aeSArnaldo Carvalho de Melo  *               pointed by vm/vcpu stats fd.
1480e48f62aeSArnaldo Carvalho de Melo  *
1481e48f62aeSArnaldo Carvalho de Melo  * This is the header userspace needs to read from stats fd before any other
1482e48f62aeSArnaldo Carvalho de Melo  * readings. It is used by userspace to discover all the information about the
1483e48f62aeSArnaldo Carvalho de Melo  * vm/vcpu's binary statistics.
1484e48f62aeSArnaldo Carvalho de Melo  * Userspace reads this header from the start of the vm/vcpu's stats fd.
1485e48f62aeSArnaldo Carvalho de Melo  */
1486e48f62aeSArnaldo Carvalho de Melo struct kvm_stats_header {
1487e48f62aeSArnaldo Carvalho de Melo 	__u32 flags;
1488e48f62aeSArnaldo Carvalho de Melo 	__u32 name_size;
1489e48f62aeSArnaldo Carvalho de Melo 	__u32 num_desc;
1490e48f62aeSArnaldo Carvalho de Melo 	__u32 id_offset;
1491e48f62aeSArnaldo Carvalho de Melo 	__u32 desc_offset;
1492e48f62aeSArnaldo Carvalho de Melo 	__u32 data_offset;
1493e48f62aeSArnaldo Carvalho de Melo };
1494e48f62aeSArnaldo Carvalho de Melo 
1495e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_TYPE_SHIFT		0
1496e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_TYPE_MASK		(0xF << KVM_STATS_TYPE_SHIFT)
1497e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
1498e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
1499e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
1500dfa00459SArnaldo Carvalho de Melo #define KVM_STATS_TYPE_LINEAR_HIST	(0x3 << KVM_STATS_TYPE_SHIFT)
1501dfa00459SArnaldo Carvalho de Melo #define KVM_STATS_TYPE_LOG_HIST		(0x4 << KVM_STATS_TYPE_SHIFT)
1502dfa00459SArnaldo Carvalho de Melo #define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_LOG_HIST
1503e48f62aeSArnaldo Carvalho de Melo 
1504e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_SHIFT		4
1505e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
1506e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_NONE		(0x0 << KVM_STATS_UNIT_SHIFT)
1507e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
1508e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
1509e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
1510dc951e22SPaolo Bonzini #define KVM_STATS_UNIT_BOOLEAN		(0x4 << KVM_STATS_UNIT_SHIFT)
1511dc951e22SPaolo Bonzini #define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_BOOLEAN
1512e48f62aeSArnaldo Carvalho de Melo 
1513e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_BASE_SHIFT		8
1514e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
1515e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
1516e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
1517e48f62aeSArnaldo Carvalho de Melo #define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2
1518e48f62aeSArnaldo Carvalho de Melo 
1519e48f62aeSArnaldo Carvalho de Melo /**
1520e48f62aeSArnaldo Carvalho de Melo  * struct kvm_stats_desc - Descriptor of a KVM statistics.
1521e48f62aeSArnaldo Carvalho de Melo  * @flags: Annotations of the stats, like type, unit, etc.
1522e48f62aeSArnaldo Carvalho de Melo  * @exponent: Used together with @flags to determine the unit.
1523e48f62aeSArnaldo Carvalho de Melo  * @size: The number of data items for this stats.
1524e48f62aeSArnaldo Carvalho de Melo  *        Every data item is of type __u64.
1525e48f62aeSArnaldo Carvalho de Melo  * @offset: The offset of the stats to the start of stat structure in
1526dfa00459SArnaldo Carvalho de Melo  *          structure kvm or kvm_vcpu.
1527dfa00459SArnaldo Carvalho de Melo  * @bucket_size: A parameter value used for histogram stats. It is only used
1528dfa00459SArnaldo Carvalho de Melo  *		for linear histogram stats, specifying the size of the bucket;
1529e48f62aeSArnaldo Carvalho de Melo  * @name: The name string for the stats. Its size is indicated by the
1530e48f62aeSArnaldo Carvalho de Melo  *        &kvm_stats_header->name_size.
1531e48f62aeSArnaldo Carvalho de Melo  */
1532e48f62aeSArnaldo Carvalho de Melo struct kvm_stats_desc {
1533e48f62aeSArnaldo Carvalho de Melo 	__u32 flags;
1534e48f62aeSArnaldo Carvalho de Melo 	__s16 exponent;
1535e48f62aeSArnaldo Carvalho de Melo 	__u16 size;
1536e48f62aeSArnaldo Carvalho de Melo 	__u32 offset;
1537dfa00459SArnaldo Carvalho de Melo 	__u32 bucket_size;
1538e48f62aeSArnaldo Carvalho de Melo 	char name[];
1539e48f62aeSArnaldo Carvalho de Melo };
1540e48f62aeSArnaldo Carvalho de Melo 
1541e48f62aeSArnaldo Carvalho de Melo #define KVM_GET_STATS_FD  _IO(KVMIO,  0xce)
1542e48f62aeSArnaldo Carvalho de Melo 
1543b7b9825fSArnaldo Carvalho de Melo /* Available with KVM_CAP_XSAVE2 */
1544b7b9825fSArnaldo Carvalho de Melo #define KVM_GET_XSAVE2		  _IOR(KVMIO,  0xcf, struct kvm_xsave)
1545b7b9825fSArnaldo Carvalho de Melo 
1546bf465ca8SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_PROTECTED_DUMP */
1547bf465ca8SArnaldo Carvalho de Melo #define KVM_S390_PV_CPU_COMMAND	_IOWR(KVMIO, 0xd0, struct kvm_pv_cmd)
1548bf465ca8SArnaldo Carvalho de Melo 
1549bf465ca8SArnaldo Carvalho de Melo /* Available with KVM_CAP_X86_NOTIFY_VMEXIT */
1550bf465ca8SArnaldo Carvalho de Melo #define KVM_X86_NOTIFY_VMEXIT_ENABLED		(1ULL << 0)
1551bf465ca8SArnaldo Carvalho de Melo #define KVM_X86_NOTIFY_VMEXIT_USER		(1ULL << 1)
1552bf465ca8SArnaldo Carvalho de Melo 
1553bf465ca8SArnaldo Carvalho de Melo /* Available with KVM_CAP_S390_ZPCI_OP */
1554bf465ca8SArnaldo Carvalho de Melo #define KVM_S390_ZPCI_OP         _IOW(KVMIO,  0xd1, struct kvm_s390_zpci_op)
1555bf465ca8SArnaldo Carvalho de Melo 
1556e30dca91SArnaldo Carvalho de Melo /* Available with KVM_CAP_MEMORY_ATTRIBUTES */
1557e30dca91SArnaldo Carvalho de Melo #define KVM_SET_MEMORY_ATTRIBUTES              _IOW(KVMIO,  0xd2, struct kvm_memory_attributes)
1558e30dca91SArnaldo Carvalho de Melo 
1559e30dca91SArnaldo Carvalho de Melo struct kvm_memory_attributes {
1560e30dca91SArnaldo Carvalho de Melo 	__u64 address;
1561e30dca91SArnaldo Carvalho de Melo 	__u64 size;
1562e30dca91SArnaldo Carvalho de Melo 	__u64 attributes;
1563e30dca91SArnaldo Carvalho de Melo 	__u64 flags;
1564e30dca91SArnaldo Carvalho de Melo };
1565e30dca91SArnaldo Carvalho de Melo 
1566e30dca91SArnaldo Carvalho de Melo #define KVM_MEMORY_ATTRIBUTE_PRIVATE           (1ULL << 3)
1567e30dca91SArnaldo Carvalho de Melo 
1568e30dca91SArnaldo Carvalho de Melo #define KVM_CREATE_GUEST_MEMFD	_IOWR(KVMIO,  0xd4, struct kvm_create_guest_memfd)
1569e30dca91SArnaldo Carvalho de Melo 
1570e30dca91SArnaldo Carvalho de Melo struct kvm_create_guest_memfd {
1571e30dca91SArnaldo Carvalho de Melo 	__u64 size;
1572e30dca91SArnaldo Carvalho de Melo 	__u64 flags;
1573e30dca91SArnaldo Carvalho de Melo 	__u64 reserved[6];
1574e30dca91SArnaldo Carvalho de Melo };
1575e30dca91SArnaldo Carvalho de Melo 
15769ff0e37cSIsaku Yamahata #define KVM_PRE_FAULT_MEMORY	_IOWR(KVMIO, 0xd5, struct kvm_pre_fault_memory)
15779ff0e37cSIsaku Yamahata 
15789ff0e37cSIsaku Yamahata struct kvm_pre_fault_memory {
15799ff0e37cSIsaku Yamahata 	__u64 gpa;
15809ff0e37cSIsaku Yamahata 	__u64 size;
15819ff0e37cSIsaku Yamahata 	__u64 flags;
15829ff0e37cSIsaku Yamahata 	__u64 padding[5];
15839ff0e37cSIsaku Yamahata };
15849ff0e37cSIsaku Yamahata 
15853ce97513SArnaldo Carvalho de Melo #endif /* __LINUX_KVM_H */
1586