Skip to content

Commit ffe4fae

Browse files
author
Jiajie Chen
committed
Fix ahci driver and match ahci driver by SATA class
1 parent 4607e06 commit ffe4fae

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

kernel/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kernel/src/drivers/bus/pci.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ pub fn init_driver(dev: &PCIDevice) {
151151
let vaddr = phys_to_virt(addr as usize);
152152
let index = NET_DRIVERS.read().len();
153153
e1000::init(name, irq, vaddr, len as usize, index);
154+
return;
154155
}
155156
}
156157
(0x8086, 0x10fb) => {
@@ -163,23 +164,23 @@ pub fn init_driver(dev: &PCIDevice) {
163164
dev.loc,
164165
ixgbe::ixgbe_init(name, irq, vaddr, len as usize, index),
165166
);
167+
return;
166168
}
167169
}
168-
(0x8086, 0x2922) | (0x8086, 0xa282) | (0x8086, 0x8d02) => {
169-
// 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode]
170-
// 200 Series PCH SATA controller [AHCI mode]
171-
// C610/X99 series chipset 6-Port SATA Controller [AHCI mode]
172-
if let Some(BAR::Memory(addr, len, _, _)) = dev.bars[5] {
173-
info!("Found AHCI dev {:?} BAR5 {:x?}", dev, addr);
174-
let irq = unsafe { enable(dev.loc) };
175-
assert!(len as usize <= PAGE_SIZE);
176-
let vaddr = phys_to_virt(addr as usize);
177-
if let Some(driver) = ahci::init(irq, vaddr, len as usize) {
178-
PCI_DRIVERS.lock().insert(dev.loc, driver);
179-
}
170+
_ => {}
171+
}
172+
if dev.id.class == 0x01 && dev.id.subclass == 0x06 {
173+
// Mass storage class
174+
// SATA subclass
175+
if let Some(BAR::Memory(addr, len, _, _)) = dev.bars[5] {
176+
info!("Found AHCI dev {:?} BAR5 {:x?}", dev, addr);
177+
let irq = unsafe { enable(dev.loc) };
178+
assert!(len as usize <= PAGE_SIZE);
179+
let vaddr = phys_to_virt(addr as usize);
180+
if let Some(driver) = ahci::init(irq, vaddr, len as usize) {
181+
PCI_DRIVERS.lock().insert(dev.loc, driver);
180182
}
181183
}
182-
_ => {}
183184
}
184185
}
185186

0 commit comments

Comments
 (0)