pci.h 20.9 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0 */
2 3 4
#ifndef DRIVERS_PCI_H
#define DRIVERS_PCI_H

5 6
#include <linux/pci.h>

7 8
#define PCI_FIND_CAP_TTL	48

9 10
#define PCI_VSEC_ID_INTEL_TBT	0x1234	/* Thunderbolt */

11
extern const unsigned char pcie_link_speed[];
12
extern bool pci_early_dump;
13

14 15
bool pcie_cap_has_lnkctl(const struct pci_dev *dev);

L
Linus Torvalds 已提交
16 17
/* Functions internal to the PCI core code */

18 19
int pci_create_sysfs_dev_files(struct pci_dev *pdev);
void pci_remove_sysfs_dev_files(struct pci_dev *pdev);
20
#if !defined(CONFIG_DMI) && !defined(CONFIG_ACPI)
21
static inline void pci_create_firmware_label_files(struct pci_dev *pdev)
22
{ return; }
23
static inline void pci_remove_firmware_label_files(struct pci_dev *pdev)
24
{ return; }
25
#else
26 27
void pci_create_firmware_label_files(struct pci_dev *pdev);
void pci_remove_firmware_label_files(struct pci_dev *pdev);
28
#endif
29
void pci_cleanup_rom(struct pci_dev *dev);
30

31 32 33 34
enum pci_mmap_api {
	PCI_MMAP_SYSFS,	/* mmap on /sys/bus/pci/devices/<BDF>/resource<N> */
	PCI_MMAP_PROCFS	/* mmap on /proc/bus/pci/<BDF> */
};
35 36
int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct *vmai,
		  enum pci_mmap_api mmap_api);
37

38
int pci_probe_reset_function(struct pci_dev *dev);
39
int pci_bridge_secondary_bus_reset(struct pci_dev *dev);
40
int pci_bus_error_reset(struct pci_dev *dev);
41

42 43 44 45 46
#define PCI_PM_D2_DELAY         200
#define PCI_PM_D3_WAIT          10
#define PCI_PM_D3COLD_WAIT      100
#define PCI_PM_BUS_WAIT         50

47
/**
48
 * struct pci_platform_pm_ops - Firmware PM callbacks
49
 *
50 51
 * @bridge_d3: Does the bridge allow entering into D3
 *
52
 * @is_manageable: returns 'true' if given device is power manageable by the
53
 *		   platform firmware
54
 *
55
 * @set_state: invokes the platform firmware to set the device's power state
56
 *
57 58
 * @get_state: queries the platform firmware for a device's current power state
 *
59 60
 * @refresh_state: asks the platform to refresh the device's power state data
 *
61
 * @choose_state: returns PCI power state of given device preferred by the
62 63
 *		  platform; to be used during system-wide transitions from a
 *		  sleeping state to the working state and vice versa
64
 *
65
 * @set_wakeup: enables/disables wakeup capability for the device
66
 *
67
 * @need_resume: returns 'true' if the given device (which is currently
68 69
 *		 suspended) needs to be resumed to be configured for system
 *		 wakeup.
70
 *
71 72 73 74
 * If given platform is generally capable of power managing PCI devices, all of
 * these callbacks are mandatory.
 */
struct pci_platform_pm_ops {
75
	bool (*bridge_d3)(struct pci_dev *dev);
76 77
	bool (*is_manageable)(struct pci_dev *dev);
	int (*set_state)(struct pci_dev *dev, pci_power_t state);
78
	pci_power_t (*get_state)(struct pci_dev *dev);
79
	void (*refresh_state)(struct pci_dev *dev);
80
	pci_power_t (*choose_state)(struct pci_dev *dev);
81
	int (*set_wakeup)(struct pci_dev *dev, bool enable);
82
	bool (*need_resume)(struct pci_dev *dev);
83 84
};

