Annotation of qemu/linux-headers/linux/kvm.h, revision 1.1.1.2

1.1       root        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: 
                     12: #include <linux/ioctl.h>
                     13: #include <asm/kvm.h>
                     14: 
                     15: #define KVM_API_VERSION 12
                     16: 
                     17: /* *** Deprecated interfaces *** */
                     18: 
                     19: #define KVM_TRC_SHIFT           16
                     20: 
                     21: #define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
                     22: #define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
                     23: 
                     24: #define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
                     25: #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
                     26: #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
                     27: 
                     28: #define KVM_TRC_HEAD_SIZE       12
                     29: #define KVM_TRC_CYCLE_SIZE      8
                     30: #define KVM_TRC_EXTRA_MAX       7
                     31: 
                     32: #define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
                     33: #define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
                     34: #define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
                     35: #define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
                     36: #define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
                     37: #define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
                     38: #define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
                     39: #define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
                     40: #define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
                     41: #define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
                     42: #define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
                     43: #define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
                     44: #define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
                     45: #define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
                     46: #define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
                     47: #define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
                     48: #define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
                     49: #define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
                     50: #define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
                     51: #define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
                     52: #define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
                     53: #define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
                     54: #define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
                     55: #define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
                     56: 
                     57: struct kvm_user_trace_setup {
                     58:        __u32 buf_size;
                     59:        __u32 buf_nr;
                     60: };
                     61: 
                     62: #define __KVM_DEPRECATED_MAIN_W_0x06 \
                     63:        _IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
                     64: #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
                     65: #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
                     66: 
                     67: #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
                     68: 
                     69: struct kvm_breakpoint {
                     70:        __u32 enabled;
                     71:        __u32 padding;
                     72:        __u64 address;
                     73: };
                     74: 
                     75: struct kvm_debug_guest {
                     76:        __u32 enabled;
                     77:        __u32 pad;
                     78:        struct kvm_breakpoint breakpoints[4];
                     79:        __u32 singlestep;
                     80: };
                     81: 
                     82: #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
                     83: 
                     84: /* *** End of deprecated interfaces *** */
                     85: 
                     86: 
                     87: /* for KVM_CREATE_MEMORY_REGION */
                     88: struct kvm_memory_region {
                     89:        __u32 slot;
                     90:        __u32 flags;
                     91:        __u64 guest_phys_addr;
                     92:        __u64 memory_size; /* bytes */
                     93: };
                     94: 
                     95: /* for KVM_SET_USER_MEMORY_REGION */
                     96: struct kvm_userspace_memory_region {
                     97:        __u32 slot;
                     98:        __u32 flags;
                     99:        __u64 guest_phys_addr;
                    100:        __u64 memory_size; /* bytes */
                    101:        __u64 userspace_addr; /* start of the userspace allocated memory */
                    102: };
                    103: 
                    104: /* for kvm_memory_region::flags */
                    105: #define KVM_MEM_LOG_DIRTY_PAGES  1UL
                    106: #define KVM_MEMSLOT_INVALID      (1UL << 1)
                    107: 
                    108: /* for KVM_IRQ_LINE */
                    109: struct kvm_irq_level {
                    110:        /*
                    111:         * ACPI gsi notion of irq.
                    112:         * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
                    113:         * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
                    114:         */
                    115:        union {
                    116:                __u32 irq;
                    117:                __s32 status;
                    118:        };
                    119:        __u32 level;
                    120: };
                    121: 
                    122: 
                    123: struct kvm_irqchip {
                    124:        __u32 chip_id;
                    125:        __u32 pad;
                    126:         union {
                    127:                char dummy[512];  /* reserving space */
                    128: #ifdef __KVM_HAVE_PIT
                    129:                struct kvm_pic_state pic;
                    130: #endif
                    131: #ifdef __KVM_HAVE_IOAPIC
                    132:                struct kvm_ioapic_state ioapic;
                    133: #endif
                    134:        } chip;
                    135: };
                    136: 
                    137: /* for KVM_CREATE_PIT2 */
                    138: struct kvm_pit_config {
                    139:        __u32 flags;
                    140:        __u32 pad[15];
                    141: };
                    142: 
                    143: #define KVM_PIT_SPEAKER_DUMMY     1
                    144: 
                    145: #define KVM_EXIT_UNKNOWN          0
                    146: #define KVM_EXIT_EXCEPTION        1
                    147: #define KVM_EXIT_IO               2
                    148: #define KVM_EXIT_HYPERCALL        3
                    149: #define KVM_EXIT_DEBUG            4
                    150: #define KVM_EXIT_HLT              5
                    151: #define KVM_EXIT_MMIO             6
                    152: #define KVM_EXIT_IRQ_WINDOW_OPEN  7
                    153: #define KVM_EXIT_SHUTDOWN         8
                    154: #define KVM_EXIT_FAIL_ENTRY       9
                    155: #define KVM_EXIT_INTR             10
                    156: #define KVM_EXIT_SET_TPR          11
                    157: #define KVM_EXIT_TPR_ACCESS       12
                    158: #define KVM_EXIT_S390_SIEIC       13
                    159: #define KVM_EXIT_S390_RESET       14
                    160: #define KVM_EXIT_DCR              15
                    161: #define KVM_EXIT_NMI              16
                    162: #define KVM_EXIT_INTERNAL_ERROR   17
                    163: #define KVM_EXIT_OSI              18
