islet_rmm/realm/mm/
mod.rs1pub 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 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}