Blame view

include/linux/kvm.h 22.4 KB
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
1
2
3
4
5
6
  #ifndef __LINUX_KVM_H
  #define __LINUX_KVM_H
  
  /*
   * Userspace interface for /dev/kvm - kernel based virtual machine
   *
dea8caee7   Rusty Russell   KVM: Trivial: /de...
7
   * Note: you must update KVM_API_VERSION if you change this interface.
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
8
   */
00bfddaf7   Jaswinder Singh Rajput   include of <linux...
9
  #include <linux/types.h>
97646202b   Christian Borntraeger   KVM: kvm.h: __use...
10
  #include <linux/compiler.h>
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
11
  #include <linux/ioctl.h>
f6a40e3bd   Jerone Young   KVM: Portability:...
12
  #include <asm/kvm.h>
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
13

2ff81f70b   Avi Kivity   KVM: Remove unuse...
14
  #define KVM_API_VERSION 12
0b76e20b2   Avi Kivity   [PATCH] KVM: API ...
15

c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  /* *** Deprecated interfaces *** */
  
  #define KVM_TRC_SHIFT           16
  
  #define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
  #define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
  
  #define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
  #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
  #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
  
  #define KVM_TRC_HEAD_SIZE       12
  #define KVM_TRC_CYCLE_SIZE      8
  #define KVM_TRC_EXTRA_MAX       7
  
  #define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
  #define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
  #define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
  #define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
  #define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
  #define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
  #define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
  #define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
  #define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
  #define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
  #define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
  #define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
  #define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
  #define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
  #define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
  #define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
  #define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
  #define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
  #define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
  #define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
  #define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
  #define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
  #define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
  #define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
2714d1d3d   Feng (Eric) Liu   KVM: Add trace ma...
55
  struct kvm_user_trace_setup {
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  	__u32 buf_size;
  	__u32 buf_nr;
  };
  
  #define __KVM_DEPRECATED_MAIN_W_0x06 \
  	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
  #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
  #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
  
  #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
  
  struct kvm_breakpoint {
  	__u32 enabled;
  	__u32 padding;
  	__u64 address;
  };
  
  struct kvm_debug_guest {
  	__u32 enabled;
  	__u32 pad;
  	struct kvm_breakpoint breakpoints[4];
  	__u32 singlestep;
2714d1d3d   Feng (Eric) Liu   KVM: Add trace ma...
78
  };
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
79
80
81
  #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
  
  /* *** End of deprecated interfaces *** */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
82
83
84
85
86
87
88
  /* for KVM_CREATE_MEMORY_REGION */
  struct kvm_memory_region {
  	__u32 slot;
  	__u32 flags;
  	__u64 guest_phys_addr;
  	__u64 memory_size; /* bytes */
  };
6fc138d22   Izik Eidus   KVM: Support assi...
89
90
91
92
93
94
95
96
  /* for KVM_SET_USER_MEMORY_REGION */
  struct kvm_userspace_memory_region {
  	__u32 slot;
  	__u32 flags;
  	__u64 guest_phys_addr;
  	__u64 memory_size; /* bytes */
  	__u64 userspace_addr; /* start of the userspace allocated memory */
  };
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
97
98
  /* for kvm_memory_region::flags */
  #define KVM_MEM_LOG_DIRTY_PAGES  1UL
bc6678a33   Marcelo Tosatti   KVM: introduce kv...
99
  #define KVM_MEMSLOT_INVALID      (1UL << 1)
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
100

97222cc83   Eddie Dong   KVM: Emulate loca...
101
  /* for KVM_IRQ_LINE */
85f455f7d   Eddie Dong   KVM: Add support ...
102
103
104
105
106
107
  struct kvm_irq_level {
  	/*
  	 * ACPI gsi notion of irq.
  	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
  	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
  	 */
4925663a0   Gleb Natapov   KVM: Report IRQ i...
108
109
110
111
  	union {
  		__u32 irq;
  		__s32 status;
  	};
85f455f7d   Eddie Dong   KVM: Add support ...
112
113
  	__u32 level;
  };
6ceb9d791   He, Qing   KVM: Add get/set ...
114
115
116
117
118
119
  
  struct kvm_irqchip {
  	__u32 chip_id;
  	__u32 pad;
          union {
  		char dummy[512];  /* reserving space */
7a0eb1960   Avi Kivity   KVM: Avoid using ...
120
  #ifdef __KVM_HAVE_PIT
6ceb9d791   He, Qing   KVM: Add get/set ...
121
  		struct kvm_pic_state pic;
ec10f4750   Zhang Xiantao   KVM: Expose ioapi...
122
  #endif
7a0eb1960   Avi Kivity   KVM: Avoid using ...
123
  #ifdef __KVM_HAVE_IOAPIC
6bf9e962d   He, Qing   KVM: in-kernel IO...
124
  		struct kvm_ioapic_state ioapic;
51e296258   Jerone Young   KVM: Add ifdef in...
125
  #endif
6ceb9d791   He, Qing   KVM: Add get/set ...
126
127
  	} chip;
  };
