1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #ifndef DEVICE_PCIEXP_H
4 #define DEVICE_PCIEXP_H
5 /* (c) 2005 Linux Networx GPL see COPYING for details */
6 #include <device/pci_def.h>
15 #define ASPM_LTR_L12_THRESHOLD_VALUE_OFFSET 16
16 #define ASPM_LTR_L12_THRESHOLD_VALUE_MASK (0x3ff << ASPM_LTR_L12_THRESHOLD_VALUE_OFFSET)
17 #define ASPM_LTR_L12_THRESHOLD_SCALE_OFFSET 29
18 #define ASPM_LTR_L12_THRESHOLD_SCALE_MASK (0x7 << ASPM_LTR_L12_THRESHOLD_SCALE_OFFSET)
20 /* Latency tolerance reporting, max non-snoop latency value 3.14ms */
21 #define PCIE_LTR_MAX_NO_SNOOP_LATENCY_3146US 0x1003
22 /* Latency tolerance reporting, max snoop latency value 3.14ms */
23 #define PCIE_LTR_MAX_SNOOP_LATENCY_3146US 0x1003
25 void pciexp_scan_bus(struct bus
*bus
, unsigned int min_devfn
,
26 unsigned int max_devfn
);
28 void pciexp_scan_bridge(struct device
*dev
);
30 extern struct device_operations default_pciexp_ops_bus
;
32 void pciexp_hotplug_scan_bridge(struct device
*dev
);
34 extern struct device_operations default_pciexp_hotplug_ops_bus
;
36 unsigned int pciexp_find_extended_cap(const struct device
*dev
, unsigned int cap
,
38 unsigned int pciexp_find_ext_vendor_cap(const struct device
*dev
, unsigned int cap
,
41 static inline bool pciexp_is_downstream_port(int type
)
43 return type
== PCI_EXP_TYPE_ROOT_PORT
||
44 type
== PCI_EXP_TYPE_DOWNSTREAM
||
45 type
== PCI_EXP_TYPE_PCIE_BRIDGE
;
48 bool pciexp_dev_is_slot_hot_plug_cap(struct device
*dev
);
50 struct device
*pcie_find_dsn(const uint64_t serial
, const uint16_t vid
,
53 bool pciexp_get_ltr_max_latencies(struct device
*dev
, u16
*max_snoop
, u16
*max_nosnoop
);
55 #endif /* DEVICE_PCIEXP_H */