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