1.1.1.2 ! root      164: #define KVM_EXIT_PAPR_HCALL      19
1.1       root      165: 
                    166: /* For KVM_EXIT_INTERNAL_ERROR */
                    167: #define KVM_INTERNAL_ERROR_EMULATION 1
                    168: #define KVM_INTERNAL_ERROR_SIMUL_EX 2
                    169: 
                    170: /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
                    171: struct kvm_run {
                    172:        /* in */
                    173:        __u8 request_interrupt_window;
                    174:        __u8 padding1[7];
                    175: 
                    176:        /* out */
                    177:        __u32 exit_reason;
                    178:        __u8 ready_for_interrupt_injection;
                    179:        __u8 if_flag;
                    180:        __u8 padding2[2];
                    181: 
                    182:        /* in (pre_kvm_run), out (post_kvm_run) */
                    183:        __u64 cr8;
                    184:        __u64 apic_base;
                    185: 
                    186: #ifdef __KVM_S390
                    187:        /* the processor status word for s390 */
                    188:        __u64 psw_mask; /* psw upper half */
                    189:        __u64 psw_addr; /* psw lower half */
                    190: #endif
                    191:        union {
                    192:                /* KVM_EXIT_UNKNOWN */
                    193:                struct {
                    194:                        __u64 hardware_exit_reason;
                    195:                } hw;
                    196:                /* KVM_EXIT_FAIL_ENTRY */
                    197:                struct {
                    198:                        __u64 hardware_entry_failure_reason;
                    199:                } fail_entry;
                    200:                /* KVM_EXIT_EXCEPTION */
                    201:                struct {
                    202:                        __u32 exception;
                    203:                        __u32 error_code;
                    204:                } ex;
                    205:                /* KVM_EXIT_IO */
                    206:                struct {
                    207: #define KVM_EXIT_IO_IN  0
                    208: #define KVM_EXIT_IO_OUT 1
                    209:                        __u8 direction;
                    210:                        __u8 size; /* bytes */
                    211:                        __u16 port;
                    212:                        __u32 count;
                    213:                        __u64 data_offset; /* relative to kvm_run start */
                    214:                } io;
                    215:                struct {
                    216:                        struct kvm_debug_exit_arch arch;
                    217:                } debug;
                    218:                /* KVM_EXIT_MMIO */
                    219:                struct {
                    220:                        __u64 phys_addr;
                    221:                        __u8  data[8];
                    222:                        __u32 len;
                    223:                        __u8  is_write;
                    224:                } mmio;
                    225:                /* KVM_EXIT_HYPERCALL */
                    226:                struct {
                    227:                        __u64 nr;
                    228:                        __u64 args[6];
                    229:                        __u64 ret;
                    230:                        __u32 longmode;
                    231:                        __u32 pad;
                    232:                } hypercall;
                    233:                /* KVM_EXIT_TPR_ACCESS */
                    234:                struct {
                    235:                        __u64 rip;
                    236:                        __u32 is_write;
                    237:                        __u32 pad;
                    238:                } tpr_access;
                    239:                /* KVM_EXIT_S390_SIEIC */
                    240:                struct {
                    241:                        __u8 icptcode;
                    242:                        __u16 ipa;
                    243:                        __u32 ipb;
                    244:                } s390_sieic;
                    245:                /* KVM_EXIT_S390_RESET */
                    246: #define KVM_S390_RESET_POR       1
                    247: #define KVM_S390_RESET_CLEAR     2
                    248: #define KVM_S390_RESET_SUBSYSTEM 4
                    249: #define KVM_S390_RESET_CPU_INIT  8
                    250: #define KVM_S390_RESET_IPL       16
                    251:                __u64 s390_reset_flags;
                    252:                /* KVM_EXIT_DCR */
                    253:                struct {
                    254:                        __u32 dcrn;
                    255:                        __u32 data;
                    256:                        __u8  is_write;
                    257:                } dcr;
                    258:                struct {
                    259:                        __u32 suberror;
                    260:                        /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
                    261:                        __u32 ndata;
                    262:                        __u64 data[16];
                    263:                } internal;
                    264:                /* KVM_EXIT_OSI */
                    265:                struct {
                    266:                        __u64 gprs[32];
                    267:                } osi;
1.1.1.2 ! root      268:                struct {
        !           269:                        __u64 nr;
        !           270:                        __u64 ret;
        !           271:                        __u64 args[9];
        !           272:                } papr_hcall;
1.1       root      273:                /* Fix the size of the union. */
                    274:                char padding[256];
                    275:        };
                    276: };
                    277: 
                    278: /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
                    279: 
                    280: struct kvm_coalesced_mmio_zone {
                    281:        __u64 addr;
                    282:        __u32 size;
                    283:        __u32 pad;
                    284: };
                    285: 
                    286: struct kvm_coalesced_mmio {
                    287:        __u64 phys_addr;
                    288:        __u32 len;
                    289:        __u32 pad;
                    290:        __u8  data[8];
                    291: };
                    292: 
                    293: struct kvm_coalesced_mmio_ring {
                    294:        __u32 first, last;
                    295:        struct kvm_coalesced_mmio coalesced_mmio[0];
                    296: };
                    297: 
                    298: #define KVM_COALESCED_MMIO_MAX \
                    299:        ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
                    300:         sizeof(struct kvm_coalesced_mmio))
                    301: 
                    302: /* for KVM_TRANSLATE */
                    303: struct kvm_translation {
                    304:        /* in */
                    305:        __u64 linear_address;
                    306: 
                    307:        /* out */
                    308:        __u64 physical_address;
                    309:        __u8  valid;
                    310:        __u8  writeable;
                    311:        __u8  usermode;
                    312:        __u8  pad[5];
                    313: };
                    314: 
                    315: /* for KVM_INTERRUPT */
                    316: struct kvm_interrupt {
                    317:        /* in */
                    318:        __u32 irq;
                    319: };
                    320: 
                    321: /* for KVM_GET_DIRTY_LOG */
                    322: struct kvm_dirty_log {
                    323:        __u32 slot;
                    324:        __u32 padding1;
                    325:        union {
                    326:                void *dirty_bitmap; /* one bit per page */
                    327:                __u64 padding2;
                    328:        };
                    329: };
                    330: 
                    331: /* for KVM_SET_SIGNAL_MASK */
                    332: struct kvm_signal_mask {
                    333:        __u32 len;
                    334:        __u8  sigset[0];
                    335: };
                    336: 
                    337: /* for KVM_TPR_ACCESS_REPORTING */
                    338: struct kvm_tpr_access_ctl {
                    339:        __u32 enabled;
                    340:        __u32 flags;
                    341:        __u32 reserved[8];
                    342: };
                    343: 
                    344: /* for KVM_SET_VAPIC_ADDR */
                    345: struct kvm_vapic_addr {
                    346:        __u64 vapic_addr;
                    347: };
                    348: 
                    349: /* for KVM_SET_MPSTATE */
                    350: 
                    351: #define KVM_MP_STATE_RUNNABLE          0
                    352: #define KVM_MP_STATE_UNINITIALIZED     1
                    353: #define KVM_MP_STATE_INIT_RECEIVED     2
                    354: #define KVM_MP_STATE_HALTED            3
                    355: #define KVM_MP_STATE_SIPI_RECEIVED     4
                    356: 
                    357: struct kvm_mp_state {
                    358:        __u32 mp_state;
                    359: };
                    360: 
                    361: struct kvm_s390_psw {
                    362:        __u64 mask;
                    363:        __u64 addr;
                    364: };
                    365: 
                    366: /* valid values for type in kvm_s390_interrupt */
                    367: #define KVM_S390_SIGP_STOP             0xfffe0000u
                    368: #define KVM_S390_PROGRAM_INT           0xfffe0001u
                    369: #define KVM_S390_SIGP_SET_PREFIX       0xfffe0002u
                    370: #define KVM_S390_RESTART               0xfffe0003u
                    371: #define KVM_S390_INT_VIRTIO            0xffff2603u
                    372: #define KVM_S390_INT_SERVICE           0xffff2401u
                    373: #define KVM_S390_INT_EMERGENCY         0xffff1201u
                    374: 
                    375: struct kvm_s390_interrupt {
                    376:        __u32 type;
                    377:        __u32 parm;
                    378:        __u64 parm64;
                    379: };
                    380: 
                    381: /* for KVM_SET_GUEST_DEBUG */
                    382: 
                    383: #define KVM_GUESTDBG_ENABLE            0x00000001
                    384: #define KVM_GUESTDBG_SINGLESTEP                0x00000002
                    385: 
                    386: struct kvm_guest_debug {
                    387:        __u32 control;
                    388:        __u32 pad;
                    389:        struct kvm_guest_debug_arch arch;
                    390: };
                    391: 
                    392: enum {
                    393:        kvm_ioeventfd_flag_nr_datamatch,
                    394:        kvm_ioeventfd_flag_nr_pio,
                    395:        kvm_ioeventfd_flag_nr_deassign,
                    396:        kvm_ioeventfd_flag_nr_max,
                    397: };
                    398: 
                    399: #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
                    400: #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
                    401: #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
                    402: 
                    403: #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
                    404: 
                    405: struct kvm_ioeventfd {
                    406:        __u64 datamatch;
                    407:        __u64 addr;        /* legal pio/mmio address */
                    408:        __u32 len;         /* 1, 2, 4, or 8 bytes    */
                    409:        __s32 fd;
                    410:        __u32 flags;
                    411:        __u8  pad[36];
                    412: };
                    413: 
                    414: /* for KVM_ENABLE_CAP */
                    415: struct kvm_enable_cap {
                    416:        /* in */
                    417:        __u32 cap;
                    418:        __u32 flags;
                    419:        __u64 args[4];
                    420:        __u8  pad[64];
                    421: };
                    422: 
                    423: /* for KVM_PPC_GET_PVINFO */
                    424: struct kvm_ppc_pvinfo {
                    425:        /* out */
                    426:        __u32 flags;
                    427:        __u32 hcall[4];
                    428:        __u8  pad[108];
                    429: };
                    430: 
                    431: #define KVMIO 0xAE
                    432: 
                    433: /*
                    434:  * ioctls for /dev/kvm fds:
                    435:  */
                    436: #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
                    437: #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
                    438: #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
                    439: 
                    440: #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
                    441: /*
                    442:  * Check if a kvm extension is available.  Argument is extension number,
                    443:  * return is 1 (yes) or 0 (no, sorry).
                    444:  */
                    445: #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
                    446: /*
                    447:  * Get size for mmap(vcpu_fd)
                    448:  */
                    449: #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
                    450: #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
                    451: #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
                    452: #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
                    453: #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
                    454: 
                    455: /*
                    456:  * Extension capability list.
                    457:  */
                    458: #define KVM_CAP_IRQCHIP          0
                    459: #define KVM_CAP_HLT      1
                    460: #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
                    461: #define KVM_CAP_USER_MEMORY 3
                    462: #define KVM_CAP_SET_TSS_ADDR 4
                    463: #define KVM_CAP_VAPIC 6
                    464: #define KVM_CAP_EXT_CPUID 7
                    465: #define KVM_CAP_CLOCKSOURCE 8