85
int pci_set_platform_pm(const struct pci_platform_pm_ops *ops);
86
void pci_update_current_state(struct pci_dev *dev, pci_power_t state);
87
void pci_refresh_power_state(struct pci_dev *dev);
88 89 90
void pci_power_up(struct pci_dev *dev);
void pci_disable_enabled_device(struct pci_dev *dev);
int pci_finish_runtime_suspend(struct pci_dev *dev);
91
void pcie_clear_root_pme_status(struct pci_dev *dev);
92 93
bool pci_check_pme_status(struct pci_dev *dev);
void pci_pme_wakeup_bus(struct pci_bus *bus);
94
int __pci_pme_wakeup(struct pci_dev *dev, void *ign);
95
void pci_pme_restore(struct pci_dev *dev);
96 97
bool pci_dev_need_resume(struct pci_dev *dev);
void pci_dev_adjust_pme(struct pci_dev *dev);
98
void pci_dev_complete_resume(struct pci_dev *pci_dev);
99 100 101
void pci_config_pm_runtime_get(struct pci_dev *dev);
void pci_config_pm_runtime_put(struct pci_dev *dev);
void pci_pm_init(struct pci_dev *dev);
102
void pci_ea_init(struct pci_dev *dev);
103
void pci_allocate_cap_save_buffers(struct pci_dev *dev);
104
void pci_free_cap_save_buffers(struct pci_dev *dev);
105
bool pci_bridge_d3_possible(struct pci_dev *dev);
106
void pci_bridge_d3_update(struct pci_dev *dev);
107

108 109 110 111 112 113
static inline void pci_wakeup_event(struct pci_dev *dev)
{
	/* Wait 100 ms before the system can be put into a sleep state. */
	pm_wakeup_event(&dev->dev, 100);
}

114
static inline bool pci_has_subordinate(struct pci_dev *pci_dev)
115 116 117
{
	return !!(pci_dev->subordinate);
}
118

119 120 121 122 123 124 125 126 127
static inline bool pci_power_manageable(struct pci_dev *pci_dev)
{
	/*
	 * Currently we allow normal PCI devices and PCI bridges transition
	 * into D3 if their bridge_d3 is set.
	 */
	return !pci_has_subordinate(pci_dev) || pci_dev->bridge_d3;
}

128 129 130 131 132 133 134 135 136
static inline bool pcie_downstream_port(const struct pci_dev *dev)
{
	int type = pci_pcie_type(dev);

	return type == PCI_EXP_TYPE_ROOT_PORT ||
	       type == PCI_EXP_TYPE_DOWNSTREAM ||
	       type == PCI_EXP_TYPE_PCIE_BRIDGE;
}

137
int pci_vpd_init(struct pci_dev *dev);
138
void pci_vpd_release(struct pci_dev *dev);
139 140
void pcie_vpd_create_sysfs_dev_files(struct pci_dev *dev);
void pcie_vpd_remove_sysfs_dev_files(struct pci_dev *dev);
141

142 143 144 145 146
/* PCI Virtual Channel */
int pci_save_vc_state(struct pci_dev *dev);
void pci_restore_vc_state(struct pci_dev *dev);
void pci_allocate_vc_save_buffers(struct pci_dev *dev);

L
Linus Torvalds 已提交
147 148
/* PCI /proc functions */
#ifdef CONFIG_PROC_FS
149 150 151
int pci_proc_attach_device(struct pci_dev *dev);
int pci_proc_detach_device(struct pci_dev *dev);
int pci_proc_detach_bus(struct pci_bus *bus);
L
Linus Torvalds 已提交
152 153 154 155 156 157 158
#else
static inline int pci_proc_attach_device(struct pci_dev *dev) { return 0; }
static inline int pci_proc_detach_device(struct pci_dev *dev) { return 0; }
static inline int pci_proc_detach_bus(struct pci_bus *bus) { return 0; }
#endif

/* Functions for PCI Hotplug drivers to use */
159
int pci_hp_add_bridge(struct pci_dev *dev);
L
Linus Torvalds 已提交
160

161
#ifdef HAVE_PCI_LEGACY
162 163
void pci_create_legacy_files(struct pci_bus *bus);
void pci_remove_legacy_files(struct pci_bus *bus);
164 165 166 167
#else
static inline void pci_create_legacy_files(struct pci_bus *bus) { return; }
static inline void pci_remove_legacy_files(struct pci_bus *bus) { return; }
#endif
L
Linus Torvalds 已提交
168 169

