feat: kernel/entry: wire up intc setup

This commit is contained in:
Paul Pan 2024-08-23 11:11:22 +08:00
parent bb54000486
commit 9b2cca3f69

View File

@ -1,8 +1,11 @@
use crate::logging::set_log_level;
use crate::plat::console::{set_console, ConsoleDriver};
use crate::plat::lowlevel::{Hardware, LowLevel};
use crate::plat::timer::{Timer, TimerOps};
use crate::plat::trap::{Trap, TrapOps};
use crate::plat::{
console::{set_console, ConsoleDriver},
irq::{set_irq_driver, IrqDriver},
lowlevel::{Hardware, LowLevel},
timer::{Timer, TimerOps},
trap::{Trap, TrapOps},
};
use crate::root::setup_root_server;
use crate::scheduler::{IDLE_THREAD, SCHEDULER};
use core::cell::Cell;
@ -23,6 +26,7 @@ pub fn rust_main() -> ! {
set_log_level(&fdt);
setup_console(&fdt);
setup_intc(&fdt);
info!("Kernel Started");
@ -58,3 +62,10 @@ fn setup_console(fdt: &Fdt) {
Some(driver) => set_console(driver),
}
}
fn setup_intc(fdt: &Fdt) {
match fdt.all_nodes().find_map(|node| IrqDriver::new(node, fdt)) {
None => error!("No compatible interrupt controller found! System may not work properly"),
Some(driver) => set_irq_driver(driver),
}
}