Expand description
PCI Bus Access and Enumeration Library
This crate provides basic PCI bus access and enumeration routines for x86 systems.
It is designed for use in no_std environments, such as kernels or bootloaders.
§Features
- Read PCI configuration space
- Enumerate devices on PCI bus 0
- Print device information using a serial logger
§Example
use polished_pci::pci_enumeration_demo;
pci_enumeration_demo();§Integration Examples
§Kernel-level Initialization
// In your kernel's main.rs or init.rs
use polished_pci::pci_enumeration_demo;
// Initialize and enumerate PCI devices (prints to serial logger)
pci_enumeration_demo();§Dumping All PCI Devices
use polished_pci::scan_bus0_devices;
// Scan all devices on bus 0
let devices = scan_bus0_devices();
for dev in devices.iter() {
// Use the fields of dev directly, or print as needed
// e.g., println!("bus={} device={} vendor={:04x} device={:04x} class={:02x} subclass={:02x}", dev.bus, dev.device, dev.vendor_id, dev.device_id, dev.class, dev.subclass);
}§Finding the First Network Device
use polished_pci::{scan_bus0_devices, PciDevice, class_code_str};
// Scan all devices on bus 0
let devices = scan_bus0_devices().unwrap();
// Class code 0x02 is for network controllers
let net_dev = devices.iter().find(|dev| dev.class == 0x02);
if let Some(dev) = net_dev {
// Do something with the network device
// e.g., print info or initialize driver
}Re-exports§
pub use bar::BarInfo;pub use bar::get_bars;pub use bar::probe_bar;pub use config::pci_config_read;pub use config::read_config_u8;pub use config::read_config_u16;pub use config::read_config_u32;pub use config::write_config_u8;pub use config::write_config_u16;pub use config::write_config_u32;pub use device::PciDevice;pub use error::PciError;pub use lookup::class_code_str;pub use lookup::subclass_str;pub use lookup::vendor_id_str;pub use scan::pci_enumeration_demo;pub use scan::print_pci_device;pub use scan::scan_bus0_devices;