pci_core/capabilities/
mod.rs1pub use self::extended::PciExtendedCapability;
7pub use self::read_only::ReadOnlyCapability;
8
9use crate::spec::caps::CapabilityId;
10use inspect::Inspect;
11use vmcore::save_restore::ProtobufSaveRestore;
12
13pub mod extended;
14pub mod msi_cap;
15pub mod msix;
16pub mod pci_express;
17pub mod read_only;
18
19pub trait PciCapability: Send + Sync + Inspect + ProtobufSaveRestore {
21 fn label(&self) -> &str;
23
24 fn capability_id(&self) -> CapabilityId;
26
27 fn len(&self) -> usize;
29
30 fn read_u32(&self, offset: u16) -> u32;
32
33 fn write_u32(&mut self, offset: u16, val: u32);
35
36 fn reset(&mut self);
38
39 fn as_pci_express(&self) -> Option<&pci_express::PciExpressCapability> {
43 None
44 }
45
46 fn as_pci_express_mut(&mut self) -> Option<&mut pci_express::PciExpressCapability> {
48 None
49 }
50
51 fn as_msi_cap(&self) -> Option<&msi_cap::MsiCapability> {
53 None
54 }
55
56 fn as_msi_cap_mut(&mut self) -> Option<&mut msi_cap::MsiCapability> {
58 None
59 }
60}