linux/include/linux/kvm.h
<<
>>
Prefs
   1#ifndef __LINUX_KVM_H
   2#define __LINUX_KVM_H
   3
   4/*
   5 * Userspace interface for /dev/kvm - kernel based virtual machine
   6 *
   7 * Note: you must update KVM_API_VERSION if you change this interface.
   8 */
   9
  10#include <linux/types.h>
  11#include <linux/compiler.h>
  12#include <linux/ioctl.h>
  13#include <asm/kvm.h>
  14
  15#define KVM_API_VERSION 12
  16
  17/* for KVM_TRACE_ENABLE, deprecated */
  18struct kvm_user_trace_setup {
  19        __u32 buf_size; /* sub_buffer size of each per-cpu */
  20        __u32 buf_nr; /* the number of sub_buffers of each per-cpu */
  21};
  22
  23/* for KVM_CREATE_MEMORY_REGION */
  24struct kvm_memory_region {
  25        __u32 slot;
  26        __u32 flags;
  27        __u64 guest_phys_addr;
  28        __u64 memory_size; /* bytes */
  29};
  30
  31/* for KVM_SET_USER_MEMORY_REGION */
  32struct kvm_userspace_memory_region {
  33        __u32 slot;
  34        __u32 flags;
  35        __u64 guest_phys_addr;
  36        __u64 memory_size; /* bytes */
  37        __u64 userspace_addr; /* start of the userspace allocated memory */
  38};
  39
  40/* for kvm_memory_region::flags */
  41#define KVM_MEM_LOG_DIRTY_PAGES  1UL
  42
  43
  44/* for KVM_IRQ_LINE */
  45struct kvm_irq_level {
  46        /*
  47         * ACPI gsi notion of irq.
  48         * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
  49         * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
  50         */
  51        union {
  52                __u32 irq;
  53                __s32 status;
  54        };
  55        __u32 level;
  56};
  57
  58
  59struct kvm_irqchip {
  60        __u32 chip_id;
  61        __u32 pad;
  62        union {
  63                char dummy[512];  /* reserving space */
  64#ifdef __KVM_HAVE_PIT
  65                struct kvm_pic_state pic;
  66#endif
  67#ifdef __KVM_HAVE_IOAPIC
  68                struct kvm_ioapic_state ioapic;
  69#endif
  70        } chip;
  71};
  72
  73/* for KVM_CREATE_PIT2 */
  74struct kvm_pit_config {
  75        __u32 flags;
  76        __u32 pad[15];
  77};
  78
  79#define KVM_PIT_SPEAKER_DUMMY     1
  80
  81#define KVM_EXIT_UNKNOWN          0
  82#define KVM_EXIT_EXCEPTION        1
  83#define KVM_EXIT_IO               2
  84#define KVM_EXIT_HYPERCALL        3
  85#define KVM_EXIT_DEBUG            4
  86#define KVM_EXIT_HLT              5
  87#define KVM_EXIT_MMIO             6
  88#define KVM_EXIT_IRQ_WINDOW_OPEN  7
  89#define KVM_EXIT_SHUTDOWN         8
  90#define KVM_EXIT_FAIL_ENTRY       9
  91#define KVM_EXIT_INTR             10
  92#define KVM_EXIT_SET_TPR          11
  93#define KVM_EXIT_TPR_ACCESS       12
  94#define KVM_EXIT_S390_SIEIC       13
  95#define KVM_EXIT_S390_RESET       14
  96#define KVM_EXIT_DCR              15
  97#define KVM_EXIT_NMI              16
  98#define KVM_EXIT_INTERNAL_ERROR   17
  99
 100/* For KVM_EXIT_INTERNAL_ERROR */
 101#define KVM_INTERNAL_ERROR_EMULATION 1
 102
 103/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 104struct kvm_run {
 105        /* in */
 106        __u8 request_interrupt_window;
 107        __u8 padding1[7];
 108
 109        /* out */
 110        __u32 exit_reason;
 111        __u8 ready_for_interrupt_injection;
 112        __u8 if_flag;
 113        __u8 padding2[2];
 114
 115        /* in (pre_kvm_run), out (post_kvm_run) */
 116        __u64 cr8;
 117        __u64 apic_base;
 118
 119        union {
 120                /* KVM_EXIT_UNKNOWN */
 121                struct {
 122                        __u64 hardware_exit_reason;
 123                } hw;
 124                /* KVM_EXIT_FAIL_ENTRY */
 125                struct {
 126                        __u64 hardware_entry_failure_reason;
 127                } fail_entry;
 128                /* KVM_EXIT_EXCEPTION */
 129                struct {
 130                        __u32 exception;
 131                        __u32 error_code;
 132                } ex;
 133                /* KVM_EXIT_IO */
 134                struct {
 135#define KVM_EXIT_IO_IN  0
 136#define KVM_EXIT_IO_OUT 1
 137                        __u8 direction;
 138                        __u8 size; /* bytes */
 139                        __u16 port;
 140                        __u32 count;
 141                        __u64 data_offset; /* relative to kvm_run start */
 142                } io;
 143                struct {
 144                        struct kvm_debug_exit_arch arch;
 145                } debug;
 146                /* KVM_EXIT_MMIO */
 147                struct {
 148                        __u64 phys_addr;
 149                        __u8  data[8];
 150                        __u32 len;
 151                        __u8  is_write;
 152                } mmio;
 153                /* KVM_EXIT_HYPERCALL */
 154                struct {
 155                        __u64 nr;
 156                        __u64 args[6];
 157                        __u64 ret;
 158                        __u32 longmode;
 159                        __u32 pad;
 160                } hypercall;
 161                /* KVM_EXIT_TPR_ACCESS */
 162                struct {
 163                        __u64 rip;
 164                        __u32 is_write;
 165                        __u32 pad;
 166                } tpr_access;
 167                /* KVM_EXIT_S390_SIEIC */
 168                struct {
 169                        __u8 icptcode;
 170                        __u64 mask; /* psw upper half */
 171                        __u64 addr; /* psw lower half */
 172                        __u16 ipa;
 173                        __u32 ipb;
 174                } s390_sieic;
 175                /* KVM_EXIT_S390_RESET */
 176#define KVM_S390_RESET_POR       1
 177#define KVM_S390_RESET_CLEAR     2
 178#define KVM_S390_RESET_SUBSYSTEM 4
 179#define KVM_S390_RESET_CPU_INIT  8
 180#define KVM_S390_RESET_IPL       16
 181                __u64 s390_reset_flags;
 182                /* KVM_EXIT_DCR */
 183                struct {
 184                        __u32 dcrn;
 185                        __u32 data;
 186                        __u8  is_write;
 187                } dcr;
 188                struct {
 189                        __u32 suberror;
 190                } internal;
 191                /* Fix the size of the union. */
 192                char padding[256];
 193        };
 194};
 195
 196/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
 197
 198struct kvm_coalesced_mmio_zone {
 199        __u64 addr;
 200        __u32 size;
 201        __u32 pad;
 202};
 203
 204struct kvm_coalesced_mmio {
 205        __u64 phys_addr;
 206        __u32 len;
 207        __u32 pad;
 208        __u8  data[8];
 209};
 210
 211struct kvm_coalesced_mmio_ring {
 212        __u32 first, last;
 213        struct kvm_coalesced_mmio coalesced_mmio[0];
 214};
 215
 216#define KVM_COALESCED_MMIO_MAX \
 217        ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
 218         sizeof(struct kvm_coalesced_mmio))
 219
 220/* for KVM_TRANSLATE */
 221struct kvm_translation {
 222        /* in */
 223        __u64 linear_address;
 224
 225        /* out */
 226        __u64 physical_address;
 227        __u8  valid;
 228        __u8  writeable;
 229        __u8  usermode;
 230        __u8  pad[5];
 231};
 232
 233/* for KVM_INTERRUPT */
 234struct kvm_interrupt {
 235        /* in */
 236        __u32 irq;
 237};
 238
 239/* for KVM_GET_DIRTY_LOG */
 240struct kvm_dirty_log {
 241        __u32 slot;
 242        __u32 padding1;
 243        union {
 244                void __user *dirty_bitmap; /* one bit per page */
 245                __u64 padding2;
 246        };
 247};
 248
 249/* for KVM_SET_SIGNAL_MASK */
 250struct kvm_signal_mask {
 251        __u32 len;
 252        __u8  sigset[0];
 253};
 254
 255/* for KVM_TPR_ACCESS_REPORTING */
 256struct kvm_tpr_access_ctl {
 257        __u32 enabled;
 258        __u32 flags;
 259        __u32 reserved[8];
 260};
 261
 262/* for KVM_SET_VAPIC_ADDR */
 263struct kvm_vapic_addr {
 264        __u64 vapic_addr;
 265};
 266
 267/* for KVM_SET_MPSTATE */
 268
 269#define KVM_MP_STATE_RUNNABLE          0
 270#define KVM_MP_STATE_UNINITIALIZED     1
 271#define KVM_MP_STATE_INIT_RECEIVED     2
 272#define KVM_MP_STATE_HALTED            3
 273#define KVM_MP_STATE_SIPI_RECEIVED     4
 274
 275struct kvm_mp_state {
 276        __u32 mp_state;
 277};
 278
 279struct kvm_s390_psw {
 280        __u64 mask;
 281        __u64 addr;
 282};
 283
 284/* valid values for type in kvm_s390_interrupt */
 285#define KVM_S390_SIGP_STOP              0xfffe0000u
 286#define KVM_S390_PROGRAM_INT            0xfffe0001u
 287#define KVM_S390_SIGP_SET_PREFIX        0xfffe0002u
 288#define KVM_S390_RESTART                0xfffe0003u
 289#define KVM_S390_INT_VIRTIO             0xffff2603u
 290#define KVM_S390_INT_SERVICE            0xffff2401u
 291#define KVM_S390_INT_EMERGENCY          0xffff1201u
 292
 293struct kvm_s390_interrupt {
 294        __u32 type;
 295        __u32 parm;
 296        __u64 parm64;
 297};
 298
 299/* for KVM_SET_GUEST_DEBUG */
 300
 301#define KVM_GUESTDBG_ENABLE             0x00000001
 302#define KVM_GUESTDBG_SINGLESTEP         0x00000002
 303
 304struct kvm_guest_debug {
 305        __u32 control;
 306        __u32 pad;
 307        struct kvm_guest_debug_arch arch;
 308};
 309
 310enum {
 311        kvm_ioeventfd_flag_nr_datamatch,
 312        kvm_ioeventfd_flag_nr_pio,
 313        kvm_ioeventfd_flag_nr_deassign,
 314        kvm_ioeventfd_flag_nr_max,
 315};
 316
 317#define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
 318#define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
 319#define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
 320
 321#define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
 322
 323struct kvm_ioeventfd {
 324        __u64 datamatch;
 325        __u64 addr;        /* legal pio/mmio address */
 326        __u32 len;         /* 1, 2, 4, or 8 bytes    */
 327        __s32 fd;
 328        __u32 flags;
 329        __u8  pad[36];
 330};
 331
 332#define KVM_TRC_SHIFT           16
 333/*
 334 * kvm trace categories
 335 */
 336#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
 337#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */
 338
 339/*
 340 * kvm trace action
 341 */
 342#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
 343#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
 344#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
 345
 346#define KVM_TRC_HEAD_SIZE       12
 347#define KVM_TRC_CYCLE_SIZE      8
 348#define KVM_TRC_EXTRA_MAX       7
 349
 350#define KVMIO 0xAE
 351
 352/*
 353 * ioctls for /dev/kvm fds:
 354 */
 355#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
 356#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
 357#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
 358
 359#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
 360/*
 361 * Check if a kvm extension is available.  Argument is extension number,
 362 * return is 1 (yes) or 0 (no, sorry).
 363 */
 364#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
 365/*
 366 * Get size for mmap(vcpu_fd)
 367 */
 368#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
 369#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
 370/*
 371 * ioctls for kvm trace
 372 */
 373#define KVM_TRACE_ENABLE          _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
 374#define KVM_TRACE_PAUSE           _IO(KVMIO,  0x07)
 375#define KVM_TRACE_DISABLE         _IO(KVMIO,  0x08)
 376/*
 377 * Extension capability list.
 378 */
 379#define KVM_CAP_IRQCHIP   0
 380#define KVM_CAP_HLT       1
 381#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
 382#define KVM_CAP_USER_MEMORY 3
 383#define KVM_CAP_SET_TSS_ADDR 4
 384#define KVM_CAP_VAPIC 6
 385#define KVM_CAP_EXT_CPUID 7
 386#define KVM_CAP_CLOCKSOURCE 8
 387#define KVM_CAP_NR_VCPUS 9       /* returns max vcpus per vm */
 388#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
 389#define KVM_CAP_PIT 11
 390#define KVM_CAP_NOP_IO_DELAY 12
 391#define KVM_CAP_PV_MMU 13
 392#define KVM_CAP_MP_STATE 14
 393#define KVM_CAP_COALESCED_MMIO 15
 394#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
 395#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
 396#define KVM_CAP_DEVICE_ASSIGNMENT 17
 397#endif
 398#define KVM_CAP_IOMMU 18
 399#ifdef __KVM_HAVE_MSI
 400#define KVM_CAP_DEVICE_MSI 20
 401#endif
 402/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
 403#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
 404#ifdef __KVM_HAVE_USER_NMI
 405#define KVM_CAP_USER_NMI 22
 406#endif
 407#ifdef __KVM_HAVE_GUEST_DEBUG
 408#define KVM_CAP_SET_GUEST_DEBUG 23
 409#endif
 410#ifdef __KVM_HAVE_PIT
 411#define KVM_CAP_REINJECT_CONTROL 24
 412#endif
 413#ifdef __KVM_HAVE_IOAPIC
 414#define KVM_CAP_IRQ_ROUTING 25
 415#endif
 416#define KVM_CAP_IRQ_INJECT_STATUS 26
 417#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
 418#define KVM_CAP_DEVICE_DEASSIGNMENT 27
 419#endif
 420#ifdef __KVM_HAVE_MSIX
 421#define KVM_CAP_DEVICE_MSIX 28
 422#endif
 423#define KVM_CAP_ASSIGN_DEV_IRQ 29
 424/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
 425#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
 426#ifdef __KVM_HAVE_MCE
 427#define KVM_CAP_MCE 31
 428#endif
 429#define KVM_CAP_IRQFD 32
 430#ifdef __KVM_HAVE_PIT
 431#define KVM_CAP_PIT2 33
 432#endif
 433#define KVM_CAP_SET_BOOT_CPU_ID 34
 434#ifdef __KVM_HAVE_PIT_STATE2
 435#define KVM_CAP_PIT_STATE2 35
 436#endif
 437#define KVM_CAP_IOEVENTFD 36
 438#define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
 439
 440#ifdef KVM_CAP_IRQ_ROUTING
 441
 442struct kvm_irq_routing_irqchip {
 443        __u32 irqchip;
 444        __u32 pin;
 445};
 446
 447struct kvm_irq_routing_msi {
 448        __u32 address_lo;
 449        __u32 address_hi;
 450        __u32 data;
 451        __u32 pad;
 452};
 453
 454/* gsi routing entry types */
 455#define KVM_IRQ_ROUTING_IRQCHIP 1
 456#define KVM_IRQ_ROUTING_MSI 2
 457
 458struct kvm_irq_routing_entry {
 459        __u32 gsi;
 460        __u32 type;
 461        __u32 flags;
 462        __u32 pad;
 463        union {
 464                struct kvm_irq_routing_irqchip irqchip;
 465                struct kvm_irq_routing_msi msi;
 466                __u32 pad[8];
 467        } u;
 468};
 469
 470struct kvm_irq_routing {
 471        __u32 nr;
 472        __u32 flags;
 473        struct kvm_irq_routing_entry entries[0];
 474};
 475
 476#endif
 477
 478#ifdef KVM_CAP_MCE
 479/* x86 MCE */
 480struct kvm_x86_mce {
 481        __u64 status;
 482        __u64 addr;
 483        __u64 misc;
 484        __u64 mcg_status;
 485        __u8 bank;
 486        __u8 pad1[7];
 487        __u64 pad2[3];
 488};
 489#endif
 490
 491#define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
 492
 493struct kvm_irqfd {
 494        __u32 fd;
 495        __u32 gsi;
 496        __u32 flags;
 497        __u8  pad[20];
 498};
 499
 500/*
 501 * ioctls for VM fds
 502 */
 503#define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
 504/*
 505 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 506 * a vcpu fd.
 507 */
 508#define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
 509#define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
 510#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
 511#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO, 0x44)
 512#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO, 0x45)
 513#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\
 514                                        struct kvm_userspace_memory_region)
 515#define KVM_SET_TSS_ADDR          _IO(KVMIO, 0x47)
 516#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64)
 517/* Device model IOC */
 518#define KVM_CREATE_IRQCHIP        _IO(KVMIO,  0x60)
 519#define KVM_IRQ_LINE              _IOW(KVMIO, 0x61, struct kvm_irq_level)
 520#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
 521#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
 522#define KVM_CREATE_PIT            _IO(KVMIO,  0x64)
 523#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
 524#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
 525#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
 526#define KVM_REGISTER_COALESCED_MMIO \
 527                        _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
 528#define KVM_UNREGISTER_COALESCED_MMIO \
 529                        _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
 530#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
 531                                   struct kvm_assigned_pci_dev)
 532#define KVM_SET_GSI_ROUTING       _IOW(KVMIO, 0x6a, struct kvm_irq_routing)
 533/* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
 534#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \
 535                            struct kvm_assigned_irq)
 536#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO, 0x70, struct kvm_assigned_irq)
 537#define KVM_REINJECT_CONTROL      _IO(KVMIO, 0x71)
 538#define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \
 539                                     struct kvm_assigned_pci_dev)
 540#define KVM_ASSIGN_SET_MSIX_NR \
 541                        _IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr)
 542#define KVM_ASSIGN_SET_MSIX_ENTRY \
 543                        _IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry)
 544#define KVM_DEASSIGN_DEV_IRQ       _IOW(KVMIO, 0x75, struct kvm_assigned_irq)
 545#define KVM_IRQFD                  _IOW(KVMIO, 0x76, struct kvm_irqfd)
 546#define KVM_CREATE_PIT2            _IOW(KVMIO, 0x77, struct kvm_pit_config)
 547#define KVM_SET_BOOT_CPU_ID        _IO(KVMIO, 0x78)
 548#define KVM_IOEVENTFD             _IOW(KVMIO, 0x79, struct kvm_ioeventfd)
 549
 550/*
 551 * ioctls for vcpu fds
 552 */
 553#define KVM_RUN                   _IO(KVMIO,   0x80)
 554#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
 555#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
 556#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
 557#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
 558#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
 559#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
 560/* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
 561#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_DEBUG_GUEST
 562#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
 563#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
 564#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
 565#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
 566#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
 567#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
 568#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
 569#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
 570#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
 571#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
 572/* Available with KVM_CAP_VAPIC */
 573#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO,  0x92, struct kvm_tpr_access_ctl)
 574/* Available with KVM_CAP_VAPIC */
 575#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
 576/* valid for virtual machine (for floating interrupt)_and_ vcpu */
 577#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
 578/* store status for s390 */
 579#define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
 580#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
 581#define KVM_S390_STORE_STATUS     _IOW(KVMIO,  0x95, unsigned long)
 582/* initial ipl psw for s390 */
 583#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
 584/* initial reset for s390 */
 585#define KVM_S390_INITIAL_RESET    _IO(KVMIO,  0x97)
 586#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
 587#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
 588/* Available with KVM_CAP_NMI */
 589#define KVM_NMI                   _IO(KVMIO,  0x9a)
 590/* Available with KVM_CAP_SET_GUEST_DEBUG */
 591#define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
 592/* MCE for x86 */
 593#define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
 594#define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
 595#define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
 596
 597/*
 598 * Deprecated interfaces
 599 */
 600struct kvm_breakpoint {
 601        __u32 enabled;
 602        __u32 padding;
 603        __u64 address;
 604};
 605
 606struct kvm_debug_guest {
 607        __u32 enabled;
 608        __u32 pad;
 609        struct kvm_breakpoint breakpoints[4];
 610        __u32 singlestep;
 611};
 612
 613#define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO,  0x87, struct kvm_debug_guest)
 614
 615#define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
 616#define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
 617
 618#define KVM_GET_PIT2   _IOR(KVMIO,   0x9f, struct kvm_pit_state2)
 619#define KVM_SET_PIT2   _IOW(KVMIO,   0xa0, struct kvm_pit_state2)
 620
 621#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
 622#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
 623#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
 624#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
 625#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
 626#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
 627#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
 628#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
 629#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
 630#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
 631#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
 632#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
 633#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
 634#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
 635#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
 636#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
 637#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
 638#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
 639#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
 640#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
 641#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
 642#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
 643#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
 644#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
 645
 646#define KVM_DEV_ASSIGN_ENABLE_IOMMU     (1 << 0)
 647
 648struct kvm_assigned_pci_dev {
 649        __u32 assigned_dev_id;
 650        __u32 busnr;
 651        __u32 devfn;
 652        __u32 flags;
 653        union {
 654                __u32 reserved[12];
 655        };
 656};
 657
 658#define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
 659#define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
 660#define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
 661
 662#define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
 663#define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
 664#define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
 665
 666#define KVM_DEV_IRQ_HOST_MASK    0x00ff
 667#define KVM_DEV_IRQ_GUEST_MASK   0xff00
 668
 669struct kvm_assigned_irq {
 670        __u32 assigned_dev_id;
 671        __u32 host_irq;
 672        __u32 guest_irq;
 673        __u32 flags;
 674        union {
 675                struct {
 676                        __u32 addr_lo;
 677                        __u32 addr_hi;
 678                        __u32 data;
 679                } guest_msi;
 680                __u32 reserved[12];
 681        };
 682};
 683
 684
 685struct kvm_assigned_msix_nr {
 686        __u32 assigned_dev_id;
 687        __u16 entry_nr;
 688        __u16 padding;
 689};
 690
 691#define KVM_MAX_MSIX_PER_DEV            256
 692struct kvm_assigned_msix_entry {
 693        __u32 assigned_dev_id;
 694        __u32 gsi;
 695        __u16 entry; /* The index of entry in the MSI-X table */
 696        __u16 padding[3];
 697};
 698
 699#endif
 700