kvm.h 52.8 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
Avi Kivity's avatar
Avi Kivity committed
2
3
4
5
6
7
#ifndef __LINUX_KVM_H
#define __LINUX_KVM_H

/*
 * Userspace interface for /dev/kvm - kernel based virtual machine
 *
8
 * Note: you must update KVM_API_VERSION if you change this interface.
Avi Kivity's avatar
Avi Kivity committed
9
10
 */

11
#include <linux/const.h>
12
#include <linux/types.h>
13
#include <linux/compiler.h>
Avi Kivity's avatar
Avi Kivity committed
14
#include <linux/ioctl.h>
15
#include <asm/kvm.h>
Avi Kivity's avatar
Avi Kivity committed
16

17
#define KVM_API_VERSION 12
Avi Kivity's avatar
Avi Kivity committed
18

Jan Kiszka's avatar
Jan Kiszka committed
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* *** Deprecated interfaces *** */

#define KVM_TRC_SHIFT           16

#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))

#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)

#define KVM_TRC_HEAD_SIZE       12
#define KVM_TRC_CYCLE_SIZE      8
#define KVM_TRC_EXTRA_MAX       7

#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)

Feng (Eric) Liu's avatar
Feng (Eric) Liu committed
59
struct kvm_user_trace_setup {
Jan Kiszka's avatar
Jan Kiszka committed
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
	__u32 buf_size;
	__u32 buf_nr;
};

#define __KVM_DEPRECATED_MAIN_W_0x06 \
	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)

#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)

struct kvm_breakpoint {
	__u32 enabled;
	__u32 padding;
	__u64 address;
};

struct kvm_debug_guest {
	__u32 enabled;
	__u32 pad;
	struct kvm_breakpoint breakpoints[4];
	__u32 singlestep;
Feng (Eric) Liu's avatar
Feng (Eric) Liu committed
82
83
};

Jan Kiszka's avatar
Jan Kiszka committed
84
85
86
87
88
#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)

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


Avi Kivity's avatar
Avi Kivity committed
89
90
91
92
93
94
95
96
/* for KVM_CREATE_MEMORY_REGION */
struct kvm_memory_region {
	__u32 slot;
	__u32 flags;
	__u64 guest_phys_addr;
	__u64 memory_size; /* bytes */
};

97
98
99
100
101
102
103
104
105
/* for KVM_SET_USER_MEMORY_REGION */
struct kvm_userspace_memory_region {
	__u32 slot;
	__u32 flags;
	__u64 guest_phys_addr;
	__u64 memory_size; /* bytes */
	__u64 userspace_addr; /* start of the userspace allocated memory */
};

106
107
108
109
110
/*
 * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace,
 * other bits are reserved for kvm internal use which are defined in
 * include/linux/kvm_host.h.
 */
111
112
#define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
#define KVM_MEM_READONLY	(1UL << 1)
Avi Kivity's avatar
Avi Kivity committed
113

Eddie Dong's avatar
Eddie Dong committed
114
/* for KVM_IRQ_LINE */
115
116
117
118
119
struct kvm_irq_level {
	/*
	 * ACPI gsi notion of irq.
	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
120
	 * For ARM: See Documentation/virt/kvm/api.rst
121
	 */
122
123
124
125
	union {
		__u32 irq;
		__s32 status;
	};
126
127
128
	__u32 level;
};

129
130
131
132
133
134

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

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

#define KVM_PIT_SPEAKER_DUMMY     1

152
153
154
155
156
157
158
struct kvm_s390_skeys {
	__u64 start_gfn;
	__u64 count;
	__u64 skeydata_addr;
	__u32 flags;
	__u32 reserved[9];
};
Andrey Smetanin's avatar
Andrey Smetanin committed
159

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

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

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

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

234
235
236
#define KVM_S390_GET_SKEYS_NONE   1
#define KVM_S390_SKEYS_MAX        1048576

