@@ -4,55 +4,6 @@ use memory_addresses::arch::x86_64::{PhysAddr, VirtAddr};
44
55use crate :: mm:: { FrameAlloc , PageAlloc , PageRangeAllocator } ;
66
7- #[ cfg( feature = "common-os" ) ]
8- pub fn create_new_root_page_table ( ) -> usize {
9- use free_list:: PageLayout ;
10- use x86_64:: registers:: control:: Cr3 ;
11- use x86_64:: structures:: paging:: { PageSize , Size4KiB as BasePageSize } ;
12-
13- use crate :: arch:: mm:: paging:: { PageTableEntryFlags , PageTableEntryFlagsExt } ;
14- use crate :: mm:: { FrameAlloc , PageBox , PageRangeAllocator } ;
15-
16- let layout = PageLayout :: from_size ( BasePageSize :: SIZE as usize ) . unwrap ( ) ;
17- let frame_range = FrameAlloc :: allocate ( layout) . unwrap ( ) ;
18- let physaddr = PhysAddr :: from ( frame_range. start ( ) ) ;
19-
20- let layout = PageLayout :: from_size ( 2 * BasePageSize :: SIZE as usize ) . unwrap ( ) ;
21- let page_range = PageBox :: new ( layout) . unwrap ( ) ;
22- let virtaddr = VirtAddr :: from ( page_range. start ( ) ) ;
23- let mut flags = PageTableEntryFlags :: empty ( ) ;
24- flags. normal ( ) . writable ( ) ;
25-
26- let entry: u64 = unsafe {
27- let ( frame, _flags) = Cr3 :: read ( ) ;
28- paging:: map :: < BasePageSize > ( virtaddr, frame. start_address ( ) . into ( ) , 1 , flags) ;
29- let entry: & u64 = & * virtaddr. as_ptr ( ) ;
30-
31- * entry
32- } ;
33-
34- let slice_addr = virtaddr + BasePageSize :: SIZE ;
35- paging:: map :: < BasePageSize > ( slice_addr, physaddr, 1 , flags) ;
36-
37- unsafe {
38- let pml4 = core:: slice:: from_raw_parts_mut ( slice_addr. as_mut_ptr ( ) , 512 ) ;
39-
40- // clear PML4
41- for elem in pml4. iter_mut ( ) {
42- * elem = 0 ;
43- }
44-
45- // copy first element and the self reference
46- pml4[ 0 ] = entry;
47- // create self reference
48- pml4[ 511 ] = physaddr. as_u64 ( ) + 0x3 ; // PG_PRESENT | PG_RW
49- } ;
50-
51- paging:: unmap :: < BasePageSize > ( virtaddr, 2 ) ;
52-
53- physaddr. as_usize ( )
54- }
55-
567pub unsafe fn init ( ) {
578 paging:: init ( ) ;
589 unsafe {
0 commit comments