diff options
Diffstat (limited to 'include/linux/kvm.h')
| -rw-r--r-- | include/linux/kvm.h | 272 | 
1 files changed, 156 insertions, 116 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index f8f8900fc5e..2d241da0723 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h @@ -14,12 +14,76 @@  #define KVM_API_VERSION 12 -/* for KVM_TRACE_ENABLE, deprecated */ +/* *** Deprecated interfaces *** */ + +#define KVM_TRC_SHIFT           16 + +#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT) +#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) + +#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01) +#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02) +#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01) + +#define KVM_TRC_HEAD_SIZE       12 +#define KVM_TRC_CYCLE_SIZE      8 +#define KVM_TRC_EXTRA_MAX       7 + +#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02) +#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03) +#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04) +#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05) +#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06) +#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07) +#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08) +#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09) +#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A) +#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B) +#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C) +#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D) +#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E) +#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F) +#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10) +#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11) +#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12) +#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13) +#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14) +#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15) +#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16) +#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17) +#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18) +#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19) +  struct kvm_user_trace_setup { -	__u32 buf_size; /* sub_buffer size of each per-cpu */ -	__u32 buf_nr; /* the number of sub_buffers of each per-cpu */ +	__u32 buf_size; +	__u32 buf_nr; +}; + +#define __KVM_DEPRECATED_MAIN_W_0x06 \ +	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup) +#define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07) +#define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08) + +#define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq) + +struct kvm_breakpoint { +	__u32 enabled; +	__u32 padding; +	__u64 address; +}; + +struct kvm_debug_guest { +	__u32 enabled; +	__u32 pad; +	struct kvm_breakpoint breakpoints[4]; +	__u32 singlestep;  }; +#define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest) + +/* *** End of deprecated interfaces *** */ + +  /* for KVM_CREATE_MEMORY_REGION */  struct kvm_memory_region {  	__u32 slot; @@ -99,6 +163,7 @@ struct kvm_pit_config {  /* For KVM_EXIT_INTERNAL_ERROR */  #define KVM_INTERNAL_ERROR_EMULATION 1 +#define KVM_INTERNAL_ERROR_SIMUL_EX 2  /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */  struct kvm_run { @@ -116,6 +181,11 @@ struct kvm_run {  	__u64 cr8;  	__u64 apic_base; +#ifdef __KVM_S390 +	/* the processor status word for s390 */ +	__u64 psw_mask; /* psw upper half */ +	__u64 psw_addr; /* psw lower half */ +#endif  	union {  		/* KVM_EXIT_UNKNOWN */  		struct { @@ -167,8 +237,6 @@ struct kvm_run {  		/* KVM_EXIT_S390_SIEIC */  		struct {  			__u8 icptcode; -			__u64 mask; /* psw upper half */ -			__u64 addr; /* psw lower half */  			__u16 ipa;  			__u32 ipb;  		} s390_sieic; @@ -187,6 +255,9 @@ struct kvm_run {  		} dcr;  		struct {  			__u32 suberror; +			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */ +			__u32 ndata; +			__u64 data[16];  		} internal;  		/* Fix the size of the union. */  		char padding[256]; @@ -329,24 +400,6 @@ struct kvm_ioeventfd {  	__u8  pad[36];  }; -#define KVM_TRC_SHIFT           16 -/* - * kvm trace categories - */ -#define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT) -#define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1)) /* only 12 bits */ - -/* - * kvm trace action - */ -#define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01) -#define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02) -#define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01) - -#define KVM_TRC_HEAD_SIZE       12 -#define KVM_TRC_CYCLE_SIZE      8 -#define KVM_TRC_EXTRA_MAX       7 -  #define KVMIO 0xAE  /* @@ -367,12 +420,10 @@ struct kvm_ioeventfd {   */  #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */  #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2) -/* - * ioctls for kvm trace - */ -#define KVM_TRACE_ENABLE          _IOW(KVMIO, 0x06, struct kvm_user_trace_setup) -#define KVM_TRACE_PAUSE           _IO(KVMIO,  0x07) -#define KVM_TRACE_DISABLE         _IO(KVMIO,  0x08) +#define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06 +#define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07 +#define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08 +  /*   * Extension capability list.   */ @@ -436,6 +487,15 @@ struct kvm_ioeventfd {  #endif  #define KVM_CAP_IOEVENTFD 36  #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37 +#ifdef __KVM_HAVE_XEN_HVM +#define KVM_CAP_XEN_HVM 38 +#endif +#define KVM_CAP_ADJUST_CLOCK 39 +#define KVM_CAP_INTERNAL_ERROR_DATA 40 +#ifdef __KVM_HAVE_VCPU_EVENTS +#define KVM_CAP_VCPU_EVENTS 41 +#endif +#define KVM_CAP_S390_PSW 42  #ifdef KVM_CAP_IRQ_ROUTING @@ -488,6 +548,18 @@ struct kvm_x86_mce {  };  #endif +#ifdef KVM_CAP_XEN_HVM +struct kvm_xen_hvm_config { +	__u32 flags; +	__u32 msr; +	__u64 blob_addr_32; +	__u64 blob_addr_64; +	__u8 blob_size_32; +	__u8 blob_size_64; +	__u8 pad2[30]; +}; +#endif +  #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)  struct kvm_irqfd { @@ -497,55 +569,66 @@ struct kvm_irqfd {  	__u8  pad[20];  }; +struct kvm_clock_data { +	__u64 clock; +	__u32 flags; +	__u32 pad[9]; +}; +  /*   * ioctls for VM fds   */ -#define KVM_SET_MEMORY_REGION     _IOW(KVMIO, 0x40, struct kvm_memory_region) +#define KVM_SET_MEMORY_REGION     _IOW(KVMIO,  0x40, struct kvm_memory_region)  /*   * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns   * a vcpu fd.   */ -#define KVM_CREATE_VCPU           _IO(KVMIO,  0x41) -#define KVM_GET_DIRTY_LOG         _IOW(KVMIO, 0x42, struct kvm_dirty_log) -#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO, 0x43, struct kvm_memory_alias) -#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO, 0x44) -#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO, 0x45) -#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46,\ +#define KVM_CREATE_VCPU           _IO(KVMIO,   0x41) +#define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log) +#define KVM_SET_MEMORY_ALIAS      _IOW(KVMIO,  0x43, struct kvm_memory_alias) +#define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44) +#define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45) +#define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \  					struct kvm_userspace_memory_region) -#define KVM_SET_TSS_ADDR          _IO(KVMIO, 0x47) -#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO, 0x48, __u64) +#define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47) +#define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)  /* Device model IOC */ -#define KVM_CREATE_IRQCHIP	  _IO(KVMIO,  0x60) -#define KVM_IRQ_LINE		  _IOW(KVMIO, 0x61, struct kvm_irq_level) -#define KVM_GET_IRQCHIP		  _IOWR(KVMIO, 0x62, struct kvm_irqchip) -#define KVM_SET_IRQCHIP		  _IOR(KVMIO,  0x63, struct kvm_irqchip) -#define KVM_CREATE_PIT		  _IO(KVMIO,  0x64) -#define KVM_GET_PIT		  _IOWR(KVMIO, 0x65, struct kvm_pit_state) -#define KVM_SET_PIT		  _IOR(KVMIO,  0x66, struct kvm_pit_state) -#define KVM_IRQ_LINE_STATUS	  _IOWR(KVMIO, 0x67, struct kvm_irq_level) +#define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60) +#define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level) +#define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip) +#define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip) +#define KVM_CREATE_PIT            _IO(KVMIO,   0x64) +#define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state) +#define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state) +#define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)  #define KVM_REGISTER_COALESCED_MMIO \  			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)  #define KVM_UNREGISTER_COALESCED_MMIO \  			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone) -#define KVM_ASSIGN_PCI_DEVICE _IOR(KVMIO, 0x69, \ -				   struct kvm_assigned_pci_dev) -#define KVM_SET_GSI_ROUTING       _IOW(KVMIO, 0x6a, struct kvm_irq_routing) +#define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \ +				       struct kvm_assigned_pci_dev) +#define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)  /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */ -#define KVM_ASSIGN_IRQ _IOR(KVMIO, 0x70, \ -			    struct kvm_assigned_irq) -#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO, 0x70, struct kvm_assigned_irq) -#define KVM_REINJECT_CONTROL      _IO(KVMIO, 0x71) -#define KVM_DEASSIGN_PCI_DEVICE _IOW(KVMIO, 0x72, \ -				     struct kvm_assigned_pci_dev) -#define KVM_ASSIGN_SET_MSIX_NR \ -			_IOW(KVMIO, 0x73, struct kvm_assigned_msix_nr) -#define KVM_ASSIGN_SET_MSIX_ENTRY \ -			_IOW(KVMIO, 0x74, struct kvm_assigned_msix_entry) -#define KVM_DEASSIGN_DEV_IRQ       _IOW(KVMIO, 0x75, struct kvm_assigned_irq) -#define KVM_IRQFD                  _IOW(KVMIO, 0x76, struct kvm_irqfd) -#define KVM_CREATE_PIT2		   _IOW(KVMIO, 0x77, struct kvm_pit_config) -#define KVM_SET_BOOT_CPU_ID        _IO(KVMIO, 0x78) -#define KVM_IOEVENTFD             _IOW(KVMIO, 0x79, struct kvm_ioeventfd) +#define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70 +#define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq) +#define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71) +#define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \ +				       struct kvm_assigned_pci_dev) +#define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \ +				       struct kvm_assigned_msix_nr) +#define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \ +				       struct kvm_assigned_msix_entry) +#define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq) +#define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd) +#define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config) +#define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78) +#define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd) +#define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config) +#define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data) +#define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data) +/* Available with KVM_CAP_PIT_STATE2 */ +#define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2) +#define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)  /*   * ioctls for vcpu fds @@ -558,7 +641,7 @@ struct kvm_irqfd {  #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)  #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)  /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */ -#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_DEBUG_GUEST +#define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87  #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)  #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)  #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid) @@ -570,7 +653,7 @@ struct kvm_irqfd {  #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)  #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)  /* Available with KVM_CAP_VAPIC */ -#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO,  0x92, struct kvm_tpr_access_ctl) +#define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)  /* Available with KVM_CAP_VAPIC */  #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)  /* valid for virtual machine (for floating interrupt)_and_ vcpu */ @@ -582,66 +665,23 @@ struct kvm_irqfd {  /* initial ipl psw for s390 */  #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)  /* initial reset for s390 */ -#define KVM_S390_INITIAL_RESET    _IO(KVMIO,  0x97) +#define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)  #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)  #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)  /* Available with KVM_CAP_NMI */ -#define KVM_NMI                   _IO(KVMIO,  0x9a) +#define KVM_NMI                   _IO(KVMIO,   0x9a)  /* Available with KVM_CAP_SET_GUEST_DEBUG */  #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)  /* MCE for x86 */  #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)  #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)  #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce) - -/* - * Deprecated interfaces - */ -struct kvm_breakpoint { -	__u32 enabled; -	__u32 padding; -	__u64 address; -}; - -struct kvm_debug_guest { -	__u32 enabled; -	__u32 pad; -	struct kvm_breakpoint breakpoints[4]; -	__u32 singlestep; -}; - -#define __KVM_DEPRECATED_DEBUG_GUEST _IOW(KVMIO,  0x87, struct kvm_debug_guest) - +/* IA64 stack access */  #define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)  #define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *) - -#define KVM_GET_PIT2   _IOR(KVMIO,   0x9f, struct kvm_pit_state2) -#define KVM_SET_PIT2   _IOW(KVMIO,   0xa0, struct kvm_pit_state2) - -#define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02) -#define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03) -#define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04) -#define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05) -#define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06) -#define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07) -#define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08) -#define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09) -#define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A) -#define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B) -#define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C) -#define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D) -#define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E) -#define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F) -#define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10) -#define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11) -#define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12) -#define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13) -#define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14) -#define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15) -#define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16) -#define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17) -#define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18) -#define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19) +/* Available with KVM_CAP_VCPU_EVENTS */ +#define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events) +#define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)  #define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0) @@ -696,4 +736,4 @@ struct kvm_assigned_msix_entry {  	__u16 padding[3];  }; -#endif +#endif /* __LINUX_KVM_H */  |