Skip to content

Commit 0bcb096

Browse files
bjorn3IsaacWoods
authored andcommitted
Add method to get the address of any capability
Previously it wasn't possible to get the address of MSI and MSI-X capabilities. This is necessary for Redox OS to gradually move towards using this crate for parsing capabilities and in general allows users to parse capabilties that are unsupported by this crate themself without breaking when this crate adds support for parsing them itself.
1 parent 07959ec commit 0bcb096

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

src/capability/mod.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,28 @@ impl PciCapability {
8787
_ => Some(PciCapability::Unknown { address, id }),
8888
}
8989
}
90+
91+
pub fn address(&self) -> PciCapabilityAddress {
92+
match *self {
93+
PciCapability::PowerManagement(address) => address,
94+
PciCapability::AcceleratedGraphicsPort(address) => address,
95+
PciCapability::VitalProductData(address) => address,
96+
PciCapability::SlotIdentification(address) => address,
97+
PciCapability::Msi(msi_cap) => msi_cap.address,
98+
PciCapability::CompactPCIHotswap(address) => address,
99+
PciCapability::PciX(address) => address,
100+
PciCapability::HyperTransport(address) => address,
101+
PciCapability::Vendor(address) => address,
102+
PciCapability::DebugPort(address) => address,
103+
PciCapability::CompactPCICentralResourceControl(address) => address,
104+
PciCapability::PciHotPlugControl(address) => address,
105+
PciCapability::BridgeSubsystemVendorId(address) => address,
106+
PciCapability::AGP3(address) => address,
107+
PciCapability::PciExpress(address) => address,
108+
PciCapability::MsiX(msix_cap) => msix_cap.address,
109+
PciCapability::Unknown { address, id: _ } => address,
110+
}
111+
}
90112
}
91113

92114
pub struct CapabilityIterator<T: ConfigRegionAccess> {

src/capability/msi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub enum TriggerMode {
4747

4848
#[derive(Debug, Clone, Copy)]
4949
pub struct MsiCapability {
50-
address: PciCapabilityAddress,
50+
pub(super) address: PciCapabilityAddress,
5151
per_vector_masking: bool,
5252
is_64bit: bool,
5353
multiple_message_capable: MultipleMessageSupport,

src/capability/msix.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use bit_field::BitField;
44

55
#[derive(Clone, Copy, Debug)]
66
pub struct MsixCapability {
7-
address: PciCapabilityAddress,
7+
pub(super) address: PciCapabilityAddress,
88
table_size: u16,
99
/// Table BAR in bits 0..3 and offset into that BAR in bits 3..31
1010
table: u32,

0 commit comments

Comments
 (0)