/* Lock for read/write access to pci device and bus lists */
170
extern struct rw_semaphore pci_bus_sem;
171
extern struct mutex pci_slot_mutex;
L
Linus Torvalds 已提交
172

173 174
extern raw_spinlock_t pci_lock;

175
extern unsigned int pci_pm_d3_delay;
176

177
#ifdef CONFIG_PCI_MSI
178
void pci_no_msi(void);
179
#else
180
static inline void pci_no_msi(void) { }
181
#endif
182

183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
static inline void pci_msi_set_enable(struct pci_dev *dev, int enable)
{
	u16 control;

	pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
	control &= ~PCI_MSI_FLAGS_ENABLE;
	if (enable)
		control |= PCI_MSI_FLAGS_ENABLE;
	pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
}

static inline void pci_msix_clear_and_set_ctrl(struct pci_dev *dev, u16 clear, u16 set)
{
	u16 ctrl;

	pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
	ctrl &= ~clear;
	ctrl |= set;
	pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, ctrl);
}

204
void pci_realloc_get_opt(char *);
205

206 207 208
static inline int pci_no_d1d2(struct pci_dev *dev)
{
	unsigned int parent_dstates = 0;
209

210 211 212 213 214
	if (dev->bus->self)
		parent_dstates = dev->bus->self->no_d1d2;
	return (dev->no_d1d2 || parent_dstates);

}
215
extern const struct attribute_group *pci_dev_groups[];
216
extern const struct attribute_group *pcibus_groups[];
217
extern const struct device_type pci_dev_type;
218
extern const struct attribute_group *pci_bus_groups[];
A
Alex Chiang 已提交
219

220 221 222
extern unsigned long pci_hotplug_io_size;
extern unsigned long pci_hotplug_mem_size;
extern unsigned long pci_hotplug_bus_size;
L
Linus Torvalds 已提交
223 224 225

/**
 * pci_match_one_device - Tell if a PCI device structure has a matching
226
 *			  PCI device id structure
L
Linus Torvalds 已提交
227 228
 * @id: single PCI device id structure to match
 * @dev: the PCI device structure to match against
229
 *
L
Linus Torvalds 已提交
230 231 232 233 234 235 236 237 238 239 240 241 242 243
 * Returns the matching pci_device_id structure or %NULL if there is no match.
 */
static inline const struct pci_device_id *
pci_match_one_device(const struct pci_device_id *id, const struct pci_dev *dev)
{
	if ((id->vendor == PCI_ANY_ID || id->vendor == dev->vendor) &&
	    (id->device == PCI_ANY_ID || id->device == dev->device) &&
	    (id->subvendor == PCI_ANY_ID || id->subvendor == dev->subsystem_vendor) &&
	    (id->subdevice == PCI_ANY_ID || id->subdevice == dev->subsystem_device) &&
	    !((id->class ^ dev->class) & id->class_mask))
		return id;
	return NULL;
}

A
Alex Chiang 已提交
244 245 246 247 248 249 250 251 252 253 254 255
/* PCI slot sysfs helper code */
#define to_pci_slot(s) container_of(s, struct pci_slot, kobj)

extern struct kset *pci_slots_kset;

struct pci_slot_attribute {
	struct attribute attr;
	ssize_t (*show)(struct pci_slot *, char *);
	ssize_t (*store)(struct pci_slot *, const char *, size_t);
};
#define to_pci_slot_attr(s) container_of(s, struct pci_slot_attribute, attr)

Y
Yu Zhao 已提交
256 257
enum pci_bar_type {
	pci_bar_unknown,	/* Standard PCI BAR probe */
258
	pci_bar_io,		/* An I/O port BAR */
Y
Yu Zhao 已提交
259 260 261 262
	pci_bar_mem32,		/* A 32-bit memory BAR */
	pci_bar_mem64,		/* A 64-bit memory BAR */
};

263 264 265
struct device *pci_get_host_bridge_device(struct pci_dev *dev);
void pci_put_host_bridge_device(struct device *dev);

266
int pci_configure_extended_tags(struct pci_dev *dev, void *ign);
267 268
bool pci_bus_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *pl,
				int crs_timeout);
