1607ca46eSDavid Howells #ifndef __LINUX_KVM_H 2607ca46eSDavid Howells #define __LINUX_KVM_H 3607ca46eSDavid Howells 4607ca46eSDavid Howells /* 5607ca46eSDavid Howells * Userspace interface for /dev/kvm - kernel based virtual machine 6607ca46eSDavid Howells * 7607ca46eSDavid Howells * Note: you must update KVM_API_VERSION if you change this interface. 8607ca46eSDavid Howells */ 9607ca46eSDavid Howells 10607ca46eSDavid Howells #include <linux/types.h> 11607ca46eSDavid Howells #include <linux/compiler.h> 12607ca46eSDavid Howells #include <linux/ioctl.h> 13607ca46eSDavid Howells #include <asm/kvm.h> 14607ca46eSDavid Howells 15607ca46eSDavid Howells #define KVM_API_VERSION 12 16607ca46eSDavid Howells 17607ca46eSDavid Howells /* *** Deprecated interfaces *** */ 18607ca46eSDavid Howells 19607ca46eSDavid Howells #define KVM_TRC_SHIFT 16 20607ca46eSDavid Howells 21607ca46eSDavid Howells #define KVM_TRC_ENTRYEXIT (1 << KVM_TRC_SHIFT) 22607ca46eSDavid Howells #define KVM_TRC_HANDLER (1 << (KVM_TRC_SHIFT + 1)) 23607ca46eSDavid Howells 24607ca46eSDavid Howells #define KVM_TRC_VMENTRY (KVM_TRC_ENTRYEXIT + 0x01) 25607ca46eSDavid Howells #define KVM_TRC_VMEXIT (KVM_TRC_ENTRYEXIT + 0x02) 26607ca46eSDavid Howells #define KVM_TRC_PAGE_FAULT (KVM_TRC_HANDLER + 0x01) 27607ca46eSDavid Howells 28607ca46eSDavid Howells #define KVM_TRC_HEAD_SIZE 12 29607ca46eSDavid Howells #define KVM_TRC_CYCLE_SIZE 8 30607ca46eSDavid Howells #define KVM_TRC_EXTRA_MAX 7 31607ca46eSDavid Howells 32607ca46eSDavid Howells #define KVM_TRC_INJ_VIRQ (KVM_TRC_HANDLER + 0x02) 33607ca46eSDavid Howells #define KVM_TRC_REDELIVER_EVT (KVM_TRC_HANDLER + 0x03) 34607ca46eSDavid Howells #define KVM_TRC_PEND_INTR (KVM_TRC_HANDLER + 0x04) 35607ca46eSDavid Howells #define KVM_TRC_IO_READ (KVM_TRC_HANDLER + 0x05) 36607ca46eSDavid Howells #define KVM_TRC_IO_WRITE (KVM_TRC_HANDLER + 0x06) 37607ca46eSDavid Howells #define KVM_TRC_CR_READ (KVM_TRC_HANDLER + 0x07) 38607ca46eSDavid Howells #define KVM_TRC_CR_WRITE (KVM_TRC_HANDLER + 0x08) 39607ca46eSDavid Howells #define KVM_TRC_DR_READ (KVM_TRC_HANDLER + 0x09) 40607ca46eSDavid Howells #define KVM_TRC_DR_WRITE (KVM_TRC_HANDLER + 0x0A) 41607ca46eSDavid Howells #define KVM_TRC_MSR_READ (KVM_TRC_HANDLER + 0x0B) 42607ca46eSDavid Howells #define KVM_TRC_MSR_WRITE (KVM_TRC_HANDLER + 0x0C) 43607ca46eSDavid Howells #define KVM_TRC_CPUID (KVM_TRC_HANDLER + 0x0D) 44607ca46eSDavid Howells #define KVM_TRC_INTR (KVM_TRC_HANDLER + 0x0E) 45607ca46eSDavid Howells #define KVM_TRC_NMI (KVM_TRC_HANDLER + 0x0F) 46607ca46eSDavid Howells #define KVM_TRC_VMMCALL (KVM_TRC_HANDLER + 0x10) 47607ca46eSDavid Howells #define KVM_TRC_HLT (KVM_TRC_HANDLER + 0x11) 48607ca46eSDavid Howells #define KVM_TRC_CLTS (KVM_TRC_HANDLER + 0x12) 49607ca46eSDavid Howells #define KVM_TRC_LMSW (KVM_TRC_HANDLER + 0x13) 50607ca46eSDavid Howells #define KVM_TRC_APIC_ACCESS (KVM_TRC_HANDLER + 0x14) 51607ca46eSDavid Howells #define KVM_TRC_TDP_FAULT (KVM_TRC_HANDLER + 0x15) 52607ca46eSDavid Howells #define KVM_TRC_GTLB_WRITE (KVM_TRC_HANDLER + 0x16) 53607ca46eSDavid Howells #define KVM_TRC_STLB_WRITE (KVM_TRC_HANDLER + 0x17) 54607ca46eSDavid Howells #define KVM_TRC_STLB_INVAL (KVM_TRC_HANDLER + 0x18) 55607ca46eSDavid Howells #define KVM_TRC_PPC_INSTR (KVM_TRC_HANDLER + 0x19) 56607ca46eSDavid Howells 57607ca46eSDavid Howells struct kvm_user_trace_setup { 58607ca46eSDavid Howells __u32 buf_size; 59607ca46eSDavid Howells __u32 buf_nr; 60607ca46eSDavid Howells }; 61607ca46eSDavid Howells 62607ca46eSDavid Howells #define __KVM_DEPRECATED_MAIN_W_0x06 \ 63607ca46eSDavid Howells _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) 64607ca46eSDavid Howells #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07) 65607ca46eSDavid Howells #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08) 66607ca46eSDavid Howells 67607ca46eSDavid Howells #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq) 68607ca46eSDavid Howells 69607ca46eSDavid Howells struct kvm_breakpoint { 70607ca46eSDavid Howells __u32 enabled; 71607ca46eSDavid Howells __u32 padding; 72607ca46eSDavid Howells __u64 address; 73607ca46eSDavid Howells }; 74607ca46eSDavid Howells 75607ca46eSDavid Howells struct kvm_debug_guest { 76607ca46eSDavid Howells __u32 enabled; 77607ca46eSDavid Howells __u32 pad; 78607ca46eSDavid Howells struct kvm_breakpoint breakpoints[4]; 79607ca46eSDavid Howells __u32 singlestep; 80607ca46eSDavid Howells }; 81607ca46eSDavid Howells 82607ca46eSDavid Howells #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest) 83607ca46eSDavid Howells 84607ca46eSDavid Howells /* *** End of deprecated interfaces *** */ 85607ca46eSDavid Howells 86607ca46eSDavid Howells 87607ca46eSDavid Howells /* for KVM_CREATE_MEMORY_REGION */ 88607ca46eSDavid Howells struct kvm_memory_region { 89607ca46eSDavid Howells __u32 slot; 90607ca46eSDavid Howells __u32 flags; 91607ca46eSDavid Howells __u64 guest_phys_addr; 92607ca46eSDavid Howells __u64 memory_size; /* bytes */ 93607ca46eSDavid Howells }; 94607ca46eSDavid Howells 95607ca46eSDavid Howells /* for KVM_SET_USER_MEMORY_REGION */ 96607ca46eSDavid Howells struct kvm_userspace_memory_region { 97607ca46eSDavid Howells __u32 slot; 98607ca46eSDavid Howells __u32 flags; 99607ca46eSDavid Howells __u64 guest_phys_addr; 100607ca46eSDavid Howells __u64 memory_size; /* bytes */ 101607ca46eSDavid Howells __u64 userspace_addr; /* start of the userspace allocated memory */ 102607ca46eSDavid Howells }; 103607ca46eSDavid Howells 104607ca46eSDavid Howells /* 105607ca46eSDavid Howells * The bit 0 ~ bit 15 of kvm_memory_region::flags are visible for userspace, 106607ca46eSDavid Howells * other bits are reserved for kvm internal use which are defined in 107607ca46eSDavid Howells * include/linux/kvm_host.h. 108607ca46eSDavid Howells */ 109607ca46eSDavid Howells #define KVM_MEM_LOG_DIRTY_PAGES (1UL << 0) 110607ca46eSDavid Howells #define KVM_MEM_READONLY (1UL << 1) 111607ca46eSDavid Howells 112607ca46eSDavid Howells /* for KVM_IRQ_LINE */ 113607ca46eSDavid Howells struct kvm_irq_level { 114607ca46eSDavid Howells /* 115607ca46eSDavid Howells * ACPI gsi notion of irq. 116607ca46eSDavid Howells * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47.. 117607ca46eSDavid Howells * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23.. 118607ca46eSDavid Howells */ 119607ca46eSDavid Howells union { 120607ca46eSDavid Howells __u32 irq; 121607ca46eSDavid Howells __s32 status; 122607ca46eSDavid Howells }; 123607ca46eSDavid Howells __u32 level; 124607ca46eSDavid Howells }; 125607ca46eSDavid Howells 126607ca46eSDavid Howells 127607ca46eSDavid Howells struct kvm_irqchip { 128607ca46eSDavid Howells __u32 chip_id; 129607ca46eSDavid Howells __u32 pad; 130607ca46eSDavid Howells union { 131607ca46eSDavid Howells char dummy[512]; /* reserving space */ 132607ca46eSDavid Howells #ifdef __KVM_HAVE_PIT 133607ca46eSDavid Howells struct kvm_pic_state pic; 134607ca46eSDavid Howells #endif 135607ca46eSDavid Howells #ifdef __KVM_HAVE_IOAPIC 136607ca46eSDavid Howells struct kvm_ioapic_state ioapic; 137607ca46eSDavid Howells #endif 138607ca46eSDavid Howells } chip; 139607ca46eSDavid Howells }; 140607ca46eSDavid Howells 141607ca46eSDavid Howells /* for KVM_CREATE_PIT2 */ 142607ca46eSDavid Howells struct kvm_pit_config { 143607ca46eSDavid Howells __u32 flags; 144607ca46eSDavid Howells __u32 pad[15]; 145607ca46eSDavid Howells }; 146607ca46eSDavid Howells 147607ca46eSDavid Howells #define KVM_PIT_SPEAKER_DUMMY 1 148607ca46eSDavid Howells 149607ca46eSDavid Howells #define KVM_EXIT_UNKNOWN 0 150607ca46eSDavid Howells #define KVM_EXIT_EXCEPTION 1 151607ca46eSDavid Howells #define KVM_EXIT_IO 2 152607ca46eSDavid Howells #define KVM_EXIT_HYPERCALL 3 153607ca46eSDavid Howells #define KVM_EXIT_DEBUG 4 154607ca46eSDavid Howells #define KVM_EXIT_HLT 5 155607ca46eSDavid Howells #define KVM_EXIT_MMIO 6 156607ca46eSDavid Howells #define KVM_EXIT_IRQ_WINDOW_OPEN 7 157607ca46eSDavid Howells #define KVM_EXIT_SHUTDOWN 8 158607ca46eSDavid Howells #define KVM_EXIT_FAIL_ENTRY 9 159607ca46eSDavid Howells #define KVM_EXIT_INTR 10 160607ca46eSDavid Howells #define KVM_EXIT_SET_TPR 11 161607ca46eSDavid Howells #define KVM_EXIT_TPR_ACCESS 12 162607ca46eSDavid Howells #define KVM_EXIT_S390_SIEIC 13 163607ca46eSDavid Howells #define KVM_EXIT_S390_RESET 14 164607ca46eSDavid Howells #define KVM_EXIT_DCR 15 165607ca46eSDavid Howells #define KVM_EXIT_NMI 16 166607ca46eSDavid Howells #define KVM_EXIT_INTERNAL_ERROR 17 167607ca46eSDavid Howells #define KVM_EXIT_OSI 18 168607ca46eSDavid Howells #define KVM_EXIT_PAPR_HCALL 19 169607ca46eSDavid Howells #define KVM_EXIT_S390_UCONTROL 20 17019bf7f8aSMarcelo Tosatti #define KVM_EXIT_WATCHDOG 21 171fa6b7fe9SCornelia Huck #define KVM_EXIT_S390_TSCH 22 172*1c810636SAlexander Graf #define KVM_EXIT_EPR 23 173607ca46eSDavid Howells 174607ca46eSDavid Howells /* For KVM_EXIT_INTERNAL_ERROR */ 17519bf7f8aSMarcelo Tosatti /* Emulate instruction failed. */ 176607ca46eSDavid Howells #define KVM_INTERNAL_ERROR_EMULATION 1 17719bf7f8aSMarcelo Tosatti /* Encounter unexpected simultaneous exceptions. */ 178607ca46eSDavid Howells #define KVM_INTERNAL_ERROR_SIMUL_EX 2 17919bf7f8aSMarcelo Tosatti /* Encounter unexpected vm-exit due to delivery event. */ 18019bf7f8aSMarcelo Tosatti #define KVM_INTERNAL_ERROR_DELIVERY_EV 3 181607ca46eSDavid Howells 182607ca46eSDavid Howells /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ 183607ca46eSDavid Howells struct kvm_run { 184607ca46eSDavid Howells /* in */ 185607ca46eSDavid Howells __u8 request_interrupt_window; 186607ca46eSDavid Howells __u8 padding1[7]; 187607ca46eSDavid Howells 188607ca46eSDavid Howells /* out */ 189607ca46eSDavid Howells __u32 exit_reason; 190607ca46eSDavid Howells __u8 ready_for_interrupt_injection; 191607ca46eSDavid Howells __u8 if_flag; 192607ca46eSDavid Howells __u8 padding2[2]; 193607ca46eSDavid Howells 194607ca46eSDavid Howells /* in (pre_kvm_run), out (post_kvm_run) */ 195607ca46eSDavid Howells __u64 cr8; 196607ca46eSDavid Howells __u64 apic_base; 197607ca46eSDavid Howells 198607ca46eSDavid Howells #ifdef __KVM_S390 199607ca46eSDavid Howells /* the processor status word for s390 */ 200607ca46eSDavid Howells __u64 psw_mask; /* psw upper half */ 201607ca46eSDavid Howells __u64 psw_addr; /* psw lower half */ 202607ca46eSDavid Howells #endif 203607ca46eSDavid Howells union { 204607ca46eSDavid Howells /* KVM_EXIT_UNKNOWN */ 205607ca46eSDavid Howells struct { 206607ca46eSDavid Howells __u64 hardware_exit_reason; 207607ca46eSDavid Howells } hw; 208607ca46eSDavid Howells /* KVM_EXIT_FAIL_ENTRY */ 209607ca46eSDavid Howells struct { 210607ca46eSDavid Howells __u64 hardware_entry_failure_reason; 211607ca46eSDavid Howells } fail_entry; 212607ca46eSDavid Howells /* KVM_EXIT_EXCEPTION */ 213607ca46eSDavid Howells struct { 214607ca46eSDavid Howells __u32 exception; 215607ca46eSDavid Howells __u32 error_code; 216607ca46eSDavid Howells } ex; 217607ca46eSDavid Howells /* KVM_EXIT_IO */ 218607ca46eSDavid Howells struct { 219607ca46eSDavid Howells #define KVM_EXIT_IO_IN 0 220607ca46eSDavid Howells #define KVM_EXIT_IO_OUT 1 221607ca46eSDavid Howells __u8 direction; 222607ca46eSDavid Howells __u8 size; /* bytes */ 223607ca46eSDavid Howells __u16 port; 224607ca46eSDavid Howells __u32 count; 225607ca46eSDavid Howells __u64 data_offset; /* relative to kvm_run start */ 226607ca46eSDavid Howells } io; 227607ca46eSDavid Howells struct { 228607ca46eSDavid Howells struct kvm_debug_exit_arch arch; 229607ca46eSDavid Howells } debug; 230607ca46eSDavid Howells /* KVM_EXIT_MMIO */ 231607ca46eSDavid Howells struct { 232607ca46eSDavid Howells __u64 phys_addr; 233607ca46eSDavid Howells __u8 data[8]; 234607ca46eSDavid Howells __u32 len; 235607ca46eSDavid Howells __u8 is_write; 236607ca46eSDavid Howells } mmio; 237607ca46eSDavid Howells /* KVM_EXIT_HYPERCALL */ 238607ca46eSDavid Howells struct { 239607ca46eSDavid Howells __u64 nr; 240607ca46eSDavid Howells __u64 args[6]; 241607ca46eSDavid Howells __u64 ret; 242607ca46eSDavid Howells __u32 longmode; 243607ca46eSDavid Howells __u32 pad; 244607ca46eSDavid Howells } hypercall; 245607ca46eSDavid Howells /* KVM_EXIT_TPR_ACCESS */ 246607ca46eSDavid Howells struct { 247607ca46eSDavid Howells __u64 rip; 248607ca46eSDavid Howells __u32 is_write; 249607ca46eSDavid Howells __u32 pad; 250607ca46eSDavid Howells } tpr_access; 251607ca46eSDavid Howells /* KVM_EXIT_S390_SIEIC */ 252607ca46eSDavid Howells struct { 253607ca46eSDavid Howells __u8 icptcode; 254607ca46eSDavid Howells __u16 ipa; 255607ca46eSDavid Howells __u32 ipb; 256607ca46eSDavid Howells } s390_sieic; 257607ca46eSDavid Howells /* KVM_EXIT_S390_RESET */ 258607ca46eSDavid Howells #define KVM_S390_RESET_POR 1 259607ca46eSDavid Howells #define KVM_S390_RESET_CLEAR 2 260607ca46eSDavid Howells #define KVM_S390_RESET_SUBSYSTEM 4 261607ca46eSDavid Howells #define KVM_S390_RESET_CPU_INIT 8 262607ca46eSDavid Howells #define KVM_S390_RESET_IPL 16 263607ca46eSDavid Howells __u64 s390_reset_flags; 264607ca46eSDavid Howells /* KVM_EXIT_S390_UCONTROL */ 265607ca46eSDavid Howells struct { 266607ca46eSDavid Howells __u64 trans_exc_code; 267607ca46eSDavid Howells __u32 pgm_code; 268607ca46eSDavid Howells } s390_ucontrol; 269607ca46eSDavid Howells /* KVM_EXIT_DCR */ 270607ca46eSDavid Howells struct { 271607ca46eSDavid Howells __u32 dcrn; 272607ca46eSDavid Howells __u32 data; 273607ca46eSDavid Howells __u8 is_write; 274607ca46eSDavid Howells } dcr; 275607ca46eSDavid Howells struct { 276607ca46eSDavid Howells __u32 suberror; 277607ca46eSDavid Howells /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */ 278607ca46eSDavid Howells __u32 ndata; 279607ca46eSDavid Howells __u64 data[16]; 280607ca46eSDavid Howells } internal; 281607ca46eSDavid Howells /* KVM_EXIT_OSI */ 282607ca46eSDavid Howells struct { 283607ca46eSDavid Howells __u64 gprs[32]; 284607ca46eSDavid Howells } osi; 285607ca46eSDavid Howells struct { 286607ca46eSDavid Howells __u64 nr; 287607ca46eSDavid Howells __u64 ret; 288607ca46eSDavid Howells __u64 args[9]; 289607ca46eSDavid Howells } papr_hcall; 290fa6b7fe9SCornelia Huck /* KVM_EXIT_S390_TSCH */ 291fa6b7fe9SCornelia Huck struct { 292fa6b7fe9SCornelia Huck __u16 subchannel_id; 293fa6b7fe9SCornelia Huck __u16 subchannel_nr; 294fa6b7fe9SCornelia Huck __u32 io_int_parm; 295fa6b7fe9SCornelia Huck __u32 io_int_word; 296fa6b7fe9SCornelia Huck __u32 ipb; 297fa6b7fe9SCornelia Huck __u8 dequeued; 298fa6b7fe9SCornelia Huck } s390_tsch; 299*1c810636SAlexander Graf /* KVM_EXIT_EPR */ 300*1c810636SAlexander Graf struct { 301*1c810636SAlexander Graf __u32 epr; 302*1c810636SAlexander Graf } epr; 303607ca46eSDavid Howells /* Fix the size of the union. */ 304607ca46eSDavid Howells char padding[256]; 305607ca46eSDavid Howells }; 306607ca46eSDavid Howells 307607ca46eSDavid Howells /* 308607ca46eSDavid Howells * shared registers between kvm and userspace. 309607ca46eSDavid Howells * kvm_valid_regs specifies the register classes set by the host 310607ca46eSDavid Howells * kvm_dirty_regs specified the register classes dirtied by userspace 311607ca46eSDavid Howells * struct kvm_sync_regs is architecture specific, as well as the 312607ca46eSDavid Howells * bits for kvm_valid_regs and kvm_dirty_regs 313607ca46eSDavid Howells */ 314607ca46eSDavid Howells __u64 kvm_valid_regs; 315607ca46eSDavid Howells __u64 kvm_dirty_regs; 316607ca46eSDavid Howells union { 317607ca46eSDavid Howells struct kvm_sync_regs regs; 318607ca46eSDavid Howells char padding[1024]; 319607ca46eSDavid Howells } s; 320607ca46eSDavid Howells }; 321607ca46eSDavid Howells 322607ca46eSDavid Howells /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */ 323607ca46eSDavid Howells 324607ca46eSDavid Howells struct kvm_coalesced_mmio_zone { 325607ca46eSDavid Howells __u64 addr; 326607ca46eSDavid Howells __u32 size; 327607ca46eSDavid Howells __u32 pad; 328607ca46eSDavid Howells }; 329607ca46eSDavid Howells 330607ca46eSDavid Howells struct kvm_coalesced_mmio { 331607ca46eSDavid Howells __u64 phys_addr; 332607ca46eSDavid Howells __u32 len; 333607ca46eSDavid Howells __u32 pad; 334607ca46eSDavid Howells __u8 data[8]; 335607ca46eSDavid Howells }; 336607ca46eSDavid Howells 337607ca46eSDavid Howells struct kvm_coalesced_mmio_ring { 338607ca46eSDavid Howells __u32 first, last; 339607ca46eSDavid Howells struct kvm_coalesced_mmio coalesced_mmio[0]; 340607ca46eSDavid Howells }; 341607ca46eSDavid Howells 342607ca46eSDavid Howells #define KVM_COALESCED_MMIO_MAX \ 343607ca46eSDavid Howells ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \ 344607ca46eSDavid Howells sizeof(struct kvm_coalesced_mmio)) 345607ca46eSDavid Howells 346607ca46eSDavid Howells /* for KVM_TRANSLATE */ 347607ca46eSDavid Howells struct kvm_translation { 348607ca46eSDavid Howells /* in */ 349607ca46eSDavid Howells __u64 linear_address; 350607ca46eSDavid Howells 351607ca46eSDavid Howells /* out */ 352607ca46eSDavid Howells __u64 physical_address; 353607ca46eSDavid Howells __u8 valid; 354607ca46eSDavid Howells __u8 writeable; 355607ca46eSDavid Howells __u8 usermode; 356607ca46eSDavid Howells __u8 pad[5]; 357607ca46eSDavid Howells }; 358607ca46eSDavid Howells 359607ca46eSDavid Howells /* for KVM_INTERRUPT */ 360607ca46eSDavid Howells struct kvm_interrupt { 361607ca46eSDavid Howells /* in */ 362607ca46eSDavid Howells __u32 irq; 363607ca46eSDavid Howells }; 364607ca46eSDavid Howells 365607ca46eSDavid Howells /* for KVM_GET_DIRTY_LOG */ 366607ca46eSDavid Howells struct kvm_dirty_log { 367607ca46eSDavid Howells __u32 slot; 368607ca46eSDavid Howells __u32 padding1; 369607ca46eSDavid Howells union { 370607ca46eSDavid Howells void __user *dirty_bitmap; /* one bit per page */ 371607ca46eSDavid Howells __u64 padding2; 372607ca46eSDavid Howells }; 373607ca46eSDavid Howells }; 374607ca46eSDavid Howells 375607ca46eSDavid Howells /* for KVM_SET_SIGNAL_MASK */ 376607ca46eSDavid Howells struct kvm_signal_mask { 377607ca46eSDavid Howells __u32 len; 378607ca46eSDavid Howells __u8 sigset[0]; 379607ca46eSDavid Howells }; 380607ca46eSDavid Howells 381607ca46eSDavid Howells /* for KVM_TPR_ACCESS_REPORTING */ 382607ca46eSDavid Howells struct kvm_tpr_access_ctl { 383607ca46eSDavid Howells __u32 enabled; 384607ca46eSDavid Howells __u32 flags; 385607ca46eSDavid Howells __u32 reserved[8]; 386607ca46eSDavid Howells }; 387607ca46eSDavid Howells 388607ca46eSDavid Howells /* for KVM_SET_VAPIC_ADDR */ 389607ca46eSDavid Howells struct kvm_vapic_addr { 390607ca46eSDavid Howells __u64 vapic_addr; 391607ca46eSDavid Howells }; 392607ca46eSDavid Howells 393607ca46eSDavid Howells /* for KVM_SET_MPSTATE */ 394607ca46eSDavid Howells 395607ca46eSDavid Howells #define KVM_MP_STATE_RUNNABLE 0 396607ca46eSDavid Howells #define KVM_MP_STATE_UNINITIALIZED 1 397607ca46eSDavid Howells #define KVM_MP_STATE_INIT_RECEIVED 2 398607ca46eSDavid Howells #define KVM_MP_STATE_HALTED 3 399607ca46eSDavid Howells #define KVM_MP_STATE_SIPI_RECEIVED 4 400607ca46eSDavid Howells 401607ca46eSDavid Howells struct kvm_mp_state { 402607ca46eSDavid Howells __u32 mp_state; 403607ca46eSDavid Howells }; 404607ca46eSDavid Howells 405607ca46eSDavid Howells struct kvm_s390_psw { 406607ca46eSDavid Howells __u64 mask; 407607ca46eSDavid Howells __u64 addr; 408607ca46eSDavid Howells }; 409607ca46eSDavid Howells 410607ca46eSDavid Howells /* valid values for type in kvm_s390_interrupt */ 411607ca46eSDavid Howells #define KVM_S390_SIGP_STOP 0xfffe0000u 412607ca46eSDavid Howells #define KVM_S390_PROGRAM_INT 0xfffe0001u 413607ca46eSDavid Howells #define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u 414607ca46eSDavid Howells #define KVM_S390_RESTART 0xfffe0003u 41548a3e950SCornelia Huck #define KVM_S390_MCHK 0xfffe1000u 416607ca46eSDavid Howells #define KVM_S390_INT_VIRTIO 0xffff2603u 417607ca46eSDavid Howells #define KVM_S390_INT_SERVICE 0xffff2401u 418607ca46eSDavid Howells #define KVM_S390_INT_EMERGENCY 0xffff1201u 419607ca46eSDavid Howells #define KVM_S390_INT_EXTERNAL_CALL 0xffff1202u 420d8346b7dSCornelia Huck /* Anything below 0xfffe0000u is taken by INT_IO */ 421d8346b7dSCornelia Huck #define KVM_S390_INT_IO(ai,cssid,ssid,schid) \ 422d8346b7dSCornelia Huck (((schid)) | \ 423d8346b7dSCornelia Huck ((ssid) << 16) | \ 424d8346b7dSCornelia Huck ((cssid) << 18) | \ 425d8346b7dSCornelia Huck ((ai) << 26)) 426d8346b7dSCornelia Huck #define KVM_S390_INT_IO_MIN 0x00000000u 427d8346b7dSCornelia Huck #define KVM_S390_INT_IO_MAX 0xfffdffffu 428d8346b7dSCornelia Huck 429607ca46eSDavid Howells 430607ca46eSDavid Howells struct kvm_s390_interrupt { 431607ca46eSDavid Howells __u32 type; 432607ca46eSDavid Howells __u32 parm; 433607ca46eSDavid Howells __u64 parm64; 434607ca46eSDavid Howells }; 435607ca46eSDavid Howells 436607ca46eSDavid Howells /* for KVM_SET_GUEST_DEBUG */ 437607ca46eSDavid Howells 438607ca46eSDavid Howells #define KVM_GUESTDBG_ENABLE 0x00000001 439607ca46eSDavid Howells #define KVM_GUESTDBG_SINGLESTEP 0x00000002 440607ca46eSDavid Howells 441607ca46eSDavid Howells struct kvm_guest_debug { 442607ca46eSDavid Howells __u32 control; 443607ca46eSDavid Howells __u32 pad; 444607ca46eSDavid Howells struct kvm_guest_debug_arch arch; 445607ca46eSDavid Howells }; 446607ca46eSDavid Howells 447607ca46eSDavid Howells enum { 448607ca46eSDavid Howells kvm_ioeventfd_flag_nr_datamatch, 449607ca46eSDavid Howells kvm_ioeventfd_flag_nr_pio, 450607ca46eSDavid Howells kvm_ioeventfd_flag_nr_deassign, 451607ca46eSDavid Howells kvm_ioeventfd_flag_nr_max, 452607ca46eSDavid Howells }; 453607ca46eSDavid Howells 454607ca46eSDavid Howells #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch) 455607ca46eSDavid Howells #define KVM_IOEVENTFD_FLAG_PIO (1 << kvm_ioeventfd_flag_nr_pio) 456607ca46eSDavid Howells #define KVM_IOEVENTFD_FLAG_DEASSIGN (1 << kvm_ioeventfd_flag_nr_deassign) 457607ca46eSDavid Howells 458607ca46eSDavid Howells #define KVM_IOEVENTFD_VALID_FLAG_MASK ((1 << kvm_ioeventfd_flag_nr_max) - 1) 459607ca46eSDavid Howells 460607ca46eSDavid Howells struct kvm_ioeventfd { 461607ca46eSDavid Howells __u64 datamatch; 462607ca46eSDavid Howells __u64 addr; /* legal pio/mmio address */ 463607ca46eSDavid Howells __u32 len; /* 1, 2, 4, or 8 bytes */ 464607ca46eSDavid Howells __s32 fd; 465607ca46eSDavid Howells __u32 flags; 466607ca46eSDavid Howells __u8 pad[36]; 467607ca46eSDavid Howells }; 468607ca46eSDavid Howells 469607ca46eSDavid Howells /* for KVM_ENABLE_CAP */ 470607ca46eSDavid Howells struct kvm_enable_cap { 471607ca46eSDavid Howells /* in */ 472607ca46eSDavid Howells __u32 cap; 473607ca46eSDavid Howells __u32 flags; 474607ca46eSDavid Howells __u64 args[4]; 475607ca46eSDavid Howells __u8 pad[64]; 476607ca46eSDavid Howells }; 477607ca46eSDavid Howells 478607ca46eSDavid Howells /* for KVM_PPC_GET_PVINFO */ 479607ca46eSDavid Howells struct kvm_ppc_pvinfo { 480607ca46eSDavid Howells /* out */ 481607ca46eSDavid Howells __u32 flags; 482607ca46eSDavid Howells __u32 hcall[4]; 483607ca46eSDavid Howells __u8 pad[108]; 484607ca46eSDavid Howells }; 485607ca46eSDavid Howells 486607ca46eSDavid Howells /* for KVM_PPC_GET_SMMU_INFO */ 487607ca46eSDavid Howells #define KVM_PPC_PAGE_SIZES_MAX_SZ 8 488607ca46eSDavid Howells 489607ca46eSDavid Howells struct kvm_ppc_one_page_size { 490607ca46eSDavid Howells __u32 page_shift; /* Page shift (or 0) */ 491607ca46eSDavid Howells __u32 pte_enc; /* Encoding in the HPTE (>>12) */ 492607ca46eSDavid Howells }; 493607ca46eSDavid Howells 494607ca46eSDavid Howells struct kvm_ppc_one_seg_page_size { 495607ca46eSDavid Howells __u32 page_shift; /* Base page shift of segment (or 0) */ 496607ca46eSDavid Howells __u32 slb_enc; /* SLB encoding for BookS */ 497607ca46eSDavid Howells struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ]; 498607ca46eSDavid Howells }; 499607ca46eSDavid Howells 500607ca46eSDavid Howells #define KVM_PPC_PAGE_SIZES_REAL 0x00000001 501607ca46eSDavid Howells #define KVM_PPC_1T_SEGMENTS 0x00000002 502607ca46eSDavid Howells 503607ca46eSDavid Howells struct kvm_ppc_smmu_info { 504607ca46eSDavid Howells __u64 flags; 505607ca46eSDavid Howells __u32 slb_size; 506607ca46eSDavid Howells __u32 pad; 507607ca46eSDavid Howells struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ]; 508607ca46eSDavid Howells }; 509607ca46eSDavid Howells 51019bf7f8aSMarcelo Tosatti #define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0) 51119bf7f8aSMarcelo Tosatti 512607ca46eSDavid Howells #define KVMIO 0xAE 513607ca46eSDavid Howells 514607ca46eSDavid Howells /* machine type bits, to be used as argument to KVM_CREATE_VM */ 515607ca46eSDavid Howells #define KVM_VM_S390_UCONTROL 1 516607ca46eSDavid Howells 517607ca46eSDavid Howells #define KVM_S390_SIE_PAGE_OFFSET 1 518607ca46eSDavid Howells 519607ca46eSDavid Howells /* 520607ca46eSDavid Howells * ioctls for /dev/kvm fds: 521607ca46eSDavid Howells */ 522607ca46eSDavid Howells #define KVM_GET_API_VERSION _IO(KVMIO, 0x00) 523607ca46eSDavid Howells #define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ 524607ca46eSDavid Howells #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) 525607ca46eSDavid Howells 526607ca46eSDavid Howells #define KVM_S390_ENABLE_SIE _IO(KVMIO, 0x06) 527607ca46eSDavid Howells /* 528607ca46eSDavid Howells * Check if a kvm extension is available. Argument is extension number, 529607ca46eSDavid Howells * return is 1 (yes) or 0 (no, sorry). 530607ca46eSDavid Howells */ 531607ca46eSDavid Howells #define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03) 532607ca46eSDavid Howells /* 533607ca46eSDavid Howells * Get size for mmap(vcpu_fd) 534607ca46eSDavid Howells */ 535607ca46eSDavid Howells #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ 536607ca46eSDavid Howells #define KVM_GET_SUPPORTED_CPUID _IOWR(KVMIO, 0x05, struct kvm_cpuid2) 537607ca46eSDavid Howells #define KVM_TRACE_ENABLE __KVM_DEPRECATED_MAIN_W_0x06 538607ca46eSDavid Howells #define KVM_TRACE_PAUSE __KVM_DEPRECATED_MAIN_0x07 539607ca46eSDavid Howells #define KVM_TRACE_DISABLE __KVM_DEPRECATED_MAIN_0x08 540607ca46eSDavid Howells 541607ca46eSDavid Howells /* 542607ca46eSDavid Howells * Extension capability list. 543607ca46eSDavid Howells */ 544607ca46eSDavid Howells #define KVM_CAP_IRQCHIP 0 545607ca46eSDavid Howells #define KVM_CAP_HLT 1 546607ca46eSDavid Howells #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2 547607ca46eSDavid Howells #define KVM_CAP_USER_MEMORY 3 548607ca46eSDavid Howells #define KVM_CAP_SET_TSS_ADDR 4 549607ca46eSDavid Howells #define KVM_CAP_VAPIC 6 550607ca46eSDavid Howells #define KVM_CAP_EXT_CPUID 7 551607ca46eSDavid Howells #define KVM_CAP_CLOCKSOURCE 8 552607ca46eSDavid Howells #define KVM_CAP_NR_VCPUS 9 /* returns recommended max vcpus per vm */ 553607ca46eSDavid Howells #define KVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */ 554607ca46eSDavid Howells #define KVM_CAP_PIT 11 555607ca46eSDavid Howells #define KVM_CAP_NOP_IO_DELAY 12 556607ca46eSDavid Howells #define KVM_CAP_PV_MMU 13 557607ca46eSDavid Howells #define KVM_CAP_MP_STATE 14 558607ca46eSDavid Howells #define KVM_CAP_COALESCED_MMIO 15 559607ca46eSDavid Howells #define KVM_CAP_SYNC_MMU 16 /* Changes to host mmap are reflected in guest */ 560607ca46eSDavid Howells #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT 561607ca46eSDavid Howells #define KVM_CAP_DEVICE_ASSIGNMENT 17 562607ca46eSDavid Howells #endif 563607ca46eSDavid Howells #define KVM_CAP_IOMMU 18 564607ca46eSDavid Howells #ifdef __KVM_HAVE_MSI 565607ca46eSDavid Howells #define KVM_CAP_DEVICE_MSI 20 566607ca46eSDavid Howells #endif 567607ca46eSDavid Howells /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */ 568607ca46eSDavid Howells #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21 569607ca46eSDavid Howells #ifdef __KVM_HAVE_USER_NMI 570607ca46eSDavid Howells #define KVM_CAP_USER_NMI 22 571607ca46eSDavid Howells #endif 572607ca46eSDavid Howells #ifdef __KVM_HAVE_GUEST_DEBUG 573607ca46eSDavid Howells #define KVM_CAP_SET_GUEST_DEBUG 23 574607ca46eSDavid Howells #endif 575607ca46eSDavid Howells #ifdef __KVM_HAVE_PIT 576607ca46eSDavid Howells #define KVM_CAP_REINJECT_CONTROL 24 577607ca46eSDavid Howells #endif 578607ca46eSDavid Howells #ifdef __KVM_HAVE_IOAPIC 579607ca46eSDavid Howells #define KVM_CAP_IRQ_ROUTING 25 580607ca46eSDavid Howells #endif 581607ca46eSDavid Howells #define KVM_CAP_IRQ_INJECT_STATUS 26 582607ca46eSDavid Howells #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT 583607ca46eSDavid Howells #define KVM_CAP_DEVICE_DEASSIGNMENT 27 584607ca46eSDavid Howells #endif 585607ca46eSDavid Howells #ifdef __KVM_HAVE_MSIX 586607ca46eSDavid Howells #define KVM_CAP_DEVICE_MSIX 28 587607ca46eSDavid Howells #endif 588607ca46eSDavid Howells #define KVM_CAP_ASSIGN_DEV_IRQ 29 589607ca46eSDavid Howells /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */ 590607ca46eSDavid Howells #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30 591607ca46eSDavid Howells #ifdef __KVM_HAVE_MCE 592607ca46eSDavid Howells #define KVM_CAP_MCE 31 593607ca46eSDavid Howells #endif 594607ca46eSDavid Howells #define KVM_CAP_IRQFD 32 595607ca46eSDavid Howells #ifdef __KVM_HAVE_PIT 596607ca46eSDavid Howells #define KVM_CAP_PIT2 33 597607ca46eSDavid Howells #endif 598607ca46eSDavid Howells #define KVM_CAP_SET_BOOT_CPU_ID 34 599607ca46eSDavid Howells #ifdef __KVM_HAVE_PIT_STATE2 600607ca46eSDavid Howells #define KVM_CAP_PIT_STATE2 35 601607ca46eSDavid Howells #endif 602607ca46eSDavid Howells #define KVM_CAP_IOEVENTFD 36 603607ca46eSDavid Howells #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 604607ca46eSDavid Howells #ifdef __KVM_HAVE_XEN_HVM 605607ca46eSDavid Howells #define KVM_CAP_XEN_HVM 38 606607ca46eSDavid Howells #endif 607607ca46eSDavid Howells #define KVM_CAP_ADJUST_CLOCK 39 608607ca46eSDavid Howells #define KVM_CAP_INTERNAL_ERROR_DATA 40 609607ca46eSDavid Howells #ifdef __KVM_HAVE_VCPU_EVENTS 610607ca46eSDavid Howells #define KVM_CAP_VCPU_EVENTS 41 611607ca46eSDavid Howells #endif 612607ca46eSDavid Howells #define KVM_CAP_S390_PSW 42 613607ca46eSDavid Howells #define KVM_CAP_PPC_SEGSTATE 43 614607ca46eSDavid Howells #define KVM_CAP_HYPERV 44 615607ca46eSDavid Howells #define KVM_CAP_HYPERV_VAPIC 45 616607ca46eSDavid Howells #define KVM_CAP_HYPERV_SPIN 46 617607ca46eSDavid Howells #define KVM_CAP_PCI_SEGMENT 47 618607ca46eSDavid Howells #define KVM_CAP_PPC_PAIRED_SINGLES 48 619607ca46eSDavid Howells #define KVM_CAP_INTR_SHADOW 49 620607ca46eSDavid Howells #ifdef __KVM_HAVE_DEBUGREGS 621607ca46eSDavid Howells #define KVM_CAP_DEBUGREGS 50 622607ca46eSDavid Howells #endif 623607ca46eSDavid Howells #define KVM_CAP_X86_ROBUST_SINGLESTEP 51 624607ca46eSDavid Howells #define KVM_CAP_PPC_OSI 52 625607ca46eSDavid Howells #define KVM_CAP_PPC_UNSET_IRQ 53 626607ca46eSDavid Howells #define KVM_CAP_ENABLE_CAP 54 627607ca46eSDavid Howells #ifdef __KVM_HAVE_XSAVE 628607ca46eSDavid Howells #define KVM_CAP_XSAVE 55 629607ca46eSDavid Howells #endif 630607ca46eSDavid Howells #ifdef __KVM_HAVE_XCRS 631607ca46eSDavid Howells #define KVM_CAP_XCRS 56 632607ca46eSDavid Howells #endif 633607ca46eSDavid Howells #define KVM_CAP_PPC_GET_PVINFO 57 634607ca46eSDavid Howells #define KVM_CAP_PPC_IRQ_LEVEL 58 635607ca46eSDavid Howells #define KVM_CAP_ASYNC_PF 59 636607ca46eSDavid Howells #define KVM_CAP_TSC_CONTROL 60 637607ca46eSDavid Howells #define KVM_CAP_GET_TSC_KHZ 61 638607ca46eSDavid Howells #define KVM_CAP_PPC_BOOKE_SREGS 62 639607ca46eSDavid Howells #define KVM_CAP_SPAPR_TCE 63 640607ca46eSDavid Howells #define KVM_CAP_PPC_SMT 64 641607ca46eSDavid Howells #define KVM_CAP_PPC_RMA 65 642607ca46eSDavid Howells #define KVM_CAP_MAX_VCPUS 66 /* returns max vcpus per vm */ 643607ca46eSDavid Howells #define KVM_CAP_PPC_HIOR 67 644607ca46eSDavid Howells #define KVM_CAP_PPC_PAPR 68 645607ca46eSDavid Howells #define KVM_CAP_SW_TLB 69 646607ca46eSDavid Howells #define KVM_CAP_ONE_REG 70 647607ca46eSDavid Howells #define KVM_CAP_S390_GMAP 71 648607ca46eSDavid Howells #define KVM_CAP_TSC_DEADLINE_TIMER 72 649607ca46eSDavid Howells #define KVM_CAP_S390_UCONTROL 73 650607ca46eSDavid Howells #define KVM_CAP_SYNC_REGS 74 651607ca46eSDavid Howells #define KVM_CAP_PCI_2_3 75 652607ca46eSDavid Howells #define KVM_CAP_KVMCLOCK_CTRL 76 653607ca46eSDavid Howells #define KVM_CAP_SIGNAL_MSI 77 654607ca46eSDavid Howells #define KVM_CAP_PPC_GET_SMMU_INFO 78 655607ca46eSDavid Howells #define KVM_CAP_S390_COW 79 656607ca46eSDavid Howells #define KVM_CAP_PPC_ALLOC_HTAB 80 657607ca46eSDavid Howells #ifdef __KVM_HAVE_READONLY_MEM 658607ca46eSDavid Howells #define KVM_CAP_READONLY_MEM 81 659607ca46eSDavid Howells #endif 660607ca46eSDavid Howells #define KVM_CAP_IRQFD_RESAMPLE 82 66119bf7f8aSMarcelo Tosatti #define KVM_CAP_PPC_BOOKE_WATCHDOG 83 662a2932923SPaul Mackerras #define KVM_CAP_PPC_HTAB_FD 84 663fa6b7fe9SCornelia Huck #define KVM_CAP_S390_CSS_SUPPORT 85 664*1c810636SAlexander Graf #define KVM_CAP_PPC_EPR 86 665607ca46eSDavid Howells 666607ca46eSDavid Howells #ifdef KVM_CAP_IRQ_ROUTING 667607ca46eSDavid Howells 668607ca46eSDavid Howells struct kvm_irq_routing_irqchip { 669607ca46eSDavid Howells __u32 irqchip; 670607ca46eSDavid Howells __u32 pin; 671607ca46eSDavid Howells }; 672607ca46eSDavid Howells 673607ca46eSDavid Howells struct kvm_irq_routing_msi { 674607ca46eSDavid Howells __u32 address_lo; 675607ca46eSDavid Howells __u32 address_hi; 676607ca46eSDavid Howells __u32 data; 677607ca46eSDavid Howells __u32 pad; 678607ca46eSDavid Howells }; 679607ca46eSDavid Howells 680607ca46eSDavid Howells /* gsi routing entry types */ 681607ca46eSDavid Howells #define KVM_IRQ_ROUTING_IRQCHIP 1 682607ca46eSDavid Howells #define KVM_IRQ_ROUTING_MSI 2 683607ca46eSDavid Howells 684607ca46eSDavid Howells struct kvm_irq_routing_entry { 685607ca46eSDavid Howells __u32 gsi; 686607ca46eSDavid Howells __u32 type; 687607ca46eSDavid Howells __u32 flags; 688607ca46eSDavid Howells __u32 pad; 689607ca46eSDavid Howells union { 690607ca46eSDavid Howells struct kvm_irq_routing_irqchip irqchip; 691607ca46eSDavid Howells struct kvm_irq_routing_msi msi; 692607ca46eSDavid Howells __u32 pad[8]; 693607ca46eSDavid Howells } u; 694607ca46eSDavid Howells }; 695607ca46eSDavid Howells 696607ca46eSDavid Howells struct kvm_irq_routing { 697607ca46eSDavid Howells __u32 nr; 698607ca46eSDavid Howells __u32 flags; 699607ca46eSDavid Howells struct kvm_irq_routing_entry entries[0]; 700607ca46eSDavid Howells }; 701607ca46eSDavid Howells 702607ca46eSDavid Howells #endif 703607ca46eSDavid Howells 704607ca46eSDavid Howells #ifdef KVM_CAP_MCE 705607ca46eSDavid Howells /* x86 MCE */ 706607ca46eSDavid Howells struct kvm_x86_mce { 707607ca46eSDavid Howells __u64 status; 708607ca46eSDavid Howells __u64 addr; 709607ca46eSDavid Howells __u64 misc; 710607ca46eSDavid Howells __u64 mcg_status; 711607ca46eSDavid Howells __u8 bank; 712607ca46eSDavid Howells __u8 pad1[7]; 713607ca46eSDavid Howells __u64 pad2[3]; 714607ca46eSDavid Howells }; 715607ca46eSDavid Howells #endif 716607ca46eSDavid Howells 717607ca46eSDavid Howells #ifdef KVM_CAP_XEN_HVM 718607ca46eSDavid Howells struct kvm_xen_hvm_config { 719607ca46eSDavid Howells __u32 flags; 720607ca46eSDavid Howells __u32 msr; 721607ca46eSDavid Howells __u64 blob_addr_32; 722607ca46eSDavid Howells __u64 blob_addr_64; 723607ca46eSDavid Howells __u8 blob_size_32; 724607ca46eSDavid Howells __u8 blob_size_64; 725607ca46eSDavid Howells __u8 pad2[30]; 726607ca46eSDavid Howells }; 727607ca46eSDavid Howells #endif 728607ca46eSDavid Howells 729607ca46eSDavid Howells #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0) 730607ca46eSDavid Howells /* 731607ca46eSDavid Howells * Available with KVM_CAP_IRQFD_RESAMPLE 732607ca46eSDavid Howells * 733607ca46eSDavid Howells * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies 734607ca46eSDavid Howells * the irqfd to operate in resampling mode for level triggered interrupt 735607ca46eSDavid Howells * emlation. See Documentation/virtual/kvm/api.txt. 736607ca46eSDavid Howells */ 737607ca46eSDavid Howells #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1) 738607ca46eSDavid Howells 739607ca46eSDavid Howells struct kvm_irqfd { 740607ca46eSDavid Howells __u32 fd; 741607ca46eSDavid Howells __u32 gsi; 742607ca46eSDavid Howells __u32 flags; 743607ca46eSDavid Howells __u32 resamplefd; 744607ca46eSDavid Howells __u8 pad[16]; 745607ca46eSDavid Howells }; 746607ca46eSDavid Howells 747607ca46eSDavid Howells struct kvm_clock_data { 748607ca46eSDavid Howells __u64 clock; 749607ca46eSDavid Howells __u32 flags; 750607ca46eSDavid Howells __u32 pad[9]; 751607ca46eSDavid Howells }; 752607ca46eSDavid Howells 753607ca46eSDavid Howells #define KVM_MMU_FSL_BOOKE_NOHV 0 754607ca46eSDavid Howells #define KVM_MMU_FSL_BOOKE_HV 1 755607ca46eSDavid Howells 756607ca46eSDavid Howells struct kvm_config_tlb { 757607ca46eSDavid Howells __u64 params; 758607ca46eSDavid Howells __u64 array; 759607ca46eSDavid Howells __u32 mmu_type; 760607ca46eSDavid Howells __u32 array_len; 761607ca46eSDavid Howells }; 762607ca46eSDavid Howells 763607ca46eSDavid Howells struct kvm_dirty_tlb { 764607ca46eSDavid Howells __u64 bitmap; 765607ca46eSDavid Howells __u32 num_dirty; 766607ca46eSDavid Howells }; 767607ca46eSDavid Howells 768607ca46eSDavid Howells /* Available with KVM_CAP_ONE_REG */ 769607ca46eSDavid Howells 770607ca46eSDavid Howells #define KVM_REG_ARCH_MASK 0xff00000000000000ULL 771607ca46eSDavid Howells #define KVM_REG_GENERIC 0x0000000000000000ULL 772607ca46eSDavid Howells 773607ca46eSDavid Howells /* 774607ca46eSDavid Howells * Architecture specific registers are to be defined in arch headers and 775607ca46eSDavid Howells * ORed with the arch identifier. 776607ca46eSDavid Howells */ 777607ca46eSDavid Howells #define KVM_REG_PPC 0x1000000000000000ULL 778607ca46eSDavid Howells #define KVM_REG_X86 0x2000000000000000ULL 779607ca46eSDavid Howells #define KVM_REG_IA64 0x3000000000000000ULL 780607ca46eSDavid Howells #define KVM_REG_ARM 0x4000000000000000ULL 781607ca46eSDavid Howells #define KVM_REG_S390 0x5000000000000000ULL 782607ca46eSDavid Howells 783607ca46eSDavid Howells #define KVM_REG_SIZE_SHIFT 52 784607ca46eSDavid Howells #define KVM_REG_SIZE_MASK 0x00f0000000000000ULL 785607ca46eSDavid Howells #define KVM_REG_SIZE_U8 0x0000000000000000ULL 786607ca46eSDavid Howells #define KVM_REG_SIZE_U16 0x0010000000000000ULL 787607ca46eSDavid Howells #define KVM_REG_SIZE_U32 0x0020000000000000ULL 788607ca46eSDavid Howells #define KVM_REG_SIZE_U64 0x0030000000000000ULL 789607ca46eSDavid Howells #define KVM_REG_SIZE_U128 0x0040000000000000ULL 790607ca46eSDavid Howells #define KVM_REG_SIZE_U256 0x0050000000000000ULL 791607ca46eSDavid Howells #define KVM_REG_SIZE_U512 0x0060000000000000ULL 792607ca46eSDavid Howells #define KVM_REG_SIZE_U1024 0x0070000000000000ULL 793607ca46eSDavid Howells 794607ca46eSDavid Howells struct kvm_one_reg { 795607ca46eSDavid Howells __u64 id; 796607ca46eSDavid Howells __u64 addr; 797607ca46eSDavid Howells }; 798607ca46eSDavid Howells 799607ca46eSDavid Howells struct kvm_msi { 800607ca46eSDavid Howells __u32 address_lo; 801607ca46eSDavid Howells __u32 address_hi; 802607ca46eSDavid Howells __u32 data; 803607ca46eSDavid Howells __u32 flags; 804607ca46eSDavid Howells __u8 pad[16]; 805607ca46eSDavid Howells }; 806607ca46eSDavid Howells 807607ca46eSDavid Howells /* 808607ca46eSDavid Howells * ioctls for VM fds 809607ca46eSDavid Howells */ 810607ca46eSDavid Howells #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) 811607ca46eSDavid Howells /* 812607ca46eSDavid Howells * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns 813607ca46eSDavid Howells * a vcpu fd. 814607ca46eSDavid Howells */ 815607ca46eSDavid Howells #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) 816607ca46eSDavid Howells #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) 817607ca46eSDavid Howells /* KVM_SET_MEMORY_ALIAS is obsolete: */ 818607ca46eSDavid Howells #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) 819607ca46eSDavid Howells #define KVM_SET_NR_MMU_PAGES _IO(KVMIO, 0x44) 820607ca46eSDavid Howells #define KVM_GET_NR_MMU_PAGES _IO(KVMIO, 0x45) 821607ca46eSDavid Howells #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \ 822607ca46eSDavid Howells struct kvm_userspace_memory_region) 823607ca46eSDavid Howells #define KVM_SET_TSS_ADDR _IO(KVMIO, 0x47) 824607ca46eSDavid Howells #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) 825607ca46eSDavid Howells 826607ca46eSDavid Howells /* enable ucontrol for s390 */ 827607ca46eSDavid Howells struct kvm_s390_ucas_mapping { 828607ca46eSDavid Howells __u64 user_addr; 829607ca46eSDavid Howells __u64 vcpu_addr; 830607ca46eSDavid Howells __u64 length; 831607ca46eSDavid Howells }; 832607ca46eSDavid Howells #define KVM_S390_UCAS_MAP _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping) 833607ca46eSDavid Howells #define KVM_S390_UCAS_UNMAP _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping) 834607ca46eSDavid Howells #define KVM_S390_VCPU_FAULT _IOW(KVMIO, 0x52, unsigned long) 835607ca46eSDavid Howells 836607ca46eSDavid Howells /* Device model IOC */ 837607ca46eSDavid Howells #define KVM_CREATE_IRQCHIP _IO(KVMIO, 0x60) 838607ca46eSDavid Howells #define KVM_IRQ_LINE _IOW(KVMIO, 0x61, struct kvm_irq_level) 839607ca46eSDavid Howells #define KVM_GET_IRQCHIP _IOWR(KVMIO, 0x62, struct kvm_irqchip) 840607ca46eSDavid Howells #define KVM_SET_IRQCHIP _IOR(KVMIO, 0x63, struct kvm_irqchip) 841607ca46eSDavid Howells #define KVM_CREATE_PIT _IO(KVMIO, 0x64) 842607ca46eSDavid Howells #define KVM_GET_PIT _IOWR(KVMIO, 0x65, struct kvm_pit_state) 843607ca46eSDavid Howells #define KVM_SET_PIT _IOR(KVMIO, 0x66, struct kvm_pit_state) 844607ca46eSDavid Howells #define KVM_IRQ_LINE_STATUS _IOWR(KVMIO, 0x67, struct kvm_irq_level) 845607ca46eSDavid Howells #define KVM_REGISTER_COALESCED_MMIO \ 846607ca46eSDavid Howells _IOW(KVMIO, 0x67, struct kvm_coalesced_mmio_zone) 847607ca46eSDavid Howells #define KVM_UNREGISTER_COALESCED_MMIO \ 848607ca46eSDavid Howells _IOW(KVMIO, 0x68, struct kvm_coalesced_mmio_zone) 849607ca46eSDavid Howells #define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ 850607ca46eSDavid Howells struct kvm_assigned_pci_dev) 851607ca46eSDavid Howells #define KVM_SET_GSI_ROUTING _IOW(KVMIO, 0x6a, struct kvm_irq_routing) 852607ca46eSDavid Howells /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ 853607ca46eSDavid Howells #define KVM_ASSIGN_IRQ __KVM_DEPRECATED_VM_R_0x70 854607ca46eSDavid Howells #define KVM_ASSIGN_DEV_IRQ _IOW(KVMIO, 0x70, struct kvm_assigned_irq) 855607ca46eSDavid Howells #define KVM_REINJECT_CONTROL _IO(KVMIO, 0x71) 856607ca46eSDavid Howells #define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ 857607ca46eSDavid Howells struct kvm_assigned_pci_dev) 858607ca46eSDavid Howells #define KVM_ASSIGN_SET_MSIX_NR _IOW(KVMIO, 0x73, \ 859607ca46eSDavid Howells struct kvm_assigned_msix_nr) 860607ca46eSDavid Howells #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO, 0x74, \ 861607ca46eSDavid Howells struct kvm_assigned_msix_entry) 862607ca46eSDavid Howells #define KVM_DEASSIGN_DEV_IRQ _IOW(KVMIO, 0x75, struct kvm_assigned_irq) 863607ca46eSDavid Howells #define KVM_IRQFD _IOW(KVMIO, 0x76, struct kvm_irqfd) 864607ca46eSDavid Howells #define KVM_CREATE_PIT2 _IOW(KVMIO, 0x77, struct kvm_pit_config) 865607ca46eSDavid Howells #define KVM_SET_BOOT_CPU_ID _IO(KVMIO, 0x78) 866607ca46eSDavid Howells #define KVM_IOEVENTFD _IOW(KVMIO, 0x79, struct kvm_ioeventfd) 867607ca46eSDavid Howells #define KVM_XEN_HVM_CONFIG _IOW(KVMIO, 0x7a, struct kvm_xen_hvm_config) 868607ca46eSDavid Howells #define KVM_SET_CLOCK _IOW(KVMIO, 0x7b, struct kvm_clock_data) 869607ca46eSDavid Howells #define KVM_GET_CLOCK _IOR(KVMIO, 0x7c, struct kvm_clock_data) 870607ca46eSDavid Howells /* Available with KVM_CAP_PIT_STATE2 */ 871607ca46eSDavid Howells #define KVM_GET_PIT2 _IOR(KVMIO, 0x9f, struct kvm_pit_state2) 872607ca46eSDavid Howells #define KVM_SET_PIT2 _IOW(KVMIO, 0xa0, struct kvm_pit_state2) 873607ca46eSDavid Howells /* Available with KVM_CAP_PPC_GET_PVINFO */ 874607ca46eSDavid Howells #define KVM_PPC_GET_PVINFO _IOW(KVMIO, 0xa1, struct kvm_ppc_pvinfo) 875607ca46eSDavid Howells /* Available with KVM_CAP_TSC_CONTROL */ 876607ca46eSDavid Howells #define KVM_SET_TSC_KHZ _IO(KVMIO, 0xa2) 877607ca46eSDavid Howells #define KVM_GET_TSC_KHZ _IO(KVMIO, 0xa3) 878607ca46eSDavid Howells /* Available with KVM_CAP_PCI_2_3 */ 879607ca46eSDavid Howells #define KVM_ASSIGN_SET_INTX_MASK _IOW(KVMIO, 0xa4, \ 880607ca46eSDavid Howells struct kvm_assigned_pci_dev) 881607ca46eSDavid Howells /* Available with KVM_CAP_SIGNAL_MSI */ 882607ca46eSDavid Howells #define KVM_SIGNAL_MSI _IOW(KVMIO, 0xa5, struct kvm_msi) 883607ca46eSDavid Howells /* Available with KVM_CAP_PPC_GET_SMMU_INFO */ 884607ca46eSDavid Howells #define KVM_PPC_GET_SMMU_INFO _IOR(KVMIO, 0xa6, struct kvm_ppc_smmu_info) 885607ca46eSDavid Howells /* Available with KVM_CAP_PPC_ALLOC_HTAB */ 886607ca46eSDavid Howells #define KVM_PPC_ALLOCATE_HTAB _IOWR(KVMIO, 0xa7, __u32) 88719bf7f8aSMarcelo Tosatti #define KVM_CREATE_SPAPR_TCE _IOW(KVMIO, 0xa8, struct kvm_create_spapr_tce) 88819bf7f8aSMarcelo Tosatti /* Available with KVM_CAP_RMA */ 88919bf7f8aSMarcelo Tosatti #define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma) 890a2932923SPaul Mackerras /* Available with KVM_CAP_PPC_HTAB_FD */ 891a2932923SPaul Mackerras #define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd) 892607ca46eSDavid Howells 893607ca46eSDavid Howells /* 894607ca46eSDavid Howells * ioctls for vcpu fds 895607ca46eSDavid Howells */ 896607ca46eSDavid Howells #define KVM_RUN _IO(KVMIO, 0x80) 897607ca46eSDavid Howells #define KVM_GET_REGS _IOR(KVMIO, 0x81, struct kvm_regs) 898607ca46eSDavid Howells #define KVM_SET_REGS _IOW(KVMIO, 0x82, struct kvm_regs) 899607ca46eSDavid Howells #define KVM_GET_SREGS _IOR(KVMIO, 0x83, struct kvm_sregs) 900607ca46eSDavid Howells #define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) 901607ca46eSDavid Howells #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) 902607ca46eSDavid Howells #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) 903607ca46eSDavid Howells /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ 904607ca46eSDavid Howells #define KVM_DEBUG_GUEST __KVM_DEPRECATED_VCPU_W_0x87 905607ca46eSDavid Howells #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) 906607ca46eSDavid Howells #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) 907607ca46eSDavid Howells #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) 908607ca46eSDavid Howells #define KVM_SET_SIGNAL_MASK _IOW(KVMIO, 0x8b, struct kvm_signal_mask) 909607ca46eSDavid Howells #define KVM_GET_FPU _IOR(KVMIO, 0x8c, struct kvm_fpu) 910607ca46eSDavid Howells #define KVM_SET_FPU _IOW(KVMIO, 0x8d, struct kvm_fpu) 911607ca46eSDavid Howells #define KVM_GET_LAPIC _IOR(KVMIO, 0x8e, struct kvm_lapic_state) 912607ca46eSDavid Howells #define KVM_SET_LAPIC _IOW(KVMIO, 0x8f, struct kvm_lapic_state) 913607ca46eSDavid Howells #define KVM_SET_CPUID2 _IOW(KVMIO, 0x90, struct kvm_cpuid2) 914607ca46eSDavid Howells #define KVM_GET_CPUID2 _IOWR(KVMIO, 0x91, struct kvm_cpuid2) 915607ca46eSDavid Howells /* Available with KVM_CAP_VAPIC */ 916607ca46eSDavid Howells #define KVM_TPR_ACCESS_REPORTING _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl) 917607ca46eSDavid Howells /* Available with KVM_CAP_VAPIC */ 918607ca46eSDavid Howells #define KVM_SET_VAPIC_ADDR _IOW(KVMIO, 0x93, struct kvm_vapic_addr) 919607ca46eSDavid Howells /* valid for virtual machine (for floating interrupt)_and_ vcpu */ 920607ca46eSDavid Howells #define KVM_S390_INTERRUPT _IOW(KVMIO, 0x94, struct kvm_s390_interrupt) 921607ca46eSDavid Howells /* store status for s390 */ 922607ca46eSDavid Howells #define KVM_S390_STORE_STATUS_NOADDR (-1ul) 923607ca46eSDavid Howells #define KVM_S390_STORE_STATUS_PREFIXED (-2ul) 924607ca46eSDavid Howells #define KVM_S390_STORE_STATUS _IOW(KVMIO, 0x95, unsigned long) 925607ca46eSDavid Howells /* initial ipl psw for s390 */ 926607ca46eSDavid Howells #define KVM_S390_SET_INITIAL_PSW _IOW(KVMIO, 0x96, struct kvm_s390_psw) 927607ca46eSDavid Howells /* initial reset for s390 */ 928607ca46eSDavid Howells #define KVM_S390_INITIAL_RESET _IO(KVMIO, 0x97) 929607ca46eSDavid Howells #define KVM_GET_MP_STATE _IOR(KVMIO, 0x98, struct kvm_mp_state) 930607ca46eSDavid Howells #define KVM_SET_MP_STATE _IOW(KVMIO, 0x99, struct kvm_mp_state) 931607ca46eSDavid Howells /* Available with KVM_CAP_NMI */ 932607ca46eSDavid Howells #define KVM_NMI _IO(KVMIO, 0x9a) 933607ca46eSDavid Howells /* Available with KVM_CAP_SET_GUEST_DEBUG */ 934607ca46eSDavid Howells #define KVM_SET_GUEST_DEBUG _IOW(KVMIO, 0x9b, struct kvm_guest_debug) 935607ca46eSDavid Howells /* MCE for x86 */ 936607ca46eSDavid Howells #define KVM_X86_SETUP_MCE _IOW(KVMIO, 0x9c, __u64) 937607ca46eSDavid Howells #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO, 0x9d, __u64) 938607ca46eSDavid Howells #define KVM_X86_SET_MCE _IOW(KVMIO, 0x9e, struct kvm_x86_mce) 939607ca46eSDavid Howells /* IA64 stack access */ 940607ca46eSDavid Howells #define KVM_IA64_VCPU_GET_STACK _IOR(KVMIO, 0x9a, void *) 941607ca46eSDavid Howells #define KVM_IA64_VCPU_SET_STACK _IOW(KVMIO, 0x9b, void *) 942607ca46eSDavid Howells /* Available with KVM_CAP_VCPU_EVENTS */ 943607ca46eSDavid Howells #define KVM_GET_VCPU_EVENTS _IOR(KVMIO, 0x9f, struct kvm_vcpu_events) 944607ca46eSDavid Howells #define KVM_SET_VCPU_EVENTS _IOW(KVMIO, 0xa0, struct kvm_vcpu_events) 945607ca46eSDavid Howells /* Available with KVM_CAP_DEBUGREGS */ 946607ca46eSDavid Howells #define KVM_GET_DEBUGREGS _IOR(KVMIO, 0xa1, struct kvm_debugregs) 947607ca46eSDavid Howells #define KVM_SET_DEBUGREGS _IOW(KVMIO, 0xa2, struct kvm_debugregs) 948607ca46eSDavid Howells #define KVM_ENABLE_CAP _IOW(KVMIO, 0xa3, struct kvm_enable_cap) 949607ca46eSDavid Howells /* Available with KVM_CAP_XSAVE */ 950607ca46eSDavid Howells #define KVM_GET_XSAVE _IOR(KVMIO, 0xa4, struct kvm_xsave) 951607ca46eSDavid Howells #define KVM_SET_XSAVE _IOW(KVMIO, 0xa5, struct kvm_xsave) 952607ca46eSDavid Howells /* Available with KVM_CAP_XCRS */ 953607ca46eSDavid Howells #define KVM_GET_XCRS _IOR(KVMIO, 0xa6, struct kvm_xcrs) 954607ca46eSDavid Howells #define KVM_SET_XCRS _IOW(KVMIO, 0xa7, struct kvm_xcrs) 955607ca46eSDavid Howells /* Available with KVM_CAP_SW_TLB */ 956607ca46eSDavid Howells #define KVM_DIRTY_TLB _IOW(KVMIO, 0xaa, struct kvm_dirty_tlb) 957607ca46eSDavid Howells /* Available with KVM_CAP_ONE_REG */ 958607ca46eSDavid Howells #define KVM_GET_ONE_REG _IOW(KVMIO, 0xab, struct kvm_one_reg) 959607ca46eSDavid Howells #define KVM_SET_ONE_REG _IOW(KVMIO, 0xac, struct kvm_one_reg) 960607ca46eSDavid Howells /* VM is being stopped by host */ 961607ca46eSDavid Howells #define KVM_KVMCLOCK_CTRL _IO(KVMIO, 0xad) 962607ca46eSDavid Howells 963607ca46eSDavid Howells #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) 964607ca46eSDavid Howells #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) 965607ca46eSDavid Howells #define KVM_DEV_ASSIGN_MASK_INTX (1 << 2) 966607ca46eSDavid Howells 967607ca46eSDavid Howells struct kvm_assigned_pci_dev { 968607ca46eSDavid Howells __u32 assigned_dev_id; 969607ca46eSDavid Howells __u32 busnr; 970607ca46eSDavid Howells __u32 devfn; 971607ca46eSDavid Howells __u32 flags; 972607ca46eSDavid Howells __u32 segnr; 973607ca46eSDavid Howells union { 974607ca46eSDavid Howells __u32 reserved[11]; 975607ca46eSDavid Howells }; 976607ca46eSDavid Howells }; 977607ca46eSDavid Howells 978607ca46eSDavid Howells #define KVM_DEV_IRQ_HOST_INTX (1 << 0) 979607ca46eSDavid Howells #define KVM_DEV_IRQ_HOST_MSI (1 << 1) 980607ca46eSDavid Howells #define KVM_DEV_IRQ_HOST_MSIX (1 << 2) 981607ca46eSDavid Howells 982607ca46eSDavid Howells #define KVM_DEV_IRQ_GUEST_INTX (1 << 8) 983607ca46eSDavid Howells #define KVM_DEV_IRQ_GUEST_MSI (1 << 9) 984607ca46eSDavid Howells #define KVM_DEV_IRQ_GUEST_MSIX (1 << 10) 985607ca46eSDavid Howells 986607ca46eSDavid Howells #define KVM_DEV_IRQ_HOST_MASK 0x00ff 987607ca46eSDavid Howells #define KVM_DEV_IRQ_GUEST_MASK 0xff00 988607ca46eSDavid Howells 989607ca46eSDavid Howells struct kvm_assigned_irq { 990607ca46eSDavid Howells __u32 assigned_dev_id; 991607ca46eSDavid Howells __u32 host_irq; /* ignored (legacy field) */ 992607ca46eSDavid Howells __u32 guest_irq; 993607ca46eSDavid Howells __u32 flags; 994607ca46eSDavid Howells union { 995607ca46eSDavid Howells __u32 reserved[12]; 996607ca46eSDavid Howells }; 997607ca46eSDavid Howells }; 998607ca46eSDavid Howells 999607ca46eSDavid Howells struct kvm_assigned_msix_nr { 1000607ca46eSDavid Howells __u32 assigned_dev_id; 1001607ca46eSDavid Howells __u16 entry_nr; 1002607ca46eSDavid Howells __u16 padding; 1003607ca46eSDavid Howells }; 1004607ca46eSDavid Howells 1005607ca46eSDavid Howells #define KVM_MAX_MSIX_PER_DEV 256 1006607ca46eSDavid Howells struct kvm_assigned_msix_entry { 1007607ca46eSDavid Howells __u32 assigned_dev_id; 1008607ca46eSDavid Howells __u32 gsi; 1009607ca46eSDavid Howells __u16 entry; /* The index of entry in the MSI-X table */ 1010607ca46eSDavid Howells __u16 padding[3]; 1011607ca46eSDavid Howells }; 1012607ca46eSDavid Howells 1013607ca46eSDavid Howells #endif /* __LINUX_KVM_H */ 1014