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