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