diff --git a/crates/xen/xencall/src/sys.rs b/crates/xen/xencall/src/sys.rs index 3322952..3022df4 100644 --- a/crates/xen/xencall/src/sys.rs +++ b/crates/xen/xencall/src/sys.rs @@ -99,11 +99,11 @@ pub const HYPERVISOR_XC_RESERVED_OP: c_ulong = 39; pub const HYPERVISOR_XENPMU_OP: c_ulong = 40; pub const HYPERVISOR_DM_OP: c_ulong = 41; -pub const XEN_DOMCTL_CDF_HVM_GUEST: u32 = 1 << 0; -pub const XEN_DOMCTL_CDF_HAP: u32 = 1 << 1; -pub const XEN_DOMCTL_CDF_S3_INTEGRITY: u32 = 1 << 2; -pub const XEN_DOMCTL_CDF_OOS_OFF: u32 = 1 << 3; -pub const XEN_DOMCTL_CDF_XS_DOMAIN: u32 = 1 << 4; +pub const XEN_DOMCTL_CDF_HVM_GUEST: u32 = 1u32 << 0; +pub const XEN_DOMCTL_CDF_HAP: u32 = 1u32 << 1; +pub const XEN_DOMCTL_CDF_S3_INTEGRITY: u32 = 1u32 << 2; +pub const XEN_DOMCTL_CDF_OOS_OFF: u32 = 1u32 << 3; +pub const XEN_DOMCTL_CDF_XS_DOMAIN: u32 = 1u32 << 4; pub const XEN_X86_EMU_LAPIC: u32 = 1 << 0; pub const XEN_X86_EMU_HPET: u32 = 1 << 1; @@ -323,8 +323,8 @@ pub struct ArchDomainConfig { pub struct ArchDomainConfig { pub gic_version: u8, pub sve_v1: u8, - pub tee_type: u8, - pub nr_spis: u8, + pub tee_type: u16, + pub nr_spis: u32, pub clock_frequency: u32, } diff --git a/crates/xen/xenclient/src/lib.rs b/crates/xen/xenclient/src/lib.rs index ab112f1..29e5f5c 100644 --- a/crates/xen/xenclient/src/lib.rs +++ b/crates/xen/xenclient/src/lib.rs @@ -7,11 +7,15 @@ pub mod sys; #[cfg(target_arch = "x86_64")] pub mod x86; +#[cfg(target_arch = "x86_64")] +use crate::x86::X86BootSetup; + #[cfg(target_arch = "aarch64")] pub mod arm64; #[cfg(target_arch = "aarch64")] use crate::arm64::Arm64BootSetup; + use crate::boot::BootSetup; use crate::elfloader::ElfImageLoader; use crate::error::{Error, Result}; @@ -23,7 +27,7 @@ use std::str::FromStr; use std::thread; use std::time::Duration; use uuid::Uuid; -use xencall::sys::{CreateDomain, XEN_DOMCTL_CDF_HVM_GUEST}; +use xencall::sys::{CreateDomain, XEN_DOMCTL_CDF_HAP, XEN_DOMCTL_CDF_HVM_GUEST}; use xencall::XenCall; use xenstore::{ XsPermission, XsdClient, XsdInterface, XS_PERM_NONE, XS_PERM_READ, XS_PERM_READ_WRITE, @@ -96,13 +100,15 @@ impl XenClient { } pub async fn create(&mut self, config: &DomainConfig<'_>) -> Result { - let domain = CreateDomain { + let mut domain = CreateDomain { max_vcpus: config.max_vcpus, - #[cfg(target_arch = "aarch64")] - flags: XEN_DOMCTL_CDF_HVM_GUEST, ..Default::default() }; + if cfg!(target_arch = "aarch64") { + domain.flags = XEN_DOMCTL_CDF_HVM_GUEST | XEN_DOMCTL_CDF_HAP; + } + let domid = self.call.create_domain(domain)?; match self.init(domid, &domain, config).await { Ok(_) => Ok(domid), @@ -460,7 +466,7 @@ impl XenClient { domid: u32, index: usize, port: Option, - mfn: Option, + ring: Option, ) -> Result<()> { let mut backend_entries = vec![ ("frontend-id", domid.to_string()), @@ -484,10 +490,10 @@ impl XenClient { backend_entries.push(("output", "pty".to_string())); } - if port.is_some() && mfn.is_some() { + if port.is_some() && ring.is_some() { frontend_entries.extend_from_slice(&[ ("port", port.unwrap().to_string()), - ("ring-ref", mfn.unwrap().to_string()), + ("ring-ref", ring.unwrap().to_string()), ]); } else { frontend_entries.extend_from_slice(&[