mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: vspace: table: add paddr()
This commit is contained in:
parent
3e13d1ce52
commit
00b7c7d7df
@ -150,9 +150,7 @@ pub unsafe fn setup_kernel_paging() {
|
||||
pub unsafe fn install_kernel_pagetable() {
|
||||
info!("Setting up new kernel pagetable");
|
||||
|
||||
let vaddr = KERNEL_PAGETABLE.lock().as_ref().expect("No kernel pagetable found").vaddr();
|
||||
let paddr = mmap_virt_to_phys(vaddr);
|
||||
|
||||
let paddr = KERNEL_PAGETABLE.lock().as_ref().expect("No kernel pagetable found").paddr();
|
||||
install_pagetable(paddr)
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
use crate::{arch::layout::PAGE_SIZE, vspace::*};
|
||||
use crate::{
|
||||
arch::layout::{mmap_virt_to_phys, PAGE_SIZE},
|
||||
vspace::*,
|
||||
};
|
||||
use utils::addr::*;
|
||||
|
||||
impl<'a, T: TableLevel> TableOps<'a, T> for Table<'a, T> {
|
||||
@ -15,6 +18,10 @@ impl<'a, T: TableLevel> TableOps<'a, T> for Table<'a, T> {
|
||||
VirtAddr::from(self.entries.as_ptr())
|
||||
}
|
||||
|
||||
fn paddr(&self) -> PhysAddr {
|
||||
unsafe { mmap_virt_to_phys(self.vaddr()) }
|
||||
}
|
||||
|
||||
fn map(&mut self, from: VirtAddr, to: PhysAddr, attr: MapAttr) -> PageResult {
|
||||
if !from.is_aligned(T::LEVEL_SIZE) || !to.is_aligned(PAGE_SIZE) {
|
||||
return Err(PageError::NotAligned);
|
||||
|
@ -6,6 +6,7 @@ pub trait TableOps<'a, T: TableLevel> {
|
||||
/// `location` must be a page-aligned virtual address and will not be dropped.
|
||||
unsafe fn new(location: VirtAddr) -> Self;
|
||||
fn vaddr(&self) -> VirtAddr;
|
||||
fn paddr(&self) -> PhysAddr;
|
||||
|
||||
// following methods only works at current level
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user