Skip to content

Commit 85ea4b1

Browse files
committed
uefi: Use new pci device enumeration in integration test
1 parent e5ab8f8 commit 85ea4b1

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

uefi-test-runner/src/proto/pci/root_bridge.rs

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
use uefi::Handle;
44
use uefi::boot::{OpenProtocolAttributes, OpenProtocolParams, ScopedProtocol, image_handle};
55
use uefi::proto::ProtocolPointer;
6-
use uefi::proto::pci::PciIoAddress;
76
use uefi::proto::pci::root_bridge::PciRootBridgeIo;
87

98
const RED_HAT_PCI_VENDOR_ID: u16 = 0x1AF4;
@@ -22,42 +21,40 @@ pub fn test() {
2221
for pci_handle in pci_handles {
2322
let mut pci_proto = get_open_protocol::<PciRootBridgeIo>(pci_handle);
2423

25-
for bus in 0..=255 {
26-
for dev in 0..32 {
27-
for fun in 0..8 {
28-
let addr = PciIoAddress::new(bus, dev, fun);
29-
let Ok(reg0) = pci_proto.pci().read_one::<u32>(addr.with_register(0)) else {
30-
continue;
31-
};
32-
if reg0 == 0xFFFFFFFF {
33-
continue; // not a valid device
34-
}
35-
let reg1 = pci_proto
36-
.pci()
37-
.read_one::<u32>(addr.with_register(2 * REG_SIZE))
38-
.unwrap();
39-
40-
let vendor_id = (reg0 & 0xFFFF) as u16;
41-
let device_id = (reg0 >> 16) as u16;
42-
if vendor_id == RED_HAT_PCI_VENDOR_ID {
43-
red_hat_dev_cnt += 1;
44-
}
24+
let devices = pci_proto.enumerate().unwrap();
25+
for fqaddr in devices {
26+
let addr = fqaddr.addr();
27+
let Ok(reg0) = pci_proto.pci().read_one::<u32>(addr.with_register(0)) else {
28+
continue;
29+
};
30+
if reg0 == 0xFFFFFFFF {
31+
continue; // not a valid device
32+
}
33+
let reg1 = pci_proto
34+
.pci()
35+
.read_one::<u32>(addr.with_register(2 * REG_SIZE))
36+
.unwrap();
4537

46-
let class_code = (reg1 >> 24) as u8;
47-
let subclass_code = ((reg1 >> 16) & 0xFF) as u8;
48-
if class_code == MASS_STORAGE_CTRL_CLASS_CODE {
49-
mass_storage_ctrl_cnt += 1;
38+
let vendor_id = (reg0 & 0xFFFF) as u16;
39+
let device_id = (reg0 >> 16) as u16;
40+
if vendor_id == RED_HAT_PCI_VENDOR_ID {
41+
red_hat_dev_cnt += 1;
42+
}
5043

51-
if subclass_code == SATA_CTRL_SUBCLASS_CODE {
52-
sata_ctrl_cnt += 1;
53-
}
54-
}
44+
let class_code = (reg1 >> 24) as u8;
45+
let subclass_code = ((reg1 >> 16) & 0xFF) as u8;
46+
if class_code == MASS_STORAGE_CTRL_CLASS_CODE {
47+
mass_storage_ctrl_cnt += 1;
5548

56-
log::info!(
57-
"PCI Device: [{bus}, {dev}, {fun}]: vendor={vendor_id:04X}, device={device_id:04X}, class={class_code:02X}, subclass={subclass_code:02X}"
58-
);
49+
if subclass_code == SATA_CTRL_SUBCLASS_CODE {
50+
sata_ctrl_cnt += 1;
5951
}
6052
}
53+
54+
let (bus, dev, fun) = (addr.bus, addr.dev, addr.fun);
55+
log::info!(
56+
"PCI Device: [{bus}, {dev}, {fun}]: vendor={vendor_id:04X}, device={device_id:04X}, class={class_code:02X}, subclass={subclass_code:02X}"
57+
);
6158
}
6259
}
6360

0 commit comments

Comments
 (0)