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/ioctl.h>
  12
  13#define KVM_API_VERSION 12
  14
  15/* Architectural interrupt line count. */
  16#define KVM_NR_INTERRUPTS 256
  17
  18/* for KVM_CREATE_MEMORY_REGION */
  19struct kvm_memory_region {
  20        __u32 slot;
  21        __u32 flags;
  22        __u64 guest_phys_addr;
  23        __u64 memory_size; /* bytes */
  24};
  25
  26/* for kvm_memory_region::flags */
  27#define KVM_MEM_LOG_DIRTY_PAGES  1UL
  28
  29struct kvm_memory_alias {
  30        __u32 slot;  /* this has a different namespace than memory slots */
  31        __u32 flags;
  32        __u64 guest_phys_addr;
  33        __u64 memory_size;
  34        __u64 target_phys_addr;
  35};
  36
  37/* for KVM_IRQ_LINE */
  38struct kvm_irq_level {
  39        /*
  40         * ACPI gsi notion of irq.
  41         * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
  42         * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
  43         */
  44        __u32 irq;
  45        __u32 level;
  46};
  47
  48/* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */
  49struct kvm_pic_state {
  50        __u8 last_irr;  /* edge detection */
  51        __u8 irr;               /* interrupt request register */
  52        __u8 imr;               /* interrupt mask register */
  53        __u8 isr;               /* interrupt service register */
  54        __u8 priority_add;      /* highest irq priority */
  55        __u8 irq_base;
  56        __u8 read_reg_select;
  57        __u8 poll;
  58        __u8 special_mask;
  59        __u8 init_state;
  60        __u8 auto_eoi;
  61        __u8 rotate_on_auto_eoi;
  62        __u8 special_fully_nested_mode;
  63        __u8 init4;             /* true if 4 byte init */
  64        __u8 elcr;              /* PIIX edge/trigger selection */
  65        __u8 elcr_mask;
  66};
  67
  68#define KVM_IOAPIC_NUM_PINS  24
  69struct kvm_ioapic_state {
  70        __u64 base_address;
  71        __u32 ioregsel;
  72        __u32 id;
  73        __u32 irr;
  74        __u32 pad;
  75        union {
  76                __u64 bits;
  77                struct {
  78                        __u8 vector;
  79                        __u8 delivery_mode:3;
  80                        __u8 dest_mode:1;
  81                        __u8 delivery_status:1;
  82                        __u8 polarity:1;
  83                        __u8 remote_irr:1;
  84                        __u8 trig_mode:1;
  85                        __u8 mask:1;
  86                        __u8 reserve:7;
  87                        __u8 reserved[4];
  88                        __u8 dest_id;
  89                } fields;
  90        } redirtbl[KVM_IOAPIC_NUM_PINS];
  91};
  92
  93#define KVM_IRQCHIP_PIC_MASTER   0
  94#define KVM_IRQCHIP_PIC_SLAVE    1
  95#define KVM_IRQCHIP_IOAPIC       2
  96
  97struct kvm_irqchip {
  98        __u32 chip_id;
  99        __u32 pad;
 100        union {
 101                char dummy[512];  /* reserving space */
 102                struct kvm_pic_state pic;
 103                struct kvm_ioapic_state ioapic;
 104        } chip;
 105};
 106
 107#define KVM_EXIT_UNKNOWN          0
 108#define KVM_EXIT_EXCEPTION        1
 109#define KVM_EXIT_IO               2
 110#define KVM_EXIT_HYPERCALL        3
 111#define KVM_EXIT_DEBUG            4
 112#define KVM_EXIT_HLT              5
 113#define KVM_EXIT_MMIO             6
 114#define KVM_EXIT_IRQ_WINDOW_OPEN  7
 115#define KVM_EXIT_SHUTDOWN         8
 116#define KVM_EXIT_FAIL_ENTRY       9
 117#define KVM_EXIT_INTR             10
 118#define KVM_EXIT_SET_TPR          11
 119
 120/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
 121struct kvm_run {
 122        /* in */
 123        __u8 request_interrupt_window;
 124        __u8 padding1[7];
 125
 126        /* out */
 127        __u32 exit_reason;
 128        __u8 ready_for_interrupt_injection;
 129        __u8 if_flag;
 130        __u8 padding2[2];
 131
 132        /* in (pre_kvm_run), out (post_kvm_run) */
 133        __u64 cr8;
 134        __u64 apic_base;
 135
 136        union {
 137                /* KVM_EXIT_UNKNOWN */
 138                struct {
 139                        __u64 hardware_exit_reason;
 140                } hw;
 141                /* KVM_EXIT_FAIL_ENTRY */
 142                struct {
 143                        __u64 hardware_entry_failure_reason;
 144                } fail_entry;
 145                /* KVM_EXIT_EXCEPTION */
 146                struct {
 147                        __u32 exception;
 148                        __u32 error_code;
 149                } ex;
 150                /* KVM_EXIT_IO */
 151                struct kvm_io {
 152#define KVM_EXIT_IO_IN  0
 153#define KVM_EXIT_IO_OUT 1
 154                        __u8 direction;
 155                        __u8 size; /* bytes */
 156                        __u16 port;
 157                        __u32 count;
 158                        __u64 data_offset; /* relative to kvm_run start */
 159                } io;
 160                struct {
 161                } debug;
 162                /* KVM_EXIT_MMIO */
 163                struct {
 164                        __u64 phys_addr;
 165                        __u8  data[8];
 166                        __u32 len;
 167                        __u8  is_write;
 168                } mmio;
 169                /* KVM_EXIT_HYPERCALL */
 170                struct {
 171                        __u64 nr;
 172                        __u64 args[6];
 173                        __u64 ret;
 174                        __u32 longmode;
 175                        __u32 pad;
 176                } hypercall;
 177                /* Fix the size of the union. */
 178                char padding[256];
 179        };
 180};
 181
 182/* for KVM_GET_REGS and KVM_SET_REGS */
 183struct kvm_regs {
 184        /* out (KVM_GET_REGS) / in (KVM_SET_REGS) */
 185        __u64 rax, rbx, rcx, rdx;
 186        __u64 rsi, rdi, rsp, rbp;
 187        __u64 r8,  r9,  r10, r11;
 188        __u64 r12, r13, r14, r15;
 189        __u64 rip, rflags;
 190};
 191
 192/* for KVM_GET_FPU and KVM_SET_FPU */
 193struct kvm_fpu {
 194        __u8  fpr[8][16];
 195        __u16 fcw;
 196        __u16 fsw;
 197        __u8  ftwx;  /* in fxsave format */
 198        __u8  pad1;
 199        __u16 last_opcode;
 200        __u64 last_ip;
 201        __u64 last_dp;
 202        __u8  xmm[16][16];
 203        __u32 mxcsr;
 204        __u32 pad2;
 205};
 206
 207/* for KVM_GET_LAPIC and KVM_SET_LAPIC */
 208#define KVM_APIC_REG_SIZE 0x400
 209struct kvm_lapic_state {
 210        char regs[KVM_APIC_REG_SIZE];
 211};
 212
 213struct kvm_segment {
 214        __u64 base;
 215        __u32 limit;
 216        __u16 selector;
 217        __u8  type;
 218        __u8  present, dpl, db, s, l, g, avl;
 219        __u8  unusable;
 220        __u8  padding;
 221};
 222
 223struct kvm_dtable {
 224        __u64 base;
 225        __u16 limit;
 226        __u16 padding[3];
 227};
 228
 229/* for KVM_GET_SREGS and KVM_SET_SREGS */
 230struct kvm_sregs {
 231        /* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */
 232        struct kvm_segment cs, ds, es, fs, gs, ss;
 233        struct kvm_segment tr, ldt;
 234        struct kvm_dtable gdt, idt;
 235        __u64 cr0, cr2, cr3, cr4, cr8;
 236        __u64 efer;
 237        __u64 apic_base;
 238        __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];
 239};
 240
 241struct kvm_msr_entry {
 242        __u32 index;
 243        __u32 reserved;
 244        __u64 data;
 245};
 246
 247/* for KVM_GET_MSRS and KVM_SET_MSRS */
 248struct kvm_msrs {
 249        __u32 nmsrs; /* number of msrs in entries */
 250        __u32 pad;
 251
 252        struct kvm_msr_entry entries[0];
 253};
 254
 255/* for KVM_GET_MSR_INDEX_LIST */
 256struct kvm_msr_list {
 257        __u32 nmsrs; /* number of msrs in entries */
 258        __u32 indices[0];
 259};
 260
 261/* for KVM_TRANSLATE */
 262struct kvm_translation {
 263        /* in */
 264        __u64 linear_address;
 265
 266        /* out */
 267        __u64 physical_address;
 268        __u8  valid;
 269        __u8  writeable;
 270        __u8  usermode;
 271        __u8  pad[5];
 272};
 273
 274/* for KVM_INTERRUPT */
 275struct kvm_interrupt {
 276        /* in */
 277        __u32 irq;
 278};
 279
 280struct kvm_breakpoint {
 281        __u32 enabled;
 282        __u32 padding;
 283        __u64 address;
 284};
 285
 286/* for KVM_DEBUG_GUEST */
 287struct kvm_debug_guest {
 288        /* int */
 289        __u32 enabled;
 290        __u32 pad;
 291        struct kvm_breakpoint breakpoints[4];
 292        __u32 singlestep;
 293};
 294
 295/* for KVM_GET_DIRTY_LOG */
 296struct kvm_dirty_log {
 297        __u32 slot;
 298        __u32 padding;
 299        union {
 300                void __user *dirty_bitmap; /* one bit per page */
 301                __u64 padding;
 302        };
 303};
 304
 305struct kvm_cpuid_entry {
 306        __u32 function;
 307        __u32 eax;
 308        __u32 ebx;
 309        __u32 ecx;
 310        __u32 edx;
 311        __u32 padding;
 312};
 313
 314/* for KVM_SET_CPUID */
 315struct kvm_cpuid {
 316        __u32 nent;
 317        __u32 padding;
 318        struct kvm_cpuid_entry entries[0];
 319};
 320
 321/* for KVM_SET_SIGNAL_MASK */
 322struct kvm_signal_mask {
 323        __u32 len;
 324        __u8  sigset[0];
 325};
 326
 327#define KVMIO 0xAE
 328
 329/*
 330 * ioctls for /dev/kvm fds:
 331 */
 332#define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
 333#define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
 334#define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
 335/*
 336 * Check if a kvm extension is available.  Argument is extension number,
 337 * return is 1 (yes) or 0 (no, sorry).
 338 */
 339#define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
 340/*
 341 * Get size for mmap(vcpu_fd)
 342 */
 343#define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
 344
 345/*
 346 * Extension capability list.
 347 */
 348#define KVM_CAP_IRQCHIP   0
 349#define KVM_CAP_HLT       1
 350
 351/*
 352 * ioctls for VM fds
 353 */
 354#define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region)
 355/*
 356 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
 357 * a vcpu fd.
 358 */
 359#define KVM_CREATE_VCPU           _IO(KVMIO,  0x41)
 360#define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log)
 361#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias)
 362/* Device model IOC */
 363#define KVM_CREATE_IRQCHIP        _IO(KVMIO,  0x60)
 364#define KVM_IRQ_LINE              _IOW(KVMIO, 0x61, struct kvm_irq_level)
 365#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
 366#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
 367
 368/*
 369 * ioctls for vcpu fds
 370 */
 371#define KVM_RUN                   _IO(KVMIO,   0x80)
 372#define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
 373#define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
 374#define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
 375#define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
 376#define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
 377#define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
 378#define KVM_DEBUG_GUEST           _IOW(KVMIO,  0x87, struct kvm_debug_guest)
 379#define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
 380#define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
 381#define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
 382#define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
 383#define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
 384#define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
 385#define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
 386#define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
 387
 388#endif
 389