mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: kernel/plat/generate_driver: make required packages self-contained
This commit is contained in:
parent
6577c5614e
commit
871a028ecf
@ -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!(
|
||||
|
@ -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<Self> {
|
||||
pub fn new(node: fdt::node::FdtNode, fdt: &fdt::Fdt) -> Option<Self> {
|
||||
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),*),)*
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user