269 270 271 272
bool pci_bus_generic_read_dev_vendor_id(struct pci_bus *bus, int devfn, u32 *pl,
					int crs_timeout);
int pci_idt_bus_quirk(struct pci_bus *bus, int devfn, u32 *pl, int crs_timeout);

273 274 275 276
int pci_setup_device(struct pci_dev *dev);
int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
		    struct resource *res, unsigned int reg);
void pci_configure_ari(struct pci_dev *dev);
277
void __pci_bus_size_bridges(struct pci_bus *bus,
278
			struct list_head *realloc_head);
279 280 281
void __pci_bus_assign_resources(const struct pci_bus *bus,
				struct list_head *realloc_head,
				struct list_head *fail_head);
282
bool pci_bus_clip_resource(struct pci_dev *dev, int idx);
283

284
void pci_reassigndev_resource_alignment(struct pci_dev *dev);
285
void pci_disable_bridge_window(struct pci_dev *dev);
286 287
struct pci_bus *pci_bus_get(struct pci_bus *bus);
void pci_bus_put(struct pci_bus *bus);
288

289 290 291 292 293 294 295 296
/* PCIe link information */
#define PCIE_SPEED2STR(speed) \
	((speed) == PCIE_SPEED_16_0GT ? "16 GT/s" : \
	 (speed) == PCIE_SPEED_8_0GT ? "8 GT/s" : \
	 (speed) == PCIE_SPEED_5_0GT ? "5 GT/s" : \
	 (speed) == PCIE_SPEED_2_5GT ? "2.5 GT/s" : \
	 "Unknown speed")

297 298 299 300 301 302 303 304
/* PCIe speed to Mb/s reduced by encoding overhead */
#define PCIE_SPEED2MBS_ENC(speed) \
	((speed) == PCIE_SPEED_16_0GT ? 16000*128/130 : \
	 (speed) == PCIE_SPEED_8_0GT  ?  8000*128/130 : \
	 (speed) == PCIE_SPEED_5_0GT  ?  5000*8/10 : \
	 (speed) == PCIE_SPEED_2_5GT  ?  2500*8/10 : \
	 0)

305
enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev);
306
enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev);
307 308
u32 pcie_bandwidth_capable(struct pci_dev *dev, enum pci_bus_speed *speed,
			   enum pcie_link_width *width);
309
void __pcie_print_link_status(struct pci_dev *dev, bool verbose);
310
void pcie_report_downtraining(struct pci_dev *dev);
311
void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
312

313 314
/* Single Root I/O Virtualization */
struct pci_sriov {
315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
	int		pos;		/* Capability position */
	int		nres;		/* Number of resources */
	u32		cap;		/* SR-IOV Capabilities */
	u16		ctrl;		/* SR-IOV Control */
	u16		total_VFs;	/* Total VFs associated with the PF */
	u16		initial_VFs;	/* Initial VFs associated with the PF */
	u16		num_VFs;	/* Number of VFs available */
	u16		offset;		/* First VF Routing ID offset */
	u16		stride;		/* Following VF stride */
	u16		vf_device;	/* VF device ID */
	u32		pgsz;		/* Page size for BAR alignment */
	u8		link;		/* Function Dependency Link */
	u8		max_VF_buses;	/* Max buses consumed by VFs */
	u16		driver_max_VFs;	/* Max num VFs driver supports */
	struct pci_dev	*dev;		/* Lowest numbered PF */
	struct pci_dev	*self;		/* This PF */
331 332 333 334
	u32		class;		/* VF device */
	u8		hdr_type;	/* VF header type */
	u16		subsystem_vendor; /* VF subsystem vendor */
	u16		subsystem_device; /* VF subsystem device */
335 336
	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
337 338
};

K
Keith Busch 已提交
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
/**
 * pci_dev_set_io_state - Set the new error state if possible.
 *
 * @dev - pci device to set new error_state
 * @new - the state we want dev to be in
 *
 * Must be called with device_lock held.
 *
 * Returns true if state has been changed to the requested state.
 */
