feat: kernel/plat/generate_driver: make required packages self-contained

This commit is contained in:
Paul Pan 2024-08-23 10:18:06 +08:00
parent 6577c5614e
commit 871a028ecf
2 changed files with 9 additions and 11 deletions

View File

@ -1,9 +1,6 @@
use super::utils::generate_driver; use super::utils::generate_driver;
use crate::arch::EarlyConsole; use crate::arch::EarlyConsole;
use crate::drivers::serial::{Uart16550, UartSifive}; use crate::drivers::serial::{Uart16550, UartSifive};
use crate::drivers::Driver;
use fdt::{node::FdtNode, Fdt};
use log::debug;
use spin::Mutex; use spin::Mutex;
generate_driver!( generate_driver!(

View File

@ -1,14 +1,14 @@
macro_rules! generate_driver { macro_rules! generate_driver {
( (
$name:ident { $name:ident {
($($dynamic_driver:ident),+),($($static_driver:ident),+) ($($dynamic_driver:ident),*),($($static_driver:ident),*)
} : $trait:ident { } : $trait:ident {
$(fn $fn_name:ident (&mut self $(, $arg_name:ident : $arg_ty:ty)*) -> $ret_ty:ty;)+ $(fn $fn_name:ident (&mut self $(, $arg_name:ident : $arg_ty:ty)*) -> $ret_ty:ty;)+
} }
) => { ) => {
pub enum $name { pub enum $name {
$($dynamic_driver($dynamic_driver),)+ $($dynamic_driver($dynamic_driver),)*
$($static_driver($static_driver),)+ $($static_driver($static_driver),)*
} }
pub trait $trait { pub trait $trait {
@ -16,17 +16,18 @@ macro_rules! generate_driver {
} }
impl $name { impl $name {
pub fn new(node: FdtNode, fdt: &Fdt) -> Option<Self> { pub fn new(node: fdt::node::FdtNode, fdt: &fdt::Fdt) -> Option<Self> {
use $crate::drivers::Driver;
if let Some(compatible) = node.compatible() { if let Some(compatible) = node.compatible() {
$( $(
if compatible if compatible
.all() .all()
.any(|s| $dynamic_driver::compatible().contains(&s)) .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))); return Some($name::$dynamic_driver($dynamic_driver::setup(node, fdt)));
} }
)+ )*
} }
None None
} }
@ -35,8 +36,8 @@ macro_rules! generate_driver {
macro_rules! expand_driver { macro_rules! expand_driver {
($$self:ident, $$fn_name:ident, $$($$arg:ident),*) => { ($$self:ident, $$fn_name:ident, $$($$arg:ident),*) => {
match $$self { match $$self {
$(Self::$dynamic_driver(driver) => driver.$$fn_name($$($$arg),*),)+ $(Self::$dynamic_driver(driver) => driver.$$fn_name($$($$arg),*),)*
$(Self::$static_driver(driver) => driver.$$fn_name($$($$arg),*),)+ $(Self::$static_driver(driver) => driver.$$fn_name($$($$arg),*),)*
} }
}; };
} }