1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pub mod address;
pub mod page;
pub mod page_table;
pub mod stage2_translation;
pub mod stage2_tte;
pub mod translation_granule_4k;

use crate::rmi::error::Error;
use core::ffi::c_void;
use core::fmt::Debug;

use address::{GuestPhysAddr, PhysAddr};

pub trait IPATranslation: Debug + Send + Sync {
    fn get_base_address(&self) -> *const c_void;
    // TODO: remove mut
    fn ipa_to_pa(&mut self, guest: GuestPhysAddr, level: usize) -> Option<PhysAddr>;
    fn ipa_to_pte(&mut self, guest: GuestPhysAddr, level: usize) -> Option<(u64, usize)>;
    fn ipa_to_pte_set(&mut self, guest: GuestPhysAddr, level: usize, val: u64)
        -> Result<(), Error>;
    fn clean(&mut self);
}