|
@@ -9,11 +9,7 @@ use system_error::SystemError;
|
|
|
|
|
|
use crate::libs::spinlock::SpinLock;
|
|
|
|
|
|
-
|
|
|
-use super::{
|
|
|
- allocator::page_frame::PageFrameCount, kernel_mapper::KernelMapper, mmio_buddy::mmio_pool,
|
|
|
- no_init::pseudo_map_phys, page::EntryFlags, MemoryManagementArch, PhysAddr, VirtAddr,
|
|
|
-};
|
|
|
+use super::{mmio_buddy::mmio_pool, VirtAddr};
|
|
|
|
|
|
lazy_static! {
|
|
|
// 用于记录内核分配给C的空间信息
|
|
@@ -21,44 +17,6 @@ lazy_static! {
|
|
|
}
|
|
|
|
|
|
#[no_mangle]
|
|
|
-pub unsafe extern "C" fn rs_pseudo_map_phys(vaddr: usize, paddr: usize, size: usize) {
|
|
|
- let vaddr = VirtAddr::new(vaddr);
|
|
|
- let paddr = PhysAddr::new(paddr);
|
|
|
- let count = PageFrameCount::new(page_align_up(size) / MMArch::PAGE_SIZE);
|
|
|
- pseudo_map_phys(vaddr, paddr, count);
|
|
|
-}
|
|
|
-
|
|
|
-/// [EXTERN TO C] Use kernel mapper to map physical memory to virtual memory.
|
|
|
-#[no_mangle]
|
|
|
-pub unsafe extern "C" fn rs_map_phys(vaddr: usize, paddr: usize, size: usize, flags: usize) {
|
|
|
- let mut vaddr = VirtAddr::new(vaddr);
|
|
|
- let mut paddr = PhysAddr::new(paddr);
|
|
|
- let count = PageFrameCount::new(page_align_up(size) / MMArch::PAGE_SIZE);
|
|
|
- // debug!("rs_map_phys: vaddr: {vaddr:?}, paddr: {paddr:?}, count: {count:?}, flags: {flags:?}");
|
|
|
-
|
|
|
- let mut page_flags: EntryFlags<MMArch> = EntryFlags::new().set_execute(true).set_write(true);
|
|
|
- if flags & PAGE_U_S as usize != 0 {
|
|
|
- page_flags = page_flags.set_user(true);
|
|
|
- }
|
|
|
-
|
|
|
- let mut kernel_mapper = KernelMapper::lock();
|
|
|
- let mut kernel_mapper = kernel_mapper.as_mut();
|
|
|
- assert!(kernel_mapper.is_some());
|
|
|
- for _i in 0..count.data() {
|
|
|
- let flusher = kernel_mapper
|
|
|
- .as_mut()
|
|
|
- .unwrap()
|
|
|
- .map_phys(vaddr, paddr, page_flags)
|
|
|
- .unwrap();
|
|
|
-
|
|
|
- flusher.flush();
|
|
|
-
|
|
|
- vaddr += MMArch::PAGE_SIZE;
|
|
|
- paddr += MMArch::PAGE_SIZE;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
pub unsafe extern "C" fn kzalloc(size: usize, _gfp: u64) -> usize {
|
|
|
// debug!("kzalloc: size: {size}");
|
|
|
return do_kmalloc(size, true);
|