pci_core/capabilities/
mod.rs1pub use self::extended::PciExtendedCapability;
7pub use self::read_only::ReadOnlyCapability;
8
9use crate::spec::caps::CapabilityId;
10use chipset_device::pci::ByteEnabledDwordRead;
11use chipset_device::pci::ByteEnabledDwordWrite;
12use inspect::Inspect;
13use vmcore::save_restore::ProtobufSaveRestore;
14
15pub mod extended;
16pub mod msi_cap;
17pub mod msix;
18pub mod pci_express;
19pub mod read_only;
20
21pub trait PciCapability: Send + Sync + Inspect + ProtobufSaveRestore {
23 fn label(&self) -> &str;
25
26 fn capability_id(&self) -> CapabilityId;
28
29 fn len(&self) -> usize;
31
32 fn read(&self, offset: u16, value: ByteEnabledDwordRead<'_>);
35
36 fn write(&mut self, offset: u16, val: ByteEnabledDwordWrite);
39
40 fn reset(&mut self);
42
43 fn as_pci_express(&self) -> Option<&pci_express::PciExpressCapability> {
47 None
48 }
49
50 fn as_pci_express_mut(&mut self) -> Option<&mut pci_express::PciExpressCapability> {
52 None
53 }
54
55 fn as_msi_cap(&self) -> Option<&msi_cap::MsiCapability> {
57 None
58 }
59
60 fn as_msi_cap_mut(&mut self) -> Option<&mut msi_cap::MsiCapability> {
62 None
63 }
64}