static inline bool pci_dev_set_io_state(struct pci_dev *dev,
					pci_channel_state_t new)
{
	bool changed = false;

	device_lock_assert(&dev->dev);
	switch (new) {
	case pci_channel_io_perm_failure:
		switch (dev->error_state) {
		case pci_channel_io_frozen:
		case pci_channel_io_normal:
		case pci_channel_io_perm_failure:
			changed = true;
			break;
		}
		break;
	case pci_channel_io_frozen:
		switch (dev->error_state) {
		case pci_channel_io_frozen:
		case pci_channel_io_normal:
			changed = true;
			break;
		}
		break;
	case pci_channel_io_normal:
		switch (dev->error_state) {
		case pci_channel_io_frozen:
		case pci_channel_io_normal:
			changed = true;
			break;
		}
		break;
	}
	if (changed)
		dev->error_state = new;
	return changed;
}
K
Keith Busch 已提交
386 387 388

static inline int pci_dev_set_disconnected(struct pci_dev *dev, void *unused)
{
K
Keith Busch 已提交
389 390 391 392
	device_lock(&dev->dev);
	pci_dev_set_io_state(dev, pci_channel_io_perm_failure);
	device_unlock(&dev->dev);

K
Keith Busch 已提交
393 394 395 396 397
	return 0;
}

static inline bool pci_dev_is_disconnected(const struct pci_dev *dev)
{
K
Keith Busch 已提交
398
	return dev->error_state == pci_channel_io_perm_failure;
K
Keith Busch 已提交
399 400
}

K
Keith Busch 已提交
401 402 403
/* pci_dev priv_flags */
#define PCI_DEV_ADDED 0

404 405 406 407 408 409 410 411 412 413
static inline void pci_dev_assign_added(struct pci_dev *dev, bool added)
{
	assign_bit(PCI_DEV_ADDED, &dev->priv_flags, added);
}

static inline bool pci_dev_is_added(const struct pci_dev *dev)
{
	return test_bit(PCI_DEV_ADDED, &dev->priv_flags);
}

414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
#ifdef CONFIG_PCIEAER
#include <linux/aer.h>

#define AER_MAX_MULTI_ERR_DEVICES	5	/* Not likely to have more */

struct aer_err_info {
	struct pci_dev *dev[AER_MAX_MULTI_ERR_DEVICES];
	int error_dev_num;

	unsigned int id:16;

	unsigned int severity:2;	/* 0:NONFATAL | 1:FATAL | 2:COR */
	unsigned int __pad1:5;
	unsigned int multi_error_valid:1;

	unsigned int first_error:5;
	unsigned int __pad2:2;
	unsigned int tlp_header_valid:1;

	unsigned int status;		/* COR/UNCOR Error Status */
	unsigned int mask;		/* COR/UNCOR Error Mask */
	struct aer_header_log_regs tlp;	/* TLP Header */
};

int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *info);
void aer_print_error(struct pci_dev *dev, struct aer_err_info *info);
#endif	/* CONFIG_PCIEAER */

442 443 444 445 446 447 448 449
#ifdef CONFIG_PCIE_DPC
void pci_save_dpc_state(struct pci_dev *dev);
void pci_restore_dpc_state(struct pci_dev *dev);
#else
static inline void pci_save_dpc_state(struct pci_dev *dev) {}
static inline void pci_restore_dpc_state(struct pci_dev *dev) {}
#endif

450
#ifdef CONFIG_PCI_ATS
451 452
/* Address Translation Service */
void pci_ats_init(struct pci_dev *dev);
453
void pci_restore_ats_state(struct pci_dev *dev);
454
#else
455 456
static inline void pci_ats_init(struct pci_dev *d) { }
static inline void pci_restore_ats_state(struct pci_dev *dev) { }
457 458
#endif /* CONFIG_PCI_ATS */

459 460 461 462 463 464
#ifdef CONFIG_PCI_PRI
void pci_pri_init(struct pci_dev *dev);
#else
static inline void pci_pri_init(struct pci_dev *dev) { }
#endif