c5ff41ce6   Jan Kiszka   KVM: Allow PIT em...
128
129
130
131
132
133
134
  /* for KVM_CREATE_PIT2 */
  struct kvm_pit_config {
  	__u32 flags;
  	__u32 pad[15];
  };
  
  #define KVM_PIT_SPEAKER_DUMMY     1
8a45450d0   Avi Kivity   KVM: Replace enum...
135
136
137
138
139
140
141
142
143
144
145
146
  #define KVM_EXIT_UNKNOWN          0
  #define KVM_EXIT_EXCEPTION        1
  #define KVM_EXIT_IO               2
  #define KVM_EXIT_HYPERCALL        3
  #define KVM_EXIT_DEBUG            4
  #define KVM_EXIT_HLT              5
  #define KVM_EXIT_MMIO             6
  #define KVM_EXIT_IRQ_WINDOW_OPEN  7
  #define KVM_EXIT_SHUTDOWN         8
  #define KVM_EXIT_FAIL_ENTRY       9
  #define KVM_EXIT_INTR             10
  #define KVM_EXIT_SET_TPR          11
b209749f5   Avi Kivity   KVM: local APIC T...
147
  #define KVM_EXIT_TPR_ACCESS       12
8f2abe6a1   Christian Borntraeger   KVM: s390: sie in...
148
  #define KVM_EXIT_S390_SIEIC       13
e28acfea5   Christian Borntraeger   KVM: s390: interc...
149
  #define KVM_EXIT_S390_RESET       14
b2312f059   Hollis Blanchard   KVM: ppc: Add DCR...
150
  #define KVM_EXIT_DCR              15
c4abb7c9c   Jan Kiszka   KVM: x86: Support...
151
  #define KVM_EXIT_NMI              16
3f5d18a96   Avi Kivity   KVM: Return to us...
152
  #define KVM_EXIT_INTERNAL_ERROR   17
ad0a048b0   Alexander Graf   KVM: PPC: Add OSI...
153
  #define KVM_EXIT_OSI              18
de56a948b   Paul Mackerras   KVM: PPC: Add sup...
154
  #define KVM_EXIT_PAPR_HCALL	  19
3f5d18a96   Avi Kivity   KVM: Return to us...
155
156
157
  
  /* For KVM_EXIT_INTERNAL_ERROR */
  #define KVM_INTERNAL_ERROR_EMULATION 1
65ac72640   Avi Kivity   KVM: VMX: Report ...
158
  #define KVM_INTERNAL_ERROR_SIMUL_EX 2
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
159

9a2bb7f48   Avi Kivity   KVM: Use a shared...
160
  /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
