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