ORT, /* Guest Migration Extension */ KVM_SEV_SEND_CANCEL, /* Second time is the charm; improved versions of the above ioctls. */ KVM_SEV_INIT2, /* SNP-specific commands */ KVM_SEV_SNP_LAUNCH_START = 100, KVM_SEV_SNP_LAUNCH_UPDATE, KVM_SEV_SNP_LAUNCH_FINISH, KVM_SEV_NR_MAX, }; struct kvm_sev_cmd { __u32 id; __u32 pad0; __u64 data; __u32 error; __u32 sev_fd; }; struct kvm_sev_init { __u64 vmsa_features; __u32 flags; __u16 ghcb_version; __u16 pad1; __u32 pad2[8]; }; struct kvm_sev_launch_start { __u32 handle; __u32 policy; __u64 dh_uaddr; __u32 dh_len; __u32 pad0; __u64 session_uaddr; __u32 session_len; __u32 pad1; }; struct kvm_sev_launch_update_data { __u64 uaddr; __u32 len; __u32 pad0; }; struct kvm_sev_launch_secret { __u64 hdr_uaddr; __u32 hdr_len; __u32 pad0; __u64 guest_uaddr; __u32 guest_len; __u32 pad1; __u64 trans_uaddr; __u32 trans_len; __u32 pad2; }; struct kvm_sev_launch_measure { __u64 uaddr; __u32 len; __u32 pad0; }; struct kvm_sev_guest_status { __u32 handle; __u32 policy; __u32 state; }; struct kvm_sev_dbg { __u64 src_uaddr; __u64 dst_uaddr; __u32 len; __u32 pad0; }; struct kvm_sev_attestation_report { __u8 mnonce[16]; __u64 uaddr; __u32 len; __u32 pad0; }; struct kvm_sev_send_start { __u32 policy; __u32 pad0; __u64 pdh_cert_uaddr; __u32 pdh_cert_len; __u32 pad1; __u64 plat_certs_uaddr; __u32 plat_certs_len; __u32 pad2; __u64 amd_certs_uaddr; __u32 amd_certs_len; __u32 pad3; __u64 session_uaddr; __u32 session_len; __u32 pad4; }; struct kvm_sev_send_update_data { __u64 hdr_uaddr; __u32 hdr_len; __u32 pad0; __u64 guest_uaddr; __u32 guest_len; __u32 pad1; __u64 trans_uaddr; __u32 trans_len; __u32 pad2; }; struct kvm_sev_receive_start { __u32 handle; __u32 policy; __u64 pdh_uaddr; __u32 pdh_len; __u32 pad0; __u64 session_uaddr; __u32 session_len; __u32 pad1; }; struct kvm_sev_receive_update_data { __u64 hdr_uaddr; __u32 hdr_len; __u32 pad0; __u64 guest_uaddr; __u32 guest_len; __u32 pad1; __u64 trans_uaddr; __u32 trans_len; __u32 pad2; }; struct kvm_sev_snp_launch_start { __u64 policy; __u8 gosvw[16]; __u16 flags; __u8 pad0[6]; __u64 pad1[4]; }; /* Kept in sync with firmware values for simplicity. */ #define KVM_SEV_SNP_PAGE_TYPE_NORMAL 0x1 #define KVM_SEV_SNP_PAGE_TYPE_ZERO 0x3 #define KVM_SEV_SNP_PAGE_TYPE_UNMEASURED 0x4 #define KVM_SEV_SNP_PAGE_TYPE_SECRETS 0x5 #define KVM_SEV_SNP_PAGE_TYPE_CPUID 0x6 struct kvm_sev_snp_launch_update { __u64 gfn_start; __u64 uaddr; __u64 len; __u8 type; __u8 pad0; __u16 flags; __u32 pad1; __u64 pad2[4]; }; #define KVM_SEV_SNP_ID_BLOCK_SIZE 96 #define KVM_SEV_SNP_ID_AUTH_SIZE 4096 #define KVM_SEV_SNP_FINISH_DATA_SIZE 32 struct kvm_sev_snp_launch_finish { __u64 id_block_uaddr; __u64 id_auth_uaddr; __u8 id_block_en; __u8 auth_key_en; __u8 vcek_disabled; __u8 host_data[KVM_SEV_SNP_FINISH_DATA_SIZE]; __u8 pad0[3]; __u16 flags; __u64 pad1[4]; }; #define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) #define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1) 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) /* * Masked event layout. * Bits Description * ---- ----------- * 7:0 event select (low bits) * 15:8 umask match * 31:16 unused * 35:32 event select (high bits) * 36:54 unused * 55 exclude bit * 63:56 umask mask */ #define KVM_PMU_ENCODE_MASKED_ENTRY(event_select, mask, match, exclude) \ (((event_select) & 0xFFULL) | (((event_select) & 0XF00ULL) << 24) | \ (((mask) & 0xFFULL) << 56) | \ (((match) & 0xFFULL) << 8) | \ ((__u64)(!!(exclude)) << 55)) #define KVM_PMU_MASKED_ENTRY_EVENT_SELECT \ (__GENMASK_ULL(7, 0) | __GENMASK_ULL(35, 32)) #define KVM_PMU_MASKED_ENTRY_UMASK_MASK (__GENMASK_ULL(63, 56)) #define KVM_PMU_MASKED_ENTRY_UMASK_MATCH (__GENMASK_ULL(15, 8)) #define KVM_PMU_MASKED_ENTRY_EXCLUDE (_BITULL(55)) #define KVM_PMU_MASKED_ENTRY_UMASK_MASK_SHIFT (56) /* for KVM_{GET,SET,HAS}_DEVICE_ATTR */ #define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp counter (TSC) */ #define KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */ /* x86-specific KVM_EXIT_HYPERCALL flags. */ #define KVM_EXIT_HYPERCALL_LONG_MODE _BITULL(0) #define KVM_X86_DEFAULT_VM 0 #define KVM_X86_SW_PROTECTED_VM 1 #define KVM_X86_SEV_VM 2 #define KVM_X86_SEV_ES_VM 3 #define KVM_X86_SNP_VM 4 #endif /* _ASM_X86_KVM_H */