|
|
|
@ -16,6 +16,11 @@ |
|
|
|
|
|
|
|
#define KVM_API_VERSION 12 |
|
|
|
|
|
|
|
/*
|
|
|
|
* Backwards-compatible definitions. |
|
|
|
*/ |
|
|
|
#define __KVM_HAVE_GUEST_DEBUG |
|
|
|
|
|
|
|
/* for KVM_SET_USER_MEMORY_REGION */ |
|
|
|
struct kvm_userspace_memory_region { |
|
|
|
__u32 slot; |
|
|
|
@ -85,43 +90,6 @@ struct kvm_pit_config { |
|
|
|
|
|
|
|
#define KVM_PIT_SPEAKER_DUMMY 1 |
|
|
|
|
|
|
|
struct kvm_s390_skeys { |
|
|
|
__u64 start_gfn; |
|
|
|
__u64 count; |
|
|
|
__u64 skeydata_addr; |
|
|
|
__u32 flags; |
|
|
|
__u32 reserved[9]; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_S390_CMMA_PEEK (1 << 0) |
|
|
|
|
|
|
|
/**
|
|
|
|
* kvm_s390_cmma_log - Used for CMMA migration. |
|
|
|
* |
|
|
|
* Used both for input and output. |
|
|
|
* |
|
|
|
* @start_gfn: Guest page number to start from. |
|
|
|
* @count: Size of the result buffer. |
|
|
|
* @flags: Control operation mode via KVM_S390_CMMA_* flags |
|
|
|
* @remaining: Used with KVM_S390_GET_CMMA_BITS. Indicates how many dirty |
|
|
|
* pages are still remaining. |
|
|
|
* @mask: Used with KVM_S390_SET_CMMA_BITS. Bitmap of bits to actually set |
|
|
|
* in the PGSTE. |
|
|
|
* @values: Pointer to the values buffer. |
|
|
|
* |
|
|
|
* Used in KVM_S390_{G,S}ET_CMMA_BITS ioctls. |
|
|
|
*/ |
|
|
|
struct kvm_s390_cmma_log { |
|
|
|
__u64 start_gfn; |
|
|
|
__u32 count; |
|
|
|
__u32 flags; |
|
|
|
union { |
|
|
|
__u64 remaining; |
|
|
|
__u64 mask; |
|
|
|
}; |
|
|
|
__u64 values; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_hyperv_exit { |
|
|
|
#define KVM_EXIT_HYPERV_SYNIC 1 |
|
|
|
#define KVM_EXIT_HYPERV_HCALL 2 |
|
|
|
@ -313,11 +281,6 @@ struct kvm_run { |
|
|
|
__u32 ipb; |
|
|
|
} s390_sieic; |
|
|
|
/* KVM_EXIT_S390_RESET */ |
|
|
|
#define KVM_S390_RESET_POR 1 |
|
|
|
#define KVM_S390_RESET_CLEAR 2 |
|
|
|
#define KVM_S390_RESET_SUBSYSTEM 4 |
|
|
|
#define KVM_S390_RESET_CPU_INIT 8 |
|
|
|
#define KVM_S390_RESET_IPL 16 |
|
|
|
__u64 s390_reset_flags; |
|
|
|
/* KVM_EXIT_S390_UCONTROL */ |
|
|
|
struct { |
|
|
|
@ -532,43 +495,6 @@ struct kvm_translation { |
|
|
|
__u8 pad[5]; |
|
|
|
}; |
|
|
|
|
|
|
|
/* for KVM_S390_MEM_OP */ |
|
|
|
struct kvm_s390_mem_op { |
|
|
|
/* in */ |
|
|
|
__u64 gaddr; /* the guest address */ |
|
|
|
__u64 flags; /* flags */ |
|
|
|
__u32 size; /* amount of bytes */ |
|
|
|
__u32 op; /* type of operation */ |
|
|
|
__u64 buf; /* buffer in userspace */ |
|
|
|
union { |
|
|
|
struct { |
|
|
|
__u8 ar; /* the access register number */ |
|
|
|
__u8 key; /* access key, ignored if flag unset */ |
|
|
|
__u8 pad1[6]; /* ignored */ |
|
|
|
__u64 old_addr; /* ignored if cmpxchg flag unset */ |
|
|
|
}; |
|
|
|
__u32 sida_offset; /* offset into the sida */ |
|
|
|
__u8 reserved[32]; /* ignored */ |
|
|
|
}; |
|
|
|
}; |
|
|
|
/* types for kvm_s390_mem_op->op */ |
|
|
|
#define KVM_S390_MEMOP_LOGICAL_READ 0 |
|
|
|
#define KVM_S390_MEMOP_LOGICAL_WRITE 1 |
|
|
|
#define KVM_S390_MEMOP_SIDA_READ 2 |
|
|
|
#define KVM_S390_MEMOP_SIDA_WRITE 3 |
|
|
|
#define KVM_S390_MEMOP_ABSOLUTE_READ 4 |
|
|
|
#define KVM_S390_MEMOP_ABSOLUTE_WRITE 5 |
|
|
|
#define KVM_S390_MEMOP_ABSOLUTE_CMPXCHG 6 |
|
|
|
|
|
|
|
/* flags for kvm_s390_mem_op->flags */ |
|
|
|
#define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0) |
|
|
|
#define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1) |
|
|
|
#define KVM_S390_MEMOP_F_SKEY_PROTECTION (1ULL << 2) |
|
|
|
|
|
|
|
/* flags specifying extension support via KVM_CAP_S390_MEM_OP_EXTENSION */ |
|
|
|
#define KVM_S390_MEMOP_EXTENSION_CAP_BASE (1 << 0) |
|
|
|
#define KVM_S390_MEMOP_EXTENSION_CAP_CMPXCHG (1 << 1) |
|
|
|
|
|
|
|
/* for KVM_INTERRUPT */ |
|
|
|
struct kvm_interrupt { |
|
|
|
/* in */ |
|
|
|
@ -633,124 +559,6 @@ struct kvm_mp_state { |
|
|
|
__u32 mp_state; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_psw { |
|
|
|
__u64 mask; |
|
|
|
__u64 addr; |
|
|
|
}; |
|
|
|
|
|
|
|
/* valid values for type in kvm_s390_interrupt */ |
|
|
|
#define KVM_S390_SIGP_STOP 0xfffe0000u |
|
|
|
#define KVM_S390_PROGRAM_INT 0xfffe0001u |
|
|
|
#define KVM_S390_SIGP_SET_PREFIX 0xfffe0002u |
|
|
|
#define KVM_S390_RESTART 0xfffe0003u |
|
|
|
#define KVM_S390_INT_PFAULT_INIT 0xfffe0004u |
|
|
|
#define KVM_S390_INT_PFAULT_DONE 0xfffe0005u |
|
|
|
#define KVM_S390_MCHK 0xfffe1000u |
|
|
|
#define KVM_S390_INT_CLOCK_COMP 0xffff1004u |
|
|
|
#define KVM_S390_INT_CPU_TIMER 0xffff1005u |
|
|
|
#define KVM_S390_INT_VIRTIO 0xffff2603u |
|
|
|
#define KVM_S390_INT_SERVICE 0xffff2401u |
|
|
|
#define KVM_S390_INT_EMERGENCY 0xffff1201u |
|
|
|
#define KVM_S390_INT_EXTERNAL_CALL 0xffff1202u |
|
|
|
/* Anything below 0xfffe0000u is taken by INT_IO */ |
|
|
|
#define KVM_S390_INT_IO(ai,cssid,ssid,schid) \ |
|
|
|
(((schid)) | \ |
|
|
|
((ssid) << 16) | \ |
|
|
|
((cssid) << 18) | \ |
|
|
|
((ai) << 26)) |
|
|
|
#define KVM_S390_INT_IO_MIN 0x00000000u |
|
|
|
#define KVM_S390_INT_IO_MAX 0xfffdffffu |
|
|
|
#define KVM_S390_INT_IO_AI_MASK 0x04000000u |
|
|
|
|
|
|
|
|
|
|
|
struct kvm_s390_interrupt { |
|
|
|
__u32 type; |
|
|
|
__u32 parm; |
|
|
|
__u64 parm64; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_io_info { |
|
|
|
__u16 subchannel_id; |
|
|
|
__u16 subchannel_nr; |
|
|
|
__u32 io_int_parm; |
|
|
|
__u32 io_int_word; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_ext_info { |
|
|
|
__u32 ext_params; |
|
|
|
__u32 pad; |
|
|
|
__u64 ext_params2; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pgm_info { |
|
|
|
__u64 trans_exc_code; |
|
|
|
__u64 mon_code; |
|
|
|
__u64 per_address; |
|
|
|
__u32 data_exc_code; |
|
|
|
__u16 code; |
|
|
|
__u16 mon_class_nr; |
|
|
|
__u8 per_code; |
|
|
|
__u8 per_atmid; |
|
|
|
__u8 exc_access_id; |
|
|
|
__u8 per_access_id; |
|
|
|
__u8 op_access_id; |
|
|
|
#define KVM_S390_PGM_FLAGS_ILC_VALID 0x01 |
|
|
|
#define KVM_S390_PGM_FLAGS_ILC_0 0x02 |
|
|
|
#define KVM_S390_PGM_FLAGS_ILC_1 0x04 |
|
|
|
#define KVM_S390_PGM_FLAGS_ILC_MASK 0x06 |
|
|
|
#define KVM_S390_PGM_FLAGS_NO_REWIND 0x08 |
|
|
|
__u8 flags; |
|
|
|
__u8 pad[2]; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_prefix_info { |
|
|
|
__u32 address; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_extcall_info { |
|
|
|
__u16 code; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_emerg_info { |
|
|
|
__u16 code; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_S390_STOP_FLAG_STORE_STATUS 0x01 |
|
|
|
struct kvm_s390_stop_info { |
|
|
|
__u32 flags; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_mchk_info { |
|
|
|
__u64 cr14; |
|
|
|
__u64 mcic; |
|
|
|
__u64 failing_storage_address; |
|
|
|
__u32 ext_damage_code; |
|
|
|
__u32 pad; |
|
|
|
__u8 fixed_logout[16]; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_irq { |
|
|
|
__u64 type; |
|
|
|
union { |
|
|
|
struct kvm_s390_io_info io; |
|
|
|
struct kvm_s390_ext_info ext; |
|
|
|
struct kvm_s390_pgm_info pgm; |
|
|
|
struct kvm_s390_emerg_info emerg; |
|
|
|
struct kvm_s390_extcall_info extcall; |
|
|
|
struct kvm_s390_prefix_info prefix; |
|
|
|
struct kvm_s390_stop_info stop; |
|
|
|
struct kvm_s390_mchk_info mchk; |
|
|
|
char reserved[64]; |
|
|
|
} u; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_irq_state { |
|
|
|
__u64 buf; |
|
|
|
__u32 flags; /* will stay unused for compatibility reasons */ |
|
|
|
__u32 len; |
|
|
|
__u32 reserved[4]; /* will stay unused for compatibility reasons */ |
|
|
|
}; |
|
|
|
|
|
|
|
/* for KVM_SET_GUEST_DEBUG */ |
|
|
|
|
|
|
|
#define KVM_GUESTDBG_ENABLE 0x00000001 |
|
|
|
@ -806,50 +614,6 @@ struct kvm_enable_cap { |
|
|
|
__u8 pad[64]; |
|
|
|
}; |
|
|
|
|
|
|
|
/* for KVM_PPC_GET_PVINFO */ |
|
|
|
|
|
|
|
#define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0) |
|
|
|
|
|
|
|
struct kvm_ppc_pvinfo { |
|
|
|
/* out */ |
|
|
|
__u32 flags; |
|
|
|
__u32 hcall[4]; |
|
|
|
__u8 pad[108]; |
|
|
|
}; |
|
|
|
|
|
|
|
/* for KVM_PPC_GET_SMMU_INFO */ |
|
|
|
#define KVM_PPC_PAGE_SIZES_MAX_SZ 8 |
|
|
|
|
|
|
|
struct kvm_ppc_one_page_size { |
|
|
|
__u32 page_shift; /* Page shift (or 0) */ |
|
|
|
__u32 pte_enc; /* Encoding in the HPTE (>>12) */ |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_ppc_one_seg_page_size { |
|
|
|
__u32 page_shift; /* Base page shift of segment (or 0) */ |
|
|
|
__u32 slb_enc; /* SLB encoding for BookS */ |
|
|
|
struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ]; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_PPC_PAGE_SIZES_REAL 0x00000001 |
|
|
|
#define KVM_PPC_1T_SEGMENTS 0x00000002 |
|
|
|
#define KVM_PPC_NO_HASH 0x00000004 |
|
|
|
|
|
|
|
struct kvm_ppc_smmu_info { |
|
|
|
__u64 flags; |
|
|
|
__u32 slb_size; |
|
|
|
__u16 data_keys; /* # storage keys supported for data */ |
|
|
|
__u16 instr_keys; /* # storage keys supported for instructions */ |
|
|
|
struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ]; |
|
|
|
}; |
|
|
|
|
|
|
|
/* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */ |
|
|
|
struct kvm_ppc_resize_hpt { |
|
|
|
__u64 flags; |
|
|
|
__u32 shift; |
|
|
|
__u32 pad; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVMIO 0xAE |
|
|
|
|
|
|
|
/* machine type bits, to be used as argument to KVM_CREATE_VM */ |
|
|
|
@ -919,9 +683,7 @@ struct kvm_ppc_resize_hpt { |
|
|
|
/* Bug in KVM_SET_USER_MEMORY_REGION fixed: */ |
|
|
|
#define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21 |
|
|
|
#define KVM_CAP_USER_NMI 22 |
|
|
|
#ifdef __KVM_HAVE_GUEST_DEBUG |
|
|
|
#define KVM_CAP_SET_GUEST_DEBUG 23 |
|
|
|
#endif |
|
|
|
#ifdef __KVM_HAVE_PIT |
|
|
|
#define KVM_CAP_REINJECT_CONTROL 24 |
|
|
|
#endif |
|
|
|
@ -1152,8 +914,6 @@ struct kvm_ppc_resize_hpt { |
|
|
|
#define KVM_CAP_GUEST_MEMFD 234 |
|
|
|
#define KVM_CAP_VM_TYPES 235 |
|
|
|
|
|
|
|
#ifdef KVM_CAP_IRQ_ROUTING |
|
|
|
|
|
|
|
struct kvm_irq_routing_irqchip { |
|
|
|
__u32 irqchip; |
|
|
|
__u32 pin; |
|
|
|
@ -1218,42 +978,6 @@ struct kvm_irq_routing { |
|
|
|
struct kvm_irq_routing_entry entries[]; |
|
|
|
}; |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef KVM_CAP_MCE |
|
|
|
/* x86 MCE */ |
|
|
|
struct kvm_x86_mce { |
|
|
|
__u64 status; |
|
|
|
__u64 addr; |
|
|
|
__u64 misc; |
|
|
|
__u64 mcg_status; |
|
|
|
__u8 bank; |
|
|
|
__u8 pad1[7]; |
|
|
|
__u64 pad2[3]; |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef KVM_CAP_XEN_HVM |
|
|
|
#define KVM_XEN_HVM_CONFIG_HYPERCALL_MSR (1 << 0) |
|
|
|
#define KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL (1 << 1) |
|
|
|
#define KVM_XEN_HVM_CONFIG_SHARED_INFO (1 << 2) |
|
|
|
#define KVM_XEN_HVM_CONFIG_RUNSTATE (1 << 3) |
|
|
|
#define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL (1 << 4) |
|
|
|
#define KVM_XEN_HVM_CONFIG_EVTCHN_SEND (1 << 5) |
|
|
|
#define KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG (1 << 6) |
|
|
|
#define KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE (1 << 7) |
|
|
|
|
|
|
|
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) |
|
|
|
/*
|
|
|
|
* Available with KVM_CAP_IRQFD_RESAMPLE |
|
|
|
@ -1438,11 +1162,6 @@ struct kvm_vfio_spapr_tce { |
|
|
|
struct kvm_userspace_memory_region2) |
|
|
|
|
|
|
|
/* enable ucontrol for s390 */ |
|
|
|
struct kvm_s390_ucas_mapping { |
|
|
|
__u64 user_addr; |
|
|
|
__u64 vcpu_addr; |
|
|
|
__u64 length; |
|
|
|
}; |
|
|
|
#define KVM_S390_UCAS_MAP _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping) |
|
|
|
#define KVM_S390_UCAS_UNMAP _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping) |
|
|
|
#define KVM_S390_VCPU_FAULT _IOW(KVMIO, 0x52, unsigned long) |
|
|
|
@ -1637,89 +1356,6 @@ struct kvm_enc_region { |
|
|
|
#define KVM_S390_NORMAL_RESET _IO(KVMIO, 0xc3) |
|
|
|
#define KVM_S390_CLEAR_RESET _IO(KVMIO, 0xc4) |
|
|
|
|
|
|
|
struct kvm_s390_pv_sec_parm { |
|
|
|
__u64 origin; |
|
|
|
__u64 length; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_unp { |
|
|
|
__u64 addr; |
|
|
|
__u64 size; |
|
|
|
__u64 tweak; |
|
|
|
}; |
|
|
|
|
|
|
|
enum pv_cmd_dmp_id { |
|
|
|
KVM_PV_DUMP_INIT, |
|
|
|
KVM_PV_DUMP_CONFIG_STOR_STATE, |
|
|
|
KVM_PV_DUMP_COMPLETE, |
|
|
|
KVM_PV_DUMP_CPU, |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_dmp { |
|
|
|
__u64 subcmd; |
|
|
|
__u64 buff_addr; |
|
|
|
__u64 buff_len; |
|
|
|
__u64 gaddr; /* For dump storage state */ |
|
|
|
__u64 reserved[4]; |
|
|
|
}; |
|
|
|
|
|
|
|
enum pv_cmd_info_id { |
|
|
|
KVM_PV_INFO_VM, |
|
|
|
KVM_PV_INFO_DUMP, |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_info_dump { |
|
|
|
__u64 dump_cpu_buffer_len; |
|
|
|
__u64 dump_config_mem_buffer_per_1m; |
|
|
|
__u64 dump_config_finalize_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_info_vm { |
|
|
|
__u64 inst_calls_list[4]; |
|
|
|
__u64 max_cpus; |
|
|
|
__u64 max_guests; |
|
|
|
__u64 max_guest_addr; |
|
|
|
__u64 feature_indication; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_info_header { |
|
|
|
__u32 id; |
|
|
|
__u32 len_max; |
|
|
|
__u32 len_written; |
|
|
|
__u32 reserved; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_s390_pv_info { |
|
|
|
struct kvm_s390_pv_info_header header; |
|
|
|
union { |
|
|
|
struct kvm_s390_pv_info_dump dump; |
|
|
|
struct kvm_s390_pv_info_vm vm; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
enum pv_cmd_id { |
|
|
|
KVM_PV_ENABLE, |
|
|
|
KVM_PV_DISABLE, |
|
|
|
KVM_PV_SET_SEC_PARMS, |
|
|
|
KVM_PV_UNPACK, |
|
|
|
KVM_PV_VERIFY, |
|
|
|
KVM_PV_PREP_RESET, |
|
|
|
KVM_PV_UNSHARE_ALL, |
|
|
|
KVM_PV_INFO, |
|
|
|
KVM_PV_DUMP, |
|
|
|
KVM_PV_ASYNC_CLEANUP_PREPARE, |
|
|
|
KVM_PV_ASYNC_CLEANUP_PERFORM, |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_pv_cmd { |
|
|
|
__u32 cmd; /* Command to be executed */ |
|
|
|
__u16 rc; /* Ultravisor return code */ |
|
|
|
__u16 rrc; /* Ultravisor return reason code */ |
|
|
|
__u64 data; /* Data or address */ |
|
|
|
__u32 flags; /* flags for future extensions. Must be 0 for now */ |
|
|
|
__u32 reserved[3]; |
|
|
|
}; |
|
|
|
|
|
|
|
/* Available with KVM_CAP_S390_PROTECTED */ |
|
|
|
#define KVM_S390_PV_COMMAND _IOWR(KVMIO, 0xc5, struct kvm_pv_cmd) |
|
|
|
|
|
|
|
@ -1733,58 +1369,6 @@ struct kvm_pv_cmd { |
|
|
|
#define KVM_XEN_HVM_GET_ATTR _IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr) |
|
|
|
#define KVM_XEN_HVM_SET_ATTR _IOW(KVMIO, 0xc9, struct kvm_xen_hvm_attr) |
|
|
|
|
|
|
|
struct kvm_xen_hvm_attr { |
|
|
|
__u16 type; |
|
|
|
__u16 pad[3]; |
|
|
|
union { |
|
|
|
__u8 long_mode; |
|
|
|
__u8 vector; |
|
|
|
__u8 runstate_update_flag; |
|
|
|
struct { |
|
|
|
__u64 gfn; |
|
|
|
#define KVM_XEN_INVALID_GFN ((__u64)-1) |
|
|
|
} shared_info; |
|
|
|
struct { |
|
|
|
__u32 send_port; |
|
|
|
__u32 type; /* EVTCHNSTAT_ipi / EVTCHNSTAT_interdomain */ |
|
|
|
__u32 flags; |
|
|
|
#define KVM_XEN_EVTCHN_DEASSIGN (1 << 0) |
|
|
|
#define KVM_XEN_EVTCHN_UPDATE (1 << 1) |
|
|
|
#define KVM_XEN_EVTCHN_RESET (1 << 2) |
|
|
|
/*
|
|
|
|
* Events sent by the guest are either looped back to |
|
|
|
* the guest itself (potentially on a different port#) |
|
|
|
* or signalled via an eventfd. |
|
|
|
*/ |
|
|
|
union { |
|
|
|
struct { |
|
|
|
__u32 port; |
|
|
|
__u32 vcpu; |
|
|
|
__u32 priority; |
|
|
|
} port; |
|
|
|
struct { |
|
|
|
__u32 port; /* Zero for eventfd */ |
|
|
|
__s32 fd; |
|
|
|
} eventfd; |
|
|
|
__u32 padding[4]; |
|
|
|
} deliver; |
|
|
|
} evtchn; |
|
|
|
__u32 xen_version; |
|
|
|
__u64 pad[8]; |
|
|
|
} u; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */ |
|
|
|
#define KVM_XEN_ATTR_TYPE_LONG_MODE 0x0 |
|
|
|
#define KVM_XEN_ATTR_TYPE_SHARED_INFO 0x1 |
|
|
|
#define KVM_XEN_ATTR_TYPE_UPCALL_VECTOR 0x2 |
|
|
|
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */ |
|
|
|
#define KVM_XEN_ATTR_TYPE_EVTCHN 0x3 |
|
|
|
#define KVM_XEN_ATTR_TYPE_XEN_VERSION 0x4 |
|
|
|
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG */ |
|
|
|
#define KVM_XEN_ATTR_TYPE_RUNSTATE_UPDATE_FLAG 0x5 |
|
|
|
|
|
|
|
/* Per-vCPU Xen attributes */ |
|
|
|
#define KVM_XEN_VCPU_GET_ATTR _IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr) |
|
|
|
#define KVM_XEN_VCPU_SET_ATTR _IOW(KVMIO, 0xcb, struct kvm_xen_vcpu_attr) |
|
|
|
@ -1795,242 +1379,6 @@ struct kvm_xen_hvm_attr { |
|
|
|
#define KVM_GET_SREGS2 _IOR(KVMIO, 0xcc, struct kvm_sregs2) |
|
|
|
#define KVM_SET_SREGS2 _IOW(KVMIO, 0xcd, struct kvm_sregs2) |
|
|
|
|
|
|
|
struct kvm_xen_vcpu_attr { |
|
|
|
__u16 type; |
|
|
|
__u16 pad[3]; |
|
|
|
union { |
|
|
|
__u64 gpa; |
|
|
|
#define KVM_XEN_INVALID_GPA ((__u64)-1) |
|
|
|
__u64 pad[8]; |
|
|
|
struct { |
|
|
|
__u64 state; |
|
|
|
__u64 state_entry_time; |
|
|
|
__u64 time_running; |
|
|
|
__u64 time_runnable; |
|
|
|
__u64 time_blocked; |
|
|
|
__u64 time_offline; |
|
|
|
} runstate; |
|
|
|
__u32 vcpu_id; |
|
|
|
struct { |
|
|
|
__u32 port; |
|
|
|
__u32 priority; |
|
|
|
__u64 expires_ns; |
|
|
|
} timer; |
|
|
|
__u8 vector; |
|
|
|
} u; |
|
|
|
}; |
|
|
|
|
|
|
|
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */ |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO 0x0 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO 0x1 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR 0x2 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT 0x3 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA 0x4 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST 0x5 |
|
|
|
/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */ |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID 0x6 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_TIMER 0x7 |
|
|
|
#define KVM_XEN_VCPU_ATTR_TYPE_UPCALL_VECTOR 0x8 |
|
|
|
|
|
|
|
/* Secure Encrypted Virtualization command */ |
|
|
|
enum sev_cmd_id { |
|
|
|
/* Guest initialization commands */ |
|
|
|
KVM_SEV_INIT = 0, |
|
|
|
KVM_SEV_ES_INIT, |
|
|
|
/* Guest launch commands */ |
|
|
|
KVM_SEV_LAUNCH_START, |
|
|
|
KVM_SEV_LAUNCH_UPDATE_DATA, |
|
|
|
KVM_SEV_LAUNCH_UPDATE_VMSA, |
|
|
|
KVM_SEV_LAUNCH_SECRET, |
|
|
|
KVM_SEV_LAUNCH_MEASURE, |
|
|
|
KVM_SEV_LAUNCH_FINISH, |
|
|
|
/* Guest migration commands (outgoing) */ |
|
|
|
KVM_SEV_SEND_START, |
|
|
|
KVM_SEV_SEND_UPDATE_DATA, |
|
|
|
KVM_SEV_SEND_UPDATE_VMSA, |
|
|
|
KVM_SEV_SEND_FINISH, |
|
|
|
/* Guest migration commands (incoming) */ |
|
|
|
KVM_SEV_RECEIVE_START, |
|
|
|
KVM_SEV_RECEIVE_UPDATE_DATA, |
|
|
|
KVM_SEV_RECEIVE_UPDATE_VMSA, |
|
|
|
KVM_SEV_RECEIVE_FINISH, |
|
|
|
/* Guest status and debug commands */ |
|
|
|
KVM_SEV_GUEST_STATUS, |
|
|
|
KVM_SEV_DBG_DECRYPT, |
|
|
|
KVM_SEV_DBG_ENCRYPT, |
|
|
|
/* Guest certificates commands */ |
|
|
|
KVM_SEV_CERT_EXPORT, |
|
|
|
/* Attestation report */ |
|
|
|
KVM_SEV_GET_ATTESTATION_REPORT, |
|
|
|
/* Guest Migration Extension */ |
|
|
|
KVM_SEV_SEND_CANCEL, |
|
|
|
|
|
|
|
KVM_SEV_NR_MAX, |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_cmd { |
|
|
|
__u32 id; |
|
|
|
__u64 data; |
|
|
|
__u32 error; |
|
|
|
__u32 sev_fd; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_launch_start { |
|
|
|
__u32 handle; |
|
|
|
__u32 policy; |
|
|
|
__u64 dh_uaddr; |
|
|
|
__u32 dh_len; |
|
|
|
__u64 session_uaddr; |
|
|
|
__u32 session_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_launch_update_data { |
|
|
|
__u64 uaddr; |
|
|
|
__u32 len; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
struct kvm_sev_launch_secret { |
|
|
|
__u64 hdr_uaddr; |
|
|
|
__u32 hdr_len; |
|
|
|
__u64 guest_uaddr; |
|
|
|
__u32 guest_len; |
|
|
|
__u64 trans_uaddr; |
|
|
|
__u32 trans_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_launch_measure { |
|
|
|
__u64 uaddr; |
|
|
|
__u32 len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_guest_status { |
|
|
|
__u32 handle; |
|
|
|
__u32 policy; |
|
|
|
__u32 state; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_dbg { |
|
|
|
__u64 src_uaddr; |
|
|
|
__u64 dst_uaddr; |
|
|
|
__u32 len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_attestation_report { |
|
|
|
__u8 mnonce[16]; |
|
|
|
__u64 uaddr; |
|
|
|
__u32 len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_send_start { |
|
|
|
__u32 policy; |
|
|
|
__u64 pdh_cert_uaddr; |
|
|
|
__u32 pdh_cert_len; |
|
|
|
__u64 plat_certs_uaddr; |
|
|
|
__u32 plat_certs_len; |
|
|
|
__u64 amd_certs_uaddr; |
|
|
|
__u32 amd_certs_len; |
|
|
|
__u64 session_uaddr; |
|
|
|
__u32 session_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_send_update_data { |
|
|
|
__u64 hdr_uaddr; |
|
|
|
__u32 hdr_len; |
|
|
|
__u64 guest_uaddr; |
|
|
|
__u32 guest_len; |
|
|
|
__u64 trans_uaddr; |
|
|
|
__u32 trans_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_receive_start { |
|
|
|
__u32 handle; |
|
|
|
__u32 policy; |
|
|
|
__u64 pdh_uaddr; |
|
|
|
__u32 pdh_len; |
|
|
|
__u64 session_uaddr; |
|
|
|
__u32 session_len; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_sev_receive_update_data { |
|
|
|
__u64 hdr_uaddr; |
|
|
|
__u32 hdr_len; |
|
|
|
__u64 guest_uaddr; |
|
|
|
__u32 guest_len; |
|
|
|
__u64 trans_uaddr; |
|
|
|
__u32 trans_len; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
|
|
|
#define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) |
|
|
|
#define KVM_DEV_ASSIGN_MASK_INTX (1 << 2) |
|
|
|
|
|
|
|
struct kvm_assigned_pci_dev { |
|
|
|
__u32 assigned_dev_id; |
|
|
|
__u32 busnr; |
|
|
|
__u32 devfn; |
|
|
|
__u32 flags; |
|
|
|
__u32 segnr; |
|
|
|
union { |
|
|
|
__u32 reserved[11]; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_DEV_IRQ_HOST_INTX (1 << 0) |
|
|
|
#define KVM_DEV_IRQ_HOST_MSI (1 << 1) |
|
|
|
#define KVM_DEV_IRQ_HOST_MSIX (1 << 2) |
|
|
|
|
|
|
|
#define KVM_DEV_IRQ_GUEST_INTX (1 << 8) |
|
|
|
#define KVM_DEV_IRQ_GUEST_MSI (1 << 9) |
|
|
|
#define KVM_DEV_IRQ_GUEST_MSIX (1 << 10) |
|
|
|
|
|
|
|
#define KVM_DEV_IRQ_HOST_MASK 0x00ff |
|
|
|
#define KVM_DEV_IRQ_GUEST_MASK 0xff00 |
|
|
|
|
|
|
|
struct kvm_assigned_irq { |
|
|
|
__u32 assigned_dev_id; |
|
|
|
__u32 host_irq; /* ignored (legacy field) */ |
|
|
|
__u32 guest_irq; |
|
|
|
__u32 flags; |
|
|
|
union { |
|
|
|
__u32 reserved[12]; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
struct kvm_assigned_msix_nr { |
|
|
|
__u32 assigned_dev_id; |
|
|
|
__u16 entry_nr; |
|
|
|
__u16 padding; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_MAX_MSIX_PER_DEV 256 |
|
|
|
struct kvm_assigned_msix_entry { |
|
|
|
__u32 assigned_dev_id; |
|
|
|
__u32 gsi; |
|
|
|
__u16 entry; /* The index of entry in the MSI-X table */ |
|
|
|
__u16 padding[3]; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) |
|
|
|
#define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1) |
|
|
|
|
|
|
|
/* Available with KVM_CAP_ARM_USER_IRQ */ |
|
|
|
|
|
|
|
/* Bits for run->s.regs.device_irq_level */ |
|
|
|
#define KVM_ARM_DEV_EL1_VTIMER (1 << 0) |
|
|
|
#define KVM_ARM_DEV_EL1_PTIMER (1 << 1) |
|
|
|
#define KVM_ARM_DEV_PMU (1 << 2) |
|
|
|
|
|
|
|
struct kvm_hyperv_eventfd { |
|
|
|
__u32 conn_id; |
|
|
|
__s32 fd; |
|
|
|
__u32 flags; |
|
|
|
__u32 padding[3]; |
|
|
|
}; |
|
|
|
|
|
|
|
#define KVM_HYPERV_CONN_ID_MASK 0x00ffffff |
|
|
|
#define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0) |
|
|
|
|
|
|
|
#define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE (1 << 0) |
|
|
|
#define KVM_DIRTY_LOG_INITIALLY_SET (1 << 1) |
|
|
|
|
|
|
|
@ -2176,33 +1524,6 @@ struct kvm_stats_desc { |
|
|
|
/* Available with KVM_CAP_S390_ZPCI_OP */ |
|
|
|
#define KVM_S390_ZPCI_OP _IOW(KVMIO, 0xd1, struct kvm_s390_zpci_op) |
|
|
|
|
|
|
|
struct kvm_s390_zpci_op { |
|
|
|
/* in */ |
|
|
|
__u32 fh; /* target device */ |
|
|
|
__u8 op; /* operation to perform */ |
|
|
|
__u8 pad[3]; |
|
|
|
union { |
|
|
|
/* for KVM_S390_ZPCIOP_REG_AEN */ |
|
|
|
struct { |
|
|
|
__u64 ibv; /* Guest addr of interrupt bit vector */ |
|
|
|
__u64 sb; /* Guest addr of summary bit */ |
|
|
|
__u32 flags; |
|
|
|
__u32 noi; /* Number of interrupts */ |
|
|
|
__u8 isc; /* Guest interrupt subclass */ |
|
|
|
__u8 sbo; /* Offset of guest summary bit vector */ |
|
|
|
__u16 pad; |
|
|
|
} reg_aen; |
|
|
|
__u64 reserved[8]; |
|
|
|
} u; |
|
|
|
}; |
|
|
|
|
|
|
|
/* types for kvm_s390_zpci_op->op */ |
|
|
|
#define KVM_S390_ZPCIOP_REG_AEN 0 |
|
|
|
#define KVM_S390_ZPCIOP_DEREG_AEN 1 |
|
|
|
|
|
|
|
/* flags for kvm_s390_zpci_op->u.reg_aen.flags */ |
|
|
|
#define KVM_S390_ZPCIOP_REGAEN_HOST (1 << 0) |
|
|
|
|
|
|
|
/* Available with KVM_CAP_MEMORY_ATTRIBUTES */ |
|
|
|
#define KVM_SET_MEMORY_ATTRIBUTES _IOW(KVMIO, 0xd2, struct kvm_memory_attributes) |
|
|
|
|
|
|
|
|