161
162
  struct kvm_run {
  	/* in */
c1150d8cf   Dor Laor   [PATCH] KVM: Impr...
163
  	__u8 request_interrupt_window;
4531220b7   Jan Kiszka   KVM: x86: Rework ...
164
  	__u8 padding1[7];
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
165
166
  
  	/* out */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
167
  	__u32 exit_reason;
c1150d8cf   Dor Laor   [PATCH] KVM: Impr...
168
169
  	__u8 ready_for_interrupt_injection;
  	__u8 if_flag;
4531220b7   Jan Kiszka   KVM: x86: Rework ...
170
  	__u8 padding2[2];
54810342f   Dor Laor   [PATCH] kvm: Two-...
171
172
  
  	/* in (pre_kvm_run), out (post_kvm_run) */
c1150d8cf   Dor Laor   [PATCH] KVM: Impr...
173
174
  	__u64 cr8;
  	__u64 apic_base;
d7b0b5eb3   Carsten Otte   KVM: s390: Make p...
175
176
177
178
179
  #ifdef __KVM_S390
  	/* the processor status word for s390 */
  	__u64 psw_mask; /* psw upper half */
  	__u64 psw_addr; /* psw lower half */
  #endif
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
180
181
182
  	union {
  		/* KVM_EXIT_UNKNOWN */
  		struct {
8eb7d334b   Avi Kivity   KVM: Fold kvm_run...
183
  			__u64 hardware_exit_reason;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
184
  		} hw;
8eb7d334b   Avi Kivity   KVM: Fold kvm_run...
185
186
187
188
  		/* KVM_EXIT_FAIL_ENTRY */
  		struct {
  			__u64 hardware_entry_failure_reason;
  		} fail_entry;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
189
190
191
192
193
194
  		/* KVM_EXIT_EXCEPTION */
  		struct {
  			__u32 exception;
  			__u32 error_code;
  		} ex;
  		/* KVM_EXIT_IO */
2f8b9ee14   nathan binkert   KVM: Make kvm hea...
195
  		struct {
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
196
197
198
199
  #define KVM_EXIT_IO_IN  0
  #define KVM_EXIT_IO_OUT 1
  			__u8 direction;
  			__u8 size; /* bytes */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
200
  			__u16 port;
039576c03   Avi Kivity   KVM: Avoid guest ...
201
202
  			__u32 count;
  			__u64 data_offset; /* relative to kvm_run start */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
203
204
  		} io;
  		struct {
d0bfb940e   Jan Kiszka   KVM: New guest de...
205
  			struct kvm_debug_exit_arch arch;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
206
207
208
209
210
211
212
213
  		} debug;
  		/* KVM_EXIT_MMIO */
  		struct {
  			__u64 phys_addr;
  			__u8  data[8];
  			__u32 len;
  			__u8  is_write;
  		} mmio;
b4e63f560   Avi Kivity   KVM: Allow usersp...
214
215
  		/* KVM_EXIT_HYPERCALL */
  		struct {
519ef3534   Jeff Dike   KVM: add hypercal...
216
  			__u64 nr;
b4e63f560   Avi Kivity   KVM: Allow usersp...
217
218
219
220
221
  			__u64 args[6];
  			__u64 ret;
  			__u32 longmode;
  			__u32 pad;
  		} hypercall;
b209749f5   Avi Kivity   KVM: local APIC T...
222
223
224
225
226
227
  		/* KVM_EXIT_TPR_ACCESS */
  		struct {
  			__u64 rip;
  			__u32 is_write;
  			__u32 pad;
  		} tpr_access;
8f2abe6a1   Christian Borntraeger   KVM: s390: sie in...
228
229
230
  		/* KVM_EXIT_S390_SIEIC */
  		struct {
  			__u8 icptcode;
8f2abe6a1   Christian Borntraeger   KVM: s390: sie in...
231
232
233
  			__u16 ipa;
  			__u32 ipb;
  		} s390_sieic;
e28acfea5   Christian Borntraeger   KVM: s390: interc...
234
235
236
237
238
239
240
  		/* KVM_EXIT_S390_RESET */
  #define KVM_S390_RESET_POR       1
  #define KVM_S390_RESET_CLEAR     2
  #define KVM_S390_RESET_SUBSYSTEM 4
  #define KVM_S390_RESET_CPU_INIT  8
  #define KVM_S390_RESET_IPL       16
  		__u64 s390_reset_flags;
b2312f059   Hollis Blanchard   KVM: ppc: Add DCR...
241
242
243
244
245
246
  		/* KVM_EXIT_DCR */
  		struct {
  			__u32 dcrn;
  			__u32 data;
  			__u8  is_write;
  		} dcr;
3f5d18a96   Avi Kivity   KVM: Return to us...
247
248
  		struct {
  			__u32 suberror;
a9c7399d6   Avi Kivity   KVM: Allow intern...
249
250
251
  			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
  			__u32 ndata;
  			__u64 data[16];
3f5d18a96   Avi Kivity   KVM: Return to us...
252
  		} internal;
ad0a048b0   Alexander Graf   KVM: PPC: Add OSI...
253
254
255
256
  		/* KVM_EXIT_OSI */
  		struct {
  			__u64 gprs[32];
  		} osi;
de56a948b   Paul Mackerras   KVM: PPC: Add sup...
257
258
259
260
261
  		struct {
  			__u64 nr;
  			__u64 ret;
  			__u64 args[9];
  		} papr_hcall;
24cbc7e9c   Avi Kivity   KVM: Future-proof...
262
263
  		/* Fix the size of the union. */
  		char padding[256];
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
264
265
  	};
  };
5f94c1741   Laurent Vivier   KVM: Add coalesce...
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
  /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
  
  struct kvm_coalesced_mmio_zone {
  	__u64 addr;
  	__u32 size;
  	__u32 pad;
  };
  
  struct kvm_coalesced_mmio {
  	__u64 phys_addr;
  	__u32 len;
  	__u32 pad;
  	__u8  data[8];
  };
  
  struct kvm_coalesced_mmio_ring {
  	__u32 first, last;
  	struct kvm_coalesced_mmio coalesced_mmio[0];
  };
  
  #define KVM_COALESCED_MMIO_MAX \
  	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
  	 sizeof(struct kvm_coalesced_mmio))
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
289
290
291
292
  /* for KVM_TRANSLATE */
  struct kvm_translation {
  	/* in */
  	__u64 linear_address;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
293
294
295
296
297
298
  
  	/* out */
  	__u64 physical_address;
  	__u8  valid;
  	__u8  writeable;
  	__u8  usermode;
8cd133073   Avi Kivity   [PATCH] kvm: Fix ...
299
  	__u8  pad[5];
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
300
301
302
303
304
  };
  
  /* for KVM_INTERRUPT */
  struct kvm_interrupt {
  	/* in */
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
305
306
  	__u32 irq;
  };
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
307
308
309
  /* for KVM_GET_DIRTY_LOG */
  struct kvm_dirty_log {
  	__u32 slot;
2f8b9ee14   nathan binkert   KVM: Make kvm hea...
310
  	__u32 padding1;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
311
312
  	union {
  		void __user *dirty_bitmap; /* one bit per page */
2f8b9ee14   nathan binkert   KVM: Make kvm hea...
313
  		__u64 padding2;
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
314
315
  	};
  };
1961d276c   Avi Kivity   KVM: Add guest mo...
316
317
318
319
320
  /* for KVM_SET_SIGNAL_MASK */
  struct kvm_signal_mask {
  	__u32 len;
  	__u8  sigset[0];
  };
b209749f5   Avi Kivity   KVM: local APIC T...
321
322
323
324
325
326
  /* for KVM_TPR_ACCESS_REPORTING */
  struct kvm_tpr_access_ctl {
  	__u32 enabled;
  	__u32 flags;
  	__u32 reserved[8];
  };