Avi Kivity's avatar
Avi Kivity committed
237
238
239
240
241
242
243
244
245
246
247
248
#define KVM_EXIT_UNKNOWN          0
#define KVM_EXIT_EXCEPTION        1
#define KVM_EXIT_IO               2
#define KVM_EXIT_HYPERCALL        3
#define KVM_EXIT_DEBUG            4
#define KVM_EXIT_HLT              5
#define KVM_EXIT_MMIO             6
#define KVM_EXIT_IRQ_WINDOW_OPEN  7
#define KVM_EXIT_SHUTDOWN         8
#define KVM_EXIT_FAIL_ENTRY       9
#define KVM_EXIT_INTR             10
#define KVM_EXIT_SET_TPR          11
249
#define KVM_EXIT_TPR_ACCESS       12
250
#define KVM_EXIT_S390_SIEIC       13
251
#define KVM_EXIT_S390_RESET       14
Alexander Graf's avatar
Alexander Graf committed
252
#define KVM_EXIT_DCR              15 /* deprecated */
253
#define KVM_EXIT_NMI              16
254
#define KVM_EXIT_INTERNAL_ERROR   17
255
#define KVM_EXIT_OSI              18
256
#define KVM_EXIT_PAPR_HCALL	  19
257
#define KVM_EXIT_S390_UCONTROL	  20
258
#define KVM_EXIT_WATCHDOG         21
259
#define KVM_EXIT_S390_TSCH        22
260
#define KVM_EXIT_EPR              23
261
#define KVM_EXIT_SYSTEM_EVENT     24
262
#define KVM_EXIT_S390_STSI        25
263
#define KVM_EXIT_IOAPIC_EOI       26
Andrey Smetanin's avatar
Andrey Smetanin committed
264
#define KVM_EXIT_HYPERV           27
265
#define KVM_EXIT_ARM_NISV         28
266
267
#define KVM_EXIT_X86_RDMSR        29
#define KVM_EXIT_X86_WRMSR        30
268
#define KVM_EXIT_DIRTY_RING_FULL  31
269
#define KVM_EXIT_AP_RESET_HOLD    32
270
#define KVM_EXIT_X86_BUS_LOCK     33
271
#define KVM_EXIT_XEN              34
272
273

/* For KVM_EXIT_INTERNAL_ERROR */
274
275
276
277
278
279
/* Emulate instruction failed. */
#define KVM_INTERNAL_ERROR_EMULATION	1
/* Encounter unexpected simultaneous exceptions. */
#define KVM_INTERNAL_ERROR_SIMUL_EX	2
/* Encounter unexpected vm-exit due to delivery event. */
#define KVM_INTERNAL_ERROR_DELIVERY_EV	3
280
281
/* Encounter unexpected vm-exit reason */
#define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
Avi Kivity's avatar
Avi Kivity committed
282

283
/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
Avi Kivity's avatar
Avi Kivity committed
284
285
struct kvm_run {
	/* in */
286
	__u8 request_interrupt_window;
287
288
	__u8 immediate_exit;
	__u8 padding1[6];
Avi Kivity's avatar
Avi Kivity committed
289
290
291

	/* out */
	__u32 exit_reason;
292
293
	__u8 ready_for_interrupt_injection;
	__u8 if_flag;
294
	__u16 flags;
295
296

