xref: /kvmtool/include/linux/kvm.h (revision 304dcb6425666cf1a928ac26f7162fd8822dbb1e)
1*304dcb64SAndre Przywara #ifndef __LINUX_KVM_H
2*304dcb64SAndre Przywara #define __LINUX_KVM_H
3*304dcb64SAndre Przywara 
4*304dcb64SAndre Przywara /*
5*304dcb64SAndre Przywara  * Userspace interface for /dev/kvm - kernel based virtual machine
6*304dcb64SAndre Przywara  *
7*304dcb64SAndre Przywara  * Note: you must update KVM_API_VERSION if you change this interface.
8*304dcb64SAndre Przywara  */
9*304dcb64SAndre Przywara 
10*304dcb64SAndre Przywara #include <linux/types.h>
11*304dcb64SAndre Przywara #include <linux/compiler.h>
12*304dcb64SAndre Przywara #include <linux/ioctl.h>
13*304dcb64SAndre Przywara #include <asm/kvm.h>
14*304dcb64SAndre Przywara 
15*304dcb64SAndre Przywara #define KVM_API_VERSION 12
16*304dcb64SAndre Przywara 
17*304dcb64SAndre Przywara /* *** Deprecated interfaces *** */
18*304dcb64SAndre Przywara 
19*304dcb64SAndre Przywara #define KVM_TRC_SHIFT           16
20*304dcb64SAndre Przywara 
21*304dcb64SAndre Przywara #define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
22*304dcb64SAndre Przywara #define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
23*304dcb64SAndre Przywara 
24*304dcb64SAndre Przywara #define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
25*304dcb64SAndre Przywara #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
26*304dcb64SAndre Przywara #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
27*304dcb64SAndre Przywara 
28*304dcb64SAndre Przywara #define KVM_TRC_HEAD_SIZE       12
29*304dcb64SAndre Przywara #define KVM_TRC_CYCLE_SIZE      8
30*304dcb64SAndre Przywara #define KVM_TRC_EXTRA_MAX       7
31*304dcb64SAndre Przywara 
32*304dcb64SAndre Przywara #define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
33*304dcb64SAndre Przywara #define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
34*304dcb64SAndre Przywara #define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
35*304dcb64SAndre Przywara #define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
36*304dcb64SAndre Przywara #define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
37*304dcb64SAndre Przywara #define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
38*304dcb64SAndre Przywara #define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
39*304dcb64SAndre Przywara #define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
40*304dcb64SAndre Przywara #define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
41*304dcb64SAndre Przywara #define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
42*304dcb64SAndre Przywara #define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
43*304dcb64SAndre Przywara #define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
44*304dcb64SAndre Przywara #define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
45*304dcb64SAndre Przywara #define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
46*304dcb64SAndre Przywara #define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
47*304dcb64SAndre Przywara #define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
48*304dcb64SAndre Przywara #define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
49*304dcb64SAndre Przywara #define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
50*304dcb64SAndre Przywara #define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
51*304dcb64SAndre Przywara #define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
52*304dcb64SAndre Przywara #define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
53*304dcb64SAndre Przywara #define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
54*304dcb64SAndre Przywara #define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
55*304dcb64SAndre Przywara #define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
56*304dcb64SAndre Przywara 
57*304dcb64SAndre Przywara struct kvm_user_trace_setup {
58*304dcb64SAndre Przywara 	__u32 buf_size;
59*304dcb64SAndre Przywara 	__u32 buf_nr;
60*304dcb64SAndre Przywara };
61*304dcb64SAndre Przywara 
62*304dcb64SAndre Przywara #define __KVM_DEPRECATED_MAIN_W_0x06 \
63*304dcb64SAndre Przywara 	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
64*304dcb64SAndre Przywara #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
65*304dcb64SAndre Przywara #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
66*304dcb64SAndre Przywara 
67*304dcb64SAndre Przywara #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
68*304dcb64SAndre Przywara 
69*304dcb64SAndre Przywara struct kvm_breakpoint {
70*304dcb64SAndre Przywara 	__u32 enabled;
71*304dcb64SAndre Przywara 	__u32 padding;
72*304dcb64SAndre Przywara 	__u64 address;
73*304dcb64SAndre Przywara };
74*304dcb64SAndre Przywara 
75*304dcb64SAndre Przywara struct kvm_debug_guest {
76*304dcb64SAndre Przywara 	__u32 enabled;
77*304dcb64SAndre Przywara 	__u32 pad;
78*304dcb64SAndre Przywara 	struct kvm_breakpoint breakpoints[4];
79*304dcb64SAndre Przywara 	__u32 singlestep;
80*304dcb64SAndre Przywara };
81*304dcb64SAndre Przywara 
82*304dcb64SAndre Przywara #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
83*304dcb64SAndre Przywara 
84*304dcb64SAndre Przywara /* *** End of deprecated interfaces *** */
85*304dcb64SAndre Przywara 
86*304dcb64SAndre Przywara 
87*304dcb64SAndre Przywara /* for KVM_CREATE_MEMORY_REGION */
88*304dcb64SAndre Przywara struct kvm_memory_region {
89*304dcb64SAndre Przywara 	__u32 slot;
90*304dcb64SAndre Przywara 	__u32 flags;
91*304dcb64SAndre Przywara 	__u64 guest_phys_addr;
92*304dcb64SAndre Przywara 	__u64 memory_size; /* bytes */
93*304dcb64SAndre Przywara };
94*304dcb64SAndre Przywara 
95*304dcb64SAndre Przywara /* for KVM_SET_USER_MEMORY_REGION */
96*304dcb64SAndre Przywara struct kvm_userspace_memory_region {
97*304dcb64SAndre Przywara 	__u32 slot;
98*304dcb64SAndre Przywara 	__u32 flags;
99*304dcb64SAndre Przywara 	__u64 guest_phys_addr;
100*304dcb64SAndre Przywara 	__u64 memory_size; /* bytes */
101*304dcb64SAndre Przywara 	__u64 userspace_addr; /* start of the userspace allocated memory */
102*304dcb64SAndre Przywara };
103*304dcb64SAndre Przywara 
104*304dcb64SAndre Przywara /*
105*304dcb64SAndre Przywara  * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace,
106*304dcb64SAndre Przywara  * other bits are reserved for kvm internal use which are defined in
107*304dcb64SAndre Przywara  * include/linux/kvm_host.h.
108*304dcb64SAndre Przywara  */
109*304dcb64SAndre Przywara #define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
110*304dcb64SAndre Przywara #define KVM_MEM_READONLY	(1UL << 1)
111*304dcb64SAndre Przywara 
112*304dcb64SAndre Przywara /* for KVM_IRQ_LINE */
113*304dcb64SAndre Przywara struct kvm_irq_level {
114*304dcb64SAndre Przywara 	/*
115*304dcb64SAndre Przywara 	 * ACPI gsi notion of irq.
116*304dcb64SAndre Przywara 	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
117*304dcb64SAndre Przywara 	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
118*304dcb64SAndre Przywara 	 * For ARM: See Documentation/virtual/kvm/api.txt
119*304dcb64SAndre Przywara 	 */
120*304dcb64SAndre Przywara 	union {
121*304dcb64SAndre Przywara 		__u32 irq;
122*304dcb64SAndre Przywara 		__s32 status;
123*304dcb64SAndre Przywara 	};
124*304dcb64SAndre Przywara 	__u32 level;
125*304dcb64SAndre Przywara };
126*304dcb64SAndre Przywara 
127*304dcb64SAndre Przywara 
128*304dcb64SAndre Przywara struct kvm_irqchip {
129*304dcb64SAndre Przywara 	__u32 chip_id;
130*304dcb64SAndre Przywara 	__u32 pad;
131*304dcb64SAndre Przywara         union {
132*304dcb64SAndre Przywara 		char dummy[512];  /* reserving space */
133*304dcb64SAndre Przywara #ifdef __KVM_HAVE_PIT
134*304dcb64SAndre Przywara 		struct kvm_pic_state pic;
135*304dcb64SAndre Przywara #endif
136*304dcb64SAndre Przywara #ifdef __KVM_HAVE_IOAPIC
137*304dcb64SAndre Przywara 		struct kvm_ioapic_state ioapic;
138*304dcb64SAndre Przywara #endif
139*304dcb64SAndre Przywara 	} chip;
140*304dcb64SAndre Przywara };
141*304dcb64SAndre Przywara 
142*304dcb64SAndre Przywara /* for KVM_CREATE_PIT2 */
143*304dcb64SAndre Przywara struct kvm_pit_config {
144*304dcb64SAndre Przywara 	__u32 flags;
145*304dcb64SAndre Przywara 	__u32 pad[15];
146*304dcb64SAndre Przywara };
147*304dcb64SAndre Przywara 
148*304dcb64SAndre Przywara #define KVM_PIT_SPEAKER_DUMMY     1
149*304dcb64SAndre Przywara 
150*304dcb64SAndre Przywara struct kvm_s390_skeys {
151*304dcb64SAndre Przywara 	__u64 start_gfn;
152*304dcb64SAndre Przywara 	__u64 count;
153*304dcb64SAndre Przywara 	__u64 skeydata_addr;
154*304dcb64SAndre Przywara 	__u32 flags;
155*304dcb64SAndre Przywara 	__u32 reserved[9];
156*304dcb64SAndre Przywara };
157*304dcb64SAndre Przywara #define KVM_S390_GET_SKEYS_NONE   1
158*304dcb64SAndre Przywara #define KVM_S390_SKEYS_MAX        1048576
159*304dcb64SAndre Przywara 
160*304dcb64SAndre Przywara #define KVM_EXIT_UNKNOWN          0
161*304dcb64SAndre Przywara #define KVM_EXIT_EXCEPTION        1
162*304dcb64SAndre Przywara #define KVM_EXIT_IO               2
163*304dcb64SAndre Przywara #define KVM_EXIT_HYPERCALL        3
164*304dcb64SAndre Przywara #define KVM_EXIT_DEBUG            4
165*304dcb64SAndre Przywara #define KVM_EXIT_HLT              5
166*304dcb64SAndre Przywara #define KVM_EXIT_MMIO             6
167*304dcb64SAndre Przywara #define KVM_EXIT_IRQ_WINDOW_OPEN  7
168*304dcb64SAndre Przywara #define KVM_EXIT_SHUTDOWN         8
169*304dcb64SAndre Przywara #define KVM_EXIT_FAIL_ENTRY       9
170*304dcb64SAndre Przywara #define KVM_EXIT_INTR             10
171*304dcb64SAndre Przywara #define KVM_EXIT_SET_TPR          11
172*304dcb64SAndre Przywara #define KVM_EXIT_TPR_ACCESS       12
173*304dcb64SAndre Przywara #define KVM_EXIT_S390_SIEIC       13
174*304dcb64SAndre Przywara #define KVM_EXIT_S390_RESET       14
175*304dcb64SAndre Przywara #define KVM_EXIT_DCR              15 /* deprecated */
176*304dcb64SAndre Przywara #define KVM_EXIT_NMI              16
177*304dcb64SAndre Przywara #define KVM_EXIT_INTERNAL_ERROR   17
178*304dcb64SAndre Przywara #define KVM_EXIT_OSI              18
179*304dcb64SAndre Przywara #define KVM_EXIT_PAPR_HCALL	  19
180*304dcb64SAndre Przywara #define KVM_EXIT_S390_UCONTROL	  20
181*304dcb64SAndre Przywara #define KVM_EXIT_WATCHDOG         21
182*304dcb64SAndre Przywara #define KVM_EXIT_S390_TSCH        22
183*304dcb64SAndre Przywara #define KVM_EXIT_EPR              23
184*304dcb64SAndre Przywara #define KVM_EXIT_SYSTEM_EVENT     24
185*304dcb64SAndre Przywara #define KVM_EXIT_S390_STSI        25
186*304dcb64SAndre Przywara 
187*304dcb64SAndre Przywara /* For KVM_EXIT_INTERNAL_ERROR */
188*304dcb64SAndre Przywara /* Emulate instruction failed. */
189*304dcb64SAndre Przywara #define KVM_INTERNAL_ERROR_EMULATION	1
190*304dcb64SAndre Przywara /* Encounter unexpected simultaneous exceptions. */
191*304dcb64SAndre Przywara #define KVM_INTERNAL_ERROR_SIMUL_EX	2
192*304dcb64SAndre Przywara /* Encounter unexpected vm-exit due to delivery event. */
193*304dcb64SAndre Przywara #define KVM_INTERNAL_ERROR_DELIVERY_EV	3
194*304dcb64SAndre Przywara 
195*304dcb64SAndre Przywara /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
196*304dcb64SAndre Przywara struct kvm_run {
197*304dcb64SAndre Przywara 	/* in */
198*304dcb64SAndre Przywara 	__u8 request_interrupt_window;
199*304dcb64SAndre Przywara 	__u8 padding1[7];
200*304dcb64SAndre Przywara 
201*304dcb64SAndre Przywara 	/* out */
202*304dcb64SAndre Przywara 	__u32 exit_reason;
203*304dcb64SAndre Przywara 	__u8 ready_for_interrupt_injection;
204*304dcb64SAndre Przywara 	__u8 if_flag;
205*304dcb64SAndre Przywara 	__u8 padding2[2];
206*304dcb64SAndre Przywara 
207*304dcb64SAndre Przywara 	/* in (pre_kvm_run), out (post_kvm_run) */
208*304dcb64SAndre Przywara 	__u64 cr8;
209*304dcb64SAndre Przywara 	__u64 apic_base;
210*304dcb64SAndre Przywara 
211*304dcb64SAndre Przywara #ifdef __KVM_S390
212*304dcb64SAndre Przywara 	/* the processor status word for s390 */
213*304dcb64SAndre Przywara 	__u64 psw_mask; /* psw upper half */
214*304dcb64SAndre Przywara 	__u64 psw_addr; /* psw lower half */
215*304dcb64SAndre Przywara #endif
216*304dcb64SAndre Przywara 	union {
217*304dcb64SAndre Przywara 		/* KVM_EXIT_UNKNOWN */
218*304dcb64SAndre Przywara 		struct {
219*304dcb64SAndre Przywara 			__u64 hardware_exit_reason;
220*304dcb64SAndre Przywara 		} hw;
221*304dcb64SAndre Przywara 		/* KVM_EXIT_FAIL_ENTRY */
222*304dcb64SAndre Przywara 		struct {
223*304dcb64SAndre Przywara 			__u64 hardware_entry_failure_reason;
224*304dcb64SAndre Przywara 		} fail_entry;
225*304dcb64SAndre Przywara 		/* KVM_EXIT_EXCEPTION */
226*304dcb64SAndre Przywara 		struct {
227*304dcb64SAndre Przywara 			__u32 exception;
228*304dcb64SAndre Przywara 			__u32 error_code;
229*304dcb64SAndre Przywara 		} ex;
230*304dcb64SAndre Przywara 		/* KVM_EXIT_IO */
231*304dcb64SAndre Przywara 		struct {
232*304dcb64SAndre Przywara #define KVM_EXIT_IO_IN  0
233*304dcb64SAndre Przywara #define KVM_EXIT_IO_OUT 1
234*304dcb64SAndre Przywara 			__u8 direction;
235*304dcb64SAndre Przywara 			__u8 size; /* bytes */
236*304dcb64SAndre Przywara 			__u16 port;
237*304dcb64SAndre Przywara 			__u32 count;
238*304dcb64SAndre Przywara 			__u64 data_offset; /* relative to kvm_run start */
239*304dcb64SAndre Przywara 		} io;
240*304dcb64SAndre Przywara 		struct {
241*304dcb64SAndre Przywara 			struct kvm_debug_exit_arch arch;
242*304dcb64SAndre Przywara 		} debug;
243*304dcb64SAndre Przywara 		/* KVM_EXIT_MMIO */
244*304dcb64SAndre Przywara 		struct {
245*304dcb64SAndre Przywara 			__u64 phys_addr;
246*304dcb64SAndre Przywara 			__u8  data[8];
247*304dcb64SAndre Przywara 			__u32 len;
248*304dcb64SAndre Przywara 			__u8  is_write;
249*304dcb64SAndre Przywara 		} mmio;
250*304dcb64SAndre Przywara 		/* KVM_EXIT_HYPERCALL */
251*304dcb64SAndre Przywara 		struct {
252*304dcb64SAndre Przywara 			__u64 nr;
253*304dcb64SAndre Przywara 			__u64 args[6];
254*304dcb64SAndre Przywara 			__u64 ret;
255*304dcb64SAndre Przywara 			__u32 longmode;
256*304dcb64SAndre Przywara 			__u32 pad;
257*304dcb64SAndre Przywara 		} hypercall;
258*304dcb64SAndre Przywara 		/* KVM_EXIT_TPR_ACCESS */
259*304dcb64SAndre Przywara 		struct {
260*304dcb64SAndre Przywara 			__u64 rip;
261*304dcb64SAndre Przywara 			__u32 is_write;
262*304dcb64SAndre Przywara 			__u32 pad;
263*304dcb64SAndre Przywara 		} tpr_access;
264*304dcb64SAndre Przywara 		/* KVM_EXIT_S390_SIEIC */
265*304dcb64SAndre Przywara 		struct {
266*304dcb64SAndre Przywara 			__u8 icptcode;
267*304dcb64SAndre Przywara 			__u16 ipa;
268*304dcb64SAndre Przywara 			__u32 ipb;
269*304dcb64SAndre Przywara 		} s390_sieic;
270*304dcb64SAndre Przywara 		/* KVM_EXIT_S390_RESET */
271*304dcb64SAndre Przywara #define KVM_S390_RESET_POR       1
272*304dcb64SAndre Przywara #define KVM_S390_RESET_CLEAR     2
273*304dcb64SAndre Przywara #define KVM_S390_RESET_SUBSYSTEM 4
274*304dcb64SAndre Przywara #define KVM_S390_RESET_CPU_INIT  8
275*304dcb64SAndre Przywara #define KVM_S390_RESET_IPL       16
276*304dcb64SAndre Przywara 		__u64 s390_reset_flags;
277*304dcb64SAndre Przywara 		/* KVM_EXIT_S390_UCONTROL */
278*304dcb64SAndre Przywara 		struct {
279*304dcb64SAndre Przywara 			__u64 trans_exc_code;
280*304dcb64SAndre Przywara 			__u32 pgm_code;
281*304dcb64SAndre Przywara 		} s390_ucontrol;
282*304dcb64SAndre Przywara 		/* KVM_EXIT_DCR (deprecated) */
283*304dcb64SAndre Przywara 		struct {
284*304dcb64SAndre Przywara 			__u32 dcrn;
285*304dcb64SAndre Przywara 			__u32 data;
286*304dcb64SAndre Przywara 			__u8  is_write;
287*304dcb64SAndre Przywara 		} dcr;
288*304dcb64SAndre Przywara 		struct {
289*304dcb64SAndre Przywara 			__u32 suberror;
290*304dcb64SAndre Przywara 			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
291*304dcb64SAndre Przywara 			__u32 ndata;
292*304dcb64SAndre Przywara 			__u64 data[16];
293*304dcb64SAndre Przywara 		} internal;
294*304dcb64SAndre Przywara 		/* KVM_EXIT_OSI */
295*304dcb64SAndre Przywara 		struct {
296*304dcb64SAndre Przywara 			__u64 gprs[32];
297*304dcb64SAndre Przywara 		} osi;
298*304dcb64SAndre Przywara 		struct {
299*304dcb64SAndre Przywara 			__u64 nr;
300*304dcb64SAndre Przywara 			__u64 ret;
301*304dcb64SAndre Przywara 			__u64 args[9];
302*304dcb64SAndre Przywara 		} papr_hcall;
303*304dcb64SAndre Przywara 		/* KVM_EXIT_S390_TSCH */
304*304dcb64SAndre Przywara 		struct {
305*304dcb64SAndre Przywara 			__u16 subchannel_id;
306*304dcb64SAndre Przywara 			__u16 subchannel_nr;
307*304dcb64SAndre Przywara 			__u32 io_int_parm;
308*304dcb64SAndre Przywara 			__u32 io_int_word;
309*304dcb64SAndre Przywara 			__u32 ipb;
310*304dcb64SAndre Przywara 			__u8 dequeued;
311*304dcb64SAndre Przywara 		} s390_tsch;
312*304dcb64SAndre Przywara 		/* KVM_EXIT_EPR */
313*304dcb64SAndre Przywara 		struct {
314*304dcb64SAndre Przywara 			__u32 epr;
315*304dcb64SAndre Przywara 		} epr;
316*304dcb64SAndre Przywara 		/* KVM_EXIT_SYSTEM_EVENT */
317*304dcb64SAndre Przywara 		struct {
318*304dcb64SAndre Przywara #define KVM_SYSTEM_EVENT_SHUTDOWN       1
319*304dcb64SAndre Przywara #define KVM_SYSTEM_EVENT_RESET          2
320*304dcb64SAndre Przywara 			__u32 type;
321*304dcb64SAndre Przywara 			__u64 flags;
322*304dcb64SAndre Przywara 		} system_event;
323*304dcb64SAndre Przywara 		/* KVM_EXIT_S390_STSI */
324*304dcb64SAndre Przywara 		struct {
325*304dcb64SAndre Przywara 			__u64 addr;
326*304dcb64SAndre Przywara 			__u8 ar;
327*304dcb64SAndre Przywara 			__u8 reserved;
328*304dcb64SAndre Przywara 			__u8 fc;
329*304dcb64SAndre Przywara 			__u8 sel1;
330*304dcb64SAndre Przywara 			__u16 sel2;
331*304dcb64SAndre Przywara 		} s390_stsi;
332*304dcb64SAndre Przywara 		/* Fix the size of the union. */
333*304dcb64SAndre Przywara 		char padding[256];
334*304dcb64SAndre Przywara 	};
335*304dcb64SAndre Przywara 
336*304dcb64SAndre Przywara 	/*
337*304dcb64SAndre Przywara 	 * shared registers between kvm and userspace.
338*304dcb64SAndre Przywara 	 * kvm_valid_regs specifies the register classes set by the host
339*304dcb64SAndre Przywara 	 * kvm_dirty_regs specified the register classes dirtied by userspace
340*304dcb64SAndre Przywara 	 * struct kvm_sync_regs is architecture specific, as well as the
341*304dcb64SAndre Przywara 	 * bits for kvm_valid_regs and kvm_dirty_regs
342*304dcb64SAndre Przywara 	 */
343*304dcb64SAndre Przywara 	__u64 kvm_valid_regs;
344*304dcb64SAndre Przywara 	__u64 kvm_dirty_regs;
345*304dcb64SAndre Przywara 	union {
346*304dcb64SAndre Przywara 		struct kvm_sync_regs regs;
347*304dcb64SAndre Przywara 		char padding[2048];
348*304dcb64SAndre Przywara 	} s;
349*304dcb64SAndre Przywara };
350*304dcb64SAndre Przywara 
351*304dcb64SAndre Przywara /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
352*304dcb64SAndre Przywara 
353*304dcb64SAndre Przywara struct kvm_coalesced_mmio_zone {
354*304dcb64SAndre Przywara 	__u64 addr;
355*304dcb64SAndre Przywara 	__u32 size;
356*304dcb64SAndre Przywara 	__u32 pad;
357*304dcb64SAndre Przywara };
358*304dcb64SAndre Przywara 
359*304dcb64SAndre Przywara struct kvm_coalesced_mmio {
360*304dcb64SAndre Przywara 	__u64 phys_addr;
361*304dcb64SAndre Przywara 	__u32 len;
362*304dcb64SAndre Przywara 	__u32 pad;
363*304dcb64SAndre Przywara 	__u8  data[8];
364*304dcb64SAndre Przywara };
365*304dcb64SAndre Przywara 
366*304dcb64SAndre Przywara struct kvm_coalesced_mmio_ring {
367*304dcb64SAndre Przywara 	__u32 first, last;
368*304dcb64SAndre Przywara 	struct kvm_coalesced_mmio coalesced_mmio[0];
369*304dcb64SAndre Przywara };
370*304dcb64SAndre Przywara 
371*304dcb64SAndre Przywara #define KVM_COALESCED_MMIO_MAX \
372*304dcb64SAndre Przywara 	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
373*304dcb64SAndre Przywara 	 sizeof(struct kvm_coalesced_mmio))
374*304dcb64SAndre Przywara 
375*304dcb64SAndre Przywara /* for KVM_TRANSLATE */
376*304dcb64SAndre Przywara struct kvm_translation {
377*304dcb64SAndre Przywara 	/* in */
378*304dcb64SAndre Przywara 	__u64 linear_address;
379*304dcb64SAndre Przywara 
380*304dcb64SAndre Przywara 	/* out */
381*304dcb64SAndre Przywara 	__u64 physical_address;
382*304dcb64SAndre Przywara 	__u8  valid;
383*304dcb64SAndre Przywara 	__u8  writeable;
384*304dcb64SAndre Przywara 	__u8  usermode;
385*304dcb64SAndre Przywara 	__u8  pad[5];
386*304dcb64SAndre Przywara };
387*304dcb64SAndre Przywara 
388*304dcb64SAndre Przywara /* for KVM_S390_MEM_OP */
389*304dcb64SAndre Przywara struct kvm_s390_mem_op {
390*304dcb64SAndre Przywara 	/* in */
391*304dcb64SAndre Przywara 	__u64 gaddr;		/* the guest address */
392*304dcb64SAndre Przywara 	__u64 flags;		/* flags */
393*304dcb64SAndre Przywara 	__u32 size;		/* amount of bytes */
394*304dcb64SAndre Przywara 	__u32 op;		/* type of operation */
395*304dcb64SAndre Przywara 	__u64 buf;		/* buffer in userspace */
396*304dcb64SAndre Przywara 	__u8 ar;		/* the access register number */
397*304dcb64SAndre Przywara 	__u8 reserved[31];	/* should be set to 0 */
398*304dcb64SAndre Przywara };
399*304dcb64SAndre Przywara /* types for kvm_s390_mem_op->op */
400*304dcb64SAndre Przywara #define KVM_S390_MEMOP_LOGICAL_READ	0
401*304dcb64SAndre Przywara #define KVM_S390_MEMOP_LOGICAL_WRITE	1
402*304dcb64SAndre Przywara /* flags for kvm_s390_mem_op->flags */
403*304dcb64SAndre Przywara #define KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
404*304dcb64SAndre Przywara #define KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)
405*304dcb64SAndre Przywara 
406*304dcb64SAndre Przywara /* for KVM_INTERRUPT */
407*304dcb64SAndre Przywara struct kvm_interrupt {
408*304dcb64SAndre Przywara 	/* in */
409*304dcb64SAndre Przywara 	__u32 irq;
410*304dcb64SAndre Przywara };
411*304dcb64SAndre Przywara 
412*304dcb64SAndre Przywara /* for KVM_GET_DIRTY_LOG */
413*304dcb64SAndre Przywara struct kvm_dirty_log {
414*304dcb64SAndre Przywara 	__u32 slot;
415*304dcb64SAndre Przywara 	__u32 padding1;
416*304dcb64SAndre Przywara 	union {
417*304dcb64SAndre Przywara 		void __user *dirty_bitmap; /* one bit per page */
418*304dcb64SAndre Przywara 		__u64 padding2;
419*304dcb64SAndre Przywara 	};
420*304dcb64SAndre Przywara };
421*304dcb64SAndre Przywara 
422*304dcb64SAndre Przywara /* for KVM_SET_SIGNAL_MASK */
423*304dcb64SAndre Przywara struct kvm_signal_mask {
424*304dcb64SAndre Przywara 	__u32 len;
425*304dcb64SAndre Przywara 	__u8  sigset[0];
426*304dcb64SAndre Przywara };
427*304dcb64SAndre Przywara 
428*304dcb64SAndre Przywara /* for KVM_TPR_ACCESS_REPORTING */
429*304dcb64SAndre Przywara struct kvm_tpr_access_ctl {
430*304dcb64SAndre Przywara 	__u32 enabled;
431*304dcb64SAndre Przywara 	__u32 flags;
432*304dcb64SAndre Przywara 	__u32 reserved[8];
433*304dcb64SAndre Przywara };
434*304dcb64SAndre Przywara 
435*304dcb64SAndre Przywara /* for KVM_SET_VAPIC_ADDR */
436*304dcb64SAndre Przywara struct kvm_vapic_addr {
437*304dcb64SAndre Przywara 	__u64 vapic_addr;
438*304dcb64SAndre Przywara };
439*304dcb64SAndre Przywara 
440*304dcb64SAndre Przywara /* for KVM_SET_MP_STATE */
441*304dcb64SAndre Przywara 
442*304dcb64SAndre Przywara /* not all states are valid on all architectures */
443*304dcb64SAndre Przywara #define KVM_MP_STATE_RUNNABLE          0
444*304dcb64SAndre Przywara #define KVM_MP_STATE_UNINITIALIZED     1
445*304dcb64SAndre Przywara #define KVM_MP_STATE_INIT_RECEIVED     2
446*304dcb64SAndre Przywara #define KVM_MP_STATE_HALTED            3
447*304dcb64SAndre Przywara #define KVM_MP_STATE_SIPI_RECEIVED     4
448*304dcb64SAndre Przywara #define KVM_MP_STATE_STOPPED           5
449*304dcb64SAndre Przywara #define KVM_MP_STATE_CHECK_STOP        6
450*304dcb64SAndre Przywara #define KVM_MP_STATE_OPERATING         7
451*304dcb64SAndre Przywara #define KVM_MP_STATE_LOAD              8
452*304dcb64SAndre Przywara 
453*304dcb64SAndre Przywara struct kvm_mp_state {
454*304dcb64SAndre Przywara 	__u32 mp_state;
455*304dcb64SAndre Przywara };
456*304dcb64SAndre Przywara 
457*304dcb64SAndre Przywara struct kvm_s390_psw {
458*304dcb64SAndre Przywara 	__u64 mask;
459*304dcb64SAndre Przywara 	__u64 addr;
460*304dcb64SAndre Przywara };
461*304dcb64SAndre Przywara 
462*304dcb64SAndre Przywara /* valid values for type in kvm_s390_interrupt */
463*304dcb64SAndre Przywara #define KVM_S390_SIGP_STOP		0xfffe0000u
464*304dcb64SAndre Przywara #define KVM_S390_PROGRAM_INT		0xfffe0001u
465*304dcb64SAndre Przywara #define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u
466*304dcb64SAndre Przywara #define KVM_S390_RESTART		0xfffe0003u
467*304dcb64SAndre Przywara #define KVM_S390_INT_PFAULT_INIT	0xfffe0004u
468*304dcb64SAndre Przywara #define KVM_S390_INT_PFAULT_DONE	0xfffe0005u
469*304dcb64SAndre Przywara #define KVM_S390_MCHK			0xfffe1000u
470*304dcb64SAndre Przywara #define KVM_S390_INT_CLOCK_COMP		0xffff1004u
471*304dcb64SAndre Przywara #define KVM_S390_INT_CPU_TIMER		0xffff1005u
472*304dcb64SAndre Przywara #define KVM_S390_INT_VIRTIO		0xffff2603u
473*304dcb64SAndre Przywara #define KVM_S390_INT_SERVICE		0xffff2401u
474*304dcb64SAndre Przywara #define KVM_S390_INT_EMERGENCY		0xffff1201u
475*304dcb64SAndre Przywara #define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
476*304dcb64SAndre Przywara /* Anything below 0xfffe0000u is taken by INT_IO */
477*304dcb64SAndre Przywara #define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
478*304dcb64SAndre Przywara 	(((schid)) |			       \
479*304dcb64SAndre Przywara 	 ((ssid) << 16) |		       \
480*304dcb64SAndre Przywara 	 ((cssid) << 18) |		       \
481*304dcb64SAndre Przywara 	 ((ai) << 26))
482*304dcb64SAndre Przywara #define KVM_S390_INT_IO_MIN		0x00000000u
483*304dcb64SAndre Przywara #define KVM_S390_INT_IO_MAX		0xfffdffffu
484*304dcb64SAndre Przywara 
485*304dcb64SAndre Przywara 
486*304dcb64SAndre Przywara struct kvm_s390_interrupt {
487*304dcb64SAndre Przywara 	__u32 type;
488*304dcb64SAndre Przywara 	__u32 parm;
489*304dcb64SAndre Przywara 	__u64 parm64;
490*304dcb64SAndre Przywara };
491*304dcb64SAndre Przywara 
492*304dcb64SAndre Przywara struct kvm_s390_io_info {
493*304dcb64SAndre Przywara 	__u16 subchannel_id;
494*304dcb64SAndre Przywara 	__u16 subchannel_nr;
495*304dcb64SAndre Przywara 	__u32 io_int_parm;
496*304dcb64SAndre Przywara 	__u32 io_int_word;
497*304dcb64SAndre Przywara };
498*304dcb64SAndre Przywara 
499*304dcb64SAndre Przywara struct kvm_s390_ext_info {
500*304dcb64SAndre Przywara 	__u32 ext_params;
501*304dcb64SAndre Przywara 	__u32 pad;
502*304dcb64SAndre Przywara 	__u64 ext_params2;
503*304dcb64SAndre Przywara };
504*304dcb64SAndre Przywara 
505*304dcb64SAndre Przywara struct kvm_s390_pgm_info {
506*304dcb64SAndre Przywara 	__u64 trans_exc_code;
507*304dcb64SAndre Przywara 	__u64 mon_code;
508*304dcb64SAndre Przywara 	__u64 per_address;
509*304dcb64SAndre Przywara 	__u32 data_exc_code;
510*304dcb64SAndre Przywara 	__u16 code;
511*304dcb64SAndre Przywara 	__u16 mon_class_nr;
512*304dcb64SAndre Przywara 	__u8 per_code;
513*304dcb64SAndre Przywara 	__u8 per_atmid;
514*304dcb64SAndre Przywara 	__u8 exc_access_id;
515*304dcb64SAndre Przywara 	__u8 per_access_id;
516*304dcb64SAndre Przywara 	__u8 op_access_id;
517*304dcb64SAndre Przywara 	__u8 pad[3];
518*304dcb64SAndre Przywara };
519*304dcb64SAndre Przywara 
520*304dcb64SAndre Przywara struct kvm_s390_prefix_info {
521*304dcb64SAndre Przywara 	__u32 address;
522*304dcb64SAndre Przywara };
523*304dcb64SAndre Przywara 
524*304dcb64SAndre Przywara struct kvm_s390_extcall_info {
525*304dcb64SAndre Przywara 	__u16 code;
526*304dcb64SAndre Przywara };
527*304dcb64SAndre Przywara 
528*304dcb64SAndre Przywara struct kvm_s390_emerg_info {
529*304dcb64SAndre Przywara 	__u16 code;
530*304dcb64SAndre Przywara };
531*304dcb64SAndre Przywara 
532*304dcb64SAndre Przywara #define KVM_S390_STOP_FLAG_STORE_STATUS	0x01
533*304dcb64SAndre Przywara struct kvm_s390_stop_info {
534*304dcb64SAndre Przywara 	__u32 flags;
535*304dcb64SAndre Przywara };
536*304dcb64SAndre Przywara 
537*304dcb64SAndre Przywara struct kvm_s390_mchk_info {
538*304dcb64SAndre Przywara 	__u64 cr14;
539*304dcb64SAndre Przywara 	__u64 mcic;
540*304dcb64SAndre Przywara 	__u64 failing_storage_address;
541*304dcb64SAndre Przywara 	__u32 ext_damage_code;
542*304dcb64SAndre Przywara 	__u32 pad;
543*304dcb64SAndre Przywara 	__u8 fixed_logout[16];
544*304dcb64SAndre Przywara };
545*304dcb64SAndre Przywara 
546*304dcb64SAndre Przywara struct kvm_s390_irq {
547*304dcb64SAndre Przywara 	__u64 type;
548*304dcb64SAndre Przywara 	union {
549*304dcb64SAndre Przywara 		struct kvm_s390_io_info io;
550*304dcb64SAndre Przywara 		struct kvm_s390_ext_info ext;
551*304dcb64SAndre Przywara 		struct kvm_s390_pgm_info pgm;
552*304dcb64SAndre Przywara 		struct kvm_s390_emerg_info emerg;
553*304dcb64SAndre Przywara 		struct kvm_s390_extcall_info extcall;
554*304dcb64SAndre Przywara 		struct kvm_s390_prefix_info prefix;
555*304dcb64SAndre Przywara 		struct kvm_s390_stop_info stop;
556*304dcb64SAndre Przywara 		struct kvm_s390_mchk_info mchk;
557*304dcb64SAndre Przywara 		char reserved[64];
558*304dcb64SAndre Przywara 	} u;
559*304dcb64SAndre Przywara };
560*304dcb64SAndre Przywara 
561*304dcb64SAndre Przywara struct kvm_s390_irq_state {
562*304dcb64SAndre Przywara 	__u64 buf;
563*304dcb64SAndre Przywara 	__u32 flags;
564*304dcb64SAndre Przywara 	__u32 len;
565*304dcb64SAndre Przywara 	__u32 reserved[4];
566*304dcb64SAndre Przywara };
567*304dcb64SAndre Przywara 
568*304dcb64SAndre Przywara /* for KVM_SET_GUEST_DEBUG */
569*304dcb64SAndre Przywara 
570*304dcb64SAndre Przywara #define KVM_GUESTDBG_ENABLE		0x00000001
571*304dcb64SAndre Przywara #define KVM_GUESTDBG_SINGLESTEP		0x00000002
572*304dcb64SAndre Przywara 
573*304dcb64SAndre Przywara struct kvm_guest_debug {
574*304dcb64SAndre Przywara 	__u32 control;
575*304dcb64SAndre Przywara 	__u32 pad;
576*304dcb64SAndre Przywara 	struct kvm_guest_debug_arch arch;
577*304dcb64SAndre Przywara };
578*304dcb64SAndre Przywara 
579*304dcb64SAndre Przywara enum {
580*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_datamatch,
581*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_pio,
582*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_deassign,
583*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
584*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_fast_mmio,
585*304dcb64SAndre Przywara 	kvm_ioeventfd_flag_nr_max,
586*304dcb64SAndre Przywara };
587*304dcb64SAndre Przywara 
588*304dcb64SAndre Przywara #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
589*304dcb64SAndre Przywara #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
590*304dcb64SAndre Przywara #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
591*304dcb64SAndre Przywara #define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
592*304dcb64SAndre Przywara 	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
593*304dcb64SAndre Przywara 
594*304dcb64SAndre Przywara #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
595*304dcb64SAndre Przywara 
596*304dcb64SAndre Przywara struct kvm_ioeventfd {
597*304dcb64SAndre Przywara 	__u64 datamatch;
598*304dcb64SAndre Przywara 	__u64 addr;        /* legal pio/mmio address */
599*304dcb64SAndre Przywara 	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
600*304dcb64SAndre Przywara 	__s32 fd;
601*304dcb64SAndre Przywara 	__u32 flags;
602*304dcb64SAndre Przywara 	__u8  pad[36];
603*304dcb64SAndre Przywara };
604*304dcb64SAndre Przywara 
605*304dcb64SAndre Przywara /* for KVM_ENABLE_CAP */
606*304dcb64SAndre Przywara struct kvm_enable_cap {
607*304dcb64SAndre Przywara 	/* in */
608*304dcb64SAndre Przywara 	__u32 cap;
609*304dcb64SAndre Przywara 	__u32 flags;
610*304dcb64SAndre Przywara 	__u64 args[4];
611*304dcb64SAndre Przywara 	__u8  pad[64];
612*304dcb64SAndre Przywara };
613*304dcb64SAndre Przywara 
614*304dcb64SAndre Przywara /* for KVM_PPC_GET_PVINFO */
615*304dcb64SAndre Przywara struct kvm_ppc_pvinfo {
616*304dcb64SAndre Przywara 	/* out */
617*304dcb64SAndre Przywara 	__u32 flags;
618*304dcb64SAndre Przywara 	__u32 hcall[4];
619*304dcb64SAndre Przywara 	__u8  pad[108];
620*304dcb64SAndre Przywara };
621*304dcb64SAndre Przywara 
622*304dcb64SAndre Przywara /* for KVM_PPC_GET_SMMU_INFO */
623*304dcb64SAndre Przywara #define KVM_PPC_PAGE_SIZES_MAX_SZ	8
624*304dcb64SAndre Przywara 
625*304dcb64SAndre Przywara struct kvm_ppc_one_page_size {
626*304dcb64SAndre Przywara 	__u32 page_shift;	/* Page shift (or 0) */
627*304dcb64SAndre Przywara 	__u32 pte_enc;		/* Encoding in the HPTE (>>12) */
628*304dcb64SAndre Przywara };
629*304dcb64SAndre Przywara 
630*304dcb64SAndre Przywara struct kvm_ppc_one_seg_page_size {
631*304dcb64SAndre Przywara 	__u32 page_shift;	/* Base page shift of segment (or 0) */
632*304dcb64SAndre Przywara 	__u32 slb_enc;		/* SLB encoding for BookS */
633*304dcb64SAndre Przywara 	struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
634*304dcb64SAndre Przywara };
635*304dcb64SAndre Przywara 
636*304dcb64SAndre Przywara #define KVM_PPC_PAGE_SIZES_REAL		0x00000001
637*304dcb64SAndre Przywara #define KVM_PPC_1T_SEGMENTS		0x00000002
638*304dcb64SAndre Przywara 
639*304dcb64SAndre Przywara struct kvm_ppc_smmu_info {
640*304dcb64SAndre Przywara 	__u64 flags;
641*304dcb64SAndre Przywara 	__u32 slb_size;
642*304dcb64SAndre Przywara 	__u32 pad;
643*304dcb64SAndre Przywara 	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
644*304dcb64SAndre Przywara };
645*304dcb64SAndre Przywara 
646*304dcb64SAndre Przywara #define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)
647*304dcb64SAndre Przywara 
648*304dcb64SAndre Przywara #define KVMIO 0xAE
649*304dcb64SAndre Przywara 
650*304dcb64SAndre Przywara /* machine type bits, to be used as argument to KVM_CREATE_VM */
651*304dcb64SAndre Przywara #define KVM_VM_S390_UCONTROL	1
652*304dcb64SAndre Przywara 
653*304dcb64SAndre Przywara /* on ppc, 0 indicate default, 1 should force HV and 2 PR */
654*304dcb64SAndre Przywara #define KVM_VM_PPC_HV 1
655*304dcb64SAndre Przywara #define KVM_VM_PPC_PR 2
656*304dcb64SAndre Przywara 
657*304dcb64SAndre Przywara #define KVM_S390_SIE_PAGE_OFFSET 1
658*304dcb64SAndre Przywara 
659*304dcb64SAndre Przywara /*
660*304dcb64SAndre Przywara  * ioctls for /dev/kvm fds:
661*304dcb64SAndre Przywara  */
662*304dcb64SAndre Przywara #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
663*304dcb64SAndre Przywara #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
664*304dcb64SAndre Przywara #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
665*304dcb64SAndre Przywara 
666*304dcb64SAndre Przywara #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
667*304dcb64SAndre Przywara /*
668*304dcb64SAndre Przywara  * Check if a kvm extension is available.  Argument is extension number,
669*304dcb64SAndre Przywara  * return is 1 (yes) or 0 (no, sorry).
670*304dcb64SAndre Przywara  */
671*304dcb64SAndre Przywara #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
672*304dcb64SAndre Przywara /*
673*304dcb64SAndre Przywara  * Get size for mmap(vcpu_fd)
674*304dcb64SAndre Przywara  */
675*304dcb64SAndre Przywara #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
676*304dcb64SAndre Przywara #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
677*304dcb64SAndre Przywara #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
678*304dcb64SAndre Przywara #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
679*304dcb64SAndre Przywara #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
680*304dcb64SAndre Przywara #define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
681*304dcb64SAndre Przywara 
682*304dcb64SAndre Przywara /*
683*304dcb64SAndre Przywara  * Extension capability list.
684*304dcb64SAndre Przywara  */
685*304dcb64SAndre Przywara #define KVM_CAP_IRQCHIP	  0
686*304dcb64SAndre Przywara #define KVM_CAP_HLT	  1
687*304dcb64SAndre Przywara #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
688*304dcb64SAndre Przywara #define KVM_CAP_USER_MEMORY 3
689*304dcb64SAndre Przywara #define KVM_CAP_SET_TSS_ADDR 4
690*304dcb64SAndre Przywara #define KVM_CAP_VAPIC 6
691*304dcb64SAndre Przywara #define KVM_CAP_EXT_CPUID 7
692*304dcb64SAndre Przywara #define KVM_CAP_CLOCKSOURCE 8
693*304dcb64SAndre Przywara #define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
694*304dcb64SAndre Przywara #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
695*304dcb64SAndre Przywara #define KVM_CAP_PIT 11
696*304dcb64SAndre Przywara #define KVM_CAP_NOP_IO_DELAY 12
697*304dcb64SAndre Przywara #define KVM_CAP_PV_MMU 13
698*304dcb64SAndre Przywara #define KVM_CAP_MP_STATE 14
699*304dcb64SAndre Przywara #define KVM_CAP_COALESCED_MMIO 15
700*304dcb64SAndre Przywara #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
701*304dcb64SAndre Przywara #define KVM_CAP_IOMMU 18
702*304dcb64SAndre Przywara /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
703*304dcb64SAndre Przywara #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
704*304dcb64SAndre Przywara #define KVM_CAP_USER_NMI 22
705*304dcb64SAndre Przywara #ifdef __KVM_HAVE_GUEST_DEBUG
706*304dcb64SAndre Przywara #define KVM_CAP_SET_GUEST_DEBUG 23
707*304dcb64SAndre Przywara #endif
708*304dcb64SAndre Przywara #ifdef __KVM_HAVE_PIT
709*304dcb64SAndre Przywara #define KVM_CAP_REINJECT_CONTROL 24
710*304dcb64SAndre Przywara #endif
711*304dcb64SAndre Przywara #define KVM_CAP_IRQ_ROUTING 25
712*304dcb64SAndre Przywara #define KVM_CAP_IRQ_INJECT_STATUS 26
713*304dcb64SAndre Przywara #define KVM_CAP_ASSIGN_DEV_IRQ 29
714*304dcb64SAndre Przywara /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
715*304dcb64SAndre Przywara #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
716*304dcb64SAndre Przywara #ifdef __KVM_HAVE_MCE
717*304dcb64SAndre Przywara #define KVM_CAP_MCE 31
718*304dcb64SAndre Przywara #endif
719*304dcb64SAndre Przywara #define KVM_CAP_IRQFD 32
720*304dcb64SAndre Przywara #ifdef __KVM_HAVE_PIT
721*304dcb64SAndre Przywara #define KVM_CAP_PIT2 33
722*304dcb64SAndre Przywara #endif
723*304dcb64SAndre Przywara #define KVM_CAP_SET_BOOT_CPU_ID 34
724*304dcb64SAndre Przywara #ifdef __KVM_HAVE_PIT_STATE2
725*304dcb64SAndre Przywara #define KVM_CAP_PIT_STATE2 35
726*304dcb64SAndre Przywara #endif
727*304dcb64SAndre Przywara #define KVM_CAP_IOEVENTFD 36
728*304dcb64SAndre Przywara #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
729*304dcb64SAndre Przywara #ifdef __KVM_HAVE_XEN_HVM
730*304dcb64SAndre Przywara #define KVM_CAP_XEN_HVM 38
731*304dcb64SAndre Przywara #endif
732*304dcb64SAndre Przywara #define KVM_CAP_ADJUST_CLOCK 39
733*304dcb64SAndre Przywara #define KVM_CAP_INTERNAL_ERROR_DATA 40
734*304dcb64SAndre Przywara #ifdef __KVM_HAVE_VCPU_EVENTS
735*304dcb64SAndre Przywara #define KVM_CAP_VCPU_EVENTS 41
736*304dcb64SAndre Przywara #endif
737*304dcb64SAndre Przywara #define KVM_CAP_S390_PSW 42
738*304dcb64SAndre Przywara #define KVM_CAP_PPC_SEGSTATE 43
739*304dcb64SAndre Przywara #define KVM_CAP_HYPERV 44
740*304dcb64SAndre Przywara #define KVM_CAP_HYPERV_VAPIC 45
741*304dcb64SAndre Przywara #define KVM_CAP_HYPERV_SPIN 46
742*304dcb64SAndre Przywara #define KVM_CAP_PCI_SEGMENT 47
743*304dcb64SAndre Przywara #define KVM_CAP_PPC_PAIRED_SINGLES 48
744*304dcb64SAndre Przywara #define KVM_CAP_INTR_SHADOW 49
745*304dcb64SAndre Przywara #ifdef __KVM_HAVE_DEBUGREGS
746*304dcb64SAndre Przywara #define KVM_CAP_DEBUGREGS 50
747*304dcb64SAndre Przywara #endif
748*304dcb64SAndre Przywara #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
749*304dcb64SAndre Przywara #define KVM_CAP_PPC_OSI 52
750*304dcb64SAndre Przywara #define KVM_CAP_PPC_UNSET_IRQ 53
751*304dcb64SAndre Przywara #define KVM_CAP_ENABLE_CAP 54
752*304dcb64SAndre Przywara #ifdef __KVM_HAVE_XSAVE
753*304dcb64SAndre Przywara #define KVM_CAP_XSAVE 55
754*304dcb64SAndre Przywara #endif
755*304dcb64SAndre Przywara #ifdef __KVM_HAVE_XCRS
756*304dcb64SAndre Przywara #define KVM_CAP_XCRS 56
757*304dcb64SAndre Przywara #endif
758*304dcb64SAndre Przywara #define KVM_CAP_PPC_GET_PVINFO 57
759*304dcb64SAndre Przywara #define KVM_CAP_PPC_IRQ_LEVEL 58
760*304dcb64SAndre Przywara #define KVM_CAP_ASYNC_PF 59
761*304dcb64SAndre Przywara #define KVM_CAP_TSC_CONTROL 60
762*304dcb64SAndre Przywara #define KVM_CAP_GET_TSC_KHZ 61
763*304dcb64SAndre Przywara #define KVM_CAP_PPC_BOOKE_SREGS 62
764*304dcb64SAndre Przywara #define KVM_CAP_SPAPR_TCE 63
765*304dcb64SAndre Przywara #define KVM_CAP_PPC_SMT 64
766*304dcb64SAndre Przywara #define KVM_CAP_PPC_RMA	65
767*304dcb64SAndre Przywara #define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
768*304dcb64SAndre Przywara #define KVM_CAP_PPC_HIOR 67
769*304dcb64SAndre Przywara #define KVM_CAP_PPC_PAPR 68
770*304dcb64SAndre Przywara #define KVM_CAP_SW_TLB 69
771*304dcb64SAndre Przywara #define KVM_CAP_ONE_REG 70
772*304dcb64SAndre Przywara #define KVM_CAP_S390_GMAP 71
773*304dcb64SAndre Przywara #define KVM_CAP_TSC_DEADLINE_TIMER 72
774*304dcb64SAndre Przywara #define KVM_CAP_S390_UCONTROL 73
775*304dcb64SAndre Przywara #define KVM_CAP_SYNC_REGS 74
776*304dcb64SAndre Przywara #define KVM_CAP_PCI_2_3 75
777*304dcb64SAndre Przywara #define KVM_CAP_KVMCLOCK_CTRL 76
778*304dcb64SAndre Przywara #define KVM_CAP_SIGNAL_MSI 77
779*304dcb64SAndre Przywara #define KVM_CAP_PPC_GET_SMMU_INFO 78
780*304dcb64SAndre Przywara #define KVM_CAP_S390_COW 79
781*304dcb64SAndre Przywara #define KVM_CAP_PPC_ALLOC_HTAB 80
782*304dcb64SAndre Przywara #define KVM_CAP_READONLY_MEM 81
783*304dcb64SAndre Przywara #define KVM_CAP_IRQFD_RESAMPLE 82
784*304dcb64SAndre Przywara #define KVM_CAP_PPC_BOOKE_WATCHDOG 83
785*304dcb64SAndre Przywara #define KVM_CAP_PPC_HTAB_FD 84
786*304dcb64SAndre Przywara #define KVM_CAP_S390_CSS_SUPPORT 85
787*304dcb64SAndre Przywara #define KVM_CAP_PPC_EPR 86
788*304dcb64SAndre Przywara #define KVM_CAP_ARM_PSCI 87
789*304dcb64SAndre Przywara #define KVM_CAP_ARM_SET_DEVICE_ADDR 88
790*304dcb64SAndre Przywara #define KVM_CAP_DEVICE_CTRL 89
791*304dcb64SAndre Przywara #define KVM_CAP_IRQ_MPIC 90
792*304dcb64SAndre Przywara #define KVM_CAP_PPC_RTAS 91
793*304dcb64SAndre Przywara #define KVM_CAP_IRQ_XICS 92
794*304dcb64SAndre Przywara #define KVM_CAP_ARM_EL1_32BIT 93
795*304dcb64SAndre Przywara #define KVM_CAP_SPAPR_MULTITCE 94
796*304dcb64SAndre Przywara #define KVM_CAP_EXT_EMUL_CPUID 95
797*304dcb64SAndre Przywara #define KVM_CAP_HYPERV_TIME 96
798*304dcb64SAndre Przywara #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
799*304dcb64SAndre Przywara #define KVM_CAP_ENABLE_CAP_VM 98
800*304dcb64SAndre Przywara #define KVM_CAP_S390_IRQCHIP 99
801*304dcb64SAndre Przywara #define KVM_CAP_IOEVENTFD_NO_LENGTH 100
802*304dcb64SAndre Przywara #define KVM_CAP_VM_ATTRIBUTES 101
803*304dcb64SAndre Przywara #define KVM_CAP_ARM_PSCI_0_2 102
804*304dcb64SAndre Przywara #define KVM_CAP_PPC_FIXUP_HCALL 103
805*304dcb64SAndre Przywara #define KVM_CAP_PPC_ENABLE_HCALL 104
806*304dcb64SAndre Przywara #define KVM_CAP_CHECK_EXTENSION_VM 105
807*304dcb64SAndre Przywara #define KVM_CAP_S390_USER_SIGP 106
808*304dcb64SAndre Przywara #define KVM_CAP_S390_VECTOR_REGISTERS 107
809*304dcb64SAndre Przywara #define KVM_CAP_S390_MEM_OP 108
810*304dcb64SAndre Przywara #define KVM_CAP_S390_USER_STSI 109
811*304dcb64SAndre Przywara #define KVM_CAP_S390_SKEYS 110
812*304dcb64SAndre Przywara #define KVM_CAP_MIPS_FPU 111
813*304dcb64SAndre Przywara #define KVM_CAP_MIPS_MSA 112
814*304dcb64SAndre Przywara #define KVM_CAP_S390_INJECT_IRQ 113
815*304dcb64SAndre Przywara #define KVM_CAP_S390_IRQ_STATE 114
816*304dcb64SAndre Przywara #define KVM_CAP_PPC_HWRNG 115
817*304dcb64SAndre Przywara 
818*304dcb64SAndre Przywara #ifdef KVM_CAP_IRQ_ROUTING
819*304dcb64SAndre Przywara 
820*304dcb64SAndre Przywara struct kvm_irq_routing_irqchip {
821*304dcb64SAndre Przywara 	__u32 irqchip;
822*304dcb64SAndre Przywara 	__u32 pin;
823*304dcb64SAndre Przywara };
824*304dcb64SAndre Przywara 
825*304dcb64SAndre Przywara struct kvm_irq_routing_msi {
826*304dcb64SAndre Przywara 	__u32 address_lo;
827*304dcb64SAndre Przywara 	__u32 address_hi;
828*304dcb64SAndre Przywara 	__u32 data;
829*304dcb64SAndre Przywara 	__u32 pad;
830*304dcb64SAndre Przywara };
831*304dcb64SAndre Przywara 
832*304dcb64SAndre Przywara struct kvm_irq_routing_s390_adapter {
833*304dcb64SAndre Przywara 	__u64 ind_addr;
834*304dcb64SAndre Przywara 	__u64 summary_addr;
835*304dcb64SAndre Przywara 	__u64 ind_offset;
836*304dcb64SAndre Przywara 	__u32 summary_offset;
837*304dcb64SAndre Przywara 	__u32 adapter_id;
838*304dcb64SAndre Przywara };
839*304dcb64SAndre Przywara 
840*304dcb64SAndre Przywara /* gsi routing entry types */
841*304dcb64SAndre Przywara #define KVM_IRQ_ROUTING_IRQCHIP 1
842*304dcb64SAndre Przywara #define KVM_IRQ_ROUTING_MSI 2
843*304dcb64SAndre Przywara #define KVM_IRQ_ROUTING_S390_ADAPTER 3
844*304dcb64SAndre Przywara 
845*304dcb64SAndre Przywara struct kvm_irq_routing_entry {
846*304dcb64SAndre Przywara 	__u32 gsi;
847*304dcb64SAndre Przywara 	__u32 type;
848*304dcb64SAndre Przywara 	__u32 flags;
849*304dcb64SAndre Przywara 	__u32 pad;
850*304dcb64SAndre Przywara 	union {
851*304dcb64SAndre Przywara 		struct kvm_irq_routing_irqchip irqchip;
852*304dcb64SAndre Przywara 		struct kvm_irq_routing_msi msi;
853*304dcb64SAndre Przywara 		struct kvm_irq_routing_s390_adapter adapter;
854*304dcb64SAndre Przywara 		__u32 pad[8];
855*304dcb64SAndre Przywara 	} u;
856*304dcb64SAndre Przywara };
857*304dcb64SAndre Przywara 
858*304dcb64SAndre Przywara struct kvm_irq_routing {
859*304dcb64SAndre Przywara 	__u32 nr;
860*304dcb64SAndre Przywara 	__u32 flags;
861*304dcb64SAndre Przywara 	struct kvm_irq_routing_entry entries[0];
862*304dcb64SAndre Przywara };
863*304dcb64SAndre Przywara 
864*304dcb64SAndre Przywara #endif
865*304dcb64SAndre Przywara 
866*304dcb64SAndre Przywara #ifdef KVM_CAP_MCE
867*304dcb64SAndre Przywara /* x86 MCE */
868*304dcb64SAndre Przywara struct kvm_x86_mce {
869*304dcb64SAndre Przywara 	__u64 status;
870*304dcb64SAndre Przywara 	__u64 addr;
871*304dcb64SAndre Przywara 	__u64 misc;
872*304dcb64SAndre Przywara 	__u64 mcg_status;
873*304dcb64SAndre Przywara 	__u8 bank;
874*304dcb64SAndre Przywara 	__u8 pad1[7];
875*304dcb64SAndre Przywara 	__u64 pad2[3];
876*304dcb64SAndre Przywara };
877*304dcb64SAndre Przywara #endif
878*304dcb64SAndre Przywara 
879*304dcb64SAndre Przywara #ifdef KVM_CAP_XEN_HVM
880*304dcb64SAndre Przywara struct kvm_xen_hvm_config {
881*304dcb64SAndre Przywara 	__u32 flags;
882*304dcb64SAndre Przywara 	__u32 msr;
883*304dcb64SAndre Przywara 	__u64 blob_addr_32;
884*304dcb64SAndre Przywara 	__u64 blob_addr_64;
885*304dcb64SAndre Przywara 	__u8 blob_size_32;
886*304dcb64SAndre Przywara 	__u8 blob_size_64;
887*304dcb64SAndre Przywara 	__u8 pad2[30];
888*304dcb64SAndre Przywara };
889*304dcb64SAndre Przywara #endif
890*304dcb64SAndre Przywara 
891*304dcb64SAndre Przywara #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
892*304dcb64SAndre Przywara /*
893*304dcb64SAndre Przywara  * Available with KVM_CAP_IRQFD_RESAMPLE
894*304dcb64SAndre Przywara  *
895*304dcb64SAndre Przywara  * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
896*304dcb64SAndre Przywara  * the irqfd to operate in resampling mode for level triggered interrupt
897*304dcb64SAndre Przywara  * emlation.  See Documentation/virtual/kvm/api.txt.
898*304dcb64SAndre Przywara  */
899*304dcb64SAndre Przywara #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
900*304dcb64SAndre Przywara 
901*304dcb64SAndre Przywara struct kvm_irqfd {
902*304dcb64SAndre Przywara 	__u32 fd;
903*304dcb64SAndre Przywara 	__u32 gsi;
904*304dcb64SAndre Przywara 	__u32 flags;
905*304dcb64SAndre Przywara 	__u32 resamplefd;
906*304dcb64SAndre Przywara 	__u8  pad[16];
907*304dcb64SAndre Przywara };
908*304dcb64SAndre Przywara 
909*304dcb64SAndre Przywara struct kvm_clock_data {
910*304dcb64SAndre Przywara 	__u64 clock;
911*304dcb64SAndre Przywara 	__u32 flags;
912*304dcb64SAndre Przywara 	__u32 pad[9];
913*304dcb64SAndre Przywara };
914*304dcb64SAndre Przywara 
915*304dcb64SAndre Przywara #define KVM_MMU_FSL_BOOKE_NOHV		0
916*304dcb64SAndre Przywara #define KVM_MMU_FSL_BOOKE_HV		1
917*304dcb64SAndre Przywara 
918*304dcb64SAndre Przywara struct kvm_config_tlb {
919*304dcb64SAndre Przywara 	__u64 params;
920*304dcb64SAndre Przywara 	__u64 array;
921*304dcb64SAndre Przywara 	__u32 mmu_type;
922*304dcb64SAndre Przywara 	__u32 array_len;
923*304dcb64SAndre Przywara };
924*304dcb64SAndre Przywara 
925*304dcb64SAndre Przywara struct kvm_dirty_tlb {
926*304dcb64SAndre Przywara 	__u64 bitmap;
927*304dcb64SAndre Przywara 	__u32 num_dirty;
928*304dcb64SAndre Przywara };
929*304dcb64SAndre Przywara 
930*304dcb64SAndre Przywara /* Available with KVM_CAP_ONE_REG */
931*304dcb64SAndre Przywara 
932*304dcb64SAndre Przywara #define KVM_REG_ARCH_MASK	0xff00000000000000ULL
933*304dcb64SAndre Przywara #define KVM_REG_GENERIC		0x0000000000000000ULL
934*304dcb64SAndre Przywara 
935*304dcb64SAndre Przywara /*
936*304dcb64SAndre Przywara  * Architecture specific registers are to be defined in arch headers and
937*304dcb64SAndre Przywara  * ORed with the arch identifier.
938*304dcb64SAndre Przywara  */
939*304dcb64SAndre Przywara #define KVM_REG_PPC		0x1000000000000000ULL
940*304dcb64SAndre Przywara #define KVM_REG_X86		0x2000000000000000ULL
941*304dcb64SAndre Przywara #define KVM_REG_IA64		0x3000000000000000ULL
942*304dcb64SAndre Przywara #define KVM_REG_ARM		0x4000000000000000ULL
943*304dcb64SAndre Przywara #define KVM_REG_S390		0x5000000000000000ULL
944*304dcb64SAndre Przywara #define KVM_REG_ARM64		0x6000000000000000ULL
945*304dcb64SAndre Przywara #define KVM_REG_MIPS		0x7000000000000000ULL
946*304dcb64SAndre Przywara 
947*304dcb64SAndre Przywara #define KVM_REG_SIZE_SHIFT	52
948*304dcb64SAndre Przywara #define KVM_REG_SIZE_MASK	0x00f0000000000000ULL
949*304dcb64SAndre Przywara #define KVM_REG_SIZE_U8		0x0000000000000000ULL
950*304dcb64SAndre Przywara #define KVM_REG_SIZE_U16	0x0010000000000000ULL
951*304dcb64SAndre Przywara #define KVM_REG_SIZE_U32	0x0020000000000000ULL
952*304dcb64SAndre Przywara #define KVM_REG_SIZE_U64	0x0030000000000000ULL
953*304dcb64SAndre Przywara #define KVM_REG_SIZE_U128	0x0040000000000000ULL
954*304dcb64SAndre Przywara #define KVM_REG_SIZE_U256	0x0050000000000000ULL
955*304dcb64SAndre Przywara #define KVM_REG_SIZE_U512	0x0060000000000000ULL
956*304dcb64SAndre Przywara #define KVM_REG_SIZE_U1024	0x0070000000000000ULL
957*304dcb64SAndre Przywara 
958*304dcb64SAndre Przywara struct kvm_reg_list {
959*304dcb64SAndre Przywara 	__u64 n; /* number of regs */
960*304dcb64SAndre Przywara 	__u64 reg[0];
961*304dcb64SAndre Przywara };
962*304dcb64SAndre Przywara 
963*304dcb64SAndre Przywara struct kvm_one_reg {
964*304dcb64SAndre Przywara 	__u64 id;
965*304dcb64SAndre Przywara 	__u64 addr;
966*304dcb64SAndre Przywara };
967*304dcb64SAndre Przywara 
968*304dcb64SAndre Przywara struct kvm_msi {
969*304dcb64SAndre Przywara 	__u32 address_lo;
970*304dcb64SAndre Przywara 	__u32 address_hi;
971*304dcb64SAndre Przywara 	__u32 data;
972*304dcb64SAndre Przywara 	__u32 flags;
973*304dcb64SAndre Przywara 	__u8  pad[16];
974*304dcb64SAndre Przywara };
975*304dcb64SAndre Przywara 
976*304dcb64SAndre Przywara struct kvm_arm_device_addr {
977*304dcb64SAndre Przywara 	__u64 id;
978*304dcb64SAndre Przywara 	__u64 addr;
979*304dcb64SAndre Przywara };
980*304dcb64SAndre Przywara 
981*304dcb64SAndre Przywara /*
982*304dcb64SAndre Przywara  * Device control API, available with KVM_CAP_DEVICE_CTRL
983*304dcb64SAndre Przywara  */
984*304dcb64SAndre Przywara #define KVM_CREATE_DEVICE_TEST		1
985*304dcb64SAndre Przywara 
986*304dcb64SAndre Przywara struct kvm_create_device {
987*304dcb64SAndre Przywara 	__u32	type;	/* in: KVM_DEV_TYPE_xxx */
988*304dcb64SAndre Przywara 	__u32	fd;	/* out: device handle */
989*304dcb64SAndre Przywara 	__u32	flags;	/* in: KVM_CREATE_DEVICE_xxx */
990*304dcb64SAndre Przywara };
991*304dcb64SAndre Przywara 
992*304dcb64SAndre Przywara struct kvm_device_attr {
993*304dcb64SAndre Przywara 	__u32	flags;		/* no flags currently defined */
994*304dcb64SAndre Przywara 	__u32	group;		/* device-defined */
995*304dcb64SAndre Przywara 	__u64	attr;		/* group-defined */
996*304dcb64SAndre Przywara 	__u64	addr;		/* userspace address of attr data */
997*304dcb64SAndre Przywara };
998*304dcb64SAndre Przywara 
999*304dcb64SAndre Przywara #define  KVM_DEV_VFIO_GROUP			1
1000*304dcb64SAndre Przywara #define   KVM_DEV_VFIO_GROUP_ADD			1
1001*304dcb64SAndre Przywara #define   KVM_DEV_VFIO_GROUP_DEL			2
1002*304dcb64SAndre Przywara 
1003*304dcb64SAndre Przywara enum kvm_device_type {
1004*304dcb64SAndre Przywara 	KVM_DEV_TYPE_FSL_MPIC_20	= 1,
1005*304dcb64SAndre Przywara #define KVM_DEV_TYPE_FSL_MPIC_20	KVM_DEV_TYPE_FSL_MPIC_20
1006*304dcb64SAndre Przywara 	KVM_DEV_TYPE_FSL_MPIC_42,
1007*304dcb64SAndre Przywara #define KVM_DEV_TYPE_FSL_MPIC_42	KVM_DEV_TYPE_FSL_MPIC_42
1008*304dcb64SAndre Przywara 	KVM_DEV_TYPE_XICS,
1009*304dcb64SAndre Przywara #define KVM_DEV_TYPE_XICS		KVM_DEV_TYPE_XICS
1010*304dcb64SAndre Przywara 	KVM_DEV_TYPE_VFIO,
1011*304dcb64SAndre Przywara #define KVM_DEV_TYPE_VFIO		KVM_DEV_TYPE_VFIO
1012*304dcb64SAndre Przywara 	KVM_DEV_TYPE_ARM_VGIC_V2,
1013*304dcb64SAndre Przywara #define KVM_DEV_TYPE_ARM_VGIC_V2	KVM_DEV_TYPE_ARM_VGIC_V2
1014*304dcb64SAndre Przywara 	KVM_DEV_TYPE_FLIC,
1015*304dcb64SAndre Przywara #define KVM_DEV_TYPE_FLIC		KVM_DEV_TYPE_FLIC
1016*304dcb64SAndre Przywara 	KVM_DEV_TYPE_ARM_VGIC_V3,
1017*304dcb64SAndre Przywara #define KVM_DEV_TYPE_ARM_VGIC_V3	KVM_DEV_TYPE_ARM_VGIC_V3
1018*304dcb64SAndre Przywara 	KVM_DEV_TYPE_MAX,
1019*304dcb64SAndre Przywara };
1020*304dcb64SAndre Przywara 
1021*304dcb64SAndre Przywara /*
1022*304dcb64SAndre Przywara  * ioctls for VM fds
1023*304dcb64SAndre Przywara  */
1024*304dcb64SAndre Przywara #define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
1025*304dcb64SAndre Przywara /*
1026*304dcb64SAndre Przywara  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
1027*304dcb64SAndre Przywara  * a vcpu fd.
1028*304dcb64SAndre Przywara  */
1029*304dcb64SAndre Przywara #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
1030*304dcb64SAndre Przywara #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
1031*304dcb64SAndre Przywara /* KVM_SET_MEMORY_ALIAS is obsolete: */
1032*304dcb64SAndre Przywara #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
1033*304dcb64SAndre Przywara #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
1034*304dcb64SAndre Przywara #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
1035*304dcb64SAndre Przywara #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
1036*304dcb64SAndre Przywara 					struct kvm_userspace_memory_region)
1037*304dcb64SAndre Przywara #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
1038*304dcb64SAndre Przywara #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
1039*304dcb64SAndre Przywara 
1040*304dcb64SAndre Przywara /* enable ucontrol for s390 */
1041*304dcb64SAndre Przywara struct kvm_s390_ucas_mapping {
1042*304dcb64SAndre Przywara 	__u64 user_addr;
1043*304dcb64SAndre Przywara 	__u64 vcpu_addr;
1044*304dcb64SAndre Przywara 	__u64 length;
1045*304dcb64SAndre Przywara };
1046*304dcb64SAndre Przywara #define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
1047*304dcb64SAndre Przywara #define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
1048*304dcb64SAndre Przywara #define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long)
1049*304dcb64SAndre Przywara 
1050*304dcb64SAndre Przywara /* Device model IOC */
1051*304dcb64SAndre Przywara #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
1052*304dcb64SAndre Przywara #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
1053*304dcb64SAndre Przywara #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
1054*304dcb64SAndre Przywara #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
1055*304dcb64SAndre Przywara #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
1056*304dcb64SAndre Przywara #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
1057*304dcb64SAndre Przywara #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
1058*304dcb64SAndre Przywara #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
1059*304dcb64SAndre Przywara #define KVM_REGISTER_COALESCED_MMIO \
1060*304dcb64SAndre Przywara 			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
1061*304dcb64SAndre Przywara #define KVM_UNREGISTER_COALESCED_MMIO \
1062*304dcb64SAndre Przywara 			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
1063*304dcb64SAndre Przywara #define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
1064*304dcb64SAndre Przywara 				       struct kvm_assigned_pci_dev)
1065*304dcb64SAndre Przywara #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
1066*304dcb64SAndre Przywara /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
1067*304dcb64SAndre Przywara #define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
1068*304dcb64SAndre Przywara #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
1069*304dcb64SAndre Przywara #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
1070*304dcb64SAndre Przywara #define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
1071*304dcb64SAndre Przywara 				       struct kvm_assigned_pci_dev)
1072*304dcb64SAndre Przywara #define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
1073*304dcb64SAndre Przywara 				       struct kvm_assigned_msix_nr)
1074*304dcb64SAndre Przywara #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
1075*304dcb64SAndre Przywara 				       struct kvm_assigned_msix_entry)
1076*304dcb64SAndre Przywara #define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
1077*304dcb64SAndre Przywara #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
1078*304dcb64SAndre Przywara #define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config)
1079*304dcb64SAndre Przywara #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
1080*304dcb64SAndre Przywara #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
1081*304dcb64SAndre Przywara #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
1082*304dcb64SAndre Przywara #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
1083*304dcb64SAndre Przywara #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
1084*304dcb64SAndre Przywara /* Available with KVM_CAP_PIT_STATE2 */
1085*304dcb64SAndre Przywara #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
1086*304dcb64SAndre Przywara #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
1087*304dcb64SAndre Przywara /* Available with KVM_CAP_PPC_GET_PVINFO */
1088*304dcb64SAndre Przywara #define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
1089*304dcb64SAndre Przywara /* Available with KVM_CAP_TSC_CONTROL */
1090*304dcb64SAndre Przywara #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
1091*304dcb64SAndre Przywara #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
1092*304dcb64SAndre Przywara /* Available with KVM_CAP_PCI_2_3 */
1093*304dcb64SAndre Przywara #define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
1094*304dcb64SAndre Przywara 				       struct kvm_assigned_pci_dev)
1095*304dcb64SAndre Przywara /* Available with KVM_CAP_SIGNAL_MSI */
1096*304dcb64SAndre Przywara #define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
1097*304dcb64SAndre Przywara /* Available with KVM_CAP_PPC_GET_SMMU_INFO */
1098*304dcb64SAndre Przywara #define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
1099*304dcb64SAndre Przywara /* Available with KVM_CAP_PPC_ALLOC_HTAB */
1100*304dcb64SAndre Przywara #define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32)
1101*304dcb64SAndre Przywara #define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
1102*304dcb64SAndre Przywara /* Available with KVM_CAP_RMA */
1103*304dcb64SAndre Przywara #define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
1104*304dcb64SAndre Przywara /* Available with KVM_CAP_PPC_HTAB_FD */
1105*304dcb64SAndre Przywara #define KVM_PPC_GET_HTAB_FD	  _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
1106*304dcb64SAndre Przywara /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
1107*304dcb64SAndre Przywara #define KVM_ARM_SET_DEVICE_ADDR	  _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
1108*304dcb64SAndre Przywara /* Available with KVM_CAP_PPC_RTAS */
1109*304dcb64SAndre Przywara #define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
1110*304dcb64SAndre Przywara 
1111*304dcb64SAndre Przywara /* ioctl for vm fd */
1112*304dcb64SAndre Przywara #define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
1113*304dcb64SAndre Przywara 
1114*304dcb64SAndre Przywara /* ioctls for fds returned by KVM_CREATE_DEVICE */
1115*304dcb64SAndre Przywara #define KVM_SET_DEVICE_ATTR	  _IOW(KVMIO,  0xe1, struct kvm_device_attr)
1116*304dcb64SAndre Przywara #define KVM_GET_DEVICE_ATTR	  _IOW(KVMIO,  0xe2, struct kvm_device_attr)
1117*304dcb64SAndre Przywara #define KVM_HAS_DEVICE_ATTR	  _IOW(KVMIO,  0xe3, struct kvm_device_attr)
1118*304dcb64SAndre Przywara 
1119*304dcb64SAndre Przywara /*
1120*304dcb64SAndre Przywara  * ioctls for vcpu fds
1121*304dcb64SAndre Przywara  */
1122*304dcb64SAndre Przywara #define KVM_RUN                   _IO(KVMIO,   0x80)
1123*304dcb64SAndre Przywara #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
1124*304dcb64SAndre Przywara #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
1125*304dcb64SAndre Przywara #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
1126*304dcb64SAndre Przywara #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
1127*304dcb64SAndre Przywara #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
1128*304dcb64SAndre Przywara #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
1129*304dcb64SAndre Przywara /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
1130*304dcb64SAndre Przywara #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
1131*304dcb64SAndre Przywara #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
1132*304dcb64SAndre Przywara #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
1133*304dcb64SAndre Przywara #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
1134*304dcb64SAndre Przywara #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
1135*304dcb64SAndre Przywara #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
1136*304dcb64SAndre Przywara #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
1137*304dcb64SAndre Przywara #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
1138*304dcb64SAndre Przywara #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
1139*304dcb64SAndre Przywara #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
1140*304dcb64SAndre Przywara #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
1141*304dcb64SAndre Przywara /* Available with KVM_CAP_VAPIC */
1142*304dcb64SAndre Przywara #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
1143*304dcb64SAndre Przywara /* Available with KVM_CAP_VAPIC */
1144*304dcb64SAndre Przywara #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
1145*304dcb64SAndre Przywara /* valid for virtual machine (for floating interrupt)_and_ vcpu */
1146*304dcb64SAndre Przywara #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
1147*304dcb64SAndre Przywara /* store status for s390 */
1148*304dcb64SAndre Przywara #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
1149*304dcb64SAndre Przywara #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
1150*304dcb64SAndre Przywara #define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long)
1151*304dcb64SAndre Przywara /* initial ipl psw for s390 */
1152*304dcb64SAndre Przywara #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
1153*304dcb64SAndre Przywara /* initial reset for s390 */
1154*304dcb64SAndre Przywara #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
1155*304dcb64SAndre Przywara #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
1156*304dcb64SAndre Przywara #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
1157*304dcb64SAndre Przywara /* Available with KVM_CAP_USER_NMI */
1158*304dcb64SAndre Przywara #define KVM_NMI                   _IO(KVMIO,   0x9a)
1159*304dcb64SAndre Przywara /* Available with KVM_CAP_SET_GUEST_DEBUG */
1160*304dcb64SAndre Przywara #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
1161*304dcb64SAndre Przywara /* MCE for x86 */
1162*304dcb64SAndre Przywara #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
1163*304dcb64SAndre Przywara #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
1164*304dcb64SAndre Przywara #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
1165*304dcb64SAndre Przywara /* Available with KVM_CAP_VCPU_EVENTS */
1166*304dcb64SAndre Przywara #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
1167*304dcb64SAndre Przywara #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
1168*304dcb64SAndre Przywara /* Available with KVM_CAP_DEBUGREGS */
1169*304dcb64SAndre Przywara #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
1170*304dcb64SAndre Przywara #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
1171*304dcb64SAndre Przywara /*
1172*304dcb64SAndre Przywara  * vcpu version available with KVM_ENABLE_CAP
1173*304dcb64SAndre Przywara  * vm version available with KVM_CAP_ENABLE_CAP_VM
1174*304dcb64SAndre Przywara  */
1175*304dcb64SAndre Przywara #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
1176*304dcb64SAndre Przywara /* Available with KVM_CAP_XSAVE */
1177*304dcb64SAndre Przywara #define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave)
1178*304dcb64SAndre Przywara #define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave)
1179*304dcb64SAndre Przywara /* Available with KVM_CAP_XCRS */
1180*304dcb64SAndre Przywara #define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs)
1181*304dcb64SAndre Przywara #define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs)
1182*304dcb64SAndre Przywara /* Available with KVM_CAP_SW_TLB */
1183*304dcb64SAndre Przywara #define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
1184*304dcb64SAndre Przywara /* Available with KVM_CAP_ONE_REG */
1185*304dcb64SAndre Przywara #define KVM_GET_ONE_REG		  _IOW(KVMIO,  0xab, struct kvm_one_reg)
1186*304dcb64SAndre Przywara #define KVM_SET_ONE_REG		  _IOW(KVMIO,  0xac, struct kvm_one_reg)
1187*304dcb64SAndre Przywara /* VM is being stopped by host */
1188*304dcb64SAndre Przywara #define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)
1189*304dcb64SAndre Przywara #define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
1190*304dcb64SAndre Przywara #define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
1191*304dcb64SAndre Przywara #define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
1192*304dcb64SAndre Przywara /* Available with KVM_CAP_S390_MEM_OP */
1193*304dcb64SAndre Przywara #define KVM_S390_MEM_OP		  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
1194*304dcb64SAndre Przywara /* Available with KVM_CAP_S390_SKEYS */
1195*304dcb64SAndre Przywara #define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
1196*304dcb64SAndre Przywara #define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
1197*304dcb64SAndre Przywara /* Available with KVM_CAP_S390_INJECT_IRQ */
1198*304dcb64SAndre Przywara #define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
1199*304dcb64SAndre Przywara /* Available with KVM_CAP_S390_IRQ_STATE */
1200*304dcb64SAndre Przywara #define KVM_S390_SET_IRQ_STATE	  _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
1201*304dcb64SAndre Przywara #define KVM_S390_GET_IRQ_STATE	  _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
1202*304dcb64SAndre Przywara 
1203*304dcb64SAndre Przywara #define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)
1204*304dcb64SAndre Przywara #define KVM_DEV_ASSIGN_PCI_2_3		(1 << 1)
1205*304dcb64SAndre Przywara #define KVM_DEV_ASSIGN_MASK_INTX	(1 << 2)
1206*304dcb64SAndre Przywara 
1207*304dcb64SAndre Przywara struct kvm_assigned_pci_dev {
1208*304dcb64SAndre Przywara 	__u32 assigned_dev_id;
1209*304dcb64SAndre Przywara 	__u32 busnr;
1210*304dcb64SAndre Przywara 	__u32 devfn;
1211*304dcb64SAndre Przywara 	__u32 flags;
1212*304dcb64SAndre Przywara 	__u32 segnr;
1213*304dcb64SAndre Przywara 	union {
1214*304dcb64SAndre Przywara 		__u32 reserved[11];
1215*304dcb64SAndre Przywara 	};
1216*304dcb64SAndre Przywara };
1217*304dcb64SAndre Przywara 
1218*304dcb64SAndre Przywara #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
1219*304dcb64SAndre Przywara #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
1220*304dcb64SAndre Przywara #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
1221*304dcb64SAndre Przywara 
1222*304dcb64SAndre Przywara #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
1223*304dcb64SAndre Przywara #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
1224*304dcb64SAndre Przywara #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
1225*304dcb64SAndre Przywara 
1226*304dcb64SAndre Przywara #define KVM_DEV_IRQ_HOST_MASK	 0x00ff
1227*304dcb64SAndre Przywara #define KVM_DEV_IRQ_GUEST_MASK   0xff00
1228*304dcb64SAndre Przywara 
1229*304dcb64SAndre Przywara struct kvm_assigned_irq {
1230*304dcb64SAndre Przywara 	__u32 assigned_dev_id;
1231*304dcb64SAndre Przywara 	__u32 host_irq; /* ignored (legacy field) */
1232*304dcb64SAndre Przywara 	__u32 guest_irq;
1233*304dcb64SAndre Przywara 	__u32 flags;
1234*304dcb64SAndre Przywara 	union {
1235*304dcb64SAndre Przywara 		__u32 reserved[12];
1236*304dcb64SAndre Przywara 	};
1237*304dcb64SAndre Przywara };
1238*304dcb64SAndre Przywara 
1239*304dcb64SAndre Przywara struct kvm_assigned_msix_nr {
1240*304dcb64SAndre Przywara 	__u32 assigned_dev_id;
1241*304dcb64SAndre Przywara 	__u16 entry_nr;
1242*304dcb64SAndre Przywara 	__u16 padding;
1243*304dcb64SAndre Przywara };
1244*304dcb64SAndre Przywara 
1245*304dcb64SAndre Przywara #define KVM_MAX_MSIX_PER_DEV		256
1246*304dcb64SAndre Przywara struct kvm_assigned_msix_entry {
1247*304dcb64SAndre Przywara 	__u32 assigned_dev_id;
1248*304dcb64SAndre Przywara 	__u32 gsi;
1249*304dcb64SAndre Przywara 	__u16 entry; /* The index of entry in the MSI-X table */
1250*304dcb64SAndre Przywara 	__u16 padding[3];
1251*304dcb64SAndre Przywara };
1252*304dcb64SAndre Przywara 
1253*304dcb64SAndre Przywara #endif /* __LINUX_KVM_H */
1254