b93463aa5   Avi Kivity   KVM: Accelerated ...
327
328
329
330
  /* for KVM_SET_VAPIC_ADDR */
  struct kvm_vapic_addr {
  	__u64 vapic_addr;
  };
62d9f0dbc   Marcelo Tosatti   KVM: add ioctls t...
331
332
333
334
335
336
337
338
339
340
341
  /* for KVM_SET_MPSTATE */
  
  #define KVM_MP_STATE_RUNNABLE          0
  #define KVM_MP_STATE_UNINITIALIZED     1
  #define KVM_MP_STATE_INIT_RECEIVED     2
  #define KVM_MP_STATE_HALTED            3
  #define KVM_MP_STATE_SIPI_RECEIVED     4
  
  struct kvm_mp_state {
  	__u32 mp_state;
  };
b0c632db6   Heiko Carstens   KVM: s390: arch b...
342
343
344
345
  struct kvm_s390_psw {
  	__u64 mask;
  	__u64 addr;
  };
ba5c1e9b6   Carsten Otte   KVM: s390: interr...
346
347
348
349
350
351
352
353
  /* valid values for type in kvm_s390_interrupt */
  #define KVM_S390_SIGP_STOP		0xfffe0000u
  #define KVM_S390_PROGRAM_INT		0xfffe0001u
  #define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u
  #define KVM_S390_RESTART		0xfffe0003u
  #define KVM_S390_INT_VIRTIO		0xffff2603u
  #define KVM_S390_INT_SERVICE		0xffff2401u
  #define KVM_S390_INT_EMERGENCY		0xffff1201u
7697e71f7   Christian Ehrhardt   KVM: s390: implem...
354
  #define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
ba5c1e9b6   Carsten Otte   KVM: s390: interr...
355
356
357
358
359
360
  
  struct kvm_s390_interrupt {
  	__u32 type;
  	__u32 parm;
  	__u64 parm64;
  };
d0bfb940e   Jan Kiszka   KVM: New guest de...
361
362
363
364
365
366
367
368
369
370
  /* for KVM_SET_GUEST_DEBUG */
  
  #define KVM_GUESTDBG_ENABLE		0x00000001
  #define KVM_GUESTDBG_SINGLESTEP		0x00000002
  
  struct kvm_guest_debug {
  	__u32 control;
  	__u32 pad;
  	struct kvm_guest_debug_arch arch;
  };
d34e6b175   Gregory Haskins   KVM: add ioeventf...
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
  enum {
  	kvm_ioeventfd_flag_nr_datamatch,
  	kvm_ioeventfd_flag_nr_pio,
  	kvm_ioeventfd_flag_nr_deassign,
  	kvm_ioeventfd_flag_nr_max,
  };
  
  #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
  #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
  #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
  
  #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
  
  struct kvm_ioeventfd {
  	__u64 datamatch;
  	__u64 addr;        /* legal pio/mmio address */
  	__u32 len;         /* 1, 2, 4, or 8 bytes    */
  	__s32 fd;
  	__u32 flags;
  	__u8  pad[36];
  };
71fbfd5f3   Alexander Graf   KVM: Add support ...
392
393
394
395
396
397
398
399
  /* for KVM_ENABLE_CAP */
  struct kvm_enable_cap {
  	/* in */
  	__u32 cap;
  	__u32 flags;
  	__u64 args[4];
  	__u8  pad[64];
  };
15711e9c9   Alexander Graf   KVM: PPC: Add get...
400
401
402
403
404
405
406
  /* for KVM_PPC_GET_PVINFO */
  struct kvm_ppc_pvinfo {
  	/* out */
  	__u32 flags;
  	__u32 hcall[4];
  	__u8  pad[108];
  };
6aa8b732c   Avi Kivity   [PATCH] kvm: user...
407
  #define KVMIO 0xAE
f17abe9a4   Avi Kivity   KVM: Create an in...
408
409
410
  /*
   * ioctls for /dev/kvm fds:
   */
739872c56   Avi Kivity   KVM: Renumber ioctls
411
412
413
  #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
  #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
  #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
b0c632db6   Heiko Carstens   KVM: s390: arch b...
414
415
  
  #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
5d308f455   Avi Kivity   KVM: Add method t...
416
417
418
419
420
  /*
   * Check if a kvm extension is available.  Argument is extension number,
   * return is 1 (yes) or 0 (no, sorry).
   */
  #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
07c45a366   Avi Kivity   KVM: Allow kernel...
421
422
423
424
  /*
   * Get size for mmap(vcpu_fd)
   */
  #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
674eea0fc   Avi Kivity   KVM: Make the sup...
425
  #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
426
427
428
  #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
  #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
  #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
f17abe9a4   Avi Kivity   KVM: Create an in...
429
  /*
85f455f7d   Eddie Dong   KVM: Add support ...
430
431
432
   * Extension capability list.
   */
  #define KVM_CAP_IRQCHIP	  0
b6958ce44   Eddie Dong   KVM: Emulate hlt ...
433
  #define KVM_CAP_HLT	  1
82ce2c968   Izik Eidus   KVM: Allow dynami...
434
  #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
6fc138d22   Izik Eidus   KVM: Support assi...
435
  #define KVM_CAP_USER_MEMORY 3
