xref: /aosp_15_r20/external/crosvm/devices/src/pci/pcie/mod.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2021 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker mod pci_bridge;
6*bb4ee6a4SAndroid Build Coastguard Worker mod pcie_device;
7*bb4ee6a4SAndroid Build Coastguard Worker mod pcie_host;
8*bb4ee6a4SAndroid Build Coastguard Worker mod pcie_port;
9*bb4ee6a4SAndroid Build Coastguard Worker mod pcie_rp;
10*bb4ee6a4SAndroid Build Coastguard Worker mod pcie_switch;
11*bb4ee6a4SAndroid Build Coastguard Worker 
12*bb4ee6a4SAndroid Build Coastguard Worker pub use pci_bridge::PciBridge;
13*bb4ee6a4SAndroid Build Coastguard Worker pub use pcie_host::PcieHostPort;
14*bb4ee6a4SAndroid Build Coastguard Worker pub use pcie_rp::PcieRootPort;
15*bb4ee6a4SAndroid Build Coastguard Worker pub use pcie_switch::PcieDownstreamPort;
16*bb4ee6a4SAndroid Build Coastguard Worker pub use pcie_switch::PcieUpstreamPort;
17*bb4ee6a4SAndroid Build Coastguard Worker 
18*bb4ee6a4SAndroid Build Coastguard Worker #[allow(dead_code)]
19*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Clone, Copy, Eq, PartialEq)]
20*bb4ee6a4SAndroid Build Coastguard Worker pub enum PcieDevicePortType {
21*bb4ee6a4SAndroid Build Coastguard Worker     PcieEndpoint = 0,
22*bb4ee6a4SAndroid Build Coastguard Worker     PcieLegacyEndpoint = 1,
23*bb4ee6a4SAndroid Build Coastguard Worker     RootPort = 4,
24*bb4ee6a4SAndroid Build Coastguard Worker     UpstreamPort = 5,
25*bb4ee6a4SAndroid Build Coastguard Worker     DownstreamPort = 6,
26*bb4ee6a4SAndroid Build Coastguard Worker     Pcie2PciBridge = 7,
27*bb4ee6a4SAndroid Build Coastguard Worker     Pci2PcieBridge = 8,
28*bb4ee6a4SAndroid Build Coastguard Worker     RCIntegratedEndpoint = 9,
29*bb4ee6a4SAndroid Build Coastguard Worker     RCEventCollector = 0xa,
30*bb4ee6a4SAndroid Build Coastguard Worker }
31*bb4ee6a4SAndroid Build Coastguard Worker 
32*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_CAP_LEN: usize = 0x3C;
33*bb4ee6a4SAndroid Build Coastguard Worker 
34*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_CAP_VERSION: u16 = 0x2;
35*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_TYPE_SHIFT: u16 = 0x4;
36*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_CAP_SLOT_SHIFT: u16 = 0x8;
37*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_CAP_IRQ_NUM_SHIFT: u16 = 0x9;
38*bb4ee6a4SAndroid Build Coastguard Worker 
39*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_DEVCAP_RBER: u32 = 0x0000_8000;
40*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_LINK_X1: u16 = 0x10;
41*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_LINK_2_5GT: u16 = 0x01;
42*bb4ee6a4SAndroid Build Coastguard Worker 
43*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCAP_ABP: u32 = 0x01; // Attention Button Present
44*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCAP_AIP: u32 = 0x08; // Attention Indicator Present
45*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCAP_PIP: u32 = 0x10; // Power Indicator Present
46*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCAP_HPS: u32 = 0x20; // Hot-Plug Surprise
47*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCAP_HPC: u32 = 0x40; // Hot-Plug Capable
48*bb4ee6a4SAndroid Build Coastguard Worker 
49*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_OFFSET: usize = 0x18;
50*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_PIC: u16 = 0x300; // Power indicator
51*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_PIC_ON: u16 = 0x100; // Power indicator on
52*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_PIC_BLINK: u16 = 0x200; // Power indicator blink
53*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_PIC_OFF: u16 = 0x300; // Power indicator off
54*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_AIC_OFF: u16 = 0xC0;
55*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_ABPE: u16 = 0x01;
56*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_PDCE: u16 = 0x08;
57*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_CCIE: u16 = 0x10;
58*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTCTL_HPIE: u16 = 0x20;
59*bb4ee6a4SAndroid Build Coastguard Worker 
60*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_OFFSET: usize = 0x1A;
61*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_ABP: u16 = 0x0001;
62*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_PFD: u16 = 0x0002;
63*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_PDC: u16 = 0x0008;
64*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_CC: u16 = 0x0010;
65*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_PDS: u16 = 0x0040;
66*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_SLTSTA_DLLSC: u16 = 0x0100;
67*bb4ee6a4SAndroid Build Coastguard Worker 
68*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTCTL_OFFSET: usize = 0x1C;
69*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTCTL_PME_ENABLE: u16 = 0x08;
70*bb4ee6a4SAndroid Build Coastguard Worker 
71*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTSTA_OFFSET: usize = 0x20;
72*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTSTA_PME_REQ_ID_MASK: u32 = 0xFFFF;
73*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTSTA_PME_STATUS: u32 = 0x10000;
74*bb4ee6a4SAndroid Build Coastguard Worker const PCIE_ROOTSTA_PME_PENDING: u32 = 0x20000;
75