465
#ifdef CONFIG_PCI_IOV
466 467
int pci_iov_init(struct pci_dev *dev);
void pci_iov_release(struct pci_dev *dev);
468
void pci_iov_remove(struct pci_dev *dev);
469
void pci_iov_update_resource(struct pci_dev *dev, int resno);
470 471 472
resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno);
void pci_restore_iov_state(struct pci_dev *dev);
int pci_iov_bus_range(struct pci_bus *bus);
473
extern const struct attribute_group sriov_dev_attr_group;
474 475 476 477 478 479 480
#else
static inline int pci_iov_init(struct pci_dev *dev)
{
	return -ENODEV;
}
static inline void pci_iov_release(struct pci_dev *dev)

481 482 483
{
}
static inline void pci_iov_remove(struct pci_dev *dev)
484 485
{
}
Y
Yu Zhao 已提交
486 487 488
static inline void pci_restore_iov_state(struct pci_dev *dev)
{
}
489 490 491 492
static inline int pci_iov_bus_range(struct pci_bus *bus)
{
	return 0;
}
Y
Yu Zhao 已提交
493

494 495
#endif /* CONFIG_PCI_IOV */

496
unsigned long pci_cardbus_resource_alignment(struct resource *);
497

498
static inline resource_size_t pci_resource_alignment(struct pci_dev *dev,
499
						     struct resource *res)
500 501 502 503 504 505 506
{
#ifdef CONFIG_PCI_IOV
	int resno = res - dev->resource;

	if (resno >= PCI_IOV_RESOURCES && resno <= PCI_IOV_RESOURCE_END)
		return pci_sriov_resource_alignment(dev, resno);
#endif
507
	if (dev->class >> 8 == PCI_CLASS_BRIDGE_CARDBUS)
508
		return pci_cardbus_resource_alignment(res);
509 510 511
	return resource_alignment(res);
}

512
void pci_enable_acs(struct pci_dev *dev);
513 514 515
#ifdef CONFIG_PCI_QUIRKS
int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags);
int pci_dev_specific_enable_acs(struct pci_dev *dev);
516
int pci_dev_specific_disable_acs_redir(struct pci_dev *dev);
517 518 519 520 521 522 523 524 525 526
#else
static inline int pci_dev_specific_acs_enabled(struct pci_dev *dev,
					       u16 acs_flags)
{
	return -ENOTTY;
}
static inline int pci_dev_specific_enable_acs(struct pci_dev *dev)
{
	return -ENOTTY;
}
527 528 529 530
static inline int pci_dev_specific_disable_acs_redir(struct pci_dev *dev)
{
	return -ENOTTY;
}
531
#endif
532

533
/* PCI error reporting and recovery */
534 535
void pcie_do_recovery(struct pci_dev *dev, enum pci_channel_state state,
		      u32 service);
536

537
bool pcie_wait_for_link(struct pci_dev *pdev, bool active);
538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
#ifdef CONFIG_PCIEASPM
void pcie_aspm_init_link_state(struct pci_dev *pdev);
void pcie_aspm_exit_link_state(struct pci_dev *pdev);
void pcie_aspm_pm_state_change(struct pci_dev *pdev);
void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
#else
static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) { }
static inline void pcie_aspm_exit_link_state(struct pci_dev *pdev) { }
static inline void pcie_aspm_pm_state_change(struct pci_dev *pdev) { }
static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev) { }
#endif

#ifdef CONFIG_PCIEASPM_DEBUG
void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev);
void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev);
#else
static inline void pcie_aspm_create_sysfs_dev_files(struct pci_dev *pdev) { }
static inline void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev) { }
#endif

558 559 560 561 562 563 564 565
#ifdef CONFIG_PCIE_ECRC
void pcie_set_ecrc_checking(struct pci_dev *dev);
void pcie_ecrc_get_policy(char *str);
#else
static inline void pcie_set_ecrc_checking(struct pci_dev *dev) { }
static inline void pcie_ecrc_get_policy(char *str) { }
#endif

566 567
#ifdef CONFIG_PCIE_PTM
void pci_ptm_init(struct pci_dev *dev);
568
int pci_enable_ptm(struct pci_dev *dev, u8 *granularity);
569 570
#else
static inline void pci_ptm_init(struct pci_dev *dev) { }
571 572
static inline int pci_enable_ptm(struct pci_dev *dev, u8 *granularity)
{ return -EINVAL; }
573 574
#endif