1.1.1.2 ! root      466: #define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
1.1       root      467: #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
                    468: #define KVM_CAP_PIT 11
                    469: #define KVM_CAP_NOP_IO_DELAY 12
                    470: #define KVM_CAP_PV_MMU 13
                    471: #define KVM_CAP_MP_STATE 14
                    472: #define KVM_CAP_COALESCED_MMIO 15
                    473: #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
                    474: #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
                    475: #define KVM_CAP_DEVICE_ASSIGNMENT 17
                    476: #endif
                    477: #define KVM_CAP_IOMMU 18
                    478: #ifdef __KVM_HAVE_MSI
                    479: #define KVM_CAP_DEVICE_MSI 20
                    480: #endif
                    481: /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
                    482: #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
                    483: #ifdef __KVM_HAVE_USER_NMI
                    484: #define KVM_CAP_USER_NMI 22
                    485: #endif
                    486: #ifdef __KVM_HAVE_GUEST_DEBUG
                    487: #define KVM_CAP_SET_GUEST_DEBUG 23
                    488: #endif
                    489: #ifdef __KVM_HAVE_PIT
                    490: #define KVM_CAP_REINJECT_CONTROL 24
                    491: #endif
                    492: #ifdef __KVM_HAVE_IOAPIC
                    493: #define KVM_CAP_IRQ_ROUTING 25
                    494: #endif
                    495: #define KVM_CAP_IRQ_INJECT_STATUS 26
                    496: #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
                    497: #define KVM_CAP_DEVICE_DEASSIGNMENT 27
                    498: #endif
                    499: #ifdef __KVM_HAVE_MSIX
                    500: #define KVM_CAP_DEVICE_MSIX 28
                    501: #endif
                    502: #define KVM_CAP_ASSIGN_DEV_IRQ 29
                    503: /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
                    504: #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
                    505: #ifdef __KVM_HAVE_MCE
                    506: #define KVM_CAP_MCE 31
                    507: #endif
                    508: #define KVM_CAP_IRQFD 32
                    509: #ifdef __KVM_HAVE_PIT
                    510: #define KVM_CAP_PIT2 33
                    511: #endif
                    512: #define KVM_CAP_SET_BOOT_CPU_ID 34
                    513: #ifdef __KVM_HAVE_PIT_STATE2
                    514: #define KVM_CAP_PIT_STATE2 35
                    515: #endif
                    516: #define KVM_CAP_IOEVENTFD 36
                    517: #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
                    518: #ifdef __KVM_HAVE_XEN_HVM
                    519: #define KVM_CAP_XEN_HVM 38
                    520: #endif
                    521: #define KVM_CAP_ADJUST_CLOCK 39
                    522: #define KVM_CAP_INTERNAL_ERROR_DATA 40
                    523: #ifdef __KVM_HAVE_VCPU_EVENTS
                    524: #define KVM_CAP_VCPU_EVENTS 41
                    525: #endif
                    526: #define KVM_CAP_S390_PSW 42
                    527: #define KVM_CAP_PPC_SEGSTATE 43
                    528: #define KVM_CAP_HYPERV 44
                    529: #define KVM_CAP_HYPERV_VAPIC 45
                    530: #define KVM_CAP_HYPERV_SPIN 46
                    531: #define KVM_CAP_PCI_SEGMENT 47
                    532: #define KVM_CAP_PPC_PAIRED_SINGLES 48
                    533: #define KVM_CAP_INTR_SHADOW 49
                    534: #ifdef __KVM_HAVE_DEBUGREGS
                    535: #define KVM_CAP_DEBUGREGS 50
                    536: #endif
                    537: #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
                    538: #define KVM_CAP_PPC_OSI 52
                    539: #define KVM_CAP_PPC_UNSET_IRQ 53
                    540: #define KVM_CAP_ENABLE_CAP 54
                    541: #ifdef __KVM_HAVE_XSAVE
                    542: #define KVM_CAP_XSAVE 55
                    543: #endif
                    544: #ifdef __KVM_HAVE_XCRS
                    545: #define KVM_CAP_XCRS 56
                    546: #endif
                    547: #define KVM_CAP_PPC_GET_PVINFO 57
                    548: #define KVM_CAP_PPC_IRQ_LEVEL 58
                    549: #define KVM_CAP_ASYNC_PF 59
                    550: #define KVM_CAP_TSC_CONTROL 60
                    551: #define KVM_CAP_GET_TSC_KHZ 61
                    552: #define KVM_CAP_PPC_BOOKE_SREGS 62
