diff --git a/risc_v/src/lib.rs b/risc_v/src/lib.rs index 8a80b1c..dfb2b18 100755 --- a/risc_v/src/lib.rs +++ b/risc_v/src/lib.rs @@ -146,49 +146,8 @@ extern "C" fn kinit() { } // Set up virtio. This requires a working heap and page-grained allocator. virtio::probe(); - // This just tests the block device. We know that it connects backwards (8, 7, ..., 1). - let buffer = kmem::kmalloc(1024); - // Offset 1024 is the first block, which is the superblock. In the minix 3 file system, the first - // block is the "boot block", which in our case will be 0. - block::read(8, buffer, 512, 1024); - let mut i = 0; - loop { - if i > 100_000_000 { - break; - } - i += 1; - } - println!("Test hdd.dsk:"); - unsafe { - print!(" "); - for i in 0..16 { - print!("{:02x} ", buffer.add(i).read()); - } - println!(); - print!(" "); - for i in 0..16 { - print!("{:02x} ", buffer.add(16+i).read()); - } - println!(); - print!(" "); - for i in 0..16 { - print!("{:02x} ", buffer.add(32+i).read()); - } - println!(); - print!(" "); - for i in 0..16 { - print!("{:02x} ", buffer.add(48+i).read()); - } - println!(); - buffer.add(0).write(0xaa); - buffer.add(1).write(0xbb); - buffer.add(2).write(0x7a); - - } - block::write(8, buffer, 512, 0); - // Free the testing buffer. - kmem::kfree(buffer); // We schedule the next context switch using a multiplier of 1 + // Block testing code removed. trap::schedule_next_context_switch(1); rust_switch_to_user(sched::schedule()); // switch_to_user will not return, so we should never get here diff --git a/risc_v/src/plic.rs b/risc_v/src/plic.rs index 29d2b8f..0c2485a 100644 --- a/risc_v/src/plic.rs +++ b/risc_v/src/plic.rs @@ -151,9 +151,8 @@ pub fn handle_interrupt() { } }, - // Non-UART interrupts go here and do nothing. _ => { - println!("Non-UART external interrupt: {}", interrupt); + println!("Unknown external interrupt: {}", interrupt); } } // We've claimed it, so now say that we've handled it. This resets the interrupt pending diff --git a/risc_v/src/trap.rs b/risc_v/src/trap.rs index 86e88d0..bc01216 100755 --- a/risc_v/src/trap.rs +++ b/risc_v/src/trap.rs @@ -3,11 +3,11 @@ // Stephen Marz // 10 October 2019 -use crate::cpu::{CONTEXT_SWITCH_TIME, TrapFrame}; -use crate::plic; -use crate::syscall::do_syscall; -use crate::sched::schedule; -use crate::rust_switch_to_user; +use crate::{cpu::{TrapFrame, CONTEXT_SWITCH_TIME}, + plic, + rust_switch_to_user, + sched::schedule, + syscall::do_syscall}; #[no_mangle] /// The m_trap stands for "machine trap". Right now, we are handling @@ -65,7 +65,7 @@ extern "C" fn m_trap(epc: usize, }, _ => { panic!("Unhandled async trap CPU#{} -> {}\n", hart, cause_num); - } + }, } } else { @@ -118,7 +118,7 @@ extern "C" fn m_trap(epc: usize, }, _ => { panic!("Unhandled sync trap CPU#{} -> {}\n", hart, cause_num); - } + }, } }; // Finally, return the updated program counter @@ -129,8 +129,6 @@ pub const MMIO_MTIMECMP: *mut u64 = 0x0200_4000usize as *mut u64; pub const MMIO_MTIME: *const u64 = 0x0200_BFF8 as *const u64; pub fn schedule_next_context_switch(qm: u16) { - // This is much too slow for normal operations, but it gives us - // a visual of what's happening behind the scenes. unsafe { MMIO_MTIMECMP.write_volatile(MMIO_MTIME.read_volatile().wrapping_add(CONTEXT_SWITCH_TIME * qm as u64)); }