Remove PciBus and PciDev types
They weren't used in a load bearing way. If we want to keep persistent state about buses and devices in the future they would probably get a different shape.
This commit is contained in:
+6
-6
@@ -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;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -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<Self::Item> {
|
||||
match self.num {
|
||||
dev_num if dev_num < 32 => {
|
||||
let dev = PciDev {
|
||||
bus: self.bus,
|
||||
num: self.num,
|
||||
};
|
||||
self.num += 1;
|
||||
Some(dev)
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<Self::Item> {
|
||||
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,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<u8> {
|
||||
|
||||
@@ -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<u8>,
|
||||
}
|
||||
|
||||
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<Self::Item> {
|
||||
match self.num {
|
||||
Some(bus_num) => {
|
||||
let bus = PciBus { num: bus_num };
|
||||
self.num = bus_num.checked_add(1);
|
||||
Some(bus)
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user