|
1 | | -use super::{ACCESS, DeviceView, config, device::PCI_DEVICES}; |
| 1 | +use super::{DeviceView, config, device::PCI_DEVICES}; |
2 | 2 | use crate::{ |
| 3 | + device::pci::ACCESS, |
3 | 4 | memory::view::MemoryView, |
4 | 5 | posix::errno::{EResult, Errno}, |
5 | 6 | util::mutex::spin::SpinMutex, |
@@ -83,22 +84,24 @@ static DRIVERS: SpinMutex<BTreeMap<&'static str, Driver>> = SpinMutex::new(BTree |
83 | 84 |
|
84 | 85 | impl Driver { |
85 | 86 | pub fn register(self) -> EResult<()> { |
86 | | - let mut drivers = DRIVERS.lock(); |
| 87 | + { |
| 88 | + let mut drivers = DRIVERS.lock(); |
87 | 89 |
|
88 | | - if drivers.contains_key(self.name) { |
89 | | - warn!("Driver {} is already registered", self.name); |
90 | | - return Err(Errno::EEXIST); |
91 | | - } |
| 90 | + if drivers.contains_key(self.name) { |
| 91 | + warn!("Driver {} is already registered", self.name); |
| 92 | + return Err(Errno::EEXIST); |
| 93 | + } |
92 | 94 |
|
93 | | - if self.variants.is_empty() { |
94 | | - warn!( |
95 | | - "PCI Driver \"{}\" does not define any variants, ignoring", |
96 | | - self.name |
97 | | - ); |
98 | | - return Ok(()); |
99 | | - } |
| 95 | + if self.variants.is_empty() { |
| 96 | + warn!( |
| 97 | + "PCI Driver \"{}\" does not define any variants, ignoring", |
| 98 | + self.name |
| 99 | + ); |
| 100 | + return Ok(()); |
| 101 | + } |
100 | 102 |
|
101 | | - drivers.insert(self.name, self); |
| 103 | + drivers.insert(self.name, self); |
| 104 | + } |
102 | 105 |
|
103 | 106 | log!( |
104 | 107 | "Registered new PCI driver \"{}\" with {} variant(s)", |
@@ -132,7 +135,9 @@ impl Driver { |
132 | 135 | && v.sub_class.is_none_or(|x| x == sub_class) |
133 | 136 | && v.class.is_none_or(|x| x == class) |
134 | 137 | }) { |
135 | | - (self.probe)(variant, view)?; |
| 138 | + if let Err(e) = (self.probe)(variant, view) { |
| 139 | + warn!("{}: {} failed to probe: {:?}", addr, self.name, e); |
| 140 | + } |
136 | 141 | } |
137 | 142 | } |
138 | 143 |
|
|
0 commit comments