Skip to content

Commit

Permalink
add the map_kernel_devices of aarch64,but need fix the riscv64
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhiyuanSue committed Aug 27, 2024
1 parent 432039e commit 9cc0f27
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 5 deletions.
2 changes: 0 additions & 2 deletions kernel/src/ffi.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
use sel4_task::tcb_t;

extern "C" {
// #[cfg(target_arch = "aarch64")]
// pub fn kernel_stack_alloc();
Expand Down
6 changes: 3 additions & 3 deletions sel4_vspace/src/arch/aarch64/boot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use crate::{
vptr_t, GET_KPT_INDEX, GET_PD_INDEX, GET_PT_INDEX, GET_PUD_INDEX, PDE, PGDE, PTE, PUDE,
};

use super::page_slice;
use super::{map_kernel_devices, page_slice};

#[derive(PartialEq, Eq, Debug)]
enum find_type {
Expand Down Expand Up @@ -124,8 +124,8 @@ pub fn rust_map_kernel_window() {
BIT!(PUD_INDEX_BITS) - 1,
PDE::new_small(kpptr_to_paddr(get_kernel_page_table_base())),
);

ffi_call!(map_kernel_devices());
map_kernel_devices();
// ffi_call!(map_kernel_devices());
}

#[no_mangle]
Expand Down
65 changes: 65 additions & 0 deletions sel4_vspace/src/arch/aarch64/device.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
use crate::{paddr_t, pptr_t, vm_attributes_t};
use super::boot::map_kernel_frame;
use sel4_common::arch::vm_rights_t::VMKernelOnly;
use sel4_common::{sel4_config::PAGE_BITS, BIT};

pub const KDEV_BASE: usize = 0xFFFFFFFFC0000000;
pub(crate) const NUM_KERNEL_DEVICE_FRAMES:usize=3;
pub(crate) const UART_PPTR:usize=KDEV_BASE+ 0x0;
pub(crate) const GIC_V2_DISTRIBUTOR_PPTR:usize= KDEV_BASE + 0x1000;
pub(crate) const GIC_V2_CONTROLLER_PPTR:usize=KDEV_BASE + 0x2000;
#[derive(Copy, Clone)]
struct kernel_frame_t{
paddr:paddr_t,
pptr:pptr_t,
armExecuteNever:isize,
userAvailable:isize,
}

#[derive(Copy, Clone)]
#[repr(C)]
struct p_region_t {
pub start: usize,
pub end: usize,
}
extern "C" {
pub(self) fn reserve_region(reg: p_region_t) -> bool;
}

#[no_mangle]
#[link_section = ".boot.text"]
pub(self) static mut kernel_device_frames:[kernel_frame_t;NUM_KERNEL_DEVICE_FRAMES]=[
kernel_frame_t{
paddr:paddr_t(0x9000000),
pptr :UART_PPTR,
armExecuteNever : 1,
userAvailable : 1
},
kernel_frame_t{
paddr : paddr_t(0x8000000),
pptr : GIC_V2_DISTRIBUTOR_PPTR,
armExecuteNever : 1,
userAvailable : 0
},
kernel_frame_t{
paddr : paddr_t(0x8010000),
pptr : GIC_V2_CONTROLLER_PPTR,
armExecuteNever :1,
userAvailable :0
},
];
#[no_mangle]
pub fn map_kernel_devices(){
unsafe {
for kernel_frame in kernel_device_frames{
let vm_attr:vm_attributes_t=vm_attributes_t(kernel_frame.armExecuteNever as usize);
map_kernel_frame(kernel_frame.paddr.0,kernel_frame.pptr,VMKernelOnly,vm_attr);
if kernel_frame.userAvailable ==0{
reserve_region(p_region_t {
start: kernel_frame.paddr.0,
end: kernel_frame.paddr.0 + BIT!(PAGE_BITS),
});
}
}
}
}
2 changes: 2 additions & 0 deletions sel4_vspace/src/arch/aarch64/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ mod pagetable;
mod pte;
mod structures;
mod utils;
mod device;
pub use asid::*;
pub use boot::*;
pub use interface::*;
Expand All @@ -14,3 +15,4 @@ pub use pagetable::create_it_pud_cap;
pub use pte::PTEFlags;
pub use structures::*;
pub use utils::*;
pub use device::*;

0 comments on commit 9cc0f27

Please sign in to comment.