mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-03 05:10:55 +00:00
krata: more work on arm64 support
This commit is contained in:
parent
f4af71cb2f
commit
5c7f81a261
@ -99,11 +99,11 @@ pub const HYPERVISOR_XC_RESERVED_OP: c_ulong = 39;
|
|||||||
pub const HYPERVISOR_XENPMU_OP: c_ulong = 40;
|
pub const HYPERVISOR_XENPMU_OP: c_ulong = 40;
|
||||||
pub const HYPERVISOR_DM_OP: c_ulong = 41;
|
pub const HYPERVISOR_DM_OP: c_ulong = 41;
|
||||||
|
|
||||||
pub const XEN_DOMCTL_CDF_HVM_GUEST: u32 = 1 << 0;
|
pub const XEN_DOMCTL_CDF_HVM_GUEST: u32 = 1u32 << 0;
|
||||||
pub const XEN_DOMCTL_CDF_HAP: u32 = 1 << 1;
|
pub const XEN_DOMCTL_CDF_HAP: u32 = 1u32 << 1;
|
||||||
pub const XEN_DOMCTL_CDF_S3_INTEGRITY: u32 = 1 << 2;
|
pub const XEN_DOMCTL_CDF_S3_INTEGRITY: u32 = 1u32 << 2;
|
||||||
pub const XEN_DOMCTL_CDF_OOS_OFF: u32 = 1 << 3;
|
pub const XEN_DOMCTL_CDF_OOS_OFF: u32 = 1u32 << 3;
|
||||||
pub const XEN_DOMCTL_CDF_XS_DOMAIN: u32 = 1 << 4;
|
pub const XEN_DOMCTL_CDF_XS_DOMAIN: u32 = 1u32 << 4;
|
||||||
|
|
||||||
pub const XEN_X86_EMU_LAPIC: u32 = 1 << 0;
|
pub const XEN_X86_EMU_LAPIC: u32 = 1 << 0;
|
||||||
pub const XEN_X86_EMU_HPET: u32 = 1 << 1;
|
pub const XEN_X86_EMU_HPET: u32 = 1 << 1;
|
||||||
@ -323,8 +323,8 @@ pub struct ArchDomainConfig {
|
|||||||
pub struct ArchDomainConfig {
|
pub struct ArchDomainConfig {
|
||||||
pub gic_version: u8,
|
pub gic_version: u8,
|
||||||
pub sve_v1: u8,
|
pub sve_v1: u8,
|
||||||
pub tee_type: u8,
|
pub tee_type: u16,
|
||||||
pub nr_spis: u8,
|
pub nr_spis: u32,
|
||||||
pub clock_frequency: u32,
|
pub clock_frequency: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,11 +7,15 @@ pub mod sys;
|
|||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
pub mod x86;
|
pub mod x86;
|
||||||
|
|
||||||
|
#[cfg(target_arch = "x86_64")]
|
||||||
|
use crate::x86::X86BootSetup;
|
||||||
|
|
||||||
#[cfg(target_arch = "aarch64")]
|
#[cfg(target_arch = "aarch64")]
|
||||||
pub mod arm64;
|
pub mod arm64;
|
||||||
|
|
||||||
#[cfg(target_arch = "aarch64")]
|
#[cfg(target_arch = "aarch64")]
|
||||||
use crate::arm64::Arm64BootSetup;
|
use crate::arm64::Arm64BootSetup;
|
||||||
|
|
||||||
use crate::boot::BootSetup;
|
use crate::boot::BootSetup;
|
||||||
use crate::elfloader::ElfImageLoader;
|
use crate::elfloader::ElfImageLoader;
|
||||||
use crate::error::{Error, Result};
|
use crate::error::{Error, Result};
|
||||||
@ -23,7 +27,7 @@ use std::str::FromStr;
|
|||||||
use std::thread;
|
use std::thread;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use uuid::Uuid;
|
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 xencall::XenCall;
|
||||||
use xenstore::{
|
use xenstore::{
|
||||||
XsPermission, XsdClient, XsdInterface, XS_PERM_NONE, XS_PERM_READ, XS_PERM_READ_WRITE,
|
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<u32> {
|
pub async fn create(&mut self, config: &DomainConfig<'_>) -> Result<u32> {
|
||||||
let domain = CreateDomain {
|
let mut domain = CreateDomain {
|
||||||
max_vcpus: config.max_vcpus,
|
max_vcpus: config.max_vcpus,
|
||||||
#[cfg(target_arch = "aarch64")]
|
|
||||||
flags: XEN_DOMCTL_CDF_HVM_GUEST,
|
|
||||||
..Default::default()
|
..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)?;
|
let domid = self.call.create_domain(domain)?;
|
||||||
match self.init(domid, &domain, config).await {
|
match self.init(domid, &domain, config).await {
|
||||||
Ok(_) => Ok(domid),
|
Ok(_) => Ok(domid),
|
||||||
@ -460,7 +466,7 @@ impl XenClient {
|
|||||||
domid: u32,
|
domid: u32,
|
||||||
index: usize,
|
index: usize,
|
||||||
port: Option<u32>,
|
port: Option<u32>,
|
||||||
mfn: Option<u64>,
|
ring: Option<u64>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut backend_entries = vec![
|
let mut backend_entries = vec![
|
||||||
("frontend-id", domid.to_string()),
|
("frontend-id", domid.to_string()),
|
||||||
@ -484,10 +490,10 @@ impl XenClient {
|
|||||||
backend_entries.push(("output", "pty".to_string()));
|
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(&[
|
frontend_entries.extend_from_slice(&[
|
||||||
("port", port.unwrap().to_string()),
|
("port", port.unwrap().to_string()),
|
||||||
("ring-ref", mfn.unwrap().to_string()),
|
("ring-ref", ring.unwrap().to_string()),
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
frontend_entries.extend_from_slice(&[
|
frontend_entries.extend_from_slice(&[
|
||||||
|
Loading…
Reference in New Issue
Block a user