diff --git a/pcid/src/main.rs b/pcid/src/main.rs index 83d7ef2ce7..65c3e1b4ad 100644 --- a/pcid/src/main.rs +++ b/pcid/src/main.rs @@ -10,7 +10,7 @@ use log::{debug, error, info, warn, trace}; use redox_log::{OutputBuilder, RedoxLogger}; use crate::config::Config; -use crate::pci::{CfgAccess, Pci, PciAddress, PciBar, PciBus, PciClass, PciFunc, PciHeader, PciHeaderError, PciHeaderType}; +use crate::pci::{CfgAccess, Pci, PciAddress, PciBar, PciClass, PciFunc, PciHeader, PciHeaderError, PciHeaderType}; use crate::pci::cap::Capability as PciCapability; use crate::pci::func::{ConfigReader, ConfigWriter}; use crate::pcie::Pcie; @@ -592,10 +592,10 @@ fn main(args: Args) { let bus_num = bus_nums[bus_i]; bus_i += 1; - let bus = PciBus { num: bus_num }; - 'dev: for dev in bus.devs() { - for func in dev.funcs(pci) { - let func_addr = func.addr; + 'dev: for dev_num in 0..32 { + for func_num in 0..8 { + let func_addr = PciAddress::new(0, bus_num, dev_num, func_num); + let func = PciFunc { pci, addr: func_addr }; match PciHeader::from_reader(func) { Ok(header) => { handle_parsed_header(Arc::clone(&state), &config, func_addr, header); @@ -605,7 +605,7 @@ fn main(args: Args) { } Err(PciHeaderError::NoDevice) => { if func_addr.function() == 0 { - trace!("PCI {:>02X}/{:>02X}: no dev", bus.num, dev.num); + trace!("PCI {:>02X}:{:>02X}: no dev", bus_num, dev_num); continue 'dev; } }, diff --git a/pcid/src/pci/bus.rs b/pcid/src/pci/bus.rs deleted file mode 100644 index 9900d118d9..0000000000 --- a/pcid/src/pci/bus.rs +++ /dev/null @@ -1,40 +0,0 @@ -use super::PciDev; - -#[derive(Copy, Clone)] -pub struct PciBus { - pub num: u8, -} - -impl<'pci> PciBus { - pub fn devs(self) -> PciBusIter { - PciBusIter::new(self) - } -} - -pub struct PciBusIter { - bus: PciBus, - num: u8, -} - -impl PciBusIter { - pub fn new(bus: PciBus) -> Self { - PciBusIter { bus, num: 0 } - } -} - -impl Iterator for PciBusIter { - type Item = PciDev; - fn next(&mut self) -> Option { - match self.num { - dev_num if dev_num < 32 => { - let dev = PciDev { - bus: self.bus, - num: self.num, - }; - self.num += 1; - Some(dev) - } - _ => None, - } - } -} diff --git a/pcid/src/pci/dev.rs b/pcid/src/pci/dev.rs deleted file mode 100644 index b64eeb1034..0000000000 --- a/pcid/src/pci/dev.rs +++ /dev/null @@ -1,42 +0,0 @@ -use super::{CfgAccess, PciAddress, PciBus, PciFunc}; - -#[derive(Copy, Clone)] -pub struct PciDev { - pub bus: PciBus, - pub num: u8, -} - -impl<'pci> PciDev { - pub fn funcs(self, pci: &'pci dyn CfgAccess) -> PciDevIter<'pci> { - PciDevIter::new(self, pci) - } -} - -pub struct PciDevIter<'pci> { - pci: &'pci dyn CfgAccess, - dev: PciDev, - num: u8, -} - -impl<'pci> PciDevIter<'pci> { - pub fn new(dev: PciDev, pci: &'pci dyn CfgAccess) -> Self { - PciDevIter { pci, dev, num: 0 } - } -} - -impl<'pci> Iterator for PciDevIter<'pci> { - type Item = PciFunc<'pci>; - fn next(&mut self) -> Option { - match self.num { - func_num if func_num < 8 => { - let func = PciFunc { - pci: self.pci, - addr: PciAddress::new(0, self.dev.bus.num, self.dev.num, func_num), - }; - self.num += 1; - Some(func) - } - _ => None, - } - } -} diff --git a/pcid/src/pci/func.rs b/pcid/src/pci/func.rs index 6625542db9..d6c7e93b70 100644 --- a/pcid/src/pci/func.rs +++ b/pcid/src/pci/func.rs @@ -1,6 +1,6 @@ use byteorder::{ByteOrder, LittleEndian}; -use super::{CfgAccess, PciAddress, PciDev}; +use super::{CfgAccess, PciAddress}; pub trait ConfigReader { unsafe fn read_range(&self, offset: u16, len: u16) -> Vec { diff --git a/pcid/src/pci/mod.rs b/pcid/src/pci/mod.rs index 84baf13f53..6fe191ea09 100644 --- a/pcid/src/pci/mod.rs +++ b/pcid/src/pci/mod.rs @@ -8,19 +8,15 @@ use serde::{Deserialize, Serialize}; use syscall::io::{Io as _, Pio}; pub use self::bar::PciBar; -pub use self::bus::{PciBus, PciBusIter}; pub use self::class::PciClass; -pub use self::dev::{PciDev, PciDevIter}; pub use self::func::PciFunc; pub use self::header::{PciHeader, PciHeaderError, PciHeaderType}; use log::info; mod bar; -mod bus; pub mod cap; mod class; -mod dev; pub mod func; pub mod header; pub mod msi; @@ -104,10 +100,6 @@ impl Pci { } } - pub fn buses<'pci>(&'pci self) -> PciIter<'pci> { - PciIter::new(self) - } - fn set_iopl() { // make sure that pcid is not granted io port permission unless pcie memory-mapped // configuration space is not available. @@ -176,28 +168,3 @@ impl CfgAccess for Pci { todo!("Pci::CfgAccess::write on this architecture") } } - -pub struct PciIter<'pci> { - pci: &'pci dyn CfgAccess, - num: Option, -} - -impl<'pci> PciIter<'pci> { - pub fn new(pci: &'pci dyn CfgAccess) -> Self { - PciIter { pci, num: Some(0) } - } -} - -impl<'pci> Iterator for PciIter<'pci> { - type Item = PciBus; - fn next(&mut self) -> Option { - match self.num { - Some(bus_num) => { - let bus = PciBus { num: bus_num }; - self.num = bus_num.checked_add(1); - Some(bus) - } - None => None, - } - } -}