Forráskód Böngészése

change arch riscv64 with mm

Heinz 8 hónapja
szülő
commit
6e412c736d
2 módosított fájl, 12 hozzáadás és 5 törlés
  1. 5 5
      arch/src/riscv64/entry.rs
  2. 7 0
      arch/src/riscv64/mm.rs

+ 5 - 5
arch/src/riscv64/entry.rs

@@ -9,8 +9,8 @@ use buddy_allocator::{BuddyAllocator, BuddyRawPage};
 use riscv::register::satp;
 use eonix_mm::{
     address::{Addr as _, PAddr, VAddr, VRange},
-    page_table::{PageAttribute, RawAttribute, PTE as _},
-    paging::{Page, PageAccess, PageAlloc, PageBlock, RawPage as RawPageTrait, PFN, PageSize},
+    page_table::{PageAttribute, PagingMode, RawAttribute, PTE as _},
+    paging::{Page, PageAccess, PageAlloc, PageBlock, RawPage as RawPageTrait, PFN},
 };
 use spin::Mutex;
 
@@ -165,7 +165,7 @@ fn setup_page_tables() {
 
     // Map 0x80200000-0x81200000 16MB identically, use 2MB page
     for (idx, pte) in page_table
-        .iter_kernel(VRange::from(VAddr::from(0x80200000)).grow(0x1000000), PageSize::_2MbPage)
+        .iter_kernel_levels(VRange::from(VAddr::from(0x80200000)).grow(0x1000000), &PagingModeSv48::LEVELS[..2])
         .enumerate()
     {
         pte.set(PFN::from(idx * 0x200 + 0x80200), PageAttribute64::from_page_attr(attr));
@@ -174,7 +174,7 @@ fn setup_page_tables() {
     // Map 0x0000_0000_0000_0000-0x0000_007F_FFFF_FFFF 512GB
     // to 0xFFFF_FF00_0000_0000 to 0xFFFF_FF7F_FFFF_FFFF, use 1 GB page
     for (idx, pte) in page_table
-        .iter_kernel(VRange::from(VAddr::from(0xFFFF_FF00_0000_0000)).grow(0x80_0000_0000), PageSize::_1GbPage)
+        .iter_kernel_levels(VRange::from(VAddr::from(0xFFFF_FF00_0000_0000)).grow(0x80_0000_0000), &PagingModeSv48::LEVELS[..1])
         .enumerate()
     {
         pte.set(PFN::from(idx * 0x40000), PageAttribute64::from_page_attr(attr));
@@ -182,7 +182,7 @@ fn setup_page_tables() {
 
     // Map kernel image
     for (idx, pte) in page_table
-        .iter_kernel(VRange::from(VAddr::from(0xFFFF_FFFF_FFC0_0000)).grow(0x20_0000), PageSize::_4KbPage)
+        .iter_kernel_levels(VRange::from(VAddr::from(0xFFFF_FFFF_FFC0_0000)).grow(0x20_0000), &PagingModeSv48::LEVELS[..3])
         .enumerate()
     {
         pte.set(PFN::from(idx + 0x80200), PageAttribute64::from_page_attr(attr));

+ 7 - 0
arch/src/riscv64/mm.rs

@@ -7,6 +7,13 @@ use eonix_mm::{
     paging::{PageBlock, PFN},
 };
 
+#[derive(Clone, Copy)]
+pub enum PageSize {
+    _4KbPage = 4096,
+    _2MbPage = 2 * 1024 * 1024,
+    _1GbPage = 1 * 1024 * 1024 * 1024,
+}
+
 pub const ROOT_PAGE_TABLE_PHYS_ADDR: usize = 0x8040_0000;
 pub const PAGE_TABLE_END: usize = 0x8080_0000;
 pub const KIMAGE_PHYS_BASE: usize = 0x8020_0000;