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