cbc940229   Izik Eidus   KVM: Add ioctl to...
436
  #define KVM_CAP_SET_TSS_ADDR 4
b209749f5   Avi Kivity   KVM: local APIC T...
437
  #define KVM_CAP_VAPIC 6
674eea0fc   Avi Kivity   KVM: Make the sup...
438
  #define KVM_CAP_EXT_CPUID 7
18068523d   Glauber de Oliveira Costa   KVM: paravirtuali...
439
  #define KVM_CAP_CLOCKSOURCE 8
8c3ba334f   Sasha Levin   KVM: x86: Raise t...
440
  #define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
a988b910e   Avi Kivity   KVM: Add API for ...
441
  #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
7837699fa   Sheng Yang   KVM: In kernel PI...
442
  #define KVM_CAP_PIT 11
a28e4f5a6   Marcelo Tosatti   KVM: add basic pa...
443
  #define KVM_CAP_NOP_IO_DELAY 12
2f333bcb4   Marcelo Tosatti   KVM: MMU: hyperca...
444
  #define KVM_CAP_PV_MMU 13
62d9f0dbc   Marcelo Tosatti   KVM: add ioctls t...
445
  #define KVM_CAP_MP_STATE 14
5f94c1741   Laurent Vivier   KVM: Add coalesce...
446
  #define KVM_CAP_COALESCED_MMIO 15
ed8486243   Avi Kivity   KVM: Advertise sy...
447
  #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
7a0eb1960   Avi Kivity   KVM: Avoid using ...
448
  #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
449
  #define KVM_CAP_DEVICE_ASSIGNMENT 17
8a98f6648   Xiantao Zhang   KVM: Move device ...
450
  #endif
62c476c7c   Ben-Ami Yassour   KVM: Device Assig...
451
  #define KVM_CAP_IOMMU 18
7a0eb1960   Avi Kivity   KVM: Avoid using ...
452
  #ifdef __KVM_HAVE_MSI
6b9cc7fd4   Sheng Yang   KVM: Enable MSI f...
453
454
  #define KVM_CAP_DEVICE_MSI 20
  #endif
1a811b616   Avi Kivity   KVM: Advertise th...
455
456
  /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
  #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
7a0eb1960   Avi Kivity   KVM: Avoid using ...
457
  #ifdef __KVM_HAVE_USER_NMI
4531220b7   Jan Kiszka   KVM: x86: Rework ...
458
459
  #define KVM_CAP_USER_NMI 22
  #endif
91b2ae773   Avi Kivity   KVM: Avoid using ...
460
  #ifdef __KVM_HAVE_GUEST_DEBUG
d0bfb940e   Jan Kiszka   KVM: New guest de...
461
  #define KVM_CAP_SET_GUEST_DEBUG 23
971cc3dcb   Jan Kiszka   KVM: Advertise gu...
462
  #endif
91b2ae773   Avi Kivity   KVM: Avoid using ...
463
  #ifdef __KVM_HAVE_PIT
52d939a0b   Marcelo Tosatti   KVM: PIT: provide...
464
465
  #define KVM_CAP_REINJECT_CONTROL 24
  #endif
91b2ae773   Avi Kivity   KVM: Avoid using ...
466
  #ifdef __KVM_HAVE_IOAPIC
399ec807d   Avi Kivity   KVM: Userspace co...
467
468
  #define KVM_CAP_IRQ_ROUTING 25
  #endif
4925663a0   Gleb Natapov   KVM: Report IRQ i...
469
  #define KVM_CAP_IRQ_INJECT_STATUS 26
2df8a40bc   Weidong Han   KVM: define KVM_C...
470
471
472
  #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
  #define KVM_CAP_DEVICE_DEASSIGNMENT 27
  #endif
d510d6cc6   Sheng Yang   KVM: Enable MSI-X...
473
474
475
  #ifdef __KVM_HAVE_MSIX
  #define KVM_CAP_DEVICE_MSIX 28
  #endif
e56d532f2   Sheng Yang   KVM: Device assig...
476
  #define KVM_CAP_ASSIGN_DEV_IRQ 29
4cd481f68   Jan Kiszka   KVM: Fix overlapp...
477
478
  /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
  #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
890ca9aef   Huang Ying   KVM: Add MCE support
479
480
481
  #ifdef __KVM_HAVE_MCE
  #define KVM_CAP_MCE 31
  #endif
721eecbf4   Gregory Haskins   KVM: irqfd
482
  #define KVM_CAP_IRQFD 32
c5ff41ce6   Jan Kiszka   KVM: Allow PIT em...
483
484
485
  #ifdef __KVM_HAVE_PIT
  #define KVM_CAP_PIT2 33
  #endif
73880c80a   Gleb Natapov   KVM: Break depend...
486
  #define KVM_CAP_SET_BOOT_CPU_ID 34
e9f427573   Beth Kon   KVM: PIT support ...
487
488
489
  #ifdef __KVM_HAVE_PIT_STATE2
  #define KVM_CAP_PIT_STATE2 35
  #endif
d34e6b175   Gregory Haskins   KVM: add ioeventf...
490
  #define KVM_CAP_IOEVENTFD 36
