use zerocopy::FromBytes;
use zerocopy::Immutable;
use zerocopy::IntoBytes;
use zerocopy::KnownLayout;
#[repr(transparent)]
#[derive(Debug, Clone, Copy, IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevEventInjectInfo(pub u64);
#[repr(C)]
#[derive(Debug, Clone, Copy, IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevSelector {
pub selector: u16,
pub attrib: u16,
pub limit: u32,
pub base: u64,
}
#[repr(C)]
#[derive(Debug, Clone, Copy, IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevXmmRegister {
pub low: u64,
pub high: u64,
}
#[bitfield_struct::bitfield(u64)]
#[derive(IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevFeatures {
pub snp: bool,
pub vtom: bool,
pub reflect_vc: bool,
pub restrict_injection: bool,
pub alternate_injection: bool,
pub debug_swap: bool,
pub prevent_host_ibs: bool,
pub snp_btb_isolation: bool,
pub vmpl_supervisor_shadow_stack: bool,
pub secure_tsc: bool,
#[bits(4)]
_reserved1: u8,
pub vmsa_reg_protection: bool,
pub smt_protection: bool,
#[bits(48)]
_reserved2: u64,
}
#[repr(transparent)]
#[derive(Debug, Clone, Copy, IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevVirtualInterruptControl(pub u64);
#[repr(C)]
#[derive(Debug, Clone, Copy, IntoBytes, Immutable, KnownLayout, FromBytes, PartialEq, Eq)]
pub struct SevVmsa {
pub es: SevSelector,
pub cs: SevSelector,
pub ss: SevSelector,
pub ds: SevSelector,
pub fs: SevSelector,
pub gs: SevSelector,
pub gdtr: SevSelector,
pub ldtr: SevSelector,
pub idtr: SevSelector,
pub tr: SevSelector,
pub pl0_ssp: u64,
pub pl1_ssp: u64,
pub pl2_ssp: u64,
pub pl3_ssp: u64,
pub u_cet: u64,
pub vmsa_reserved1: [u8; 2],
pub vmpl: u8,
pub cpl: u8,
pub vmsa_reserved2: u32,
pub efer: u64,
pub vmsa_reserved3: [u32; 26],
pub xss: u64,
pub cr4: u64,
pub cr3: u64,
pub cr0: u64,
pub dr7: u64,
pub dr6: u64,
pub rflags: u64,
pub rip: u64,
pub dr0: u64,
pub dr1: u64,
pub dr2: u64,
pub dr3: u64,
pub dr0_addr_mask: u64,
pub dr1_addr_mask: u64,
pub dr2_addr_mask: u64,
pub dr3_addr_mask: u64,
pub vmsa_reserved4: [u64; 3],
pub rsp: u64,
pub s_cet: u64,
pub ssp: u64,
pub interrupt_ssp_table_addr: u64,
pub rax: u64,
pub star: u64,
pub lstar: u64,
pub cstar: u64,
pub sfmask: u64,
pub kernel_gs_base: u64,
pub sysenter_cs: u64,
pub sysenter_esp: u64,
pub sysenter_eip: u64,
pub cr2: u64,
pub vmsa_reserved5: [u64; 4],
pub pat: u64,
pub dbgctl: u64,
pub last_branch_from_ip: u64,
pub last_branch_to_ip: u64,
pub last_excp_from_ip: u64,
pub last_excp_to_ip: u64,
pub vmsa_reserved6: [u64; 9],
pub spec_ctrl: u64,
pub vmsa_reserved7: [u32; 8],
pub rcx: u64,
pub rdx: u64,
pub rbx: u64,
pub vmsa_reserved8: u64, pub rbp: u64,
pub rsi: u64,
pub rdi: u64,
pub r8: u64,
pub r9: u64,
pub r10: u64,
pub r11: u64,
pub r12: u64,
pub r13: u64,
pub r14: u64,
pub r15: u64,
pub vmsa_reserved9: [u64; 2],
pub exit_info1: u64,
pub exit_info2: u64,
pub exit_int_info: u64,
pub next_rip: u64,
pub sev_features: SevFeatures,
pub v_intr_cntrl: SevVirtualInterruptControl,
pub guest_error_code: u64,
pub virtual_tom: u64,
pub tlb_id: u64,
pub pcpu_id: u64,
pub event_inject: SevEventInjectInfo,
pub xcr0: u64,
pub xsave_valid_bitmap: [u8; 16],
pub x87dp: u64,
pub mxcsr: u32,
pub x87_ftw: u16,
pub x87_fsw: u16,
pub x87_fcw: u16,
pub x87_op: u16,
pub x87_ds: u16,
pub x87_cs: u16,
pub x87_rip: u64,
pub x87_registers1: [u8; 32],
pub x87_registers2: [u8; 32],
pub x87_registers3: [u8; 16],
pub xmm_registers: [SevXmmRegister; 16],
pub ymm_registers: [SevXmmRegister; 16],
}