1.1.1.2 ! root      553: #define KVM_CAP_SPAPR_TCE 63
        !           554: #define KVM_CAP_PPC_SMT 64
        !           555: #define KVM_CAP_PPC_RMA        65
        !           556: #define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
        !           557: #define KVM_CAP_PPC_HIOR 67
        !           558: #define KVM_CAP_PPC_PAPR 68
        !           559: #define KVM_CAP_SW_TLB 69
        !           560: #define KVM_CAP_ONE_REG 70
1.1       root      561: 
                    562: #ifdef KVM_CAP_IRQ_ROUTING
                    563: 
                    564: struct kvm_irq_routing_irqchip {
                    565:        __u32 irqchip;
                    566:        __u32 pin;
                    567: };
                    568: 
                    569: struct kvm_irq_routing_msi {
                    570:        __u32 address_lo;
                    571:        __u32 address_hi;
                    572:        __u32 data;
                    573:        __u32 pad;
                    574: };
                    575: 
                    576: /* gsi routing entry types */
                    577: #define KVM_IRQ_ROUTING_IRQCHIP 1
                    578: #define KVM_IRQ_ROUTING_MSI 2
                    579: 
                    580: struct kvm_irq_routing_entry {
                    581:        __u32 gsi;
                    582:        __u32 type;
                    583:        __u32 flags;
                    584:        __u32 pad;
                    585:        union {
                    586:                struct kvm_irq_routing_irqchip irqchip;
                    587:                struct kvm_irq_routing_msi msi;
                    588:                __u32 pad[8];
                    589:        } u;
                    590: };
                    591: 
                    592: struct kvm_irq_routing {
                    593:        __u32 nr;
                    594:        __u32 flags;
                    595:        struct kvm_irq_routing_entry entries[0];
                    596: };
                    597: 
                    598: #endif
                    599: 
                    600: #ifdef KVM_CAP_MCE
                    601: /* x86 MCE */
                    602: struct kvm_x86_mce {
                    603:        __u64 status;
                    604:        __u64 addr;
                    605:        __u64 misc;
                    606:        __u64 mcg_status;
                    607:        __u8 bank;
                    608:        __u8 pad1[7];
                    609:        __u64 pad2[3];
                    610: };
                    611: #endif
                    612: 
                    613: #ifdef KVM_CAP_XEN_HVM
                    614: struct kvm_xen_hvm_config {
                    615:        __u32 flags;
                    616:        __u32 msr;
                    617:        __u64 blob_addr_32;
                    618:        __u64 blob_addr_64;
                    619:        __u8 blob_size_32;
                    620:        __u8 blob_size_64;
                    621:        __u8 pad2[30];
                    622: };
                    623: #endif
                    624: 
                    625: #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
                    626: 
                    627: struct kvm_irqfd {
                    628:        __u32 fd;
                    629:        __u32 gsi;
                    630:        __u32 flags;
                    631:        __u8  pad[20];
                    632: };
                    633: 
                    634: struct kvm_clock_data {
                    635:        __u64 clock;
                    636:        __u32 flags;
                    637:        __u32 pad[9];
                    638: };
                    639: 