b927a3cec   Sheng Yang   KVM: VMX: Introdu...
491
  #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
ffde22ac5   Ed Swierk   KVM: Xen PV-on-HV...
492
493
494
  #ifdef __KVM_HAVE_XEN_HVM
  #define KVM_CAP_XEN_HVM 38
  #endif
afbcf7ab8   Glauber Costa   KVM: allow usersp...
495
  #define KVM_CAP_ADJUST_CLOCK 39
a9c7399d6   Avi Kivity   KVM: Allow intern...
496
  #define KVM_CAP_INTERNAL_ERROR_DATA 40
3cfc3092f   Jan Kiszka   KVM: x86: Add KVM...
497
498
499
  #ifdef __KVM_HAVE_VCPU_EVENTS
  #define KVM_CAP_VCPU_EVENTS 41
  #endif
d7b0b5eb3   Carsten Otte   KVM: s390: Make p...
500
  #define KVM_CAP_S390_PSW 42
e15a11370   Alexander Graf   powerpc/kvm: Sync...
501
  #define KVM_CAP_PPC_SEGSTATE 43
55cd8e5a4   Gleb Natapov   KVM: Implement ba...
502
  #define KVM_CAP_HYPERV 44
10388a071   Gleb Natapov   KVM: Add HYPER-V ...
503
  #define KVM_CAP_HYPERV_VAPIC 45
c25bc1638   Gleb Natapov   KVM: Implement No...
504
  #define KVM_CAP_HYPERV_SPIN 46
ab9f4ecbb   Zhai, Edwin   KVM: enable PCI m...
505
  #define KVM_CAP_PCI_SEGMENT 47
c10207fe8   Alexander Graf   KVM: PPC: Add cap...
506
  #define KVM_CAP_PPC_PAIRED_SINGLES 48
48005f64d   Jan Kiszka   KVM: x86: Save&re...
507
  #define KVM_CAP_INTR_SHADOW 49
a1efbe77c   Jan Kiszka   KVM: x86: Add sup...
508
509
510
  #ifdef __KVM_HAVE_DEBUGREGS
  #define KVM_CAP_DEBUGREGS 50
  #endif
d2be1651b   Jan Kiszka   KVM: x86: Add KVM...
511
  #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
ad0a048b0   Alexander Graf   KVM: PPC: Add OSI...
512
  #define KVM_CAP_PPC_OSI 52
18978768d   Alexander Graf   KVM: PPC: Allow u...
513
  #define KVM_CAP_PPC_UNSET_IRQ 53
71fbfd5f3   Alexander Graf   KVM: Add support ...
514
  #define KVM_CAP_ENABLE_CAP 54
2d5b5a665   Sheng Yang   KVM: x86: XSAVE/X...
515
516
517
518
519
520
  #ifdef __KVM_HAVE_XSAVE
  #define KVM_CAP_XSAVE 55
  #endif
  #ifdef __KVM_HAVE_XCRS
  #define KVM_CAP_XCRS 56
  #endif
15711e9c9   Alexander Graf   KVM: PPC: Add get...
521
  #define KVM_CAP_PPC_GET_PVINFO 57
7b4203e8c   Alexander Graf   KVM: PPC: Expose ...
522
  #define KVM_CAP_PPC_IRQ_LEVEL 58
344d9588a   Gleb Natapov   KVM: Add PV MSR t...
523
  #define KVM_CAP_ASYNC_PF 59
92a1f12d2   Joerg Roedel   KVM: X86: Impleme...
524
525
  #define KVM_CAP_TSC_CONTROL 60
  #define KVM_CAP_GET_TSC_KHZ 61
5ce941ee4   Scott Wood   KVM: PPC: booke: ...
526
  #define KVM_CAP_PPC_BOOKE_SREGS 62
54738c097   David Gibson   KVM: PPC: Acceler...
527
  #define KVM_CAP_SPAPR_TCE 63
371fefd6f   Paul Mackerras   KVM: PPC: Allow b...
528
  #define KVM_CAP_PPC_SMT 64
aa04b4cc5   Paul Mackerras   KVM: PPC: Allocat...
529
  #define KVM_CAP_PPC_RMA	65
8c3ba334f   Sasha Levin   KVM: x86: Raise t...
530
  #define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
930b412a0   Alexander Graf   KVM: PPC: Enable ...
531
  #define KVM_CAP_PPC_PAPR 68
b6cf8788a   Christian Borntraeger   [S390] kvm: exten...
532
  #define KVM_CAP_S390_GMAP 71
399ec807d   Avi Kivity   KVM: Userspace co...
533
534
535
536
537
538
539
  
  #ifdef KVM_CAP_IRQ_ROUTING
  
  struct kvm_irq_routing_irqchip {
  	__u32 irqchip;
  	__u32 pin;
  };
79950e107   Sheng Yang   KVM: Use irq rout...
540
541
542
543
544
545
  struct kvm_irq_routing_msi {
  	__u32 address_lo;
  	__u32 address_hi;
  	__u32 data;
  	__u32 pad;
  };
399ec807d   Avi Kivity   KVM: Userspace co...
546
547
  /* gsi routing entry types */
  #define KVM_IRQ_ROUTING_IRQCHIP 1
