use crate::asm;
use memory_addr::PhysAddr;
pub unsafe fn init_mmu(root_paddr: PhysAddr) {
use aarch32_cpu::register::Sctlr;
unsafe {
asm::write_user_page_table(root_paddr); asm::write_kernel_page_table(root_paddr);
asm::write_ttbcr(0x1u32);
asm::write_dacr(0x55555555u32);
asm::flush_tlb(None);
Sctlr::modify(|r| {
r.set_m(true); r.set_c(true); r.set_i(true); });
asm::dsb();
asm::isb();
}
}
pub fn init_trap() {
unsafe extern "C" {
fn exception_vector_base();
}
unsafe {
crate::asm::write_exception_vector_base(exception_vector_base as *const () as usize);
crate::asm::write_user_page_table(0.into());
}
}