use ax_memory_addr::MemoryAddr;
pub trait MappingBackend: Clone {
type Addr: MemoryAddr;
type Flags: Copy;
type MutationContext;
type PageTable;
fn map(
&self,
start: Self::Addr,
size: usize,
flags: Self::Flags,
context: &mut Self::MutationContext,
page_table: &mut Self::PageTable,
) -> bool;
fn validate_map(
&self,
_start: Self::Addr,
_size: usize,
_flags: Self::Flags,
_page_table: &Self::PageTable,
) -> bool {
true
}
fn unmap(
&self,
start: Self::Addr,
size: usize,
context: &mut Self::MutationContext,
page_table: &mut Self::PageTable,
) -> bool;
fn validate_unmap(
&self,
_start: Self::Addr,
_size: usize,
_page_table: &Self::PageTable,
) -> bool {
true
}
fn validate_protect(
&self,
_start: Self::Addr,
_size: usize,
_new_flags: Self::Flags,
_page_table: &Self::PageTable,
) -> bool {
true
}
fn protect(
&self,
start: Self::Addr,
size: usize,
new_flags: Self::Flags,
context: &mut Self::MutationContext,
page_table: &mut Self::PageTable,
) -> bool;
fn split(&mut self, align_diff: usize) -> Option<Self>;
fn shrink_left(&mut self, _shrink_size: usize) -> bool {
true
}
fn shrink_right(&mut self, _shrink_size: usize) -> bool {
true
}
}