1.1.1.2 ! root      640: #define KVM_MMU_FSL_BOOKE_NOHV         0
        !           641: #define KVM_MMU_FSL_BOOKE_HV           1
        !           642: 
        !           643: struct kvm_config_tlb {
        !           644:        __u64 params;
        !           645:        __u64 array;
        !           646:        __u32 mmu_type;
        !           647:        __u32 array_len;
        !           648: };
        !           649: 
        !           650: struct kvm_dirty_tlb {
        !           651:        __u64 bitmap;
        !           652:        __u32 num_dirty;
        !           653: };
        !           654: 
        !           655: /* Available with KVM_CAP_ONE_REG */
        !           656: 
        !           657: #define KVM_ONE_REG_GENERIC            0x0000000000000000ULL
        !           658: 
        !           659: /*
        !           660:  * Architecture specific registers are to be defined in arch headers and
        !           661:  * ORed with the arch identifier.
        !           662:  */
        !           663: #define KVM_ONE_REG_PPC                        0x1000000000000000ULL
        !           664: #define KVM_ONE_REG_X86                        0x2000000000000000ULL
        !           665: #define KVM_ONE_REG_IA64               0x3000000000000000ULL
        !           666: #define KVM_ONE_REG_ARM                        0x4000000000000000ULL
        !           667: #define KVM_ONE_REG_S390               0x5000000000000000ULL
        !           668: 
        !           669: struct kvm_one_reg {
        !           670:        __u64 id;
        !           671:        union {
        !           672:                __u8 reg8;
        !           673:                __u16 reg16;
        !           674:                __u32 reg32;
        !           675:                __u64 reg64;
        !           676:                __u8 reg128[16];
        !           677:                __u8 reg256[32];
        !           678:                __u8 reg512[64];
        !           679:                __u8 reg1024[128];
        !           680:        } u;
        !           681: };
        !           682: 
