use crate::arch::tdx::TdAttr;
use crate::sys::kvm::{KVM_MAX_CPUID_ENTRIES, KvmCpuid2};
use crate::{bitflags, consts};
consts! {
#[derive(Default)]
pub struct KvmTdxCmdId(u32) {
CAPABILITIES = 0;
INIT_VM = 1;
INIT_VCPU = 2;
INIT_MEM_REGION = 3;
FINALIZE_VM = 4;
GET_CPUID = 5;
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct KvmTdxCmd {
pub id: KvmTdxCmdId,
pub flags: u32,
pub data: u64,
pub hw_error: u64,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct KvmTdxCapabilities<const N: usize = KVM_MAX_CPUID_ENTRIES> {
pub supported_attrs: TdAttr,
pub supported_xfam: u64,
pub kernel_tdvmcallinfo_1_r11: u64,
pub user_tdvmcallinfo_1_r11: u64,
pub kernel_tdvmcallinfo_1_r12: u64,
pub user_tdvmcallinfo_1_r12: u64,
pub reserved: [u64; 250],
pub cpuid: KvmCpuid2<N>,
}
#[repr(C)]
#[derive(Debug, Clone)]
pub struct KvmTdxInitVm<const N: usize = KVM_MAX_CPUID_ENTRIES> {
pub attributes: TdAttr,
pub xfam: u64,
pub mrconfigid: [u8; 48],
pub mrowner: [u8; 48],
pub mrownerconfig: [u8; 48],
pub reserved: [u64; 12],
pub cpuid: KvmCpuid2<N>,
}
#[repr(C)]
#[derive(Debug, Copy, Clone, Default)]
pub struct KvmTdxInitMemRegion {
pub source_addr: u64,
pub gpa: u64,
pub nr_pages: u64,
}
bitflags! {
pub struct KvmTdxInitMemRegionFlag(u32) {
MEASURE_MEMORY_REGION = 1 << 0;
}
}