	/* in (pre_kvm_run), out (post_kvm_run) */
297
298
299
	__u64 cr8;
	__u64 apic_base;

300
301
302
303
304
#ifdef __KVM_S390
	/* the processor status word for s390 */
	__u64 psw_mask; /* psw upper half */
	__u64 psw_addr; /* psw lower half */
#endif
Avi Kivity's avatar
Avi Kivity committed
305
306
307
	union {
		/* KVM_EXIT_UNKNOWN */
		struct {
308
			__u64 hardware_exit_reason;
Avi Kivity's avatar
Avi Kivity committed
309
		} hw;
310
311
312
		/* KVM_EXIT_FAIL_ENTRY */
		struct {
			__u64 hardware_entry_failure_reason;
313
			__u32 cpu;
314
		} fail_entry;
Avi Kivity's avatar
Avi Kivity committed
315
316
317
318
319
320
		/* KVM_EXIT_EXCEPTION */
		struct {
			__u32 exception;
			__u32 error_code;
		} ex;
		/* KVM_EXIT_IO */
321
		struct {
Avi Kivity's avatar
Avi Kivity committed
322
323
324
325
326
#define KVM_EXIT_IO_IN  0
#define KVM_EXIT_IO_OUT 1
			__u8 direction;
			__u8 size; /* bytes */
			__u16 port;
327
328
			__u32 count;
			__u64 data_offset; /* relative to kvm_run start */
Avi Kivity's avatar
Avi Kivity committed
329
		} io;
330
		/* KVM_EXIT_DEBUG */
Avi Kivity's avatar
Avi Kivity committed
331
		struct {
Jan Kiszka's avatar
Jan Kiszka committed
332
			struct kvm_debug_exit_arch arch;
Avi Kivity's avatar
Avi Kivity committed
333
334
335
336
337
338
339
340
		} debug;
		/* KVM_EXIT_MMIO */
		struct {
			__u64 phys_addr;
			__u8  data[8];
			__u32 len;
			__u8  is_write;
		} mmio;
341
342
		/* KVM_EXIT_HYPERCALL */
		struct {
Jeff Dike's avatar
Jeff Dike committed
343
			__u64 nr;
344
345
346
347
348
			__u64 args[6];
			__u64 ret;
			__u32 longmode;
			__u32 pad;
		} hypercall;
349
350
351
352
353
354
		/* KVM_EXIT_TPR_ACCESS */
		struct {
			__u64 rip;
			__u32 is_write;
			__u32 pad;
		} tpr_access;
355
356
357
358
359
360
		/* KVM_EXIT_S390_SIEIC */
		struct {
			__u8 icptcode;
			__u16 ipa;
			__u32 ipb;
		} s390_sieic;
361
362
363
364
365
366
367
		/* 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;
368
369
370
371
372
		/* KVM_EXIT_S390_UCONTROL */
		struct {
			__u64 trans_exc_code;
			__u32 pgm_code;
		} s390_ucontrol;
Alexander Graf's avatar
Alexander Graf committed
373
		/* KVM_EXIT_DCR (deprecated) */
374
375
376
377
378
		struct {
			__u32 dcrn;
			__u32 data;
			__u8  is_write;
		} dcr;
379
		/* KVM_EXIT_INTERNAL_ERROR */
380
381
		struct {
			__u32 suberror;
382
383
384
			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
			__u32 ndata;
			__u64 data[16];
385
		} internal;
386
387
388
389
		/* KVM_EXIT_OSI */
		struct {
			__u64 gprs[32];
		} osi;
390
		/* KVM_EXIT_PAPR_HCALL */
391
392
393
394
395
		struct {
			__u64 nr;
			__u64 ret;
			__u64 args[9];
		} papr_hcall;
396
397
398
399
400
401
402
403
404
		/* KVM_EXIT_S390_TSCH */
		struct {
			__u16 subchannel_id;
			__u16 subchannel_nr;
			__u32 io_int_parm;
			__u32 io_int_word;
			__u32 ipb;
			__u8 dequeued;
		} s390_tsch;
405
406
407
408
		/* KVM_EXIT_EPR */
		struct {
			__u32 epr;
		} epr;
409
410
411
412
		/* KVM_EXIT_SYSTEM_EVENT */
		struct {
#define KVM_SYSTEM_EVENT_SHUTDOWN       1
#define KVM_SYSTEM_EVENT_RESET          2
413
#define KVM_SYSTEM_EVENT_CRASH          3
414
415
416
			__u32 type;
			__u64 flags;
		} system_event;
417
418
419
420
421
422
423
424
425
		/* KVM_EXIT_S390_STSI */
		struct {
			__u64 addr;
			__u8 ar;
			__u8 reserved;
			__u8 fc;
			__u8 sel1;
			__u16 sel2;
		} s390_stsi;
426
427
428
429
		/* KVM_EXIT_IOAPIC_EOI */
		struct {
			__u8 vector;
		} eoi;
Andrey Smetanin's avatar
Andrey Smetanin committed
430
431
		/* KVM_EXIT_HYPERV */
		struct kvm_hyperv_exit hyperv;
432
433
434
435
436
		/* KVM_EXIT_ARM_NISV */
		struct {
			__u64 esr_iss;
			__u64 fault_ipa;
		} arm_nisv;
437
438
439
440
441
442
		/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
		struct {
			__u8 error; /* user -> kernel */
			__u8 pad[7];
#define KVM_MSR_EXIT_REASON_INVAL	(1 << 0)
#define KVM_MSR_EXIT_REASON_UNKNOWN	(1 << 1)
443
#define KVM_MSR_EXIT_REASON_FILTER	(1 << 2)
444
445
446
447
			__u32 reason; /* kernel -> user */
			__u32 index; /* kernel -> user */
			__u64 data; /* kernel <-> user */
		} msr;
448
449
		/* KVM_EXIT_XEN */
		struct kvm_xen_exit xen;
450
451
		/* Fix the size of the union. */
		char padding[256];
Avi Kivity's avatar
Avi Kivity committed
452
	};
453

454
455
456
457
	/* 2048 is the size of the char array used to bound/pad the size
	 * of the union that holds sync regs.
	 */
	#define SYNC_REGS_SIZE_BYTES 2048
458
459
460
461
462
463
464
465
466
467
468
	/*
	 * shared registers between kvm and userspace.
	 * kvm_valid_regs specifies the register classes set by the host
	 * kvm_dirty_regs specified the register classes dirtied by userspace
	 * struct kvm_sync_regs is architecture specific, as well as the
	 * bits for kvm_valid_regs and kvm_dirty_regs
	 */
	__u64 kvm_valid_regs;
	__u64 kvm_dirty_regs;
	union {
		struct kvm_sync_regs regs;
469
		char padding[SYNC_REGS_SIZE_BYTES];
470
	} s;
Avi Kivity's avatar
Avi Kivity committed
471
472
};

