explicitly UART.init() in rust_main

This commit is contained in:
Yu Chen 2023-01-03 09:32:36 +08:00
parent e0e201a131
commit cd2e2307d2
3 changed files with 11 additions and 1 deletions

View File

@ -6,6 +6,7 @@ use lazy_static::*;
pub use ns16550a::NS16550a;
pub trait CharDevice {
fn init(&self);
fn read(&self) -> u8;
fn write(&self, ch: u8);
fn handle_irq(&self);

View File

@ -135,7 +135,7 @@ impl<const BASE_ADDR: usize> NS16550a<BASE_ADDR> {
ns16550a: NS16550aRaw::new(BASE_ADDR),
read_buffer: VecDeque::new(),
};
inner.ns16550a.init();
//inner.ns16550a.init();
Self {
inner: unsafe { UPIntrFreeCell::new(inner) },
condvar: Condvar::new(),
@ -144,6 +144,12 @@ impl<const BASE_ADDR: usize> NS16550a<BASE_ADDR> {
}
impl<const BASE_ADDR: usize> CharDevice for NS16550a<BASE_ADDR> {
fn init(&self){
let mut inner = self.inner.exclusive_access();
inner.ns16550a.init();
drop(inner);
}
fn read(&self) -> u8 {
loop {
let mut inner = self.inner.exclusive_access();

View File

@ -28,6 +28,8 @@ mod task;
mod timer;
mod trap;
use crate::drivers::chardev::CharDevice;
use crate::drivers::chardev::UART;
//use syscall::create_desktop; //for test
core::arch::global_asm!(include_str!("entry.asm"));
@ -55,6 +57,7 @@ lazy_static! {
pub fn rust_main() -> ! {
clear_bss();
mm::init();
UART.init();
println!("KERN: init gpu");
let _gpu = GPU_DEVICE.clone();
println!("KERN: init keyboard");