575 576 577 578 579 580
struct pci_dev_reset_methods {
	u16 vendor;
	u16 device;
	int (*reset)(struct pci_dev *dev, int probe);
};

581
#ifdef CONFIG_PCI_QUIRKS
582
int pci_dev_specific_reset(struct pci_dev *dev, int probe);
583 584 585 586 587 588
#else
static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe)
{
	return -ENOTTY;
}
#endif
589

590 591 592 593 594
#if defined(CONFIG_PCI_QUIRKS) && defined(CONFIG_ARM64)
int acpi_get_rc_resources(struct device *dev, const char *hid, u16 segment,
			  struct resource *res);
#endif

595 596 597 598 599 600 601 602
u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar);
int pci_rebar_get_current_size(struct pci_dev *pdev, int bar);
int pci_rebar_set_size(struct pci_dev *pdev, int bar, int size);
static inline u64 pci_rebar_size_to_bytes(int size)
{
	return 1ULL << (size + 20);
}

603 604 605 606 607 608
struct device_node;

#ifdef CONFIG_OF
int of_pci_parse_bus_range(struct device_node *node, struct resource *res);
int of_get_pci_domain_nr(struct device_node *node);
int of_pci_get_max_link_speed(struct device_node *node);
609 610 611 612
void pci_set_of_node(struct pci_dev *dev);
void pci_release_of_node(struct pci_dev *dev);
void pci_set_bus_of_node(struct pci_bus *bus);
void pci_release_bus_of_node(struct pci_bus *bus);
613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631

#else
static inline int
of_pci_parse_bus_range(struct device_node *node, struct resource *res)
{
	return -EINVAL;
}

static inline int
of_get_pci_domain_nr(struct device_node *node)
{
	return -1;
}

static inline int
of_pci_get_max_link_speed(struct device_node *node)
{
	return -EINVAL;
}
632 633 634 635 636

static inline void pci_set_of_node(struct pci_dev *dev) { }
static inline void pci_release_of_node(struct pci_dev *dev) { }
static inline void pci_set_bus_of_node(struct pci_bus *bus) { }
static inline void pci_release_bus_of_node(struct pci_bus *bus) { }
637 638 639
#endif /* CONFIG_OF */

#if defined(CONFIG_OF_ADDRESS)
B
Bjorn Helgaas 已提交
640
int devm_of_pci_get_host_bridge_resources(struct device *dev,
641 642 643
			unsigned char busno, unsigned char bus_max,
			struct list_head *resources, resource_size_t *io_base);
#else
B
Bjorn Helgaas 已提交
644
static inline int devm_of_pci_get_host_bridge_resources(struct device *dev,
645 646 647 648 649 650 651
			unsigned char busno, unsigned char bus_max,
			struct list_head *resources, resource_size_t *io_base)
{
	return -EINVAL;
}
#endif

652 653 654
#ifdef CONFIG_PCIEAER
void pci_no_aer(void);
void pci_aer_init(struct pci_dev *dev);
655
void pci_aer_exit(struct pci_dev *dev);
656
extern const struct attribute_group aer_stats_attr_group;
657
void pci_aer_clear_fatal_status(struct pci_dev *dev);
658
void pci_aer_clear_device_status(struct pci_dev *dev);
659 660
#else
static inline void pci_no_aer(void) { }
661
static inline void pci_aer_init(struct pci_dev *d) { }
662
static inline void pci_aer_exit(struct pci_dev *d) { }
663
static inline void pci_aer_clear_fatal_status(struct pci_dev *dev) { }
664
static inline void pci_aer_clear_device_status(struct pci_dev *dev) { }
665 666
#endif

667
#ifdef CONFIG_ACPI
668
int pci_acpi_program_hp_params(struct pci_dev *dev);
669
#else
670
static inline int pci_acpi_program_hp_params(struct pci_dev *dev)
671 672 673 674 675
{
	return -ENODEV;
}
#endif

676
#endif /* DRIVERS_PCI_H */