use crate::hv::Result;
use crate::hv::kvm::vcpu::KvmVcpu;
use crate::hv::kvm::x86_64::tdx::tdx_op;
use crate::sys::tdx::{KvmTdxCmdId, KvmTdxInitMemRegion, KvmTdxInitMemRegionFlag};
impl KvmVcpu {
pub fn tdx_init_mem_region(&self, data: &[u8], gpa: u64, measure: bool) -> Result<()> {
let mut region = KvmTdxInitMemRegion {
source_addr: data.as_ptr() as u64,
nr_pages: data.len() as u64 >> 12,
gpa,
};
let flag = if measure {
KvmTdxInitMemRegionFlag::MEASURE_MEMORY_REGION
} else {
KvmTdxInitMemRegionFlag::empty()
};
tdx_op(
&self.fd,
KvmTdxCmdId::INIT_MEM_REGION,
flag.bits(),
Some(&mut region),
)
}
pub fn tdx_init_vcpu(&self, mut hob: u64) -> Result<()> {
tdx_op(&self.fd, KvmTdxCmdId::INIT_VCPU, 0, Some(&mut hob))
}
}