diff --git a/kernel/defs.h b/kernel/defs.h index ec8fdfd..5775b40 100644 --- a/kernel/defs.h +++ b/kernel/defs.h @@ -147,10 +147,7 @@ int fetchaddr(uint64, uint64*); void syscall(); // trap.c -extern uint ticks; -void trapinit(void); -void trapinithart(void); -extern struct spinlock tickslock; +void trapinithart(void); void usertrapret(void); void uartintr(void); diff --git a/kernel/rustkernel/src/arch/mod.rs b/kernel/rustkernel/src/arch/mod.rs new file mode 100644 index 0000000..cf72ebc --- /dev/null +++ b/kernel/rustkernel/src/arch/mod.rs @@ -0,0 +1 @@ +pub mod riscv; \ No newline at end of file diff --git a/kernel/rustkernel/src/riscv/asm.rs b/kernel/rustkernel/src/arch/riscv/asm.rs similarity index 100% rename from kernel/rustkernel/src/riscv/asm.rs rename to kernel/rustkernel/src/arch/riscv/asm.rs diff --git a/kernel/rustkernel/src/riscv/memlayout.rs b/kernel/rustkernel/src/arch/riscv/memlayout.rs similarity index 100% rename from kernel/rustkernel/src/riscv/memlayout.rs rename to kernel/rustkernel/src/arch/riscv/memlayout.rs diff --git a/kernel/rustkernel/src/riscv/mod.rs b/kernel/rustkernel/src/arch/riscv/mod.rs similarity index 100% rename from kernel/rustkernel/src/riscv/mod.rs rename to kernel/rustkernel/src/arch/riscv/mod.rs diff --git a/kernel/rustkernel/src/riscv/plic.rs b/kernel/rustkernel/src/arch/riscv/plic.rs similarity index 91% rename from kernel/rustkernel/src/riscv/plic.rs rename to kernel/rustkernel/src/arch/riscv/plic.rs index 82419b0..4ce15b8 100644 --- a/kernel/rustkernel/src/riscv/plic.rs +++ b/kernel/rustkernel/src/arch/riscv/plic.rs @@ -2,7 +2,7 @@ use crate::{ proc::cpuid, - riscv::{plic_sclaim, plic_senable, plic_spriority, PLIC, UART0_IRQ, VIRTIO0_IRQ}, + arch::riscv::{plic_sclaim, plic_senable, plic_spriority, PLIC, UART0_IRQ, VIRTIO0_IRQ}, }; #[no_mangle] diff --git a/kernel/rustkernel/src/console/uart.rs b/kernel/rustkernel/src/console/uart.rs index d4e2a80..a2b1b68 100644 --- a/kernel/rustkernel/src/console/uart.rs +++ b/kernel/rustkernel/src/console/uart.rs @@ -24,7 +24,7 @@ const LSR_RX_READY: u8 = 1 << 0; /// THR can accept another character to send const LSR_TX_IDLE: u8 = 1 << 5; -pub static UART0: Uart = Uart::new(crate::riscv::memlayout::UART0); +pub static UART0: Uart = Uart::new(crate::arch::riscv::memlayout::UART0); enum Register { ReceiveHolding, diff --git a/kernel/rustkernel/src/lib.rs b/kernel/rustkernel/src/lib.rs index 5986265..136315f 100644 --- a/kernel/rustkernel/src/lib.rs +++ b/kernel/rustkernel/src/lib.rs @@ -14,7 +14,7 @@ pub mod io; pub mod mem; pub mod proc; pub mod queue; -pub(crate) mod riscv; +pub(crate) mod arch; pub mod start; pub mod string; pub mod sync; @@ -66,8 +66,8 @@ pub unsafe extern "C" fn main() -> ! { mem::virtual_memory::kvminithart(); proc::procinit(); trap::trapinithart(); - riscv::plic::plicinit(); - riscv::plic::plicinithart(); + arch::riscv::plic::plicinit(); + arch::riscv::plic::plicinithart(); io::bio::binit(); fs::iinit(); fs::file::fileinit(); @@ -80,7 +80,7 @@ pub unsafe extern "C" fn main() -> ! { } mem::virtual_memory::kvminithart(); trap::trapinithart(); - riscv::plic::plicinithart(); + arch::riscv::plic::plicinithart(); } proc::scheduler(); diff --git a/kernel/rustkernel/src/mem/kalloc.rs b/kernel/rustkernel/src/mem/kalloc.rs index 6962bcd..9d5a043 100644 --- a/kernel/rustkernel/src/mem/kalloc.rs +++ b/kernel/rustkernel/src/mem/kalloc.rs @@ -4,7 +4,7 @@ use crate::{ mem::memset, - riscv::{memlayout::PHYSTOP, pg_round_up, PGSIZE}, + arch::riscv::{memlayout::PHYSTOP, pg_round_up, PGSIZE}, sync::spinlock::Spinlock, }; use core::ptr::{addr_of_mut, null_mut}; diff --git a/kernel/rustkernel/src/mem/virtual_memory.rs b/kernel/rustkernel/src/mem/virtual_memory.rs index e67bb60..5e40be6 100644 --- a/kernel/rustkernel/src/mem/virtual_memory.rs +++ b/kernel/rustkernel/src/mem/virtual_memory.rs @@ -4,7 +4,7 @@ use crate::{ memmove, memset, }, proc::proc_mapstacks, - riscv::{ + arch::riscv::{ memlayout::{KERNBASE, PHYSTOP, TRAMPOLINE}, *, }, diff --git a/kernel/rustkernel/src/proc.rs b/kernel/rustkernel/src/proc.rs index 074f3b4..c66c703 100644 --- a/kernel/rustkernel/src/proc.rs +++ b/kernel/rustkernel/src/proc.rs @@ -2,7 +2,7 @@ use crate::{ mem::kalloc::kfree, - riscv::{self, Pagetable, PTE_W}, + arch::riscv::{Pagetable, PTE_W, intr_get, r_tp}, sync::spinlock::{Spinlock, SpinlockGuard}, }; use core::{ @@ -226,7 +226,7 @@ pub struct Proc { /// to a different CPU. #[no_mangle] pub unsafe extern "C" fn cpuid() -> i32 { - riscv::r_tp() as i32 + r_tp() as i32 } /// Return this CPU's cpu struct. @@ -331,7 +331,7 @@ pub unsafe extern "C" fn sched() { panic!("sched locks"); } else if (*p).state == ProcState::Running { panic!("sched running"); - } else if riscv::intr_get() > 0 { + } else if intr_get() > 0 { panic!("sched interruptible"); } diff --git a/kernel/rustkernel/src/start.rs b/kernel/rustkernel/src/start.rs index a2c4380..7fc8516 100644 --- a/kernel/rustkernel/src/start.rs +++ b/kernel/rustkernel/src/start.rs @@ -1,4 +1,4 @@ -use crate::{main, riscv::*, NCPU}; +use crate::{main, arch::riscv::*, NCPU}; use core::{arch::asm, ptr::addr_of}; extern "C" { diff --git a/kernel/rustkernel/src/syscall.rs b/kernel/rustkernel/src/syscall.rs index f21c15f..b5e28c8 100644 --- a/kernel/rustkernel/src/syscall.rs +++ b/kernel/rustkernel/src/syscall.rs @@ -2,7 +2,7 @@ use crate::{ mem::virtual_memory::{copyin, copyinstr}, println, proc::{self, myproc}, - riscv::memlayout::QEMU_POWER, + arch::riscv::memlayout::QEMU_POWER, string::strlen, trap::CLOCK_TICKS, }; diff --git a/kernel/rustkernel/src/trap.rs b/kernel/rustkernel/src/trap.rs index 0f8e86a..01409e7 100644 --- a/kernel/rustkernel/src/trap.rs +++ b/kernel/rustkernel/src/trap.rs @@ -1,7 +1,7 @@ use crate::{ println, proc::{cpuid, exit, killed, mycpu, myproc, r#yield, setkilled, wakeup, ProcState}, - riscv::*, + arch::riscv::*, sync::mutex::Mutex, syscall::syscall, }; @@ -272,10 +272,10 @@ pub unsafe extern "C" fn usertrap() { #[no_mangle] pub unsafe extern "C" fn push_intr_off() { - let old = crate::riscv::intr_get(); + let old = intr_get(); let cpu = mycpu(); - crate::riscv::intr_off(); + intr_off(); if (*cpu).interrupt_disable_layers == 0 { (*cpu).previous_interrupts_enabled = old; } @@ -285,7 +285,7 @@ pub unsafe extern "C" fn push_intr_off() { pub unsafe extern "C" fn pop_intr_off() { let cpu = mycpu(); - if crate::riscv::intr_get() == 1 { + if intr_get() == 1 { // crate::panic_byte(b'0'); panic!("pop_intr_off - interruptible"); } else if (*cpu).interrupt_disable_layers < 1 { @@ -296,6 +296,6 @@ pub unsafe extern "C" fn pop_intr_off() { (*cpu).interrupt_disable_layers -= 1; if (*cpu).interrupt_disable_layers == 0 && (*cpu).previous_interrupts_enabled == 1 { - crate::riscv::intr_on(); + intr_on(); } }