From 871a028ecf441d9afbeb5272aae87f71987f8cc6 Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Fri, 23 Aug 2024 10:18:06 +0800 Subject: [PATCH] feat: kernel/plat/generate_driver: make required packages self-contained --- kernel/src/plat/console.rs | 3 --- kernel/src/plat/utils.rs | 17 +++++++++-------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/kernel/src/plat/console.rs b/kernel/src/plat/console.rs index 031fcc8..7bdeaa8 100644 --- a/kernel/src/plat/console.rs +++ b/kernel/src/plat/console.rs @@ -1,9 +1,6 @@ use super::utils::generate_driver; use crate::arch::EarlyConsole; use crate::drivers::serial::{Uart16550, UartSifive}; -use crate::drivers::Driver; -use fdt::{node::FdtNode, Fdt}; -use log::debug; use spin::Mutex; generate_driver!( diff --git a/kernel/src/plat/utils.rs b/kernel/src/plat/utils.rs index 0adedb8..d9c1979 100644 --- a/kernel/src/plat/utils.rs +++ b/kernel/src/plat/utils.rs @@ -1,14 +1,14 @@ macro_rules! generate_driver { ( $name:ident { - ($($dynamic_driver:ident),+),($($static_driver:ident),+) + ($($dynamic_driver:ident),*),($($static_driver:ident),*) } : $trait:ident { $(fn $fn_name:ident (&mut self $(, $arg_name:ident : $arg_ty:ty)*) -> $ret_ty:ty;)+ } ) => { pub enum $name { - $($dynamic_driver($dynamic_driver),)+ - $($static_driver($static_driver),)+ + $($dynamic_driver($dynamic_driver),)* + $($static_driver($static_driver),)* } pub trait $trait { @@ -16,17 +16,18 @@ macro_rules! generate_driver { } impl $name { - pub fn new(node: FdtNode, fdt: &Fdt) -> Option { + pub fn new(node: fdt::node::FdtNode, fdt: &fdt::Fdt) -> Option { + use $crate::drivers::Driver; if let Some(compatible) = node.compatible() { $( if compatible .all() .any(|s| $dynamic_driver::compatible().contains(&s)) { - debug!("{}: using driver: {}", stringify!($name), stringify!($dynamic_driver)); + log::debug!("{}: using driver: {}", stringify!($name), stringify!($dynamic_driver)); return Some($name::$dynamic_driver($dynamic_driver::setup(node, fdt))); } - )+ + )* } None } @@ -35,8 +36,8 @@ macro_rules! generate_driver { macro_rules! expand_driver { ($$self:ident, $$fn_name:ident, $$($$arg:ident),*) => { match $$self { - $(Self::$dynamic_driver(driver) => driver.$$fn_name($$($$arg),*),)+ - $(Self::$static_driver(driver) => driver.$$fn_name($$($$arg),*),)+ + $(Self::$dynamic_driver(driver) => driver.$$fn_name($$($$arg),*),)* + $(Self::$static_driver(driver) => driver.$$fn_name($$($$arg),*),)* } }; }