Skip to main content

islet_rmm/realm/mm/
mod.rs

1pub mod address;
2pub mod attribute;
3pub mod entry;
4pub mod page;
5pub mod rtt;
6pub mod stage2_translation;
7pub mod stage2_tte;
8pub mod table_level;
9
10use crate::rmi::error::Error;
11use core::ffi::c_void;
12use core::fmt::Debug;
13use core::slice::Iter;
14
15use address::{GuestPhysAddr, PhysAddr};
16use stage2_translation::Tlbi;
17
18pub trait IPATranslation: Debug + Send + Sync {
19    fn get_base_address(&self) -> *const c_void;
20    // TODO: remove mut
21    fn ipa_to_pa(&mut self, guest: GuestPhysAddr, level: usize) -> Option<PhysAddr>;
22    fn ipa_to_pte(&mut self, guest: GuestPhysAddr, level: usize) -> Option<(u64, usize)>;
23    fn ipa_to_pte_set(
24        &mut self,
25        guest: GuestPhysAddr,
26        level: usize,
27        val: u64,
28        invalidate: Tlbi,
29    ) -> Result<(), Error>;
30    fn clean(&mut self, vmid: usize);
31    fn space_size(&self, level: usize) -> usize;
32    fn entries(
33        &self,
34        guest: GuestPhysAddr,
35        level: usize,
36    ) -> Result<(Iter<'_, entry::Entry>, usize), Error>;
37}