pcid: Merge CapabilityOffsetsIter into CapabilitiesIter

This commit is contained in:
bjorn3
2024-06-09 18:21:50 +02:00
parent 9d37d15827
commit 9aed7d560e
2 changed files with 14 additions and 24 deletions
+1 -1
View File
@@ -267,7 +267,7 @@ fn handle_parsed_header(state: Arc<State>, config: &Config, header: PciEndpointH
pci: &state.pcie,
addr: header.address(),
};
crate::pci::cap::CapabilitiesIter { inner: crate::pci::cap::CapabilityOffsetsIter::new(header.cap_pointer(), &func) }.collect::<Vec<_>>()
crate::pci::cap::CapabilitiesIter::new(header.cap_pointer(), &func).collect::<Vec<_>>()
} else {
Vec::new()
};
+13 -23
View File
@@ -1,11 +1,11 @@
use super::func::ConfigReader;
use serde::{Serialize, Deserialize};
pub struct CapabilityOffsetsIter<'a, R> {
pub struct CapabilitiesIter<'a, R> {
offset: u8,
reader: &'a R,
}
impl<'a, R> CapabilityOffsetsIter<'a, R> {
impl<'a, R> CapabilitiesIter<'a, R> {
pub fn new(offset: u8, reader: &'a R) -> Self {
Self {
offset,
@@ -13,14 +13,14 @@ impl<'a, R> CapabilityOffsetsIter<'a, R> {
}
}
}
impl<'a, R> Iterator for CapabilityOffsetsIter<'a, R>
impl<'a, R> Iterator for CapabilitiesIter<'a, R>
where
R: ConfigReader
{
type Item = u8;
type Item = (u8, Capability);
fn next(&mut self) -> Option<Self::Item> {
unsafe {
let offset = unsafe {
// mask RsvdP bits
self.offset = self.offset & 0xFC;
@@ -32,8 +32,14 @@ where
let offset = self.offset;
self.offset = next;
Some(offset)
}
offset
};
let cap = unsafe {
Capability::parse(self.reader, offset)
};
Some((offset, cap))
}
}
@@ -229,19 +235,3 @@ impl Capability {
}
}
}
pub struct CapabilitiesIter<'a, R> {
pub inner: CapabilityOffsetsIter<'a, R>,
}
impl<'a, R> Iterator for CapabilitiesIter<'a, R>
where
R: ConfigReader
{
type Item = (u8, Capability);
fn next(&mut self) -> Option<Self::Item> {
let offset = self.inner.next()?;
Some((offset, unsafe { Capability::parse(self.inner.reader, offset) }))
}
}