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;
70pub use self::pci_root::PciConfigIo;
71pub use self::pci_root::PciConfigMmio;
72pub use self::pci_root::PciMmioMapper;
73pub use self::pci_root::PciRoot;
74pub use self::pci_root::PciRootCommand;
75pub use self::pci_root::PciVirtualConfigMmio;
76#[cfg(any(target_os = "android", target_os = "linux"))]
77pub use self::pcie::PciBridge;
78#[cfg(any(target_os = "android", target_os = "linux"))]
79pub use self::pcie::PcieDownstreamPort;
80#[cfg(any(target_os = "android", target_os = "linux"))]
81pub use self::pcie::PcieHostPort;
82#[cfg(any(target_os = "android", target_os = "linux"))]
83pub use self::pcie::PcieRootPort;
84#[cfg(any(target_os = "android", target_os = "linux"))]
85pub use self::pcie::PcieUpstreamPort;
86pub use self::pvpanic::PvPanicCode;
87pub use self::pvpanic::PvPanicPciDevice;
88pub use self::stub::StubPciDevice;
89pub use self::stub::StubPciParameters;
90#[cfg(any(target_os = "android", target_os = "linux"))]
91pub use self::vfio_pci::VfioPciDevice;
92
93/// PCI has four interrupt pins A->D.
94#[derive(Copy, Clone, Ord, PartialOrd, PartialEq, Eq, Serialize, Deserialize)]
95pub enum PciInterruptPin {
96    IntA,
97    IntB,
98    IntC,
99    IntD,
100}
101
102impl PciInterruptPin {
103    pub fn to_mask(self) -> u32 {
104        self as u32
105    }
106}
107
108// VCFG
109pub const PCI_VCFG_PM: usize = 0x0;
110pub const PCI_VCFG_DSM: usize = 0x1;
111pub const PCI_VCFG_NOTY: usize = 0x2;
112
113pub const PCI_VENDOR_ID_INTEL: u16 = 0x8086;
114pub const PCI_VENDOR_ID_REDHAT: u16 = 0x1b36;