1.1       root      683: /*
                    684:  * ioctls for VM fds
                    685:  */
                    686: #define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
                    687: /*
                    688:  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
                    689:  * a vcpu fd.
                    690:  */
                    691: #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
                    692: #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
                    693: /* KVM_SET_MEMORY_ALIAS is obsolete: */
                    694: #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
                    695: #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
                    696: #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
                    697: #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
                    698:                                        struct kvm_userspace_memory_region)
                    699: #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
                    700: #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
                    701: /* Device model IOC */
                    702: #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
                    703: #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
                    704: #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
                    705: #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
                    706: #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
                    707: #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
                    708: #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
                    709: #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
                    710: #define KVM_REGISTER_COALESCED_MMIO \
                    711:                        _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
                    712: #define KVM_UNREGISTER_COALESCED_MMIO \
                    713:                        _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
                    714: #define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
                    715:                                       struct kvm_assigned_pci_dev)
                    716: #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
                    717: /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
                    718: #define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
                    719: #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
                    720: #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
                    721: #define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
                    722:                                       struct kvm_assigned_pci_dev)
                    723: #define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
                    724:                                       struct kvm_assigned_msix_nr)
                    725: #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
                    726:                                       struct kvm_assigned_msix_entry)
                    727: #define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
                    728: #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
                    729: #define KVM_CREATE_PIT2                  _IOW(KVMIO,  0x77, struct kvm_pit_config)
                    730: #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
                    731: #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
                    732: #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
                    733: #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
                    734: #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
                    735: /* Available with KVM_CAP_PIT_STATE2 */
                    736: #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
                    737: #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
                    738: /* Available with KVM_CAP_PPC_GET_PVINFO */
                    739: #define KVM_PPC_GET_PVINFO       _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
                    740: /* Available with KVM_CAP_TSC_CONTROL */
                    741: #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
                    742: #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
                    743: 
                    744: /*
                    745:  * ioctls for vcpu fds
                    746:  */
                    747: #define KVM_RUN                   _IO(KVMIO,   0x80)
                    748: #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
                    749: #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
                    750: #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
                    751: #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
                    752: #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
                    753: #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
                    754: /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
                    755: #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
                    756: #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
                    757: #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
                    758: #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
                    759: #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
                    760: #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
                    761: #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
                    762: #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
                    763: #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
                    764: #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
                    765: #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
                    766: /* Available with KVM_CAP_VAPIC */
                    767: #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
                    768: /* Available with KVM_CAP_VAPIC */
                    769: #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
                    770: /* valid for virtual machine (for floating interrupt)_and_ vcpu */
                    771: #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
                    772: /* store status for s390 */
                    773: #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
                    774: #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
                    775: #define KVM_S390_STORE_STATUS    _IOW(KVMIO,  0x95, unsigned long)
                    776: /* initial ipl psw for s390 */
                    777: #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
                    778: /* initial reset for s390 */
                    779: #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
                    780: #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
                    781: #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
                    782: /* Available with KVM_CAP_NMI */
                    783: #define KVM_NMI                   _IO(KVMIO,   0x9a)
                    784: /* Available with KVM_CAP_SET_GUEST_DEBUG */
                    785: #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
                    786: /* MCE for x86 */
                    787: #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
                    788: #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
                    789: #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
                    790: /* IA64 stack access */
                    791: #define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
                    792: #define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
                    793: /* Available with KVM_CAP_VCPU_EVENTS */
                    794: #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
                    795: #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
                    796: /* Available with KVM_CAP_DEBUGREGS */
                    797: #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
                    798: #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
                    799: #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
                    800: /* Available with KVM_CAP_XSAVE */
                    801: #define KVM_GET_XSAVE            _IOR(KVMIO,  0xa4, struct kvm_xsave)
                    802: #define KVM_SET_XSAVE            _IOW(KVMIO,  0xa5, struct kvm_xsave)
                    803: /* Available with KVM_CAP_XCRS */
                    804: #define KVM_GET_XCRS             _IOR(KVMIO,  0xa6, struct kvm_xcrs)
                    805: #define KVM_SET_XCRS             _IOW(KVMIO,  0xa7, struct kvm_xcrs)
