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

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
                    164: 
                    165: /* For KVM_EXIT_INTERNAL_ERROR */
                    166: #define KVM_INTERNAL_ERROR_EMULATION 1
                    167: #define KVM_INTERNAL_ERROR_SIMUL_EX 2
                    168: 
                    169: /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
                    170: struct kvm_run {
                    171:        /* in */
                    172:        __u8 request_interrupt_window;
                    173:        __u8 padding1[7];
                    174: 
                    175:        /* out */
                    176:        __u32 exit_reason;
                    177:        __u8 ready_for_interrupt_injection;
                    178:        __u8 if_flag;
                    179:        __u8 padding2[2];
                    180: 
                    181:        /* in (pre_kvm_run), out (post_kvm_run) */
                    182:        __u64 cr8;
                    183:        __u64 apic_base;
                    184: 
                    185: #ifdef __KVM_S390
                    186:        /* the processor status word for s390 */
                    187:        __u64 psw_mask; /* psw upper half */
                    188:        __u64 psw_addr; /* psw lower half */
                    189: #endif
                    190:        union {
                    191:                /* KVM_EXIT_UNKNOWN */
                    192:                struct {
                    193:                        __u64 hardware_exit_reason;
                    194:                } hw;
                    195:                /* KVM_EXIT_FAIL_ENTRY */
                    196:                struct {
                    197:                        __u64 hardware_entry_failure_reason;
                    198:                } fail_entry;
                    199:                /* KVM_EXIT_EXCEPTION */
                    200:                struct {
                    201:                        __u32 exception;
                    202:                        __u32 error_code;
                    203:                } ex;
                    204:                /* KVM_EXIT_IO */
                    205:                struct {
                    206: #define KVM_EXIT_IO_IN  0
                    207: #define KVM_EXIT_IO_OUT 1
                    208:                        __u8 direction;
                    209:                        __u8 size; /* bytes */
                    210:                        __u16 port;
                    211:                        __u32 count;
                    212:                        __u64 data_offset; /* relative to kvm_run start */
                    213:                } io;
                    214:                struct {
                    215:                        struct kvm_debug_exit_arch arch;
                    216:                } debug;
                    217:                /* KVM_EXIT_MMIO */
                    218:                struct {
                    219:                        __u64 phys_addr;
                    220:                        __u8  data[8];
                    221:                        __u32 len;
                    222:                        __u8  is_write;
                    223:                } mmio;
                    224:                /* KVM_EXIT_HYPERCALL */
                    225:                struct {
                    226:                        __u64 nr;
                    227:                        __u64 args[6];
                    228:                        __u64 ret;
                    229:                        __u32 longmode;
                    230:                        __u32 pad;
                    231:                } hypercall;
                    232:                /* KVM_EXIT_TPR_ACCESS */
                    233:                struct {
                    234:                        __u64 rip;
                    235:                        __u32 is_write;
                    236:                        __u32 pad;
                    237:                } tpr_access;
                    238:                /* KVM_EXIT_S390_SIEIC */
                    239:                struct {
                    240:                        __u8 icptcode;
                    241:                        __u16 ipa;
                    242:                        __u32 ipb;
                    243:                } s390_sieic;
                    244:                /* KVM_EXIT_S390_RESET */
                    245: #define KVM_S390_RESET_POR       1
                    246: #define KVM_S390_RESET_CLEAR     2
                    247: #define KVM_S390_RESET_SUBSYSTEM 4
                    248: #define KVM_S390_RESET_CPU_INIT  8
                    249: #define KVM_S390_RESET_IPL       16
                    250:                __u64 s390_reset_flags;
                    251:                /* KVM_EXIT_DCR */
                    252:                struct {
                    253:                        __u32 dcrn;
                    254:                        __u32 data;
                    255:                        __u8  is_write;
                    256:                } dcr;
                    257:                struct {
                    258:                        __u32 suberror;
                    259:                        /* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
                    260:                        __u32 ndata;
                    261:                        __u64 data[16];
                    262:                } internal;
                    263:                /* KVM_EXIT_OSI */
                    264:                struct {
                    265:                        __u64 gprs[32];
                    266:                } osi;
                    267:                /* Fix the size of the union. */
                    268:                char padding[256];
                    269:        };
                    270: };
                    271: 
                    272: /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
                    273: 
                    274: struct kvm_coalesced_mmio_zone {
                    275:        __u64 addr;
                    276:        __u32 size;
                    277:        __u32 pad;
                    278: };
                    279: 
                    280: struct kvm_coalesced_mmio {
                    281:        __u64 phys_addr;
                    282:        __u32 len;
                    283:        __u32 pad;
                    284:        __u8  data[8];
                    285: };
                    286: 
                    287: struct kvm_coalesced_mmio_ring {
                    288:        __u32 first, last;
                    289:        struct kvm_coalesced_mmio coalesced_mmio[0];
                    290: };
                    291: 
                    292: #define KVM_COALESCED_MMIO_MAX \
                    293:        ((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
                    294:         sizeof(struct kvm_coalesced_mmio))
                    295: 
                    296: /* for KVM_TRANSLATE */
                    297: struct kvm_translation {
                    298:        /* in */
                    299:        __u64 linear_address;
                    300: 
                    301:        /* out */
                    302:        __u64 physical_address;
                    303:        __u8  valid;
                    304:        __u8  writeable;
                    305:        __u8  usermode;
                    306:        __u8  pad[5];
                    307: };
                    308: 
                    309: /* for KVM_INTERRUPT */
                    310: struct kvm_interrupt {
                    311:        /* in */
                    312:        __u32 irq;
                    313: };
                    314: 
                    315: /* for KVM_GET_DIRTY_LOG */
                    316: struct kvm_dirty_log {
                    317:        __u32 slot;
                    318:        __u32 padding1;
                    319:        union {
                    320:                void *dirty_bitmap; /* one bit per page */
                    321:                __u64 padding2;
                    322:        };
                    323: };
                    324: 
                    325: /* for KVM_SET_SIGNAL_MASK */
                    326: struct kvm_signal_mask {
                    327:        __u32 len;
                    328:        __u8  sigset[0];
                    329: };
                    330: 
                    331: /* for KVM_TPR_ACCESS_REPORTING */
                    332: struct kvm_tpr_access_ctl {
                    333:        __u32 enabled;
                    334:        __u32 flags;
                    335:        __u32 reserved[8];
                    336: };
                    337: 
                    338: /* for KVM_SET_VAPIC_ADDR */
                    339: struct kvm_vapic_addr {
                    340:        __u64 vapic_addr;
                    341: };
                    342: 
                    343: /* for KVM_SET_MPSTATE */
                    344: 
                    345: #define KVM_MP_STATE_RUNNABLE          0
                    346: #define KVM_MP_STATE_UNINITIALIZED     1
                    347: #define KVM_MP_STATE_INIT_RECEIVED     2
                    348: #define KVM_MP_STATE_HALTED            3
                    349: #define KVM_MP_STATE_SIPI_RECEIVED     4
                    350: 
                    351: struct kvm_mp_state {
                    352:        __u32 mp_state;
                    353: };
                    354: 
                    355: struct kvm_s390_psw {
                    356:        __u64 mask;
                    357:        __u64 addr;
                    358: };
                    359: 
                    360: /* valid values for type in kvm_s390_interrupt */
                    361: #define KVM_S390_SIGP_STOP             0xfffe0000u
                    362: #define KVM_S390_PROGRAM_INT           0xfffe0001u
                    363: #define KVM_S390_SIGP_SET_PREFIX       0xfffe0002u
                    364: #define KVM_S390_RESTART               0xfffe0003u
                    365: #define KVM_S390_INT_VIRTIO            0xffff2603u
                    366: #define KVM_S390_INT_SERVICE           0xffff2401u
                    367: #define KVM_S390_INT_EMERGENCY         0xffff1201u
                    368: 
                    369: struct kvm_s390_interrupt {
                    370:        __u32 type;
                    371:        __u32 parm;
                    372:        __u64 parm64;
                    373: };
                    374: 
                    375: /* for KVM_SET_GUEST_DEBUG */
                    376: 
                    377: #define KVM_GUESTDBG_ENABLE            0x00000001
                    378: #define KVM_GUESTDBG_SINGLESTEP                0x00000002
                    379: 
                    380: struct kvm_guest_debug {
                    381:        __u32 control;
                    382:        __u32 pad;
                    383:        struct kvm_guest_debug_arch arch;
                    384: };
                    385: 
                    386: enum {
                    387:        kvm_ioeventfd_flag_nr_datamatch,
                    388:        kvm_ioeventfd_flag_nr_pio,
                    389:        kvm_ioeventfd_flag_nr_deassign,
                    390:        kvm_ioeventfd_flag_nr_max,
                    391: };
                    392: 
                    393: #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
                    394: #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
                    395: #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
                    396: 
                    397: #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
                    398: 
                    399: struct kvm_ioeventfd {
                    400:        __u64 datamatch;
                    401:        __u64 addr;        /* legal pio/mmio address */
                    402:        __u32 len;         /* 1, 2, 4, or 8 bytes    */
                    403:        __s32 fd;
                    404:        __u32 flags;
                    405:        __u8  pad[36];
                    406: };
                    407: 
                    408: /* for KVM_ENABLE_CAP */
                    409: struct kvm_enable_cap {
                    410:        /* in */
                    411:        __u32 cap;
                    412:        __u32 flags;
                    413:        __u64 args[4];
                    414:        __u8  pad[64];
                    415: };
                    416: 
                    417: /* for KVM_PPC_GET_PVINFO */
                    418: struct kvm_ppc_pvinfo {
                    419:        /* out */
                    420:        __u32 flags;
                    421:        __u32 hcall[4];
                    422:        __u8  pad[108];
                    423: };
                    424: 
                    425: #define KVMIO 0xAE
                    426: 
                    427: /*
                    428:  * ioctls for /dev/kvm fds:
                    429:  */
                    430: #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
                    431: #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
                    432: #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
                    433: 
                    434: #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
                    435: /*
                    436:  * Check if a kvm extension is available.  Argument is extension number,
                    437:  * return is 1 (yes) or 0 (no, sorry).
                    438:  */
                    439: #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
                    440: /*
                    441:  * Get size for mmap(vcpu_fd)
                    442:  */
                    443: #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
                    444: #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
                    445: #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
                    446: #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
                    447: #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
                    448: 
                    449: /*
                    450:  * Extension capability list.
                    451:  */
                    452: #define KVM_CAP_IRQCHIP          0
                    453: #define KVM_CAP_HLT      1
                    454: #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
                    455: #define KVM_CAP_USER_MEMORY 3
                    456: #define KVM_CAP_SET_TSS_ADDR 4
                    457: #define KVM_CAP_VAPIC 6
                    458: #define KVM_CAP_EXT_CPUID 7
                    459: #define KVM_CAP_CLOCKSOURCE 8
                    460: #define KVM_CAP_NR_VCPUS 9       /* returns max vcpus per vm */
                    461: #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
                    462: #define KVM_CAP_PIT 11
                    463: #define KVM_CAP_NOP_IO_DELAY 12
                    464: #define KVM_CAP_PV_MMU 13
                    465: #define KVM_CAP_MP_STATE 14
                    466: #define KVM_CAP_COALESCED_MMIO 15
                    467: #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
                    468: #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
                    469: #define KVM_CAP_DEVICE_ASSIGNMENT 17
                    470: #endif
                    471: #define KVM_CAP_IOMMU 18
                    472: #ifdef __KVM_HAVE_MSI
                    473: #define KVM_CAP_DEVICE_MSI 20
                    474: #endif
                    475: /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
                    476: #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
                    477: #ifdef __KVM_HAVE_USER_NMI
                    478: #define KVM_CAP_USER_NMI 22
                    479: #endif
                    480: #ifdef __KVM_HAVE_GUEST_DEBUG
                    481: #define KVM_CAP_SET_GUEST_DEBUG 23
                    482: #endif
                    483: #ifdef __KVM_HAVE_PIT
                    484: #define KVM_CAP_REINJECT_CONTROL 24
                    485: #endif
                    486: #ifdef __KVM_HAVE_IOAPIC
                    487: #define KVM_CAP_IRQ_ROUTING 25
                    488: #endif
                    489: #define KVM_CAP_IRQ_INJECT_STATUS 26
                    490: #ifdef __KVM_HAVE_DEVICE_ASSIGNMENT
                    491: #define KVM_CAP_DEVICE_DEASSIGNMENT 27
                    492: #endif
                    493: #ifdef __KVM_HAVE_MSIX
                    494: #define KVM_CAP_DEVICE_MSIX 28
                    495: #endif
                    496: #define KVM_CAP_ASSIGN_DEV_IRQ 29
                    497: /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
                    498: #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
                    499: #ifdef __KVM_HAVE_MCE
                    500: #define KVM_CAP_MCE 31
                    501: #endif
                    502: #define KVM_CAP_IRQFD 32
                    503: #ifdef __KVM_HAVE_PIT
                    504: #define KVM_CAP_PIT2 33
                    505: #endif
                    506: #define KVM_CAP_SET_BOOT_CPU_ID 34
                    507: #ifdef __KVM_HAVE_PIT_STATE2
                    508: #define KVM_CAP_PIT_STATE2 35
                    509: #endif
                    510: #define KVM_CAP_IOEVENTFD 36
                    511: #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
                    512: #ifdef __KVM_HAVE_XEN_HVM
                    513: #define KVM_CAP_XEN_HVM 38
                    514: #endif
                    515: #define KVM_CAP_ADJUST_CLOCK 39
                    516: #define KVM_CAP_INTERNAL_ERROR_DATA 40
                    517: #ifdef __KVM_HAVE_VCPU_EVENTS
                    518: #define KVM_CAP_VCPU_EVENTS 41
                    519: #endif
                    520: #define KVM_CAP_S390_PSW 42
                    521: #define KVM_CAP_PPC_SEGSTATE 43
                    522: #define KVM_CAP_HYPERV 44
                    523: #define KVM_CAP_HYPERV_VAPIC 45
                    524: #define KVM_CAP_HYPERV_SPIN 46
                    525: #define KVM_CAP_PCI_SEGMENT 47
                    526: #define KVM_CAP_PPC_PAIRED_SINGLES 48
                    527: #define KVM_CAP_INTR_SHADOW 49
                    528: #ifdef __KVM_HAVE_DEBUGREGS
                    529: #define KVM_CAP_DEBUGREGS 50
                    530: #endif
                    531: #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
                    532: #define KVM_CAP_PPC_OSI 52
                    533: #define KVM_CAP_PPC_UNSET_IRQ 53
                    534: #define KVM_CAP_ENABLE_CAP 54
                    535: #ifdef __KVM_HAVE_XSAVE
                    536: #define KVM_CAP_XSAVE 55
                    537: #endif
                    538: #ifdef __KVM_HAVE_XCRS
                    539: #define KVM_CAP_XCRS 56
                    540: #endif
                    541: #define KVM_CAP_PPC_GET_PVINFO 57
                    542: #define KVM_CAP_PPC_IRQ_LEVEL 58
                    543: #define KVM_CAP_ASYNC_PF 59
                    544: #define KVM_CAP_TSC_CONTROL 60
                    545: #define KVM_CAP_GET_TSC_KHZ 61
                    546: #define KVM_CAP_PPC_BOOKE_SREGS 62
                    547: 
                    548: #ifdef KVM_CAP_IRQ_ROUTING
                    549: 
                    550: struct kvm_irq_routing_irqchip {
                    551:        __u32 irqchip;
                    552:        __u32 pin;
                    553: };
                    554: 
                    555: struct kvm_irq_routing_msi {
                    556:        __u32 address_lo;
                    557:        __u32 address_hi;
                    558:        __u32 data;
                    559:        __u32 pad;
                    560: };
                    561: 
                    562: /* gsi routing entry types */
                    563: #define KVM_IRQ_ROUTING_IRQCHIP 1
                    564: #define KVM_IRQ_ROUTING_MSI 2
                    565: 
                    566: struct kvm_irq_routing_entry {
                    567:        __u32 gsi;
                    568:        __u32 type;
                    569:        __u32 flags;
                    570:        __u32 pad;
                    571:        union {
                    572:                struct kvm_irq_routing_irqchip irqchip;
                    573:                struct kvm_irq_routing_msi msi;
                    574:                __u32 pad[8];
                    575:        } u;
                    576: };
                    577: 
                    578: struct kvm_irq_routing {
                    579:        __u32 nr;
                    580:        __u32 flags;
                    581:        struct kvm_irq_routing_entry entries[0];
                    582: };
                    583: 
                    584: #endif
                    585: 
                    586: #ifdef KVM_CAP_MCE
                    587: /* x86 MCE */
                    588: struct kvm_x86_mce {
                    589:        __u64 status;
                    590:        __u64 addr;
                    591:        __u64 misc;
                    592:        __u64 mcg_status;
                    593:        __u8 bank;
                    594:        __u8 pad1[7];
                    595:        __u64 pad2[3];
                    596: };
                    597: #endif
                    598: 
                    599: #ifdef KVM_CAP_XEN_HVM
                    600: struct kvm_xen_hvm_config {
                    601:        __u32 flags;
                    602:        __u32 msr;
                    603:        __u64 blob_addr_32;
                    604:        __u64 blob_addr_64;
                    605:        __u8 blob_size_32;
                    606:        __u8 blob_size_64;
                    607:        __u8 pad2[30];
                    608: };
                    609: #endif
                    610: 
                    611: #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
                    612: 
                    613: struct kvm_irqfd {
                    614:        __u32 fd;
                    615:        __u32 gsi;
                    616:        __u32 flags;
                    617:        __u8  pad[20];
                    618: };
                    619: 
                    620: struct kvm_clock_data {
                    621:        __u64 clock;
                    622:        __u32 flags;
                    623:        __u32 pad[9];
                    624: };
                    625: 
                    626: /*
                    627:  * ioctls for VM fds
                    628:  */
                    629: #define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)
                    630: /*
                    631:  * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
                    632:  * a vcpu fd.
                    633:  */
                    634: #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
                    635: #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
                    636: /* KVM_SET_MEMORY_ALIAS is obsolete: */
                    637: #define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias)
                    638: #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
                    639: #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)
                    640: #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
                    641:                                        struct kvm_userspace_memory_region)
                    642: #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
                    643: #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
                    644: /* Device model IOC */
                    645: #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
                    646: #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
                    647: #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
                    648: #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
                    649: #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
                    650: #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
                    651: #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
                    652: #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
                    653: #define KVM_REGISTER_COALESCED_MMIO \
                    654:                        _IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
                    655: #define KVM_UNREGISTER_COALESCED_MMIO \
                    656:                        _IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
                    657: #define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
                    658:                                       struct kvm_assigned_pci_dev)
                    659: #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
                    660: /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
                    661: #define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
                    662: #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
                    663: #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
                    664: #define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
                    665:                                       struct kvm_assigned_pci_dev)
                    666: #define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
                    667:                                       struct kvm_assigned_msix_nr)
                    668: #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
                    669:                                       struct kvm_assigned_msix_entry)
                    670: #define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
                    671: #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
                    672: #define KVM_CREATE_PIT2                  _IOW(KVMIO,  0x77, struct kvm_pit_config)
                    673: #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
                    674: #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
                    675: #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
                    676: #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
                    677: #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
                    678: /* Available with KVM_CAP_PIT_STATE2 */
                    679: #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
                    680: #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
                    681: /* Available with KVM_CAP_PPC_GET_PVINFO */
                    682: #define KVM_PPC_GET_PVINFO       _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
                    683: /* Available with KVM_CAP_TSC_CONTROL */
                    684: #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
                    685: #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
                    686: 
                    687: /*
                    688:  * ioctls for vcpu fds
                    689:  */
                    690: #define KVM_RUN                   _IO(KVMIO,   0x80)
                    691: #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
                    692: #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
                    693: #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
                    694: #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
                    695: #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
                    696: #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
                    697: /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
                    698: #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
                    699: #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
                    700: #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
                    701: #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
                    702: #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
                    703: #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
                    704: #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
                    705: #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
                    706: #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
                    707: #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
                    708: #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
                    709: /* Available with KVM_CAP_VAPIC */
                    710: #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
                    711: /* Available with KVM_CAP_VAPIC */
                    712: #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
                    713: /* valid for virtual machine (for floating interrupt)_and_ vcpu */
                    714: #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
                    715: /* store status for s390 */
                    716: #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
                    717: #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
                    718: #define KVM_S390_STORE_STATUS    _IOW(KVMIO,  0x95, unsigned long)
                    719: /* initial ipl psw for s390 */
                    720: #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
                    721: /* initial reset for s390 */
                    722: #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
                    723: #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
                    724: #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
                    725: /* Available with KVM_CAP_NMI */
                    726: #define KVM_NMI                   _IO(KVMIO,   0x9a)
                    727: /* Available with KVM_CAP_SET_GUEST_DEBUG */
                    728: #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
                    729: /* MCE for x86 */
                    730: #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
                    731: #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
                    732: #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
                    733: /* IA64 stack access */
                    734: #define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
                    735: #define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
                    736: /* Available with KVM_CAP_VCPU_EVENTS */
                    737: #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
                    738: #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
                    739: /* Available with KVM_CAP_DEBUGREGS */
                    740: #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
                    741: #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
                    742: #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
                    743: /* Available with KVM_CAP_XSAVE */
                    744: #define KVM_GET_XSAVE            _IOR(KVMIO,  0xa4, struct kvm_xsave)
                    745: #define KVM_SET_XSAVE            _IOW(KVMIO,  0xa5, struct kvm_xsave)
                    746: /* Available with KVM_CAP_XCRS */
                    747: #define KVM_GET_XCRS             _IOR(KVMIO,  0xa6, struct kvm_xcrs)
                    748: #define KVM_SET_XCRS             _IOW(KVMIO,  0xa7, struct kvm_xcrs)
                    749: 
                    750: #define KVM_DEV_ASSIGN_ENABLE_IOMMU    (1 << 0)
                    751: 
                    752: struct kvm_assigned_pci_dev {
                    753:        __u32 assigned_dev_id;
                    754:        __u32 busnr;
                    755:        __u32 devfn;
                    756:        __u32 flags;
                    757:        __u32 segnr;
                    758:        union {
                    759:                __u32 reserved[11];
                    760:        };
                    761: };
                    762: 
                    763: #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
                    764: #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
                    765: #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
                    766: 
                    767: #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
                    768: #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
                    769: #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
                    770: 
                    771: #define KVM_DEV_IRQ_HOST_MASK   0x00ff
                    772: #define KVM_DEV_IRQ_GUEST_MASK   0xff00
                    773: 
                    774: struct kvm_assigned_irq {
                    775:        __u32 assigned_dev_id;
                    776:        __u32 host_irq;
                    777:        __u32 guest_irq;
                    778:        __u32 flags;
                    779:        union {
                    780:                struct {
                    781:                        __u32 addr_lo;
                    782:                        __u32 addr_hi;
                    783:                        __u32 data;
                    784:                } guest_msi;
                    785:                __u32 reserved[12];
                    786:        };
                    787: };
                    788: 
                    789: 
                    790: struct kvm_assigned_msix_nr {
                    791:        __u32 assigned_dev_id;
                    792:        __u16 entry_nr;
                    793:        __u16 padding;
                    794: };
                    795: 
                    796: #define KVM_MAX_MSIX_PER_DEV           256
                    797: struct kvm_assigned_msix_entry {
                    798:        __u32 assigned_dev_id;
                    799:        __u32 gsi;
                    800:        __u16 entry; /* The index of entry in the MSI-X table */
                    801:        __u16 padding[3];
                    802: };
                    803: 
                    804: #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.