473
474
475
476
477
/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */

struct kvm_coalesced_mmio_zone {
	__u64 addr;
	__u32 size;
Peng Hao's avatar
Peng Hao committed
478
479
480
481
	union {
		__u32 pad;
		__u32 pio;
	};
482
483
484
485
486
};

struct kvm_coalesced_mmio {
	__u64 phys_addr;
	__u32 len;
Peng Hao's avatar
Peng Hao committed
487
488
489
490
	union {
		__u32 pad;
		__u32 pio;
	};
491
492
493
494
495
496
497
498
499
500
501
502
	__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))

Avi Kivity's avatar
Avi Kivity committed
503
504
505
506
507
508
509
510
511
512
/* for KVM_TRANSLATE */
struct kvm_translation {
	/* in */
	__u64 linear_address;

	/* out */
	__u64 physical_address;
	__u8  valid;
	__u8  writeable;
	__u8  usermode;
513
	__u8  pad[5];
Avi Kivity's avatar
Avi Kivity committed
514
515
};

516
517
518
519
520
521
522
523
/* for KVM_S390_MEM_OP */
struct kvm_s390_mem_op {
	/* in */
	__u64 gaddr;		/* the guest address */
	__u64 flags;		/* flags */
	__u32 size;		/* amount of bytes */
	__u32 op;		/* type of operation */
	__u64 buf;		/* buffer in userspace */
524
525
526
527
528
	union {
		__u8 ar;	/* the access register number */
		__u32 sida_offset; /* offset into the sida */
		__u8 reserved[32]; /* should be set to 0 */
	};
529
530
531
532
};
/* types for kvm_s390_mem_op->op */
#define KVM_S390_MEMOP_LOGICAL_READ	0
#define KVM_S390_MEMOP_LOGICAL_WRITE	1
533
534
#define KVM_S390_MEMOP_SIDA_READ	2
#define KVM_S390_MEMOP_SIDA_WRITE	3
535
536
537
538
/* flags for kvm_s390_mem_op->flags */
#define KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
#define KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)

Avi Kivity's avatar
Avi Kivity committed
539
540
541
542
543
544
545
546
547
/* for KVM_INTERRUPT */
struct kvm_interrupt {
	/* in */
	__u32 irq;
};

/* for KVM_GET_DIRTY_LOG */
struct kvm_dirty_log {
	__u32 slot;
548
	__u32 padding1;
Avi Kivity's avatar
Avi Kivity committed
549
550
	union {
		void __user *dirty_bitmap; /* one bit per page */
551
		__u64 padding2;
Avi Kivity's avatar
Avi Kivity committed
552
553
554
	};
};

555
556
557
558
559
560
561
562
563
564
565
/* for KVM_CLEAR_DIRTY_LOG */
struct kvm_clear_dirty_log {
	__u32 slot;
	__u32 num_pages;
	__u64 first_page;
	union {
		void __user *dirty_bitmap; /* one bit per page */
		__u64 padding2;
	};
};