79950e107   Sheng Yang   KVM: Use irq rout...
548
  #define KVM_IRQ_ROUTING_MSI 2
399ec807d   Avi Kivity   KVM: Userspace co...
549
550
551
552
553
554
555
556
  
  struct kvm_irq_routing_entry {
  	__u32 gsi;
  	__u32 type;
  	__u32 flags;
  	__u32 pad;
  	union {
  		struct kvm_irq_routing_irqchip irqchip;
79950e107   Sheng Yang   KVM: Use irq rout...
557
  		struct kvm_irq_routing_msi msi;
399ec807d   Avi Kivity   KVM: Userspace co...
558
559
560
561
562
563
564
565
566
567
568
  		__u32 pad[8];
  	} u;
  };
  
  struct kvm_irq_routing {
  	__u32 nr;
  	__u32 flags;
  	struct kvm_irq_routing_entry entries[0];
  };
  
  #endif
85f455f7d   Eddie Dong   KVM: Add support ...
569

890ca9aef   Huang Ying   KVM: Add MCE support
570
571
572
573
574
575
576
577
578
579
580
581
  #ifdef KVM_CAP_MCE
  /* x86 MCE */
  struct kvm_x86_mce {
  	__u64 status;
  	__u64 addr;
  	__u64 misc;
  	__u64 mcg_status;
  	__u8 bank;
  	__u8 pad1[7];
  	__u64 pad2[3];
  };
  #endif
ffde22ac5   Ed Swierk   KVM: Xen PV-on-HV...
582
583
584
585
586
587
588
589
590
591
592
  #ifdef KVM_CAP_XEN_HVM
  struct kvm_xen_hvm_config {
  	__u32 flags;
  	__u32 msr;
  	__u64 blob_addr_32;
  	__u64 blob_addr_64;
  	__u8 blob_size_32;
  	__u8 blob_size_64;
  	__u8 pad2[30];
  };
  #endif
721eecbf4   Gregory Haskins   KVM: irqfd
593
594
595
596
597
598
599
600
  #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
  
  struct kvm_irqfd {
  	__u32 fd;
  	__u32 gsi;
  	__u32 flags;
  	__u8  pad[20];
  };
afbcf7ab8   Glauber Costa   KVM: allow usersp...
601
602
603
604
605
  struct kvm_clock_data {
  	__u64 clock;
  	__u32 flags;
  	__u32 pad[9];
  };
85f455f7d   Eddie Dong   KVM: Add support ...
606
  /*
f17abe9a4   Avi Kivity   KVM: Create an in...
607
608
   * ioctls for VM fds
   */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
609
  #define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
bccf2150f   Avi Kivity   KVM: Per-vcpu inodes
610
611
612
613
  /*
   * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
   * a vcpu fd.
   */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
614
615
  #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
  #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
a1f4d3950   Avi Kivity   KVM: Remove memor...
616
  /* KVM_SET_MEMORY_ALIAS is obsolete: */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
617
618
619
620
  #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
  #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
  #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
  #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
6a4a98397   Avi Kivity   KVM: Reorder ioct...
621
  					struct kvm_userspace_memory_region)
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
622
623
  #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
  #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
85f455f7d   Eddie Dong   KVM: Add support ...
624
  /* Device model IOC */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
625
626
627
628
629
630
631
632
  #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
  #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
  #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
  #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
  #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
  #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
  #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
  #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
5f94c1741   Laurent Vivier   KVM: Add coalesce...
633
634
635
636
  #define KVM_REGISTER_COALESCED_MMIO \
  			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
  #define KVM_UNREGISTER_COALESCED_MMIO \
  			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
637
638
639
  #define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
  				       struct kvm_assigned_pci_dev)
  #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
e56d532f2   Sheng Yang   KVM: Device assig...
640
  /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
  #define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
  #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
  #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
  #define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
  				       struct kvm_assigned_pci_dev)
  #define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
  				       struct kvm_assigned_msix_nr)
  #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
  				       struct kvm_assigned_msix_entry)
  #define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
  #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
  #define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config)
  #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
  #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
  #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
  #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
  #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
  /* Available with KVM_CAP_PIT_STATE2 */
  #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
  #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
15711e9c9   Alexander Graf   KVM: PPC: Add get...
661
662
  /* Available with KVM_CAP_PPC_GET_PVINFO */
  #define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
92a1f12d2   Joerg Roedel   KVM: X86: Impleme...
663
664
665
  /* Available with KVM_CAP_TSC_CONTROL */
  #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
  #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
bccf2150f   Avi Kivity   KVM: Per-vcpu inodes
666
667
668
669
  
  /*
   * ioctls for vcpu fds
   */
739872c56   Avi Kivity   KVM: Renumber ioctls
670
671
672
673
674
675
676
  #define KVM_RUN                   _IO(KVMIO,   0x80)
  #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
  #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
  #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
  #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
  #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
  #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
d0bfb940e   Jan Kiszka   KVM: New guest de...
677
  /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
678
  #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
739872c56   Avi Kivity   KVM: Renumber ioctls
679
680
681
  #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
  #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
  #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
1961d276c   Avi Kivity   KVM: Add guest mo...
682
  #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
