From 144a74cfbed295739eff3d3ec2cb1213f8455736 Mon Sep 17 00:00:00 2001 From: MaxXSoft Date: Sat, 2 May 2020 23:25:31 +0800 Subject: [PATCH] (mem) updated some details --- src/mem/mem.yu | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/mem/mem.yu b/src/mem/mem.yu index 01d1292..bb95b4f 100644 --- a/src/mem/mem.yu +++ b/src/mem/mem.yu @@ -8,30 +8,19 @@ import mem.consts import mem.pm import mem.heap -// set linear mapping of address range -def mapRange(pt: PageTable var*, begin: USize, end: USize, flags: USize) { - let begin = begin / MEGAPAGE_SIZE as USize - let end = end / MEGAPAGE_SIZE as USize - var addr = begin - while addr <= end { - let pa = newPhysAddr(addr * MEGAPAGE_SIZE as USize) - let frame = newFrame(pa) - pt.getPte(pa.getPpn1()).set(frame, flags) - addr += 1 as USize - } -} - // initialize temporary root page table for kernel // returns temporary allocated root page table def initTempTable(): PageTable var* { let root_table = allocPhyMem() as PageTable var* let flags = PTE_FLAG_V | PTE_FLAG_R | PTE_FLAG_W + let offset = (KERNEL_VM_BASE - KERNEL_BASE) as USize root_table.zero() // set identity mapping vm(KERNEL_BASE) -> pm(KERNEL_BASE) - root_table.mapRange(KERNEL_BASE as USize, PHY_STOP as USize, - flags | PTE_FLAG_X) + root_table.mapLinearRange(KERNEL_BASE as USize, PHY_STOP as USize, + offset, flags | PTE_FLAG_X) // set identity mapping vm(UART_ADDR) -> pm(UART_ADDR) - root_table.mapRange(UART_ADDR as USize, UART_END as USize, flags) + root_table.mapLinearRange(UART_ADDR as USize, UART_END as USize, + offset, flags) // set recursive mapping let root_frame = newFrame(newPhysAddr(root_table as USize)) root_table.setRecursive(RECURSIVE_INDEX, root_frame)