]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blame - include/linux/pci.h
memblock: fix memblock_phys_alloc() section mismatch error
[mirror_ubuntu-focal-kernel.git] / include / linux / pci.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
1da177e4
LT
2/*
3 * pci.h
4 *
5 * PCI defines and function prototypes
6 * Copyright 1994, Drew Eckhardt
7 * Copyright 1997--1999 Martin Mares <mj@ucw.cz>
8 *
7ce2e76a
KW
9 * PCI Express ASPM defines and function prototypes
10 * Copyright (c) 2007 Intel Corp.
11 * Zhang Yanmin (yanmin.zhang@intel.com)
12 * Shaohua Li (shaohua.li@intel.com)
13 *
1da177e4
LT
14 * For more information, please consult the following manuals (look at
15 * http://www.pcisig.com/ for how to get them):
16 *
17 * PCI BIOS Specification
18 * PCI Local Bus Specification
19 * PCI to PCI Bridge Specification
7ce2e76a 20 * PCI Express Specification
1da177e4
LT
21 * PCI System Design Guide
22 */
1da177e4
LT
23#ifndef LINUX_PCI_H
24#define LINUX_PCI_H
25
1da177e4 26
778382e0
DW
27#include <linux/mod_devicetable.h>
28
1da177e4 29#include <linux/types.h>
98db6f19 30#include <linux/init.h>
1da177e4
LT
31#include <linux/ioport.h>
32#include <linux/list.h>
4a7fb636 33#include <linux/compiler.h>
1da177e4 34#include <linux/errno.h>
f46753c5 35#include <linux/kobject.h>
60063497 36#include <linux/atomic.h>
1da177e4 37#include <linux/device.h>
704e8953 38#include <linux/interrupt.h>
1388cc96 39#include <linux/io.h>
14d76b68 40#include <linux/resource_ext.h>
607ca46e 41#include <uapi/linux/pci.h>
1da177e4 42
7e7a43c3
AB
43#include <linux/pci_ids.h>
44
85467136
SK
45/*
46 * The PCI interface treats multi-function devices as independent
47 * devices. The slot/function address of each device is encoded
48 * in a single byte as follows:
49 *
50 * 7:3 = slot
51 * 2:0 = function
f7625980
BH
52 *
53 * PCI_DEVFN(), PCI_SLOT(), and PCI_FUNC() are defined in uapi/linux/pci.h.
85467136 54 * In the interest of not exposing interfaces to user-space unnecessarily,
f7625980 55 * the following kernel-only defines are being added here.
85467136 56 */
0aa0f5d1 57#define PCI_DEVID(bus, devfn) ((((u16)(bus)) << 8) | (devfn))
85467136
SK
58/* return bus from PCI devid = ((u16)bus_number) << 8) | devfn */
59#define PCI_BUS_NUM(x) (((x) >> 8) & 0xff)
60
f46753c5
AC
61/* pci_slot represents a physical slot */
62struct pci_slot {
0aa0f5d1
BH
63 struct pci_bus *bus; /* Bus this slot is on */
64 struct list_head list; /* Node in list of slots */
65 struct hotplug_slot *hotplug; /* Hotplug info (move here) */
66 unsigned char number; /* PCI_SLOT(pci_dev->devfn) */
67 struct kobject kobj;
f46753c5
AC
68};
69
0ad772ec
AC
70static inline const char *pci_slot_name(const struct pci_slot *slot)
71{
72 return kobject_name(&slot->kobj);
73}
74
1da177e4
LT
75/* File state for mmap()s on /proc/bus/pci/X/Y */
76enum pci_mmap_state {
77 pci_mmap_io,
78 pci_mmap_mem
79};
80
0aa0f5d1 81/* For PCI devices, the region numbers are assigned this way: */
fde09c6d
YZ
82enum {
83 /* #0-5: standard PCI resources */
84 PCI_STD_RESOURCES,
85 PCI_STD_RESOURCE_END = 5,
86
87 /* #6: expansion ROM resource */
88 PCI_ROM_RESOURCE,
89
0aa0f5d1 90 /* Device-specific resources */
d1b054da
YZ
91#ifdef CONFIG_PCI_IOV
92 PCI_IOV_RESOURCES,
93 PCI_IOV_RESOURCE_END = PCI_IOV_RESOURCES + PCI_SRIOV_NUM_BARS - 1,
94#endif
95
0aa0f5d1 96 /* Resources assigned to buses behind the bridge */
fde09c6d
YZ
97#define PCI_BRIDGE_RESOURCE_NUM 4
98
99 PCI_BRIDGE_RESOURCES,
100 PCI_BRIDGE_RESOURCE_END = PCI_BRIDGE_RESOURCES +
101 PCI_BRIDGE_RESOURCE_NUM - 1,
102
0aa0f5d1 103 /* Total resources associated with a PCI device */
fde09c6d
YZ
104 PCI_NUM_RESOURCES,
105
0aa0f5d1 106 /* Preserve this for compatibility */
cda57bf9 107 DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES,
fde09c6d 108};
1da177e4 109
b352baf1
PB
110/**
111 * enum pci_interrupt_pin - PCI INTx interrupt values
112 * @PCI_INTERRUPT_UNKNOWN: Unknown or unassigned interrupt
113 * @PCI_INTERRUPT_INTA: PCI INTA pin
114 * @PCI_INTERRUPT_INTB: PCI INTB pin
115 * @PCI_INTERRUPT_INTC: PCI INTC pin
116 * @PCI_INTERRUPT_INTD: PCI INTD pin
117 *
118 * Corresponds to values for legacy PCI INTx interrupts, as can be found in the
119 * PCI_INTERRUPT_PIN register.
120 */
121enum pci_interrupt_pin {
122 PCI_INTERRUPT_UNKNOWN,
123 PCI_INTERRUPT_INTA,
124 PCI_INTERRUPT_INTB,
125 PCI_INTERRUPT_INTC,
126 PCI_INTERRUPT_INTD,
127};
128
129/* The number of legacy PCI INTx interrupts */
130#define PCI_NUM_INTX 4
131
224abb67
BH
132/*
133 * pci_power_t values must match the bits in the Capabilities PME_Support
134 * and Control/Status PowerState fields in the Power Management capability.
135 */
1da177e4
LT
136typedef int __bitwise pci_power_t;
137
4352dfd5
GKH
138#define PCI_D0 ((pci_power_t __force) 0)
139#define PCI_D1 ((pci_power_t __force) 1)
140#define PCI_D2 ((pci_power_t __force) 2)
1da177e4
LT
141#define PCI_D3hot ((pci_power_t __force) 3)
142#define PCI_D3cold ((pci_power_t __force) 4)
3fe9d19f 143#define PCI_UNKNOWN ((pci_power_t __force) 5)
438510f6 144#define PCI_POWER_ERROR ((pci_power_t __force) -1)
1da177e4 145
00240c38
AS
146/* Remember to update this when the list above changes! */
147extern const char *pci_power_names[];
148
149static inline const char *pci_power_name(pci_power_t state)
150{
9661e783 151 return pci_power_names[1 + (__force int) state];
00240c38
AS
152}
153
0aa0f5d1 154/**
229b4e07
CD
155 * typedef pci_channel_state_t
156 *
0aa0f5d1
BH
157 * The pci_channel state describes connectivity between the CPU and
158 * the PCI device. If some PCI bus between here and the PCI device
159 * has crashed or locked up, this info is reflected here.
392a1ce7
LV
160 */
161typedef unsigned int __bitwise pci_channel_state_t;
162
163enum pci_channel_state {
164 /* I/O channel is in normal state */
165 pci_channel_io_normal = (__force pci_channel_state_t) 1,
166
167 /* I/O to channel is blocked */
168 pci_channel_io_frozen = (__force pci_channel_state_t) 2,
169
170 /* PCI card is dead */
171 pci_channel_io_perm_failure = (__force pci_channel_state_t) 3,
172};
173
f7bdd12d
BK
174typedef unsigned int __bitwise pcie_reset_state_t;
175
176enum pcie_reset_state {
177 /* Reset is NOT asserted (Use to deassert reset) */
178 pcie_deassert_reset = (__force pcie_reset_state_t) 1,
179
f7625980 180 /* Use #PERST to reset PCIe device */
f7bdd12d
BK
181 pcie_warm_reset = (__force pcie_reset_state_t) 2,
182
f7625980 183 /* Use PCIe Hot Reset to reset device */
f7bdd12d
BK
184 pcie_hot_reset = (__force pcie_reset_state_t) 3
185};
186
ba698ad4
DM
187typedef unsigned short __bitwise pci_dev_flags_t;
188enum pci_dev_flags {
0aa0f5d1 189 /* INTX_DISABLE in PCI_COMMAND register disables MSI too */
6b121592 190 PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) (1 << 0),
979b1791 191 /* Device configuration is irrevocably lost if disabled into D3 */
6b121592 192 PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) (1 << 1),
6777829c 193 /* Provide indication device is assigned by a Virtual Machine Manager */
6b121592 194 PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) (1 << 2),
5757a769 195 /* Flag for quirk use to store if quirk-specific ACS is enabled */
6b121592 196 PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = (__force pci_dev_flags_t) (1 << 3),
c8fe16e3
AW
197 /* Use a PCIe-to-PCI bridge alias even if !pci_is_pcie */
198 PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5),
f331a859
AW
199 /* Do not use bus resets for device */
200 PCI_DEV_FLAGS_NO_BUS_RESET = (__force pci_dev_flags_t) (1 << 6),
51e53738
AW
201 /* Do not use PM reset even if device advertises NoSoftRst- */
202 PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
932c435c
MR
203 /* Get VPD from function 0 VPD */
204 PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
0aa0f5d1 205 /* A non-root bridge where translation occurs, stop alias search here */
ffff8858 206 PCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = (__force pci_dev_flags_t) (1 << 9),
f65fd1aa
SN
207 /* Do not use FLR even if device advertises PCI_AF_CAP */
208 PCI_DEV_FLAGS_NO_FLR_RESET = (__force pci_dev_flags_t) (1 << 10),
a99b646a 209 /* Don't use Relaxed Ordering for TLPs directed at this device */
c2eac4d3 210 PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
d4b73e35
MZ
211 /* Device does honor MSI masking despite saying otherwise */
212 PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
ba698ad4
DM
213};
214
e1d3a908
SA
215enum pci_irq_reroute_variant {
216 INTEL_IRQ_REROUTE_VARIANT = 1,
217 MAX_IRQ_REROUTE_VARIANTS = 3
218};
219
6e325a62
MT
220typedef unsigned short __bitwise pci_bus_flags_t;
221enum pci_bus_flags {
032c3d86
JD
222 PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1,
223 PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,
224 PCI_BUS_FLAGS_NO_AERSID = (__force pci_bus_flags_t) 4,
17e8f0d4 225 PCI_BUS_FLAGS_NO_EXTCFG = (__force pci_bus_flags_t) 8,
6e325a62
MT
226};
227
0aa0f5d1 228/* Values from Link Status register, PCIe r3.1, sec 7.8.8 */
59da381e
JK
229enum pcie_link_width {
230 PCIE_LNK_WIDTH_RESRV = 0x00,
231 PCIE_LNK_X1 = 0x01,
232 PCIE_LNK_X2 = 0x02,
233 PCIE_LNK_X4 = 0x04,
234 PCIE_LNK_X8 = 0x08,
0aa0f5d1 235 PCIE_LNK_X12 = 0x0c,
59da381e
JK
236 PCIE_LNK_X16 = 0x10,
237 PCIE_LNK_X32 = 0x20,
0aa0f5d1 238 PCIE_LNK_WIDTH_UNKNOWN = 0xff,
59da381e
JK
239};
240
536c8cb4
MW
241/* Based on the PCI Hotplug Spec, but some values are made up by us */
242enum pci_bus_speed {
243 PCI_SPEED_33MHz = 0x00,
244 PCI_SPEED_66MHz = 0x01,
245 PCI_SPEED_66MHz_PCIX = 0x02,
246 PCI_SPEED_100MHz_PCIX = 0x03,
247 PCI_SPEED_133MHz_PCIX = 0x04,
248 PCI_SPEED_66MHz_PCIX_ECC = 0x05,
249 PCI_SPEED_100MHz_PCIX_ECC = 0x06,
250 PCI_SPEED_133MHz_PCIX_ECC = 0x07,
251 PCI_SPEED_66MHz_PCIX_266 = 0x09,
252 PCI_SPEED_100MHz_PCIX_266 = 0x0a,
253 PCI_SPEED_133MHz_PCIX_266 = 0x0b,
45b4cdd5
MW
254 AGP_UNKNOWN = 0x0c,
255 AGP_1X = 0x0d,
256 AGP_2X = 0x0e,
257 AGP_4X = 0x0f,
258 AGP_8X = 0x10,
536c8cb4
MW
259 PCI_SPEED_66MHz_PCIX_533 = 0x11,
260 PCI_SPEED_100MHz_PCIX_533 = 0x12,
261 PCI_SPEED_133MHz_PCIX_533 = 0x13,
262 PCIE_SPEED_2_5GT = 0x14,
263 PCIE_SPEED_5_0GT = 0x15,
9dfd97fe 264 PCIE_SPEED_8_0GT = 0x16,
1acfb9b7 265 PCIE_SPEED_16_0GT = 0x17,
de76cda2 266 PCIE_SPEED_32_0GT = 0x18,
536c8cb4
MW
267 PCI_SPEED_UNKNOWN = 0xff,
268};
269
576c7218
AD
270enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev);
271enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
272
24a4742f 273struct pci_cap_saved_data {
0aa0f5d1
BH
274 u16 cap_nr;
275 bool cap_extended;
276 unsigned int size;
277 u32 data[0];
41017f0c
SL
278};
279
24a4742f 280struct pci_cap_saved_state {
0aa0f5d1
BH
281 struct hlist_node next;
282 struct pci_cap_saved_data cap;
24a4742f
AW
283};
284
402723ad 285struct irq_affinity;
7d715a6c 286struct pcie_link_state;
ee69439c 287struct pci_vpd;
d1b054da 288struct pci_sriov;
302b4215 289struct pci_ats;
52916982 290struct pci_p2pdma;
ee69439c 291
0aa0f5d1 292/* The pci_dev structure describes PCI devices */
1da177e4 293struct pci_dev {
0aa0f5d1
BH
294 struct list_head bus_list; /* Node in per-bus list */
295 struct pci_bus *bus; /* Bus this device is on */
296 struct pci_bus *subordinate; /* Bus this device bridges to */
1da177e4 297
0aa0f5d1
BH
298 void *sysdata; /* Hook for sys-specific extension */
299 struct proc_dir_entry *procent; /* Device entry in /proc/bus/pci */
f46753c5 300 struct pci_slot *slot; /* Physical slot this device is in */
1da177e4 301
0aa0f5d1 302 unsigned int devfn; /* Encoded device & function index */
1da177e4
LT
303 unsigned short vendor;
304 unsigned short device;
305 unsigned short subsystem_vendor;
306 unsigned short subsystem_device;
307 unsigned int class; /* 3 bytes: (base,sub,prog-if) */
b8a3a521 308 u8 revision; /* PCI revision, low byte of class word */
1da177e4 309 u8 hdr_type; /* PCI header type (`multi' flag masked out) */
66b80809
KB
310#ifdef CONFIG_PCIEAER
311 u16 aer_cap; /* AER capability offset */
db89ccbe 312 struct aer_stats *aer_stats; /* AER stats for this device */
66b80809 313#endif
f7625980 314 u8 pcie_cap; /* PCIe capability offset */
e375b561
GS
315 u8 msi_cap; /* MSI capability offset */
316 u8 msix_cap; /* MSI-X capability offset */
f7625980 317 u8 pcie_mpss:3; /* PCIe Max Payload Size Supported */
0aa0f5d1
BH
318 u8 rom_base_reg; /* Config register controlling ROM */
319 u8 pin; /* Interrupt pin this device uses */
320 u16 pcie_flags_reg; /* Cached PCIe Capabilities Register */
321 unsigned long *dma_alias_mask;/* Mask of enabled devfn aliases */
1da177e4 322
0aa0f5d1 323 struct pci_driver *driver; /* Driver bound to this device */
1da177e4
LT
324 u64 dma_mask; /* Mask of the bits of bus address this
325 device implements. Normally this is
326 0xffffffff. You only need to change
327 this if your device has broken DMA
328 or supports 64-bit transfers. */
329
4d57cdfa
FT
330 struct device_dma_parameters dma_parms;
331
0aa0f5d1
BH
332 pci_power_t current_state; /* Current operating state. In ACPI,
333 this is D0-D3, D0 being fully
334 functional, and D3 being off. */
d6112f8d 335 unsigned int imm_ready:1; /* Supports Immediate Readiness */
703860ed 336 u8 pm_cap; /* PM capability offset */
337001b6
RW
337 unsigned int pme_support:5; /* Bitmask of states from which PME#
338 can be generated */
379021d5 339 unsigned int pme_poll:1; /* Poll device's PME status bit */
337001b6
RW
340 unsigned int d1_support:1; /* Low power state D1 is supported */
341 unsigned int d2_support:1; /* Low power state D2 is supported */
448bd857
HY
342 unsigned int no_d1d2:1; /* D1 and D2 are forbidden */
343 unsigned int no_d3cold:1; /* D3cold is forbidden */
9d26d3a8 344 unsigned int bridge_d3:1; /* Allow D3 for bridge */
448bd857 345 unsigned int d3cold_allowed:1; /* D3cold is allowed by user */
0aa0f5d1
BH
346 unsigned int mmio_always_on:1; /* Disallow turning off io/mem
347 decoding during BAR sizing */
e80bb09d 348 unsigned int wakeup_prepared:1;
0aa0f5d1 349 unsigned int runtime_d3cold:1; /* Whether go through runtime
448bd857
HY
350 D3cold, not set for devices
351 powered on/off by the
352 corresponding bridge */
d491f2b7 353 unsigned int skip_bus_pm:1; /* Internal: Skip bus-level PM */
b440bde7 354 unsigned int ignore_hotplug:1; /* Ignore hotplug events */
576243b3
KB
355 unsigned int hotplug_user_indicators:1; /* SlotCtl indicators
356 controlled exclusively by
357 user sysfs */
4ec73791
SM
358 unsigned int clear_retrain_link:1; /* Need to clear Retrain Link
359 bit manually */
1ae861e6 360 unsigned int d3_delay; /* D3->D0 transition time in ms */
448bd857 361 unsigned int d3cold_delay; /* D3cold->D0 transition time in ms */
1da177e4 362
7d715a6c 363#ifdef CONFIG_PCIEASPM
f7625980 364 struct pcie_link_state *link_state; /* ASPM link state */
c46fd358
BH
365 unsigned int ltr_path:1; /* Latency Tolerance Reporting
366 supported from root to here */
7d715a6c 367#endif
7ce3f912 368 unsigned int eetlp_prefix_path:1; /* End-to-End TLP Prefix */
7d715a6c 369
0aa0f5d1
BH
370 pci_channel_state_t error_state; /* Current connectivity state */
371 struct device dev; /* Generic device interface */
1da177e4 372
0aa0f5d1 373 int cfg_size; /* Size of config space */
1da177e4
LT
374
375 /*
376 * Instead of touching interrupt line and base address registers
377 * directly, use the values stored here. They might be different!
378 */
379 unsigned int irq;
380 struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */
381
0aa0f5d1
BH
382 bool match_driver; /* Skip attaching driver */
383
384 unsigned int transparent:1; /* Subtractive decode bridge */
51c48b31
BH
385 unsigned int io_window:1; /* Bridge has I/O window */
386 unsigned int pref_window:1; /* Bridge has pref mem window */
387 unsigned int pref_64_window:1; /* Pref mem window is 64-bit */
0aa0f5d1
BH
388 unsigned int multifunction:1; /* Multi-function device */
389
0aa0f5d1
BH
390 unsigned int is_busmaster:1; /* Is busmaster */
391 unsigned int no_msi:1; /* May not use MSI */
f6b6aefe 392 unsigned int no_64bit_msi:1; /* May only use 32-bit MSIs */
0aa0f5d1
BH
393 unsigned int block_cfg_access:1; /* Config space access blocked */
394 unsigned int broken_parity_status:1; /* Generates false positive parity */
395 unsigned int irq_reroute_variant:2; /* Needs IRQ rerouting variant */
f7625980 396 unsigned int msi_enabled:1;
99dc804d 397 unsigned int msix_enabled:1;
0aa0f5d1
BH
398 unsigned int ari_enabled:1; /* ARI forwarding */
399 unsigned int ats_enabled:1; /* Address Translation Svc */
a4f4fa68
JPB
400 unsigned int pasid_enabled:1; /* Process Address Space ID */
401 unsigned int pri_enabled:1; /* Page Request Interface */
9ac7849e 402 unsigned int is_managed:1;
0aa0f5d1 403 unsigned int needs_freset:1; /* Requires fundamental reset */
aa8c6c93 404 unsigned int state_saved:1;
d1b054da 405 unsigned int is_physfn:1;
dd7cc44d 406 unsigned int is_virtfn:1;
711d5779 407 unsigned int reset_fn:1;
0aa0f5d1 408 unsigned int is_hotplug_bridge:1;
b03799b0 409 unsigned int shpc_managed:1; /* SHPC owned by shpchp */
0aa0f5d1 410 unsigned int is_thunderbolt:1; /* Thunderbolt controller */
617654aa
MW
411 /*
412 * Devices marked being untrusted are the ones that can potentially
413 * execute DMA attacks and similar. They are typically connected
414 * through external ports such as Thunderbolt but not limited to
415 * that. When an IOMMU is enabled they should be getting full
416 * mappings to make sure they cannot access arbitrary memory.
417 */
418 unsigned int untrusted:1;
0aa0f5d1 419 unsigned int __aer_firmware_first_valid:1;
affb72c3 420 unsigned int __aer_firmware_first:1;
0aa0f5d1
BH
421 unsigned int broken_intx_masking:1; /* INTx masking can't be used */
422 unsigned int io_window_1k:1; /* Intel bridge 1K I/O windows */
cffe0a2b 423 unsigned int irq_managed:1;
0aa0f5d1
BH
424 unsigned int non_compliant_bars:1; /* Broken BARs; ignore them */
425 unsigned int is_probed:1; /* Device probing in progress */
f0157160 426 unsigned int link_active_reporting:1;/* Device capable of reporting link active */
aff68a5a 427 unsigned int no_vf_scan:1; /* Don't scan for VFs after IOV enablement */
fb5c915c 428 unsigned int no_command_memory:1; /* No PCI_COMMAND_MEMORY */
ba698ad4 429 pci_dev_flags_t dev_flags;
bae94d02 430 atomic_t enable_cnt; /* pci_enable_device has been called */
4602b88d 431
0aa0f5d1 432 u32 saved_config_space[16]; /* Config space saved at suspend time */
41017f0c 433 struct hlist_head saved_cap_space;
0aa0f5d1
BH
434 struct bin_attribute *rom_attr; /* Attribute descriptor for sysfs ROM entry */
435 int rom_attr_enabled; /* Display of ROM attribute enabled? */
1da177e4 436 struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */
45aec1ae 437 struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE]; /* sysfs file for WC mapping of resources */
9bb04a0c 438
d22b3621
BH
439#ifdef CONFIG_HOTPLUG_PCI_PCIE
440 unsigned int broken_cmd_compl:1; /* No compl for some cmds */
441#endif
9bb04a0c
JY
442#ifdef CONFIG_PCIE_PTM
443 unsigned int ptm_root:1;
444 unsigned int ptm_enabled:1;
8b2ec318 445 u8 ptm_granularity;
9bb04a0c 446#endif
ded86d8d 447#ifdef CONFIG_PCI_MSI
1c51b50c 448 const struct attribute_group **msi_irq_groups;
ded86d8d 449#endif
94e61088 450 struct pci_vpd *vpd;
466b3ddf 451#ifdef CONFIG_PCI_ATS
dd7cc44d 452 union {
0aa0f5d1
BH
453 struct pci_sriov *sriov; /* PF: SR-IOV info */
454 struct pci_dev *physfn; /* VF: related PF */
dd7cc44d 455 };
67930995
BH
456 u16 ats_cap; /* ATS Capability offset */
457 u8 ats_stu; /* ATS Smallest Translation Unit */
0aa0f5d1 458 atomic_t ats_ref_cnt; /* Number of VFs with ATS enabled */
4ebeb1ec
CT
459#endif
460#ifdef CONFIG_PCI_PRI
461 u32 pri_reqs_alloc; /* Number of PRI requests allocated */
462#endif
463#ifdef CONFIG_PCI_PASID
464 u16 pasid_features;
52916982
LG
465#endif
466#ifdef CONFIG_PCI_P2PDMA
467 struct pci_p2pdma *p2pdma;
d1b054da 468#endif
0aa0f5d1
BH
469 phys_addr_t rom; /* Physical address if not from BAR */
470 size_t romlen; /* Length if not from BAR */
471 char *driver_override; /* Driver name to force a match */
89ee9f76 472
0aa0f5d1 473 unsigned long priv_flags; /* Private flags for the PCI driver */
1da177e4
LT
474};
475
dda56549
Y
476static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
477{
478#ifdef CONFIG_PCI_IOV
479 if (dev->is_virtfn)
480 dev = dev->physfn;
481#endif
dda56549
Y
482 return dev;
483}
484
3c6e6ae7 485struct pci_dev *pci_alloc_dev(struct pci_bus *bus);
65891215 486
1da177e4
LT
487#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
488#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
489
a7369f1f
LV
490static inline int pci_channel_offline(struct pci_dev *pdev)
491{
492 return (pdev->error_state != pci_channel_io_normal);
493}
494
5a21d70d 495struct pci_host_bridge {
0aa0f5d1
BH
496 struct device dev;
497 struct pci_bus *bus; /* Root bus */
498 struct pci_ops *ops;
499 void *sysdata;
500 int busnr;
14d76b68 501 struct list_head windows; /* resource_entry */
e80a91ad 502 struct list_head dma_ranges; /* dma ranges resource list */
0aa0f5d1 503 u8 (*swizzle_irq)(struct pci_dev *, u8 *); /* Platform IRQ swizzler */
3aa8a41e 504 int (*map_irq)(const struct pci_dev *, u8, u8);
4fa2649a 505 void (*release_fn)(struct pci_host_bridge *);
0aa0f5d1 506 void *release_data;
37d6a0a6 507 struct msi_controller *msi;
0aa0f5d1
BH
508 unsigned int ignore_reset_delay:1; /* For entire hierarchy */
509 unsigned int no_ext_tags:1; /* No Extended Tags */
02bfeb48 510 unsigned int native_aer:1; /* OS may use PCIe AER */
9310f0dc 511 unsigned int native_pcie_hotplug:1; /* OS may use PCIe hotplug */
1df81a6d 512 unsigned int native_shpc_hotplug:1; /* OS may use SHPC hotplug */
02bfeb48 513 unsigned int native_pme:1; /* OS may use PCIe PME */
af8bb9f8 514 unsigned int native_ltr:1; /* OS may use PCIe LTR */
a78cf965
BH
515 unsigned int preserve_config:1; /* Preserve FW resource setup */
516
7c7a0e94
GP
517 /* Resource alignment requirements */
518 resource_size_t (*align_resource)(struct pci_dev *dev,
519 const struct resource *res,
520 resource_size_t start,
521 resource_size_t size,
522 resource_size_t align);
0aa0f5d1 523 unsigned long private[0] ____cacheline_aligned;
5a21d70d 524};
41017f0c 525
7b543663 526#define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev)
7c7a0e94 527
59094065
TR
528static inline void *pci_host_bridge_priv(struct pci_host_bridge *bridge)
529{
530 return (void *)bridge->private;
531}
532
533static inline struct pci_host_bridge *pci_host_bridge_from_priv(void *priv)
534{
535 return container_of(priv, struct pci_host_bridge, private);
536}
537
a52d1443 538struct pci_host_bridge *pci_alloc_host_bridge(size_t priv);
5c3f18cc
LP
539struct pci_host_bridge *devm_pci_alloc_host_bridge(struct device *dev,
540 size_t priv);
dff79b91 541void pci_free_host_bridge(struct pci_host_bridge *bridge);
7c7a0e94
GP
542struct pci_host_bridge *pci_find_host_bridge(struct pci_bus *bus);
543
4fa2649a 544void pci_set_host_bridge_release(struct pci_host_bridge *bridge,
0aa0f5d1
BH
545 void (*release_fn)(struct pci_host_bridge *),
546 void *release_data);
7b543663 547
6c0cc950
RW
548int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge);
549
2fe2abf8
BH
550/*
551 * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond
552 * to P2P or CardBus bridge windows) go in a table. Additional ones (for
553 * buses below host bridges or subtractive decode bridges) go in the list.
554 * Use pci_bus_for_each_resource() to iterate through all the resources.
555 */
556
557/*
558 * PCI_SUBTRACTIVE_DECODE means the bridge forwards the window implicitly
559 * and there's no way to program the bridge with the details of the window.
560 * This does not apply to ACPI _CRS windows, even with the _DEC subtractive-
561 * decode bit set, because they are explicit and can be programmed with _SRS.
562 */
563#define PCI_SUBTRACTIVE_DECODE 0x1
564
565struct pci_bus_resource {
0aa0f5d1
BH
566 struct list_head list;
567 struct resource *res;
568 unsigned int flags;
2fe2abf8 569};
4352dfd5
GKH
570
571#define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */
1da177e4
LT
572
573struct pci_bus {
0aa0f5d1
BH
574 struct list_head node; /* Node in list of buses */
575 struct pci_bus *parent; /* Parent bus this bridge is on */
576 struct list_head children; /* List of child buses */
577 struct list_head devices; /* List of devices on this bus */
578 struct pci_dev *self; /* Bridge device as seen by parent */
579 struct list_head slots; /* List of slots on this bus;
67546762 580 protected by pci_slot_mutex */
2fe2abf8 581 struct resource *resource[PCI_BRIDGE_RESOURCE_NUM];
0aa0f5d1
BH
582 struct list_head resources; /* Address space routed to this bus */
583 struct resource busn_res; /* Bus numbers routed to this bus */
1da177e4 584
0aa0f5d1 585 struct pci_ops *ops; /* Configuration access functions */
c2791b80 586 struct msi_controller *msi; /* MSI controller */
0aa0f5d1
BH
587 void *sysdata; /* Hook for sys-specific extension */
588 struct proc_dir_entry *procdir; /* Directory entry in /proc/bus/pci */
1da177e4 589
0aa0f5d1
BH
590 unsigned char number; /* Bus number */
591 unsigned char primary; /* Number of primary bridge */
3749c51a
MW
592 unsigned char max_bus_speed; /* enum pci_bus_speed */
593 unsigned char cur_bus_speed; /* enum pci_bus_speed */
670ba0c8
CM
594#ifdef CONFIG_PCI_DOMAINS_GENERIC
595 int domain_nr;
596#endif
1da177e4
LT
597
598 char name[48];
599
0aa0f5d1
BH
600 unsigned short bridge_ctl; /* Manage NO_ISA/FBB/et al behaviors */
601 pci_bus_flags_t bus_flags; /* Inherited by child buses */
1da177e4 602 struct device *bridge;
fd7d1ced 603 struct device dev;
0aa0f5d1
BH
604 struct bin_attribute *legacy_io; /* Legacy I/O for this bus */
605 struct bin_attribute *legacy_mem; /* Legacy mem */
cc74d96f 606 unsigned int is_added:1;
1da177e4
LT
607};
608
fd7d1ced 609#define to_pci_bus(n) container_of(n, struct pci_bus, dev)
1da177e4 610
4e544bac
HK
611static inline u16 pci_dev_id(struct pci_dev *dev)
612{
613 return PCI_DEVID(dev->bus->number, dev->devfn);
614}
615
79af72d7 616/*
f7625980 617 * Returns true if the PCI bus is root (behind host-PCI bridge),
79af72d7 618 * false otherwise
77a0dfcd
BH
619 *
620 * Some code assumes that "bus->self == NULL" means that bus is a root bus.
621 * This is incorrect because "virtual" buses added for SR-IOV (via
622 * virtfn_add_bus()) have "bus->self == NULL" but are not root buses.
79af72d7
KK
623 */
624static inline bool pci_is_root_bus(struct pci_bus *pbus)
625{
626 return !(pbus->parent);
627}
628
1c86438c
YW
629/**
630 * pci_is_bridge - check if the PCI device is a bridge
631 * @dev: PCI device
632 *
633 * Return true if the PCI device is bridge whether it has subordinate
634 * or not.
635 */
636static inline bool pci_is_bridge(struct pci_dev *dev)
637{
638 return dev->hdr_type == PCI_HEADER_TYPE_BRIDGE ||
639 dev->hdr_type == PCI_HEADER_TYPE_CARDBUS;
640}
641
24a0c654
AS
642#define for_each_pci_bridge(dev, bus) \
643 list_for_each_entry(dev, &bus->devices, bus_list) \
644 if (!pci_is_bridge(dev)) {} else
645
c6bde215
BH
646static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev)
647{
648 dev = pci_physfn(dev);
649 if (pci_is_root_bus(dev->bus))
650 return NULL;
651
652 return dev->bus->self;
653}
654
16cf0ebc
RW
655#ifdef CONFIG_PCI_MSI
656static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev)
657{
658 return pci_dev->msi_enabled || pci_dev->msix_enabled;
659}
660#else
661static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; }
662#endif
663
0aa0f5d1 664/* Error values that may be returned by PCI functions */
1da177e4
LT
665#define PCIBIOS_SUCCESSFUL 0x00
666#define PCIBIOS_FUNC_NOT_SUPPORTED 0x81
667#define PCIBIOS_BAD_VENDOR_ID 0x83
668#define PCIBIOS_DEVICE_NOT_FOUND 0x86
669#define PCIBIOS_BAD_REGISTER_NUMBER 0x87
670#define PCIBIOS_SET_FAILED 0x88
671#define PCIBIOS_BUFFER_TOO_SMALL 0x89
672
0aa0f5d1 673/* Translate above to generic errno for passing back through non-PCI code */
a6961651
AW
674static inline int pcibios_err_to_errno(int err)
675{
676 if (err <= PCIBIOS_SUCCESSFUL)
677 return err; /* Assume already errno */
678
679 switch (err) {
680 case PCIBIOS_FUNC_NOT_SUPPORTED:
681 return -ENOENT;
682 case PCIBIOS_BAD_VENDOR_ID:
d97ffe23 683 return -ENOTTY;
a6961651
AW
684 case PCIBIOS_DEVICE_NOT_FOUND:
685 return -ENODEV;
686 case PCIBIOS_BAD_REGISTER_NUMBER:
687 return -EFAULT;
688 case PCIBIOS_SET_FAILED:
689 return -EIO;
690 case PCIBIOS_BUFFER_TOO_SMALL:
691 return -ENOSPC;
692 }
693
d97ffe23 694 return -ERANGE;
a6961651
AW
695}
696
1da177e4
LT
697/* Low-level architecture-dependent routines */
698
699struct pci_ops {
057bd2e0
TR
700 int (*add_bus)(struct pci_bus *bus);
701 void (*remove_bus)(struct pci_bus *bus);
1f94a94f 702 void __iomem *(*map_bus)(struct pci_bus *bus, unsigned int devfn, int where);
1da177e4
LT
703 int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
704 int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
705};
706
b6ce068a
MW
707/*
708 * ACPI needs to be able to access PCI config space before we've done a
709 * PCI bus scan and created pci_bus structures.
710 */
f39d5b72
BH
711int raw_pci_read(unsigned int domain, unsigned int bus, unsigned int devfn,
712 int reg, int len, u32 *val);
713int raw_pci_write(unsigned int domain, unsigned int bus, unsigned int devfn,
714 int reg, int len, u32 val);
1da177e4 715
8e639079 716#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
3a9ad0b4
YL
717typedef u64 pci_bus_addr_t;
718#else
719typedef u32 pci_bus_addr_t;
720#endif
721
1da177e4 722struct pci_bus_region {
0aa0f5d1
BH
723 pci_bus_addr_t start;
724 pci_bus_addr_t end;
1da177e4
LT
725};
726
727struct pci_dynids {
0aa0f5d1
BH
728 spinlock_t lock; /* Protects list, index */
729 struct list_head list; /* For IDs added at runtime */
1da177e4
LT
730};
731
f7625980
BH
732
733/*
734 * PCI Error Recovery System (PCI-ERS). If a PCI device driver provides
735 * a set of callbacks in struct pci_error_handlers, that device driver
736 * will be notified of PCI bus errors, and will be driven to recovery
737 * when an error occurs.
392a1ce7
LV
738 */
739
740typedef unsigned int __bitwise pci_ers_result_t;
741
742enum pci_ers_result {
0aa0f5d1 743 /* No result/none/not supported in device driver */
392a1ce7
LV
744 PCI_ERS_RESULT_NONE = (__force pci_ers_result_t) 1,
745
746 /* Device driver can recover without slot reset */
747 PCI_ERS_RESULT_CAN_RECOVER = (__force pci_ers_result_t) 2,
748
0aa0f5d1 749 /* Device driver wants slot to be reset */
392a1ce7
LV
750 PCI_ERS_RESULT_NEED_RESET = (__force pci_ers_result_t) 3,
751
752 /* Device has completely failed, is unrecoverable */
753 PCI_ERS_RESULT_DISCONNECT = (__force pci_ers_result_t) 4,
754
755 /* Device driver is fully recovered and operational */
756 PCI_ERS_RESULT_RECOVERED = (__force pci_ers_result_t) 5,
918b4053
VMP
757
758 /* No AER capabilities registered for the driver */
759 PCI_ERS_RESULT_NO_AER_DRIVER = (__force pci_ers_result_t) 6,
392a1ce7
LV
760};
761
762/* PCI bus error event callbacks */
05cca6e5 763struct pci_error_handlers {
392a1ce7
LV
764 /* PCI bus error detected on this device */
765 pci_ers_result_t (*error_detected)(struct pci_dev *dev,
05cca6e5 766 enum pci_channel_state error);
392a1ce7
LV
767
768 /* MMIO has been re-enabled, but not DMA */
769 pci_ers_result_t (*mmio_enabled)(struct pci_dev *dev);
770
392a1ce7
LV
771 /* PCI slot has been reset */
772 pci_ers_result_t (*slot_reset)(struct pci_dev *dev);
773
3ebe7f9f 774 /* PCI function reset prepare or completed */
775755ed
CH
775 void (*reset_prepare)(struct pci_dev *dev);
776 void (*reset_done)(struct pci_dev *dev);
3ebe7f9f 777
392a1ce7
LV
778 /* Device driver may resume normal operations */
779 void (*resume)(struct pci_dev *dev);
780};
781
392a1ce7 782
1da177e4 783struct module;
229b4e07
CD
784
785/**
786 * struct pci_driver - PCI driver structure
787 * @node: List of driver structures.
788 * @name: Driver name.
789 * @id_table: Pointer to table of device IDs the driver is
790 * interested in. Most drivers should export this
791 * table using MODULE_DEVICE_TABLE(pci,...).
792 * @probe: This probing function gets called (during execution
793 * of pci_register_driver() for already existing
794 * devices or later if a new device gets inserted) for
795 * all PCI devices which match the ID table and are not
796 * "owned" by the other drivers yet. This function gets
797 * passed a "struct pci_dev \*" for each device whose
798 * entry in the ID table matches the device. The probe
799 * function returns zero when the driver chooses to
800 * take "ownership" of the device or an error code
801 * (negative number) otherwise.
802 * The probe function always gets called from process
803 * context, so it can sleep.
804 * @remove: The remove() function gets called whenever a device
805 * being handled by this driver is removed (either during
806 * deregistration of the driver or when it's manually
807 * pulled out of a hot-pluggable slot).
808 * The remove function always gets called from process
809 * context, so it can sleep.
810 * @suspend: Put device into low power state.
811 * @suspend_late: Put device into low power state.
812 * @resume_early: Wake device from low power state.
813 * @resume: Wake device from low power state.
151f4e2b 814 * (Please see Documentation/power/pci.rst for descriptions
229b4e07
CD
815 * of PCI Power Management and the related functions.)
816 * @shutdown: Hook into reboot_notifier_list (kernel/sys.c).
817 * Intended to stop any idling DMA operations.
818 * Useful for enabling wake-on-lan (NIC) or changing
819 * the power state of a device before reboot.
820 * e.g. drivers/net/e100.c.
821 * @sriov_configure: Optional driver callback to allow configuration of
822 * number of VFs to enable via sysfs "sriov_numvfs" file.
823 * @err_handler: See Documentation/PCI/pci-error-recovery.rst
824 * @groups: Sysfs attribute groups.
825 * @driver: Driver model structure.
826 * @dynids: List of dynamically added device IDs.
827 */
1da177e4 828struct pci_driver {
0aa0f5d1
BH
829 struct list_head node;
830 const char *name;
831 const struct pci_device_id *id_table; /* Must be non-NULL for probe to be called */
832 int (*probe)(struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
833 void (*remove)(struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
834 int (*suspend)(struct pci_dev *dev, pm_message_t state); /* Device suspended */
835 int (*suspend_late)(struct pci_dev *dev, pm_message_t state);
836 int (*resume_early)(struct pci_dev *dev);
7cb30264
BY
837 int (*resume)(struct pci_dev *dev); /* Device woken up */
838 void (*shutdown)(struct pci_dev *dev);
839 int (*sriov_configure)(struct pci_dev *dev, int num_vfs); /* On PF */
49453028 840 const struct pci_error_handlers *err_handler;
92d50fc1 841 const struct attribute_group **groups;
1da177e4 842 struct device_driver driver;
0aa0f5d1 843 struct pci_dynids dynids;
1da177e4
LT
844};
845
05cca6e5 846#define to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
1da177e4
LT
847
848/**
0aa0f5d1 849 * PCI_DEVICE - macro used to describe a specific PCI device
1da177e4
LT
850 * @vend: the 16 bit PCI Vendor ID
851 * @dev: the 16 bit PCI Device ID
852 *
853 * This macro is used to create a struct pci_device_id that matches a
854 * specific device. The subvendor and subdevice fields will be set to
855 * PCI_ANY_ID.
856 */
857#define PCI_DEVICE(vend,dev) \
858 .vendor = (vend), .device = (dev), \
859 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
860
3d567e0e 861/**
0aa0f5d1 862 * PCI_DEVICE_SUB - macro used to describe a specific PCI device with subsystem
3d567e0e
NNS
863 * @vend: the 16 bit PCI Vendor ID
864 * @dev: the 16 bit PCI Device ID
865 * @subvend: the 16 bit PCI Subvendor ID
866 * @subdev: the 16 bit PCI Subdevice ID
867 *
868 * This macro is used to create a struct pci_device_id that matches a
869 * specific device with subsystem information.
870 */
871#define PCI_DEVICE_SUB(vend, dev, subvend, subdev) \
872 .vendor = (vend), .device = (dev), \
873 .subvendor = (subvend), .subdevice = (subdev)
874
1da177e4 875/**
0aa0f5d1 876 * PCI_DEVICE_CLASS - macro used to describe a specific PCI device class
1da177e4
LT
877 * @dev_class: the class, subclass, prog-if triple for this device
878 * @dev_class_mask: the class mask for this device
879 *
880 * This macro is used to create a struct pci_device_id that matches a
4352dfd5 881 * specific PCI class. The vendor, device, subvendor, and subdevice
1da177e4
LT
882 * fields will be set to PCI_ANY_ID.
883 */
884#define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
885 .class = (dev_class), .class_mask = (dev_class_mask), \
886 .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
887 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
888
1597cacb 889/**
0aa0f5d1 890 * PCI_VDEVICE - macro used to describe a specific PCI device in short form
c1309040
MR
891 * @vend: the vendor name
892 * @dev: the 16 bit PCI Device ID
1597cacb
AC
893 *
894 * This macro is used to create a struct pci_device_id that matches a
895 * specific PCI device. The subvendor, and subdevice fields will be set
896 * to PCI_ANY_ID. The macro allows the next field to follow as the device
897 * private data.
898 */
c1309040
MR
899#define PCI_VDEVICE(vend, dev) \
900 .vendor = PCI_VENDOR_ID_##vend, .device = (dev), \
901 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0
1597cacb 902
b72ae8ca
AS
903/**
904 * PCI_DEVICE_DATA - macro used to describe a specific PCI device in very short form
905 * @vend: the vendor name (without PCI_VENDOR_ID_ prefix)
906 * @dev: the device name (without PCI_DEVICE_ID_<vend>_ prefix)
907 * @data: the driver data to be filled
908 *
909 * This macro is used to create a struct pci_device_id that matches a
910 * specific PCI device. The subvendor, and subdevice fields will be set
911 * to PCI_ANY_ID.
912 */
913#define PCI_DEVICE_DATA(vend, dev, data) \
914 .vendor = PCI_VENDOR_ID_##vend, .device = PCI_DEVICE_ID_##vend##_##dev, \
915 .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0, \
916 .driver_data = (kernel_ulong_t)(data)
917
5bbe029f 918enum {
0aa0f5d1
BH
919 PCI_REASSIGN_ALL_RSRC = 0x00000001, /* Ignore firmware setup */
920 PCI_REASSIGN_ALL_BUS = 0x00000002, /* Reassign all bus numbers */
921 PCI_PROBE_ONLY = 0x00000004, /* Use existing setup */
922 PCI_CAN_SKIP_ISA_ALIGN = 0x00000008, /* Don't do ISA alignment */
923 PCI_ENABLE_PROC_DOMAINS = 0x00000010, /* Enable domains in /proc */
5bbe029f 924 PCI_COMPAT_DOMAIN_0 = 0x00000020, /* ... except domain 0 */
0aa0f5d1 925 PCI_SCAN_ALL_PCIE_DEVS = 0x00000040, /* Scan all, not just dev 0 */
5bbe029f
BH
926};
927
0d8006dd
HX
928#define PCI_IRQ_LEGACY (1 << 0) /* Allow legacy interrupts */
929#define PCI_IRQ_MSI (1 << 1) /* Allow MSI interrupts */
930#define PCI_IRQ_MSIX (1 << 2) /* Allow MSI-X interrupts */
931#define PCI_IRQ_AFFINITY (1 << 3) /* Auto-assign affinity */
932
0aa0f5d1 933/* These external functions are only available when PCI support is enabled */
1da177e4
LT
934#ifdef CONFIG_PCI
935
5bbe029f
BH
936extern unsigned int pci_flags;
937
938static inline void pci_set_flags(int flags) { pci_flags = flags; }
939static inline void pci_add_flags(int flags) { pci_flags |= flags; }
940static inline void pci_clear_flags(int flags) { pci_flags &= ~flags; }
941static inline int pci_has_flag(int flag) { return pci_flags & flag; }
942
a58674ff 943void pcie_bus_configure_settings(struct pci_bus *bus);
b03e7495
JM
944
945enum pcie_bus_config_types {
0aa0f5d1
BH
946 PCIE_BUS_TUNE_OFF, /* Don't touch MPS at all */
947 PCIE_BUS_DEFAULT, /* Ensure MPS matches upstream bridge */
948 PCIE_BUS_SAFE, /* Use largest MPS boot-time devices support */
949 PCIE_BUS_PERFORMANCE, /* Use MPS and MRRS for best performance */
950 PCIE_BUS_PEER2PEER, /* Set MPS = 128 for all devices */
b03e7495
JM
951};
952
953extern enum pcie_bus_config_types pcie_bus_config;
954
1da177e4
LT
955extern struct bus_type pci_bus_type;
956
f7625980
BH
957/* Do NOT directly access these two variables, unless you are arch-specific PCI
958 * code, or PCI core code. */
0aa0f5d1 959extern struct list_head pci_root_buses; /* List of all known PCI buses */
f7625980 960/* Some device drivers need know if PCI is initiated */
f39d5b72 961int no_pci_devices(void);
1da177e4 962
3c449ed0 963void pcibios_resource_survey_bus(struct pci_bus *bus);
7b77061f 964void pcibios_bus_add_device(struct pci_dev *pdev);
10a95747
JL
965void pcibios_add_bus(struct pci_bus *bus);
966void pcibios_remove_bus(struct pci_bus *bus);
1da177e4 967void pcibios_fixup_bus(struct pci_bus *);
4a7fb636 968int __must_check pcibios_enable_device(struct pci_dev *, int mask);
f7625980 969/* Architecture-specific versions may override this (weak) */
05cca6e5 970char *pcibios_setup(char *str);
1da177e4
LT
971
972/* Used only when drivers/pci/setup.c is used */
3b7a17fc 973resource_size_t pcibios_align_resource(void *, const struct resource *,
b26b2d49 974 resource_size_t,
e31dd6e4 975 resource_size_t);
1da177e4 976
d1bbf38a 977/* Weak but can be overridden by arch */
2d1c8618
BH
978void pci_fixup_cardbus(struct pci_bus *);
979
1da177e4
LT
980/* Generic PCI functions used internally */
981
fc279850 982void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region,
36a66cd6 983 struct resource *res);
fc279850 984void pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res,
36a66cd6 985 struct pci_bus_region *region);
d1fd4fb6 986void pcibios_scan_specific_bus(int busn);
f39d5b72 987struct pci_bus *pci_find_bus(int domain, int busnr);
c48f1670 988void pci_bus_add_devices(const struct pci_bus *bus);
de4b2f76 989struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
166c6370
BH
990struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
991 struct pci_ops *ops, void *sysdata,
992 struct list_head *resources);
49b8e3f3 993int pci_host_probe(struct pci_host_bridge *bridge);
98a35831
YL
994int pci_bus_insert_busn_res(struct pci_bus *b, int bus, int busmax);
995int pci_bus_update_busn_res_end(struct pci_bus *b, int busmax);
996void pci_bus_release_busn_res(struct pci_bus *b);
15856ad5 997struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
0aa0f5d1
BH
998 struct pci_ops *ops, void *sysdata,
999 struct list_head *resources);
1228c4b6 1000int pci_scan_root_bus_bridge(struct pci_host_bridge *bridge);
05cca6e5
GKH
1001struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
1002 int busnr);
f46753c5 1003struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
828f3768
AC
1004 const char *name,
1005 struct hotplug_slot *hotplug);
f46753c5 1006void pci_destroy_slot(struct pci_slot *slot);
017ffe64
YW
1007#ifdef CONFIG_SYSFS
1008void pci_dev_assign_slot(struct pci_dev *dev);
1009#else
1010static inline void pci_dev_assign_slot(struct pci_dev *dev) { }
1011#endif
1da177e4 1012int pci_scan_slot(struct pci_bus *bus, int devfn);
05cca6e5 1013struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
cdb9b9f7 1014void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
1da177e4 1015unsigned int pci_scan_child_bus(struct pci_bus *bus);
c893d133 1016void pci_bus_add_device(struct pci_dev *dev);
1da177e4 1017void pci_read_bridge_bases(struct pci_bus *child);
05cca6e5
GKH
1018struct resource *pci_find_parent_resource(const struct pci_dev *dev,
1019 struct resource *res);
c56d4450 1020struct pci_dev *pci_find_pcie_root_port(struct pci_dev *dev);
3df425f3 1021u8 pci_swizzle_interrupt_pin(const struct pci_dev *dev, u8 pin);
1da177e4 1022int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
68feac87 1023u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp);
f39d5b72
BH
1024struct pci_dev *pci_dev_get(struct pci_dev *dev);
1025void pci_dev_put(struct pci_dev *dev);
1026void pci_remove_bus(struct pci_bus *b);
1027void pci_stop_and_remove_bus_device(struct pci_dev *dev);
9d16947b 1028void pci_stop_and_remove_bus_device_locked(struct pci_dev *dev);
cdfcc572
YL
1029void pci_stop_root_bus(struct pci_bus *bus);
1030void pci_remove_root_bus(struct pci_bus *bus);
b3743fa4 1031void pci_setup_cardbus(struct pci_bus *bus);
d366d28c 1032void pcibios_setup_bridge(struct pci_bus *bus, unsigned long type);
f39d5b72 1033void pci_sort_breadthfirst(void);
fb8a0d9d
WM
1034#define dev_is_pci(d) ((d)->bus == &pci_bus_type)
1035#define dev_is_pf(d) ((dev_is_pci(d) ? to_pci_dev(d)->is_physfn : false))
1da177e4
LT
1036
1037/* Generic PCI functions exported to card drivers */
1038
388c8c16
JB
1039enum pci_lost_interrupt_reason {
1040 PCI_LOST_IRQ_NO_INFORMATION = 0,
1041 PCI_LOST_IRQ_DISABLE_MSI,
1042 PCI_LOST_IRQ_DISABLE_MSIX,
1043 PCI_LOST_IRQ_DISABLE_ACPI,
1044};
1045enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
05cca6e5
GKH
1046int pci_find_capability(struct pci_dev *dev, int cap);
1047int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
1048int pci_find_ext_capability(struct pci_dev *dev, int cap);
44a9a36f 1049int pci_find_next_ext_capability(struct pci_dev *dev, int pos, int cap);
05cca6e5
GKH
1050int pci_find_ht_capability(struct pci_dev *dev, int ht_cap);
1051int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap);
29f3eb64 1052struct pci_bus *pci_find_next_bus(const struct pci_bus *from);
1da177e4 1053
d42552c3 1054struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
0aa0f5d1 1055 struct pci_dev *from);
05cca6e5 1056struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
0aa0f5d1
BH
1057 unsigned int ss_vendor, unsigned int ss_device,
1058 struct pci_dev *from);
05cca6e5 1059struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
3c299dc2
AP
1060struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus,
1061 unsigned int devfn);
05cca6e5 1062struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
1da177e4
LT
1063int pci_dev_present(const struct pci_device_id *ids);
1064
05cca6e5
GKH
1065int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
1066 int where, u8 *val);
1067int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn,
1068 int where, u16 *val);
1069int pci_bus_read_config_dword(struct pci_bus *bus, unsigned int devfn,
1070 int where, u32 *val);
1071int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn,
1072 int where, u8 val);
1073int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
1074 int where, u16 val);
1075int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
1076 int where, u32 val);
1f94a94f
RH
1077
1078int pci_generic_config_read(struct pci_bus *bus, unsigned int devfn,
1079 int where, int size, u32 *val);
1080int pci_generic_config_write(struct pci_bus *bus, unsigned int devfn,
1081 int where, int size, u32 val);
1082int pci_generic_config_read32(struct pci_bus *bus, unsigned int devfn,
1083 int where, int size, u32 *val);
1084int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn,
1085 int where, int size, u32 val);
1086
a72b46c3 1087struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops);
1da177e4 1088
d3881e50
KB
1089int pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val);
1090int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val);
1091int pci_read_config_dword(const struct pci_dev *dev, int where, u32 *val);
1092int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val);
1093int pci_write_config_word(const struct pci_dev *dev, int where, u16 val);
1094int pci_write_config_dword(const struct pci_dev *dev, int where, u32 val);
1da177e4 1095
8c0d3a02
JL
1096int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val);
1097int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val);
1098int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val);
1099int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val);
1100int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos,
1101 u16 clear, u16 set);
1102int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos,
1103 u32 clear, u32 set);
1104
1105static inline int pcie_capability_set_word(struct pci_dev *dev, int pos,
1106 u16 set)
1107{
1108 return pcie_capability_clear_and_set_word(dev, pos, 0, set);
1109}
1110
1111static inline int pcie_capability_set_dword(struct pci_dev *dev, int pos,
1112 u32 set)
1113{
1114 return pcie_capability_clear_and_set_dword(dev, pos, 0, set);
1115}
1116
1117static inline int pcie_capability_clear_word(struct pci_dev *dev, int pos,
1118 u16 clear)
1119{
1120 return pcie_capability_clear_and_set_word(dev, pos, clear, 0);
1121}
1122
1123static inline int pcie_capability_clear_dword(struct pci_dev *dev, int pos,
1124 u32 clear)
1125{
1126 return pcie_capability_clear_and_set_dword(dev, pos, clear, 0);
1127}
1128
0aa0f5d1 1129/* User-space driven config access */
c63587d7
AW
1130int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
1131int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
1132int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val);
1133int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val);
1134int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val);
1135int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val);
1136
4a7fb636 1137int __must_check pci_enable_device(struct pci_dev *dev);
b718989d
BH
1138int __must_check pci_enable_device_io(struct pci_dev *dev);
1139int __must_check pci_enable_device_mem(struct pci_dev *dev);
0b62e13b 1140int __must_check pci_reenable_device(struct pci_dev *);
9ac7849e
TH
1141int __must_check pcim_enable_device(struct pci_dev *pdev);
1142void pcim_pin_device(struct pci_dev *pdev);
1143
99b3c58f
PG
1144static inline bool pci_intx_mask_supported(struct pci_dev *pdev)
1145{
1146 /*
1147 * INTx masking is supported if PCI_COMMAND_INTX_DISABLE is
1148 * writable and no quirk has marked the feature broken.
1149 */
1150 return !pdev->broken_intx_masking;
1151}
1152
296ccb08
YS
1153static inline int pci_is_enabled(struct pci_dev *pdev)
1154{
1155 return (atomic_read(&pdev->enable_cnt) > 0);
1156}
1157
9ac7849e
TH
1158static inline int pci_is_managed(struct pci_dev *pdev)
1159{
1160 return pdev->is_managed;
1161}
1162
1da177e4 1163void pci_disable_device(struct pci_dev *dev);
96c55900
MS
1164
1165extern unsigned int pcibios_max_latency;
1da177e4 1166void pci_set_master(struct pci_dev *dev);
6a479079 1167void pci_clear_master(struct pci_dev *dev);
96c55900 1168
f7bdd12d 1169int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
15ea76d4 1170int pci_set_cacheline_size(struct pci_dev *dev);
1da177e4 1171#define HAVE_PCI_SET_MWI
4a7fb636 1172int __must_check pci_set_mwi(struct pci_dev *dev);
fc0f9f4d 1173int __must_check pcim_set_mwi(struct pci_dev *dev);
694625c0 1174int pci_try_set_mwi(struct pci_dev *dev);
1da177e4 1175void pci_clear_mwi(struct pci_dev *dev);
a04ce0ff 1176void pci_intx(struct pci_dev *dev, int enable);
a2e27787
JK
1177bool pci_check_and_mask_intx(struct pci_dev *dev);
1178bool pci_check_and_unmask_intx(struct pci_dev *dev);
157e876f 1179int pci_wait_for_pending(struct pci_dev *dev, int pos, u16 mask);
3775a209 1180int pci_wait_for_pending_transaction(struct pci_dev *dev);
d556ad4b
PO
1181int pcix_get_max_mmrbc(struct pci_dev *dev);
1182int pcix_get_mmrbc(struct pci_dev *dev);
1183int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
2637e5b5 1184int pcie_get_readrq(struct pci_dev *dev);
d556ad4b 1185int pcie_set_readrq(struct pci_dev *dev, int rq);
b03e7495
JM
1186int pcie_get_mps(struct pci_dev *dev);
1187int pcie_set_mps(struct pci_dev *dev, int mps);
6db79a88
TG
1188u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev **limiting_dev,
1189 enum pci_bus_speed *speed,
1190 enum pcie_link_width *width);
9e506a7b 1191void pcie_print_link_status(struct pci_dev *dev);
2d2917f7 1192bool pcie_has_flr(struct pci_dev *dev);
91295d79 1193int pcie_flr(struct pci_dev *dev);
a96d627a 1194int __pci_reset_function_locked(struct pci_dev *dev);
8dd7f803 1195int pci_reset_function(struct pci_dev *dev);
a477b9cd 1196int pci_reset_function_locked(struct pci_dev *dev);
61cf16d8 1197int pci_try_reset_function(struct pci_dev *dev);
9a3d2b9b 1198int pci_probe_reset_slot(struct pci_slot *slot);
9a3d2b9b 1199int pci_probe_reset_bus(struct pci_bus *bus);
c6a44ba9 1200int pci_reset_bus(struct pci_dev *dev);
9e33002f
GS
1201void pci_reset_secondary_bus(struct pci_dev *dev);
1202void pcibios_reset_secondary_bus(struct pci_dev *dev);
14add80b 1203void pci_update_resource(struct pci_dev *dev, int resno);
4a7fb636 1204int __must_check pci_assign_resource(struct pci_dev *dev, int i);
2bbc6942 1205int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align);
8bb705e3
CK
1206void pci_release_resource(struct pci_dev *dev, int resno);
1207int __must_check pci_resize_resource(struct pci_dev *dev, int i, int size);
c87deff7 1208int pci_select_bars(struct pci_dev *dev, unsigned long flags);
8496e85c 1209bool pci_device_is_present(struct pci_dev *pdev);
08249651 1210void pci_ignore_hotplug(struct pci_dev *dev);
1da177e4 1211
704e8953
CH
1212int __printf(6, 7) pci_request_irq(struct pci_dev *dev, unsigned int nr,
1213 irq_handler_t handler, irq_handler_t thread_fn, void *dev_id,
1214 const char *fmt, ...);
1215void pci_free_irq(struct pci_dev *dev, unsigned int nr, void *dev_id);
1216
1da177e4 1217/* ROM control related routines */
e416de5e
AC
1218int pci_enable_rom(struct pci_dev *pdev);
1219void pci_disable_rom(struct pci_dev *pdev);
144a50ea 1220void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
1da177e4 1221void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
1da177e4
LT
1222
1223/* Power management related routines */
1224int pci_save_state(struct pci_dev *dev);
1d3c16a8 1225void pci_restore_state(struct pci_dev *dev);
ffbdd3f7 1226struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev);
98d9b271
KRW
1227int pci_load_saved_state(struct pci_dev *dev,
1228 struct pci_saved_state *state);
ffbdd3f7
AW
1229int pci_load_and_free_saved_state(struct pci_dev *dev,
1230 struct pci_saved_state **state);
fd0f7f73
AW
1231struct pci_cap_saved_state *pci_find_saved_cap(struct pci_dev *dev, char cap);
1232struct pci_cap_saved_state *pci_find_saved_ext_cap(struct pci_dev *dev,
1233 u16 cap);
1234int pci_add_cap_save_buffer(struct pci_dev *dev, char cap, unsigned int size);
1235int pci_add_ext_cap_save_buffer(struct pci_dev *dev,
1236 u16 cap, unsigned int size);
0e5dd46b 1237int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state);
9c8550ee
LT
1238int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
1239pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
e5899e1b 1240bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
5a6c9b60 1241void pci_pme_active(struct pci_dev *dev, bool enable);
0847684c 1242int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable);
0235c4fc 1243int pci_wake_from_d3(struct pci_dev *dev, bool enable);
404cc2d8
RW
1244int pci_prepare_to_sleep(struct pci_dev *dev);
1245int pci_back_from_sleep(struct pci_dev *dev);
b67ea761 1246bool pci_dev_run_wake(struct pci_dev *dev);
9d26d3a8
MW
1247void pci_d3cold_enable(struct pci_dev *dev);
1248void pci_d3cold_disable(struct pci_dev *dev);
a99b646a 1249bool pcie_relaxed_ordering_enabled(struct pci_dev *dev);
2a4d2c42
LW
1250void pci_wakeup_bus(struct pci_bus *bus);
1251void pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state);
1da177e4 1252
bb209c82
BH
1253/* For use by arch with custom probe code */
1254void set_pcie_port_type(struct pci_dev *pdev);
1255void set_pcie_hotplug_bridge(struct pci_dev *pdev);
1256
ce5ccdef 1257/* Functions for PCI Hotplug drivers to use */
05cca6e5 1258int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
2f320521 1259unsigned int pci_rescan_bus_bridge_resize(struct pci_dev *bridge);
3ed4fd96 1260unsigned int pci_rescan_bus(struct pci_bus *bus);
9d16947b
RW
1261void pci_lock_rescan_remove(void);
1262void pci_unlock_rescan_remove(void);
ce5ccdef 1263
0aa0f5d1 1264/* Vital Product Data routines */
287d19ce
SH
1265ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
1266ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
cb92148b 1267int pci_set_vpd_size(struct pci_dev *dev, size_t len);
287d19ce 1268
1da177e4 1269/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */
925845bd 1270resource_size_t pcibios_retrieve_fw_addr(struct pci_dev *dev, int idx);
ea741551 1271void pci_bus_assign_resources(const struct pci_bus *bus);
765bf9b7 1272void pci_bus_claim_resources(struct pci_bus *bus);
1da177e4
LT
1273void pci_bus_size_bridges(struct pci_bus *bus);
1274int pci_claim_resource(struct pci_dev *, int);
8505e729 1275int pci_claim_bridge_resource(struct pci_dev *bridge, int i);
1da177e4 1276void pci_assign_unassigned_resources(void);
6841ec68 1277void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
17787940 1278void pci_assign_unassigned_bus_resources(struct pci_bus *bus);
39772038 1279void pci_assign_unassigned_root_bus_resources(struct pci_bus *bus);
8bb705e3 1280int pci_reassign_bridge_resources(struct pci_dev *bridge, unsigned long type);
1da177e4 1281void pdev_enable_device(struct pci_dev *);
842de40d 1282int pci_enable_resources(struct pci_dev *, int mask);
47a650f2 1283void pci_assign_irq(struct pci_dev *dev);
afd29f90 1284struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res);
1da177e4 1285#define HAVE_PCI_REQ_REGIONS 2
4a7fb636 1286int __must_check pci_request_regions(struct pci_dev *, const char *);
e8de1481 1287int __must_check pci_request_regions_exclusive(struct pci_dev *, const char *);
1da177e4 1288void pci_release_regions(struct pci_dev *);
4a7fb636 1289int __must_check pci_request_region(struct pci_dev *, int, const char *);
1da177e4 1290void pci_release_region(struct pci_dev *, int);
c87deff7 1291int pci_request_selected_regions(struct pci_dev *, int, const char *);
e8de1481 1292int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
c87deff7 1293void pci_release_selected_regions(struct pci_dev *, int);
1da177e4
LT
1294
1295/* drivers/pci/bus.c */
45ca9e97 1296void pci_add_resource(struct list_head *resources, struct resource *res);
0efd5aab
BH
1297void pci_add_resource_offset(struct list_head *resources, struct resource *res,
1298 resource_size_t offset);
45ca9e97 1299void pci_free_resource_list(struct list_head *resources);
950334bc
BH
1300void pci_bus_add_resource(struct pci_bus *bus, struct resource *res,
1301 unsigned int flags);
2fe2abf8
BH
1302struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
1303void pci_bus_remove_resources(struct pci_bus *bus);
950334bc
BH
1304int devm_request_pci_bus_resources(struct device *dev,
1305 struct list_head *resources);
2fe2abf8 1306
bfc45606
DD
1307/* Temporary until new and working PCI SBR API in place */
1308int pci_bridge_secondary_bus_reset(struct pci_dev *dev);
1309
89a74ecc 1310#define pci_bus_for_each_resource(bus, res, i) \
2fe2abf8
BH
1311 for (i = 0; \
1312 (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \
1313 i++)
89a74ecc 1314
4a7fb636
AM
1315int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
1316 struct resource *res, resource_size_t size,
1317 resource_size_t align, resource_size_t min,
664c2848 1318 unsigned long type_mask,
3b7a17fc
DB
1319 resource_size_t (*alignf)(void *,
1320 const struct resource *,
b26b2d49
DB
1321 resource_size_t,
1322 resource_size_t),
4a7fb636 1323 void *alignf_data);
1da177e4 1324
8b921acf 1325
fcfaab30
GP
1326int pci_register_io_range(struct fwnode_handle *fwnode, phys_addr_t addr,
1327 resource_size_t size);
c5076cfe
TN
1328unsigned long pci_address_to_pio(phys_addr_t addr);
1329phys_addr_t pci_pio_to_address(unsigned long pio);
8b921acf 1330int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr);
a5fb9fb0
SS
1331int devm_pci_remap_iospace(struct device *dev, const struct resource *res,
1332 phys_addr_t phys_addr);
4d3f1384 1333void pci_unmap_iospace(struct resource *res);
490cb6dd
LP
1334void __iomem *devm_pci_remap_cfgspace(struct device *dev,
1335 resource_size_t offset,
1336 resource_size_t size);
1337void __iomem *devm_pci_remap_cfg_resource(struct device *dev,
1338 struct resource *res);
8b921acf 1339
3a9ad0b4 1340static inline pci_bus_addr_t pci_bus_address(struct pci_dev *pdev, int bar)
06cf56e4
BH
1341{
1342 struct pci_bus_region region;
1343
1344 pcibios_resource_to_bus(pdev->bus, &region, &pdev->resource[bar]);
1345 return region.start;
1346}
1347
863b18f4 1348/* Proper probing supporting hot-pluggable devices */
725522b5
GKH
1349int __must_check __pci_register_driver(struct pci_driver *, struct module *,
1350 const char *mod_name);
bba81165 1351
0aa0f5d1 1352/* pci_register_driver() must be a macro so KBUILD_MODNAME can be expanded */
bba81165
AM
1353#define pci_register_driver(driver) \
1354 __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
863b18f4 1355
05cca6e5 1356void pci_unregister_driver(struct pci_driver *dev);
aad4f400
GKH
1357
1358/**
1359 * module_pci_driver() - Helper macro for registering a PCI driver
1360 * @__pci_driver: pci_driver struct
1361 *
1362 * Helper macro for PCI drivers which do not do anything special in module
1363 * init/exit. This eliminates a lot of boilerplate. Each module may only
1364 * use this macro once, and calling it replaces module_init() and module_exit()
1365 */
1366#define module_pci_driver(__pci_driver) \
0aa0f5d1 1367 module_driver(__pci_driver, pci_register_driver, pci_unregister_driver)
aad4f400 1368
b4eb6cdb
PG
1369/**
1370 * builtin_pci_driver() - Helper macro for registering a PCI driver
1371 * @__pci_driver: pci_driver struct
1372 *
1373 * Helper macro for PCI drivers which do not do anything special in their
1374 * init code. This eliminates a lot of boilerplate. Each driver may only
1375 * use this macro once, and calling it replaces device_initcall(...)
1376 */
1377#define builtin_pci_driver(__pci_driver) \
1378 builtin_driver(__pci_driver, pci_register_driver)
1379
05cca6e5 1380struct pci_driver *pci_dev_driver(const struct pci_dev *dev);
9dba910e
TH
1381int pci_add_dynid(struct pci_driver *drv,
1382 unsigned int vendor, unsigned int device,
1383 unsigned int subvendor, unsigned int subdevice,
1384 unsigned int class, unsigned int class_mask,
1385 unsigned long driver_data);
05cca6e5
GKH
1386const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
1387 struct pci_dev *dev);
1388int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
1389 int pass);
1da177e4 1390
70298c6e 1391void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
cecf4864 1392 void *userdata);
ac7dc65a 1393int pci_cfg_space_size(struct pci_dev *dev);
05cca6e5 1394unsigned char pci_bus_max_busnr(struct pci_bus *bus);
e2444273 1395void pci_setup_bridge(struct pci_bus *bus);
ac5ad93e
GS
1396resource_size_t pcibios_window_alignment(struct pci_bus *bus,
1397 unsigned long type);
cecf4864 1398
3448a19d
DA
1399#define PCI_VGA_STATE_CHANGE_BRIDGE (1 << 0)
1400#define PCI_VGA_STATE_CHANGE_DECODES (1 << 1)
1401
deb2d2ec 1402int pci_set_vga_state(struct pci_dev *pdev, bool decode,
3448a19d 1403 unsigned int command_bits, u32 flags);
fe537670 1404
d7cc609f
LG
1405/*
1406 * Virtual interrupts allow for more interrupts to be allocated
1407 * than the device has interrupts for. These are not programmed
1408 * into the device's MSI-X table and must be handled by some
1409 * other driver means.
1410 */
1411#define PCI_IRQ_VIRTUAL (1 << 4)
1412
4fe0d154
CH
1413#define PCI_IRQ_ALL_TYPES \
1414 (PCI_IRQ_LEGACY | PCI_IRQ_MSI | PCI_IRQ_MSIX)
aff17164 1415
1da177e4
LT
1416/* kmem_cache style wrapper around pci_alloc_consistent() */
1417
1418#include <linux/dmapool.h>
1419
1420#define pci_pool dma_pool
1421#define pci_pool_create(name, pdev, size, align, allocation) \
1422 dma_pool_create(name, &pdev->dev, size, align, allocation)
1423#define pci_pool_destroy(pool) dma_pool_destroy(pool)
1424#define pci_pool_alloc(pool, flags, handle) dma_pool_alloc(pool, flags, handle)
01a7fd33
SS
1425#define pci_pool_zalloc(pool, flags, handle) \
1426 dma_pool_zalloc(pool, flags, handle)
1da177e4
LT
1427#define pci_pool_free(pool, vaddr, addr) dma_pool_free(pool, vaddr, addr)
1428
1da177e4 1429struct msix_entry {
0aa0f5d1
BH
1430 u32 vector; /* Kernel uses to write allocated vector */
1431 u16 entry; /* Driver uses to specify entry, OS writes */
1da177e4
LT
1432};
1433
4c859804
BH
1434#ifdef CONFIG_PCI_MSI
1435int pci_msi_vec_count(struct pci_dev *dev);
f39d5b72 1436void pci_disable_msi(struct pci_dev *dev);
4c859804 1437int pci_msix_vec_count(struct pci_dev *dev);
f39d5b72 1438void pci_disable_msix(struct pci_dev *dev);
f39d5b72
BH
1439void pci_restore_msi_state(struct pci_dev *dev);
1440int pci_msi_enabled(void);
4fe03955 1441int pci_enable_msi(struct pci_dev *dev);
4c859804
BH
1442int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
1443 int minvec, int maxvec);
f7fc32cb
AG
1444static inline int pci_enable_msix_exact(struct pci_dev *dev,
1445 struct msix_entry *entries, int nvec)
1446{
1447 int rc = pci_enable_msix_range(dev, entries, nvec, nvec);
1448 if (rc < 0)
1449 return rc;
1450 return 0;
1451}
402723ad
CH
1452int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1453 unsigned int max_vecs, unsigned int flags,
c66d4bd1 1454 struct irq_affinity *affd);
402723ad 1455
aff17164
CH
1456void pci_free_irq_vectors(struct pci_dev *dev);
1457int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
ee8d41e5 1458const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev, int vec);
27ddb689 1459int pci_irq_get_node(struct pci_dev *pdev, int vec);
aff17164 1460
4c859804 1461#else
2ee546c4 1462static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; }
2ee546c4
BH
1463static inline void pci_disable_msi(struct pci_dev *dev) { }
1464static inline int pci_msix_vec_count(struct pci_dev *dev) { return -ENOSYS; }
2ee546c4 1465static inline void pci_disable_msix(struct pci_dev *dev) { }
2ee546c4
BH
1466static inline void pci_restore_msi_state(struct pci_dev *dev) { }
1467static inline int pci_msi_enabled(void) { return 0; }
4fe03955 1468static inline int pci_enable_msi(struct pci_dev *dev)
f7fc32cb 1469{ return -ENOSYS; }
302a2523 1470static inline int pci_enable_msix_range(struct pci_dev *dev,
0aa0f5d1 1471 struct msix_entry *entries, int minvec, int maxvec)
2ee546c4 1472{ return -ENOSYS; }
f7fc32cb 1473static inline int pci_enable_msix_exact(struct pci_dev *dev,
0aa0f5d1 1474 struct msix_entry *entries, int nvec)
f7fc32cb 1475{ return -ENOSYS; }
402723ad
CH
1476
1477static inline int
1478pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1479 unsigned int max_vecs, unsigned int flags,
c66d4bd1 1480 struct irq_affinity *aff_desc)
aff17164 1481{
83b4605b
CH
1482 if ((flags & PCI_IRQ_LEGACY) && min_vecs == 1 && dev->irq)
1483 return 1;
1484 return -ENOSPC;
aff17164 1485}
402723ad 1486
aff17164
CH
1487static inline void pci_free_irq_vectors(struct pci_dev *dev)
1488{
1489}
1490
1491static inline int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
1492{
1493 if (WARN_ON_ONCE(nr > 0))
1494 return -EINVAL;
1495 return dev->irq;
1496}
ee8d41e5
TG
1497static inline const struct cpumask *pci_irq_get_affinity(struct pci_dev *pdev,
1498 int vec)
1499{
1500 return cpu_possible_mask;
1501}
27ddb689
SL
1502
1503static inline int pci_irq_get_node(struct pci_dev *pdev, int vec)
1504{
1505 return first_online_node;
1506}
1da177e4
LT
1507#endif
1508
0d58e6c1
PB
1509/**
1510 * pci_irqd_intx_xlate() - Translate PCI INTx value to an IRQ domain hwirq
1511 * @d: the INTx IRQ domain
1512 * @node: the DT node for the device whose interrupt we're translating
1513 * @intspec: the interrupt specifier data from the DT
1514 * @intsize: the number of entries in @intspec
1515 * @out_hwirq: pointer at which to write the hwirq number
1516 * @out_type: pointer at which to write the interrupt type
1517 *
1518 * Translate a PCI INTx interrupt number from device tree in the range 1-4, as
1519 * stored in the standard PCI_INTERRUPT_PIN register, to a value in the range
1520 * 0-3 suitable for use in a 4 entry IRQ domain. That is, subtract one from the
1521 * INTx value to obtain the hwirq number.
1522 *
1523 * Returns 0 on success, or -EINVAL if the interrupt specifier is out of range.
1524 */
1525static inline int pci_irqd_intx_xlate(struct irq_domain *d,
1526 struct device_node *node,
1527 const u32 *intspec,
1528 unsigned int intsize,
1529 unsigned long *out_hwirq,
1530 unsigned int *out_type)
1531{
1532 const u32 intx = intspec[0];
1533
1534 if (intx < PCI_INTERRUPT_INTA || intx > PCI_INTERRUPT_INTD)
1535 return -EINVAL;
1536
1537 *out_hwirq = intx - PCI_INTERRUPT_INTA;
1538 return 0;
1539}
1540
ab0724ff 1541#ifdef CONFIG_PCIEPORTBUS
415e12b2 1542extern bool pcie_ports_disabled;
5352a44a 1543extern bool pcie_ports_native;
ab0724ff
MT
1544#else
1545#define pcie_ports_disabled true
5352a44a 1546#define pcie_ports_native false
ab0724ff 1547#endif
415e12b2 1548
11af8d2e
HK
1549#define PCIE_LINK_STATE_L0S BIT(0)
1550#define PCIE_LINK_STATE_L1 BIT(1)
1551#define PCIE_LINK_STATE_CLKPM BIT(2)
1552#define PCIE_LINK_STATE_L1_1 BIT(3)
1553#define PCIE_LINK_STATE_L1_2 BIT(4)
1554#define PCIE_LINK_STATE_L1_1_PCIPM BIT(5)
1555#define PCIE_LINK_STATE_L1_2_PCIPM BIT(6)
7ce2e76a 1556
4c859804 1557#ifdef CONFIG_PCIEASPM
7ce2e76a
KW
1558int pci_disable_link_state(struct pci_dev *pdev, int state);
1559int pci_disable_link_state_locked(struct pci_dev *pdev, int state);
1560void pcie_no_aspm(void);
f39d5b72 1561bool pcie_aspm_support_enabled(void);
accd2dd7 1562bool pcie_aspm_enabled(struct pci_dev *pdev);
4c859804 1563#else
7ce2e76a
KW
1564static inline int pci_disable_link_state(struct pci_dev *pdev, int state)
1565{ return 0; }
1566static inline int pci_disable_link_state_locked(struct pci_dev *pdev, int state)
1567{ return 0; }
1568static inline void pcie_no_aspm(void) { }
4c859804 1569static inline bool pcie_aspm_support_enabled(void) { return false; }
accd2dd7 1570static inline bool pcie_aspm_enabled(struct pci_dev *pdev) { return false; }
3e1b1600
AP
1571#endif
1572
415e12b2 1573#ifdef CONFIG_PCIEAER
415e12b2
RW
1574bool pci_aer_available(void);
1575#else
415e12b2
RW
1576static inline bool pci_aer_available(void) { return false; }
1577#endif
1578
cef74409
GK
1579bool pci_ats_disabled(void);
1580
f39d5b72
BH
1581void pci_cfg_access_lock(struct pci_dev *dev);
1582bool pci_cfg_access_trylock(struct pci_dev *dev);
1583void pci_cfg_access_unlock(struct pci_dev *dev);
e04b0ea2 1584
4352dfd5
GKH
1585/*
1586 * PCI domain support. Sometimes called PCI segment (eg by ACPI),
f7625980 1587 * a PCI domain is defined to be a set of PCI buses which share
4352dfd5
GKH
1588 * configuration space.
1589 */
32a2eea7
JG
1590#ifdef CONFIG_PCI_DOMAINS
1591extern int pci_domains_supported;
1592#else
1593enum { pci_domains_supported = 0 };
2ee546c4
BH
1594static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
1595static inline int pci_proc_domain(struct pci_bus *bus) { return 0; }
32a2eea7 1596#endif /* CONFIG_PCI_DOMAINS */
1da177e4 1597
670ba0c8
CM
1598/*
1599 * Generic implementation for PCI domain support. If your
1600 * architecture does not need custom management of PCI
1601 * domains then this implementation will be used
1602 */
1603#ifdef CONFIG_PCI_DOMAINS_GENERIC
1604static inline int pci_domain_nr(struct pci_bus *bus)
1605{
1606 return bus->domain_nr;
1607}
2ab51dde
TN
1608#ifdef CONFIG_ACPI
1609int acpi_pci_bus_find_domain_nr(struct pci_bus *bus);
670ba0c8 1610#else
2ab51dde
TN
1611static inline int acpi_pci_bus_find_domain_nr(struct pci_bus *bus)
1612{ return 0; }
1613#endif
9c7cb891 1614int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent);
670ba0c8
CM
1615#endif
1616
0aa0f5d1 1617/* Some architectures require additional setup to direct VGA traffic */
95a8b6ef 1618typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
0aa0f5d1 1619 unsigned int command_bits, u32 flags);
f39d5b72 1620void pci_register_set_vga_state(arch_set_vga_state_t func);
95a8b6ef 1621
be9d2e89
JT
1622static inline int
1623pci_request_io_regions(struct pci_dev *pdev, const char *name)
1624{
1625 return pci_request_selected_regions(pdev,
1626 pci_select_bars(pdev, IORESOURCE_IO), name);
1627}
1628
1629static inline void
1630pci_release_io_regions(struct pci_dev *pdev)
1631{
1632 return pci_release_selected_regions(pdev,
1633 pci_select_bars(pdev, IORESOURCE_IO));
1634}
1635
1636static inline int
1637pci_request_mem_regions(struct pci_dev *pdev, const char *name)
1638{
1639 return pci_request_selected_regions(pdev,
1640 pci_select_bars(pdev, IORESOURCE_MEM), name);
1641}
1642
1643static inline void
1644pci_release_mem_regions(struct pci_dev *pdev)
1645{
1646 return pci_release_selected_regions(pdev,
1647 pci_select_bars(pdev, IORESOURCE_MEM));
1648}
1649
4352dfd5 1650#else /* CONFIG_PCI is not enabled */
1da177e4 1651
5bbe029f
BH
1652static inline void pci_set_flags(int flags) { }
1653static inline void pci_add_flags(int flags) { }
1654static inline void pci_clear_flags(int flags) { }
1655static inline int pci_has_flag(int flag) { return 0; }
1656
1da177e4 1657/*
0aa0f5d1
BH
1658 * If the system does not have PCI, clearly these return errors. Define
1659 * these as simple inline functions to avoid hair in drivers.
1da177e4 1660 */
05cca6e5
GKH
1661#define _PCI_NOP(o, s, t) \
1662 static inline int pci_##o##_config_##s(struct pci_dev *dev, \
1663 int where, t val) \
1da177e4 1664 { return PCIBIOS_FUNC_NOT_SUPPORTED; }
05cca6e5
GKH
1665
1666#define _PCI_NOP_ALL(o, x) _PCI_NOP(o, byte, u8 x) \
1667 _PCI_NOP(o, word, u16 x) \
1668 _PCI_NOP(o, dword, u32 x)
1da177e4
LT
1669_PCI_NOP_ALL(read, *)
1670_PCI_NOP_ALL(write,)
1671
d42552c3 1672static inline struct pci_dev *pci_get_device(unsigned int vendor,
05cca6e5
GKH
1673 unsigned int device,
1674 struct pci_dev *from)
2ee546c4 1675{ return NULL; }
d42552c3 1676
05cca6e5
GKH
1677static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
1678 unsigned int device,
1679 unsigned int ss_vendor,
1680 unsigned int ss_device,
b08508c4 1681 struct pci_dev *from)
2ee546c4 1682{ return NULL; }
1da177e4 1683
05cca6e5
GKH
1684static inline struct pci_dev *pci_get_class(unsigned int class,
1685 struct pci_dev *from)
2ee546c4 1686{ return NULL; }
1da177e4
LT
1687
1688#define pci_dev_present(ids) (0)
ed4aaadb 1689#define no_pci_devices() (1)
1da177e4
LT
1690#define pci_dev_put(dev) do { } while (0)
1691
2ee546c4
BH
1692static inline void pci_set_master(struct pci_dev *dev) { }
1693static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
1694static inline void pci_disable_device(struct pci_dev *dev) { }
05cca6e5 1695static inline int pci_assign_resource(struct pci_dev *dev, int i)
2ee546c4 1696{ return -EBUSY; }
2f839807
AS
1697static inline int __must_check __pci_register_driver(struct pci_driver *drv,
1698 struct module *owner,
1699 const char *mod_name)
2ee546c4 1700{ return 0; }
05cca6e5 1701static inline int pci_register_driver(struct pci_driver *drv)
2ee546c4
BH
1702{ return 0; }
1703static inline void pci_unregister_driver(struct pci_driver *drv) { }
05cca6e5 1704static inline int pci_find_capability(struct pci_dev *dev, int cap)
2ee546c4 1705{ return 0; }
05cca6e5
GKH
1706static inline int pci_find_next_capability(struct pci_dev *dev, u8 post,
1707 int cap)
2ee546c4 1708{ return 0; }
05cca6e5 1709static inline int pci_find_ext_capability(struct pci_dev *dev, int cap)
2ee546c4 1710{ return 0; }
05cca6e5 1711
1da177e4 1712/* Power management related routines */
2ee546c4
BH
1713static inline int pci_save_state(struct pci_dev *dev) { return 0; }
1714static inline void pci_restore_state(struct pci_dev *dev) { }
05cca6e5 1715static inline int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
2ee546c4 1716{ return 0; }
3449248c 1717static inline int pci_wake_from_d3(struct pci_dev *dev, bool enable)
2ee546c4 1718{ return 0; }
05cca6e5
GKH
1719static inline pci_power_t pci_choose_state(struct pci_dev *dev,
1720 pm_message_t state)
2ee546c4 1721{ return PCI_D0; }
05cca6e5
GKH
1722static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1723 int enable)
2ee546c4 1724{ return 0; }
48a92a81 1725
afd29f90
MW
1726static inline struct resource *pci_find_resource(struct pci_dev *dev,
1727 struct resource *res)
1728{ return NULL; }
05cca6e5 1729static inline int pci_request_regions(struct pci_dev *dev, const char *res_name)
2ee546c4
BH
1730{ return -EIO; }
1731static inline void pci_release_regions(struct pci_dev *dev) { }
0da0ead9 1732
c5076cfe
TN
1733static inline unsigned long pci_address_to_pio(phys_addr_t addr) { return -1; }
1734
d80d0217
RD
1735static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
1736{ return NULL; }
d80d0217
RD
1737static inline struct pci_dev *pci_get_slot(struct pci_bus *bus,
1738 unsigned int devfn)
1739{ return NULL; }
7912af5c
RD
1740static inline struct pci_dev *pci_get_domain_bus_and_slot(int domain,
1741 unsigned int bus, unsigned int devfn)
1742{ return NULL; }
d80d0217 1743
2ee546c4
BH
1744static inline int pci_domain_nr(struct pci_bus *bus) { return 0; }
1745static inline struct pci_dev *pci_dev_get(struct pci_dev *dev) { return NULL; }
12ea6cad 1746
fb8a0d9d
WM
1747#define dev_is_pci(d) (false)
1748#define dev_is_pf(d) (false)
fe594932
GU
1749static inline bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
1750{ return false; }
80db6f08
NC
1751static inline int pci_irqd_intx_xlate(struct irq_domain *d,
1752 struct device_node *node,
1753 const u32 *intspec,
1754 unsigned int intsize,
1755 unsigned long *out_hwirq,
1756 unsigned int *out_type)
1757{ return -EINVAL; }
9c212009
LR
1758
1759static inline const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
1760 struct pci_dev *dev)
1761{ return NULL; }
b9ae16d8 1762static inline bool pci_ats_disabled(void) { return true; }
0d8006dd
HX
1763
1764static inline int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
1765{
1766 return -EINVAL;
1767}
1768
1769static inline int
1770pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1771 unsigned int max_vecs, unsigned int flags,
1772 struct irq_affinity *aff_desc)
1773{
1774 return -ENOSPC;
1775}
4352dfd5 1776#endif /* CONFIG_PCI */
1da177e4 1777
0d8006dd
HX
1778static inline int
1779pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
1780 unsigned int max_vecs, unsigned int flags)
1781{
1782 return pci_alloc_irq_vectors_affinity(dev, min_vecs, max_vecs, flags,
1783 NULL);
1784}
1785
6e1ffbb7
JPB
1786#ifdef CONFIG_PCI_ATS
1787/* Address Translation Service */
6e1ffbb7
JPB
1788int pci_enable_ats(struct pci_dev *dev, int ps);
1789void pci_disable_ats(struct pci_dev *dev);
1790int pci_ats_queue_depth(struct pci_dev *dev);
1791int pci_ats_page_aligned(struct pci_dev *dev);
1792#else
6e1ffbb7
JPB
1793static inline int pci_enable_ats(struct pci_dev *d, int ps) { return -ENODEV; }
1794static inline void pci_disable_ats(struct pci_dev *d) { }
1795static inline int pci_ats_queue_depth(struct pci_dev *d) { return -ENODEV; }
1796static inline int pci_ats_page_aligned(struct pci_dev *dev) { return 0; }
1797#endif
1798
4352dfd5
GKH
1799/* Include architecture-dependent settings and functions */
1800
1801#include <asm/pci.h>
1da177e4 1802
d1bbf38a 1803/* These two functions provide almost identical functionality. Depending
f7195824
DW
1804 * on the architecture, one will be implemented as a wrapper around the
1805 * other (in drivers/pci/mmap.c).
1806 *
1807 * pci_mmap_resource_range() maps a specific BAR, and vm->vm_pgoff
1808 * is expected to be an offset within that region.
1809 *
1810 * pci_mmap_page_range() is the legacy architecture-specific interface,
1811 * which accepts a "user visible" resource address converted by
1812 * pci_resource_to_user(), as used in the legacy mmap() interface in
1813 * /proc/bus/pci/.
1814 */
1815int pci_mmap_resource_range(struct pci_dev *dev, int bar,
1816 struct vm_area_struct *vma,
1817 enum pci_mmap_state mmap_state, int write_combine);
f66e2258
DW
1818int pci_mmap_page_range(struct pci_dev *pdev, int bar,
1819 struct vm_area_struct *vma,
11df1954
DW
1820 enum pci_mmap_state mmap_state, int write_combine);
1821
ae749c7a
DW
1822#ifndef arch_can_pci_mmap_wc
1823#define arch_can_pci_mmap_wc() 0
1824#endif
2bea36fd 1825
e854d8b2
DW
1826#ifndef arch_can_pci_mmap_io
1827#define arch_can_pci_mmap_io() 0
2bea36fd
DW
1828#define pci_iobar_pfn(pdev, bar, vma) (-EINVAL)
1829#else
1830int pci_iobar_pfn(struct pci_dev *pdev, int bar, struct vm_area_struct *vma);
e854d8b2 1831#endif
ae749c7a 1832
92016ba5
JO
1833#ifndef pci_root_bus_fwnode
1834#define pci_root_bus_fwnode(bus) NULL
1835#endif
1836
0aa0f5d1
BH
1837/*
1838 * These helpers provide future and backwards compatibility
1839 * for accessing popular PCI BAR info
1840 */
05cca6e5
GKH
1841#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
1842#define pci_resource_end(dev, bar) ((dev)->resource[(bar)].end)
1843#define pci_resource_flags(dev, bar) ((dev)->resource[(bar)].flags)
1da177e4 1844#define pci_resource_len(dev,bar) \
05cca6e5
GKH
1845 ((pci_resource_start((dev), (bar)) == 0 && \
1846 pci_resource_end((dev), (bar)) == \
1847 pci_resource_start((dev), (bar))) ? 0 : \
1848 \
1849 (pci_resource_end((dev), (bar)) - \
1850 pci_resource_start((dev), (bar)) + 1))
1da177e4 1851
0aa0f5d1
BH
1852/*
1853 * Similar to the helpers above, these manipulate per-pci_dev
1da177e4
LT
1854 * driver-specific data. They are really just a wrapper around
1855 * the generic device structure functions of these calls.
1856 */
05cca6e5 1857static inline void *pci_get_drvdata(struct pci_dev *pdev)
1da177e4
LT
1858{
1859 return dev_get_drvdata(&pdev->dev);
1860}
1861
05cca6e5 1862static inline void pci_set_drvdata(struct pci_dev *pdev, void *data)
1da177e4
LT
1863{
1864 dev_set_drvdata(&pdev->dev, data);
1865}
1866
2fc90f61 1867static inline const char *pci_name(const struct pci_dev *pdev)
1da177e4 1868{
c6c4f070 1869 return dev_name(&pdev->dev);
1da177e4
LT
1870}
1871
8221a013
BH
1872void pci_resource_to_user(const struct pci_dev *dev, int bar,
1873 const struct resource *rsrc,
1874 resource_size_t *start, resource_size_t *end);
2311b1f2 1875
1da177e4 1876/*
0aa0f5d1
BH
1877 * The world is not perfect and supplies us with broken PCI devices.
1878 * For at least a part of these bugs we need a work-around, so both
1879 * generic (drivers/pci/quirks.c) and per-architecture code can define
1880 * fixup hooks to be called for particular buggy devices.
1da177e4
LT
1881 */
1882
1883struct pci_fixup {
0aa0f5d1
BH
1884 u16 vendor; /* Or PCI_ANY_ID */
1885 u16 device; /* Or PCI_ANY_ID */
1886 u32 class; /* Or PCI_ANY_ID */
f4ca5c6a 1887 unsigned int class_shift; /* should be 0, 8, 16 */
c9d8b55f
AB
1888#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
1889 int hook_offset;
1890#else
1da177e4 1891 void (*hook)(struct pci_dev *dev);
c9d8b55f 1892#endif
1da177e4
LT
1893};
1894
1895enum pci_fixup_pass {
1896 pci_fixup_early, /* Before probing BARs */
1897 pci_fixup_header, /* After reading configuration header */
1898 pci_fixup_final, /* Final phase of device fixups */
1899 pci_fixup_enable, /* pci_enable_device() time */
e1a2a51e 1900 pci_fixup_resume, /* pci_device_resume() */
7d2a01b8 1901 pci_fixup_suspend, /* pci_device_suspend() */
e1a2a51e 1902 pci_fixup_resume_early, /* pci_device_resume_early() */
7d2a01b8 1903 pci_fixup_suspend_late, /* pci_device_suspend_late() */
1da177e4
LT
1904};
1905
c9d8b55f
AB
1906#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
1907#define __DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
1908 class_shift, hook) \
1909 __ADDRESSABLE(hook) \
1910 asm(".section " #sec ", \"a\" \n" \
1911 ".balign 16 \n" \
1912 ".short " #vendor ", " #device " \n" \
1913 ".long " #class ", " #class_shift " \n" \
1914 ".long " #hook " - . \n" \
1915 ".previous \n");
1916#define DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
1917 class_shift, hook) \
1918 __DECLARE_PCI_FIXUP_SECTION(sec, name, vendor, device, class, \
1919 class_shift, hook)
1920#else
1da177e4 1921/* Anonymous variables would be nice... */
f4ca5c6a
YL
1922#define DECLARE_PCI_FIXUP_SECTION(section, name, vendor, device, class, \
1923 class_shift, hook) \
ecf61c78 1924 static const struct pci_fixup __PASTE(__pci_fixup_##name,__LINE__) __used \
f4ca5c6a
YL
1925 __attribute__((__section__(#section), aligned((sizeof(void *))))) \
1926 = { vendor, device, class, class_shift, hook };
c9d8b55f 1927#endif
f4ca5c6a
YL
1928
1929#define DECLARE_PCI_FIXUP_CLASS_EARLY(vendor, device, class, \
1930 class_shift, hook) \
1931 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
ecf61c78 1932 hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1933#define DECLARE_PCI_FIXUP_CLASS_HEADER(vendor, device, class, \
1934 class_shift, hook) \
1935 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
ecf61c78 1936 hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1937#define DECLARE_PCI_FIXUP_CLASS_FINAL(vendor, device, class, \
1938 class_shift, hook) \
1939 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
ecf61c78 1940 hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1941#define DECLARE_PCI_FIXUP_CLASS_ENABLE(vendor, device, class, \
1942 class_shift, hook) \
1943 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
ecf61c78 1944 hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1945#define DECLARE_PCI_FIXUP_CLASS_RESUME(vendor, device, class, \
1946 class_shift, hook) \
1947 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
0aa0f5d1 1948 resume##hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1949#define DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY(vendor, device, class, \
1950 class_shift, hook) \
1951 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
0aa0f5d1 1952 resume_early##hook, vendor, device, class, class_shift, hook)
f4ca5c6a
YL
1953#define DECLARE_PCI_FIXUP_CLASS_SUSPEND(vendor, device, class, \
1954 class_shift, hook) \
1955 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
0aa0f5d1 1956 suspend##hook, vendor, device, class, class_shift, hook)
7d2a01b8
AN
1957#define DECLARE_PCI_FIXUP_CLASS_SUSPEND_LATE(vendor, device, class, \
1958 class_shift, hook) \
1959 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \
0aa0f5d1 1960 suspend_late##hook, vendor, device, class, class_shift, hook)
f4ca5c6a 1961
1da177e4
LT
1962#define DECLARE_PCI_FIXUP_EARLY(vendor, device, hook) \
1963 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_early, \
ecf61c78 1964 hook, vendor, device, PCI_ANY_ID, 0, hook)
1da177e4
LT
1965#define DECLARE_PCI_FIXUP_HEADER(vendor, device, hook) \
1966 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_header, \
ecf61c78 1967 hook, vendor, device, PCI_ANY_ID, 0, hook)
1da177e4
LT
1968#define DECLARE_PCI_FIXUP_FINAL(vendor, device, hook) \
1969 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_final, \
ecf61c78 1970 hook, vendor, device, PCI_ANY_ID, 0, hook)
1da177e4
LT
1971#define DECLARE_PCI_FIXUP_ENABLE(vendor, device, hook) \
1972 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_enable, \
ecf61c78 1973 hook, vendor, device, PCI_ANY_ID, 0, hook)
1597cacb
AC
1974#define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \
1975 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \
0aa0f5d1 1976 resume##hook, vendor, device, PCI_ANY_ID, 0, hook)
e1a2a51e
RW
1977#define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \
1978 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \
0aa0f5d1 1979 resume_early##hook, vendor, device, PCI_ANY_ID, 0, hook)
e1a2a51e
RW
1980#define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \
1981 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \
0aa0f5d1 1982 suspend##hook, vendor, device, PCI_ANY_ID, 0, hook)
7d2a01b8
AN
1983#define DECLARE_PCI_FIXUP_SUSPEND_LATE(vendor, device, hook) \
1984 DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend_late, \
0aa0f5d1 1985 suspend_late##hook, vendor, device, PCI_ANY_ID, 0, hook)
1da177e4 1986
93177a74 1987#ifdef CONFIG_PCI_QUIRKS
1da177e4 1988void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
93177a74
RW
1989#else
1990static inline void pci_fixup_device(enum pci_fixup_pass pass,
2ee546c4 1991 struct pci_dev *dev) { }
93177a74 1992#endif
1da177e4 1993
05cca6e5 1994void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
5ea81769 1995void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
05cca6e5 1996void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
fb7ebfe4
YL
1997int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
1998int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,
916fbfb7 1999 const char *name);
fb7ebfe4 2000void pcim_iounmap_regions(struct pci_dev *pdev, int mask);
5ea81769 2001
1da177e4 2002extern int pci_pci_problems;
236561e5 2003#define PCIPCI_FAIL 1 /* No PCI PCI DMA */
1da177e4
LT
2004#define PCIPCI_TRITON 2
2005#define PCIPCI_NATOMA 4
2006#define PCIPCI_VIAETBF 8
2007#define PCIPCI_VSFX 16
236561e5
AC
2008#define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
2009#define PCIAGP_FAIL 64 /* No PCI to AGP DMA */
1da177e4 2010
4516a618
AN
2011extern unsigned long pci_cardbus_io_size;
2012extern unsigned long pci_cardbus_mem_size;
15856ad5 2013extern u8 pci_dfl_cache_line_size;
ac1aa47b 2014extern u8 pci_cache_line_size;
4516a618 2015
f7625980 2016/* Architecture-specific versions may override these (weak) */
19792a08 2017void pcibios_disable_device(struct pci_dev *dev);
cfce9fb8 2018void pcibios_set_master(struct pci_dev *dev);
19792a08
AB
2019int pcibios_set_pcie_reset_state(struct pci_dev *dev,
2020 enum pcie_reset_state state);
eca0d467 2021int pcibios_add_device(struct pci_dev *dev);
6ae32c53 2022void pcibios_release_device(struct pci_dev *dev);
5d32a665 2023#ifdef CONFIG_PCI
a43ae58c 2024void pcibios_penalize_isa_irq(int irq, int active);
5d32a665
SK
2025#else
2026static inline void pcibios_penalize_isa_irq(int irq, int active) {}
2027#endif
890e4847
JL
2028int pcibios_alloc_irq(struct pci_dev *dev);
2029void pcibios_free_irq(struct pci_dev *dev);
619e6f34 2030resource_size_t pcibios_default_alignment(void);
575e3348 2031
699c1985
SO
2032#ifdef CONFIG_HIBERNATE_CALLBACKS
2033extern struct dev_pm_ops pcibios_pm_ops;
2034#endif
2035
935c760e 2036#if defined(CONFIG_PCI_MMCONFIG) || defined(CONFIG_ACPI_MCFG)
f39d5b72
BH
2037void __init pci_mmcfg_early_init(void);
2038void __init pci_mmcfg_late_init(void);
7752d5cf 2039#else
bb63b421 2040static inline void pci_mmcfg_early_init(void) { }
7752d5cf
RH
2041static inline void pci_mmcfg_late_init(void) { }
2042#endif
2043
642c92da 2044int pci_ext_cfg_avail(void);
0ef5f8f6 2045
1684f5dd 2046void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar);
c43996f4 2047void __iomem *pci_ioremap_wc_bar(struct pci_dev *pdev, int bar);
aa42d7c6 2048
dd7cc44d 2049#ifdef CONFIG_PCI_IOV
b07579c0
WY
2050int pci_iov_virtfn_bus(struct pci_dev *dev, int id);
2051int pci_iov_virtfn_devfn(struct pci_dev *dev, int id);
2052
f39d5b72
BH
2053int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn);
2054void pci_disable_sriov(struct pci_dev *dev);
789b4cb8
NS
2055
2056int pci_iov_sysfs_link(struct pci_dev *dev, struct pci_dev *virtfn, int id);
753f6124
JS
2057int pci_iov_add_virtfn(struct pci_dev *dev, int id);
2058void pci_iov_remove_virtfn(struct pci_dev *dev, int id);
f39d5b72 2059int pci_num_vf(struct pci_dev *dev);
5a8eb242 2060int pci_vfs_assigned(struct pci_dev *dev);
f39d5b72
BH
2061int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
2062int pci_sriov_get_totalvfs(struct pci_dev *dev);
8effc395 2063int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn);
0e6c9122 2064resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno);
608c0d88 2065void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe);
619e6f34
MM
2066
2067/* Arch may override these (weak) */
2068int pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs);
2069int pcibios_sriov_disable(struct pci_dev *pdev);
2070resource_size_t pcibios_iov_resource_alignment(struct pci_dev *dev, int resno);
dd7cc44d 2071#else
b07579c0
WY
2072static inline int pci_iov_virtfn_bus(struct pci_dev *dev, int id)
2073{
2074 return -ENOSYS;
2075}
2076static inline int pci_iov_virtfn_devfn(struct pci_dev *dev, int id)
2077{
2078 return -ENOSYS;
2079}
dd7cc44d 2080static inline int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
2ee546c4 2081{ return -ENODEV; }
789b4cb8
NS
2082
2083static inline int pci_iov_sysfs_link(struct pci_dev *dev,
2084 struct pci_dev *virtfn, int id)
2085{
2086 return -ENODEV;
2087}
753f6124 2088static inline int pci_iov_add_virtfn(struct pci_dev *dev, int id)
c194f7ea
WY
2089{
2090 return -ENOSYS;
2091}
2092static inline void pci_iov_remove_virtfn(struct pci_dev *dev,
753f6124 2093 int id) { }
2ee546c4 2094static inline void pci_disable_sriov(struct pci_dev *dev) { }
2ee546c4 2095static inline int pci_num_vf(struct pci_dev *dev) { return 0; }
5a8eb242 2096static inline int pci_vfs_assigned(struct pci_dev *dev)
2ee546c4 2097{ return 0; }
bff73156 2098static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
2ee546c4 2099{ return 0; }
bff73156 2100static inline int pci_sriov_get_totalvfs(struct pci_dev *dev)
2ee546c4 2101{ return 0; }
8effc395 2102#define pci_sriov_configure_simple NULL
0e6c9122
WY
2103static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
2104{ return 0; }
608c0d88 2105static inline void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool probe) { }
dd7cc44d
YZ
2106#endif
2107
c825bc94 2108#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
f39d5b72
BH
2109void pci_hp_create_module_link(struct pci_slot *pci_slot);
2110void pci_hp_remove_module_link(struct pci_slot *pci_slot);
c825bc94
KK
2111#endif
2112
d7b7e605
KK
2113/**
2114 * pci_pcie_cap - get the saved PCIe capability offset
2115 * @dev: PCI device
2116 *
2117 * PCIe capability offset is calculated at PCI device initialization
2118 * time and saved in the data structure. This function returns saved
2119 * PCIe capability offset. Using this instead of pci_find_capability()
2120 * reduces unnecessary search in the PCI configuration space. If you
2121 * need to calculate PCIe capability offset from raw device for some
2122 * reasons, please use pci_find_capability() instead.
2123 */
2124static inline int pci_pcie_cap(struct pci_dev *dev)
2125{
2126 return dev->pcie_cap;
2127}
2128
7eb776c4
KK
2129/**
2130 * pci_is_pcie - check if the PCI device is PCI Express capable
2131 * @dev: PCI device
2132 *
a895c28a 2133 * Returns: true if the PCI device is PCI Express capable, false otherwise.
7eb776c4
KK
2134 */
2135static inline bool pci_is_pcie(struct pci_dev *dev)
2136{
a895c28a 2137 return pci_pcie_cap(dev);
7eb776c4
KK
2138}
2139
7c9c003c
MS
2140/**
2141 * pcie_caps_reg - get the PCIe Capabilities Register
2142 * @dev: PCI device
2143 */
2144static inline u16 pcie_caps_reg(const struct pci_dev *dev)
2145{
2146 return dev->pcie_flags_reg;
2147}
2148
786e2288
YW
2149/**
2150 * pci_pcie_type - get the PCIe device/port type
2151 * @dev: PCI device
2152 */
2153static inline int pci_pcie_type(const struct pci_dev *dev)
2154{
1c531d82 2155 return (pcie_caps_reg(dev) & PCI_EXP_FLAGS_TYPE) >> 4;
786e2288
YW
2156}
2157
e784930b
JT
2158static inline struct pci_dev *pcie_find_root_port(struct pci_dev *dev)
2159{
2160 while (1) {
2161 if (!pci_is_pcie(dev))
2162 break;
2163 if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT)
2164 return dev;
2165 if (!dev->bus->self)
2166 break;
2167 dev = dev->bus->self;
2168 }
2169 return NULL;
2170}
2171
5d990b62 2172void pci_request_acs(void);
ad805758
AW
2173bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags);
2174bool pci_acs_path_enabled(struct pci_dev *start,
2175 struct pci_dev *end, u16 acs_flags);
430a2368 2176int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask);
a2ce7662 2177
7ad506fa 2178#define PCI_VPD_LRDT 0x80 /* Large Resource Data Type */
63ddc0b8 2179#define PCI_VPD_LRDT_ID(x) ((x) | PCI_VPD_LRDT)
7ad506fa
MC
2180
2181/* Large Resource Data Type Tag Item Names */
2182#define PCI_VPD_LTIN_ID_STRING 0x02 /* Identifier String */
2183#define PCI_VPD_LTIN_RO_DATA 0x10 /* Read-Only Data */
2184#define PCI_VPD_LTIN_RW_DATA 0x11 /* Read-Write Data */
2185
2186#define PCI_VPD_LRDT_ID_STRING PCI_VPD_LRDT_ID(PCI_VPD_LTIN_ID_STRING)
2187#define PCI_VPD_LRDT_RO_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RO_DATA)
2188#define PCI_VPD_LRDT_RW_DATA PCI_VPD_LRDT_ID(PCI_VPD_LTIN_RW_DATA)
2189
2190/* Small Resource Data Type Tag Item Names */
9eb45d5c 2191#define PCI_VPD_STIN_END 0x0f /* End */
7ad506fa 2192
9eb45d5c 2193#define PCI_VPD_SRDT_END (PCI_VPD_STIN_END << 3)
7ad506fa
MC
2194
2195#define PCI_VPD_SRDT_TIN_MASK 0x78
2196#define PCI_VPD_SRDT_LEN_MASK 0x07
9eb45d5c 2197#define PCI_VPD_LRDT_TIN_MASK 0x7f
7ad506fa
MC
2198
2199#define PCI_VPD_LRDT_TAG_SIZE 3
2200#define PCI_VPD_SRDT_TAG_SIZE 1
a2ce7662 2201
e1d5bdab
MC
2202#define PCI_VPD_INFO_FLD_HDR_SIZE 3
2203
4067a854
MC
2204#define PCI_VPD_RO_KEYWORD_PARTNO "PN"
2205#define PCI_VPD_RO_KEYWORD_MFR_ID "MN"
2206#define PCI_VPD_RO_KEYWORD_VENDOR0 "V0"
d4894f3e 2207#define PCI_VPD_RO_KEYWORD_CHKSUM "RV"
4067a854 2208
a2ce7662
MC
2209/**
2210 * pci_vpd_lrdt_size - Extracts the Large Resource Data Type length
2211 * @lrdt: Pointer to the beginning of the Large Resource Data Type tag
2212 *
2213 * Returns the extracted Large Resource Data Type length.
2214 */
2215static inline u16 pci_vpd_lrdt_size(const u8 *lrdt)
2216{
2217 return (u16)lrdt[1] + ((u16)lrdt[2] << 8);
2218}
2219
9eb45d5c
HR
2220/**
2221 * pci_vpd_lrdt_tag - Extracts the Large Resource Data Type Tag Item
2222 * @lrdt: Pointer to the beginning of the Large Resource Data Type tag
2223 *
2224 * Returns the extracted Large Resource Data Type Tag item.
2225 */
2226static inline u16 pci_vpd_lrdt_tag(const u8 *lrdt)
2227{
0aa0f5d1 2228 return (u16)(lrdt[0] & PCI_VPD_LRDT_TIN_MASK);
9eb45d5c
HR
2229}
2230
7ad506fa
MC
2231/**
2232 * pci_vpd_srdt_size - Extracts the Small Resource Data Type length
0142626d 2233 * @srdt: Pointer to the beginning of the Small Resource Data Type tag
7ad506fa
MC
2234 *
2235 * Returns the extracted Small Resource Data Type length.
2236 */
2237static inline u8 pci_vpd_srdt_size(const u8 *srdt)
2238{
2239 return (*srdt) & PCI_VPD_SRDT_LEN_MASK;
2240}
2241
9eb45d5c
HR
2242/**
2243 * pci_vpd_srdt_tag - Extracts the Small Resource Data Type Tag Item
0142626d 2244 * @srdt: Pointer to the beginning of the Small Resource Data Type tag
9eb45d5c
HR
2245 *
2246 * Returns the extracted Small Resource Data Type Tag Item.
2247 */
2248static inline u8 pci_vpd_srdt_tag(const u8 *srdt)
2249{
2250 return ((*srdt) & PCI_VPD_SRDT_TIN_MASK) >> 3;
2251}
2252
e1d5bdab
MC
2253/**
2254 * pci_vpd_info_field_size - Extracts the information field length
229b4e07 2255 * @info_field: Pointer to the beginning of an information field header
e1d5bdab
MC
2256 *
2257 * Returns the extracted information field length.
2258 */
2259static inline u8 pci_vpd_info_field_size(const u8 *info_field)
2260{
2261 return info_field[2];
2262}
2263
b55ac1b2
MC
2264/**
2265 * pci_vpd_find_tag - Locates the Resource Data Type tag provided
2266 * @buf: Pointer to buffered vpd data
2267 * @off: The offset into the buffer at which to begin the search
2268 * @len: The length of the vpd buffer
2269 * @rdt: The Resource Data Type to search for
2270 *
2271 * Returns the index where the Resource Data Type was found or
2272 * -ENOENT otherwise.
2273 */
2274int pci_vpd_find_tag(const u8 *buf, unsigned int off, unsigned int len, u8 rdt);
2275
4067a854
MC
2276/**
2277 * pci_vpd_find_info_keyword - Locates an information field keyword in the VPD
2278 * @buf: Pointer to buffered vpd data
2279 * @off: The offset into the buffer at which to begin the search
2280 * @len: The length of the buffer area, relative to off, in which to search
2281 * @kw: The keyword to search for
2282 *
2283 * Returns the index where the information field keyword was found or
2284 * -ENOENT otherwise.
2285 */
2286int pci_vpd_find_info_keyword(const u8 *buf, unsigned int off,
2287 unsigned int len, const char *kw);
2288
98d9f30c
BH
2289/* PCI <-> OF binding helpers */
2290#ifdef CONFIG_OF
2291struct device_node;
b165e2b6 2292struct irq_domain;
b165e2b6 2293struct irq_domain *pci_host_bridge_of_msi_domain(struct pci_bus *bus);
3a8f77e4
CP
2294int pci_parse_request_of_pci_ranges(struct device *dev,
2295 struct list_head *resources,
2296 struct resource **bus_range);
98d9f30c
BH
2297
2298/* Arch may override this (weak) */
723ec4d0 2299struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus);
98d9f30c 2300
0aa0f5d1 2301#else /* CONFIG_OF */
b165e2b6
MZ
2302static inline struct irq_domain *
2303pci_host_bridge_of_msi_domain(struct pci_bus *bus) { return NULL; }
3a8f77e4
CP
2304static inline int pci_parse_request_of_pci_ranges(struct device *dev,
2305 struct list_head *resources,
2306 struct resource **bus_range)
2307{
2308 return -EINVAL;
2309}
98d9f30c
BH
2310#endif /* CONFIG_OF */
2311
ad32eb2d
BM
2312static inline struct device_node *
2313pci_device_to_OF_node(const struct pci_dev *pdev)
2314{
2315 return pdev ? pdev->dev.of_node : NULL;
2316}
2317
2318static inline struct device_node *pci_bus_to_OF_node(struct pci_bus *bus)
2319{
2320 return bus ? bus->dev.of_node : NULL;
2321}
2322
471036b2
SS
2323#ifdef CONFIG_ACPI
2324struct irq_domain *pci_host_bridge_acpi_msi_domain(struct pci_bus *bus);
2325
2326void
2327pci_msi_register_fwnode_provider(struct fwnode_handle *(*fn)(struct device *));
93088033 2328bool pci_pr3_present(struct pci_dev *pdev);
471036b2
SS
2329#else
2330static inline struct irq_domain *
2331pci_host_bridge_acpi_msi_domain(struct pci_bus *bus) { return NULL; }
4651b618 2332static inline bool pci_pr3_present(struct pci_dev *pdev) { return false; }
471036b2
SS
2333#endif
2334
eb740b5f
GS
2335#ifdef CONFIG_EEH
2336static inline struct eeh_dev *pci_dev_to_eeh_dev(struct pci_dev *pdev)
2337{
2338 return pdev->dev.archdata.edev;
2339}
2340#endif
2341
b3cb9d57 2342void pci_add_dma_alias(struct pci_dev *dev, u8 devfn_from, unsigned nr_devfns);
338c3149 2343bool pci_devs_are_dma_aliases(struct pci_dev *dev1, struct pci_dev *dev2);
c25dc828
AW
2344int pci_for_each_dma_alias(struct pci_dev *pdev,
2345 int (*fn)(struct pci_dev *pdev,
2346 u16 alias, void *data), void *data);
2347
0aa0f5d1 2348/* Helper functions for operation of device flag */
ce052984
EZ
2349static inline void pci_set_dev_assigned(struct pci_dev *pdev)
2350{
2351 pdev->dev_flags |= PCI_DEV_FLAGS_ASSIGNED;
2352}
2353static inline void pci_clear_dev_assigned(struct pci_dev *pdev)
2354{
2355 pdev->dev_flags &= ~PCI_DEV_FLAGS_ASSIGNED;
2356}
2357static inline bool pci_is_dev_assigned(struct pci_dev *pdev)
2358{
2359 return (pdev->dev_flags & PCI_DEV_FLAGS_ASSIGNED) == PCI_DEV_FLAGS_ASSIGNED;
2360}
19bdb6e4
AW
2361
2362/**
2363 * pci_ari_enabled - query ARI forwarding status
2364 * @bus: the PCI bus
2365 *
2366 * Returns true if ARI forwarding is enabled.
2367 */
2368static inline bool pci_ari_enabled(struct pci_bus *bus)
2369{
2370 return bus->self && bus->self->ari_enabled;
2371}
bc4b024a 2372
8531e283
LW
2373/**
2374 * pci_is_thunderbolt_attached - whether device is on a Thunderbolt daisy chain
2375 * @pdev: PCI device to check
2376 *
2377 * Walk upwards from @pdev and check for each encountered bridge if it's part
2378 * of a Thunderbolt controller. Reaching the host bridge means @pdev is not
2379 * Thunderbolt-attached. (But rather soldered to the mainboard usually.)
2380 */
2381static inline bool pci_is_thunderbolt_attached(struct pci_dev *pdev)
2382{
2383 struct pci_dev *parent = pdev;
2384
2385 if (pdev->is_thunderbolt)
2386 return true;
2387
2388 while ((parent = pci_upstream_bridge(parent)))
2389 if (parent->is_thunderbolt)
2390 return true;
2391
2392 return false;
2393}
2394
2e28bc84 2395#if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH)
3ecac020
ME
2396void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type);
2397#endif
856e1eb9 2398
0aa0f5d1 2399/* Provide the legacy pci_dma_* API */
bc4b024a
CH
2400#include <linux/pci-dma-compat.h>
2401
7506dc79
FL
2402#define pci_printk(level, pdev, fmt, arg...) \
2403 dev_printk(level, &(pdev)->dev, fmt, ##arg)
2404
2405#define pci_emerg(pdev, fmt, arg...) dev_emerg(&(pdev)->dev, fmt, ##arg)
2406#define pci_alert(pdev, fmt, arg...) dev_alert(&(pdev)->dev, fmt, ##arg)
2407#define pci_crit(pdev, fmt, arg...) dev_crit(&(pdev)->dev, fmt, ##arg)
2408#define pci_err(pdev, fmt, arg...) dev_err(&(pdev)->dev, fmt, ##arg)
2409#define pci_warn(pdev, fmt, arg...) dev_warn(&(pdev)->dev, fmt, ##arg)
2410#define pci_notice(pdev, fmt, arg...) dev_notice(&(pdev)->dev, fmt, ##arg)
2411#define pci_info(pdev, fmt, arg...) dev_info(&(pdev)->dev, fmt, ##arg)
2412#define pci_dbg(pdev, fmt, arg...) dev_dbg(&(pdev)->dev, fmt, ##arg)
2413
a88a7b3e
BH
2414#define pci_notice_ratelimited(pdev, fmt, arg...) \
2415 dev_notice_ratelimited(&(pdev)->dev, fmt, ##arg)
2416
7f1c62c4
KW
2417#define pci_info_ratelimited(pdev, fmt, arg...) \
2418 dev_info_ratelimited(&(pdev)->dev, fmt, ##arg)
2419
1da177e4 2420#endif /* LINUX_PCI_H */