From 9b2cca3f699c955377d735ed8923f59de3538458 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Fri, 23 Aug 2024 11:11:22 +0800 Subject: [PATCH] feat: kernel/entry: wire up intc setup --- kernel/src/entry.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/kernel/src/entry.rs b/kernel/src/entry.rs index c701556..a6b3d93 100644 --- a/kernel/src/entry.rs +++ b/kernel/src/entry.rs @@ -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), + } +}