brintos

brintos / linux-shallow public Read only

0
0
Text · 20.5 KiB · a8debbf Raw
929 lines · c
1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */2#ifndef _ASM_X86_KVM_H3#define _ASM_X86_KVM_H4 5/*6 * KVM x86 specific structures and definitions7 *8 */9 10#include <linux/const.h>11#include <linux/bits.h>12#include <linux/types.h>13#include <linux/ioctl.h>14#include <linux/stddef.h>15 16#define KVM_PIO_PAGE_OFFSET 117#define KVM_COALESCED_MMIO_PAGE_OFFSET 218#define KVM_DIRTY_LOG_PAGE_OFFSET 6419 20#define DE_VECTOR 021#define DB_VECTOR 122#define BP_VECTOR 323#define OF_VECTOR 424#define BR_VECTOR 525#define UD_VECTOR 626#define NM_VECTOR 727#define DF_VECTOR 828#define TS_VECTOR 1029#define NP_VECTOR 1130#define SS_VECTOR 1231#define GP_VECTOR 1332#define PF_VECTOR 1433#define MF_VECTOR 1634#define AC_VECTOR 1735#define MC_VECTOR 1836#define XM_VECTOR 1937#define VE_VECTOR 2038 39/* Select x86 specific features in <linux/kvm.h> */40#define __KVM_HAVE_PIT41#define __KVM_HAVE_IOAPIC42#define __KVM_HAVE_IRQ_LINE43#define __KVM_HAVE_MSI44#define __KVM_HAVE_USER_NMI45#define __KVM_HAVE_MSIX46#define __KVM_HAVE_MCE47#define __KVM_HAVE_PIT_STATE248#define __KVM_HAVE_XEN_HVM49#define __KVM_HAVE_VCPU_EVENTS50#define __KVM_HAVE_DEBUGREGS51#define __KVM_HAVE_XSAVE52#define __KVM_HAVE_XCRS53 54/* Architectural interrupt line count. */55#define KVM_NR_INTERRUPTS 25656 57/* for KVM_GET_IRQCHIP and KVM_SET_IRQCHIP */58struct kvm_pic_state {59	__u8 last_irr;	/* edge detection */60	__u8 irr;		/* interrupt request register */61	__u8 imr;		/* interrupt mask register */62	__u8 isr;		/* interrupt service register */63	__u8 priority_add;	/* highest irq priority */64	__u8 irq_base;65	__u8 read_reg_select;66	__u8 poll;67	__u8 special_mask;68	__u8 init_state;69	__u8 auto_eoi;70	__u8 rotate_on_auto_eoi;71	__u8 special_fully_nested_mode;72	__u8 init4;		/* true if 4 byte init */73	__u8 elcr;		/* PIIX edge/trigger selection */74	__u8 elcr_mask;75};76 77#define KVM_IOAPIC_NUM_PINS  2478struct kvm_ioapic_state {79	__u64 base_address;80	__u32 ioregsel;81	__u32 id;82	__u32 irr;83	__u32 pad;84	union {85		__u64 bits;86		struct {87			__u8 vector;88			__u8 delivery_mode:3;89			__u8 dest_mode:1;90			__u8 delivery_status:1;91			__u8 polarity:1;92			__u8 remote_irr:1;93			__u8 trig_mode:1;94			__u8 mask:1;95			__u8 reserve:7;96			__u8 reserved[4];97			__u8 dest_id;98		} fields;99	} redirtbl[KVM_IOAPIC_NUM_PINS];100};101 102#define KVM_IRQCHIP_PIC_MASTER   0103#define KVM_IRQCHIP_PIC_SLAVE    1104#define KVM_IRQCHIP_IOAPIC       2105#define KVM_NR_IRQCHIPS          3106 107#define KVM_RUN_X86_SMM		 (1 << 0)108#define KVM_RUN_X86_BUS_LOCK     (1 << 1)109#define KVM_RUN_X86_GUEST_MODE   (1 << 2)110 111/* for KVM_GET_REGS and KVM_SET_REGS */112struct kvm_regs {113	/* out (KVM_GET_REGS) / in (KVM_SET_REGS) */114	__u64 rax, rbx, rcx, rdx;115	__u64 rsi, rdi, rsp, rbp;116	__u64 r8,  r9,  r10, r11;117	__u64 r12, r13, r14, r15;118	__u64 rip, rflags;119};120 121/* for KVM_GET_LAPIC and KVM_SET_LAPIC */122#define KVM_APIC_REG_SIZE 0x400123struct kvm_lapic_state {124	char regs[KVM_APIC_REG_SIZE];125};126 127struct kvm_segment {128	__u64 base;129	__u32 limit;130	__u16 selector;131	__u8  type;132	__u8  present, dpl, db, s, l, g, avl;133	__u8  unusable;134	__u8  padding;135};136 137struct kvm_dtable {138	__u64 base;139	__u16 limit;140	__u16 padding[3];141};142 143 144/* for KVM_GET_SREGS and KVM_SET_SREGS */145struct kvm_sregs {146	/* out (KVM_GET_SREGS) / in (KVM_SET_SREGS) */147	struct kvm_segment cs, ds, es, fs, gs, ss;148	struct kvm_segment tr, ldt;149	struct kvm_dtable gdt, idt;150	__u64 cr0, cr2, cr3, cr4, cr8;151	__u64 efer;152	__u64 apic_base;153	__u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64];154};155 156struct kvm_sregs2 {157	/* out (KVM_GET_SREGS2) / in (KVM_SET_SREGS2) */158	struct kvm_segment cs, ds, es, fs, gs, ss;159	struct kvm_segment tr, ldt;160	struct kvm_dtable gdt, idt;161	__u64 cr0, cr2, cr3, cr4, cr8;162	__u64 efer;163	__u64 apic_base;164	__u64 flags;165	__u64 pdptrs[4];166};167#define KVM_SREGS2_FLAGS_PDPTRS_VALID 1168 169/* for KVM_GET_FPU and KVM_SET_FPU */170struct kvm_fpu {171	__u8  fpr[8][16];172	__u16 fcw;173	__u16 fsw;174	__u8  ftwx;  /* in fxsave format */175	__u8  pad1;176	__u16 last_opcode;177	__u64 last_ip;178	__u64 last_dp;179	__u8  xmm[16][16];180	__u32 mxcsr;181	__u32 pad2;182};183 184struct kvm_msr_entry {185	__u32 index;186	__u32 reserved;187	__u64 data;188};189 190/* for KVM_GET_MSRS and KVM_SET_MSRS */191struct kvm_msrs {192	__u32 nmsrs; /* number of msrs in entries */193	__u32 pad;194 195	struct kvm_msr_entry entries[];196};197 198/* for KVM_GET_MSR_INDEX_LIST */199struct kvm_msr_list {200	__u32 nmsrs; /* number of msrs in entries */201	__u32 indices[];202};203 204/* Maximum size of any access bitmap in bytes */205#define KVM_MSR_FILTER_MAX_BITMAP_SIZE 0x600206 207/* for KVM_X86_SET_MSR_FILTER */208struct kvm_msr_filter_range {209#define KVM_MSR_FILTER_READ  (1 << 0)210#define KVM_MSR_FILTER_WRITE (1 << 1)211#define KVM_MSR_FILTER_RANGE_VALID_MASK (KVM_MSR_FILTER_READ | \212					 KVM_MSR_FILTER_WRITE)213	__u32 flags;214	__u32 nmsrs; /* number of msrs in bitmap */215	__u32 base;  /* MSR index the bitmap starts at */216	__u8 *bitmap; /* a 1 bit allows the operations in flags, 0 denies */217};218 219#define KVM_MSR_FILTER_MAX_RANGES 16220struct kvm_msr_filter {221#ifndef __KERNEL__222#define KVM_MSR_FILTER_DEFAULT_ALLOW (0 << 0)223#endif224#define KVM_MSR_FILTER_DEFAULT_DENY  (1 << 0)225#define KVM_MSR_FILTER_VALID_MASK (KVM_MSR_FILTER_DEFAULT_DENY)226	__u32 flags;227	struct kvm_msr_filter_range ranges[KVM_MSR_FILTER_MAX_RANGES];228};229 230struct kvm_cpuid_entry {231	__u32 function;232	__u32 eax;233	__u32 ebx;234	__u32 ecx;235	__u32 edx;236	__u32 padding;237};238 239/* for KVM_SET_CPUID */240struct kvm_cpuid {241	__u32 nent;242	__u32 padding;243	struct kvm_cpuid_entry entries[];244};245 246struct kvm_cpuid_entry2 {247	__u32 function;248	__u32 index;249	__u32 flags;250	__u32 eax;251	__u32 ebx;252	__u32 ecx;253	__u32 edx;254	__u32 padding[3];255};256 257#define KVM_CPUID_FLAG_SIGNIFCANT_INDEX		(1 << 0)258#define KVM_CPUID_FLAG_STATEFUL_FUNC		(1 << 1)259#define KVM_CPUID_FLAG_STATE_READ_NEXT		(1 << 2)260 261/* for KVM_SET_CPUID2 */262struct kvm_cpuid2 {263	__u32 nent;264	__u32 padding;265	struct kvm_cpuid_entry2 entries[];266};267 268/* for KVM_GET_PIT and KVM_SET_PIT */269struct kvm_pit_channel_state {270	__u32 count; /* can be 65536 */271	__u16 latched_count;272	__u8 count_latched;273	__u8 status_latched;274	__u8 status;275	__u8 read_state;276	__u8 write_state;277	__u8 write_latch;278	__u8 rw_mode;279	__u8 mode;280	__u8 bcd;281	__u8 gate;282	__s64 count_load_time;283};284 285struct kvm_debug_exit_arch {286	__u32 exception;287	__u32 pad;288	__u64 pc;289	__u64 dr6;290	__u64 dr7;291};292 293#define KVM_GUESTDBG_USE_SW_BP		0x00010000294#define KVM_GUESTDBG_USE_HW_BP		0x00020000295#define KVM_GUESTDBG_INJECT_DB		0x00040000296#define KVM_GUESTDBG_INJECT_BP		0x00080000297#define KVM_GUESTDBG_BLOCKIRQ		0x00100000298 299/* for KVM_SET_GUEST_DEBUG */300struct kvm_guest_debug_arch {301	__u64 debugreg[8];302};303 304struct kvm_pit_state {305	struct kvm_pit_channel_state channels[3];306};307 308#define KVM_PIT_FLAGS_HPET_LEGACY     0x00000001309#define KVM_PIT_FLAGS_SPEAKER_DATA_ON 0x00000002310 311struct kvm_pit_state2 {312	struct kvm_pit_channel_state channels[3];313	__u32 flags;314	__u32 reserved[9];315};316 317struct kvm_reinject_control {318	__u8 pit_reinject;319	__u8 reserved[31];320};321 322/* When set in flags, include corresponding fields on KVM_SET_VCPU_EVENTS */323#define KVM_VCPUEVENT_VALID_NMI_PENDING	0x00000001324#define KVM_VCPUEVENT_VALID_SIPI_VECTOR	0x00000002325#define KVM_VCPUEVENT_VALID_SHADOW	0x00000004326#define KVM_VCPUEVENT_VALID_SMM		0x00000008327#define KVM_VCPUEVENT_VALID_PAYLOAD	0x00000010328#define KVM_VCPUEVENT_VALID_TRIPLE_FAULT	0x00000020329 330/* Interrupt shadow states */331#define KVM_X86_SHADOW_INT_MOV_SS	0x01332#define KVM_X86_SHADOW_INT_STI		0x02333 334/* for KVM_GET/SET_VCPU_EVENTS */335struct kvm_vcpu_events {336	struct {337		__u8 injected;338		__u8 nr;339		__u8 has_error_code;340		__u8 pending;341		__u32 error_code;342	} exception;343	struct {344		__u8 injected;345		__u8 nr;346		__u8 soft;347		__u8 shadow;348	} interrupt;349	struct {350		__u8 injected;351		__u8 pending;352		__u8 masked;353		__u8 pad;354	} nmi;355	__u32 sipi_vector;356	__u32 flags;357	struct {358		__u8 smm;359		__u8 pending;360		__u8 smm_inside_nmi;361		__u8 latched_init;362	} smi;363	struct {364		__u8 pending;365	} triple_fault;366	__u8 reserved[26];367	__u8 exception_has_payload;368	__u64 exception_payload;369};370 371/* for KVM_GET/SET_DEBUGREGS */372struct kvm_debugregs {373	__u64 db[4];374	__u64 dr6;375	__u64 dr7;376	__u64 flags;377	__u64 reserved[9];378};379 380/* for KVM_CAP_XSAVE and KVM_CAP_XSAVE2 */381struct kvm_xsave {382	/*383	 * KVM_GET_XSAVE2 and KVM_SET_XSAVE write and read as many bytes384	 * as are returned by KVM_CHECK_EXTENSION(KVM_CAP_XSAVE2)385	 * respectively, when invoked on the vm file descriptor.386	 *387	 * The size value returned by KVM_CHECK_EXTENSION(KVM_CAP_XSAVE2)388	 * will always be at least 4096. Currently, it is only greater389	 * than 4096 if a dynamic feature has been enabled with390	 * ``arch_prctl()``, but this may change in the future.391	 *392	 * The offsets of the state save areas in struct kvm_xsave follow393	 * the contents of CPUID leaf 0xD on the host.394	 */395	__u32 region[1024];396	__u32 extra[];397};398 399#define KVM_MAX_XCRS	16400 401struct kvm_xcr {402	__u32 xcr;403	__u32 reserved;404	__u64 value;405};406 407struct kvm_xcrs {408	__u32 nr_xcrs;409	__u32 flags;410	struct kvm_xcr xcrs[KVM_MAX_XCRS];411	__u64 padding[16];412};413 414#define KVM_SYNC_X86_REGS      (1UL << 0)415#define KVM_SYNC_X86_SREGS     (1UL << 1)416#define KVM_SYNC_X86_EVENTS    (1UL << 2)417 418#define KVM_SYNC_X86_VALID_FIELDS \419	(KVM_SYNC_X86_REGS| \420	 KVM_SYNC_X86_SREGS| \421	 KVM_SYNC_X86_EVENTS)422 423/* kvm_sync_regs struct included by kvm_run struct */424struct kvm_sync_regs {425	/* Members of this structure are potentially malicious.426	 * Care must be taken by code reading, esp. interpreting,427	 * data fields from them inside KVM to prevent TOCTOU and428	 * double-fetch types of vulnerabilities.429	 */430	struct kvm_regs regs;431	struct kvm_sregs sregs;432	struct kvm_vcpu_events events;433};434 435#define KVM_X86_QUIRK_LINT0_REENABLED		(1 << 0)436#define KVM_X86_QUIRK_CD_NW_CLEARED		(1 << 1)437#define KVM_X86_QUIRK_LAPIC_MMIO_HOLE		(1 << 2)438#define KVM_X86_QUIRK_OUT_7E_INC_RIP		(1 << 3)439#define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT	(1 << 4)440#define KVM_X86_QUIRK_FIX_HYPERCALL_INSN	(1 << 5)441#define KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS	(1 << 6)442#define KVM_X86_QUIRK_SLOT_ZAP_ALL		(1 << 7)443 444#define KVM_STATE_NESTED_FORMAT_VMX	0445#define KVM_STATE_NESTED_FORMAT_SVM	1446 447#define KVM_STATE_NESTED_GUEST_MODE	0x00000001448#define KVM_STATE_NESTED_RUN_PENDING	0x00000002449#define KVM_STATE_NESTED_EVMCS		0x00000004450#define KVM_STATE_NESTED_MTF_PENDING	0x00000008451#define KVM_STATE_NESTED_GIF_SET	0x00000100452 453#define KVM_STATE_NESTED_SMM_GUEST_MODE	0x00000001454#define KVM_STATE_NESTED_SMM_VMXON	0x00000002455 456#define KVM_STATE_NESTED_VMX_VMCS_SIZE	0x1000457 458#define KVM_STATE_NESTED_SVM_VMCB_SIZE	0x1000459 460#define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE	0x00000001461 462/* vendor-independent attributes for system fd (group 0) */463#define KVM_X86_GRP_SYSTEM		0464#  define KVM_X86_XCOMP_GUEST_SUPP	0465 466/* vendor-specific groups and attributes for system fd */467#define KVM_X86_GRP_SEV			1468#  define KVM_X86_SEV_VMSA_FEATURES	0469 470struct kvm_vmx_nested_state_data {471	__u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];472	__u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE];473};474 475struct kvm_vmx_nested_state_hdr {476	__u64 vmxon_pa;477	__u64 vmcs12_pa;478 479	struct {480		__u16 flags;481	} smm;482 483	__u16 pad;484 485	__u32 flags;486	__u64 preemption_timer_deadline;487};488 489struct kvm_svm_nested_state_data {490	/* Save area only used if KVM_STATE_NESTED_RUN_PENDING.  */491	__u8 vmcb12[KVM_STATE_NESTED_SVM_VMCB_SIZE];492};493 494struct kvm_svm_nested_state_hdr {495	__u64 vmcb_pa;496};497 498/* for KVM_CAP_NESTED_STATE */499struct kvm_nested_state {500	__u16 flags;501	__u16 format;502	__u32 size;503 504	union {505		struct kvm_vmx_nested_state_hdr vmx;506		struct kvm_svm_nested_state_hdr svm;507 508		/* Pad the header to 128 bytes.  */509		__u8 pad[120];510	} hdr;511 512	/*513	 * Define data region as 0 bytes to preserve backwards-compatability514	 * to old definition of kvm_nested_state in order to avoid changing515	 * KVM_{GET,PUT}_NESTED_STATE ioctl values.516	 */517	union {518		__DECLARE_FLEX_ARRAY(struct kvm_vmx_nested_state_data, vmx);519		__DECLARE_FLEX_ARRAY(struct kvm_svm_nested_state_data, svm);520	} data;521};522 523/* for KVM_CAP_PMU_EVENT_FILTER */524struct kvm_pmu_event_filter {525	__u32 action;526	__u32 nevents;527	__u32 fixed_counter_bitmap;528	__u32 flags;529	__u32 pad[4];530	__u64 events[];531};532 533#define KVM_PMU_EVENT_ALLOW 0534#define KVM_PMU_EVENT_DENY 1535 536#define KVM_PMU_EVENT_FLAG_MASKED_EVENTS _BITUL(0)537#define KVM_PMU_EVENT_FLAGS_VALID_MASK (KVM_PMU_EVENT_FLAG_MASKED_EVENTS)538 539/* for KVM_CAP_MCE */540struct kvm_x86_mce {541	__u64 status;542	__u64 addr;543	__u64 misc;544	__u64 mcg_status;545	__u8 bank;546	__u8 pad1[7];547	__u64 pad2[3];548};549 550/* for KVM_CAP_XEN_HVM */551#define KVM_XEN_HVM_CONFIG_HYPERCALL_MSR	(1 << 0)552#define KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL	(1 << 1)553#define KVM_XEN_HVM_CONFIG_SHARED_INFO		(1 << 2)554#define KVM_XEN_HVM_CONFIG_RUNSTATE		(1 << 3)555#define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL	(1 << 4)556#define KVM_XEN_HVM_CONFIG_EVTCHN_SEND		(1 << 5)557#define KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG	(1 << 6)558#define KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE	(1 << 7)559#define KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA	(1 << 8)560 561struct kvm_xen_hvm_config {562	__u32 flags;563	__u32 msr;564	__u64 blob_addr_32;565	__u64 blob_addr_64;566	__u8 blob_size_32;567	__u8 blob_size_64;568	__u8 pad2[30];569};570 571struct kvm_xen_hvm_attr {572	__u16 type;573	__u16 pad[3];574	union {575		__u8 long_mode;576		__u8 vector;577		__u8 runstate_update_flag;578		union {579			__u64 gfn;580#define KVM_XEN_INVALID_GFN ((__u64)-1)581			__u64 hva;582		} shared_info;583		struct {584			__u32 send_port;585			__u32 type; /* EVTCHNSTAT_ipi / EVTCHNSTAT_interdomain */586			__u32 flags;587#define KVM_XEN_EVTCHN_DEASSIGN		(1 << 0)588#define KVM_XEN_EVTCHN_UPDATE		(1 << 1)589#define KVM_XEN_EVTCHN_RESET		(1 << 2)590			/*591			 * Events sent by the guest are either looped back to592			 * the guest itself (potentially on a different port#)593			 * or signalled via an eventfd.594			 */595			union {596				struct {597					__u32 port;598					__u32 vcpu;599					__u32 priority;600				} port;601				struct {602					__u32 port; /* Zero for eventfd */603					__s32 fd;604				} eventfd;605				__u32 padding[4];606			} deliver;607		} evtchn;608		__u32 xen_version;609		__u64 pad[8];610	} u;611};612 613 614/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */615#define KVM_XEN_ATTR_TYPE_LONG_MODE		0x0616#define KVM_XEN_ATTR_TYPE_SHARED_INFO		0x1617#define KVM_XEN_ATTR_TYPE_UPCALL_VECTOR		0x2618/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */619#define KVM_XEN_ATTR_TYPE_EVTCHN		0x3620#define KVM_XEN_ATTR_TYPE_XEN_VERSION		0x4621/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG */622#define KVM_XEN_ATTR_TYPE_RUNSTATE_UPDATE_FLAG	0x5623/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA */624#define KVM_XEN_ATTR_TYPE_SHARED_INFO_HVA	0x6625 626struct kvm_xen_vcpu_attr {627	__u16 type;628	__u16 pad[3];629	union {630		__u64 gpa;631#define KVM_XEN_INVALID_GPA ((__u64)-1)632		__u64 hva;633		__u64 pad[8];634		struct {635			__u64 state;636			__u64 state_entry_time;637			__u64 time_running;638			__u64 time_runnable;639			__u64 time_blocked;640			__u64 time_offline;641		} runstate;642		__u32 vcpu_id;643		struct {644			__u32 port;645			__u32 priority;646			__u64 expires_ns;647		} timer;648		__u8 vector;649	} u;650};651 652/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */653#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO	0x0654#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO	0x1655#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR	0x2656#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT	0x3657#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA	0x4658#define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST	0x5659/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */660#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID		0x6661#define KVM_XEN_VCPU_ATTR_TYPE_TIMER		0x7662#define KVM_XEN_VCPU_ATTR_TYPE_UPCALL_VECTOR	0x8663/* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA */664#define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO_HVA	0x9665 666/* Secure Encrypted Virtualization command */667enum sev_cmd_id {668	/* Guest initialization commands */669	KVM_SEV_INIT = 0,670	KVM_SEV_ES_INIT,671	/* Guest launch commands */672	KVM_SEV_LAUNCH_START,673	KVM_SEV_LAUNCH_UPDATE_DATA,674	KVM_SEV_LAUNCH_UPDATE_VMSA,675	KVM_SEV_LAUNCH_SECRET,676	KVM_SEV_LAUNCH_MEASURE,677	KVM_SEV_LAUNCH_FINISH,678	/* Guest migration commands (outgoing) */679	KVM_SEV_SEND_START,680	KVM_SEV_SEND_UPDATE_DATA,681	KVM_SEV_SEND_UPDATE_VMSA,682	KVM_SEV_SEND_FINISH,683	/* Guest migration commands (incoming) */684	KVM_SEV_RECEIVE_START,685	KVM_SEV_RECEIVE_UPDATE_DATA,686	KVM_SEV_RECEIVE_UPDATE_VMSA,687	KVM_SEV_RECEIVE_FINISH,688	/* Guest status and debug commands */689	KVM_SEV_GUEST_STATUS,690	KVM_SEV_DBG_DECRYPT,691	KVM_SEV_DBG_ENCRYPT,692	/* Guest certificates commands */693	KVM_SEV_CERT_EXPORT,694	/* Attestation report */695	KVM_SEV_GET_ATTESTATION_REPORT,696	/* Guest Migration Extension */697	KVM_SEV_SEND_CANCEL,698 699	/* Second time is the charm; improved versions of the above ioctls.  */700	KVM_SEV_INIT2,701 702	/* SNP-specific commands */703	KVM_SEV_SNP_LAUNCH_START = 100,704	KVM_SEV_SNP_LAUNCH_UPDATE,705	KVM_SEV_SNP_LAUNCH_FINISH,706 707	KVM_SEV_NR_MAX,708};709 710struct kvm_sev_cmd {711	__u32 id;712	__u32 pad0;713	__u64 data;714	__u32 error;715	__u32 sev_fd;716};717 718struct kvm_sev_init {719	__u64 vmsa_features;720	__u32 flags;721	__u16 ghcb_version;722	__u16 pad1;723	__u32 pad2[8];724};725 726struct kvm_sev_launch_start {727	__u32 handle;728	__u32 policy;729	__u64 dh_uaddr;730	__u32 dh_len;731	__u32 pad0;732	__u64 session_uaddr;733	__u32 session_len;734	__u32 pad1;735};736 737struct kvm_sev_launch_update_data {738	__u64 uaddr;739	__u32 len;740	__u32 pad0;741};742 743 744struct kvm_sev_launch_secret {745	__u64 hdr_uaddr;746	__u32 hdr_len;747	__u32 pad0;748	__u64 guest_uaddr;749	__u32 guest_len;750	__u32 pad1;751	__u64 trans_uaddr;752	__u32 trans_len;753	__u32 pad2;754};755 756struct kvm_sev_launch_measure {757	__u64 uaddr;758	__u32 len;759	__u32 pad0;760};761 762struct kvm_sev_guest_status {763	__u32 handle;764	__u32 policy;765	__u32 state;766};767 768struct kvm_sev_dbg {769	__u64 src_uaddr;770	__u64 dst_uaddr;771	__u32 len;772	__u32 pad0;773};774 775struct kvm_sev_attestation_report {776	__u8 mnonce[16];777	__u64 uaddr;778	__u32 len;779	__u32 pad0;780};781 782struct kvm_sev_send_start {783	__u32 policy;784	__u32 pad0;785	__u64 pdh_cert_uaddr;786	__u32 pdh_cert_len;787	__u32 pad1;788	__u64 plat_certs_uaddr;789	__u32 plat_certs_len;790	__u32 pad2;791	__u64 amd_certs_uaddr;792	__u32 amd_certs_len;793	__u32 pad3;794	__u64 session_uaddr;795	__u32 session_len;796	__u32 pad4;797};798 799struct kvm_sev_send_update_data {800	__u64 hdr_uaddr;801	__u32 hdr_len;802	__u32 pad0;803	__u64 guest_uaddr;804	__u32 guest_len;805	__u32 pad1;806	__u64 trans_uaddr;807	__u32 trans_len;808	__u32 pad2;809};810 811struct kvm_sev_receive_start {812	__u32 handle;813	__u32 policy;814	__u64 pdh_uaddr;815	__u32 pdh_len;816	__u32 pad0;817	__u64 session_uaddr;818	__u32 session_len;819	__u32 pad1;820};821 822struct kvm_sev_receive_update_data {823	__u64 hdr_uaddr;824	__u32 hdr_len;825	__u32 pad0;826	__u64 guest_uaddr;827	__u32 guest_len;828	__u32 pad1;829	__u64 trans_uaddr;830	__u32 trans_len;831	__u32 pad2;832};833 834struct kvm_sev_snp_launch_start {835	__u64 policy;836	__u8 gosvw[16];837	__u16 flags;838	__u8 pad0[6];839	__u64 pad1[4];840};841 842/* Kept in sync with firmware values for simplicity. */843#define KVM_SEV_SNP_PAGE_TYPE_NORMAL		0x1844#define KVM_SEV_SNP_PAGE_TYPE_ZERO		0x3845#define KVM_SEV_SNP_PAGE_TYPE_UNMEASURED	0x4846#define KVM_SEV_SNP_PAGE_TYPE_SECRETS		0x5847#define KVM_SEV_SNP_PAGE_TYPE_CPUID		0x6848 849struct kvm_sev_snp_launch_update {850	__u64 gfn_start;851	__u64 uaddr;852	__u64 len;853	__u8 type;854	__u8 pad0;855	__u16 flags;856	__u32 pad1;857	__u64 pad2[4];858};859 860#define KVM_SEV_SNP_ID_BLOCK_SIZE	96861#define KVM_SEV_SNP_ID_AUTH_SIZE	4096862#define KVM_SEV_SNP_FINISH_DATA_SIZE	32863 864struct kvm_sev_snp_launch_finish {865	__u64 id_block_uaddr;866	__u64 id_auth_uaddr;867	__u8 id_block_en;868	__u8 auth_key_en;869	__u8 vcek_disabled;870	__u8 host_data[KVM_SEV_SNP_FINISH_DATA_SIZE];871	__u8 pad0[3];872	__u16 flags;873	__u64 pad1[4];874};875 876#define KVM_X2APIC_API_USE_32BIT_IDS            (1ULL << 0)877#define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK  (1ULL << 1)878 879struct kvm_hyperv_eventfd {880	__u32 conn_id;881	__s32 fd;882	__u32 flags;883	__u32 padding[3];884};885 886#define KVM_HYPERV_CONN_ID_MASK		0x00ffffff887#define KVM_HYPERV_EVENTFD_DEASSIGN	(1 << 0)888 889/*890 * Masked event layout.891 * Bits   Description892 * ----   -----------893 * 7:0    event select (low bits)894 * 15:8   umask match895 * 31:16  unused896 * 35:32  event select (high bits)897 * 36:54  unused898 * 55     exclude bit899 * 63:56  umask mask900 */901 902#define KVM_PMU_ENCODE_MASKED_ENTRY(event_select, mask, match, exclude) \903	(((event_select) & 0xFFULL) | (((event_select) & 0XF00ULL) << 24) | \904	(((mask) & 0xFFULL) << 56) | \905	(((match) & 0xFFULL) << 8) | \906	((__u64)(!!(exclude)) << 55))907 908#define KVM_PMU_MASKED_ENTRY_EVENT_SELECT \909	(__GENMASK_ULL(7, 0) | __GENMASK_ULL(35, 32))910#define KVM_PMU_MASKED_ENTRY_UMASK_MASK		(__GENMASK_ULL(63, 56))911#define KVM_PMU_MASKED_ENTRY_UMASK_MATCH	(__GENMASK_ULL(15, 8))912#define KVM_PMU_MASKED_ENTRY_EXCLUDE		(_BITULL(55))913#define KVM_PMU_MASKED_ENTRY_UMASK_MASK_SHIFT	(56)914 915/* for KVM_{GET,SET,HAS}_DEVICE_ATTR */916#define KVM_VCPU_TSC_CTRL 0 /* control group for the timestamp counter (TSC) */917#define   KVM_VCPU_TSC_OFFSET 0 /* attribute for the TSC offset */918 919/* x86-specific KVM_EXIT_HYPERCALL flags. */920#define KVM_EXIT_HYPERCALL_LONG_MODE	_BITULL(0)921 922#define KVM_X86_DEFAULT_VM	0923#define KVM_X86_SW_PROTECTED_VM	1924#define KVM_X86_SEV_VM		2925#define KVM_X86_SEV_ES_VM	3926#define KVM_X86_SNP_VM		4927 928#endif /* _ASM_X86_KVM_H */929