From 433cc7dfb7183c545c2de803be5a2d98a3c8ee70 Mon Sep 17 00:00:00 2001 From: bunnie Date: Thu, 2 May 2024 22:16:55 +0800 Subject: [PATCH] add platform dependent implementations this allows us to get rid of traits. woo! --- .../xous-swapper/src/platform/cramium/hw.rs | 14 ++++++++++++++ .../xous-swapper/src/platform/cramium/mod.rs | 1 + services/xous-swapper/src/platform/mod.rs | 9 +++++++++ .../xous-swapper/src/platform/precursor/hw.rs | 18 ++++++++++++++++++ .../xous-swapper/src/platform/precursor/mod.rs | 1 + 5 files changed, 43 insertions(+) create mode 100644 services/xous-swapper/src/platform/cramium/hw.rs create mode 100644 services/xous-swapper/src/platform/cramium/mod.rs create mode 100644 services/xous-swapper/src/platform/mod.rs create mode 100644 services/xous-swapper/src/platform/precursor/hw.rs create mode 100644 services/xous-swapper/src/platform/precursor/mod.rs diff --git a/services/xous-swapper/src/platform/cramium/hw.rs b/services/xous-swapper/src/platform/cramium/hw.rs new file mode 100644 index 000000000..b903030c9 --- /dev/null +++ b/services/xous-swapper/src/platform/cramium/hw.rs @@ -0,0 +1,14 @@ +/// This is an implementation for SMTs that are accessible only through a SPI +/// register interface. The base and bounds must be translated to SPI accesses +/// in a hardware-specific manner. +pub struct SwapMac { + pub base: usize, + pub bounds: usize, +} +impl SwapMac { + pub fn new(base: usize, bounds: usize) -> Self { SwapMac { base, bounds } } + + pub fn lookup_mac(&self, swap_page_offset: usize) -> [u8; 16] { todo!() } + + pub fn store_mac(&mut self, swap_page_offset: usize, mac: &[u8; 16]) { todo!() } +} diff --git a/services/xous-swapper/src/platform/cramium/mod.rs b/services/xous-swapper/src/platform/cramium/mod.rs new file mode 100644 index 000000000..e21a96e0a --- /dev/null +++ b/services/xous-swapper/src/platform/cramium/mod.rs @@ -0,0 +1 @@ +pub mod hw; diff --git a/services/xous-swapper/src/platform/mod.rs b/services/xous-swapper/src/platform/mod.rs new file mode 100644 index 000000000..701b9c807 --- /dev/null +++ b/services/xous-swapper/src/platform/mod.rs @@ -0,0 +1,9 @@ +#[cfg(any(feature = "cramium-soc"))] +pub mod cramium; +#[cfg(any(feature = "cramium-soc"))] +pub use cramium::hw::*; + +#[cfg(any(feature = "precursor", feature = "renode"))] +pub mod precursor; +#[cfg(any(feature = "precursor", feature = "renode"))] +pub use precursor::hw::*; diff --git a/services/xous-swapper/src/platform/precursor/hw.rs b/services/xous-swapper/src/platform/precursor/hw.rs new file mode 100644 index 000000000..e614c1247 --- /dev/null +++ b/services/xous-swapper/src/platform/precursor/hw.rs @@ -0,0 +1,18 @@ +/// This defines a set of functions to get and receive MACs (message +/// authentication codes, also referred to as the tag in AES-GCM-SIV. +pub struct SwapMac { + pub macs: &'static mut [[u8; 16]], +} +impl SwapMac { + pub fn new(base: usize, bounds: usize) -> Self { + SwapMac { + // safety: this is only safe because the loader guarantees memory-mapped SMT is initialized and + // aligned and properly mapped into the swapper's memory space. + macs: unsafe { core::slice::from_raw_parts_mut(base as *mut [u8; 16], bounds as usize / 16) }, + } + } + + pub fn lookup_mac(&self, swap_page_offset: usize) -> [u8; 16] { todo!() } + + pub fn store_mac(&mut self, swap_page_offset: usize, mac: &[u8; 16]) { todo!() } +} diff --git a/services/xous-swapper/src/platform/precursor/mod.rs b/services/xous-swapper/src/platform/precursor/mod.rs new file mode 100644 index 000000000..e21a96e0a --- /dev/null +++ b/services/xous-swapper/src/platform/precursor/mod.rs @@ -0,0 +1 @@ +pub mod hw;