blob: 30c2a546209f41730ea5e914bcd2f81ee83ead01 [file] [log] [blame]
Yinghai Lu13f1c2a2005-07-08 02:49:49 +00001#ifndef DEVICE_PCIEXP_H
2#define DEVICE_PCIEXP_H
3/* (c) 2005 Linux Networx GPL see COPYING for details */
4
Duncan Laurie90dcdd42011-10-25 14:15:11 -07005enum aspm_type {
6 PCIE_ASPM_NONE = 0,
7 PCIE_ASPM_L0S = 1,
8 PCIE_ASPM_L1 = 2,
9 PCIE_ASPM_BOTH = 3,
10};
11
Patrick Georgi9adcbfe2017-12-05 16:36:30 -050012#define ASPM_LTR_L12_THRESHOLD_VALUE_OFFSET 16
13#define ASPM_LTR_L12_THRESHOLD_VALUE_MASK (0x3ff << ASPM_LTR_L12_THRESHOLD_VALUE_OFFSET)
14#define ASPM_LTR_L12_THRESHOLD_SCALE_OFFSET 29
15#define ASPM_LTR_L12_THRESHOLD_SCALE_MASK (0x7 << ASPM_LTR_L12_THRESHOLD_SCALE_OFFSET)
16
Subrata Baniked6996f2019-03-25 21:49:39 +053017/* Latency tolerance reporting, max non-snoop latency value 3.14ms */
18#define PCIE_LTR_MAX_NO_SNOOP_LATENCY_3146US 0x1003
19/* Latency tolerance reporting, max snoop latency value 3.14ms */
20#define PCIE_LTR_MAX_SNOOP_LATENCY_3146US 0x1003
21
Kyösti Mälkkide271a82015-03-18 13:09:47 +020022void pciexp_scan_bus(struct bus *bus, unsigned int min_devfn,
23 unsigned int max_devfn);
24
Elyes HAOUASc8a649c2018-06-10 23:36:44 +020025void pciexp_scan_bridge(struct device *dev);
Yinghai Lu13f1c2a2005-07-08 02:49:49 +000026
27extern struct device_operations default_pciexp_ops_bus;
28
Jeremy Sollercf2ac542019-10-09 21:40:36 -060029void pciexp_hotplug_scan_bridge(struct device *dev);
30
31extern struct device_operations default_pciexp_hotplug_ops_bus;
Jeremy Sollercf2ac542019-10-09 21:40:36 -060032
Tim Wawrzynczak672e8442022-01-19 11:22:51 -070033unsigned int pciexp_find_extended_cap(const struct device *dev, unsigned int cap);
Tim Wawrzynczak3d121ae12021-09-16 20:18:16 -060034unsigned int pciexp_find_next_extended_cap(const struct device *dev, unsigned int cap,
35 unsigned int offset);
Jianjun Wang777ffff2021-07-24 14:50:36 +080036
37static inline bool pciexp_is_downstream_port(int type)
38{
39 return type == PCI_EXP_TYPE_ROOT_PORT ||
40 type == PCI_EXP_TYPE_DOWNSTREAM ||
41 type == PCI_EXP_TYPE_PCIE_BRIDGE;
42}
43
Tim Wawrzynczaka62cb562021-12-08 21:16:43 -070044bool pciexp_get_ltr_max_latencies(struct device *dev, u16 *max_snoop, u16 *max_nosnoop);
45
Yinghai Lu13f1c2a2005-07-08 02:49:49 +000046#endif /* DEVICE_PCIEXP_H */