Skip to content

Commit 4432fa3

Browse files
committed
feat: 更新 rdif-intc 版本至 0.13,优化中断处理逻辑
1 parent 0879b5a commit 4432fa3

6 files changed

Lines changed: 28 additions & 29 deletions

File tree

examples/enumerate/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ version = "0.1.0"
88
env_logger = "0.11"
99
log = "0.4"
1010
rdrive = {path = "../../rdrive"}
11-
rdif-intc = { version = "0.12", path = "../../interface/rdif-intc"}
11+
rdif-intc = { version = "0.13", path = "../../interface/rdif-intc"}

examples/enumerate/src/blk.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,20 @@ fn probe(info: FdtInfo<'_>, _dev: PlatformDevice) -> Result<(), OnProbeError> {
2727

2828
if let Some(irq) = _dev.descriptor.irq_parent {
2929
let intc = rdrive::get::<Intc>(irq).unwrap();
30-
println!("parent intc: {:?}", intc.descriptor());
30+
31+
if let Some(irqs) = info.node.interrupts() {
32+
for irq_prop in irqs {
33+
let irq_prop: Vec<u32> = irq_prop.collect();
34+
let irq_id = intc.lock().unwrap().setup_irq_by_fdt(&irq_prop);
35+
debug!(
36+
"virtio mmio device [{}] setup irq: {:?}",
37+
info.node.name(),
38+
irq_id
39+
);
40+
}
41+
}
42+
43+
println!("parent intc: {:?}", intc.descriptor().name);
3144
}
3245

3346
let base_reg = reg.next().unwrap();

examples/enumerate/src/intc.rs

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,12 @@ impl rdrive::DriverGeneric for IrqTest {
3131
}
3232

3333
impl Interface for IrqTest {
34-
fn parse_dtb_fn(&self) -> Option<rdif_intc::FuncFdtParseConfig> {
35-
Some(fdt_parse)
34+
fn setup_irq_by_fdt(&mut self, irq_prop: &[u32]) -> IrqId {
35+
debug!("IrqTest setup_irq_by_fdt: {:?}", irq_prop);
36+
42.into()
3637
}
3738
}
3839

39-
fn fdt_parse(_prop_interrupts_one_cell: &[u32]) -> Result<IrqConfig, String> {
40-
Ok(IrqConfig {
41-
irq: 0.into(),
42-
trigger: Trigger::EdgeBoth,
43-
is_private: false,
44-
})
45-
}
46-
4740
fn probe_intc(fdt: FdtInfo<'_>, plat_dev: PlatformDevice) -> Result<(), OnProbeError> {
4841
debug!(
4942
"on_probe: {}, parent intc {:?}",

interface/rdif-intc/Cargo.toml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
[package]
2-
name = "rdif-intc"
3-
version = "0.12.1"
4-
edition.workspace = true
52
authors = ["周睿 <zrufo747@outlook.com>"]
6-
repository.workspace = true
7-
license = "MIT"
3+
categories = ["embedded", "no-std"]
84
description = "Driver Interface of interrupt controller."
5+
edition.workspace = true
96
keywords = ["os", "driver"]
10-
categories = ["embedded", "no-std"]
7+
license = "MIT"
8+
name = "rdif-intc"
9+
repository.workspace = true
10+
version = "0.13.0"
1111

1212
[dependencies]
13-
rdif-base = { workspace = true }
1413
cfg-if = "1.0"
15-
thiserror = { version = "2", default-features = false }
14+
rdif-base = {workspace = true}

interface/rdif-intc/src/lib.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,12 @@
22

33
extern crate alloc;
44

5-
use alloc::string::String;
6-
75
pub use rdif_base::_rdif_prelude::*;
86
use rdif_base::def_driver;
97

10-
/// Fdt 解析 `interrupts` 函数,一次解析一个`cell`
11-
pub type FuncFdtParseConfig = fn(prop_interrupts_one_cell: &[u32]) -> Result<IrqConfig, String>;
12-
138
pub trait Interface: DriverGeneric {
14-
/// If not supported, returns None
15-
fn parse_dtb_fn(&self) -> Option<FuncFdtParseConfig> {
16-
None
9+
fn setup_irq_by_fdt(&mut self, _irq_prop: &[u32]) -> IrqId {
10+
unimplemented!();
1711
}
1812
}
1913

rdrive/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ rdrive-macros = {version = "0.4", path = "../rdrive-macros"}
2424
rdif-pcie = {workspace = true}
2525

2626
[dev-dependencies]
27-
rdif-intc = { version = "0.12", path = "../interface/rdif-intc"}
27+
rdif-intc = { version = "0.13", path = "../interface/rdif-intc"}
2828
rdif-clk = { version = "0.4", path = "../interface/rdif-clk"}

0 commit comments

Comments
 (0)