1*8d67ca89SAndroid Build Coastguard Worker /* 2*8d67ca89SAndroid Build Coastguard Worker * This file is auto-generated. Modifications will be lost. 3*8d67ca89SAndroid Build Coastguard Worker * 4*8d67ca89SAndroid Build Coastguard Worker * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5*8d67ca89SAndroid Build Coastguard Worker * for more information. 6*8d67ca89SAndroid Build Coastguard Worker */ 7*8d67ca89SAndroid Build Coastguard Worker #ifndef _ASM_X86_KVM_H 8*8d67ca89SAndroid Build Coastguard Worker #define _ASM_X86_KVM_H 9*8d67ca89SAndroid Build Coastguard Worker #include <linux/const.h> 10*8d67ca89SAndroid Build Coastguard Worker #include <linux/bits.h> 11*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h> 12*8d67ca89SAndroid Build Coastguard Worker #include <linux/ioctl.h> 13*8d67ca89SAndroid Build Coastguard Worker #include <linux/stddef.h> 14*8d67ca89SAndroid Build Coastguard Worker #define KVM_PIO_PAGE_OFFSET 1 15*8d67ca89SAndroid Build Coastguard Worker #define KVM_COALESCED_MMIO_PAGE_OFFSET 2 16*8d67ca89SAndroid Build Coastguard Worker #define KVM_DIRTY_LOG_PAGE_OFFSET 64 17*8d67ca89SAndroid Build Coastguard Worker #define DE_VECTOR 0 18*8d67ca89SAndroid Build Coastguard Worker #define DB_VECTOR 1 19*8d67ca89SAndroid Build Coastguard Worker #define BP_VECTOR 3 20*8d67ca89SAndroid Build Coastguard Worker #define OF_VECTOR 4 21*8d67ca89SAndroid Build Coastguard Worker #define BR_VECTOR 5 22*8d67ca89SAndroid Build Coastguard Worker #define UD_VECTOR 6 23*8d67ca89SAndroid Build Coastguard Worker #define NM_VECTOR 7 24*8d67ca89SAndroid Build Coastguard Worker #define DF_VECTOR 8 25*8d67ca89SAndroid Build Coastguard Worker #define TS_VECTOR 10 26*8d67ca89SAndroid Build Coastguard Worker #define NP_VECTOR 11 27*8d67ca89SAndroid Build Coastguard Worker #define SS_VECTOR 12 28*8d67ca89SAndroid Build Coastguard Worker #define GP_VECTOR 13 29*8d67ca89SAndroid Build Coastguard Worker #define PF_VECTOR 14 30*8d67ca89SAndroid Build Coastguard Worker #define MF_VECTOR 16 31*8d67ca89SAndroid Build Coastguard Worker #define AC_VECTOR 17 32*8d67ca89SAndroid Build Coastguard Worker #define MC_VECTOR 18 33*8d67ca89SAndroid Build Coastguard Worker #define XM_VECTOR 19 34*8d67ca89SAndroid Build Coastguard Worker #define VE_VECTOR 20 35*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_PIT 36*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_IOAPIC 37*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_IRQ_LINE 38*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_MSI 39*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_USER_NMI 40*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_MSIX 41*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_MCE 42*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_PIT_STATE2 43*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_XEN_HVM 44*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_VCPU_EVENTS 45*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_DEBUGREGS 46*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_XSAVE 47*8d67ca89SAndroid Build Coastguard Worker #define __KVM_HAVE_XCRS 48*8d67ca89SAndroid Build Coastguard Worker #define KVM_NR_INTERRUPTS 256 49*8d67ca89SAndroid Build Coastguard Worker struct kvm_pic_state { 50*8d67ca89SAndroid Build Coastguard Worker __u8 last_irr; 51*8d67ca89SAndroid Build Coastguard Worker __u8 irr; 52*8d67ca89SAndroid Build Coastguard Worker __u8 imr; 53*8d67ca89SAndroid Build Coastguard Worker __u8 isr; 54*8d67ca89SAndroid Build Coastguard Worker __u8 priority_add; 55*8d67ca89SAndroid Build Coastguard Worker __u8 irq_base; 56*8d67ca89SAndroid Build Coastguard Worker __u8 read_reg_select; 57*8d67ca89SAndroid Build Coastguard Worker __u8 poll; 58*8d67ca89SAndroid Build Coastguard Worker __u8 special_mask; 59*8d67ca89SAndroid Build Coastguard Worker __u8 init_state; 60*8d67ca89SAndroid Build Coastguard Worker __u8 auto_eoi; 61*8d67ca89SAndroid Build Coastguard Worker __u8 rotate_on_auto_eoi; 62*8d67ca89SAndroid Build Coastguard Worker __u8 special_fully_nested_mode; 63*8d67ca89SAndroid Build Coastguard Worker __u8 init4; 64*8d67ca89SAndroid Build Coastguard Worker __u8 elcr; 65*8d67ca89SAndroid Build Coastguard Worker __u8 elcr_mask; 66*8d67ca89SAndroid Build Coastguard Worker }; 67*8d67ca89SAndroid Build Coastguard Worker #define KVM_IOAPIC_NUM_PINS 24 68*8d67ca89SAndroid Build Coastguard Worker struct kvm_ioapic_state { 69*8d67ca89SAndroid Build Coastguard Worker __u64 base_address; 70*8d67ca89SAndroid Build Coastguard Worker __u32 ioregsel; 71*8d67ca89SAndroid Build Coastguard Worker __u32 id; 72*8d67ca89SAndroid Build Coastguard Worker __u32 irr; 73*8d67ca89SAndroid Build Coastguard Worker __u32 pad; 74*8d67ca89SAndroid Build Coastguard Worker union { 75*8d67ca89SAndroid Build Coastguard Worker __u64 bits; 76*8d67ca89SAndroid Build Coastguard Worker struct { 77*8d67ca89SAndroid Build Coastguard Worker __u8 vector; 78*8d67ca89SAndroid Build Coastguard Worker __u8 delivery_mode : 3; 79*8d67ca89SAndroid Build Coastguard Worker __u8 dest_mode : 1; 80*8d67ca89SAndroid Build Coastguard Worker __u8 delivery_status : 1; 81*8d67ca89SAndroid Build Coastguard Worker __u8 polarity : 1; 82*8d67ca89SAndroid Build Coastguard Worker __u8 remote_irr : 1; 83*8d67ca89SAndroid Build Coastguard Worker __u8 trig_mode : 1; 84*8d67ca89SAndroid Build Coastguard Worker __u8 mask : 1; 85*8d67ca89SAndroid Build Coastguard Worker __u8 reserve : 7; 86*8d67ca89SAndroid Build Coastguard Worker __u8 reserved[4]; 87*8d67ca89SAndroid Build Coastguard Worker __u8 dest_id; 88*8d67ca89SAndroid Build Coastguard Worker } fields; 89*8d67ca89SAndroid Build Coastguard Worker } redirtbl[KVM_IOAPIC_NUM_PINS]; 90*8d67ca89SAndroid Build Coastguard Worker }; 91*8d67ca89SAndroid Build Coastguard Worker #define KVM_IRQCHIP_PIC_MASTER 0 92*8d67ca89SAndroid Build Coastguard Worker #define KVM_IRQCHIP_PIC_SLAVE 1 93*8d67ca89SAndroid Build Coastguard Worker #define KVM_IRQCHIP_IOAPIC 2 94*8d67ca89SAndroid Build Coastguard Worker #define KVM_NR_IRQCHIPS 3 95*8d67ca89SAndroid Build Coastguard Worker #define KVM_RUN_X86_SMM (1 << 0) 96*8d67ca89SAndroid Build Coastguard Worker #define KVM_RUN_X86_BUS_LOCK (1 << 1) 97*8d67ca89SAndroid Build Coastguard Worker #define KVM_RUN_X86_GUEST_MODE (1 << 2) 98*8d67ca89SAndroid Build Coastguard Worker struct kvm_regs { 99*8d67ca89SAndroid Build Coastguard Worker __u64 rax, rbx, rcx, rdx; 100*8d67ca89SAndroid Build Coastguard Worker __u64 rsi, rdi, rsp, rbp; 101*8d67ca89SAndroid Build Coastguard Worker __u64 r8, r9, r10, r11; 102*8d67ca89SAndroid Build Coastguard Worker __u64 r12, r13, r14, r15; 103*8d67ca89SAndroid Build Coastguard Worker __u64 rip, rflags; 104*8d67ca89SAndroid Build Coastguard Worker }; 105*8d67ca89SAndroid Build Coastguard Worker #define KVM_APIC_REG_SIZE 0x400 106*8d67ca89SAndroid Build Coastguard Worker struct kvm_lapic_state { 107*8d67ca89SAndroid Build Coastguard Worker char regs[KVM_APIC_REG_SIZE]; 108*8d67ca89SAndroid Build Coastguard Worker }; 109*8d67ca89SAndroid Build Coastguard Worker struct kvm_segment { 110*8d67ca89SAndroid Build Coastguard Worker __u64 base; 111*8d67ca89SAndroid Build Coastguard Worker __u32 limit; 112*8d67ca89SAndroid Build Coastguard Worker __u16 selector; 113*8d67ca89SAndroid Build Coastguard Worker __u8 type; 114*8d67ca89SAndroid Build Coastguard Worker __u8 present, dpl, db, s, l, g, avl; 115*8d67ca89SAndroid Build Coastguard Worker __u8 unusable; 116*8d67ca89SAndroid Build Coastguard Worker __u8 padding; 117*8d67ca89SAndroid Build Coastguard Worker }; 118*8d67ca89SAndroid Build Coastguard Worker struct kvm_dtable { 119*8d67ca89SAndroid Build Coastguard Worker __u64 base; 120*8d67ca89SAndroid Build Coastguard Worker __u16 limit; 121*8d67ca89SAndroid Build Coastguard Worker __u16 padding[3]; 122*8d67ca89SAndroid Build Coastguard Worker }; 123*8d67ca89SAndroid Build Coastguard Worker struct kvm_sregs { 124*8d67ca89SAndroid Build Coastguard Worker struct kvm_segment cs, ds, es, fs, gs, ss; 125*8d67ca89SAndroid Build Coastguard Worker struct kvm_segment tr, ldt; 126*8d67ca89SAndroid Build Coastguard Worker struct kvm_dtable gdt, idt; 127*8d67ca89SAndroid Build Coastguard Worker __u64 cr0, cr2, cr3, cr4, cr8; 128*8d67ca89SAndroid Build Coastguard Worker __u64 efer; 129*8d67ca89SAndroid Build Coastguard Worker __u64 apic_base; 130*8d67ca89SAndroid Build Coastguard Worker __u64 interrupt_bitmap[(KVM_NR_INTERRUPTS + 63) / 64]; 131*8d67ca89SAndroid Build Coastguard Worker }; 132*8d67ca89SAndroid Build Coastguard Worker struct kvm_sregs2 { 133*8d67ca89SAndroid Build Coastguard Worker struct kvm_segment cs, ds, es, fs, gs, ss; 134*8d67ca89SAndroid Build Coastguard Worker struct kvm_segment tr, ldt; 135*8d67ca89SAndroid Build Coastguard Worker struct kvm_dtable gdt, idt; 136*8d67ca89SAndroid Build Coastguard Worker __u64 cr0, cr2, cr3, cr4, cr8; 137*8d67ca89SAndroid Build Coastguard Worker __u64 efer; 138*8d67ca89SAndroid Build Coastguard Worker __u64 apic_base; 139*8d67ca89SAndroid Build Coastguard Worker __u64 flags; 140*8d67ca89SAndroid Build Coastguard Worker __u64 pdptrs[4]; 141*8d67ca89SAndroid Build Coastguard Worker }; 142*8d67ca89SAndroid Build Coastguard Worker #define KVM_SREGS2_FLAGS_PDPTRS_VALID 1 143*8d67ca89SAndroid Build Coastguard Worker struct kvm_fpu { 144*8d67ca89SAndroid Build Coastguard Worker __u8 fpr[8][16]; 145*8d67ca89SAndroid Build Coastguard Worker __u16 fcw; 146*8d67ca89SAndroid Build Coastguard Worker __u16 fsw; 147*8d67ca89SAndroid Build Coastguard Worker __u8 ftwx; 148*8d67ca89SAndroid Build Coastguard Worker __u8 pad1; 149*8d67ca89SAndroid Build Coastguard Worker __u16 last_opcode; 150*8d67ca89SAndroid Build Coastguard Worker __u64 last_ip; 151*8d67ca89SAndroid Build Coastguard Worker __u64 last_dp; 152*8d67ca89SAndroid Build Coastguard Worker __u8 xmm[16][16]; 153*8d67ca89SAndroid Build Coastguard Worker __u32 mxcsr; 154*8d67ca89SAndroid Build Coastguard Worker __u32 pad2; 155*8d67ca89SAndroid Build Coastguard Worker }; 156*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_entry { 157*8d67ca89SAndroid Build Coastguard Worker __u32 index; 158*8d67ca89SAndroid Build Coastguard Worker __u32 reserved; 159*8d67ca89SAndroid Build Coastguard Worker __u64 data; 160*8d67ca89SAndroid Build Coastguard Worker }; 161*8d67ca89SAndroid Build Coastguard Worker struct kvm_msrs { 162*8d67ca89SAndroid Build Coastguard Worker __u32 nmsrs; 163*8d67ca89SAndroid Build Coastguard Worker __u32 pad; 164*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_entry entries[]; 165*8d67ca89SAndroid Build Coastguard Worker }; 166*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_list { 167*8d67ca89SAndroid Build Coastguard Worker __u32 nmsrs; 168*8d67ca89SAndroid Build Coastguard Worker __u32 indices[]; 169*8d67ca89SAndroid Build Coastguard Worker }; 170*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_MAX_BITMAP_SIZE 0x600 171*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_filter_range { 172*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_READ (1 << 0) 173*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_WRITE (1 << 1) 174*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_RANGE_VALID_MASK (KVM_MSR_FILTER_READ | KVM_MSR_FILTER_WRITE) 175*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 176*8d67ca89SAndroid Build Coastguard Worker __u32 nmsrs; 177*8d67ca89SAndroid Build Coastguard Worker __u32 base; 178*8d67ca89SAndroid Build Coastguard Worker __u8 * bitmap; 179*8d67ca89SAndroid Build Coastguard Worker }; 180*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_MAX_RANGES 16 181*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_filter { 182*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_DEFAULT_ALLOW (0 << 0) 183*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_DEFAULT_DENY (1 << 0) 184*8d67ca89SAndroid Build Coastguard Worker #define KVM_MSR_FILTER_VALID_MASK (KVM_MSR_FILTER_DEFAULT_DENY) 185*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 186*8d67ca89SAndroid Build Coastguard Worker struct kvm_msr_filter_range ranges[KVM_MSR_FILTER_MAX_RANGES]; 187*8d67ca89SAndroid Build Coastguard Worker }; 188*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid_entry { 189*8d67ca89SAndroid Build Coastguard Worker __u32 function; 190*8d67ca89SAndroid Build Coastguard Worker __u32 eax; 191*8d67ca89SAndroid Build Coastguard Worker __u32 ebx; 192*8d67ca89SAndroid Build Coastguard Worker __u32 ecx; 193*8d67ca89SAndroid Build Coastguard Worker __u32 edx; 194*8d67ca89SAndroid Build Coastguard Worker __u32 padding; 195*8d67ca89SAndroid Build Coastguard Worker }; 196*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid { 197*8d67ca89SAndroid Build Coastguard Worker __u32 nent; 198*8d67ca89SAndroid Build Coastguard Worker __u32 padding; 199*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid_entry entries[]; 200*8d67ca89SAndroid Build Coastguard Worker }; 201*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid_entry2 { 202*8d67ca89SAndroid Build Coastguard Worker __u32 function; 203*8d67ca89SAndroid Build Coastguard Worker __u32 index; 204*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 205*8d67ca89SAndroid Build Coastguard Worker __u32 eax; 206*8d67ca89SAndroid Build Coastguard Worker __u32 ebx; 207*8d67ca89SAndroid Build Coastguard Worker __u32 ecx; 208*8d67ca89SAndroid Build Coastguard Worker __u32 edx; 209*8d67ca89SAndroid Build Coastguard Worker __u32 padding[3]; 210*8d67ca89SAndroid Build Coastguard Worker }; 211*8d67ca89SAndroid Build Coastguard Worker #define KVM_CPUID_FLAG_SIGNIFCANT_INDEX (1 << 0) 212*8d67ca89SAndroid Build Coastguard Worker #define KVM_CPUID_FLAG_STATEFUL_FUNC (1 << 1) 213*8d67ca89SAndroid Build Coastguard Worker #define KVM_CPUID_FLAG_STATE_READ_NEXT (1 << 2) 214*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid2 { 215*8d67ca89SAndroid Build Coastguard Worker __u32 nent; 216*8d67ca89SAndroid Build Coastguard Worker __u32 padding; 217*8d67ca89SAndroid Build Coastguard Worker struct kvm_cpuid_entry2 entries[]; 218*8d67ca89SAndroid Build Coastguard Worker }; 219*8d67ca89SAndroid Build Coastguard Worker struct kvm_pit_channel_state { 220*8d67ca89SAndroid Build Coastguard Worker __u32 count; 221*8d67ca89SAndroid Build Coastguard Worker __u16 latched_count; 222*8d67ca89SAndroid Build Coastguard Worker __u8 count_latched; 223*8d67ca89SAndroid Build Coastguard Worker __u8 status_latched; 224*8d67ca89SAndroid Build Coastguard Worker __u8 status; 225*8d67ca89SAndroid Build Coastguard Worker __u8 read_state; 226*8d67ca89SAndroid Build Coastguard Worker __u8 write_state; 227*8d67ca89SAndroid Build Coastguard Worker __u8 write_latch; 228*8d67ca89SAndroid Build Coastguard Worker __u8 rw_mode; 229*8d67ca89SAndroid Build Coastguard Worker __u8 mode; 230*8d67ca89SAndroid Build Coastguard Worker __u8 bcd; 231*8d67ca89SAndroid Build Coastguard Worker __u8 gate; 232*8d67ca89SAndroid Build Coastguard Worker __s64 count_load_time; 233*8d67ca89SAndroid Build Coastguard Worker }; 234*8d67ca89SAndroid Build Coastguard Worker struct kvm_debug_exit_arch { 235*8d67ca89SAndroid Build Coastguard Worker __u32 exception; 236*8d67ca89SAndroid Build Coastguard Worker __u32 pad; 237*8d67ca89SAndroid Build Coastguard Worker __u64 pc; 238*8d67ca89SAndroid Build Coastguard Worker __u64 dr6; 239*8d67ca89SAndroid Build Coastguard Worker __u64 dr7; 240*8d67ca89SAndroid Build Coastguard Worker }; 241*8d67ca89SAndroid Build Coastguard Worker #define KVM_GUESTDBG_USE_SW_BP 0x00010000 242*8d67ca89SAndroid Build Coastguard Worker #define KVM_GUESTDBG_USE_HW_BP 0x00020000 243*8d67ca89SAndroid Build Coastguard Worker #define KVM_GUESTDBG_INJECT_DB 0x00040000 244*8d67ca89SAndroid Build Coastguard Worker #define KVM_GUESTDBG_INJECT_BP 0x00080000 245*8d67ca89SAndroid Build Coastguard Worker #define KVM_GUESTDBG_BLOCKIRQ 0x00100000 246*8d67ca89SAndroid Build Coastguard Worker struct kvm_guest_debug_arch { 247*8d67ca89SAndroid Build Coastguard Worker __u64 debugreg[8]; 248*8d67ca89SAndroid Build Coastguard Worker }; 249*8d67ca89SAndroid Build Coastguard Worker struct kvm_pit_state { 250*8d67ca89SAndroid Build Coastguard Worker struct kvm_pit_channel_state channels[3]; 251*8d67ca89SAndroid Build Coastguard Worker }; 252*8d67ca89SAndroid Build Coastguard Worker #define KVM_PIT_FLAGS_HPET_LEGACY 0x00000001 253*8d67ca89SAndroid Build Coastguard Worker #define KVM_PIT_FLAGS_SPEAKER_DATA_ON 0x00000002 254*8d67ca89SAndroid Build Coastguard Worker struct kvm_pit_state2 { 255*8d67ca89SAndroid Build Coastguard Worker struct kvm_pit_channel_state channels[3]; 256*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 257*8d67ca89SAndroid Build Coastguard Worker __u32 reserved[9]; 258*8d67ca89SAndroid Build Coastguard Worker }; 259*8d67ca89SAndroid Build Coastguard Worker struct kvm_reinject_control { 260*8d67ca89SAndroid Build Coastguard Worker __u8 pit_reinject; 261*8d67ca89SAndroid Build Coastguard Worker __u8 reserved[31]; 262*8d67ca89SAndroid Build Coastguard Worker }; 263*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_NMI_PENDING 0x00000001 264*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_SIPI_VECTOR 0x00000002 265*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_SHADOW 0x00000004 266*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_SMM 0x00000008 267*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_PAYLOAD 0x00000010 268*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPUEVENT_VALID_TRIPLE_FAULT 0x00000020 269*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SHADOW_INT_MOV_SS 0x01 270*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SHADOW_INT_STI 0x02 271*8d67ca89SAndroid Build Coastguard Worker struct kvm_vcpu_events { 272*8d67ca89SAndroid Build Coastguard Worker struct { 273*8d67ca89SAndroid Build Coastguard Worker __u8 injected; 274*8d67ca89SAndroid Build Coastguard Worker __u8 nr; 275*8d67ca89SAndroid Build Coastguard Worker __u8 has_error_code; 276*8d67ca89SAndroid Build Coastguard Worker __u8 pending; 277*8d67ca89SAndroid Build Coastguard Worker __u32 error_code; 278*8d67ca89SAndroid Build Coastguard Worker } exception; 279*8d67ca89SAndroid Build Coastguard Worker struct { 280*8d67ca89SAndroid Build Coastguard Worker __u8 injected; 281*8d67ca89SAndroid Build Coastguard Worker __u8 nr; 282*8d67ca89SAndroid Build Coastguard Worker __u8 soft; 283*8d67ca89SAndroid Build Coastguard Worker __u8 shadow; 284*8d67ca89SAndroid Build Coastguard Worker } interrupt; 285*8d67ca89SAndroid Build Coastguard Worker struct { 286*8d67ca89SAndroid Build Coastguard Worker __u8 injected; 287*8d67ca89SAndroid Build Coastguard Worker __u8 pending; 288*8d67ca89SAndroid Build Coastguard Worker __u8 masked; 289*8d67ca89SAndroid Build Coastguard Worker __u8 pad; 290*8d67ca89SAndroid Build Coastguard Worker } nmi; 291*8d67ca89SAndroid Build Coastguard Worker __u32 sipi_vector; 292*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 293*8d67ca89SAndroid Build Coastguard Worker struct { 294*8d67ca89SAndroid Build Coastguard Worker __u8 smm; 295*8d67ca89SAndroid Build Coastguard Worker __u8 pending; 296*8d67ca89SAndroid Build Coastguard Worker __u8 smm_inside_nmi; 297*8d67ca89SAndroid Build Coastguard Worker __u8 latched_init; 298*8d67ca89SAndroid Build Coastguard Worker } smi; 299*8d67ca89SAndroid Build Coastguard Worker struct { 300*8d67ca89SAndroid Build Coastguard Worker __u8 pending; 301*8d67ca89SAndroid Build Coastguard Worker } triple_fault; 302*8d67ca89SAndroid Build Coastguard Worker __u8 reserved[26]; 303*8d67ca89SAndroid Build Coastguard Worker __u8 exception_has_payload; 304*8d67ca89SAndroid Build Coastguard Worker __u64 exception_payload; 305*8d67ca89SAndroid Build Coastguard Worker }; 306*8d67ca89SAndroid Build Coastguard Worker struct kvm_debugregs { 307*8d67ca89SAndroid Build Coastguard Worker __u64 db[4]; 308*8d67ca89SAndroid Build Coastguard Worker __u64 dr6; 309*8d67ca89SAndroid Build Coastguard Worker __u64 dr7; 310*8d67ca89SAndroid Build Coastguard Worker __u64 flags; 311*8d67ca89SAndroid Build Coastguard Worker __u64 reserved[9]; 312*8d67ca89SAndroid Build Coastguard Worker }; 313*8d67ca89SAndroid Build Coastguard Worker struct kvm_xsave { 314*8d67ca89SAndroid Build Coastguard Worker __u32 region[1024]; 315*8d67ca89SAndroid Build Coastguard Worker __u32 extra[]; 316*8d67ca89SAndroid Build Coastguard Worker }; 317*8d67ca89SAndroid Build Coastguard Worker #define KVM_MAX_XCRS 16 318*8d67ca89SAndroid Build Coastguard Worker struct kvm_xcr { 319*8d67ca89SAndroid Build Coastguard Worker __u32 xcr; 320*8d67ca89SAndroid Build Coastguard Worker __u32 reserved; 321*8d67ca89SAndroid Build Coastguard Worker __u64 value; 322*8d67ca89SAndroid Build Coastguard Worker }; 323*8d67ca89SAndroid Build Coastguard Worker struct kvm_xcrs { 324*8d67ca89SAndroid Build Coastguard Worker __u32 nr_xcrs; 325*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 326*8d67ca89SAndroid Build Coastguard Worker struct kvm_xcr xcrs[KVM_MAX_XCRS]; 327*8d67ca89SAndroid Build Coastguard Worker __u64 padding[16]; 328*8d67ca89SAndroid Build Coastguard Worker }; 329*8d67ca89SAndroid Build Coastguard Worker #define KVM_SYNC_X86_REGS (1UL << 0) 330*8d67ca89SAndroid Build Coastguard Worker #define KVM_SYNC_X86_SREGS (1UL << 1) 331*8d67ca89SAndroid Build Coastguard Worker #define KVM_SYNC_X86_EVENTS (1UL << 2) 332*8d67ca89SAndroid Build Coastguard Worker #define KVM_SYNC_X86_VALID_FIELDS (KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS | KVM_SYNC_X86_EVENTS) 333*8d67ca89SAndroid Build Coastguard Worker struct kvm_sync_regs { 334*8d67ca89SAndroid Build Coastguard Worker struct kvm_regs regs; 335*8d67ca89SAndroid Build Coastguard Worker struct kvm_sregs sregs; 336*8d67ca89SAndroid Build Coastguard Worker struct kvm_vcpu_events events; 337*8d67ca89SAndroid Build Coastguard Worker }; 338*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_LINT0_REENABLED (1 << 0) 339*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_CD_NW_CLEARED (1 << 1) 340*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_LAPIC_MMIO_HOLE (1 << 2) 341*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_OUT_7E_INC_RIP (1 << 3) 342*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_MISC_ENABLE_NO_MWAIT (1 << 4) 343*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_FIX_HYPERCALL_INSN (1 << 5) 344*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_QUIRK_MWAIT_NEVER_UD_FAULTS (1 << 6) 345*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_FORMAT_VMX 0 346*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_FORMAT_SVM 1 347*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_GUEST_MODE 0x00000001 348*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_RUN_PENDING 0x00000002 349*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_EVMCS 0x00000004 350*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_MTF_PENDING 0x00000008 351*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_GIF_SET 0x00000100 352*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_SMM_GUEST_MODE 0x00000001 353*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_SMM_VMXON 0x00000002 354*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_VMX_VMCS_SIZE 0x1000 355*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_NESTED_SVM_VMCB_SIZE 0x1000 356*8d67ca89SAndroid Build Coastguard Worker #define KVM_STATE_VMX_PREEMPTION_TIMER_DEADLINE 0x00000001 357*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_GRP_SYSTEM 0 358*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_XCOMP_GUEST_SUPP 0 359*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_GRP_SEV 1 360*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SEV_VMSA_FEATURES 0 361*8d67ca89SAndroid Build Coastguard Worker struct kvm_vmx_nested_state_data { 362*8d67ca89SAndroid Build Coastguard Worker __u8 vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; 363*8d67ca89SAndroid Build Coastguard Worker __u8 shadow_vmcs12[KVM_STATE_NESTED_VMX_VMCS_SIZE]; 364*8d67ca89SAndroid Build Coastguard Worker }; 365*8d67ca89SAndroid Build Coastguard Worker struct kvm_vmx_nested_state_hdr { 366*8d67ca89SAndroid Build Coastguard Worker __u64 vmxon_pa; 367*8d67ca89SAndroid Build Coastguard Worker __u64 vmcs12_pa; 368*8d67ca89SAndroid Build Coastguard Worker struct { 369*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 370*8d67ca89SAndroid Build Coastguard Worker } smm; 371*8d67ca89SAndroid Build Coastguard Worker __u16 pad; 372*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 373*8d67ca89SAndroid Build Coastguard Worker __u64 preemption_timer_deadline; 374*8d67ca89SAndroid Build Coastguard Worker }; 375*8d67ca89SAndroid Build Coastguard Worker struct kvm_svm_nested_state_data { 376*8d67ca89SAndroid Build Coastguard Worker __u8 vmcb12[KVM_STATE_NESTED_SVM_VMCB_SIZE]; 377*8d67ca89SAndroid Build Coastguard Worker }; 378*8d67ca89SAndroid Build Coastguard Worker struct kvm_svm_nested_state_hdr { 379*8d67ca89SAndroid Build Coastguard Worker __u64 vmcb_pa; 380*8d67ca89SAndroid Build Coastguard Worker }; 381*8d67ca89SAndroid Build Coastguard Worker struct kvm_nested_state { 382*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 383*8d67ca89SAndroid Build Coastguard Worker __u16 format; 384*8d67ca89SAndroid Build Coastguard Worker __u32 size; 385*8d67ca89SAndroid Build Coastguard Worker union { 386*8d67ca89SAndroid Build Coastguard Worker struct kvm_vmx_nested_state_hdr vmx; 387*8d67ca89SAndroid Build Coastguard Worker struct kvm_svm_nested_state_hdr svm; 388*8d67ca89SAndroid Build Coastguard Worker __u8 pad[120]; 389*8d67ca89SAndroid Build Coastguard Worker } hdr; 390*8d67ca89SAndroid Build Coastguard Worker union { 391*8d67ca89SAndroid Build Coastguard Worker __DECLARE_FLEX_ARRAY(struct kvm_vmx_nested_state_data, vmx); 392*8d67ca89SAndroid Build Coastguard Worker __DECLARE_FLEX_ARRAY(struct kvm_svm_nested_state_data, svm); 393*8d67ca89SAndroid Build Coastguard Worker } data; 394*8d67ca89SAndroid Build Coastguard Worker }; 395*8d67ca89SAndroid Build Coastguard Worker struct kvm_pmu_event_filter { 396*8d67ca89SAndroid Build Coastguard Worker __u32 action; 397*8d67ca89SAndroid Build Coastguard Worker __u32 nevents; 398*8d67ca89SAndroid Build Coastguard Worker __u32 fixed_counter_bitmap; 399*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 400*8d67ca89SAndroid Build Coastguard Worker __u32 pad[4]; 401*8d67ca89SAndroid Build Coastguard Worker __u64 events[]; 402*8d67ca89SAndroid Build Coastguard Worker }; 403*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_EVENT_ALLOW 0 404*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_EVENT_DENY 1 405*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_EVENT_FLAG_MASKED_EVENTS _BITUL(0) 406*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_EVENT_FLAGS_VALID_MASK (KVM_PMU_EVENT_FLAG_MASKED_EVENTS) 407*8d67ca89SAndroid Build Coastguard Worker struct kvm_x86_mce { 408*8d67ca89SAndroid Build Coastguard Worker __u64 status; 409*8d67ca89SAndroid Build Coastguard Worker __u64 addr; 410*8d67ca89SAndroid Build Coastguard Worker __u64 misc; 411*8d67ca89SAndroid Build Coastguard Worker __u64 mcg_status; 412*8d67ca89SAndroid Build Coastguard Worker __u8 bank; 413*8d67ca89SAndroid Build Coastguard Worker __u8 pad1[7]; 414*8d67ca89SAndroid Build Coastguard Worker __u64 pad2[3]; 415*8d67ca89SAndroid Build Coastguard Worker }; 416*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_HYPERCALL_MSR (1 << 0) 417*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL (1 << 1) 418*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_SHARED_INFO (1 << 2) 419*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_RUNSTATE (1 << 3) 420*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL (1 << 4) 421*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_EVTCHN_SEND (1 << 5) 422*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG (1 << 6) 423*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_PVCLOCK_TSC_UNSTABLE (1 << 7) 424*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA (1 << 8) 425*8d67ca89SAndroid Build Coastguard Worker struct kvm_xen_hvm_config { 426*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 427*8d67ca89SAndroid Build Coastguard Worker __u32 msr; 428*8d67ca89SAndroid Build Coastguard Worker __u64 blob_addr_32; 429*8d67ca89SAndroid Build Coastguard Worker __u64 blob_addr_64; 430*8d67ca89SAndroid Build Coastguard Worker __u8 blob_size_32; 431*8d67ca89SAndroid Build Coastguard Worker __u8 blob_size_64; 432*8d67ca89SAndroid Build Coastguard Worker __u8 pad2[30]; 433*8d67ca89SAndroid Build Coastguard Worker }; 434*8d67ca89SAndroid Build Coastguard Worker struct kvm_xen_hvm_attr { 435*8d67ca89SAndroid Build Coastguard Worker __u16 type; 436*8d67ca89SAndroid Build Coastguard Worker __u16 pad[3]; 437*8d67ca89SAndroid Build Coastguard Worker union { 438*8d67ca89SAndroid Build Coastguard Worker __u8 long_mode; 439*8d67ca89SAndroid Build Coastguard Worker __u8 vector; 440*8d67ca89SAndroid Build Coastguard Worker __u8 runstate_update_flag; 441*8d67ca89SAndroid Build Coastguard Worker union { 442*8d67ca89SAndroid Build Coastguard Worker __u64 gfn; 443*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_INVALID_GFN ((__u64) - 1) 444*8d67ca89SAndroid Build Coastguard Worker __u64 hva; 445*8d67ca89SAndroid Build Coastguard Worker } shared_info; 446*8d67ca89SAndroid Build Coastguard Worker struct { 447*8d67ca89SAndroid Build Coastguard Worker __u32 send_port; 448*8d67ca89SAndroid Build Coastguard Worker __u32 type; 449*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 450*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_EVTCHN_DEASSIGN (1 << 0) 451*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_EVTCHN_UPDATE (1 << 1) 452*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_EVTCHN_RESET (1 << 2) 453*8d67ca89SAndroid Build Coastguard Worker union { 454*8d67ca89SAndroid Build Coastguard Worker struct { 455*8d67ca89SAndroid Build Coastguard Worker __u32 port; 456*8d67ca89SAndroid Build Coastguard Worker __u32 vcpu; 457*8d67ca89SAndroid Build Coastguard Worker __u32 priority; 458*8d67ca89SAndroid Build Coastguard Worker } port; 459*8d67ca89SAndroid Build Coastguard Worker struct { 460*8d67ca89SAndroid Build Coastguard Worker __u32 port; 461*8d67ca89SAndroid Build Coastguard Worker __s32 fd; 462*8d67ca89SAndroid Build Coastguard Worker } eventfd; 463*8d67ca89SAndroid Build Coastguard Worker __u32 padding[4]; 464*8d67ca89SAndroid Build Coastguard Worker } deliver; 465*8d67ca89SAndroid Build Coastguard Worker } evtchn; 466*8d67ca89SAndroid Build Coastguard Worker __u32 xen_version; 467*8d67ca89SAndroid Build Coastguard Worker __u64 pad[8]; 468*8d67ca89SAndroid Build Coastguard Worker } u; 469*8d67ca89SAndroid Build Coastguard Worker }; 470*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_LONG_MODE 0x0 471*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_SHARED_INFO 0x1 472*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_UPCALL_VECTOR 0x2 473*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_EVTCHN 0x3 474*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_XEN_VERSION 0x4 475*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_RUNSTATE_UPDATE_FLAG 0x5 476*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_ATTR_TYPE_SHARED_INFO_HVA 0x6 477*8d67ca89SAndroid Build Coastguard Worker struct kvm_xen_vcpu_attr { 478*8d67ca89SAndroid Build Coastguard Worker __u16 type; 479*8d67ca89SAndroid Build Coastguard Worker __u16 pad[3]; 480*8d67ca89SAndroid Build Coastguard Worker union { 481*8d67ca89SAndroid Build Coastguard Worker __u64 gpa; 482*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_INVALID_GPA ((__u64) - 1) 483*8d67ca89SAndroid Build Coastguard Worker __u64 hva; 484*8d67ca89SAndroid Build Coastguard Worker __u64 pad[8]; 485*8d67ca89SAndroid Build Coastguard Worker struct { 486*8d67ca89SAndroid Build Coastguard Worker __u64 state; 487*8d67ca89SAndroid Build Coastguard Worker __u64 state_entry_time; 488*8d67ca89SAndroid Build Coastguard Worker __u64 time_running; 489*8d67ca89SAndroid Build Coastguard Worker __u64 time_runnable; 490*8d67ca89SAndroid Build Coastguard Worker __u64 time_blocked; 491*8d67ca89SAndroid Build Coastguard Worker __u64 time_offline; 492*8d67ca89SAndroid Build Coastguard Worker } runstate; 493*8d67ca89SAndroid Build Coastguard Worker __u32 vcpu_id; 494*8d67ca89SAndroid Build Coastguard Worker struct { 495*8d67ca89SAndroid Build Coastguard Worker __u32 port; 496*8d67ca89SAndroid Build Coastguard Worker __u32 priority; 497*8d67ca89SAndroid Build Coastguard Worker __u64 expires_ns; 498*8d67ca89SAndroid Build Coastguard Worker } timer; 499*8d67ca89SAndroid Build Coastguard Worker __u8 vector; 500*8d67ca89SAndroid Build Coastguard Worker } u; 501*8d67ca89SAndroid Build Coastguard Worker }; 502*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO 0x0 503*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO 0x1 504*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR 0x2 505*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT 0x3 506*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA 0x4 507*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST 0x5 508*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID 0x6 509*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_TIMER 0x7 510*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_UPCALL_VECTOR 0x8 511*8d67ca89SAndroid Build Coastguard Worker #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO_HVA 0x9 512*8d67ca89SAndroid Build Coastguard Worker enum sev_cmd_id { 513*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_INIT = 0, 514*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_ES_INIT, 515*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_START, 516*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_UPDATE_DATA, 517*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_UPDATE_VMSA, 518*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_SECRET, 519*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_MEASURE, 520*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_LAUNCH_FINISH, 521*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SEND_START, 522*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SEND_UPDATE_DATA, 523*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SEND_UPDATE_VMSA, 524*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SEND_FINISH, 525*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_RECEIVE_START, 526*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_RECEIVE_UPDATE_DATA, 527*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_RECEIVE_UPDATE_VMSA, 528*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_RECEIVE_FINISH, 529*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_GUEST_STATUS, 530*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_DBG_DECRYPT, 531*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_DBG_ENCRYPT, 532*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_CERT_EXPORT, 533*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_GET_ATTESTATION_REPORT, 534*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SEND_CANCEL, 535*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_INIT2, 536*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SNP_LAUNCH_START = 100, 537*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SNP_LAUNCH_UPDATE, 538*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_SNP_LAUNCH_FINISH, 539*8d67ca89SAndroid Build Coastguard Worker KVM_SEV_NR_MAX, 540*8d67ca89SAndroid Build Coastguard Worker }; 541*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_cmd { 542*8d67ca89SAndroid Build Coastguard Worker __u32 id; 543*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 544*8d67ca89SAndroid Build Coastguard Worker __u64 data; 545*8d67ca89SAndroid Build Coastguard Worker __u32 error; 546*8d67ca89SAndroid Build Coastguard Worker __u32 sev_fd; 547*8d67ca89SAndroid Build Coastguard Worker }; 548*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_init { 549*8d67ca89SAndroid Build Coastguard Worker __u64 vmsa_features; 550*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 551*8d67ca89SAndroid Build Coastguard Worker __u16 ghcb_version; 552*8d67ca89SAndroid Build Coastguard Worker __u16 pad1; 553*8d67ca89SAndroid Build Coastguard Worker __u32 pad2[8]; 554*8d67ca89SAndroid Build Coastguard Worker }; 555*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_launch_start { 556*8d67ca89SAndroid Build Coastguard Worker __u32 handle; 557*8d67ca89SAndroid Build Coastguard Worker __u32 policy; 558*8d67ca89SAndroid Build Coastguard Worker __u64 dh_uaddr; 559*8d67ca89SAndroid Build Coastguard Worker __u32 dh_len; 560*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 561*8d67ca89SAndroid Build Coastguard Worker __u64 session_uaddr; 562*8d67ca89SAndroid Build Coastguard Worker __u32 session_len; 563*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 564*8d67ca89SAndroid Build Coastguard Worker }; 565*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_launch_update_data { 566*8d67ca89SAndroid Build Coastguard Worker __u64 uaddr; 567*8d67ca89SAndroid Build Coastguard Worker __u32 len; 568*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 569*8d67ca89SAndroid Build Coastguard Worker }; 570*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_launch_secret { 571*8d67ca89SAndroid Build Coastguard Worker __u64 hdr_uaddr; 572*8d67ca89SAndroid Build Coastguard Worker __u32 hdr_len; 573*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 574*8d67ca89SAndroid Build Coastguard Worker __u64 guest_uaddr; 575*8d67ca89SAndroid Build Coastguard Worker __u32 guest_len; 576*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 577*8d67ca89SAndroid Build Coastguard Worker __u64 trans_uaddr; 578*8d67ca89SAndroid Build Coastguard Worker __u32 trans_len; 579*8d67ca89SAndroid Build Coastguard Worker __u32 pad2; 580*8d67ca89SAndroid Build Coastguard Worker }; 581*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_launch_measure { 582*8d67ca89SAndroid Build Coastguard Worker __u64 uaddr; 583*8d67ca89SAndroid Build Coastguard Worker __u32 len; 584*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 585*8d67ca89SAndroid Build Coastguard Worker }; 586*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_guest_status { 587*8d67ca89SAndroid Build Coastguard Worker __u32 handle; 588*8d67ca89SAndroid Build Coastguard Worker __u32 policy; 589*8d67ca89SAndroid Build Coastguard Worker __u32 state; 590*8d67ca89SAndroid Build Coastguard Worker }; 591*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_dbg { 592*8d67ca89SAndroid Build Coastguard Worker __u64 src_uaddr; 593*8d67ca89SAndroid Build Coastguard Worker __u64 dst_uaddr; 594*8d67ca89SAndroid Build Coastguard Worker __u32 len; 595*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 596*8d67ca89SAndroid Build Coastguard Worker }; 597*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_attestation_report { 598*8d67ca89SAndroid Build Coastguard Worker __u8 mnonce[16]; 599*8d67ca89SAndroid Build Coastguard Worker __u64 uaddr; 600*8d67ca89SAndroid Build Coastguard Worker __u32 len; 601*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 602*8d67ca89SAndroid Build Coastguard Worker }; 603*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_send_start { 604*8d67ca89SAndroid Build Coastguard Worker __u32 policy; 605*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 606*8d67ca89SAndroid Build Coastguard Worker __u64 pdh_cert_uaddr; 607*8d67ca89SAndroid Build Coastguard Worker __u32 pdh_cert_len; 608*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 609*8d67ca89SAndroid Build Coastguard Worker __u64 plat_certs_uaddr; 610*8d67ca89SAndroid Build Coastguard Worker __u32 plat_certs_len; 611*8d67ca89SAndroid Build Coastguard Worker __u32 pad2; 612*8d67ca89SAndroid Build Coastguard Worker __u64 amd_certs_uaddr; 613*8d67ca89SAndroid Build Coastguard Worker __u32 amd_certs_len; 614*8d67ca89SAndroid Build Coastguard Worker __u32 pad3; 615*8d67ca89SAndroid Build Coastguard Worker __u64 session_uaddr; 616*8d67ca89SAndroid Build Coastguard Worker __u32 session_len; 617*8d67ca89SAndroid Build Coastguard Worker __u32 pad4; 618*8d67ca89SAndroid Build Coastguard Worker }; 619*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_send_update_data { 620*8d67ca89SAndroid Build Coastguard Worker __u64 hdr_uaddr; 621*8d67ca89SAndroid Build Coastguard Worker __u32 hdr_len; 622*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 623*8d67ca89SAndroid Build Coastguard Worker __u64 guest_uaddr; 624*8d67ca89SAndroid Build Coastguard Worker __u32 guest_len; 625*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 626*8d67ca89SAndroid Build Coastguard Worker __u64 trans_uaddr; 627*8d67ca89SAndroid Build Coastguard Worker __u32 trans_len; 628*8d67ca89SAndroid Build Coastguard Worker __u32 pad2; 629*8d67ca89SAndroid Build Coastguard Worker }; 630*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_receive_start { 631*8d67ca89SAndroid Build Coastguard Worker __u32 handle; 632*8d67ca89SAndroid Build Coastguard Worker __u32 policy; 633*8d67ca89SAndroid Build Coastguard Worker __u64 pdh_uaddr; 634*8d67ca89SAndroid Build Coastguard Worker __u32 pdh_len; 635*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 636*8d67ca89SAndroid Build Coastguard Worker __u64 session_uaddr; 637*8d67ca89SAndroid Build Coastguard Worker __u32 session_len; 638*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 639*8d67ca89SAndroid Build Coastguard Worker }; 640*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_receive_update_data { 641*8d67ca89SAndroid Build Coastguard Worker __u64 hdr_uaddr; 642*8d67ca89SAndroid Build Coastguard Worker __u32 hdr_len; 643*8d67ca89SAndroid Build Coastguard Worker __u32 pad0; 644*8d67ca89SAndroid Build Coastguard Worker __u64 guest_uaddr; 645*8d67ca89SAndroid Build Coastguard Worker __u32 guest_len; 646*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 647*8d67ca89SAndroid Build Coastguard Worker __u64 trans_uaddr; 648*8d67ca89SAndroid Build Coastguard Worker __u32 trans_len; 649*8d67ca89SAndroid Build Coastguard Worker __u32 pad2; 650*8d67ca89SAndroid Build Coastguard Worker }; 651*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_snp_launch_start { 652*8d67ca89SAndroid Build Coastguard Worker __u64 policy; 653*8d67ca89SAndroid Build Coastguard Worker __u8 gosvw[16]; 654*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 655*8d67ca89SAndroid Build Coastguard Worker __u8 pad0[6]; 656*8d67ca89SAndroid Build Coastguard Worker __u64 pad1[4]; 657*8d67ca89SAndroid Build Coastguard Worker }; 658*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_PAGE_TYPE_NORMAL 0x1 659*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_PAGE_TYPE_ZERO 0x3 660*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_PAGE_TYPE_UNMEASURED 0x4 661*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_PAGE_TYPE_SECRETS 0x5 662*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_PAGE_TYPE_CPUID 0x6 663*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_snp_launch_update { 664*8d67ca89SAndroid Build Coastguard Worker __u64 gfn_start; 665*8d67ca89SAndroid Build Coastguard Worker __u64 uaddr; 666*8d67ca89SAndroid Build Coastguard Worker __u64 len; 667*8d67ca89SAndroid Build Coastguard Worker __u8 type; 668*8d67ca89SAndroid Build Coastguard Worker __u8 pad0; 669*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 670*8d67ca89SAndroid Build Coastguard Worker __u32 pad1; 671*8d67ca89SAndroid Build Coastguard Worker __u64 pad2[4]; 672*8d67ca89SAndroid Build Coastguard Worker }; 673*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_ID_BLOCK_SIZE 96 674*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_ID_AUTH_SIZE 4096 675*8d67ca89SAndroid Build Coastguard Worker #define KVM_SEV_SNP_FINISH_DATA_SIZE 32 676*8d67ca89SAndroid Build Coastguard Worker struct kvm_sev_snp_launch_finish { 677*8d67ca89SAndroid Build Coastguard Worker __u64 id_block_uaddr; 678*8d67ca89SAndroid Build Coastguard Worker __u64 id_auth_uaddr; 679*8d67ca89SAndroid Build Coastguard Worker __u8 id_block_en; 680*8d67ca89SAndroid Build Coastguard Worker __u8 auth_key_en; 681*8d67ca89SAndroid Build Coastguard Worker __u8 vcek_disabled; 682*8d67ca89SAndroid Build Coastguard Worker __u8 host_data[KVM_SEV_SNP_FINISH_DATA_SIZE]; 683*8d67ca89SAndroid Build Coastguard Worker __u8 pad0[3]; 684*8d67ca89SAndroid Build Coastguard Worker __u16 flags; 685*8d67ca89SAndroid Build Coastguard Worker __u64 pad1[4]; 686*8d67ca89SAndroid Build Coastguard Worker }; 687*8d67ca89SAndroid Build Coastguard Worker #define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0) 688*8d67ca89SAndroid Build Coastguard Worker #define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1) 689*8d67ca89SAndroid Build Coastguard Worker struct kvm_hyperv_eventfd { 690*8d67ca89SAndroid Build Coastguard Worker __u32 conn_id; 691*8d67ca89SAndroid Build Coastguard Worker __s32 fd; 692*8d67ca89SAndroid Build Coastguard Worker __u32 flags; 693*8d67ca89SAndroid Build Coastguard Worker __u32 padding[3]; 694*8d67ca89SAndroid Build Coastguard Worker }; 695*8d67ca89SAndroid Build Coastguard Worker #define KVM_HYPERV_CONN_ID_MASK 0x00ffffff 696*8d67ca89SAndroid Build Coastguard Worker #define KVM_HYPERV_EVENTFD_DEASSIGN (1 << 0) 697*8d67ca89SAndroid Build Coastguard Worker #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)) 698*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_MASKED_ENTRY_EVENT_SELECT (__GENMASK_ULL(7, 0) | __GENMASK_ULL(35, 32)) 699*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_MASKED_ENTRY_UMASK_MASK (__GENMASK_ULL(63, 56)) 700*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_MASKED_ENTRY_UMASK_MATCH (__GENMASK_ULL(15, 8)) 701*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_MASKED_ENTRY_EXCLUDE (_BITULL(55)) 702*8d67ca89SAndroid Build Coastguard Worker #define KVM_PMU_MASKED_ENTRY_UMASK_MASK_SHIFT (56) 703*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPU_TSC_CTRL 0 704*8d67ca89SAndroid Build Coastguard Worker #define KVM_VCPU_TSC_OFFSET 0 705*8d67ca89SAndroid Build Coastguard Worker #define KVM_EXIT_HYPERCALL_LONG_MODE _BITULL(0) 706*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_DEFAULT_VM 0 707*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SW_PROTECTED_VM 1 708*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SEV_VM 2 709*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SEV_ES_VM 3 710*8d67ca89SAndroid Build Coastguard Worker #define KVM_X86_SNP_VM 4 711*8d67ca89SAndroid Build Coastguard Worker #endif 712