b8836737d   Avi Kivity   KVM: Add fpu get/...
683
684
  #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
  #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
96ad2cc61   Eddie Dong   KVM: in-kernel LA...
685
686
  #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
  #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
077167174   Dan Kenigsberg   KVM: Enhance gues...
687
688
  #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
  #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
b209749f5   Avi Kivity   KVM: local APIC T...
689
  /* Available with KVM_CAP_VAPIC */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
690
  #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
b93463aa5   Avi Kivity   KVM: Accelerated ...
691
692
  /* Available with KVM_CAP_VAPIC */
  #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
ba5c1e9b6   Carsten Otte   KVM: s390: interr...
693
694
  /* valid for virtual machine (for floating interrupt)_and_ vcpu */
  #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
b0c632db6   Heiko Carstens   KVM: s390: arch b...
695
696
697
698
699
700
701
  /* store status for s390 */
  #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
  #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
  #define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long)
  /* initial ipl psw for s390 */
  #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
  /* initial reset for s390 */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
702
  #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
62d9f0dbc   Marcelo Tosatti   KVM: add ioctls t...
703
704
  #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
  #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
c4abb7c9c   Jan Kiszka   KVM: x86: Support...
705
  /* Available with KVM_CAP_NMI */
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
706
  #define KVM_NMI                   _IO(KVMIO,   0x9a)
d0bfb940e   Jan Kiszka   KVM: New guest de...
707
708
  /* Available with KVM_CAP_SET_GUEST_DEBUG */
  #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
890ca9aef   Huang Ying   KVM: Add MCE support
709
710
711
712
  /* MCE for x86 */
  #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
  #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
  #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
713
  /* IA64 stack access */
e9a999fe1   Jes Sorensen   KVM: ia64: stack ...
714
715
  #define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
  #define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
3cfc3092f   Jan Kiszka   KVM: x86: Add KVM...
716
717
718
  /* Available with KVM_CAP_VCPU_EVENTS */
  #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
  #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
a1efbe77c   Jan Kiszka   KVM: x86: Add sup...
719
720
721
  /* Available with KVM_CAP_DEBUGREGS */
  #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
  #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
71fbfd5f3   Alexander Graf   KVM: Add support ...
722
  #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
2d5b5a665   Sheng Yang   KVM: x86: XSAVE/X...
723
724
725
726
727
728
  /* Available with KVM_CAP_XSAVE */
  #define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave)
  #define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave)
  /* Available with KVM_CAP_XCRS */
  #define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs)
  #define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs)
54738c097   David Gibson   KVM: PPC: Acceler...
729
  #define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
aa04b4cc5   Paul Mackerras   KVM: PPC: Allocat...
730
731
  /* Available with KVM_CAP_RMA */
  #define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
d98e63463   Hollis Blanchard   KVM: Move KVM TRA...
732

e56d532f2   Sheng Yang   KVM: Device assig...
733
  #define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
734
735
736
737
738
  struct kvm_assigned_pci_dev {
  	__u32 assigned_dev_id;
  	__u32 busnr;
  	__u32 devfn;
  	__u32 flags;
ab9f4ecbb   Zhai, Edwin   KVM: enable PCI m...
739
  	__u32 segnr;
bb45e202e   Avi Kivity   KVM: Future-proof...
740
  	union {
ab9f4ecbb   Zhai, Edwin   KVM: enable PCI m...
741
  		__u32 reserved[11];
bb45e202e   Avi Kivity   KVM: Future-proof...
742
  	};
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
743
  };
e56d532f2   Sheng Yang   KVM: Device assig...
744
745
746
747
748
749
750
751
752
753
  #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
  #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
  #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
  
  #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
  #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
  #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
  
  #define KVM_DEV_IRQ_HOST_MASK	 0x00ff
  #define KVM_DEV_IRQ_GUEST_MASK   0xff00
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
754
755
  struct kvm_assigned_irq {
  	__u32 assigned_dev_id;
91e3d71db   Jan Kiszka   KVM: Clarify KVM_...
756
  	__u32 host_irq; /* ignored (legacy field) */
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
757
758
  	__u32 guest_irq;
  	__u32 flags;
bb45e202e   Avi Kivity   KVM: Future-proof...
759
760
761
  	union {
  		__u32 reserved[12];
  	};
4d5c5d0fe   Ben-Ami Yassour   KVM: pci device a...
762
  };
c1e015142   Sheng Yang   KVM: Ioctls for i...
763
764
765
766
767
  struct kvm_assigned_msix_nr {
  	__u32 assigned_dev_id;
  	__u16 entry_nr;
  	__u16 padding;
  };
e73333914   Sheng Yang   KVM: Downsize max...
768
  #define KVM_MAX_MSIX_PER_DEV		256
c1e015142   Sheng Yang   KVM: Ioctls for i...
769
770
771
772
773
774
  struct kvm_assigned_msix_entry {
  	__u32 assigned_dev_id;
  	__u32 gsi;
  	__u16 entry; /* The index of entry in the MSI-X table */
  	__u16 padding[3];
  };
c54d2aba2   Jan Kiszka   KVM: Reorder IOCT...
775
  #endif /* __LINUX_KVM_H */