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 */
  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        __u32 irq;
  52        __u32 level;
  53};
  54
  55
  56struct kvm_irqchip {
  57        __u32 chip_id;
  58        __u32 pad;
  59        union {
  60                char dummy[512];  /* reserving space */
  61#ifdef __KVM_HAVE_PIT
  62                struct kvm_pic_state pic;
  63#endif
  64#ifdef __KVM_HAVE_IOAPIC
  65                struct kvm_ioapic_state ioapic;
  66#endif
  67        } chip;
  68};
  69
  70#define KVM_EXIT_UNKNOWN          0
  71#define KVM_EXIT_EXCEPTION        1
  72#define KVM_EXIT_IO               2
  73#define KVM_EXIT_HYPERCALL        3
  74#define KVM_EXIT_DEBUG            4
  75#define KVM_EXIT_HLT              5
  76#define KVM_EXIT_MMIO             6
  77#define KVM_EXIT_IRQ_WINDOW_OPEN  7
  78#define KVM_EXIT_SHUTDOWN         8
  79#define KVM_EXIT_FAIL_ENTRY       9
  80#define KVM_EXIT_INTR             10
  81#define KVM_EXIT_SET_TPR          11
  82#define KVM_EXIT_TPR_ACCESS       12
  83#define KVM_EXIT_S390_SIEIC       13
  84#define KVM_EXIT_S390_RESET       14
  85#define KVM_EXIT_DCR              15
  86#define KVM_EXIT_NMI              16
  87
  88/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
  89struct kvm_run {
  90        /* in */
  91        __u8 request_interrupt_window;
  92        __u8 padding1[7];
  93
  94        /* out */
  95        __u32 exit_reason;
  96        __u8 ready_for_interrupt_injection;
  97        __u8 if_flag;
  98        __u8 padding2[2];
  99
 100        /* in (pre_kvm_run), out (post_kvm_run) */
 101        __u64 cr8;
 102        __u64 apic_base;
 103
 104        union {
 105                /* KVM_EXIT_UNKNOWN */
 106                struct {
 107                        __u64 hardware_exit_reason;
 108                } hw;
 109                /* KVM_EXIT_FAIL_ENTRY */
 110                struct {
 111                        __u64 hardware_entry_failure_reason;
 112                } fail_entry;
 113                /* KVM_EXIT_EXCEPTION */
 114                struct {
 115                        __u32 exception;
 116                        __u32 error_code;
 117                } ex;
 118                /* KVM_EXIT_IO */
 119                struct kvm_io {
 120#define KVM_EXIT_IO_IN  0
 121#define KVM_EXIT_IO_OUT 1
 122                        __u8 direction;
 123                        __u8 size; /* bytes */
 124                        __u16 port;
 125                        __u32 count;
 126                        __u64 data_offset; /* relative to kvm_run start */
 127                } io;
 128                struct {
 129                } debug;
 130                /* KVM_EXIT_MMIO */
 131                struct {
 132                        __u64 phys_addr;
 133                        __u8  data[8];
 134                        __u32 len;
 135                        __u8  is_write;
 136                } mmio;
 137                /* KVM_EXIT_HYPERCALL */
 138                struct {
 139                        __u64 nr;
 140                        __u64 args[6];
 141                        __u64 ret;
 142                        __u32 longmode;
 143                        __u32 pad;
 144                } hypercall;
 145                /* KVM_EXIT_TPR_ACCESS */
 146                struct {
 147                        __u64 rip;
 148                        __u32 is_write;
 149                        __u32 pad;
 150                } tpr_access;
 151                /* KVM_EXIT_S390_SIEIC */
 152                struct {
 153                        __u8 icptcode;
 154                        __u64 mask; /* psw upper half */
 155                        __u64 addr; /* psw lower half */
 156                        __u16 ipa;
 157                        __u32 ipb;
 158                } s390_sieic;
 159                /* KVM_EXIT_S390_RESET */
 160#define KVM_S390_RESET_POR       1
 161#define KVM_S390_RESET_CLEAR     2
 162#define KVM_S390_RESET_SUBSYSTEM 4
 163#define KVM_S390_RESET_CPU_INIT  8
 164#define KVM_S390_RESET_IPL       16
 165                __u64 s390_reset_flags;
 166                /* KVM_EXIT_DCR */
 167                struct {
 168                        __u32 dcrn;
 169                        __u32 data;
 170                        __u8  is_write;
 171                } dcr;
 172                /* Fix the size of the union. */
 173                char padding[256];
 174        };
 175};
 176
 177/* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
 178
 179struct kvm_coalesced_mmio_zone {
 180        __u64 addr;
 181        __u32 size;
 182        __u32 pad;
 183};
 184
 185struct kvm_coalesced_mmio {
 186        __u64 phys_addr;
 187        __u32 len;
 188        __u32 pad;
 189        __u8  data[8];
 190};
 191
 192struct kvm_coalesced_mmio_ring {
 193        __u32 first, last;
 194        struct kvm_coalesced_mmio coalesced_mmio[0];
 195};
 196
 197#define KVM_COALESCED_MMIO_MAX \
 198        ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
 199         sizeof(struct kvm_coalesced_mmio))
 200
 201/* for KVM_TRANSLATE */
 202struct kvm_translation {
 203        /* in */
 204        __u64 linear_address;
 205
 206        /* out */
 207        __u64 physical_address;
 208        __u8  valid;
 209        __u8  writeable;
 210        __u8  usermode;
 211        __u8  pad[5];
 212};
 213
 214/* for KVM_INTERRUPT */
 215struct kvm_interrupt {
 216        /* in */
 217        __u32 irq;
 218};
 219
 220struct kvm_breakpoint {
 221        __u32 enabled;
 222        __u32 padding;
 223        __u64 address;
 224};
 225
 226/* for KVM_DEBUG_GUEST */
 227struct kvm_debug_guest {
 228        /* int */
 229        __u32 enabled;
 230        __u32 pad;
 231        struct kvm_breakpoint breakpoints[4];
 232        __u32 singlestep;
 233};
 234
 235/* for KVM_GET_DIRTY_LOG */
 236struct kvm_dirty_log {
 237        __u32 slot;
 238        __u32 padding;
 239        union {
 240                void __user *dirty_bitmap; /* one bit per page */
 241                __u64 padding;
 242        };
 243};
 244
 245/* for KVM_SET_SIGNAL_MASK */
 246struct kvm_signal_mask {
 247        __u32 len;
 248        __u8  sigset[0];
 249};
 250
 251/* for KVM_TPR_ACCESS_REPORTING */
 252struct kvm_tpr_access_ctl {
 253        __u32 enabled;
 254        __u32 flags;
 255        __u32 reserved[8];
 256};
 257
 258/* for KVM_SET_VAPIC_ADDR */
 259struct kvm_vapic_addr {
 260        __u64 vapic_addr;
 261};
 262
 263/* for KVM_SET_MPSTATE */
 264
 265#define KVM_MP_STATE_RUNNABLE          0
 266#define KVM_MP_STATE_UNINITIALIZED     1
 267#define KVM_MP_STATE_INIT_RECEIVED     2
 268#define KVM_MP_STATE_HALTED            3
 269#define KVM_MP_STATE_SIPI_RECEIVED     4
 270
 271struct kvm_mp_state {
 272        __u32 mp_state;
 273};
 274
 275struct kvm_s390_psw {
 276        __u64 mask;
 277        __u64 addr;
 278};
 279
 280/* valid values for type in kvm_s390_interrupt */
 281#define KVM_S390_SIGP_STOP              0xfffe0000u
 282#define KVM_S390_PROGRAM_INT            0xfffe0001u
 283#define KVM_S390_SIGP_SET_PREFIX        0xfffe0002u
 284#define KVM_S390_RESTART                0xfffe0003u
 285#define KVM_S390_INT_VIRTIO             0xffff2603u
 286#define KVM_S390_INT_SERVICE            0xffff2401u
 287#define KVM_S390_INT_EMERGENCY          0xffff1201u
 288
 289struct kvm_s390_interrupt {
 290        __u32 type;
 291        __u32 parm;
 292        __u64 parm64;
 293};
 294
 295#define KVM_TRC_SHIFT           16
 296/*
 297 * kvm trace categories
 298 */
 299#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
 300#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */
 301
 302/*
 303 * kvm trace action
 304 */
 305#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
 306#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
 307#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
 308
 309#define KVM_TRC_HEAD_SIZE       12
 310#define KVM_TRC_CYCLE_SIZE      8
 311#define KVM_TRC_EXTRA_MAX       7
 312
 313/* This structure represents a single trace buffer record. */
 314struct kvm_trace_rec {
 315        /* variable rec_val
 316         * is split into:
 317         * bits 0 - 27  -> event id
 318         * bits 28 -30  -> number of extra data args of size u32
 319         * bits 31      -> binary indicator for if tsc is in record
 320         */
 321        __u32 rec_val;
 322        __u32 pid;
 323        __u32 vcpu_id;
 324        union {
 325                struct {
 326                        __u64 timestamp;
 327                        __u32 extra_u32[KVM_TRC_EXTRA_MAX];
 328                } __attribute__((packed)) timestamp;
 329                struct {
 330                        __u32 extra_u32[KVM_TRC_EXTRA_MAX];
 331                } notimestamp;
 332        } u;
 333};
 334
 335#define TRACE_REC_EVENT_ID(val) \
 336                (0x0fffffff & (val))
 337#define TRACE_REC_NUM_DATA_ARGS(val) \
 338                (0x70000000 & ((val) << 28))
 339#define TRACE_REC_TCS(val) \
 340                (0x80000000 & ((val) << 31))
 341
 342#define KVMIO 0xAE
 343
 344/*
 345 * ioctls for /dev/kvm fds:
 346 */
 347#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
 348#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
 349#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
 350
 351#define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
 352/*
 353 * Check if a kvm extension is available.  Argument is extension number,
 354 * return is 1 (yes) or 0 (no, sorry).
 355 */
 356#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
 357/*
 358 * Get size for mmap(vcpu_fd)
 359 */
 360#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
 361#define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
 362/*
 363 * ioctls for kvm trace
 364 */
 365#define KVM_TRACE_ENABLE          _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
 366#define KVM_TRACE_PAUSE           _IO(KVMIO,  0x07)
 367#define KVM_TRACE_DISABLE         _IO(KVMIO,  0x08)
 368/*
 369 * Extension capability list.
 370 */
 371#define KVM_CAP_IRQCHIP   0
 372#define KVM_CAP_HLT       1
 373#define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
 374#define KVM_CAP_USER_MEMORY 3
 375#define KVM_CAP_SET_TSS_ADDR 4
 376#define KVM_CAP_VAPIC 6
 377#define KVM_CAP_EXT_CPUID 7
 378#define KVM_CAP_CLOCKSOURCE 8
 379#define KVM_CAP_NR_VCPUS 9       /* returns max vcpus per vm */
 380#define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
 381#define KVM_CAP_PIT 11
 382#define KVM_CAP_NOP_IO_DELAY 12
 383#define KVM_CAP_PV_MMU 13
 384#define KVM_CAP_MP_STATE 14
 385#define KVM_CAP_COALESCED_MMIO 15
 386#define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
 387#ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
 388#define KVM_CAP_DEVICE_ASSIGNMENT 17
 389#endif
 390#define KVM_CAP_IOMMU 18
 391#ifdef __KVM_HAVE_MSI
 392#define KVM_CAP_DEVICE_MSI 20
 393#endif
 394/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
 395#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
 396#ifdef __KVM_HAVE_USER_NMI
 397#define KVM_CAP_USER_NMI 22
 398#endif
 399
 400/*
 401 * ioctls for VM fds
 402 */
 403#define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
 404#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO, 0x44)
 405#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO, 0x45)
 406#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\
 407                                        struct kvm_userspace_memory_region)
 408#define KVM_SET_TSS_ADDR          _IO(KVMIO, 0x47)
 409/*
 410 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 411 * a vcpu fd.
 412 */
 413#define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
 414#define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
 415#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
 416/* Device model IOC */
 417#define KVM_CREATE_IRQCHIP        _IO(KVMIO,  0x60)
 418#define KVM_IRQ_LINE              _IOW(KVMIO, 0x61, struct kvm_irq_level)
 419#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
 420#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
 421#define KVM_CREATE_PIT            _IO(KVMIO,  0x64)
 422#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
 423#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
 424#define KVM_REGISTER_COALESCED_MMIO \
 425                        _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
 426#define KVM_UNREGISTER_COALESCED_MMIO \
 427                        _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
 428#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \
 429                                   struct kvm_assigned_pci_dev)
 430#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \
 431                            struct kvm_assigned_irq)
 432
 433/*
 434 * ioctls for vcpu fds
 435 */
 436#define KVM_RUN                   _IO(KVMIO,   0x80)
 437#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
 438#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
 439#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
 440#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
 441#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
 442#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
 443#define KVM_DEBUG_GUEST           _IOW(KVMIO,  0x87, struct kvm_debug_guest)
 444#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
 445#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
 446#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
 447#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
 448#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
 449#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
 450#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
 451#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
 452#define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
 453#define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
 454/* Available with KVM_CAP_VAPIC */
 455#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO,  0x92, struct kvm_tpr_access_ctl)
 456/* Available with KVM_CAP_VAPIC */
 457#define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
 458/* valid for virtual machine (for floating interrupt)_and_ vcpu */
 459#define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
 460/* store status for s390 */
 461#define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
 462#define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
 463#define KVM_S390_STORE_STATUS     _IOW(KVMIO,  0x95, unsigned long)
 464/* initial ipl psw for s390 */
 465#define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
 466/* initial reset for s390 */
 467#define KVM_S390_INITIAL_RESET    _IO(KVMIO,  0x97)
 468#define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
 469#define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
 470/* Available with KVM_CAP_NMI */
 471#define KVM_NMI                   _IO(KVMIO,  0x9a)
 472
 473#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
 474#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
 475#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
 476#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
 477#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
 478#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
 479#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
 480#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
 481#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
 482#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
 483#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
 484#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
 485#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
 486#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
 487#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
 488#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
 489#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
 490#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
 491#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
 492#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
 493#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
 494#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
 495#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
 496#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
 497
 498struct kvm_assigned_pci_dev {
 499        __u32 assigned_dev_id;
 500        __u32 busnr;
 501        __u32 devfn;
 502        __u32 flags;
 503        union {
 504                __u32 reserved[12];
 505        };
 506};
 507
 508struct kvm_assigned_irq {
 509        __u32 assigned_dev_id;
 510        __u32 host_irq;
 511        __u32 guest_irq;
 512        __u32 flags;
 513        union {
 514                struct {
 515                        __u32 addr_lo;
 516                        __u32 addr_hi;
 517                        __u32 data;
 518                } guest_msi;
 519                __u32 reserved[12];
 520        };
 521};
 522
 523#define KVM_DEV_ASSIGN_ENABLE_IOMMU     (1 << 0)
 524
 525#define KVM_DEV_IRQ_ASSIGN_ENABLE_MSI   (1 << 0)
 526
 527#endif
 528
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.