Avi Kivity's avatar
Avi Kivity committed
566
567
568
569
570
571
/* for KVM_SET_SIGNAL_MASK */
struct kvm_signal_mask {
	__u32 len;
	__u8  sigset[0];
};

572
573
574
575
576
577
578
/* for KVM_TPR_ACCESS_REPORTING */
struct kvm_tpr_access_ctl {
	__u32 enabled;
	__u32 flags;
	__u32 reserved[8];
};

Avi Kivity's avatar
Avi Kivity committed
579
580
581
582
583
/* for KVM_SET_VAPIC_ADDR */
struct kvm_vapic_addr {
	__u64 vapic_addr;
};

584
/* for KVM_SET_MP_STATE */
585

586
/* not all states are valid on all architectures */
587
588
589
590
591
#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
592
593
594
595
#define KVM_MP_STATE_STOPPED           5
#define KVM_MP_STATE_CHECK_STOP        6
#define KVM_MP_STATE_OPERATING         7
#define KVM_MP_STATE_LOAD              8
596
#define KVM_MP_STATE_AP_RESET_HOLD     9
597
598
599
600
601

struct kvm_mp_state {
	__u32 mp_state;
};

602
603
604
605
606
struct kvm_s390_psw {
	__u64 mask;
	__u64 addr;
};

607
608
609
610
611
/* 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
612
613
#define KVM_S390_INT_PFAULT_INIT	0xfffe0004u
#define KVM_S390_INT_PFAULT_DONE	0xfffe0005u
614
#define KVM_S390_MCHK			0xfffe1000u
615
616
#define KVM_S390_INT_CLOCK_COMP		0xffff1004u
#define KVM_S390_INT_CPU_TIMER		0xffff1005u
617
618
619
#define KVM_S390_INT_VIRTIO		0xffff2603u
#define KVM_S390_INT_SERVICE		0xffff2401u
#define KVM_S390_INT_EMERGENCY		0xffff1201u
620
#define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
621
622
623
624
625
626
627
628
/* Anything below 0xfffe0000u is taken by INT_IO */
#define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
	(((schid)) |			       \
	 ((ssid) << 16) |		       \
	 ((cssid) << 18) |		       \
	 ((ai) << 26))
#define KVM_S390_INT_IO_MIN		0x00000000u
#define KVM_S390_INT_IO_MAX		0xfffdffffu
629
#define KVM_S390_INT_IO_AI_MASK		0x04000000u
630

631
632
633
634
635
636
637

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

638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
struct kvm_s390_io_info {
	__u16 subchannel_id;
	__u16 subchannel_nr;
	__u32 io_int_parm;
	__u32 io_int_word;
};

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

struct kvm_s390_pgm_info {
	__u64 trans_exc_code;
	__u64 mon_code;
	__u64 per_address;
	__u32 data_exc_code;
	__u16 code;
	__u16 mon_class_nr;
	__u8 per_code;
	__u8 per_atmid;
	__u8 exc_access_id;
	__u8 per_access_id;
	__u8 op_access_id;
663
664
665
666
#define KVM_S390_PGM_FLAGS_ILC_VALID	0x01
#define KVM_S390_PGM_FLAGS_ILC_0	0x02
#define KVM_S390_PGM_FLAGS_ILC_1	0x04
#define KVM_S390_PGM_FLAGS_ILC_MASK	0x06
667
#define KVM_S390_PGM_FLAGS_NO_REWIND	0x08
668
669
	__u8 flags;
	__u8 pad[2];
670
671
672
673
674
675
676
677
678
679
680
681
682
683
};

struct kvm_s390_prefix_info {
	__u32 address;
};

struct kvm_s390_extcall_info {
	__u16 code;
};

struct kvm_s390_emerg_info {
	__u16 code;
};

684
685
686
687
688
#define KVM_S390_STOP_FLAG_STORE_STATUS	0x01
struct kvm_s390_stop_info {
	__u32 flags;
};

689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
struct kvm_s390_mchk_info {
	__u64 cr14;
	__u64 mcic;
	__u64 failing_storage_address;
	__u32 ext_damage_code;
	__u32 pad;
	__u8 fixed_logout[16];
};

