devices/pci/
mod.rs

1// Copyright 2018 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5//! Implements pci devices and busses.
6
7mod acpi;
8#[cfg(any(target_os = "android", target_os = "linux"))]
9mod coiommu;
10mod msi;
11mod msix;
12mod pci_configuration;
13mod pci_device;
14#[cfg(feature = "pci-hotplug")]
15mod pci_hotplug;
16mod pci_root;
17#[cfg(any(target_os = "android", target_os = "linux"))]
18mod pcie;
19pub mod pm;
20mod pvpanic;
21mod stub;
22#[cfg(any(target_os = "android", target_os = "linux"))]
23mod vfio_pci;
24
25pub use resources::PciAddress;
26pub use resources::PciAddressError;
27use serde::Deserialize;
28use serde::Serialize;
29
30pub use self::acpi::GpeScope;
31#[cfg(any(target_os = "android", target_os = "linux"))]
32pub use self::coiommu::CoIommuDev;
33#[cfg(any(target_os = "android", target_os = "linux"))]
34pub use self::coiommu::CoIommuParameters;
35#[cfg(any(target_os = "android", target_os = "linux"))]
36pub use self::coiommu::CoIommuUnpinPolicy;
37pub use self::msi::MsiConfig;
38pub use self::msix::MsixCap;
39pub use self::msix::MsixConfig;
40pub use self::msix::MsixStatus;
41pub use self::pci_configuration::PciBarConfiguration;
42pub use self::pci_configuration::PciBarIndex;
43pub use self::pci_configuration::PciBarPrefetchable;
44pub use self::pci_configuration::PciBarRegionType;
45pub use self::pci_configuration::PciBaseSystemPeripheralSubclass;
46pub use self::pci_configuration::PciCapability;
47pub use self::pci_configuration::PciCapabilityID;
48pub use self::pci_configuration::PciClassCode;
49pub use self::pci_configuration::PciConfiguration;
50pub use self::pci_configuration::PciDisplaySubclass;
51pub use self::pci_configuration::PciHeaderType;
52pub use self::pci_configuration::PciInputDeviceSubclass;
53pub use self::pci_configuration::PciMassStorageSubclass;
54pub use self::pci_configuration::PciMultimediaSubclass;
55pub use self::pci_configuration::PciNetworkControllerSubclass;
56pub use self::pci_configuration::PciProgrammingInterface;
57pub use self::pci_configuration::PciSerialBusSubClass;
58pub use self::pci_configuration::PciSimpleCommunicationControllerSubclass;
59pub use self::pci_configuration::PciSubclass;
60pub use self::pci_configuration::PciWirelessControllerSubclass;
61pub use self::pci_device::BarRange;
62pub use self::pci_device::Error as PciDeviceError;
63pub use self::pci_device::PciBus;
64pub use self::pci_device::PciDevice;
65pub use self::pci_device::PreferredIrq;
66#[cfg(feature = "pci-hotplug")]
67pub use self::pci_hotplug::HotPluggable;
68#[cfg(feature = "pci-hotplug")]
69pub use self::pci_hotplug::IntxParameter;
70#[cfg(feature = "pci-hotplug")]
71pub use self::pci_hotplug::NetResourceCarrier;
72#[cfg(feature = "pci-hotplug")]
73pub use self::pci_hotplug::ResourceCarrier;
74pub use self::pci_root::PciConfigIo;
75pub use self::pci_root::PciConfigMmio;
76pub use self::pci_root::PciMmioMapper;
77pub use self::pci_root::PciRoot;
78pub use self::pci_root::PciRootCommand;
79pub use self::pci_root::PciVirtualConfigMmio;
80#[cfg(any(target_os = "android", target_os = "linux"))]
81pub use self::pcie::PciBridge;
82#[cfg(any(target_os = "android", target_os = "linux"))]
83pub use self::pcie::PcieDownstreamPort;
84#[cfg(any(target_os = "android", target_os = "linux"))]
85pub use self::pcie::PcieHostPort;
86#[cfg(any(target_os = "android", target_os = "linux"))]
87pub use self::pcie::PcieRootPort;
88#[cfg(any(target_os = "android", target_os = "linux"))]
89pub use self::pcie::PcieUpstreamPort;
90pub use self::pvpanic::PvPanicCode;
91pub use self::pvpanic::PvPanicPciDevice;
92pub use self::stub::StubPciDevice;
93pub use self::stub::StubPciParameters;
94#[cfg(any(target_os = "android", target_os = "linux"))]
95pub use self::vfio_pci::VfioPciDevice;
96
97/// PCI has four interrupt pins A->D.
98#[derive(Copy, Clone, Ord, PartialOrd, PartialEq, Eq, Serialize, Deserialize)]
99pub enum PciInterruptPin {
100    IntA,
101    IntB,
102    IntC,
103    IntD,
104}
105
106impl PciInterruptPin {
107    pub fn to_mask(self) -> u32 {
108        self as u32
109    }
110}
111
112// VCFG
113pub const PCI_VCFG_PM: usize = 0x0;
114pub const PCI_VCFG_DSM: usize = 0x1;
115pub const PCI_VCFG_NOTY: usize = 0x2;
116
117pub const PCI_VENDOR_ID_INTEL: u16 = 0x8086;
118pub const PCI_VENDOR_ID_REDHAT: u16 = 0x1b36;