1.1.1.2 ! root      806: #define KVM_CREATE_SPAPR_TCE     _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
        !           807: /* Available with KVM_CAP_RMA */
        !           808: #define KVM_ALLOCATE_RMA         _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
        !           809: /* Available with KVM_CAP_SW_TLB */
        !           810: #define KVM_DIRTY_TLB            _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
        !           811: /* Available with KVM_CAP_ONE_REG */
        !           812: #define KVM_GET_ONE_REG                  _IOWR(KVMIO, 0xab, struct kvm_one_reg)
        !           813: #define KVM_SET_ONE_REG                  _IOW(KVMIO,  0xac, struct kvm_one_reg)
1.1       root      814: 
                    815: #define KVM_DEV_ASSIGN_ENABLE_IOMMU    (1 << 0)
                    816: 
                    817: struct kvm_assigned_pci_dev {
                    818:        __u32 assigned_dev_id;
                    819:        __u32 busnr;
                    820:        __u32 devfn;
                    821:        __u32 flags;
                    822:        __u32 segnr;
                    823:        union {
                    824:                __u32 reserved[11];
                    825:        };
                    826: };
                    827: 
                    828: #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
                    829: #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
                    830: #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
                    831: 
                    832: #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
                    833: #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
                    834: #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
                    835: 
                    836: #define KVM_DEV_IRQ_HOST_MASK   0x00ff
                    837: #define KVM_DEV_IRQ_GUEST_MASK   0xff00
                    838: 
                    839: struct kvm_assigned_irq {
                    840:        __u32 assigned_dev_id;
1.1.1.2 ! root      841:        __u32 host_irq; /* ignored (legacy field) */
1.1       root      842:        __u32 guest_irq;
                    843:        __u32 flags;
                    844:        union {
                    845:                __u32 reserved[12];
                    846:        };
                    847: };
                    848: 
                    849: struct kvm_assigned_msix_nr {
                    850:        __u32 assigned_dev_id;
                    851:        __u16 entry_nr;
                    852:        __u16 padding;
                    853: };
                    854: 
                    855: #define KVM_MAX_MSIX_PER_DEV           256
                    856: struct kvm_assigned_msix_entry {
                    857:        __u32 assigned_dev_id;
                    858:        __u32 gsi;
                    859:        __u16 entry; /* The index of entry in the MSI-X table */
                    860:        __u16 padding[3];
                    861: };
                    862: 
                    863: #endif /* __LINUX_KVM_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.