struct kvm_s390_irq {
	__u64 type;
	union {
		struct kvm_s390_io_info io;
		struct kvm_s390_ext_info ext;
		struct kvm_s390_pgm_info pgm;
		struct kvm_s390_emerg_info emerg;
		struct kvm_s390_extcall_info extcall;
		struct kvm_s390_prefix_info prefix;
707
		struct kvm_s390_stop_info stop;
708
709
710
711
712
		struct kvm_s390_mchk_info mchk;
		char reserved[64];
	} u;
};

713
714
struct kvm_s390_irq_state {
	__u64 buf;
715
	__u32 flags;        /* will stay unused for compatibility reasons */
716
	__u32 len;
717
	__u32 reserved[4];  /* will stay unused for compatibility reasons */
718
719
};

Jan Kiszka's avatar
Jan Kiszka committed
720
721
722
723
724
725
726
727
728
729
730
/* 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;
};

Gregory Haskins's avatar
Gregory Haskins committed
731
732
733
734
enum {
	kvm_ioeventfd_flag_nr_datamatch,
	kvm_ioeventfd_flag_nr_pio,
	kvm_ioeventfd_flag_nr_deassign,
735
	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
736
	kvm_ioeventfd_flag_nr_fast_mmio,
Gregory Haskins's avatar
Gregory Haskins committed
737
738
739
740
741
742
	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)
743
744
#define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
Gregory Haskins's avatar
Gregory Haskins committed
745
746
747
748
749
750

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

struct kvm_ioeventfd {
	__u64 datamatch;
	__u64 addr;        /* legal pio/mmio address */
751
	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
Gregory Haskins's avatar
Gregory Haskins committed
752
753
754
755
756
	__s32 fd;
	__u32 flags;
	__u8  pad[36];
};

757
#define KVM_X86_DISABLE_EXITS_MWAIT          (1 << 0)
758
#define KVM_X86_DISABLE_EXITS_HLT            (1 << 1)
759
#define KVM_X86_DISABLE_EXITS_PAUSE          (1 << 2)
760
#define KVM_X86_DISABLE_EXITS_CSTATE         (1 << 3)
761
#define KVM_X86_DISABLE_VALID_EXITS          (KVM_X86_DISABLE_EXITS_MWAIT | \
762
                                              KVM_X86_DISABLE_EXITS_HLT | \
763
764
                                              KVM_X86_DISABLE_EXITS_PAUSE | \
                                              KVM_X86_DISABLE_EXITS_CSTATE)
765

766
767
768
769
770
771
772
773
774
/* for KVM_ENABLE_CAP */
struct kvm_enable_cap {
	/* in */
	__u32 cap;
	__u32 flags;
	__u64 args[4];
	__u8  pad[64];
};

775
/* for KVM_PPC_GET_PVINFO */
776
777
778

#define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)

779
780
781
782
783
784
785
struct kvm_ppc_pvinfo {
	/* out */
	__u32 flags;
	__u32 hcall[4];
	__u8  pad[108];
};

786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
/* for KVM_PPC_GET_SMMU_INFO */
#define KVM_PPC_PAGE_SIZES_MAX_SZ	8

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

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

#define KVM_PPC_PAGE_SIZES_REAL		0x00000001
#define KVM_PPC_1T_SEGMENTS		0x00000002
802
#define KVM_PPC_NO_HASH			0x00000004
803
804
805
806

struct kvm_ppc_smmu_info {
	__u64 flags;
	__u32 slb_size;
807
808
	__u16 data_keys;	/* # storage keys supported for data */
	__u16 instr_keys;	/* # storage keys supported for instructions */
809
810
811
	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
};

812
813
814
815
816
817
818
/* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */
struct kvm_ppc_resize_hpt {
	__u64 flags;
	__u32 shift;
	__u32 pad;
};

Avi Kivity's avatar
Avi Kivity committed
819
820
#define KVMIO 0xAE

821
822
823
/* machine type bits, to be used as argument to KVM_CREATE_VM */
#define KVM_VM_S390_UCONTROL	1

824
825
826
827
/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
#define KVM_VM_PPC_HV 1
#define KVM_VM_PPC_PR 2

828
829
/* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
#define KVM_VM_MIPS_AUTO	0
830
#define KVM_VM_MIPS_VZ		1
831
#define KVM_VM_MIPS_TE		2
832

833
834
#define KVM_S390_SIE_PAGE_OFFSET 1

835
836
837
838
839
840
841
842
843
/*
 * On arm64, machine type can be used to request the physical
 * address size for the VM. Bits[7-0] are reserved for the guest
 * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
 * value 0 implies the default IPA size, 40bits.
 */
