Annotation of qemu/linux-headers/linux/kvm.h, revision 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.