#define KVM_VM_TYPE_ARM_IPA_SIZE_MASK	0xffULL
#define KVM_VM_TYPE_ARM_IPA_SIZE(x)		\
	((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
844
845
846
/*
 * ioctls for /dev/kvm fds:
 */
Avi Kivity's avatar
Avi Kivity committed
847
848
849
#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)
850
851

#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
852
853
854
855
856
/*
 * 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)
857
858
859
860
/*
 * Get size for mmap(vcpu_fd)
 */
#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
861
#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
Jan Kiszka's avatar
Jan Kiszka committed
862
863
864
#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
865
#define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
866
#define KVM_GET_MSR_FEATURE_INDEX_LIST    _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
Jan Kiszka's avatar
Jan Kiszka committed
867

868
869
870
871
/*
 * Extension capability list.
 */
#define KVM_CAP_IRQCHIP	  0
Eddie Dong's avatar
Eddie Dong committed
872
#define KVM_CAP_HLT	  1
873
#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
874
#define KVM_CAP_USER_MEMORY 3
875
#define KVM_CAP_SET_TSS_ADDR 4
876
#define KVM_CAP_VAPIC 6
877
#define KVM_CAP_EXT_CPUID 7
878
#define KVM_CAP_CLOCKSOURCE 8
879
#define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
880
#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
Sheng Yang's avatar
Sheng Yang committed
881
#define KVM_CAP_PIT 11
882
#define KVM_CAP_NOP_IO_DELAY 12
883
#define KVM_CAP_PV_MMU 13
884
#define KVM_CAP_MP_STATE 14
885
#define KVM_CAP_COALESCED_MMIO 15
886
#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
887
#define KVM_CAP_IOMMU 18
888
889
/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
890
#define KVM_CAP_USER_NMI 22
891
#ifdef __KVM_HAVE_GUEST_DEBUG
Jan Kiszka's avatar
Jan Kiszka committed
892
#define KVM_CAP_SET_GUEST_DEBUG 23
893
#endif
894
#ifdef __KVM_HAVE_PIT
895
#define KVM_CAP_REINJECT_CONTROL 24
896
897
#endif
#define KVM_CAP_IRQ_ROUTING 25
898
#define KVM_CAP_IRQ_INJECT_STATUS 26
899
#define KVM_CAP_ASSIGN_DEV_IRQ 29
900
901
/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
Huang Ying's avatar
Huang Ying committed
902
903
904
#ifdef __KVM_HAVE_MCE
#define KVM_CAP_MCE 31
#endif
Gregory Haskins's avatar
Gregory Haskins committed
905
#define KVM_CAP_IRQFD 32
906
907
908
#ifdef __KVM_HAVE_PIT
#define KVM_CAP_PIT2 33
#endif
909
#define KVM_CAP_SET_BOOT_CPU_ID 34
910
911
912
#ifdef __KVM_HAVE_PIT_STATE2
#define KVM_CAP_PIT_STATE2 35
#endif
Gregory Haskins's avatar
Gregory Haskins committed
913
#define KVM_CAP_IOEVENTFD 36
914
#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
Ed Swierk's avatar
Ed Swierk committed
915
916
917
#ifdef __KVM_HAVE_XEN_HVM
#define KVM_CAP_XEN_HVM 38
#endif
918
#define KVM_CAP_ADJUST_CLOCK 39
919
#define KVM_CAP_INTERNAL_ERROR_DATA 40
920
921
922
#ifdef __KVM_HAVE_VCPU_EVENTS
#define KVM_CAP_VCPU_EVENTS 41
#endif
923
#define KVM_CAP_S390_PSW 42
924
#define KVM_CAP_PPC_SEGSTATE 43
925
#define KVM_CAP_HYPERV 44
926
#define KVM_CAP_HYPERV_VAPIC 45
927
#define KVM_CAP_HYPERV_SPIN 46
928
#define KVM_CAP_PCI_SEGMENT 47
929
#define KVM_CAP_PPC_PAIRED_SINGLES 48
930
#define KVM_CAP_INTR_SHADOW 49
931
932
933
#ifdef __KVM_HAVE_DEBUGREGS
#define KVM_CAP_DEBUGREGS 50
#endif
934
#define KVM_CAP_X86_ROBUST_SINGLESTEP 51
935
#define KVM_CAP_PPC_OSI 52
936
#define KVM_CAP_PPC_UNSET_IRQ 53
937
#define KVM_CAP_ENABLE_CAP 54
938
939
940
941
942
943
#ifdef __KVM_HAVE_XSAVE
#define KVM_CAP_XSAVE 55
#endif
#ifdef __KVM_HAVE_XCRS
#define KVM_CAP_XCRS 56
#endif
944
#define KVM_CAP_PPC_GET_PVINFO 57
945
#define KVM_CAP_PPC_IRQ_LEVEL 58
946
#define KVM_CAP_ASYNC_PF 59
947
948
#define KVM_CAP_TSC_CONTROL 60
#define KVM_CAP_GET_TSC_KHZ 61
949
#define KVM_CAP_PPC_BOOKE_SREGS 62
950
#define KVM_CAP_SPAPR_TCE 63
951
#define KVM_CAP_PPC_SMT 64
952
#define KVM_CAP_PPC_RMA	65
953
#define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
954
#define KVM_CAP_PPC_HIOR 67
955
#define KVM_CAP_PPC_PAPR 68
Scott Wood's avatar
Scott Wood committed
956
#define KVM_CAP_SW_TLB 69
957
#define KVM_CAP_ONE_REG 70
958
#define KVM_CAP_S390_GMAP 71
959
#define KVM_CAP_TSC_DEADLINE_TIMER 72
960
#define KVM_CAP_S390_UCONTROL 73
961
#define KVM_CAP_SYNC_REGS 74
962
#define KVM_CAP_PCI_2_3 75
963
#define KVM_CAP_KVMCLOCK_CTRL 76
964
#define KVM_CAP_SIGNAL_MSI 77
965
#define KVM_CAP_PPC_GET_SMMU_INFO 78
966
#define KVM_CAP_S390_COW 79
967
#define KVM_CAP_PPC_ALLOC_HTAB 80
968
#define KVM_CAP_READONLY_MEM 81
969
#define KVM_CAP_IRQFD_RESAMPLE 82
970
#define KVM_CAP_PPC_BOOKE_WATCHDOG 83
971
#define KVM_CAP_PPC_HTAB_FD 84
972
#define KVM_CAP_S390_CSS_SUPPORT 85
973
#define KVM_CAP_PPC_EPR 86
974
#define KVM_CAP_ARM_PSCI 87
975
#define KVM_CAP_ARM_SET_DEVICE_ADDR 88
Scott Wood's avatar
Scott Wood committed
976
#define KVM_CAP_DEVICE_CTRL 89
977
#define KVM_CAP_IRQ_MPIC 90
978
#define KVM_CAP_PPC_RTAS 91
979
#define KVM_CAP_IRQ_XICS 92
980
#define KVM_CAP_ARM_EL1_32BIT 93
981
#define KVM_CAP_SPAPR_MULTITCE 94
982
#define KVM_CAP_EXT_EMUL_CPUID 95
983
#define KVM_CAP_HYPERV_TIME 96
984
#define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
985
#define KVM_CAP_ENABLE_CAP_VM 98
986
#define KVM_CAP_S390_IRQCHIP 99
987
#define KVM_CAP_IOEVENTFD_NO_LENGTH 100
988
#define KVM_CAP_VM_ATTRIBUTES 101
989
#define KVM_CAP_ARM_PSCI_0_2 102
990
#define KVM_CAP_PPC_FIXUP_HCALL 103
991
#define KVM_CAP_PPC_ENABLE_HCALL 104
992
#define KVM_CAP_CHECK_EXTENSION_VM 105
993
#define KVM_CAP_S390_USER_SIGP 106
994
#define KVM_CAP_S390_VECTOR_REGISTERS 107
995
#define KVM_CAP_S390_MEM_OP 108
996
#define KVM_CAP_S390_USER_STSI 109
997
#define KVM_CAP_S390_SKEYS 110
998
#define KVM_CAP_MIPS_FPU 111
999
#define KVM_CAP_MIPS_MSA 112
1000
#define KVM_CAP_S390_INJECT_IRQ 113