Linux Audio

Check our new training course

Loading...
v3.1
   1/*
   2 *	PCI Bus Services, see include/linux/pci.h for further explanation.
   3 *
   4 *	Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
   5 *	David Mosberger-Tang
   6 *
   7 *	Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/delay.h>
  12#include <linux/init.h>
  13#include <linux/pci.h>
  14#include <linux/pm.h>
  15#include <linux/slab.h>
  16#include <linux/module.h>
  17#include <linux/spinlock.h>
  18#include <linux/string.h>
  19#include <linux/log2.h>
  20#include <linux/pci-aspm.h>
  21#include <linux/pm_wakeup.h>
  22#include <linux/interrupt.h>
  23#include <linux/device.h>
  24#include <linux/pm_runtime.h>
 
 
  25#include <asm/setup.h>
  26#include "pci.h"
  27
  28const char *pci_power_names[] = {
  29	"error", "D0", "D1", "D2", "D3hot", "D3cold", "unknown",
  30};
  31EXPORT_SYMBOL_GPL(pci_power_names);
  32
  33int isa_dma_bridge_buggy;
  34EXPORT_SYMBOL(isa_dma_bridge_buggy);
  35
  36int pci_pci_problems;
  37EXPORT_SYMBOL(pci_pci_problems);
  38
  39unsigned int pci_pm_d3_delay;
  40
  41static void pci_pme_list_scan(struct work_struct *work);
  42
  43static LIST_HEAD(pci_pme_list);
  44static DEFINE_MUTEX(pci_pme_list_mutex);
  45static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
  46
  47struct pci_pme_device {
  48	struct list_head list;
  49	struct pci_dev *dev;
  50};
  51
  52#define PME_TIMEOUT 1000 /* How long between PME checks */
  53
  54static void pci_dev_d3_sleep(struct pci_dev *dev)
  55{
  56	unsigned int delay = dev->d3_delay;
  57
  58	if (delay < pci_pm_d3_delay)
  59		delay = pci_pm_d3_delay;
  60
  61	msleep(delay);
  62}
  63
  64#ifdef CONFIG_PCI_DOMAINS
  65int pci_domains_supported = 1;
  66#endif
  67
  68#define DEFAULT_CARDBUS_IO_SIZE		(256)
  69#define DEFAULT_CARDBUS_MEM_SIZE	(64*1024*1024)
  70/* pci=cbmemsize=nnM,cbiosize=nn can override this */
  71unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
  72unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
  73
  74#define DEFAULT_HOTPLUG_IO_SIZE		(256)
  75#define DEFAULT_HOTPLUG_MEM_SIZE	(2*1024*1024)
  76/* pci=hpmemsize=nnM,hpiosize=nn can override this */
  77unsigned long pci_hotplug_io_size  = DEFAULT_HOTPLUG_IO_SIZE;
  78unsigned long pci_hotplug_mem_size = DEFAULT_HOTPLUG_MEM_SIZE;
  79
  80enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_TUNE_OFF;
  81
  82/*
  83 * The default CLS is used if arch didn't set CLS explicitly and not
  84 * all pci devices agree on the same value.  Arch can override either
  85 * the dfl or actual value as it sees fit.  Don't forget this is
  86 * measured in 32-bit words, not bytes.
  87 */
  88u8 pci_dfl_cache_line_size __devinitdata = L1_CACHE_BYTES >> 2;
  89u8 pci_cache_line_size;
  90
 
 
 
 
 
 
 
 
 
  91/**
  92 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
  93 * @bus: pointer to PCI bus structure to search
  94 *
  95 * Given a PCI bus, returns the highest PCI bus number present in the set
  96 * including the given PCI bus and its list of child PCI buses.
  97 */
  98unsigned char pci_bus_max_busnr(struct pci_bus* bus)
  99{
 100	struct list_head *tmp;
 101	unsigned char max, n;
 102
 103	max = bus->subordinate;
 104	list_for_each(tmp, &bus->children) {
 105		n = pci_bus_max_busnr(pci_bus_b(tmp));
 106		if(n > max)
 107			max = n;
 108	}
 109	return max;
 110}
 111EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
 112
 113#ifdef CONFIG_HAS_IOMEM
 114void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
 115{
 116	/*
 117	 * Make sure the BAR is actually a memory resource, not an IO resource
 118	 */
 119	if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
 120		WARN_ON(1);
 121		return NULL;
 122	}
 123	return ioremap_nocache(pci_resource_start(pdev, bar),
 124				     pci_resource_len(pdev, bar));
 125}
 126EXPORT_SYMBOL_GPL(pci_ioremap_bar);
 127#endif
 128
 129#if 0
 130/**
 131 * pci_max_busnr - returns maximum PCI bus number
 132 *
 133 * Returns the highest PCI bus number present in the system global list of
 134 * PCI buses.
 135 */
 136unsigned char __devinit
 137pci_max_busnr(void)
 138{
 139	struct pci_bus *bus = NULL;
 140	unsigned char max, n;
 141
 142	max = 0;
 143	while ((bus = pci_find_next_bus(bus)) != NULL) {
 144		n = pci_bus_max_busnr(bus);
 145		if(n > max)
 146			max = n;
 147	}
 148	return max;
 149}
 150
 151#endif  /*  0  */
 152
 153#define PCI_FIND_CAP_TTL	48
 154
 155static int __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
 156				   u8 pos, int cap, int *ttl)
 157{
 158	u8 id;
 159
 160	while ((*ttl)--) {
 161		pci_bus_read_config_byte(bus, devfn, pos, &pos);
 162		if (pos < 0x40)
 163			break;
 164		pos &= ~3;
 165		pci_bus_read_config_byte(bus, devfn, pos + PCI_CAP_LIST_ID,
 166					 &id);
 167		if (id == 0xff)
 168			break;
 169		if (id == cap)
 170			return pos;
 171		pos += PCI_CAP_LIST_NEXT;
 172	}
 173	return 0;
 174}
 175
 176static int __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn,
 177			       u8 pos, int cap)
 178{
 179	int ttl = PCI_FIND_CAP_TTL;
 180
 181	return __pci_find_next_cap_ttl(bus, devfn, pos, cap, &ttl);
 182}
 183
 184int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap)
 185{
 186	return __pci_find_next_cap(dev->bus, dev->devfn,
 187				   pos + PCI_CAP_LIST_NEXT, cap);
 188}
 189EXPORT_SYMBOL_GPL(pci_find_next_capability);
 190
 191static int __pci_bus_find_cap_start(struct pci_bus *bus,
 192				    unsigned int devfn, u8 hdr_type)
 193{
 194	u16 status;
 195
 196	pci_bus_read_config_word(bus, devfn, PCI_STATUS, &status);
 197	if (!(status & PCI_STATUS_CAP_LIST))
 198		return 0;
 199
 200	switch (hdr_type) {
 201	case PCI_HEADER_TYPE_NORMAL:
 202	case PCI_HEADER_TYPE_BRIDGE:
 203		return PCI_CAPABILITY_LIST;
 204	case PCI_HEADER_TYPE_CARDBUS:
 205		return PCI_CB_CAPABILITY_LIST;
 206	default:
 207		return 0;
 208	}
 209
 210	return 0;
 211}
 212
 213/**
 214 * pci_find_capability - query for devices' capabilities 
 215 * @dev: PCI device to query
 216 * @cap: capability code
 217 *
 218 * Tell if a device supports a given PCI capability.
 219 * Returns the address of the requested capability structure within the
 220 * device's PCI configuration space or 0 in case the device does not
 221 * support it.  Possible values for @cap:
 222 *
 223 *  %PCI_CAP_ID_PM           Power Management 
 224 *  %PCI_CAP_ID_AGP          Accelerated Graphics Port 
 225 *  %PCI_CAP_ID_VPD          Vital Product Data 
 226 *  %PCI_CAP_ID_SLOTID       Slot Identification 
 227 *  %PCI_CAP_ID_MSI          Message Signalled Interrupts
 228 *  %PCI_CAP_ID_CHSWP        CompactPCI HotSwap 
 229 *  %PCI_CAP_ID_PCIX         PCI-X
 230 *  %PCI_CAP_ID_EXP          PCI Express
 231 */
 232int pci_find_capability(struct pci_dev *dev, int cap)
 233{
 234	int pos;
 235
 236	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 237	if (pos)
 238		pos = __pci_find_next_cap(dev->bus, dev->devfn, pos, cap);
 239
 240	return pos;
 241}
 242
 243/**
 244 * pci_bus_find_capability - query for devices' capabilities 
 245 * @bus:   the PCI bus to query
 246 * @devfn: PCI device to query
 247 * @cap:   capability code
 248 *
 249 * Like pci_find_capability() but works for pci devices that do not have a
 250 * pci_dev structure set up yet. 
 251 *
 252 * Returns the address of the requested capability structure within the
 253 * device's PCI configuration space or 0 in case the device does not
 254 * support it.
 255 */
 256int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap)
 257{
 258	int pos;
 259	u8 hdr_type;
 260
 261	pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type);
 262
 263	pos = __pci_bus_find_cap_start(bus, devfn, hdr_type & 0x7f);
 264	if (pos)
 265		pos = __pci_find_next_cap(bus, devfn, pos, cap);
 266
 267	return pos;
 268}
 269
 270/**
 271 * pci_find_ext_capability - Find an extended capability
 272 * @dev: PCI device to query
 
 273 * @cap: capability code
 274 *
 275 * Returns the address of the requested extended capability structure
 276 * within the device's PCI configuration space or 0 if the device does
 277 * not support it.  Possible values for @cap:
 278 *
 279 *  %PCI_EXT_CAP_ID_ERR		Advanced Error Reporting
 280 *  %PCI_EXT_CAP_ID_VC		Virtual Channel
 281 *  %PCI_EXT_CAP_ID_DSN		Device Serial Number
 282 *  %PCI_EXT_CAP_ID_PWR		Power Budgeting
 283 */
 284int pci_find_ext_capability(struct pci_dev *dev, int cap)
 285{
 286	u32 header;
 287	int ttl;
 288	int pos = PCI_CFG_SPACE_SIZE;
 289
 290	/* minimum 8 bytes per capability */
 291	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 292
 293	if (dev->cfg_size <= PCI_CFG_SPACE_SIZE)
 294		return 0;
 295
 
 
 
 296	if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 297		return 0;
 298
 299	/*
 300	 * If we have no capabilities, this is indicated by cap ID,
 301	 * cap version and next pointer all being 0.
 302	 */
 303	if (header == 0)
 304		return 0;
 305
 306	while (ttl-- > 0) {
 307		if (PCI_EXT_CAP_ID(header) == cap)
 308			return pos;
 309
 310		pos = PCI_EXT_CAP_NEXT(header);
 311		if (pos < PCI_CFG_SPACE_SIZE)
 312			break;
 313
 314		if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 315			break;
 316	}
 317
 318	return 0;
 319}
 320EXPORT_SYMBOL_GPL(pci_find_ext_capability);
 321
 322/**
 323 * pci_bus_find_ext_capability - find an extended capability
 324 * @bus:   the PCI bus to query
 325 * @devfn: PCI device to query
 326 * @cap:   capability code
 327 *
 328 * Like pci_find_ext_capability() but works for pci devices that do not have a
 329 * pci_dev structure set up yet.
 
 330 *
 331 * Returns the address of the requested capability structure within the
 332 * device's PCI configuration space or 0 in case the device does not
 333 * support it.
 
 334 */
 335int pci_bus_find_ext_capability(struct pci_bus *bus, unsigned int devfn,
 336				int cap)
 337{
 338	u32 header;
 339	int ttl;
 340	int pos = PCI_CFG_SPACE_SIZE;
 341
 342	/* minimum 8 bytes per capability */
 343	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 344
 345	if (!pci_bus_read_config_dword(bus, devfn, pos, &header))
 346		return 0;
 347	if (header == 0xffffffff || header == 0)
 348		return 0;
 349
 350	while (ttl-- > 0) {
 351		if (PCI_EXT_CAP_ID(header) == cap)
 352			return pos;
 353
 354		pos = PCI_EXT_CAP_NEXT(header);
 355		if (pos < PCI_CFG_SPACE_SIZE)
 356			break;
 357
 358		if (!pci_bus_read_config_dword(bus, devfn, pos, &header))
 359			break;
 360	}
 361
 362	return 0;
 363}
 
 364
 365static int __pci_find_next_ht_cap(struct pci_dev *dev, int pos, int ht_cap)
 366{
 367	int rc, ttl = PCI_FIND_CAP_TTL;
 368	u8 cap, mask;
 369
 370	if (ht_cap == HT_CAPTYPE_SLAVE || ht_cap == HT_CAPTYPE_HOST)
 371		mask = HT_3BIT_CAP_MASK;
 372	else
 373		mask = HT_5BIT_CAP_MASK;
 374
 375	pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, pos,
 376				      PCI_CAP_ID_HT, &ttl);
 377	while (pos) {
 378		rc = pci_read_config_byte(dev, pos + 3, &cap);
 379		if (rc != PCIBIOS_SUCCESSFUL)
 380			return 0;
 381
 382		if ((cap & mask) == ht_cap)
 383			return pos;
 384
 385		pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn,
 386					      pos + PCI_CAP_LIST_NEXT,
 387					      PCI_CAP_ID_HT, &ttl);
 388	}
 389
 390	return 0;
 391}
 392/**
 393 * pci_find_next_ht_capability - query a device's Hypertransport capabilities
 394 * @dev: PCI device to query
 395 * @pos: Position from which to continue searching
 396 * @ht_cap: Hypertransport capability code
 397 *
 398 * To be used in conjunction with pci_find_ht_capability() to search for
 399 * all capabilities matching @ht_cap. @pos should always be a value returned
 400 * from pci_find_ht_capability().
 401 *
 402 * NB. To be 100% safe against broken PCI devices, the caller should take
 403 * steps to avoid an infinite loop.
 404 */
 405int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap)
 406{
 407	return __pci_find_next_ht_cap(dev, pos + PCI_CAP_LIST_NEXT, ht_cap);
 408}
 409EXPORT_SYMBOL_GPL(pci_find_next_ht_capability);
 410
 411/**
 412 * pci_find_ht_capability - query a device's Hypertransport capabilities
 413 * @dev: PCI device to query
 414 * @ht_cap: Hypertransport capability code
 415 *
 416 * Tell if a device supports a given Hypertransport capability.
 417 * Returns an address within the device's PCI configuration space
 418 * or 0 in case the device does not support the request capability.
 419 * The address points to the PCI capability, of type PCI_CAP_ID_HT,
 420 * which has a Hypertransport capability matching @ht_cap.
 421 */
 422int pci_find_ht_capability(struct pci_dev *dev, int ht_cap)
 423{
 424	int pos;
 425
 426	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 427	if (pos)
 428		pos = __pci_find_next_ht_cap(dev, pos, ht_cap);
 429
 430	return pos;
 431}
 432EXPORT_SYMBOL_GPL(pci_find_ht_capability);
 433
 434/**
 435 * pci_find_parent_resource - return resource region of parent bus of given region
 436 * @dev: PCI device structure contains resources to be searched
 437 * @res: child resource record for which parent is sought
 438 *
 439 *  For given resource region of given device, return the resource
 440 *  region of parent bus the given region is contained in or where
 441 *  it should be allocated from.
 442 */
 443struct resource *
 444pci_find_parent_resource(const struct pci_dev *dev, struct resource *res)
 445{
 446	const struct pci_bus *bus = dev->bus;
 
 447	int i;
 448	struct resource *best = NULL, *r;
 449
 450	pci_bus_for_each_resource(bus, r, i) {
 451		if (!r)
 452			continue;
 453		if (res->start && !(res->start >= r->start && res->end <= r->end))
 454			continue;	/* Not contained */
 455		if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM))
 456			continue;	/* Wrong type */
 457		if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH))
 458			return r;	/* Exact match */
 459		/* We can't insert a non-prefetch resource inside a prefetchable parent .. */
 460		if (r->flags & IORESOURCE_PREFETCH)
 461			continue;
 462		/* .. but we can put a prefetchable resource inside a non-prefetchable one */
 463		if (!best)
 464			best = r;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 465	}
 466	return best;
 
 467}
 468
 469/**
 470 * pci_restore_bars - restore a devices BAR values (e.g. after wake-up)
 471 * @dev: PCI device to have its BARs restored
 472 *
 473 * Restore the BAR values for a given device, so as to make it
 474 * accessible by its driver.
 475 */
 476static void
 477pci_restore_bars(struct pci_dev *dev)
 478{
 479	int i;
 480
 481	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++)
 482		pci_update_resource(dev, i);
 483}
 484
 485static struct pci_platform_pm_ops *pci_platform_pm;
 486
 487int pci_set_platform_pm(struct pci_platform_pm_ops *ops)
 488{
 489	if (!ops->is_manageable || !ops->set_state || !ops->choose_state
 490	    || !ops->sleep_wake || !ops->can_wakeup)
 491		return -EINVAL;
 492	pci_platform_pm = ops;
 493	return 0;
 494}
 495
 496static inline bool platform_pci_power_manageable(struct pci_dev *dev)
 497{
 498	return pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false;
 499}
 500
 501static inline int platform_pci_set_power_state(struct pci_dev *dev,
 502                                                pci_power_t t)
 503{
 504	return pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS;
 505}
 506
 507static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
 508{
 509	return pci_platform_pm ?
 510			pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR;
 511}
 512
 513static inline bool platform_pci_can_wakeup(struct pci_dev *dev)
 514{
 515	return pci_platform_pm ? pci_platform_pm->can_wakeup(dev) : false;
 516}
 517
 518static inline int platform_pci_sleep_wake(struct pci_dev *dev, bool enable)
 519{
 520	return pci_platform_pm ?
 521			pci_platform_pm->sleep_wake(dev, enable) : -ENODEV;
 522}
 523
 524static inline int platform_pci_run_wake(struct pci_dev *dev, bool enable)
 525{
 526	return pci_platform_pm ?
 527			pci_platform_pm->run_wake(dev, enable) : -ENODEV;
 528}
 529
 530/**
 531 * pci_raw_set_power_state - Use PCI PM registers to set the power state of
 532 *                           given PCI device
 533 * @dev: PCI device to handle.
 534 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 535 *
 536 * RETURN VALUE:
 537 * -EINVAL if the requested state is invalid.
 538 * -EIO if device does not support PCI PM or its PM capabilities register has a
 539 * wrong version, or device doesn't support the requested state.
 540 * 0 if device already is in the requested state.
 541 * 0 if device's power state has been successfully changed.
 542 */
 543static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
 544{
 545	u16 pmcsr;
 546	bool need_restore = false;
 547
 548	/* Check if we're already there */
 549	if (dev->current_state == state)
 550		return 0;
 551
 552	if (!dev->pm_cap)
 553		return -EIO;
 554
 555	if (state < PCI_D0 || state > PCI_D3hot)
 556		return -EINVAL;
 557
 558	/* Validate current state:
 559	 * Can enter D0 from any state, but if we can only go deeper 
 560	 * to sleep if we're already in a low power state
 561	 */
 562	if (state != PCI_D0 && dev->current_state <= PCI_D3cold
 563	    && dev->current_state > state) {
 564		dev_err(&dev->dev, "invalid power transition "
 565			"(from state %d to %d)\n", dev->current_state, state);
 566		return -EINVAL;
 567	}
 568
 569	/* check if this device supports the desired state */
 570	if ((state == PCI_D1 && !dev->d1_support)
 571	   || (state == PCI_D2 && !dev->d2_support))
 572		return -EIO;
 573
 574	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 575
 576	/* If we're (effectively) in D3, force entire word to 0.
 577	 * This doesn't affect PME_Status, disables PME_En, and
 578	 * sets PowerState to 0.
 579	 */
 580	switch (dev->current_state) {
 581	case PCI_D0:
 582	case PCI_D1:
 583	case PCI_D2:
 584		pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
 585		pmcsr |= state;
 586		break;
 587	case PCI_D3hot:
 588	case PCI_D3cold:
 589	case PCI_UNKNOWN: /* Boot-up */
 590		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot
 591		 && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
 592			need_restore = true;
 593		/* Fall-through: force to D0 */
 594	default:
 595		pmcsr = 0;
 596		break;
 597	}
 598
 599	/* enter specified state */
 600	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
 601
 602	/* Mandatory power management transition delays */
 603	/* see PCI PM 1.1 5.6.1 table 18 */
 604	if (state == PCI_D3hot || dev->current_state == PCI_D3hot)
 605		pci_dev_d3_sleep(dev);
 606	else if (state == PCI_D2 || dev->current_state == PCI_D2)
 607		udelay(PCI_PM_D2_DELAY);
 608
 609	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 610	dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 611	if (dev->current_state != state && printk_ratelimit())
 612		dev_info(&dev->dev, "Refused to change power state, "
 613			"currently in D%d\n", dev->current_state);
 614
 615	/* According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT
 
 616	 * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning
 617	 * from D3hot to D0 _may_ perform an internal reset, thereby
 618	 * going to "D0 Uninitialized" rather than "D0 Initialized".
 619	 * For example, at least some versions of the 3c905B and the
 620	 * 3c556B exhibit this behaviour.
 621	 *
 622	 * At least some laptop BIOSen (e.g. the Thinkpad T21) leave
 623	 * devices in a D3hot state at boot.  Consequently, we need to
 624	 * restore at least the BARs so that the device will be
 625	 * accessible to its driver.
 626	 */
 627	if (need_restore)
 628		pci_restore_bars(dev);
 629
 630	if (dev->bus->self)
 631		pcie_aspm_pm_state_change(dev->bus->self);
 632
 633	return 0;
 634}
 635
 636/**
 637 * pci_update_current_state - Read PCI power state of given device from its
 638 *                            PCI PM registers and cache it
 639 * @dev: PCI device to handle.
 640 * @state: State to cache in case the device doesn't have the PM capability
 641 */
 642void pci_update_current_state(struct pci_dev *dev, pci_power_t state)
 643{
 644	if (dev->pm_cap) {
 645		u16 pmcsr;
 646
 
 
 
 
 
 
 
 
 
 
 647		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 648		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 649	} else {
 650		dev->current_state = state;
 651	}
 652}
 653
 654/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 655 * pci_platform_power_transition - Use platform to change device power state
 656 * @dev: PCI device to handle.
 657 * @state: State to put the device into.
 658 */
 659static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
 660{
 661	int error;
 662
 663	if (platform_pci_power_manageable(dev)) {
 664		error = platform_pci_set_power_state(dev, state);
 665		if (!error)
 666			pci_update_current_state(dev, state);
 667	} else {
 668		error = -ENODEV;
 669		/* Fall back to PCI_D0 if native PM is not supported */
 670		if (!dev->pm_cap)
 671			dev->current_state = PCI_D0;
 672	}
 673
 674	return error;
 675}
 676
 677/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 678 * __pci_start_power_transition - Start power transition of a PCI device
 679 * @dev: PCI device to handle.
 680 * @state: State to put the device into.
 681 */
 682static void __pci_start_power_transition(struct pci_dev *dev, pci_power_t state)
 683{
 684	if (state == PCI_D0)
 685		pci_platform_power_transition(dev, PCI_D0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 686}
 687
 688/**
 689 * __pci_complete_power_transition - Complete power transition of a PCI device
 690 * @dev: PCI device to handle.
 691 * @state: State to put the device into.
 692 *
 693 * This function should not be called directly by device drivers.
 694 */
 695int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state)
 696{
 697	return state >= PCI_D0 ?
 698			pci_platform_power_transition(dev, state) : -EINVAL;
 
 
 
 
 
 
 
 699}
 700EXPORT_SYMBOL_GPL(__pci_complete_power_transition);
 701
 702/**
 703 * pci_set_power_state - Set the power state of a PCI device
 704 * @dev: PCI device to handle.
 705 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 706 *
 707 * Transition a device to a new power state, using the platform firmware and/or
 708 * the device's PCI PM registers.
 709 *
 710 * RETURN VALUE:
 711 * -EINVAL if the requested state is invalid.
 712 * -EIO if device does not support PCI PM or its PM capabilities register has a
 713 * wrong version, or device doesn't support the requested state.
 714 * 0 if device already is in the requested state.
 715 * 0 if device's power state has been successfully changed.
 716 */
 717int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
 718{
 719	int error;
 720
 721	/* bound the state we're entering */
 722	if (state > PCI_D3hot)
 723		state = PCI_D3hot;
 724	else if (state < PCI_D0)
 725		state = PCI_D0;
 726	else if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev))
 727		/*
 728		 * If the device or the parent bridge do not support PCI PM,
 729		 * ignore the request if we're doing anything other than putting
 730		 * it into D0 (which would only happen on boot).
 731		 */
 732		return 0;
 733
 
 
 
 
 734	__pci_start_power_transition(dev, state);
 735
 736	/* This device is quirked not to be put into D3, so
 737	   don't put it in D3 */
 738	if (state == PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3))
 739		return 0;
 740
 741	error = pci_raw_set_power_state(dev, state);
 
 
 
 
 
 742
 743	if (!__pci_complete_power_transition(dev, state))
 744		error = 0;
 745	/*
 746	 * When aspm_policy is "powersave" this call ensures
 747	 * that ASPM is configured.
 748	 */
 749	if (!error && dev->bus->self)
 750		pcie_aspm_powersave_config_link(dev->bus->self);
 751
 752	return error;
 753}
 754
 755/**
 756 * pci_choose_state - Choose the power state of a PCI device
 757 * @dev: PCI device to be suspended
 758 * @state: target sleep state for the whole system. This is the value
 759 *	that is passed to suspend() function.
 760 *
 761 * Returns PCI power state suitable for given device and given system
 762 * message.
 763 */
 764
 765pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
 766{
 767	pci_power_t ret;
 768
 769	if (!pci_find_capability(dev, PCI_CAP_ID_PM))
 770		return PCI_D0;
 771
 772	ret = platform_pci_choose_state(dev);
 773	if (ret != PCI_POWER_ERROR)
 774		return ret;
 775
 776	switch (state.event) {
 777	case PM_EVENT_ON:
 778		return PCI_D0;
 779	case PM_EVENT_FREEZE:
 780	case PM_EVENT_PRETHAW:
 781		/* REVISIT both freeze and pre-thaw "should" use D0 */
 782	case PM_EVENT_SUSPEND:
 783	case PM_EVENT_HIBERNATE:
 784		return PCI_D3hot;
 785	default:
 786		dev_info(&dev->dev, "unrecognized suspend event %d\n",
 787			 state.event);
 788		BUG();
 789	}
 790	return PCI_D0;
 791}
 792
 793EXPORT_SYMBOL(pci_choose_state);
 794
 795#define PCI_EXP_SAVE_REGS	7
 796
 797#define pcie_cap_has_devctl(type, flags)	1
 798#define pcie_cap_has_lnkctl(type, flags)		\
 799		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 800		 (type == PCI_EXP_TYPE_ROOT_PORT ||	\
 801		  type == PCI_EXP_TYPE_ENDPOINT ||	\
 802		  type == PCI_EXP_TYPE_LEG_END))
 803#define pcie_cap_has_sltctl(type, flags)		\
 804		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 805		 ((type == PCI_EXP_TYPE_ROOT_PORT) ||	\
 806		  (type == PCI_EXP_TYPE_DOWNSTREAM &&	\
 807		   (flags & PCI_EXP_FLAGS_SLOT))))
 808#define pcie_cap_has_rtctl(type, flags)			\
 809		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 810		 (type == PCI_EXP_TYPE_ROOT_PORT ||	\
 811		  type == PCI_EXP_TYPE_RC_EC))
 812#define pcie_cap_has_devctl2(type, flags)		\
 813		((flags & PCI_EXP_FLAGS_VERS) > 1)
 814#define pcie_cap_has_lnkctl2(type, flags)		\
 815		((flags & PCI_EXP_FLAGS_VERS) > 1)
 816#define pcie_cap_has_sltctl2(type, flags)		\
 817		((flags & PCI_EXP_FLAGS_VERS) > 1)
 
 818
 819static int pci_save_pcie_state(struct pci_dev *dev)
 820{
 821	int pos, i = 0;
 822	struct pci_cap_saved_state *save_state;
 823	u16 *cap;
 824	u16 flags;
 825
 826	pos = pci_pcie_cap(dev);
 827	if (!pos)
 828		return 0;
 829
 830	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 831	if (!save_state) {
 832		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 833		return -ENOMEM;
 834	}
 835	cap = (u16 *)&save_state->cap.data[0];
 836
 837	pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
 838
 839	if (pcie_cap_has_devctl(dev->pcie_type, flags))
 840		pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]);
 841	if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
 842		pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]);
 843	if (pcie_cap_has_sltctl(dev->pcie_type, flags))
 844		pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]);
 845	if (pcie_cap_has_rtctl(dev->pcie_type, flags))
 846		pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]);
 847	if (pcie_cap_has_devctl2(dev->pcie_type, flags))
 848		pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]);
 849	if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
 850		pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]);
 851	if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
 852		pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]);
 853
 854	return 0;
 855}
 856
 857static void pci_restore_pcie_state(struct pci_dev *dev)
 858{
 859	int i = 0, pos;
 860	struct pci_cap_saved_state *save_state;
 861	u16 *cap;
 862	u16 flags;
 863
 864	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 865	pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
 866	if (!save_state || pos <= 0)
 867		return;
 868	cap = (u16 *)&save_state->cap.data[0];
 869
 870	pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
 871
 872	if (pcie_cap_has_devctl(dev->pcie_type, flags))
 873		pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]);
 874	if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
 875		pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]);
 876	if (pcie_cap_has_sltctl(dev->pcie_type, flags))
 877		pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]);
 878	if (pcie_cap_has_rtctl(dev->pcie_type, flags))
 879		pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]);
 880	if (pcie_cap_has_devctl2(dev->pcie_type, flags))
 881		pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]);
 882	if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
 883		pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]);
 884	if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
 885		pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]);
 886}
 887
 888
 889static int pci_save_pcix_state(struct pci_dev *dev)
 890{
 891	int pos;
 892	struct pci_cap_saved_state *save_state;
 893
 894	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 895	if (pos <= 0)
 896		return 0;
 897
 898	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 899	if (!save_state) {
 900		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 901		return -ENOMEM;
 902	}
 903
 904	pci_read_config_word(dev, pos + PCI_X_CMD,
 905			     (u16 *)save_state->cap.data);
 906
 907	return 0;
 908}
 909
 910static void pci_restore_pcix_state(struct pci_dev *dev)
 911{
 912	int i = 0, pos;
 913	struct pci_cap_saved_state *save_state;
 914	u16 *cap;
 915
 916	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 917	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 918	if (!save_state || pos <= 0)
 919		return;
 920	cap = (u16 *)&save_state->cap.data[0];
 921
 922	pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]);
 923}
 924
 925
 926/**
 927 * pci_save_state - save the PCI configuration space of a device before suspending
 928 * @dev: - PCI device that we're dealing with
 929 */
 930int
 931pci_save_state(struct pci_dev *dev)
 932{
 933	int i;
 934	/* XXX: 100% dword access ok here? */
 935	for (i = 0; i < 16; i++)
 936		pci_read_config_dword(dev, i * 4, &dev->saved_config_space[i]);
 937	dev->state_saved = true;
 938	if ((i = pci_save_pcie_state(dev)) != 0)
 939		return i;
 940	if ((i = pci_save_pcix_state(dev)) != 0)
 941		return i;
 
 
 942	return 0;
 943}
 944
 945/** 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 946 * pci_restore_state - Restore the saved state of a PCI device
 947 * @dev: - PCI device that we're dealing with
 948 */
 949void pci_restore_state(struct pci_dev *dev)
 950{
 951	int i;
 952	u32 val;
 953
 954	if (!dev->state_saved)
 955		return;
 956
 957	/* PCI Express register must be restored first */
 958	pci_restore_pcie_state(dev);
 
 
 
 
 959
 960	/*
 961	 * The Base Address register should be programmed before the command
 962	 * register(s)
 963	 */
 964	for (i = 15; i >= 0; i--) {
 965		pci_read_config_dword(dev, i * 4, &val);
 966		if (val != dev->saved_config_space[i]) {
 967			dev_printk(KERN_DEBUG, &dev->dev, "restoring config "
 968				"space at offset %#x (was %#x, writing %#x)\n",
 969				i, val, (int)dev->saved_config_space[i]);
 970			pci_write_config_dword(dev,i * 4,
 971				dev->saved_config_space[i]);
 972		}
 973	}
 974	pci_restore_pcix_state(dev);
 975	pci_restore_msi_state(dev);
 976	pci_restore_iov_state(dev);
 977
 978	dev->state_saved = false;
 979}
 980
 981struct pci_saved_state {
 982	u32 config_space[16];
 983	struct pci_cap_saved_data cap[0];
 984};
 985
 986/**
 987 * pci_store_saved_state - Allocate and return an opaque struct containing
 988 *			   the device saved state.
 989 * @dev: PCI device that we're dealing with
 990 *
 991 * Rerturn NULL if no state or error.
 992 */
 993struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)
 994{
 995	struct pci_saved_state *state;
 996	struct pci_cap_saved_state *tmp;
 997	struct pci_cap_saved_data *cap;
 998	struct hlist_node *pos;
 999	size_t size;
1000
1001	if (!dev->state_saved)
1002		return NULL;
1003
1004	size = sizeof(*state) + sizeof(struct pci_cap_saved_data);
1005
1006	hlist_for_each_entry(tmp, pos, &dev->saved_cap_space, next)
1007		size += sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1008
1009	state = kzalloc(size, GFP_KERNEL);
1010	if (!state)
1011		return NULL;
1012
1013	memcpy(state->config_space, dev->saved_config_space,
1014	       sizeof(state->config_space));
1015
1016	cap = state->cap;
1017	hlist_for_each_entry(tmp, pos, &dev->saved_cap_space, next) {
1018		size_t len = sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1019		memcpy(cap, &tmp->cap, len);
1020		cap = (struct pci_cap_saved_data *)((u8 *)cap + len);
1021	}
1022	/* Empty cap_save terminates list */
1023
1024	return state;
1025}
1026EXPORT_SYMBOL_GPL(pci_store_saved_state);
1027
1028/**
1029 * pci_load_saved_state - Reload the provided save state into struct pci_dev.
1030 * @dev: PCI device that we're dealing with
1031 * @state: Saved state returned from pci_store_saved_state()
1032 */
1033int pci_load_saved_state(struct pci_dev *dev, struct pci_saved_state *state)
 
1034{
1035	struct pci_cap_saved_data *cap;
1036
1037	dev->state_saved = false;
1038
1039	if (!state)
1040		return 0;
1041
1042	memcpy(dev->saved_config_space, state->config_space,
1043	       sizeof(state->config_space));
1044
1045	cap = state->cap;
1046	while (cap->size) {
1047		struct pci_cap_saved_state *tmp;
1048
1049		tmp = pci_find_saved_cap(dev, cap->cap_nr);
1050		if (!tmp || tmp->cap.size != cap->size)
1051			return -EINVAL;
1052
1053		memcpy(tmp->cap.data, cap->data, tmp->cap.size);
1054		cap = (struct pci_cap_saved_data *)((u8 *)cap +
1055		       sizeof(struct pci_cap_saved_data) + cap->size);
1056	}
1057
1058	dev->state_saved = true;
1059	return 0;
1060}
1061EXPORT_SYMBOL_GPL(pci_load_saved_state);
1062
1063/**
1064 * pci_load_and_free_saved_state - Reload the save state pointed to by state,
1065 *				   and free the memory allocated for it.
1066 * @dev: PCI device that we're dealing with
1067 * @state: Pointer to saved state returned from pci_store_saved_state()
1068 */
1069int pci_load_and_free_saved_state(struct pci_dev *dev,
1070				  struct pci_saved_state **state)
1071{
1072	int ret = pci_load_saved_state(dev, *state);
1073	kfree(*state);
1074	*state = NULL;
1075	return ret;
1076}
1077EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state);
1078
 
 
 
 
 
1079static int do_pci_enable_device(struct pci_dev *dev, int bars)
1080{
1081	int err;
 
 
1082
1083	err = pci_set_power_state(dev, PCI_D0);
1084	if (err < 0 && err != -EIO)
1085		return err;
1086	err = pcibios_enable_device(dev, bars);
1087	if (err < 0)
1088		return err;
1089	pci_fixup_device(pci_fixup_enable, dev);
1090
 
 
 
 
 
 
 
 
 
 
 
1091	return 0;
1092}
1093
1094/**
1095 * pci_reenable_device - Resume abandoned device
1096 * @dev: PCI device to be resumed
1097 *
1098 *  Note this function is a backend of pci_default_resume and is not supposed
1099 *  to be called by normal code, write proper resume handler and use it instead.
1100 */
1101int pci_reenable_device(struct pci_dev *dev)
1102{
1103	if (pci_is_enabled(dev))
1104		return do_pci_enable_device(dev, (1 << PCI_NUM_RESOURCES) - 1);
1105	return 0;
1106}
1107
1108static int __pci_enable_device_flags(struct pci_dev *dev,
1109				     resource_size_t flags)
1110{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1111	int err;
1112	int i, bars = 0;
1113
1114	/*
1115	 * Power state could be unknown at this point, either due to a fresh
1116	 * boot or a device removal call.  So get the current power state
1117	 * so that things like MSI message writing will behave as expected
1118	 * (e.g. if the device really is in D0 at enable time).
1119	 */
1120	if (dev->pm_cap) {
1121		u16 pmcsr;
1122		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1123		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
1124	}
1125
1126	if (atomic_add_return(1, &dev->enable_cnt) > 1)
1127		return 0;		/* already enabled */
1128
1129	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
 
 
 
 
 
 
 
 
1130		if (dev->resource[i].flags & flags)
1131			bars |= (1 << i);
1132
1133	err = do_pci_enable_device(dev, bars);
1134	if (err < 0)
1135		atomic_dec(&dev->enable_cnt);
1136	return err;
1137}
1138
1139/**
1140 * pci_enable_device_io - Initialize a device for use with IO space
1141 * @dev: PCI device to be initialized
1142 *
1143 *  Initialize device before it's used by a driver. Ask low-level code
1144 *  to enable I/O resources. Wake up the device if it was suspended.
1145 *  Beware, this function can fail.
1146 */
1147int pci_enable_device_io(struct pci_dev *dev)
1148{
1149	return __pci_enable_device_flags(dev, IORESOURCE_IO);
1150}
1151
1152/**
1153 * pci_enable_device_mem - Initialize a device for use with Memory space
1154 * @dev: PCI device to be initialized
1155 *
1156 *  Initialize device before it's used by a driver. Ask low-level code
1157 *  to enable Memory resources. Wake up the device if it was suspended.
1158 *  Beware, this function can fail.
1159 */
1160int pci_enable_device_mem(struct pci_dev *dev)
1161{
1162	return __pci_enable_device_flags(dev, IORESOURCE_MEM);
1163}
1164
1165/**
1166 * pci_enable_device - Initialize device before it's used by a driver.
1167 * @dev: PCI device to be initialized
1168 *
1169 *  Initialize device before it's used by a driver. Ask low-level code
1170 *  to enable I/O and memory. Wake up the device if it was suspended.
1171 *  Beware, this function can fail.
1172 *
1173 *  Note we don't actually enable the device many times if we call
1174 *  this function repeatedly (we just increment the count).
1175 */
1176int pci_enable_device(struct pci_dev *dev)
1177{
1178	return __pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
1179}
1180
1181/*
1182 * Managed PCI resources.  This manages device on/off, intx/msi/msix
1183 * on/off and BAR regions.  pci_dev itself records msi/msix status, so
1184 * there's no need to track it separately.  pci_devres is initialized
1185 * when a device is enabled using managed PCI device enable interface.
1186 */
1187struct pci_devres {
1188	unsigned int enabled:1;
1189	unsigned int pinned:1;
1190	unsigned int orig_intx:1;
1191	unsigned int restore_intx:1;
1192	u32 region_mask;
1193};
1194
1195static void pcim_release(struct device *gendev, void *res)
1196{
1197	struct pci_dev *dev = container_of(gendev, struct pci_dev, dev);
1198	struct pci_devres *this = res;
1199	int i;
1200
1201	if (dev->msi_enabled)
1202		pci_disable_msi(dev);
1203	if (dev->msix_enabled)
1204		pci_disable_msix(dev);
1205
1206	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
1207		if (this->region_mask & (1 << i))
1208			pci_release_region(dev, i);
1209
1210	if (this->restore_intx)
1211		pci_intx(dev, this->orig_intx);
1212
1213	if (this->enabled && !this->pinned)
1214		pci_disable_device(dev);
1215}
1216
1217static struct pci_devres * get_pci_dr(struct pci_dev *pdev)
1218{
1219	struct pci_devres *dr, *new_dr;
1220
1221	dr = devres_find(&pdev->dev, pcim_release, NULL, NULL);
1222	if (dr)
1223		return dr;
1224
1225	new_dr = devres_alloc(pcim_release, sizeof(*new_dr), GFP_KERNEL);
1226	if (!new_dr)
1227		return NULL;
1228	return devres_get(&pdev->dev, new_dr, NULL, NULL);
1229}
1230
1231static struct pci_devres * find_pci_dr(struct pci_dev *pdev)
1232{
1233	if (pci_is_managed(pdev))
1234		return devres_find(&pdev->dev, pcim_release, NULL, NULL);
1235	return NULL;
1236}
1237
1238/**
1239 * pcim_enable_device - Managed pci_enable_device()
1240 * @pdev: PCI device to be initialized
1241 *
1242 * Managed pci_enable_device().
1243 */
1244int pcim_enable_device(struct pci_dev *pdev)
1245{
1246	struct pci_devres *dr;
1247	int rc;
1248
1249	dr = get_pci_dr(pdev);
1250	if (unlikely(!dr))
1251		return -ENOMEM;
1252	if (dr->enabled)
1253		return 0;
1254
1255	rc = pci_enable_device(pdev);
1256	if (!rc) {
1257		pdev->is_managed = 1;
1258		dr->enabled = 1;
1259	}
1260	return rc;
1261}
1262
1263/**
1264 * pcim_pin_device - Pin managed PCI device
1265 * @pdev: PCI device to pin
1266 *
1267 * Pin managed PCI device @pdev.  Pinned device won't be disabled on
1268 * driver detach.  @pdev must have been enabled with
1269 * pcim_enable_device().
1270 */
1271void pcim_pin_device(struct pci_dev *pdev)
1272{
1273	struct pci_devres *dr;
1274
1275	dr = find_pci_dr(pdev);
1276	WARN_ON(!dr || !dr->enabled);
1277	if (dr)
1278		dr->pinned = 1;
1279}
1280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1281/**
1282 * pcibios_disable_device - disable arch specific PCI resources for device dev
1283 * @dev: the PCI device to disable
1284 *
1285 * Disables architecture specific PCI resources for the device. This
1286 * is the default implementation. Architecture implementations can
1287 * override this.
1288 */
1289void __attribute__ ((weak)) pcibios_disable_device (struct pci_dev *dev) {}
1290
1291static void do_pci_disable_device(struct pci_dev *dev)
1292{
1293	u16 pci_command;
1294
1295	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
1296	if (pci_command & PCI_COMMAND_MASTER) {
1297		pci_command &= ~PCI_COMMAND_MASTER;
1298		pci_write_config_word(dev, PCI_COMMAND, pci_command);
1299	}
1300
1301	pcibios_disable_device(dev);
1302}
1303
1304/**
1305 * pci_disable_enabled_device - Disable device without updating enable_cnt
1306 * @dev: PCI device to disable
1307 *
1308 * NOTE: This function is a backend of PCI power management routines and is
1309 * not supposed to be called drivers.
1310 */
1311void pci_disable_enabled_device(struct pci_dev *dev)
1312{
1313	if (pci_is_enabled(dev))
1314		do_pci_disable_device(dev);
1315}
1316
1317/**
1318 * pci_disable_device - Disable PCI device after use
1319 * @dev: PCI device to be disabled
1320 *
1321 * Signal to the system that the PCI device is not in use by the system
1322 * anymore.  This only involves disabling PCI bus-mastering, if active.
1323 *
1324 * Note we don't actually disable the device until all callers of
1325 * pci_enable_device() have called pci_disable_device().
1326 */
1327void
1328pci_disable_device(struct pci_dev *dev)
1329{
1330	struct pci_devres *dr;
1331
1332	dr = find_pci_dr(dev);
1333	if (dr)
1334		dr->enabled = 0;
1335
1336	if (atomic_sub_return(1, &dev->enable_cnt) != 0)
 
 
 
1337		return;
1338
1339	do_pci_disable_device(dev);
1340
1341	dev->is_busmaster = 0;
1342}
1343
1344/**
1345 * pcibios_set_pcie_reset_state - set reset state for device dev
1346 * @dev: the PCIe device reset
1347 * @state: Reset state to enter into
1348 *
1349 *
1350 * Sets the PCIe reset state for the device. This is the default
1351 * implementation. Architecture implementations can override this.
1352 */
1353int __attribute__ ((weak)) pcibios_set_pcie_reset_state(struct pci_dev *dev,
1354							enum pcie_reset_state state)
1355{
1356	return -EINVAL;
1357}
1358
1359/**
1360 * pci_set_pcie_reset_state - set reset state for device dev
1361 * @dev: the PCIe device reset
1362 * @state: Reset state to enter into
1363 *
1364 *
1365 * Sets the PCI reset state for the device.
1366 */
1367int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)
1368{
1369	return pcibios_set_pcie_reset_state(dev, state);
1370}
1371
1372/**
1373 * pci_check_pme_status - Check if given device has generated PME.
1374 * @dev: Device to check.
1375 *
1376 * Check the PME status of the device and if set, clear it and clear PME enable
1377 * (if set).  Return 'true' if PME status and PME enable were both set or
1378 * 'false' otherwise.
1379 */
1380bool pci_check_pme_status(struct pci_dev *dev)
1381{
1382	int pmcsr_pos;
1383	u16 pmcsr;
1384	bool ret = false;
1385
1386	if (!dev->pm_cap)
1387		return false;
1388
1389	pmcsr_pos = dev->pm_cap + PCI_PM_CTRL;
1390	pci_read_config_word(dev, pmcsr_pos, &pmcsr);
1391	if (!(pmcsr & PCI_PM_CTRL_PME_STATUS))
1392		return false;
1393
1394	/* Clear PME status. */
1395	pmcsr |= PCI_PM_CTRL_PME_STATUS;
1396	if (pmcsr & PCI_PM_CTRL_PME_ENABLE) {
1397		/* Disable PME to avoid interrupt flood. */
1398		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1399		ret = true;
1400	}
1401
1402	pci_write_config_word(dev, pmcsr_pos, pmcsr);
1403
1404	return ret;
1405}
1406
1407/**
1408 * pci_pme_wakeup - Wake up a PCI device if its PME Status bit is set.
1409 * @dev: Device to handle.
1410 * @ign: Ignored.
1411 *
1412 * Check if @dev has generated PME and queue a resume request for it in that
1413 * case.
1414 */
1415static int pci_pme_wakeup(struct pci_dev *dev, void *ign)
1416{
 
 
 
1417	if (pci_check_pme_status(dev)) {
1418		pci_wakeup_event(dev);
1419		pm_request_resume(&dev->dev);
1420	}
1421	return 0;
1422}
1423
1424/**
1425 * pci_pme_wakeup_bus - Walk given bus and wake up devices on it, if necessary.
1426 * @bus: Top bus of the subtree to walk.
1427 */
1428void pci_pme_wakeup_bus(struct pci_bus *bus)
1429{
1430	if (bus)
1431		pci_walk_bus(bus, pci_pme_wakeup, NULL);
1432}
1433
 
1434/**
1435 * pci_pme_capable - check the capability of PCI device to generate PME#
1436 * @dev: PCI device to handle.
1437 * @state: PCI state from which device will issue PME#.
1438 */
1439bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)
1440{
1441	if (!dev->pm_cap)
1442		return false;
1443
1444	return !!(dev->pme_support & (1 << state));
1445}
1446
1447static void pci_pme_list_scan(struct work_struct *work)
1448{
1449	struct pci_pme_device *pme_dev;
1450
1451	mutex_lock(&pci_pme_list_mutex);
1452	if (!list_empty(&pci_pme_list)) {
1453		list_for_each_entry(pme_dev, &pci_pme_list, list)
 
 
 
 
 
 
 
 
 
 
1454			pci_pme_wakeup(pme_dev->dev, NULL);
1455		schedule_delayed_work(&pci_pme_work, msecs_to_jiffies(PME_TIMEOUT));
 
 
 
1456	}
 
 
 
1457	mutex_unlock(&pci_pme_list_mutex);
1458}
1459
1460/**
1461 * pci_external_pme - is a device an external PCI PME source?
1462 * @dev: PCI device to check
1463 *
1464 */
1465
1466static bool pci_external_pme(struct pci_dev *dev)
1467{
1468	if (pci_is_pcie(dev) || dev->bus->number == 0)
1469		return false;
1470	return true;
1471}
1472
1473/**
1474 * pci_pme_active - enable or disable PCI device's PME# function
1475 * @dev: PCI device to handle.
1476 * @enable: 'true' to enable PME# generation; 'false' to disable it.
1477 *
1478 * The caller must verify that the device is capable of generating PME# before
1479 * calling this function with @enable equal to 'true'.
1480 */
1481void pci_pme_active(struct pci_dev *dev, bool enable)
1482{
1483	u16 pmcsr;
1484
1485	if (!dev->pm_cap)
1486		return;
1487
1488	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1489	/* Clear PME_Status by writing 1 to it and enable PME# */
1490	pmcsr |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE;
1491	if (!enable)
1492		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1493
1494	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
1495
1496	/* PCI (as opposed to PCIe) PME requires that the device have
1497	   its PME# line hooked up correctly. Not all hardware vendors
1498	   do this, so the PME never gets delivered and the device
1499	   remains asleep. The easiest way around this is to
1500	   periodically walk the list of suspended devices and check
1501	   whether any have their PME flag set. The assumption is that
1502	   we'll wake up often enough anyway that this won't be a huge
1503	   hit, and the power savings from the devices will still be a
1504	   win. */
 
 
 
 
 
 
 
 
 
 
1505
1506	if (pci_external_pme(dev)) {
1507		struct pci_pme_device *pme_dev;
1508		if (enable) {
1509			pme_dev = kmalloc(sizeof(struct pci_pme_device),
1510					  GFP_KERNEL);
1511			if (!pme_dev)
1512				goto out;
 
 
1513			pme_dev->dev = dev;
1514			mutex_lock(&pci_pme_list_mutex);
1515			list_add(&pme_dev->list, &pci_pme_list);
1516			if (list_is_singular(&pci_pme_list))
1517				schedule_delayed_work(&pci_pme_work,
1518						      msecs_to_jiffies(PME_TIMEOUT));
1519			mutex_unlock(&pci_pme_list_mutex);
1520		} else {
1521			mutex_lock(&pci_pme_list_mutex);
1522			list_for_each_entry(pme_dev, &pci_pme_list, list) {
1523				if (pme_dev->dev == dev) {
1524					list_del(&pme_dev->list);
1525					kfree(pme_dev);
1526					break;
1527				}
1528			}
1529			mutex_unlock(&pci_pme_list_mutex);
1530		}
1531	}
1532
1533out:
1534	dev_printk(KERN_DEBUG, &dev->dev, "PME# %s\n",
1535			enable ? "enabled" : "disabled");
1536}
1537
1538/**
1539 * __pci_enable_wake - enable PCI device as wakeup event source
1540 * @dev: PCI device affected
1541 * @state: PCI state from which device will issue wakeup events
1542 * @runtime: True if the events are to be generated at run time
1543 * @enable: True to enable event generation; false to disable
1544 *
1545 * This enables the device as a wakeup event source, or disables it.
1546 * When such events involves platform-specific hooks, those hooks are
1547 * called automatically by this routine.
1548 *
1549 * Devices with legacy power management (no standard PCI PM capabilities)
1550 * always require such platform hooks.
1551 *
1552 * RETURN VALUE:
1553 * 0 is returned on success
1554 * -EINVAL is returned if device is not supposed to wake up the system
1555 * Error code depending on the platform is returned if both the platform and
1556 * the native mechanism fail to enable the generation of wake-up events
1557 */
1558int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1559		      bool runtime, bool enable)
1560{
1561	int ret = 0;
1562
1563	if (enable && !runtime && !device_may_wakeup(&dev->dev))
1564		return -EINVAL;
1565
1566	/* Don't do the same thing twice in a row for one device. */
1567	if (!!enable == !!dev->wakeup_prepared)
1568		return 0;
1569
1570	/*
1571	 * According to "PCI System Architecture" 4th ed. by Tom Shanley & Don
1572	 * Anderson we should be doing PME# wake enable followed by ACPI wake
1573	 * enable.  To disable wake-up we call the platform first, for symmetry.
1574	 */
1575
1576	if (enable) {
1577		int error;
1578
1579		if (pci_pme_capable(dev, state))
1580			pci_pme_active(dev, true);
1581		else
1582			ret = 1;
1583		error = runtime ? platform_pci_run_wake(dev, true) :
1584					platform_pci_sleep_wake(dev, true);
1585		if (ret)
1586			ret = error;
1587		if (!ret)
1588			dev->wakeup_prepared = true;
1589	} else {
1590		if (runtime)
1591			platform_pci_run_wake(dev, false);
1592		else
1593			platform_pci_sleep_wake(dev, false);
1594		pci_pme_active(dev, false);
1595		dev->wakeup_prepared = false;
1596	}
1597
1598	return ret;
1599}
1600EXPORT_SYMBOL(__pci_enable_wake);
1601
1602/**
1603 * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold
1604 * @dev: PCI device to prepare
1605 * @enable: True to enable wake-up event generation; false to disable
1606 *
1607 * Many drivers want the device to wake up the system from D3_hot or D3_cold
1608 * and this function allows them to set that up cleanly - pci_enable_wake()
1609 * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI
1610 * ordering constraints.
1611 *
1612 * This function only returns error code if the device is not capable of
1613 * generating PME# from both D3_hot and D3_cold, and the platform is unable to
1614 * enable wake-up power for it.
1615 */
1616int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1617{
1618	return pci_pme_capable(dev, PCI_D3cold) ?
1619			pci_enable_wake(dev, PCI_D3cold, enable) :
1620			pci_enable_wake(dev, PCI_D3hot, enable);
1621}
1622
1623/**
1624 * pci_target_state - find an appropriate low power state for a given PCI dev
1625 * @dev: PCI device
1626 *
1627 * Use underlying platform code to find a supported low power state for @dev.
1628 * If the platform can't manage @dev, return the deepest state from which it
1629 * can generate wake events, based on any available PME info.
1630 */
1631pci_power_t pci_target_state(struct pci_dev *dev)
1632{
1633	pci_power_t target_state = PCI_D3hot;
1634
1635	if (platform_pci_power_manageable(dev)) {
1636		/*
1637		 * Call the platform to choose the target state of the device
1638		 * and enable wake-up from this state if supported.
1639		 */
1640		pci_power_t state = platform_pci_choose_state(dev);
1641
1642		switch (state) {
1643		case PCI_POWER_ERROR:
1644		case PCI_UNKNOWN:
1645			break;
1646		case PCI_D1:
1647		case PCI_D2:
1648			if (pci_no_d1d2(dev))
1649				break;
1650		default:
1651			target_state = state;
1652		}
1653	} else if (!dev->pm_cap) {
1654		target_state = PCI_D0;
1655	} else if (device_may_wakeup(&dev->dev)) {
1656		/*
1657		 * Find the deepest state from which the device can generate
1658		 * wake-up events, make it the target state and enable device
1659		 * to generate PME#.
1660		 */
1661		if (dev->pme_support) {
1662			while (target_state
1663			      && !(dev->pme_support & (1 << target_state)))
1664				target_state--;
1665		}
1666	}
1667
1668	return target_state;
1669}
1670
1671/**
1672 * pci_prepare_to_sleep - prepare PCI device for system-wide transition into a sleep state
1673 * @dev: Device to handle.
1674 *
1675 * Choose the power state appropriate for the device depending on whether
1676 * it can wake up the system and/or is power manageable by the platform
1677 * (PCI_D3hot is the default) and put the device into that state.
1678 */
1679int pci_prepare_to_sleep(struct pci_dev *dev)
1680{
1681	pci_power_t target_state = pci_target_state(dev);
1682	int error;
1683
1684	if (target_state == PCI_POWER_ERROR)
1685		return -EIO;
1686
 
 
 
 
1687	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
1688
1689	error = pci_set_power_state(dev, target_state);
1690
1691	if (error)
1692		pci_enable_wake(dev, target_state, false);
1693
1694	return error;
1695}
1696
1697/**
1698 * pci_back_from_sleep - turn PCI device on during system-wide transition into working state
1699 * @dev: Device to handle.
1700 *
1701 * Disable device's system wake-up capability and put it into D0.
1702 */
1703int pci_back_from_sleep(struct pci_dev *dev)
1704{
1705	pci_enable_wake(dev, PCI_D0, false);
1706	return pci_set_power_state(dev, PCI_D0);
1707}
1708
1709/**
1710 * pci_finish_runtime_suspend - Carry out PCI-specific part of runtime suspend.
1711 * @dev: PCI device being suspended.
1712 *
1713 * Prepare @dev to generate wake-up events at run time and put it into a low
1714 * power state.
1715 */
1716int pci_finish_runtime_suspend(struct pci_dev *dev)
1717{
1718	pci_power_t target_state = pci_target_state(dev);
1719	int error;
1720
1721	if (target_state == PCI_POWER_ERROR)
1722		return -EIO;
1723
 
 
1724	__pci_enable_wake(dev, target_state, true, pci_dev_run_wake(dev));
1725
1726	error = pci_set_power_state(dev, target_state);
1727
1728	if (error)
1729		__pci_enable_wake(dev, target_state, true, false);
 
 
1730
1731	return error;
1732}
1733
1734/**
1735 * pci_dev_run_wake - Check if device can generate run-time wake-up events.
1736 * @dev: Device to check.
1737 *
1738 * Return true if the device itself is cabable of generating wake-up events
1739 * (through the platform or using the native PCIe PME) or if the device supports
1740 * PME and one of its upstream bridges can generate wake-up events.
1741 */
1742bool pci_dev_run_wake(struct pci_dev *dev)
1743{
1744	struct pci_bus *bus = dev->bus;
1745
1746	if (device_run_wake(&dev->dev))
1747		return true;
1748
1749	if (!dev->pme_support)
1750		return false;
1751
1752	while (bus->parent) {
1753		struct pci_dev *bridge = bus->self;
1754
1755		if (device_run_wake(&bridge->dev))
1756			return true;
1757
1758		bus = bus->parent;
1759	}
1760
1761	/* We have reached the root bus. */
1762	if (bus->bridge)
1763		return device_run_wake(bus->bridge);
1764
1765	return false;
1766}
1767EXPORT_SYMBOL_GPL(pci_dev_run_wake);
1768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1769/**
1770 * pci_pm_init - Initialize PM functions of given PCI device
1771 * @dev: PCI device to handle.
1772 */
1773void pci_pm_init(struct pci_dev *dev)
1774{
1775	int pm;
1776	u16 pmc;
1777
1778	pm_runtime_forbid(&dev->dev);
 
 
1779	device_enable_async_suspend(&dev->dev);
1780	dev->wakeup_prepared = false;
1781
1782	dev->pm_cap = 0;
 
1783
1784	/* find PCI PM capability in list */
1785	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
1786	if (!pm)
1787		return;
1788	/* Check device's ability to generate PME# */
1789	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
1790
1791	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
1792		dev_err(&dev->dev, "unsupported PM cap regs version (%u)\n",
1793			pmc & PCI_PM_CAP_VER_MASK);
1794		return;
1795	}
1796
1797	dev->pm_cap = pm;
1798	dev->d3_delay = PCI_PM_D3_WAIT;
 
 
1799
1800	dev->d1_support = false;
1801	dev->d2_support = false;
1802	if (!pci_no_d1d2(dev)) {
1803		if (pmc & PCI_PM_CAP_D1)
1804			dev->d1_support = true;
1805		if (pmc & PCI_PM_CAP_D2)
1806			dev->d2_support = true;
1807
1808		if (dev->d1_support || dev->d2_support)
1809			dev_printk(KERN_DEBUG, &dev->dev, "supports%s%s\n",
1810				   dev->d1_support ? " D1" : "",
1811				   dev->d2_support ? " D2" : "");
1812	}
1813
1814	pmc &= PCI_PM_CAP_PME_MASK;
1815	if (pmc) {
1816		dev_printk(KERN_DEBUG, &dev->dev,
1817			 "PME# supported from%s%s%s%s%s\n",
1818			 (pmc & PCI_PM_CAP_PME_D0) ? " D0" : "",
1819			 (pmc & PCI_PM_CAP_PME_D1) ? " D1" : "",
1820			 (pmc & PCI_PM_CAP_PME_D2) ? " D2" : "",
1821			 (pmc & PCI_PM_CAP_PME_D3) ? " D3hot" : "",
1822			 (pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : "");
1823		dev->pme_support = pmc >> PCI_PM_CAP_PME_SHIFT;
 
1824		/*
1825		 * Make device's PM flags reflect the wake-up capability, but
1826		 * let the user space enable it to wake up the system as needed.
1827		 */
1828		device_set_wakeup_capable(&dev->dev, true);
1829		/* Disable the PME# generation functionality */
1830		pci_pme_active(dev, false);
1831	} else {
1832		dev->pme_support = 0;
1833	}
1834}
1835
1836/**
1837 * platform_pci_wakeup_init - init platform wakeup if present
1838 * @dev: PCI device
1839 *
1840 * Some devices don't have PCI PM caps but can still generate wakeup
1841 * events through platform methods (like ACPI events).  If @dev supports
1842 * platform wakeup events, set the device flag to indicate as much.  This
1843 * may be redundant if the device also supports PCI PM caps, but double
1844 * initialization should be safe in that case.
1845 */
1846void platform_pci_wakeup_init(struct pci_dev *dev)
1847{
1848	if (!platform_pci_can_wakeup(dev))
1849		return;
1850
1851	device_set_wakeup_capable(&dev->dev, true);
1852	platform_pci_sleep_wake(dev, false);
1853}
1854
1855/**
1856 * pci_add_save_buffer - allocate buffer for saving given capability registers
 
1857 * @dev: the PCI device
1858 * @cap: the capability to allocate the buffer for
 
1859 * @size: requested size of the buffer
1860 */
1861static int pci_add_cap_save_buffer(
1862	struct pci_dev *dev, char cap, unsigned int size)
1863{
1864	int pos;
1865	struct pci_cap_saved_state *save_state;
1866
1867	pos = pci_find_capability(dev, cap);
 
 
 
 
1868	if (pos <= 0)
1869		return 0;
1870
1871	save_state = kzalloc(sizeof(*save_state) + size, GFP_KERNEL);
1872	if (!save_state)
1873		return -ENOMEM;
1874
1875	save_state->cap.cap_nr = cap;
 
1876	save_state->cap.size = size;
1877	pci_add_saved_cap(dev, save_state);
1878
1879	return 0;
1880}
1881
 
 
 
 
 
 
 
 
 
 
1882/**
1883 * pci_allocate_cap_save_buffers - allocate buffers for saving capabilities
1884 * @dev: the PCI device
1885 */
1886void pci_allocate_cap_save_buffers(struct pci_dev *dev)
1887{
1888	int error;
1889
1890	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_EXP,
1891					PCI_EXP_SAVE_REGS * sizeof(u16));
1892	if (error)
1893		dev_err(&dev->dev,
1894			"unable to preallocate PCI Express save buffer\n");
1895
1896	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_PCIX, sizeof(u16));
1897	if (error)
1898		dev_err(&dev->dev,
1899			"unable to preallocate PCI-X save buffer\n");
 
 
 
 
 
 
 
 
 
 
 
1900}
1901
1902/**
1903 * pci_enable_ari - enable ARI forwarding if hardware support it
1904 * @dev: the PCI device
 
 
 
1905 */
1906void pci_enable_ari(struct pci_dev *dev)
1907{
1908	int pos;
1909	u32 cap;
1910	u16 flags, ctrl;
1911	struct pci_dev *bridge;
1912
1913	if (!pci_is_pcie(dev) || dev->devfn)
1914		return;
1915
1916	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1917	if (!pos)
1918		return;
1919
1920	bridge = dev->bus->self;
1921	if (!bridge || !pci_is_pcie(bridge))
1922		return;
1923
1924	pos = pci_pcie_cap(bridge);
1925	if (!pos)
1926		return;
1927
1928	/* ARI is a PCIe v2 feature */
1929	pci_read_config_word(bridge, pos + PCI_EXP_FLAGS, &flags);
1930	if ((flags & PCI_EXP_FLAGS_VERS) < 2)
1931		return;
1932
1933	pci_read_config_dword(bridge, pos + PCI_EXP_DEVCAP2, &cap);
1934	if (!(cap & PCI_EXP_DEVCAP2_ARI))
1935		return;
1936
1937	pci_read_config_word(bridge, pos + PCI_EXP_DEVCTL2, &ctrl);
1938	ctrl |= PCI_EXP_DEVCTL2_ARI;
1939	pci_write_config_word(bridge, pos + PCI_EXP_DEVCTL2, ctrl);
1940
1941	bridge->ari_enabled = 1;
 
 
 
 
1942}
1943
 
 
1944/**
1945 * pci_enable_ido - enable ID-based ordering on a device
1946 * @dev: the PCI device
1947 * @type: which types of IDO to enable
1948 *
1949 * Enable ID-based ordering on @dev.  @type can contain the bits
1950 * %PCI_EXP_IDO_REQUEST and/or %PCI_EXP_IDO_COMPLETION to indicate
1951 * which types of transactions are allowed to be re-ordered.
1952 */
1953void pci_enable_ido(struct pci_dev *dev, unsigned long type)
1954{
1955	int pos;
1956	u16 ctrl;
1957
1958	pos = pci_pcie_cap(dev);
1959	if (!pos)
1960		return;
1961
1962	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
1963	if (type & PCI_EXP_IDO_REQUEST)
1964		ctrl |= PCI_EXP_IDO_REQ_EN;
1965	if (type & PCI_EXP_IDO_COMPLETION)
1966		ctrl |= PCI_EXP_IDO_CMP_EN;
1967	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
1968}
1969EXPORT_SYMBOL(pci_enable_ido);
1970
1971/**
1972 * pci_disable_ido - disable ID-based ordering on a device
1973 * @dev: the PCI device
1974 * @type: which types of IDO to disable
1975 */
1976void pci_disable_ido(struct pci_dev *dev, unsigned long type)
1977{
1978	int pos;
 
1979	u16 ctrl;
1980
1981	if (!pci_is_pcie(dev))
1982		return;
1983
1984	pos = pci_pcie_cap(dev);
1985	if (!pos)
1986		return;
1987
1988	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
1989	if (type & PCI_EXP_IDO_REQUEST)
1990		ctrl &= ~PCI_EXP_IDO_REQ_EN;
1991	if (type & PCI_EXP_IDO_COMPLETION)
1992		ctrl &= ~PCI_EXP_IDO_CMP_EN;
1993	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
1994}
1995EXPORT_SYMBOL(pci_disable_ido);
1996
1997/**
1998 * pci_enable_obff - enable optimized buffer flush/fill
1999 * @dev: PCI device
2000 * @type: type of signaling to use
2001 *
2002 * Try to enable @type OBFF signaling on @dev.  It will try using WAKE#
2003 * signaling if possible, falling back to message signaling only if
2004 * WAKE# isn't supported.  @type should indicate whether the PCIe link
2005 * be brought out of L0s or L1 to send the message.  It should be either
2006 * %PCI_EXP_OBFF_SIGNAL_ALWAYS or %PCI_OBFF_SIGNAL_L0.
2007 *
2008 * If your device can benefit from receiving all messages, even at the
2009 * power cost of bringing the link back up from a low power state, use
2010 * %PCI_EXP_OBFF_SIGNAL_ALWAYS.  Otherwise, use %PCI_OBFF_SIGNAL_L0 (the
2011 * preferred type).
2012 *
2013 * RETURNS:
2014 * Zero on success, appropriate error number on failure.
2015 */
2016int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type type)
2017{
2018	int pos;
2019	u32 cap;
2020	u16 ctrl;
2021	int ret;
2022
2023	if (!pci_is_pcie(dev))
2024		return -ENOTSUPP;
2025
2026	pos = pci_pcie_cap(dev);
2027	if (!pos)
2028		return -ENOTSUPP;
2029
2030	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap);
2031	if (!(cap & PCI_EXP_OBFF_MASK))
2032		return -ENOTSUPP; /* no OBFF support at all */
2033
2034	/* Make sure the topology supports OBFF as well */
2035	if (dev->bus) {
2036		ret = pci_enable_obff(dev->bus->self, type);
2037		if (ret)
2038			return ret;
2039	}
2040
2041	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2042	if (cap & PCI_EXP_OBFF_WAKE)
2043		ctrl |= PCI_EXP_OBFF_WAKE_EN;
2044	else {
2045		switch (type) {
2046		case PCI_EXP_OBFF_SIGNAL_L0:
2047			if (!(ctrl & PCI_EXP_OBFF_WAKE_EN))
2048				ctrl |= PCI_EXP_OBFF_MSGA_EN;
2049			break;
2050		case PCI_EXP_OBFF_SIGNAL_ALWAYS:
2051			ctrl &= ~PCI_EXP_OBFF_WAKE_EN;
2052			ctrl |= PCI_EXP_OBFF_MSGB_EN;
2053			break;
2054		default:
2055			WARN(1, "bad OBFF signal type\n");
2056			return -ENOTSUPP;
2057		}
2058	}
2059	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2060
2061	return 0;
2062}
2063EXPORT_SYMBOL(pci_enable_obff);
2064
2065/**
2066 * pci_disable_obff - disable optimized buffer flush/fill
2067 * @dev: PCI device
2068 *
2069 * Disable OBFF on @dev.
2070 */
2071void pci_disable_obff(struct pci_dev *dev)
2072{
2073	int pos;
2074	u16 ctrl;
2075
2076	if (!pci_is_pcie(dev))
2077		return;
2078
2079	pos = pci_pcie_cap(dev);
2080	if (!pos)
2081		return;
2082
2083	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2084	ctrl &= ~PCI_EXP_OBFF_WAKE_EN;
2085	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2086}
2087EXPORT_SYMBOL(pci_disable_obff);
2088
2089/**
2090 * pci_ltr_supported - check whether a device supports LTR
2091 * @dev: PCI device
2092 *
2093 * RETURNS:
2094 * True if @dev supports latency tolerance reporting, false otherwise.
2095 */
2096bool pci_ltr_supported(struct pci_dev *dev)
2097{
2098	int pos;
2099	u32 cap;
2100
2101	if (!pci_is_pcie(dev))
2102		return false;
2103
2104	pos = pci_pcie_cap(dev);
2105	if (!pos)
2106		return false;
2107
2108	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap);
 
 
 
 
 
 
2109
2110	return cap & PCI_EXP_DEVCAP2_LTR;
 
2111}
2112EXPORT_SYMBOL(pci_ltr_supported);
2113
2114/**
2115 * pci_enable_ltr - enable latency tolerance reporting
2116 * @dev: PCI device
 
2117 *
2118 * Enable LTR on @dev if possible, which means enabling it first on
2119 * upstream ports.
2120 *
2121 * RETURNS:
2122 * Zero on success, errno on failure.
 
 
 
 
 
2123 */
2124int pci_enable_ltr(struct pci_dev *dev)
2125{
2126	int pos;
2127	u16 ctrl;
2128	int ret;
2129
2130	if (!pci_ltr_supported(dev))
2131		return -ENOTSUPP;
 
2132
2133	pos = pci_pcie_cap(dev);
2134	if (!pos)
2135		return -ENOTSUPP;
 
 
 
 
2136
2137	/* Only primary function can enable/disable LTR */
2138	if (PCI_FUNC(dev->devfn) != 0)
2139		return -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2140
2141	/* Enable upstream ports first */
2142	if (dev->bus) {
2143		ret = pci_enable_ltr(dev->bus->self);
2144		if (ret)
2145			return ret;
2146	}
2147
2148	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2149	ctrl |= PCI_EXP_LTR_EN;
2150	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2151
2152	return 0;
2153}
2154EXPORT_SYMBOL(pci_enable_ltr);
2155
2156/**
2157 * pci_disable_ltr - disable latency tolerance reporting
2158 * @dev: PCI device
2159 */
2160void pci_disable_ltr(struct pci_dev *dev)
2161{
2162	int pos;
2163	u16 ctrl;
2164
2165	if (!pci_ltr_supported(dev))
2166		return;
2167
2168	pos = pci_pcie_cap(dev);
2169	if (!pos)
2170		return;
2171
2172	/* Only primary function can enable/disable LTR */
2173	if (PCI_FUNC(dev->devfn) != 0)
2174		return;
2175
2176	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2177	ctrl &= ~PCI_EXP_LTR_EN;
2178	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2179}
2180EXPORT_SYMBOL(pci_disable_ltr);
2181
2182static int __pci_ltr_scale(int *val)
2183{
2184	int scale = 0;
2185
2186	while (*val > 1023) {
2187		*val = (*val + 31) / 32;
2188		scale++;
2189	}
2190	return scale;
2191}
2192
2193/**
2194 * pci_set_ltr - set LTR latency values
2195 * @dev: PCI device
2196 * @snoop_lat_ns: snoop latency in nanoseconds
2197 * @nosnoop_lat_ns: nosnoop latency in nanoseconds
2198 *
2199 * Figure out the scale and set the LTR values accordingly.
 
2200 */
2201int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns)
 
2202{
2203	int pos, ret, snoop_scale, nosnoop_scale;
2204	u16 val;
2205
2206	if (!pci_ltr_supported(dev))
2207		return -ENOTSUPP;
2208
2209	snoop_scale = __pci_ltr_scale(&snoop_lat_ns);
2210	nosnoop_scale = __pci_ltr_scale(&nosnoop_lat_ns);
2211
2212	if (snoop_lat_ns > PCI_LTR_VALUE_MASK ||
2213	    nosnoop_lat_ns > PCI_LTR_VALUE_MASK)
2214		return -EINVAL;
2215
2216	if ((snoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)) ||
2217	    (nosnoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)))
2218		return -EINVAL;
2219
2220	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_LTR);
2221	if (!pos)
2222		return -ENOTSUPP;
2223
2224	val = (snoop_scale << PCI_LTR_SCALE_SHIFT) | snoop_lat_ns;
2225	ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_SNOOP_LAT, val);
2226	if (ret != 4)
2227		return -EIO;
2228
2229	val = (nosnoop_scale << PCI_LTR_SCALE_SHIFT) | nosnoop_lat_ns;
2230	ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_NOSNOOP_LAT, val);
2231	if (ret != 4)
2232		return -EIO;
2233
2234	return 0;
2235}
2236EXPORT_SYMBOL(pci_set_ltr);
2237
2238static int pci_acs_enable;
2239
2240/**
2241 * pci_request_acs - ask for ACS to be enabled if supported
2242 */
2243void pci_request_acs(void)
2244{
2245	pci_acs_enable = 1;
2246}
2247
2248/**
2249 * pci_enable_acs - enable ACS if hardware support it
2250 * @dev: the PCI device
2251 */
2252void pci_enable_acs(struct pci_dev *dev)
2253{
2254	int pos;
2255	u16 cap;
2256	u16 ctrl;
2257
2258	if (!pci_acs_enable)
2259		return;
2260
2261	if (!pci_is_pcie(dev))
2262		return;
2263
2264	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS);
2265	if (!pos)
2266		return;
2267
2268	pci_read_config_word(dev, pos + PCI_ACS_CAP, &cap);
2269	pci_read_config_word(dev, pos + PCI_ACS_CTRL, &ctrl);
2270
2271	/* Source Validation */
2272	ctrl |= (cap & PCI_ACS_SV);
2273
2274	/* P2P Request Redirect */
2275	ctrl |= (cap & PCI_ACS_RR);
2276
2277	/* P2P Completion Redirect */
2278	ctrl |= (cap & PCI_ACS_CR);
2279
2280	/* Upstream Forwarding */
2281	ctrl |= (cap & PCI_ACS_UF);
2282
2283	pci_write_config_word(dev, pos + PCI_ACS_CTRL, ctrl);
2284}
2285
2286/**
2287 * pci_swizzle_interrupt_pin - swizzle INTx for device behind bridge
2288 * @dev: the PCI device
2289 * @pin: the INTx pin (1=INTA, 2=INTB, 3=INTD, 4=INTD)
2290 *
2291 * Perform INTx swizzling for a device behind one level of bridge.  This is
2292 * required by section 9.1 of the PCI-to-PCI bridge specification for devices
2293 * behind bridges on add-in cards.  For devices with ARI enabled, the slot
2294 * number is always 0 (see the Implementation Note in section 2.2.8.1 of
2295 * the PCI Express Base Specification, Revision 2.1)
2296 */
2297u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin)
2298{
2299	int slot;
2300
2301	if (pci_ari_enabled(dev->bus))
2302		slot = 0;
2303	else
2304		slot = PCI_SLOT(dev->devfn);
2305
2306	return (((pin - 1) + slot) % 4) + 1;
2307}
2308
2309int
2310pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
2311{
2312	u8 pin;
2313
2314	pin = dev->pin;
2315	if (!pin)
2316		return -1;
2317
2318	while (!pci_is_root_bus(dev->bus)) {
2319		pin = pci_swizzle_interrupt_pin(dev, pin);
2320		dev = dev->bus->self;
2321	}
2322	*bridge = dev;
2323	return pin;
2324}
2325
2326/**
2327 * pci_common_swizzle - swizzle INTx all the way to root bridge
2328 * @dev: the PCI device
2329 * @pinp: pointer to the INTx pin value (1=INTA, 2=INTB, 3=INTD, 4=INTD)
2330 *
2331 * Perform INTx swizzling for a device.  This traverses through all PCI-to-PCI
2332 * bridges all the way up to a PCI root bus.
2333 */
2334u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp)
2335{
2336	u8 pin = *pinp;
2337
2338	while (!pci_is_root_bus(dev->bus)) {
2339		pin = pci_swizzle_interrupt_pin(dev, pin);
2340		dev = dev->bus->self;
2341	}
2342	*pinp = pin;
2343	return PCI_SLOT(dev->devfn);
2344}
2345
2346/**
2347 *	pci_release_region - Release a PCI bar
2348 *	@pdev: PCI device whose resources were previously reserved by pci_request_region
2349 *	@bar: BAR to release
2350 *
2351 *	Releases the PCI I/O and memory resources previously reserved by a
2352 *	successful call to pci_request_region.  Call this function only
2353 *	after all use of the PCI regions has ceased.
2354 */
2355void pci_release_region(struct pci_dev *pdev, int bar)
2356{
2357	struct pci_devres *dr;
2358
2359	if (pci_resource_len(pdev, bar) == 0)
2360		return;
2361	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
2362		release_region(pci_resource_start(pdev, bar),
2363				pci_resource_len(pdev, bar));
2364	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
2365		release_mem_region(pci_resource_start(pdev, bar),
2366				pci_resource_len(pdev, bar));
2367
2368	dr = find_pci_dr(pdev);
2369	if (dr)
2370		dr->region_mask &= ~(1 << bar);
2371}
2372
2373/**
2374 *	__pci_request_region - Reserved PCI I/O and memory resource
2375 *	@pdev: PCI device whose resources are to be reserved
2376 *	@bar: BAR to be reserved
2377 *	@res_name: Name to be associated with resource.
2378 *	@exclusive: whether the region access is exclusive or not
2379 *
2380 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2381 *	being reserved by owner @res_name.  Do not access any
2382 *	address inside the PCI regions unless this call returns
2383 *	successfully.
2384 *
2385 *	If @exclusive is set, then the region is marked so that userspace
2386 *	is explicitly not allowed to map the resource via /dev/mem or
2387 * 	sysfs MMIO access.
2388 *
2389 *	Returns 0 on success, or %EBUSY on error.  A warning
2390 *	message is also printed on failure.
2391 */
2392static int __pci_request_region(struct pci_dev *pdev, int bar, const char *res_name,
2393									int exclusive)
2394{
2395	struct pci_devres *dr;
2396
2397	if (pci_resource_len(pdev, bar) == 0)
2398		return 0;
2399		
2400	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
2401		if (!request_region(pci_resource_start(pdev, bar),
2402			    pci_resource_len(pdev, bar), res_name))
2403			goto err_out;
2404	}
2405	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
2406		if (!__request_mem_region(pci_resource_start(pdev, bar),
2407					pci_resource_len(pdev, bar), res_name,
2408					exclusive))
2409			goto err_out;
2410	}
2411
2412	dr = find_pci_dr(pdev);
2413	if (dr)
2414		dr->region_mask |= 1 << bar;
2415
2416	return 0;
2417
2418err_out:
2419	dev_warn(&pdev->dev, "BAR %d: can't reserve %pR\n", bar,
2420		 &pdev->resource[bar]);
2421	return -EBUSY;
2422}
2423
2424/**
2425 *	pci_request_region - Reserve PCI I/O and memory resource
2426 *	@pdev: PCI device whose resources are to be reserved
2427 *	@bar: BAR to be reserved
2428 *	@res_name: Name to be associated with resource
2429 *
2430 *	Mark the PCI region associated with PCI device @pdev BAR @bar as
2431 *	being reserved by owner @res_name.  Do not access any
2432 *	address inside the PCI regions unless this call returns
2433 *	successfully.
2434 *
2435 *	Returns 0 on success, or %EBUSY on error.  A warning
2436 *	message is also printed on failure.
2437 */
2438int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
2439{
2440	return __pci_request_region(pdev, bar, res_name, 0);
2441}
2442
2443/**
2444 *	pci_request_region_exclusive - Reserved PCI I/O and memory resource
2445 *	@pdev: PCI device whose resources are to be reserved
2446 *	@bar: BAR to be reserved
2447 *	@res_name: Name to be associated with resource.
2448 *
2449 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2450 *	being reserved by owner @res_name.  Do not access any
2451 *	address inside the PCI regions unless this call returns
2452 *	successfully.
2453 *
2454 *	Returns 0 on success, or %EBUSY on error.  A warning
2455 *	message is also printed on failure.
2456 *
2457 *	The key difference that _exclusive makes it that userspace is
2458 *	explicitly not allowed to map the resource via /dev/mem or
2459 * 	sysfs.
2460 */
2461int pci_request_region_exclusive(struct pci_dev *pdev, int bar, const char *res_name)
2462{
2463	return __pci_request_region(pdev, bar, res_name, IORESOURCE_EXCLUSIVE);
2464}
2465/**
2466 * pci_release_selected_regions - Release selected PCI I/O and memory resources
2467 * @pdev: PCI device whose resources were previously reserved
2468 * @bars: Bitmask of BARs to be released
2469 *
2470 * Release selected PCI I/O and memory resources previously reserved.
2471 * Call this function only after all use of the PCI regions has ceased.
2472 */
2473void pci_release_selected_regions(struct pci_dev *pdev, int bars)
2474{
2475	int i;
2476
2477	for (i = 0; i < 6; i++)
2478		if (bars & (1 << i))
2479			pci_release_region(pdev, i);
2480}
2481
2482int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
2483				 const char *res_name, int excl)
2484{
2485	int i;
2486
2487	for (i = 0; i < 6; i++)
2488		if (bars & (1 << i))
2489			if (__pci_request_region(pdev, i, res_name, excl))
2490				goto err_out;
2491	return 0;
2492
2493err_out:
2494	while(--i >= 0)
2495		if (bars & (1 << i))
2496			pci_release_region(pdev, i);
2497
2498	return -EBUSY;
2499}
2500
2501
2502/**
2503 * pci_request_selected_regions - Reserve selected PCI I/O and memory resources
2504 * @pdev: PCI device whose resources are to be reserved
2505 * @bars: Bitmask of BARs to be requested
2506 * @res_name: Name to be associated with resource
2507 */
2508int pci_request_selected_regions(struct pci_dev *pdev, int bars,
2509				 const char *res_name)
2510{
2511	return __pci_request_selected_regions(pdev, bars, res_name, 0);
2512}
2513
2514int pci_request_selected_regions_exclusive(struct pci_dev *pdev,
2515				 int bars, const char *res_name)
2516{
2517	return __pci_request_selected_regions(pdev, bars, res_name,
2518			IORESOURCE_EXCLUSIVE);
2519}
2520
2521/**
2522 *	pci_release_regions - Release reserved PCI I/O and memory resources
2523 *	@pdev: PCI device whose resources were previously reserved by pci_request_regions
2524 *
2525 *	Releases all PCI I/O and memory resources previously reserved by a
2526 *	successful call to pci_request_regions.  Call this function only
2527 *	after all use of the PCI regions has ceased.
2528 */
2529
2530void pci_release_regions(struct pci_dev *pdev)
2531{
2532	pci_release_selected_regions(pdev, (1 << 6) - 1);
2533}
2534
2535/**
2536 *	pci_request_regions - Reserved PCI I/O and memory resources
2537 *	@pdev: PCI device whose resources are to be reserved
2538 *	@res_name: Name to be associated with resource.
2539 *
2540 *	Mark all PCI regions associated with PCI device @pdev as
2541 *	being reserved by owner @res_name.  Do not access any
2542 *	address inside the PCI regions unless this call returns
2543 *	successfully.
2544 *
2545 *	Returns 0 on success, or %EBUSY on error.  A warning
2546 *	message is also printed on failure.
2547 */
2548int pci_request_regions(struct pci_dev *pdev, const char *res_name)
2549{
2550	return pci_request_selected_regions(pdev, ((1 << 6) - 1), res_name);
2551}
2552
2553/**
2554 *	pci_request_regions_exclusive - Reserved PCI I/O and memory resources
2555 *	@pdev: PCI device whose resources are to be reserved
2556 *	@res_name: Name to be associated with resource.
2557 *
2558 *	Mark all PCI regions associated with PCI device @pdev as
2559 *	being reserved by owner @res_name.  Do not access any
2560 *	address inside the PCI regions unless this call returns
2561 *	successfully.
2562 *
2563 *	pci_request_regions_exclusive() will mark the region so that
2564 * 	/dev/mem and the sysfs MMIO access will not be allowed.
2565 *
2566 *	Returns 0 on success, or %EBUSY on error.  A warning
2567 *	message is also printed on failure.
2568 */
2569int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
2570{
2571	return pci_request_selected_regions_exclusive(pdev,
2572					((1 << 6) - 1), res_name);
2573}
2574
2575static void __pci_set_master(struct pci_dev *dev, bool enable)
2576{
2577	u16 old_cmd, cmd;
2578
2579	pci_read_config_word(dev, PCI_COMMAND, &old_cmd);
2580	if (enable)
2581		cmd = old_cmd | PCI_COMMAND_MASTER;
2582	else
2583		cmd = old_cmd & ~PCI_COMMAND_MASTER;
2584	if (cmd != old_cmd) {
2585		dev_dbg(&dev->dev, "%s bus mastering\n",
2586			enable ? "enabling" : "disabling");
2587		pci_write_config_word(dev, PCI_COMMAND, cmd);
2588	}
2589	dev->is_busmaster = enable;
2590}
2591
2592/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2593 * pci_set_master - enables bus-mastering for device dev
2594 * @dev: the PCI device to enable
2595 *
2596 * Enables bus-mastering on the device and calls pcibios_set_master()
2597 * to do the needed arch specific settings.
2598 */
2599void pci_set_master(struct pci_dev *dev)
2600{
2601	__pci_set_master(dev, true);
2602	pcibios_set_master(dev);
2603}
2604
2605/**
2606 * pci_clear_master - disables bus-mastering for device dev
2607 * @dev: the PCI device to disable
2608 */
2609void pci_clear_master(struct pci_dev *dev)
2610{
2611	__pci_set_master(dev, false);
2612}
2613
2614/**
2615 * pci_set_cacheline_size - ensure the CACHE_LINE_SIZE register is programmed
2616 * @dev: the PCI device for which MWI is to be enabled
2617 *
2618 * Helper function for pci_set_mwi.
2619 * Originally copied from drivers/net/acenic.c.
2620 * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>.
2621 *
2622 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2623 */
2624int pci_set_cacheline_size(struct pci_dev *dev)
2625{
2626	u8 cacheline_size;
2627
2628	if (!pci_cache_line_size)
2629		return -EINVAL;
2630
2631	/* Validate current setting: the PCI_CACHE_LINE_SIZE must be
2632	   equal to or multiple of the right value. */
2633	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2634	if (cacheline_size >= pci_cache_line_size &&
2635	    (cacheline_size % pci_cache_line_size) == 0)
2636		return 0;
2637
2638	/* Write the correct value. */
2639	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size);
2640	/* Read it back. */
2641	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2642	if (cacheline_size == pci_cache_line_size)
2643		return 0;
2644
2645	dev_printk(KERN_DEBUG, &dev->dev, "cache line size of %d is not "
2646		   "supported\n", pci_cache_line_size << 2);
2647
2648	return -EINVAL;
2649}
2650EXPORT_SYMBOL_GPL(pci_set_cacheline_size);
2651
2652#ifdef PCI_DISABLE_MWI
2653int pci_set_mwi(struct pci_dev *dev)
2654{
2655	return 0;
2656}
2657
2658int pci_try_set_mwi(struct pci_dev *dev)
2659{
2660	return 0;
2661}
2662
2663void pci_clear_mwi(struct pci_dev *dev)
2664{
2665}
2666
2667#else
2668
2669/**
2670 * pci_set_mwi - enables memory-write-invalidate PCI transaction
2671 * @dev: the PCI device for which MWI is enabled
2672 *
2673 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2674 *
2675 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2676 */
2677int
2678pci_set_mwi(struct pci_dev *dev)
2679{
2680	int rc;
2681	u16 cmd;
2682
2683	rc = pci_set_cacheline_size(dev);
2684	if (rc)
2685		return rc;
2686
2687	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2688	if (! (cmd & PCI_COMMAND_INVALIDATE)) {
2689		dev_dbg(&dev->dev, "enabling Mem-Wr-Inval\n");
2690		cmd |= PCI_COMMAND_INVALIDATE;
2691		pci_write_config_word(dev, PCI_COMMAND, cmd);
2692	}
2693	
2694	return 0;
2695}
2696
2697/**
2698 * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
2699 * @dev: the PCI device for which MWI is enabled
2700 *
2701 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2702 * Callers are not required to check the return value.
2703 *
2704 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2705 */
2706int pci_try_set_mwi(struct pci_dev *dev)
2707{
2708	int rc = pci_set_mwi(dev);
2709	return rc;
2710}
2711
2712/**
2713 * pci_clear_mwi - disables Memory-Write-Invalidate for device dev
2714 * @dev: the PCI device to disable
2715 *
2716 * Disables PCI Memory-Write-Invalidate transaction on the device
2717 */
2718void
2719pci_clear_mwi(struct pci_dev *dev)
2720{
2721	u16 cmd;
2722
2723	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2724	if (cmd & PCI_COMMAND_INVALIDATE) {
2725		cmd &= ~PCI_COMMAND_INVALIDATE;
2726		pci_write_config_word(dev, PCI_COMMAND, cmd);
2727	}
2728}
2729#endif /* ! PCI_DISABLE_MWI */
2730
2731/**
2732 * pci_intx - enables/disables PCI INTx for device dev
2733 * @pdev: the PCI device to operate on
2734 * @enable: boolean: whether to enable or disable PCI INTx
2735 *
2736 * Enables/disables PCI INTx for device dev
2737 */
2738void
2739pci_intx(struct pci_dev *pdev, int enable)
2740{
2741	u16 pci_command, new;
2742
2743	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
2744
2745	if (enable) {
2746		new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
2747	} else {
2748		new = pci_command | PCI_COMMAND_INTX_DISABLE;
2749	}
2750
2751	if (new != pci_command) {
2752		struct pci_devres *dr;
2753
2754		pci_write_config_word(pdev, PCI_COMMAND, new);
2755
2756		dr = find_pci_dr(pdev);
2757		if (dr && !dr->restore_intx) {
2758			dr->restore_intx = 1;
2759			dr->orig_intx = !enable;
2760		}
2761	}
2762}
2763
2764/**
2765 * pci_msi_off - disables any msi or msix capabilities
2766 * @dev: the PCI device to operate on
2767 *
2768 * If you want to use msi see pci_enable_msi and friends.
2769 * This is a lower level primitive that allows us to disable
2770 * msi operation at the device level.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2771 */
2772void pci_msi_off(struct pci_dev *dev)
2773{
2774	int pos;
2775	u16 control;
2776
 
 
 
 
 
2777	pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
2778	if (pos) {
2779		pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control);
2780		control &= ~PCI_MSI_FLAGS_ENABLE;
2781		pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control);
2782	}
2783	pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
2784	if (pos) {
2785		pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control);
2786		control &= ~PCI_MSIX_FLAGS_ENABLE;
2787		pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control);
2788	}
2789}
2790EXPORT_SYMBOL_GPL(pci_msi_off);
2791
2792int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size)
2793{
2794	return dma_set_max_seg_size(&dev->dev, size);
2795}
2796EXPORT_SYMBOL(pci_set_dma_max_seg_size);
2797
2798int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask)
2799{
2800	return dma_set_seg_boundary(&dev->dev, mask);
2801}
2802EXPORT_SYMBOL(pci_set_dma_seg_boundary);
2803
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2804static int pcie_flr(struct pci_dev *dev, int probe)
2805{
2806	int i;
2807	int pos;
2808	u32 cap;
2809	u16 status, control;
2810
2811	pos = pci_pcie_cap(dev);
2812	if (!pos)
2813		return -ENOTTY;
2814
2815	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP, &cap);
2816	if (!(cap & PCI_EXP_DEVCAP_FLR))
2817		return -ENOTTY;
2818
2819	if (probe)
2820		return 0;
2821
2822	/* Wait for Transaction Pending bit clean */
2823	for (i = 0; i < 4; i++) {
2824		if (i)
2825			msleep((1 << (i - 1)) * 100);
2826
2827		pci_read_config_word(dev, pos + PCI_EXP_DEVSTA, &status);
2828		if (!(status & PCI_EXP_DEVSTA_TRPND))
2829			goto clear;
2830	}
2831
2832	dev_err(&dev->dev, "transaction is not cleared; "
2833			"proceeding with reset anyway\n");
2834
2835clear:
2836	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &control);
2837	control |= PCI_EXP_DEVCTL_BCR_FLR;
2838	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, control);
2839
2840	msleep(100);
2841
2842	return 0;
2843}
2844
2845static int pci_af_flr(struct pci_dev *dev, int probe)
2846{
2847	int i;
2848	int pos;
2849	u8 cap;
2850	u8 status;
2851
2852	pos = pci_find_capability(dev, PCI_CAP_ID_AF);
2853	if (!pos)
2854		return -ENOTTY;
2855
2856	pci_read_config_byte(dev, pos + PCI_AF_CAP, &cap);
2857	if (!(cap & PCI_AF_CAP_TP) || !(cap & PCI_AF_CAP_FLR))
2858		return -ENOTTY;
2859
2860	if (probe)
2861		return 0;
2862
2863	/* Wait for Transaction Pending bit clean */
2864	for (i = 0; i < 4; i++) {
2865		if (i)
2866			msleep((1 << (i - 1)) * 100);
2867
2868		pci_read_config_byte(dev, pos + PCI_AF_STATUS, &status);
2869		if (!(status & PCI_AF_STATUS_TP))
2870			goto clear;
2871	}
2872
2873	dev_err(&dev->dev, "transaction is not cleared; "
2874			"proceeding with reset anyway\n");
2875
2876clear:
2877	pci_write_config_byte(dev, pos + PCI_AF_CTRL, PCI_AF_CTRL_FLR);
2878	msleep(100);
2879
2880	return 0;
2881}
2882
2883/**
2884 * pci_pm_reset - Put device into PCI_D3 and back into PCI_D0.
2885 * @dev: Device to reset.
2886 * @probe: If set, only check if the device can be reset this way.
2887 *
2888 * If @dev supports native PCI PM and its PCI_PM_CTRL_NO_SOFT_RESET flag is
2889 * unset, it will be reinitialized internally when going from PCI_D3hot to
2890 * PCI_D0.  If that's the case and the device is not in a low-power state
2891 * already, force it into PCI_D3hot and back to PCI_D0, causing it to be reset.
2892 *
2893 * NOTE: This causes the caller to sleep for twice the device power transition
2894 * cooldown period, which for the D0->D3hot and D3hot->D0 transitions is 10 ms
2895 * by devault (i.e. unless the @dev's d3_delay field has a different value).
2896 * Moreover, only devices in D0 can be reset by this function.
2897 */
2898static int pci_pm_reset(struct pci_dev *dev, int probe)
2899{
2900	u16 csr;
2901
2902	if (!dev->pm_cap)
2903		return -ENOTTY;
2904
2905	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &csr);
2906	if (csr & PCI_PM_CTRL_NO_SOFT_RESET)
2907		return -ENOTTY;
2908
2909	if (probe)
2910		return 0;
2911
2912	if (dev->current_state != PCI_D0)
2913		return -EINVAL;
2914
2915	csr &= ~PCI_PM_CTRL_STATE_MASK;
2916	csr |= PCI_D3hot;
2917	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
2918	pci_dev_d3_sleep(dev);
2919
2920	csr &= ~PCI_PM_CTRL_STATE_MASK;
2921	csr |= PCI_D0;
2922	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
2923	pci_dev_d3_sleep(dev);
2924
2925	return 0;
2926}
2927
2928static int pci_parent_bus_reset(struct pci_dev *dev, int probe)
 
 
 
 
 
 
 
2929{
2930	u16 ctrl;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2931	struct pci_dev *pdev;
2932
2933	if (pci_is_root_bus(dev->bus) || dev->subordinate || !dev->bus->self)
2934		return -ENOTTY;
2935
2936	list_for_each_entry(pdev, &dev->bus->devices, bus_list)
2937		if (pdev != dev)
2938			return -ENOTTY;
2939
2940	if (probe)
2941		return 0;
2942
2943	pci_read_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, &ctrl);
2944	ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
2945	pci_write_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, ctrl);
2946	msleep(100);
2947
2948	ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
2949	pci_write_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, ctrl);
2950	msleep(100);
2951
2952	return 0;
2953}
2954
2955static int pci_dev_reset(struct pci_dev *dev, int probe)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2956{
2957	int rc;
2958
2959	might_sleep();
2960
2961	if (!probe) {
2962		pci_block_user_cfg_access(dev);
2963		/* block PM suspend, driver probe, etc. */
2964		device_lock(&dev->dev);
2965	}
2966
2967	rc = pci_dev_specific_reset(dev, probe);
2968	if (rc != -ENOTTY)
2969		goto done;
2970
2971	rc = pcie_flr(dev, probe);
2972	if (rc != -ENOTTY)
2973		goto done;
2974
2975	rc = pci_af_flr(dev, probe);
2976	if (rc != -ENOTTY)
2977		goto done;
2978
2979	rc = pci_pm_reset(dev, probe);
2980	if (rc != -ENOTTY)
2981		goto done;
2982
 
 
 
 
2983	rc = pci_parent_bus_reset(dev, probe);
2984done:
2985	if (!probe) {
2986		device_unlock(&dev->dev);
2987		pci_unblock_user_cfg_access(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2988	}
2989
2990	return rc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2991}
2992
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2993/**
2994 * __pci_reset_function - reset a PCI device function
2995 * @dev: PCI device to reset
2996 *
2997 * Some devices allow an individual function to be reset without affecting
2998 * other functions in the same device.  The PCI device must be responsive
2999 * to PCI config space in order to use this function.
3000 *
3001 * The device function is presumed to be unused when this function is called.
3002 * Resetting the device will make the contents of PCI configuration space
3003 * random, so any caller of this must be prepared to reinitialise the
3004 * device including MSI, bus mastering, BARs, decoding IO and memory spaces,
3005 * etc.
3006 *
3007 * Returns 0 if the device function was successfully reset or negative if the
3008 * device doesn't support resetting a single function.
3009 */
3010int __pci_reset_function(struct pci_dev *dev)
3011{
3012	return pci_dev_reset(dev, 0);
3013}
3014EXPORT_SYMBOL_GPL(__pci_reset_function);
3015
3016/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3017 * pci_probe_reset_function - check whether the device can be safely reset
3018 * @dev: PCI device to reset
3019 *
3020 * Some devices allow an individual function to be reset without affecting
3021 * other functions in the same device.  The PCI device must be responsive
3022 * to PCI config space in order to use this function.
3023 *
3024 * Returns 0 if the device function can be reset or negative if the
3025 * device doesn't support resetting a single function.
3026 */
3027int pci_probe_reset_function(struct pci_dev *dev)
3028{
3029	return pci_dev_reset(dev, 1);
3030}
3031
3032/**
3033 * pci_reset_function - quiesce and reset a PCI device function
3034 * @dev: PCI device to reset
3035 *
3036 * Some devices allow an individual function to be reset without affecting
3037 * other functions in the same device.  The PCI device must be responsive
3038 * to PCI config space in order to use this function.
3039 *
3040 * This function does not just reset the PCI portion of a device, but
3041 * clears all the state associated with the device.  This function differs
3042 * from __pci_reset_function in that it saves and restores device state
3043 * over the reset.
3044 *
3045 * Returns 0 if the device function was successfully reset or negative if the
3046 * device doesn't support resetting a single function.
3047 */
3048int pci_reset_function(struct pci_dev *dev)
3049{
3050	int rc;
3051
3052	rc = pci_dev_reset(dev, 1);
3053	if (rc)
3054		return rc;
3055
3056	pci_save_state(dev);
3057
3058	/*
3059	 * both INTx and MSI are disabled after the Interrupt Disable bit
3060	 * is set and the Bus Master bit is cleared.
3061	 */
3062	pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
3063
3064	rc = pci_dev_reset(dev, 0);
3065
3066	pci_restore_state(dev);
3067
3068	return rc;
3069}
3070EXPORT_SYMBOL_GPL(pci_reset_function);
3071
3072/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3073 * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count
3074 * @dev: PCI device to query
3075 *
3076 * Returns mmrbc: maximum designed memory read count in bytes
3077 *    or appropriate error value.
3078 */
3079int pcix_get_max_mmrbc(struct pci_dev *dev)
3080{
3081	int cap;
3082	u32 stat;
3083
3084	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3085	if (!cap)
3086		return -EINVAL;
3087
3088	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3089		return -EINVAL;
3090
3091	return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
3092}
3093EXPORT_SYMBOL(pcix_get_max_mmrbc);
3094
3095/**
3096 * pcix_get_mmrbc - get PCI-X maximum memory read byte count
3097 * @dev: PCI device to query
3098 *
3099 * Returns mmrbc: maximum memory read count in bytes
3100 *    or appropriate error value.
3101 */
3102int pcix_get_mmrbc(struct pci_dev *dev)
3103{
3104	int cap;
3105	u16 cmd;
3106
3107	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3108	if (!cap)
3109		return -EINVAL;
3110
3111	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3112		return -EINVAL;
3113
3114	return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
3115}
3116EXPORT_SYMBOL(pcix_get_mmrbc);
3117
3118/**
3119 * pcix_set_mmrbc - set PCI-X maximum memory read byte count
3120 * @dev: PCI device to query
3121 * @mmrbc: maximum memory read count in bytes
3122 *    valid values are 512, 1024, 2048, 4096
3123 *
3124 * If possible sets maximum memory read byte count, some bridges have erratas
3125 * that prevent this.
3126 */
3127int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
3128{
3129	int cap;
3130	u32 stat, v, o;
3131	u16 cmd;
3132
3133	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
3134		return -EINVAL;
3135
3136	v = ffs(mmrbc) - 10;
3137
3138	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3139	if (!cap)
3140		return -EINVAL;
3141
3142	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3143		return -EINVAL;
3144
3145	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
3146		return -E2BIG;
3147
3148	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3149		return -EINVAL;
3150
3151	o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
3152	if (o != v) {
3153		if (v > o && dev->bus &&
3154		   (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC))
3155			return -EIO;
3156
3157		cmd &= ~PCI_X_CMD_MAX_READ;
3158		cmd |= v << 2;
3159		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
3160			return -EIO;
3161	}
3162	return 0;
3163}
3164EXPORT_SYMBOL(pcix_set_mmrbc);
3165
3166/**
3167 * pcie_get_readrq - get PCI Express read request size
3168 * @dev: PCI device to query
3169 *
3170 * Returns maximum memory read request in bytes
3171 *    or appropriate error value.
3172 */
3173int pcie_get_readrq(struct pci_dev *dev)
3174{
3175	int ret, cap;
3176	u16 ctl;
3177
3178	cap = pci_pcie_cap(dev);
3179	if (!cap)
3180		return -EINVAL;
3181
3182	ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3183	if (!ret)
3184		ret = 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12);
3185
3186	return ret;
3187}
3188EXPORT_SYMBOL(pcie_get_readrq);
3189
3190/**
3191 * pcie_set_readrq - set PCI Express maximum memory read request
3192 * @dev: PCI device to query
3193 * @rq: maximum memory read count in bytes
3194 *    valid values are 128, 256, 512, 1024, 2048, 4096
3195 *
3196 * If possible sets maximum memory read request in bytes
3197 */
3198int pcie_set_readrq(struct pci_dev *dev, int rq)
3199{
3200	int cap, err = -EINVAL;
3201	u16 ctl, v;
3202
3203	if (rq < 128 || rq > 4096 || !is_power_of_2(rq))
3204		goto out;
3205
3206	v = (ffs(rq) - 8) << 12;
3207
3208	cap = pci_pcie_cap(dev);
3209	if (!cap)
3210		goto out;
3211
3212	err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3213	if (err)
3214		goto out;
 
 
 
 
 
3215
3216	if ((ctl & PCI_EXP_DEVCTL_READRQ) != v) {
3217		ctl &= ~PCI_EXP_DEVCTL_READRQ;
3218		ctl |= v;
3219		err = pci_write_config_word(dev, cap + PCI_EXP_DEVCTL, ctl);
3220	}
3221
3222out:
3223	return err;
 
 
3224}
3225EXPORT_SYMBOL(pcie_set_readrq);
3226
3227/**
3228 * pcie_get_mps - get PCI Express maximum payload size
3229 * @dev: PCI device to query
3230 *
3231 * Returns maximum payload size in bytes
3232 *    or appropriate error value.
3233 */
3234int pcie_get_mps(struct pci_dev *dev)
3235{
3236	int ret, cap;
3237	u16 ctl;
3238
3239	cap = pci_pcie_cap(dev);
3240	if (!cap)
3241		return -EINVAL;
3242
3243	ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3244	if (!ret)
3245		ret = 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
3246
3247	return ret;
3248}
 
3249
3250/**
3251 * pcie_set_mps - set PCI Express maximum payload size
3252 * @dev: PCI device to query
3253 * @mps: maximum payload size in bytes
3254 *    valid values are 128, 256, 512, 1024, 2048, 4096
3255 *
3256 * If possible sets maximum payload size
3257 */
3258int pcie_set_mps(struct pci_dev *dev, int mps)
3259{
3260	int cap, err = -EINVAL;
3261	u16 ctl, v;
3262
3263	if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
3264		goto out;
3265
3266	v = ffs(mps) - 8;
3267	if (v > dev->pcie_mpss) 
3268		goto out;
3269	v <<= 5;
3270
3271	cap = pci_pcie_cap(dev);
3272	if (!cap)
3273		goto out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3274
3275	err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3276	if (err)
3277		goto out;
3278
3279	if ((ctl & PCI_EXP_DEVCTL_PAYLOAD) != v) {
3280		ctl &= ~PCI_EXP_DEVCTL_PAYLOAD;
3281		ctl |= v;
3282		err = pci_write_config_word(dev, cap + PCI_EXP_DEVCTL, ctl);
 
 
 
 
 
 
 
 
 
 
 
 
3283	}
3284out:
3285	return err;
3286}
 
3287
3288/**
3289 * pci_select_bars - Make BAR mask from the type of resource
3290 * @dev: the PCI device for which BAR mask is made
3291 * @flags: resource type mask to be selected
3292 *
3293 * This helper routine makes bar mask from the type of resource.
3294 */
3295int pci_select_bars(struct pci_dev *dev, unsigned long flags)
3296{
3297	int i, bars = 0;
3298	for (i = 0; i < PCI_NUM_RESOURCES; i++)
3299		if (pci_resource_flags(dev, i) & flags)
3300			bars |= (1 << i);
3301	return bars;
3302}
3303
3304/**
3305 * pci_resource_bar - get position of the BAR associated with a resource
3306 * @dev: the PCI device
3307 * @resno: the resource number
3308 * @type: the BAR type to be filled in
3309 *
3310 * Returns BAR position in config space, or 0 if the BAR is invalid.
3311 */
3312int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type)
3313{
3314	int reg;
3315
3316	if (resno < PCI_ROM_RESOURCE) {
3317		*type = pci_bar_unknown;
3318		return PCI_BASE_ADDRESS_0 + 4 * resno;
3319	} else if (resno == PCI_ROM_RESOURCE) {
3320		*type = pci_bar_mem32;
3321		return dev->rom_base_reg;
3322	} else if (resno < PCI_BRIDGE_RESOURCES) {
3323		/* device specific resource */
3324		reg = pci_iov_resource_bar(dev, resno, type);
3325		if (reg)
3326			return reg;
3327	}
3328
3329	dev_err(&dev->dev, "BAR %d: invalid resource\n", resno);
3330	return 0;
3331}
3332
3333/* Some architectures require additional programming to enable VGA */
3334static arch_set_vga_state_t arch_set_vga_state;
3335
3336void __init pci_register_set_vga_state(arch_set_vga_state_t func)
3337{
3338	arch_set_vga_state = func;	/* NULL disables */
3339}
3340
3341static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,
3342		      unsigned int command_bits, u32 flags)
3343{
3344	if (arch_set_vga_state)
3345		return arch_set_vga_state(dev, decode, command_bits,
3346						flags);
3347	return 0;
3348}
3349
3350/**
3351 * pci_set_vga_state - set VGA decode state on device and parents if requested
3352 * @dev: the PCI device
3353 * @decode: true = enable decoding, false = disable decoding
3354 * @command_bits: PCI_COMMAND_IO and/or PCI_COMMAND_MEMORY
3355 * @flags: traverse ancestors and change bridges
3356 * CHANGE_BRIDGE_ONLY / CHANGE_BRIDGE
3357 */
3358int pci_set_vga_state(struct pci_dev *dev, bool decode,
3359		      unsigned int command_bits, u32 flags)
3360{
3361	struct pci_bus *bus;
3362	struct pci_dev *bridge;
3363	u16 cmd;
3364	int rc;
3365
3366	WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)));
3367
3368	/* ARCH specific VGA enables */
3369	rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);
3370	if (rc)
3371		return rc;
3372
3373	if (flags & PCI_VGA_STATE_CHANGE_DECODES) {
3374		pci_read_config_word(dev, PCI_COMMAND, &cmd);
3375		if (decode == true)
3376			cmd |= command_bits;
3377		else
3378			cmd &= ~command_bits;
3379		pci_write_config_word(dev, PCI_COMMAND, cmd);
3380	}
3381
3382	if (!(flags & PCI_VGA_STATE_CHANGE_BRIDGE))
3383		return 0;
3384
3385	bus = dev->bus;
3386	while (bus) {
3387		bridge = bus->self;
3388		if (bridge) {
3389			pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
3390					     &cmd);
3391			if (decode == true)
3392				cmd |= PCI_BRIDGE_CTL_VGA;
3393			else
3394				cmd &= ~PCI_BRIDGE_CTL_VGA;
3395			pci_write_config_word(bridge, PCI_BRIDGE_CONTROL,
3396					      cmd);
3397		}
3398		bus = bus->parent;
3399	}
3400	return 0;
3401}
3402
 
 
 
 
 
 
 
 
3403#define RESOURCE_ALIGNMENT_PARAM_SIZE COMMAND_LINE_SIZE
3404static char resource_alignment_param[RESOURCE_ALIGNMENT_PARAM_SIZE] = {0};
3405static DEFINE_SPINLOCK(resource_alignment_lock);
3406
3407/**
3408 * pci_specified_resource_alignment - get resource alignment specified by user.
3409 * @dev: the PCI device to get
3410 *
3411 * RETURNS: Resource alignment if it is specified.
3412 *          Zero if it is not specified.
3413 */
3414resource_size_t pci_specified_resource_alignment(struct pci_dev *dev)
3415{
3416	int seg, bus, slot, func, align_order, count;
3417	resource_size_t align = 0;
3418	char *p;
3419
3420	spin_lock(&resource_alignment_lock);
3421	p = resource_alignment_param;
3422	while (*p) {
3423		count = 0;
3424		if (sscanf(p, "%d%n", &align_order, &count) == 1 &&
3425							p[count] == '@') {
3426			p += count + 1;
3427		} else {
3428			align_order = -1;
3429		}
3430		if (sscanf(p, "%x:%x:%x.%x%n",
3431			&seg, &bus, &slot, &func, &count) != 4) {
3432			seg = 0;
3433			if (sscanf(p, "%x:%x.%x%n",
3434					&bus, &slot, &func, &count) != 3) {
3435				/* Invalid format */
3436				printk(KERN_ERR "PCI: Can't parse resource_alignment parameter: %s\n",
3437					p);
3438				break;
3439			}
3440		}
3441		p += count;
3442		if (seg == pci_domain_nr(dev->bus) &&
3443			bus == dev->bus->number &&
3444			slot == PCI_SLOT(dev->devfn) &&
3445			func == PCI_FUNC(dev->devfn)) {
3446			if (align_order == -1) {
3447				align = PAGE_SIZE;
3448			} else {
3449				align = 1 << align_order;
3450			}
3451			/* Found */
3452			break;
3453		}
3454		if (*p != ';' && *p != ',') {
3455			/* End of param or invalid format */
3456			break;
3457		}
3458		p++;
3459	}
3460	spin_unlock(&resource_alignment_lock);
3461	return align;
3462}
3463
3464/**
3465 * pci_is_reassigndev - check if specified PCI is target device to reassign
3466 * @dev: the PCI device to check
3467 *
3468 * RETURNS: non-zero for PCI device is a target device to reassign,
3469 *          or zero is not.
3470 */
3471int pci_is_reassigndev(struct pci_dev *dev)
3472{
3473	return (pci_specified_resource_alignment(dev) != 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3474}
3475
3476ssize_t pci_set_resource_alignment_param(const char *buf, size_t count)
3477{
3478	if (count > RESOURCE_ALIGNMENT_PARAM_SIZE - 1)
3479		count = RESOURCE_ALIGNMENT_PARAM_SIZE - 1;
3480	spin_lock(&resource_alignment_lock);
3481	strncpy(resource_alignment_param, buf, count);
3482	resource_alignment_param[count] = '\0';
3483	spin_unlock(&resource_alignment_lock);
3484	return count;
3485}
3486
3487ssize_t pci_get_resource_alignment_param(char *buf, size_t size)
3488{
3489	size_t count;
3490	spin_lock(&resource_alignment_lock);
3491	count = snprintf(buf, size, "%s", resource_alignment_param);
3492	spin_unlock(&resource_alignment_lock);
3493	return count;
3494}
3495
3496static ssize_t pci_resource_alignment_show(struct bus_type *bus, char *buf)
3497{
3498	return pci_get_resource_alignment_param(buf, PAGE_SIZE);
3499}
3500
3501static ssize_t pci_resource_alignment_store(struct bus_type *bus,
3502					const char *buf, size_t count)
3503{
3504	return pci_set_resource_alignment_param(buf, count);
3505}
3506
3507BUS_ATTR(resource_alignment, 0644, pci_resource_alignment_show,
3508					pci_resource_alignment_store);
3509
3510static int __init pci_resource_alignment_sysfs_init(void)
3511{
3512	return bus_create_file(&pci_bus_type,
3513					&bus_attr_resource_alignment);
3514}
3515
3516late_initcall(pci_resource_alignment_sysfs_init);
3517
3518static void __devinit pci_no_domains(void)
3519{
3520#ifdef CONFIG_PCI_DOMAINS
3521	pci_domains_supported = 0;
3522#endif
3523}
3524
3525/**
3526 * pci_ext_cfg_enabled - can we access extended PCI config space?
3527 * @dev: The PCI device of the root bridge.
3528 *
3529 * Returns 1 if we can access PCI extended config space (offsets
3530 * greater than 0xff). This is the default implementation. Architecture
3531 * implementations can override this.
3532 */
3533int __attribute__ ((weak)) pci_ext_cfg_avail(struct pci_dev *dev)
3534{
3535	return 1;
3536}
3537
3538void __weak pci_fixup_cardbus(struct pci_bus *bus)
3539{
3540}
3541EXPORT_SYMBOL(pci_fixup_cardbus);
3542
3543static int __init pci_setup(char *str)
3544{
3545	while (str) {
3546		char *k = strchr(str, ',');
3547		if (k)
3548			*k++ = 0;
3549		if (*str && (str = pcibios_setup(str)) && *str) {
3550			if (!strcmp(str, "nomsi")) {
3551				pci_no_msi();
3552			} else if (!strcmp(str, "noaer")) {
3553				pci_no_aer();
 
 
3554			} else if (!strncmp(str, "realloc", 7)) {
3555				pci_realloc();
3556			} else if (!strcmp(str, "nodomains")) {
3557				pci_no_domains();
 
 
3558			} else if (!strncmp(str, "cbiosize=", 9)) {
3559				pci_cardbus_io_size = memparse(str + 9, &str);
3560			} else if (!strncmp(str, "cbmemsize=", 10)) {
3561				pci_cardbus_mem_size = memparse(str + 10, &str);
3562			} else if (!strncmp(str, "resource_alignment=", 19)) {
3563				pci_set_resource_alignment_param(str + 19,
3564							strlen(str + 19));
3565			} else if (!strncmp(str, "ecrc=", 5)) {
3566				pcie_ecrc_get_policy(str + 5);
3567			} else if (!strncmp(str, "hpiosize=", 9)) {
3568				pci_hotplug_io_size = memparse(str + 9, &str);
3569			} else if (!strncmp(str, "hpmemsize=", 10)) {
3570				pci_hotplug_mem_size = memparse(str + 10, &str);
3571			} else if (!strncmp(str, "pcie_bus_tune_off", 17)) {
3572				pcie_bus_config = PCIE_BUS_TUNE_OFF;
3573			} else if (!strncmp(str, "pcie_bus_safe", 13)) {
3574				pcie_bus_config = PCIE_BUS_SAFE;
3575			} else if (!strncmp(str, "pcie_bus_perf", 13)) {
3576				pcie_bus_config = PCIE_BUS_PERFORMANCE;
3577			} else if (!strncmp(str, "pcie_bus_peer2peer", 18)) {
3578				pcie_bus_config = PCIE_BUS_PEER2PEER;
 
 
3579			} else {
3580				printk(KERN_ERR "PCI: Unknown option `%s'\n",
3581						str);
3582			}
3583		}
3584		str = k;
3585	}
3586	return 0;
3587}
3588early_param("pci", pci_setup);
3589
3590EXPORT_SYMBOL(pci_reenable_device);
3591EXPORT_SYMBOL(pci_enable_device_io);
3592EXPORT_SYMBOL(pci_enable_device_mem);
3593EXPORT_SYMBOL(pci_enable_device);
3594EXPORT_SYMBOL(pcim_enable_device);
3595EXPORT_SYMBOL(pcim_pin_device);
3596EXPORT_SYMBOL(pci_disable_device);
3597EXPORT_SYMBOL(pci_find_capability);
3598EXPORT_SYMBOL(pci_bus_find_capability);
3599EXPORT_SYMBOL(pci_release_regions);
3600EXPORT_SYMBOL(pci_request_regions);
3601EXPORT_SYMBOL(pci_request_regions_exclusive);
3602EXPORT_SYMBOL(pci_release_region);
3603EXPORT_SYMBOL(pci_request_region);
3604EXPORT_SYMBOL(pci_request_region_exclusive);
3605EXPORT_SYMBOL(pci_release_selected_regions);
3606EXPORT_SYMBOL(pci_request_selected_regions);
3607EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
3608EXPORT_SYMBOL(pci_set_master);
3609EXPORT_SYMBOL(pci_clear_master);
3610EXPORT_SYMBOL(pci_set_mwi);
3611EXPORT_SYMBOL(pci_try_set_mwi);
3612EXPORT_SYMBOL(pci_clear_mwi);
3613EXPORT_SYMBOL_GPL(pci_intx);
3614EXPORT_SYMBOL(pci_assign_resource);
3615EXPORT_SYMBOL(pci_find_parent_resource);
3616EXPORT_SYMBOL(pci_select_bars);
3617
3618EXPORT_SYMBOL(pci_set_power_state);
3619EXPORT_SYMBOL(pci_save_state);
3620EXPORT_SYMBOL(pci_restore_state);
3621EXPORT_SYMBOL(pci_pme_capable);
3622EXPORT_SYMBOL(pci_pme_active);
3623EXPORT_SYMBOL(pci_wake_from_d3);
3624EXPORT_SYMBOL(pci_target_state);
3625EXPORT_SYMBOL(pci_prepare_to_sleep);
3626EXPORT_SYMBOL(pci_back_from_sleep);
3627EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state);
v3.15
   1/*
   2 *	PCI Bus Services, see include/linux/pci.h for further explanation.
   3 *
   4 *	Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
   5 *	David Mosberger-Tang
   6 *
   7 *	Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/delay.h>
  12#include <linux/init.h>
  13#include <linux/pci.h>
  14#include <linux/pm.h>
  15#include <linux/slab.h>
  16#include <linux/module.h>
  17#include <linux/spinlock.h>
  18#include <linux/string.h>
  19#include <linux/log2.h>
  20#include <linux/pci-aspm.h>
  21#include <linux/pm_wakeup.h>
  22#include <linux/interrupt.h>
  23#include <linux/device.h>
  24#include <linux/pm_runtime.h>
  25#include <linux/pci_hotplug.h>
  26#include <asm-generic/pci-bridge.h>
  27#include <asm/setup.h>
  28#include "pci.h"
  29
  30const char *pci_power_names[] = {
  31	"error", "D0", "D1", "D2", "D3hot", "D3cold", "unknown",
  32};
  33EXPORT_SYMBOL_GPL(pci_power_names);
  34
  35int isa_dma_bridge_buggy;
  36EXPORT_SYMBOL(isa_dma_bridge_buggy);
  37
  38int pci_pci_problems;
  39EXPORT_SYMBOL(pci_pci_problems);
  40
  41unsigned int pci_pm_d3_delay;
  42
  43static void pci_pme_list_scan(struct work_struct *work);
  44
  45static LIST_HEAD(pci_pme_list);
  46static DEFINE_MUTEX(pci_pme_list_mutex);
  47static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
  48
  49struct pci_pme_device {
  50	struct list_head list;
  51	struct pci_dev *dev;
  52};
  53
  54#define PME_TIMEOUT 1000 /* How long between PME checks */
  55
  56static void pci_dev_d3_sleep(struct pci_dev *dev)
  57{
  58	unsigned int delay = dev->d3_delay;
  59
  60	if (delay < pci_pm_d3_delay)
  61		delay = pci_pm_d3_delay;
  62
  63	msleep(delay);
  64}
  65
  66#ifdef CONFIG_PCI_DOMAINS
  67int pci_domains_supported = 1;
  68#endif
  69
  70#define DEFAULT_CARDBUS_IO_SIZE		(256)
  71#define DEFAULT_CARDBUS_MEM_SIZE	(64*1024*1024)
  72/* pci=cbmemsize=nnM,cbiosize=nn can override this */
  73unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
  74unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
  75
  76#define DEFAULT_HOTPLUG_IO_SIZE		(256)
  77#define DEFAULT_HOTPLUG_MEM_SIZE	(2*1024*1024)
  78/* pci=hpmemsize=nnM,hpiosize=nn can override this */
  79unsigned long pci_hotplug_io_size  = DEFAULT_HOTPLUG_IO_SIZE;
  80unsigned long pci_hotplug_mem_size = DEFAULT_HOTPLUG_MEM_SIZE;
  81
  82enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_TUNE_OFF;
  83
  84/*
  85 * The default CLS is used if arch didn't set CLS explicitly and not
  86 * all pci devices agree on the same value.  Arch can override either
  87 * the dfl or actual value as it sees fit.  Don't forget this is
  88 * measured in 32-bit words, not bytes.
  89 */
  90u8 pci_dfl_cache_line_size = L1_CACHE_BYTES >> 2;
  91u8 pci_cache_line_size;
  92
  93/*
  94 * If we set up a device for bus mastering, we need to check the latency
  95 * timer as certain BIOSes forget to set it properly.
  96 */
  97unsigned int pcibios_max_latency = 255;
  98
  99/* If set, the PCIe ARI capability will not be used. */
 100static bool pcie_ari_disabled;
 101
 102/**
 103 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
 104 * @bus: pointer to PCI bus structure to search
 105 *
 106 * Given a PCI bus, returns the highest PCI bus number present in the set
 107 * including the given PCI bus and its list of child PCI buses.
 108 */
 109unsigned char pci_bus_max_busnr(struct pci_bus* bus)
 110{
 111	struct pci_bus *tmp;
 112	unsigned char max, n;
 113
 114	max = bus->busn_res.end;
 115	list_for_each_entry(tmp, &bus->children, node) {
 116		n = pci_bus_max_busnr(tmp);
 117		if(n > max)
 118			max = n;
 119	}
 120	return max;
 121}
 122EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
 123
 124#ifdef CONFIG_HAS_IOMEM
 125void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
 126{
 127	/*
 128	 * Make sure the BAR is actually a memory resource, not an IO resource
 129	 */
 130	if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
 131		WARN_ON(1);
 132		return NULL;
 133	}
 134	return ioremap_nocache(pci_resource_start(pdev, bar),
 135				     pci_resource_len(pdev, bar));
 136}
 137EXPORT_SYMBOL_GPL(pci_ioremap_bar);
 138#endif
 139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 140#define PCI_FIND_CAP_TTL	48
 141
 142static int __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
 143				   u8 pos, int cap, int *ttl)
 144{
 145	u8 id;
 146
 147	while ((*ttl)--) {
 148		pci_bus_read_config_byte(bus, devfn, pos, &pos);
 149		if (pos < 0x40)
 150			break;
 151		pos &= ~3;
 152		pci_bus_read_config_byte(bus, devfn, pos + PCI_CAP_LIST_ID,
 153					 &id);
 154		if (id == 0xff)
 155			break;
 156		if (id == cap)
 157			return pos;
 158		pos += PCI_CAP_LIST_NEXT;
 159	}
 160	return 0;
 161}
 162
 163static int __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn,
 164			       u8 pos, int cap)
 165{
 166	int ttl = PCI_FIND_CAP_TTL;
 167
 168	return __pci_find_next_cap_ttl(bus, devfn, pos, cap, &ttl);
 169}
 170
 171int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap)
 172{
 173	return __pci_find_next_cap(dev->bus, dev->devfn,
 174				   pos + PCI_CAP_LIST_NEXT, cap);
 175}
 176EXPORT_SYMBOL_GPL(pci_find_next_capability);
 177
 178static int __pci_bus_find_cap_start(struct pci_bus *bus,
 179				    unsigned int devfn, u8 hdr_type)
 180{
 181	u16 status;
 182
 183	pci_bus_read_config_word(bus, devfn, PCI_STATUS, &status);
 184	if (!(status & PCI_STATUS_CAP_LIST))
 185		return 0;
 186
 187	switch (hdr_type) {
 188	case PCI_HEADER_TYPE_NORMAL:
 189	case PCI_HEADER_TYPE_BRIDGE:
 190		return PCI_CAPABILITY_LIST;
 191	case PCI_HEADER_TYPE_CARDBUS:
 192		return PCI_CB_CAPABILITY_LIST;
 193	default:
 194		return 0;
 195	}
 196
 197	return 0;
 198}
 199
 200/**
 201 * pci_find_capability - query for devices' capabilities
 202 * @dev: PCI device to query
 203 * @cap: capability code
 204 *
 205 * Tell if a device supports a given PCI capability.
 206 * Returns the address of the requested capability structure within the
 207 * device's PCI configuration space or 0 in case the device does not
 208 * support it.  Possible values for @cap:
 209 *
 210 *  %PCI_CAP_ID_PM           Power Management
 211 *  %PCI_CAP_ID_AGP          Accelerated Graphics Port
 212 *  %PCI_CAP_ID_VPD          Vital Product Data
 213 *  %PCI_CAP_ID_SLOTID       Slot Identification
 214 *  %PCI_CAP_ID_MSI          Message Signalled Interrupts
 215 *  %PCI_CAP_ID_CHSWP        CompactPCI HotSwap
 216 *  %PCI_CAP_ID_PCIX         PCI-X
 217 *  %PCI_CAP_ID_EXP          PCI Express
 218 */
 219int pci_find_capability(struct pci_dev *dev, int cap)
 220{
 221	int pos;
 222
 223	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 224	if (pos)
 225		pos = __pci_find_next_cap(dev->bus, dev->devfn, pos, cap);
 226
 227	return pos;
 228}
 229
 230/**
 231 * pci_bus_find_capability - query for devices' capabilities
 232 * @bus:   the PCI bus to query
 233 * @devfn: PCI device to query
 234 * @cap:   capability code
 235 *
 236 * Like pci_find_capability() but works for pci devices that do not have a
 237 * pci_dev structure set up yet.
 238 *
 239 * Returns the address of the requested capability structure within the
 240 * device's PCI configuration space or 0 in case the device does not
 241 * support it.
 242 */
 243int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap)
 244{
 245	int pos;
 246	u8 hdr_type;
 247
 248	pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type);
 249
 250	pos = __pci_bus_find_cap_start(bus, devfn, hdr_type & 0x7f);
 251	if (pos)
 252		pos = __pci_find_next_cap(bus, devfn, pos, cap);
 253
 254	return pos;
 255}
 256
 257/**
 258 * pci_find_next_ext_capability - Find an extended capability
 259 * @dev: PCI device to query
 260 * @start: address at which to start looking (0 to start at beginning of list)
 261 * @cap: capability code
 262 *
 263 * Returns the address of the next matching extended capability structure
 264 * within the device's PCI configuration space or 0 if the device does
 265 * not support it.  Some capabilities can occur several times, e.g., the
 266 * vendor-specific capability, and this provides a way to find them all.
 
 
 
 
 267 */
 268int pci_find_next_ext_capability(struct pci_dev *dev, int start, int cap)
 269{
 270	u32 header;
 271	int ttl;
 272	int pos = PCI_CFG_SPACE_SIZE;
 273
 274	/* minimum 8 bytes per capability */
 275	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 276
 277	if (dev->cfg_size <= PCI_CFG_SPACE_SIZE)
 278		return 0;
 279
 280	if (start)
 281		pos = start;
 282
 283	if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 284		return 0;
 285
 286	/*
 287	 * If we have no capabilities, this is indicated by cap ID,
 288	 * cap version and next pointer all being 0.
 289	 */
 290	if (header == 0)
 291		return 0;
 292
 293	while (ttl-- > 0) {
 294		if (PCI_EXT_CAP_ID(header) == cap && pos != start)
 295			return pos;
 296
 297		pos = PCI_EXT_CAP_NEXT(header);
 298		if (pos < PCI_CFG_SPACE_SIZE)
 299			break;
 300
 301		if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 302			break;
 303	}
 304
 305	return 0;
 306}
 307EXPORT_SYMBOL_GPL(pci_find_next_ext_capability);
 308
 309/**
 310 * pci_find_ext_capability - Find an extended capability
 311 * @dev: PCI device to query
 312 * @cap: capability code
 
 313 *
 314 * Returns the address of the requested extended capability structure
 315 * within the device's PCI configuration space or 0 if the device does
 316 * not support it.  Possible values for @cap:
 317 *
 318 *  %PCI_EXT_CAP_ID_ERR		Advanced Error Reporting
 319 *  %PCI_EXT_CAP_ID_VC		Virtual Channel
 320 *  %PCI_EXT_CAP_ID_DSN		Device Serial Number
 321 *  %PCI_EXT_CAP_ID_PWR		Power Budgeting
 322 */
 323int pci_find_ext_capability(struct pci_dev *dev, int cap)
 
 324{
 325	return pci_find_next_ext_capability(dev, 0, cap);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 326}
 327EXPORT_SYMBOL_GPL(pci_find_ext_capability);
 328
 329static int __pci_find_next_ht_cap(struct pci_dev *dev, int pos, int ht_cap)
 330{
 331	int rc, ttl = PCI_FIND_CAP_TTL;
 332	u8 cap, mask;
 333
 334	if (ht_cap == HT_CAPTYPE_SLAVE || ht_cap == HT_CAPTYPE_HOST)
 335		mask = HT_3BIT_CAP_MASK;
 336	else
 337		mask = HT_5BIT_CAP_MASK;
 338
 339	pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, pos,
 340				      PCI_CAP_ID_HT, &ttl);
 341	while (pos) {
 342		rc = pci_read_config_byte(dev, pos + 3, &cap);
 343		if (rc != PCIBIOS_SUCCESSFUL)
 344			return 0;
 345
 346		if ((cap & mask) == ht_cap)
 347			return pos;
 348
 349		pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn,
 350					      pos + PCI_CAP_LIST_NEXT,
 351					      PCI_CAP_ID_HT, &ttl);
 352	}
 353
 354	return 0;
 355}
 356/**
 357 * pci_find_next_ht_capability - query a device's Hypertransport capabilities
 358 * @dev: PCI device to query
 359 * @pos: Position from which to continue searching
 360 * @ht_cap: Hypertransport capability code
 361 *
 362 * To be used in conjunction with pci_find_ht_capability() to search for
 363 * all capabilities matching @ht_cap. @pos should always be a value returned
 364 * from pci_find_ht_capability().
 365 *
 366 * NB. To be 100% safe against broken PCI devices, the caller should take
 367 * steps to avoid an infinite loop.
 368 */
 369int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap)
 370{
 371	return __pci_find_next_ht_cap(dev, pos + PCI_CAP_LIST_NEXT, ht_cap);
 372}
 373EXPORT_SYMBOL_GPL(pci_find_next_ht_capability);
 374
 375/**
 376 * pci_find_ht_capability - query a device's Hypertransport capabilities
 377 * @dev: PCI device to query
 378 * @ht_cap: Hypertransport capability code
 379 *
 380 * Tell if a device supports a given Hypertransport capability.
 381 * Returns an address within the device's PCI configuration space
 382 * or 0 in case the device does not support the request capability.
 383 * The address points to the PCI capability, of type PCI_CAP_ID_HT,
 384 * which has a Hypertransport capability matching @ht_cap.
 385 */
 386int pci_find_ht_capability(struct pci_dev *dev, int ht_cap)
 387{
 388	int pos;
 389
 390	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 391	if (pos)
 392		pos = __pci_find_next_ht_cap(dev, pos, ht_cap);
 393
 394	return pos;
 395}
 396EXPORT_SYMBOL_GPL(pci_find_ht_capability);
 397
 398/**
 399 * pci_find_parent_resource - return resource region of parent bus of given region
 400 * @dev: PCI device structure contains resources to be searched
 401 * @res: child resource record for which parent is sought
 402 *
 403 *  For given resource region of given device, return the resource
 404 *  region of parent bus the given region is contained in.
 
 405 */
 406struct resource *
 407pci_find_parent_resource(const struct pci_dev *dev, struct resource *res)
 408{
 409	const struct pci_bus *bus = dev->bus;
 410	struct resource *r;
 411	int i;
 
 412
 413	pci_bus_for_each_resource(bus, r, i) {
 414		if (!r)
 415			continue;
 416		if (res->start && resource_contains(r, res)) {
 417
 418			/*
 419			 * If the window is prefetchable but the BAR is
 420			 * not, the allocator made a mistake.
 421			 */
 422			if (r->flags & IORESOURCE_PREFETCH &&
 423			    !(res->flags & IORESOURCE_PREFETCH))
 424				return NULL;
 425
 426			/*
 427			 * If we're below a transparent bridge, there may
 428			 * be both a positively-decoded aperture and a
 429			 * subtractively-decoded region that contain the BAR.
 430			 * We want the positively-decoded one, so this depends
 431			 * on pci_bus_for_each_resource() giving us those
 432			 * first.
 433			 */
 434			return r;
 435		}
 436	}
 437	return NULL;
 438}
 439
 440/**
 441 * pci_wait_for_pending - wait for @mask bit(s) to clear in status word @pos
 442 * @dev: the PCI device to operate on
 443 * @pos: config space offset of status word
 444 * @mask: mask of bit(s) to care about in status word
 445 *
 446 * Return 1 when mask bit(s) in status word clear, 0 otherwise.
 447 */
 448int pci_wait_for_pending(struct pci_dev *dev, int pos, u16 mask)
 449{
 450	int i;
 451
 452	/* Wait for Transaction Pending bit clean */
 453	for (i = 0; i < 4; i++) {
 454		u16 status;
 455		if (i)
 456			msleep((1 << (i - 1)) * 100);
 457
 458		pci_read_config_word(dev, pos, &status);
 459		if (!(status & mask))
 460			return 1;
 461	}
 462
 463	return 0;
 464}
 465
 466/**
 467 * pci_restore_bars - restore a devices BAR values (e.g. after wake-up)
 468 * @dev: PCI device to have its BARs restored
 469 *
 470 * Restore the BAR values for a given device, so as to make it
 471 * accessible by its driver.
 472 */
 473static void
 474pci_restore_bars(struct pci_dev *dev)
 475{
 476	int i;
 477
 478	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++)
 479		pci_update_resource(dev, i);
 480}
 481
 482static struct pci_platform_pm_ops *pci_platform_pm;
 483
 484int pci_set_platform_pm(struct pci_platform_pm_ops *ops)
 485{
 486	if (!ops->is_manageable || !ops->set_state || !ops->choose_state
 487	    || !ops->sleep_wake)
 488		return -EINVAL;
 489	pci_platform_pm = ops;
 490	return 0;
 491}
 492
 493static inline bool platform_pci_power_manageable(struct pci_dev *dev)
 494{
 495	return pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false;
 496}
 497
 498static inline int platform_pci_set_power_state(struct pci_dev *dev,
 499                                                pci_power_t t)
 500{
 501	return pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS;
 502}
 503
 504static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
 505{
 506	return pci_platform_pm ?
 507			pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR;
 508}
 509
 
 
 
 
 
 510static inline int platform_pci_sleep_wake(struct pci_dev *dev, bool enable)
 511{
 512	return pci_platform_pm ?
 513			pci_platform_pm->sleep_wake(dev, enable) : -ENODEV;
 514}
 515
 516static inline int platform_pci_run_wake(struct pci_dev *dev, bool enable)
 517{
 518	return pci_platform_pm ?
 519			pci_platform_pm->run_wake(dev, enable) : -ENODEV;
 520}
 521
 522/**
 523 * pci_raw_set_power_state - Use PCI PM registers to set the power state of
 524 *                           given PCI device
 525 * @dev: PCI device to handle.
 526 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 527 *
 528 * RETURN VALUE:
 529 * -EINVAL if the requested state is invalid.
 530 * -EIO if device does not support PCI PM or its PM capabilities register has a
 531 * wrong version, or device doesn't support the requested state.
 532 * 0 if device already is in the requested state.
 533 * 0 if device's power state has been successfully changed.
 534 */
 535static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
 536{
 537	u16 pmcsr;
 538	bool need_restore = false;
 539
 540	/* Check if we're already there */
 541	if (dev->current_state == state)
 542		return 0;
 543
 544	if (!dev->pm_cap)
 545		return -EIO;
 546
 547	if (state < PCI_D0 || state > PCI_D3hot)
 548		return -EINVAL;
 549
 550	/* Validate current state:
 551	 * Can enter D0 from any state, but if we can only go deeper
 552	 * to sleep if we're already in a low power state
 553	 */
 554	if (state != PCI_D0 && dev->current_state <= PCI_D3cold
 555	    && dev->current_state > state) {
 556		dev_err(&dev->dev, "invalid power transition "
 557			"(from state %d to %d)\n", dev->current_state, state);
 558		return -EINVAL;
 559	}
 560
 561	/* check if this device supports the desired state */
 562	if ((state == PCI_D1 && !dev->d1_support)
 563	   || (state == PCI_D2 && !dev->d2_support))
 564		return -EIO;
 565
 566	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 567
 568	/* If we're (effectively) in D3, force entire word to 0.
 569	 * This doesn't affect PME_Status, disables PME_En, and
 570	 * sets PowerState to 0.
 571	 */
 572	switch (dev->current_state) {
 573	case PCI_D0:
 574	case PCI_D1:
 575	case PCI_D2:
 576		pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
 577		pmcsr |= state;
 578		break;
 579	case PCI_D3hot:
 580	case PCI_D3cold:
 581	case PCI_UNKNOWN: /* Boot-up */
 582		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot
 583		 && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
 584			need_restore = true;
 585		/* Fall-through: force to D0 */
 586	default:
 587		pmcsr = 0;
 588		break;
 589	}
 590
 591	/* enter specified state */
 592	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
 593
 594	/* Mandatory power management transition delays */
 595	/* see PCI PM 1.1 5.6.1 table 18 */
 596	if (state == PCI_D3hot || dev->current_state == PCI_D3hot)
 597		pci_dev_d3_sleep(dev);
 598	else if (state == PCI_D2 || dev->current_state == PCI_D2)
 599		udelay(PCI_PM_D2_DELAY);
 600
 601	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 602	dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 603	if (dev->current_state != state && printk_ratelimit())
 604		dev_info(&dev->dev, "Refused to change power state, "
 605			"currently in D%d\n", dev->current_state);
 606
 607	/*
 608	 * According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT
 609	 * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning
 610	 * from D3hot to D0 _may_ perform an internal reset, thereby
 611	 * going to "D0 Uninitialized" rather than "D0 Initialized".
 612	 * For example, at least some versions of the 3c905B and the
 613	 * 3c556B exhibit this behaviour.
 614	 *
 615	 * At least some laptop BIOSen (e.g. the Thinkpad T21) leave
 616	 * devices in a D3hot state at boot.  Consequently, we need to
 617	 * restore at least the BARs so that the device will be
 618	 * accessible to its driver.
 619	 */
 620	if (need_restore)
 621		pci_restore_bars(dev);
 622
 623	if (dev->bus->self)
 624		pcie_aspm_pm_state_change(dev->bus->self);
 625
 626	return 0;
 627}
 628
 629/**
 630 * pci_update_current_state - Read PCI power state of given device from its
 631 *                            PCI PM registers and cache it
 632 * @dev: PCI device to handle.
 633 * @state: State to cache in case the device doesn't have the PM capability
 634 */
 635void pci_update_current_state(struct pci_dev *dev, pci_power_t state)
 636{
 637	if (dev->pm_cap) {
 638		u16 pmcsr;
 639
 640		/*
 641		 * Configuration space is not accessible for device in
 642		 * D3cold, so just keep or set D3cold for safety
 643		 */
 644		if (dev->current_state == PCI_D3cold)
 645			return;
 646		if (state == PCI_D3cold) {
 647			dev->current_state = PCI_D3cold;
 648			return;
 649		}
 650		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 651		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 652	} else {
 653		dev->current_state = state;
 654	}
 655}
 656
 657/**
 658 * pci_power_up - Put the given device into D0 forcibly
 659 * @dev: PCI device to power up
 660 */
 661void pci_power_up(struct pci_dev *dev)
 662{
 663	if (platform_pci_power_manageable(dev))
 664		platform_pci_set_power_state(dev, PCI_D0);
 665
 666	pci_raw_set_power_state(dev, PCI_D0);
 667	pci_update_current_state(dev, PCI_D0);
 668}
 669
 670/**
 671 * pci_platform_power_transition - Use platform to change device power state
 672 * @dev: PCI device to handle.
 673 * @state: State to put the device into.
 674 */
 675static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
 676{
 677	int error;
 678
 679	if (platform_pci_power_manageable(dev)) {
 680		error = platform_pci_set_power_state(dev, state);
 681		if (!error)
 682			pci_update_current_state(dev, state);
 683	} else
 684		error = -ENODEV;
 685
 686	if (error && !dev->pm_cap) /* Fall back to PCI_D0 */
 687		dev->current_state = PCI_D0;
 
 688
 689	return error;
 690}
 691
 692/**
 693 * pci_wakeup - Wake up a PCI device
 694 * @pci_dev: Device to handle.
 695 * @ign: ignored parameter
 696 */
 697static int pci_wakeup(struct pci_dev *pci_dev, void *ign)
 698{
 699	pci_wakeup_event(pci_dev);
 700	pm_request_resume(&pci_dev->dev);
 701	return 0;
 702}
 703
 704/**
 705 * pci_wakeup_bus - Walk given bus and wake up devices on it
 706 * @bus: Top bus of the subtree to walk.
 707 */
 708static void pci_wakeup_bus(struct pci_bus *bus)
 709{
 710	if (bus)
 711		pci_walk_bus(bus, pci_wakeup, NULL);
 712}
 713
 714/**
 715 * __pci_start_power_transition - Start power transition of a PCI device
 716 * @dev: PCI device to handle.
 717 * @state: State to put the device into.
 718 */
 719static void __pci_start_power_transition(struct pci_dev *dev, pci_power_t state)
 720{
 721	if (state == PCI_D0) {
 722		pci_platform_power_transition(dev, PCI_D0);
 723		/*
 724		 * Mandatory power management transition delays, see
 725		 * PCI Express Base Specification Revision 2.0 Section
 726		 * 6.6.1: Conventional Reset.  Do not delay for
 727		 * devices powered on/off by corresponding bridge,
 728		 * because have already delayed for the bridge.
 729		 */
 730		if (dev->runtime_d3cold) {
 731			msleep(dev->d3cold_delay);
 732			/*
 733			 * When powering on a bridge from D3cold, the
 734			 * whole hierarchy may be powered on into
 735			 * D0uninitialized state, resume them to give
 736			 * them a chance to suspend again
 737			 */
 738			pci_wakeup_bus(dev->subordinate);
 739		}
 740	}
 741}
 742
 743/**
 744 * __pci_dev_set_current_state - Set current state of a PCI device
 745 * @dev: Device to handle
 746 * @data: pointer to state to be set
 747 */
 748static int __pci_dev_set_current_state(struct pci_dev *dev, void *data)
 749{
 750	pci_power_t state = *(pci_power_t *)data;
 751
 752	dev->current_state = state;
 753	return 0;
 754}
 755
 756/**
 757 * __pci_bus_set_current_state - Walk given bus and set current state of devices
 758 * @bus: Top bus of the subtree to walk.
 759 * @state: state to be set
 760 */
 761static void __pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state)
 762{
 763	if (bus)
 764		pci_walk_bus(bus, __pci_dev_set_current_state, &state);
 765}
 766
 767/**
 768 * __pci_complete_power_transition - Complete power transition of a PCI device
 769 * @dev: PCI device to handle.
 770 * @state: State to put the device into.
 771 *
 772 * This function should not be called directly by device drivers.
 773 */
 774int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state)
 775{
 776	int ret;
 777
 778	if (state <= PCI_D0)
 779		return -EINVAL;
 780	ret = pci_platform_power_transition(dev, state);
 781	/* Power off the bridge may power off the whole hierarchy */
 782	if (!ret && state == PCI_D3cold)
 783		__pci_bus_set_current_state(dev->subordinate, PCI_D3cold);
 784	return ret;
 785}
 786EXPORT_SYMBOL_GPL(__pci_complete_power_transition);
 787
 788/**
 789 * pci_set_power_state - Set the power state of a PCI device
 790 * @dev: PCI device to handle.
 791 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 792 *
 793 * Transition a device to a new power state, using the platform firmware and/or
 794 * the device's PCI PM registers.
 795 *
 796 * RETURN VALUE:
 797 * -EINVAL if the requested state is invalid.
 798 * -EIO if device does not support PCI PM or its PM capabilities register has a
 799 * wrong version, or device doesn't support the requested state.
 800 * 0 if device already is in the requested state.
 801 * 0 if device's power state has been successfully changed.
 802 */
 803int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
 804{
 805	int error;
 806
 807	/* bound the state we're entering */
 808	if (state > PCI_D3cold)
 809		state = PCI_D3cold;
 810	else if (state < PCI_D0)
 811		state = PCI_D0;
 812	else if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev))
 813		/*
 814		 * If the device or the parent bridge do not support PCI PM,
 815		 * ignore the request if we're doing anything other than putting
 816		 * it into D0 (which would only happen on boot).
 817		 */
 818		return 0;
 819
 820	/* Check if we're already there */
 821	if (dev->current_state == state)
 822		return 0;
 823
 824	__pci_start_power_transition(dev, state);
 825
 826	/* This device is quirked not to be put into D3, so
 827	   don't put it in D3 */
 828	if (state >= PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3))
 829		return 0;
 830
 831	/*
 832	 * To put device in D3cold, we put device into D3hot in native
 833	 * way, then put device into D3cold with platform ops
 834	 */
 835	error = pci_raw_set_power_state(dev, state > PCI_D3hot ?
 836					PCI_D3hot : state);
 837
 838	if (!__pci_complete_power_transition(dev, state))
 839		error = 0;
 840	/*
 841	 * When aspm_policy is "powersave" this call ensures
 842	 * that ASPM is configured.
 843	 */
 844	if (!error && dev->bus->self)
 845		pcie_aspm_powersave_config_link(dev->bus->self);
 846
 847	return error;
 848}
 849
 850/**
 851 * pci_choose_state - Choose the power state of a PCI device
 852 * @dev: PCI device to be suspended
 853 * @state: target sleep state for the whole system. This is the value
 854 *	that is passed to suspend() function.
 855 *
 856 * Returns PCI power state suitable for given device and given system
 857 * message.
 858 */
 859
 860pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
 861{
 862	pci_power_t ret;
 863
 864	if (!dev->pm_cap)
 865		return PCI_D0;
 866
 867	ret = platform_pci_choose_state(dev);
 868	if (ret != PCI_POWER_ERROR)
 869		return ret;
 870
 871	switch (state.event) {
 872	case PM_EVENT_ON:
 873		return PCI_D0;
 874	case PM_EVENT_FREEZE:
 875	case PM_EVENT_PRETHAW:
 876		/* REVISIT both freeze and pre-thaw "should" use D0 */
 877	case PM_EVENT_SUSPEND:
 878	case PM_EVENT_HIBERNATE:
 879		return PCI_D3hot;
 880	default:
 881		dev_info(&dev->dev, "unrecognized suspend event %d\n",
 882			 state.event);
 883		BUG();
 884	}
 885	return PCI_D0;
 886}
 887
 888EXPORT_SYMBOL(pci_choose_state);
 889
 890#define PCI_EXP_SAVE_REGS	7
 891
 892
 893static struct pci_cap_saved_state *_pci_find_saved_cap(struct pci_dev *pci_dev,
 894						       u16 cap, bool extended)
 895{
 896	struct pci_cap_saved_state *tmp;
 897
 898	hlist_for_each_entry(tmp, &pci_dev->saved_cap_space, next) {
 899		if (tmp->cap.cap_extended == extended && tmp->cap.cap_nr == cap)
 900			return tmp;
 901	}
 902	return NULL;
 903}
 904
 905struct pci_cap_saved_state *pci_find_saved_cap(struct pci_dev *dev, char cap)
 906{
 907	return _pci_find_saved_cap(dev, cap, false);
 908}
 909
 910struct pci_cap_saved_state *pci_find_saved_ext_cap(struct pci_dev *dev, u16 cap)
 911{
 912	return _pci_find_saved_cap(dev, cap, true);
 913}
 914
 915static int pci_save_pcie_state(struct pci_dev *dev)
 916{
 917	int i = 0;
 918	struct pci_cap_saved_state *save_state;
 919	u16 *cap;
 
 920
 921	if (!pci_is_pcie(dev))
 
 922		return 0;
 923
 924	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 925	if (!save_state) {
 926		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 927		return -ENOMEM;
 928	}
 
 929
 930	cap = (u16 *)&save_state->cap.data[0];
 931	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &cap[i++]);
 932	pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &cap[i++]);
 933	pcie_capability_read_word(dev, PCI_EXP_SLTCTL, &cap[i++]);
 934	pcie_capability_read_word(dev, PCI_EXP_RTCTL,  &cap[i++]);
 935	pcie_capability_read_word(dev, PCI_EXP_DEVCTL2, &cap[i++]);
 936	pcie_capability_read_word(dev, PCI_EXP_LNKCTL2, &cap[i++]);
 937	pcie_capability_read_word(dev, PCI_EXP_SLTCTL2, &cap[i++]);
 
 
 
 
 
 
 
 
 938
 939	return 0;
 940}
 941
 942static void pci_restore_pcie_state(struct pci_dev *dev)
 943{
 944	int i = 0;
 945	struct pci_cap_saved_state *save_state;
 946	u16 *cap;
 
 947
 948	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 949	if (!save_state)
 
 950		return;
 
 951
 952	cap = (u16 *)&save_state->cap.data[0];
 953	pcie_capability_write_word(dev, PCI_EXP_DEVCTL, cap[i++]);
 954	pcie_capability_write_word(dev, PCI_EXP_LNKCTL, cap[i++]);
 955	pcie_capability_write_word(dev, PCI_EXP_SLTCTL, cap[i++]);
 956	pcie_capability_write_word(dev, PCI_EXP_RTCTL, cap[i++]);
 957	pcie_capability_write_word(dev, PCI_EXP_DEVCTL2, cap[i++]);
 958	pcie_capability_write_word(dev, PCI_EXP_LNKCTL2, cap[i++]);
 959	pcie_capability_write_word(dev, PCI_EXP_SLTCTL2, cap[i++]);
 
 
 
 
 
 
 
 
 960}
 961
 962
 963static int pci_save_pcix_state(struct pci_dev *dev)
 964{
 965	int pos;
 966	struct pci_cap_saved_state *save_state;
 967
 968	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 969	if (pos <= 0)
 970		return 0;
 971
 972	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 973	if (!save_state) {
 974		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 975		return -ENOMEM;
 976	}
 977
 978	pci_read_config_word(dev, pos + PCI_X_CMD,
 979			     (u16 *)save_state->cap.data);
 980
 981	return 0;
 982}
 983
 984static void pci_restore_pcix_state(struct pci_dev *dev)
 985{
 986	int i = 0, pos;
 987	struct pci_cap_saved_state *save_state;
 988	u16 *cap;
 989
 990	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 991	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 992	if (!save_state || pos <= 0)
 993		return;
 994	cap = (u16 *)&save_state->cap.data[0];
 995
 996	pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]);
 997}
 998
 999
1000/**
1001 * pci_save_state - save the PCI configuration space of a device before suspending
1002 * @dev: - PCI device that we're dealing with
1003 */
1004int
1005pci_save_state(struct pci_dev *dev)
1006{
1007	int i;
1008	/* XXX: 100% dword access ok here? */
1009	for (i = 0; i < 16; i++)
1010		pci_read_config_dword(dev, i * 4, &dev->saved_config_space[i]);
1011	dev->state_saved = true;
1012	if ((i = pci_save_pcie_state(dev)) != 0)
1013		return i;
1014	if ((i = pci_save_pcix_state(dev)) != 0)
1015		return i;
1016	if ((i = pci_save_vc_state(dev)) != 0)
1017		return i;
1018	return 0;
1019}
1020
1021static void pci_restore_config_dword(struct pci_dev *pdev, int offset,
1022				     u32 saved_val, int retry)
1023{
1024	u32 val;
1025
1026	pci_read_config_dword(pdev, offset, &val);
1027	if (val == saved_val)
1028		return;
1029
1030	for (;;) {
1031		dev_dbg(&pdev->dev, "restoring config space at offset "
1032			"%#x (was %#x, writing %#x)\n", offset, val, saved_val);
1033		pci_write_config_dword(pdev, offset, saved_val);
1034		if (retry-- <= 0)
1035			return;
1036
1037		pci_read_config_dword(pdev, offset, &val);
1038		if (val == saved_val)
1039			return;
1040
1041		mdelay(1);
1042	}
1043}
1044
1045static void pci_restore_config_space_range(struct pci_dev *pdev,
1046					   int start, int end, int retry)
1047{
1048	int index;
1049
1050	for (index = end; index >= start; index--)
1051		pci_restore_config_dword(pdev, 4 * index,
1052					 pdev->saved_config_space[index],
1053					 retry);
1054}
1055
1056static void pci_restore_config_space(struct pci_dev *pdev)
1057{
1058	if (pdev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
1059		pci_restore_config_space_range(pdev, 10, 15, 0);
1060		/* Restore BARs before the command register. */
1061		pci_restore_config_space_range(pdev, 4, 9, 10);
1062		pci_restore_config_space_range(pdev, 0, 3, 0);
1063	} else {
1064		pci_restore_config_space_range(pdev, 0, 15, 0);
1065	}
1066}
1067
1068/**
1069 * pci_restore_state - Restore the saved state of a PCI device
1070 * @dev: - PCI device that we're dealing with
1071 */
1072void pci_restore_state(struct pci_dev *dev)
1073{
 
 
 
1074	if (!dev->state_saved)
1075		return;
1076
1077	/* PCI Express register must be restored first */
1078	pci_restore_pcie_state(dev);
1079	pci_restore_ats_state(dev);
1080	pci_restore_vc_state(dev);
1081
1082	pci_restore_config_space(dev);
1083
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1084	pci_restore_pcix_state(dev);
1085	pci_restore_msi_state(dev);
1086	pci_restore_iov_state(dev);
1087
1088	dev->state_saved = false;
1089}
1090
1091struct pci_saved_state {
1092	u32 config_space[16];
1093	struct pci_cap_saved_data cap[0];
1094};
1095
1096/**
1097 * pci_store_saved_state - Allocate and return an opaque struct containing
1098 *			   the device saved state.
1099 * @dev: PCI device that we're dealing with
1100 *
1101 * Return NULL if no state or error.
1102 */
1103struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)
1104{
1105	struct pci_saved_state *state;
1106	struct pci_cap_saved_state *tmp;
1107	struct pci_cap_saved_data *cap;
 
1108	size_t size;
1109
1110	if (!dev->state_saved)
1111		return NULL;
1112
1113	size = sizeof(*state) + sizeof(struct pci_cap_saved_data);
1114
1115	hlist_for_each_entry(tmp, &dev->saved_cap_space, next)
1116		size += sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1117
1118	state = kzalloc(size, GFP_KERNEL);
1119	if (!state)
1120		return NULL;
1121
1122	memcpy(state->config_space, dev->saved_config_space,
1123	       sizeof(state->config_space));
1124
1125	cap = state->cap;
1126	hlist_for_each_entry(tmp, &dev->saved_cap_space, next) {
1127		size_t len = sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1128		memcpy(cap, &tmp->cap, len);
1129		cap = (struct pci_cap_saved_data *)((u8 *)cap + len);
1130	}
1131	/* Empty cap_save terminates list */
1132
1133	return state;
1134}
1135EXPORT_SYMBOL_GPL(pci_store_saved_state);
1136
1137/**
1138 * pci_load_saved_state - Reload the provided save state into struct pci_dev.
1139 * @dev: PCI device that we're dealing with
1140 * @state: Saved state returned from pci_store_saved_state()
1141 */
1142static int pci_load_saved_state(struct pci_dev *dev,
1143				struct pci_saved_state *state)
1144{
1145	struct pci_cap_saved_data *cap;
1146
1147	dev->state_saved = false;
1148
1149	if (!state)
1150		return 0;
1151
1152	memcpy(dev->saved_config_space, state->config_space,
1153	       sizeof(state->config_space));
1154
1155	cap = state->cap;
1156	while (cap->size) {
1157		struct pci_cap_saved_state *tmp;
1158
1159		tmp = _pci_find_saved_cap(dev, cap->cap_nr, cap->cap_extended);
1160		if (!tmp || tmp->cap.size != cap->size)
1161			return -EINVAL;
1162
1163		memcpy(tmp->cap.data, cap->data, tmp->cap.size);
1164		cap = (struct pci_cap_saved_data *)((u8 *)cap +
1165		       sizeof(struct pci_cap_saved_data) + cap->size);
1166	}
1167
1168	dev->state_saved = true;
1169	return 0;
1170}
 
1171
1172/**
1173 * pci_load_and_free_saved_state - Reload the save state pointed to by state,
1174 *				   and free the memory allocated for it.
1175 * @dev: PCI device that we're dealing with
1176 * @state: Pointer to saved state returned from pci_store_saved_state()
1177 */
1178int pci_load_and_free_saved_state(struct pci_dev *dev,
1179				  struct pci_saved_state **state)
1180{
1181	int ret = pci_load_saved_state(dev, *state);
1182	kfree(*state);
1183	*state = NULL;
1184	return ret;
1185}
1186EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state);
1187
1188int __weak pcibios_enable_device(struct pci_dev *dev, int bars)
1189{
1190	return pci_enable_resources(dev, bars);
1191}
1192
1193static int do_pci_enable_device(struct pci_dev *dev, int bars)
1194{
1195	int err;
1196	u16 cmd;
1197	u8 pin;
1198
1199	err = pci_set_power_state(dev, PCI_D0);
1200	if (err < 0 && err != -EIO)
1201		return err;
1202	err = pcibios_enable_device(dev, bars);
1203	if (err < 0)
1204		return err;
1205	pci_fixup_device(pci_fixup_enable, dev);
1206
1207	if (dev->msi_enabled || dev->msix_enabled)
1208		return 0;
1209
1210	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
1211	if (pin) {
1212		pci_read_config_word(dev, PCI_COMMAND, &cmd);
1213		if (cmd & PCI_COMMAND_INTX_DISABLE)
1214			pci_write_config_word(dev, PCI_COMMAND,
1215					      cmd & ~PCI_COMMAND_INTX_DISABLE);
1216	}
1217
1218	return 0;
1219}
1220
1221/**
1222 * pci_reenable_device - Resume abandoned device
1223 * @dev: PCI device to be resumed
1224 *
1225 *  Note this function is a backend of pci_default_resume and is not supposed
1226 *  to be called by normal code, write proper resume handler and use it instead.
1227 */
1228int pci_reenable_device(struct pci_dev *dev)
1229{
1230	if (pci_is_enabled(dev))
1231		return do_pci_enable_device(dev, (1 << PCI_NUM_RESOURCES) - 1);
1232	return 0;
1233}
1234
1235static void pci_enable_bridge(struct pci_dev *dev)
 
1236{
1237	struct pci_dev *bridge;
1238	int retval;
1239
1240	bridge = pci_upstream_bridge(dev);
1241	if (bridge)
1242		pci_enable_bridge(bridge);
1243
1244	if (pci_is_enabled(dev)) {
1245		if (!dev->is_busmaster)
1246			pci_set_master(dev);
1247		return;
1248	}
1249
1250	retval = pci_enable_device(dev);
1251	if (retval)
1252		dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
1253			retval);
1254	pci_set_master(dev);
1255}
1256
1257static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
1258{
1259	struct pci_dev *bridge;
1260	int err;
1261	int i, bars = 0;
1262
1263	/*
1264	 * Power state could be unknown at this point, either due to a fresh
1265	 * boot or a device removal call.  So get the current power state
1266	 * so that things like MSI message writing will behave as expected
1267	 * (e.g. if the device really is in D0 at enable time).
1268	 */
1269	if (dev->pm_cap) {
1270		u16 pmcsr;
1271		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1272		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
1273	}
1274
1275	if (atomic_inc_return(&dev->enable_cnt) > 1)
1276		return 0;		/* already enabled */
1277
1278	bridge = pci_upstream_bridge(dev);
1279	if (bridge)
1280		pci_enable_bridge(bridge);
1281
1282	/* only skip sriov related */
1283	for (i = 0; i <= PCI_ROM_RESOURCE; i++)
1284		if (dev->resource[i].flags & flags)
1285			bars |= (1 << i);
1286	for (i = PCI_BRIDGE_RESOURCES; i < DEVICE_COUNT_RESOURCE; i++)
1287		if (dev->resource[i].flags & flags)
1288			bars |= (1 << i);
1289
1290	err = do_pci_enable_device(dev, bars);
1291	if (err < 0)
1292		atomic_dec(&dev->enable_cnt);
1293	return err;
1294}
1295
1296/**
1297 * pci_enable_device_io - Initialize a device for use with IO space
1298 * @dev: PCI device to be initialized
1299 *
1300 *  Initialize device before it's used by a driver. Ask low-level code
1301 *  to enable I/O resources. Wake up the device if it was suspended.
1302 *  Beware, this function can fail.
1303 */
1304int pci_enable_device_io(struct pci_dev *dev)
1305{
1306	return pci_enable_device_flags(dev, IORESOURCE_IO);
1307}
1308
1309/**
1310 * pci_enable_device_mem - Initialize a device for use with Memory space
1311 * @dev: PCI device to be initialized
1312 *
1313 *  Initialize device before it's used by a driver. Ask low-level code
1314 *  to enable Memory resources. Wake up the device if it was suspended.
1315 *  Beware, this function can fail.
1316 */
1317int pci_enable_device_mem(struct pci_dev *dev)
1318{
1319	return pci_enable_device_flags(dev, IORESOURCE_MEM);
1320}
1321
1322/**
1323 * pci_enable_device - Initialize device before it's used by a driver.
1324 * @dev: PCI device to be initialized
1325 *
1326 *  Initialize device before it's used by a driver. Ask low-level code
1327 *  to enable I/O and memory. Wake up the device if it was suspended.
1328 *  Beware, this function can fail.
1329 *
1330 *  Note we don't actually enable the device many times if we call
1331 *  this function repeatedly (we just increment the count).
1332 */
1333int pci_enable_device(struct pci_dev *dev)
1334{
1335	return pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
1336}
1337
1338/*
1339 * Managed PCI resources.  This manages device on/off, intx/msi/msix
1340 * on/off and BAR regions.  pci_dev itself records msi/msix status, so
1341 * there's no need to track it separately.  pci_devres is initialized
1342 * when a device is enabled using managed PCI device enable interface.
1343 */
1344struct pci_devres {
1345	unsigned int enabled:1;
1346	unsigned int pinned:1;
1347	unsigned int orig_intx:1;
1348	unsigned int restore_intx:1;
1349	u32 region_mask;
1350};
1351
1352static void pcim_release(struct device *gendev, void *res)
1353{
1354	struct pci_dev *dev = container_of(gendev, struct pci_dev, dev);
1355	struct pci_devres *this = res;
1356	int i;
1357
1358	if (dev->msi_enabled)
1359		pci_disable_msi(dev);
1360	if (dev->msix_enabled)
1361		pci_disable_msix(dev);
1362
1363	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
1364		if (this->region_mask & (1 << i))
1365			pci_release_region(dev, i);
1366
1367	if (this->restore_intx)
1368		pci_intx(dev, this->orig_intx);
1369
1370	if (this->enabled && !this->pinned)
1371		pci_disable_device(dev);
1372}
1373
1374static struct pci_devres * get_pci_dr(struct pci_dev *pdev)
1375{
1376	struct pci_devres *dr, *new_dr;
1377
1378	dr = devres_find(&pdev->dev, pcim_release, NULL, NULL);
1379	if (dr)
1380		return dr;
1381
1382	new_dr = devres_alloc(pcim_release, sizeof(*new_dr), GFP_KERNEL);
1383	if (!new_dr)
1384		return NULL;
1385	return devres_get(&pdev->dev, new_dr, NULL, NULL);
1386}
1387
1388static struct pci_devres * find_pci_dr(struct pci_dev *pdev)
1389{
1390	if (pci_is_managed(pdev))
1391		return devres_find(&pdev->dev, pcim_release, NULL, NULL);
1392	return NULL;
1393}
1394
1395/**
1396 * pcim_enable_device - Managed pci_enable_device()
1397 * @pdev: PCI device to be initialized
1398 *
1399 * Managed pci_enable_device().
1400 */
1401int pcim_enable_device(struct pci_dev *pdev)
1402{
1403	struct pci_devres *dr;
1404	int rc;
1405
1406	dr = get_pci_dr(pdev);
1407	if (unlikely(!dr))
1408		return -ENOMEM;
1409	if (dr->enabled)
1410		return 0;
1411
1412	rc = pci_enable_device(pdev);
1413	if (!rc) {
1414		pdev->is_managed = 1;
1415		dr->enabled = 1;
1416	}
1417	return rc;
1418}
1419
1420/**
1421 * pcim_pin_device - Pin managed PCI device
1422 * @pdev: PCI device to pin
1423 *
1424 * Pin managed PCI device @pdev.  Pinned device won't be disabled on
1425 * driver detach.  @pdev must have been enabled with
1426 * pcim_enable_device().
1427 */
1428void pcim_pin_device(struct pci_dev *pdev)
1429{
1430	struct pci_devres *dr;
1431
1432	dr = find_pci_dr(pdev);
1433	WARN_ON(!dr || !dr->enabled);
1434	if (dr)
1435		dr->pinned = 1;
1436}
1437
1438/*
1439 * pcibios_add_device - provide arch specific hooks when adding device dev
1440 * @dev: the PCI device being added
1441 *
1442 * Permits the platform to provide architecture specific functionality when
1443 * devices are added. This is the default implementation. Architecture
1444 * implementations can override this.
1445 */
1446int __weak pcibios_add_device (struct pci_dev *dev)
1447{
1448	return 0;
1449}
1450
1451/**
1452 * pcibios_release_device - provide arch specific hooks when releasing device dev
1453 * @dev: the PCI device being released
1454 *
1455 * Permits the platform to provide architecture specific functionality when
1456 * devices are released. This is the default implementation. Architecture
1457 * implementations can override this.
1458 */
1459void __weak pcibios_release_device(struct pci_dev *dev) {}
1460
1461/**
1462 * pcibios_disable_device - disable arch specific PCI resources for device dev
1463 * @dev: the PCI device to disable
1464 *
1465 * Disables architecture specific PCI resources for the device. This
1466 * is the default implementation. Architecture implementations can
1467 * override this.
1468 */
1469void __weak pcibios_disable_device (struct pci_dev *dev) {}
1470
1471static void do_pci_disable_device(struct pci_dev *dev)
1472{
1473	u16 pci_command;
1474
1475	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
1476	if (pci_command & PCI_COMMAND_MASTER) {
1477		pci_command &= ~PCI_COMMAND_MASTER;
1478		pci_write_config_word(dev, PCI_COMMAND, pci_command);
1479	}
1480
1481	pcibios_disable_device(dev);
1482}
1483
1484/**
1485 * pci_disable_enabled_device - Disable device without updating enable_cnt
1486 * @dev: PCI device to disable
1487 *
1488 * NOTE: This function is a backend of PCI power management routines and is
1489 * not supposed to be called drivers.
1490 */
1491void pci_disable_enabled_device(struct pci_dev *dev)
1492{
1493	if (pci_is_enabled(dev))
1494		do_pci_disable_device(dev);
1495}
1496
1497/**
1498 * pci_disable_device - Disable PCI device after use
1499 * @dev: PCI device to be disabled
1500 *
1501 * Signal to the system that the PCI device is not in use by the system
1502 * anymore.  This only involves disabling PCI bus-mastering, if active.
1503 *
1504 * Note we don't actually disable the device until all callers of
1505 * pci_enable_device() have called pci_disable_device().
1506 */
1507void
1508pci_disable_device(struct pci_dev *dev)
1509{
1510	struct pci_devres *dr;
1511
1512	dr = find_pci_dr(dev);
1513	if (dr)
1514		dr->enabled = 0;
1515
1516	dev_WARN_ONCE(&dev->dev, atomic_read(&dev->enable_cnt) <= 0,
1517		      "disabling already-disabled device");
1518
1519	if (atomic_dec_return(&dev->enable_cnt) != 0)
1520		return;
1521
1522	do_pci_disable_device(dev);
1523
1524	dev->is_busmaster = 0;
1525}
1526
1527/**
1528 * pcibios_set_pcie_reset_state - set reset state for device dev
1529 * @dev: the PCIe device reset
1530 * @state: Reset state to enter into
1531 *
1532 *
1533 * Sets the PCIe reset state for the device. This is the default
1534 * implementation. Architecture implementations can override this.
1535 */
1536int __weak pcibios_set_pcie_reset_state(struct pci_dev *dev,
1537					enum pcie_reset_state state)
1538{
1539	return -EINVAL;
1540}
1541
1542/**
1543 * pci_set_pcie_reset_state - set reset state for device dev
1544 * @dev: the PCIe device reset
1545 * @state: Reset state to enter into
1546 *
1547 *
1548 * Sets the PCI reset state for the device.
1549 */
1550int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)
1551{
1552	return pcibios_set_pcie_reset_state(dev, state);
1553}
1554
1555/**
1556 * pci_check_pme_status - Check if given device has generated PME.
1557 * @dev: Device to check.
1558 *
1559 * Check the PME status of the device and if set, clear it and clear PME enable
1560 * (if set).  Return 'true' if PME status and PME enable were both set or
1561 * 'false' otherwise.
1562 */
1563bool pci_check_pme_status(struct pci_dev *dev)
1564{
1565	int pmcsr_pos;
1566	u16 pmcsr;
1567	bool ret = false;
1568
1569	if (!dev->pm_cap)
1570		return false;
1571
1572	pmcsr_pos = dev->pm_cap + PCI_PM_CTRL;
1573	pci_read_config_word(dev, pmcsr_pos, &pmcsr);
1574	if (!(pmcsr & PCI_PM_CTRL_PME_STATUS))
1575		return false;
1576
1577	/* Clear PME status. */
1578	pmcsr |= PCI_PM_CTRL_PME_STATUS;
1579	if (pmcsr & PCI_PM_CTRL_PME_ENABLE) {
1580		/* Disable PME to avoid interrupt flood. */
1581		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1582		ret = true;
1583	}
1584
1585	pci_write_config_word(dev, pmcsr_pos, pmcsr);
1586
1587	return ret;
1588}
1589
1590/**
1591 * pci_pme_wakeup - Wake up a PCI device if its PME Status bit is set.
1592 * @dev: Device to handle.
1593 * @pme_poll_reset: Whether or not to reset the device's pme_poll flag.
1594 *
1595 * Check if @dev has generated PME and queue a resume request for it in that
1596 * case.
1597 */
1598static int pci_pme_wakeup(struct pci_dev *dev, void *pme_poll_reset)
1599{
1600	if (pme_poll_reset && dev->pme_poll)
1601		dev->pme_poll = false;
1602
1603	if (pci_check_pme_status(dev)) {
1604		pci_wakeup_event(dev);
1605		pm_request_resume(&dev->dev);
1606	}
1607	return 0;
1608}
1609
1610/**
1611 * pci_pme_wakeup_bus - Walk given bus and wake up devices on it, if necessary.
1612 * @bus: Top bus of the subtree to walk.
1613 */
1614void pci_pme_wakeup_bus(struct pci_bus *bus)
1615{
1616	if (bus)
1617		pci_walk_bus(bus, pci_pme_wakeup, (void *)true);
1618}
1619
1620
1621/**
1622 * pci_pme_capable - check the capability of PCI device to generate PME#
1623 * @dev: PCI device to handle.
1624 * @state: PCI state from which device will issue PME#.
1625 */
1626bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)
1627{
1628	if (!dev->pm_cap)
1629		return false;
1630
1631	return !!(dev->pme_support & (1 << state));
1632}
1633
1634static void pci_pme_list_scan(struct work_struct *work)
1635{
1636	struct pci_pme_device *pme_dev, *n;
1637
1638	mutex_lock(&pci_pme_list_mutex);
1639	list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) {
1640		if (pme_dev->dev->pme_poll) {
1641			struct pci_dev *bridge;
1642
1643			bridge = pme_dev->dev->bus->self;
1644			/*
1645			 * If bridge is in low power state, the
1646			 * configuration space of subordinate devices
1647			 * may be not accessible
1648			 */
1649			if (bridge && bridge->current_state != PCI_D0)
1650				continue;
1651			pci_pme_wakeup(pme_dev->dev, NULL);
1652		} else {
1653			list_del(&pme_dev->list);
1654			kfree(pme_dev);
1655		}
1656	}
1657	if (!list_empty(&pci_pme_list))
1658		schedule_delayed_work(&pci_pme_work,
1659				      msecs_to_jiffies(PME_TIMEOUT));
1660	mutex_unlock(&pci_pme_list_mutex);
1661}
1662
1663/**
 
 
 
 
 
 
 
 
 
 
 
 
 
1664 * pci_pme_active - enable or disable PCI device's PME# function
1665 * @dev: PCI device to handle.
1666 * @enable: 'true' to enable PME# generation; 'false' to disable it.
1667 *
1668 * The caller must verify that the device is capable of generating PME# before
1669 * calling this function with @enable equal to 'true'.
1670 */
1671void pci_pme_active(struct pci_dev *dev, bool enable)
1672{
1673	u16 pmcsr;
1674
1675	if (!dev->pme_support)
1676		return;
1677
1678	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1679	/* Clear PME_Status by writing 1 to it and enable PME# */
1680	pmcsr |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE;
1681	if (!enable)
1682		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1683
1684	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
1685
1686	/*
1687	 * PCI (as opposed to PCIe) PME requires that the device have
1688	 * its PME# line hooked up correctly. Not all hardware vendors
1689	 * do this, so the PME never gets delivered and the device
1690	 * remains asleep. The easiest way around this is to
1691	 * periodically walk the list of suspended devices and check
1692	 * whether any have their PME flag set. The assumption is that
1693	 * we'll wake up often enough anyway that this won't be a huge
1694	 * hit, and the power savings from the devices will still be a
1695	 * win.
1696	 *
1697	 * Although PCIe uses in-band PME message instead of PME# line
1698	 * to report PME, PME does not work for some PCIe devices in
1699	 * reality.  For example, there are devices that set their PME
1700	 * status bits, but don't really bother to send a PME message;
1701	 * there are PCI Express Root Ports that don't bother to
1702	 * trigger interrupts when they receive PME messages from the
1703	 * devices below.  So PME poll is used for PCIe devices too.
1704	 */
1705
1706	if (dev->pme_poll) {
1707		struct pci_pme_device *pme_dev;
1708		if (enable) {
1709			pme_dev = kmalloc(sizeof(struct pci_pme_device),
1710					  GFP_KERNEL);
1711			if (!pme_dev) {
1712				dev_warn(&dev->dev, "can't enable PME#\n");
1713				return;
1714			}
1715			pme_dev->dev = dev;
1716			mutex_lock(&pci_pme_list_mutex);
1717			list_add(&pme_dev->list, &pci_pme_list);
1718			if (list_is_singular(&pci_pme_list))
1719				schedule_delayed_work(&pci_pme_work,
1720						      msecs_to_jiffies(PME_TIMEOUT));
1721			mutex_unlock(&pci_pme_list_mutex);
1722		} else {
1723			mutex_lock(&pci_pme_list_mutex);
1724			list_for_each_entry(pme_dev, &pci_pme_list, list) {
1725				if (pme_dev->dev == dev) {
1726					list_del(&pme_dev->list);
1727					kfree(pme_dev);
1728					break;
1729				}
1730			}
1731			mutex_unlock(&pci_pme_list_mutex);
1732		}
1733	}
1734
1735	dev_dbg(&dev->dev, "PME# %s\n", enable ? "enabled" : "disabled");
 
 
1736}
1737
1738/**
1739 * __pci_enable_wake - enable PCI device as wakeup event source
1740 * @dev: PCI device affected
1741 * @state: PCI state from which device will issue wakeup events
1742 * @runtime: True if the events are to be generated at run time
1743 * @enable: True to enable event generation; false to disable
1744 *
1745 * This enables the device as a wakeup event source, or disables it.
1746 * When such events involves platform-specific hooks, those hooks are
1747 * called automatically by this routine.
1748 *
1749 * Devices with legacy power management (no standard PCI PM capabilities)
1750 * always require such platform hooks.
1751 *
1752 * RETURN VALUE:
1753 * 0 is returned on success
1754 * -EINVAL is returned if device is not supposed to wake up the system
1755 * Error code depending on the platform is returned if both the platform and
1756 * the native mechanism fail to enable the generation of wake-up events
1757 */
1758int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1759		      bool runtime, bool enable)
1760{
1761	int ret = 0;
1762
1763	if (enable && !runtime && !device_may_wakeup(&dev->dev))
1764		return -EINVAL;
1765
1766	/* Don't do the same thing twice in a row for one device. */
1767	if (!!enable == !!dev->wakeup_prepared)
1768		return 0;
1769
1770	/*
1771	 * According to "PCI System Architecture" 4th ed. by Tom Shanley & Don
1772	 * Anderson we should be doing PME# wake enable followed by ACPI wake
1773	 * enable.  To disable wake-up we call the platform first, for symmetry.
1774	 */
1775
1776	if (enable) {
1777		int error;
1778
1779		if (pci_pme_capable(dev, state))
1780			pci_pme_active(dev, true);
1781		else
1782			ret = 1;
1783		error = runtime ? platform_pci_run_wake(dev, true) :
1784					platform_pci_sleep_wake(dev, true);
1785		if (ret)
1786			ret = error;
1787		if (!ret)
1788			dev->wakeup_prepared = true;
1789	} else {
1790		if (runtime)
1791			platform_pci_run_wake(dev, false);
1792		else
1793			platform_pci_sleep_wake(dev, false);
1794		pci_pme_active(dev, false);
1795		dev->wakeup_prepared = false;
1796	}
1797
1798	return ret;
1799}
1800EXPORT_SYMBOL(__pci_enable_wake);
1801
1802/**
1803 * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold
1804 * @dev: PCI device to prepare
1805 * @enable: True to enable wake-up event generation; false to disable
1806 *
1807 * Many drivers want the device to wake up the system from D3_hot or D3_cold
1808 * and this function allows them to set that up cleanly - pci_enable_wake()
1809 * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI
1810 * ordering constraints.
1811 *
1812 * This function only returns error code if the device is not capable of
1813 * generating PME# from both D3_hot and D3_cold, and the platform is unable to
1814 * enable wake-up power for it.
1815 */
1816int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1817{
1818	return pci_pme_capable(dev, PCI_D3cold) ?
1819			pci_enable_wake(dev, PCI_D3cold, enable) :
1820			pci_enable_wake(dev, PCI_D3hot, enable);
1821}
1822
1823/**
1824 * pci_target_state - find an appropriate low power state for a given PCI dev
1825 * @dev: PCI device
1826 *
1827 * Use underlying platform code to find a supported low power state for @dev.
1828 * If the platform can't manage @dev, return the deepest state from which it
1829 * can generate wake events, based on any available PME info.
1830 */
1831static pci_power_t pci_target_state(struct pci_dev *dev)
1832{
1833	pci_power_t target_state = PCI_D3hot;
1834
1835	if (platform_pci_power_manageable(dev)) {
1836		/*
1837		 * Call the platform to choose the target state of the device
1838		 * and enable wake-up from this state if supported.
1839		 */
1840		pci_power_t state = platform_pci_choose_state(dev);
1841
1842		switch (state) {
1843		case PCI_POWER_ERROR:
1844		case PCI_UNKNOWN:
1845			break;
1846		case PCI_D1:
1847		case PCI_D2:
1848			if (pci_no_d1d2(dev))
1849				break;
1850		default:
1851			target_state = state;
1852		}
1853	} else if (!dev->pm_cap) {
1854		target_state = PCI_D0;
1855	} else if (device_may_wakeup(&dev->dev)) {
1856		/*
1857		 * Find the deepest state from which the device can generate
1858		 * wake-up events, make it the target state and enable device
1859		 * to generate PME#.
1860		 */
1861		if (dev->pme_support) {
1862			while (target_state
1863			      && !(dev->pme_support & (1 << target_state)))
1864				target_state--;
1865		}
1866	}
1867
1868	return target_state;
1869}
1870
1871/**
1872 * pci_prepare_to_sleep - prepare PCI device for system-wide transition into a sleep state
1873 * @dev: Device to handle.
1874 *
1875 * Choose the power state appropriate for the device depending on whether
1876 * it can wake up the system and/or is power manageable by the platform
1877 * (PCI_D3hot is the default) and put the device into that state.
1878 */
1879int pci_prepare_to_sleep(struct pci_dev *dev)
1880{
1881	pci_power_t target_state = pci_target_state(dev);
1882	int error;
1883
1884	if (target_state == PCI_POWER_ERROR)
1885		return -EIO;
1886
1887	/* D3cold during system suspend/hibernate is not supported */
1888	if (target_state > PCI_D3hot)
1889		target_state = PCI_D3hot;
1890
1891	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
1892
1893	error = pci_set_power_state(dev, target_state);
1894
1895	if (error)
1896		pci_enable_wake(dev, target_state, false);
1897
1898	return error;
1899}
1900
1901/**
1902 * pci_back_from_sleep - turn PCI device on during system-wide transition into working state
1903 * @dev: Device to handle.
1904 *
1905 * Disable device's system wake-up capability and put it into D0.
1906 */
1907int pci_back_from_sleep(struct pci_dev *dev)
1908{
1909	pci_enable_wake(dev, PCI_D0, false);
1910	return pci_set_power_state(dev, PCI_D0);
1911}
1912
1913/**
1914 * pci_finish_runtime_suspend - Carry out PCI-specific part of runtime suspend.
1915 * @dev: PCI device being suspended.
1916 *
1917 * Prepare @dev to generate wake-up events at run time and put it into a low
1918 * power state.
1919 */
1920int pci_finish_runtime_suspend(struct pci_dev *dev)
1921{
1922	pci_power_t target_state = pci_target_state(dev);
1923	int error;
1924
1925	if (target_state == PCI_POWER_ERROR)
1926		return -EIO;
1927
1928	dev->runtime_d3cold = target_state == PCI_D3cold;
1929
1930	__pci_enable_wake(dev, target_state, true, pci_dev_run_wake(dev));
1931
1932	error = pci_set_power_state(dev, target_state);
1933
1934	if (error) {
1935		__pci_enable_wake(dev, target_state, true, false);
1936		dev->runtime_d3cold = false;
1937	}
1938
1939	return error;
1940}
1941
1942/**
1943 * pci_dev_run_wake - Check if device can generate run-time wake-up events.
1944 * @dev: Device to check.
1945 *
1946 * Return true if the device itself is capable of generating wake-up events
1947 * (through the platform or using the native PCIe PME) or if the device supports
1948 * PME and one of its upstream bridges can generate wake-up events.
1949 */
1950bool pci_dev_run_wake(struct pci_dev *dev)
1951{
1952	struct pci_bus *bus = dev->bus;
1953
1954	if (device_run_wake(&dev->dev))
1955		return true;
1956
1957	if (!dev->pme_support)
1958		return false;
1959
1960	while (bus->parent) {
1961		struct pci_dev *bridge = bus->self;
1962
1963		if (device_run_wake(&bridge->dev))
1964			return true;
1965
1966		bus = bus->parent;
1967	}
1968
1969	/* We have reached the root bus. */
1970	if (bus->bridge)
1971		return device_run_wake(bus->bridge);
1972
1973	return false;
1974}
1975EXPORT_SYMBOL_GPL(pci_dev_run_wake);
1976
1977void pci_config_pm_runtime_get(struct pci_dev *pdev)
1978{
1979	struct device *dev = &pdev->dev;
1980	struct device *parent = dev->parent;
1981
1982	if (parent)
1983		pm_runtime_get_sync(parent);
1984	pm_runtime_get_noresume(dev);
1985	/*
1986	 * pdev->current_state is set to PCI_D3cold during suspending,
1987	 * so wait until suspending completes
1988	 */
1989	pm_runtime_barrier(dev);
1990	/*
1991	 * Only need to resume devices in D3cold, because config
1992	 * registers are still accessible for devices suspended but
1993	 * not in D3cold.
1994	 */
1995	if (pdev->current_state == PCI_D3cold)
1996		pm_runtime_resume(dev);
1997}
1998
1999void pci_config_pm_runtime_put(struct pci_dev *pdev)
2000{
2001	struct device *dev = &pdev->dev;
2002	struct device *parent = dev->parent;
2003
2004	pm_runtime_put(dev);
2005	if (parent)
2006		pm_runtime_put_sync(parent);
2007}
2008
2009/**
2010 * pci_pm_init - Initialize PM functions of given PCI device
2011 * @dev: PCI device to handle.
2012 */
2013void pci_pm_init(struct pci_dev *dev)
2014{
2015	int pm;
2016	u16 pmc;
2017
2018	pm_runtime_forbid(&dev->dev);
2019	pm_runtime_set_active(&dev->dev);
2020	pm_runtime_enable(&dev->dev);
2021	device_enable_async_suspend(&dev->dev);
2022	dev->wakeup_prepared = false;
2023
2024	dev->pm_cap = 0;
2025	dev->pme_support = 0;
2026
2027	/* find PCI PM capability in list */
2028	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
2029	if (!pm)
2030		return;
2031	/* Check device's ability to generate PME# */
2032	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
2033
2034	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
2035		dev_err(&dev->dev, "unsupported PM cap regs version (%u)\n",
2036			pmc & PCI_PM_CAP_VER_MASK);
2037		return;
2038	}
2039
2040	dev->pm_cap = pm;
2041	dev->d3_delay = PCI_PM_D3_WAIT;
2042	dev->d3cold_delay = PCI_PM_D3COLD_WAIT;
2043	dev->d3cold_allowed = true;
2044
2045	dev->d1_support = false;
2046	dev->d2_support = false;
2047	if (!pci_no_d1d2(dev)) {
2048		if (pmc & PCI_PM_CAP_D1)
2049			dev->d1_support = true;
2050		if (pmc & PCI_PM_CAP_D2)
2051			dev->d2_support = true;
2052
2053		if (dev->d1_support || dev->d2_support)
2054			dev_printk(KERN_DEBUG, &dev->dev, "supports%s%s\n",
2055				   dev->d1_support ? " D1" : "",
2056				   dev->d2_support ? " D2" : "");
2057	}
2058
2059	pmc &= PCI_PM_CAP_PME_MASK;
2060	if (pmc) {
2061		dev_printk(KERN_DEBUG, &dev->dev,
2062			 "PME# supported from%s%s%s%s%s\n",
2063			 (pmc & PCI_PM_CAP_PME_D0) ? " D0" : "",
2064			 (pmc & PCI_PM_CAP_PME_D1) ? " D1" : "",
2065			 (pmc & PCI_PM_CAP_PME_D2) ? " D2" : "",
2066			 (pmc & PCI_PM_CAP_PME_D3) ? " D3hot" : "",
2067			 (pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : "");
2068		dev->pme_support = pmc >> PCI_PM_CAP_PME_SHIFT;
2069		dev->pme_poll = true;
2070		/*
2071		 * Make device's PM flags reflect the wake-up capability, but
2072		 * let the user space enable it to wake up the system as needed.
2073		 */
2074		device_set_wakeup_capable(&dev->dev, true);
2075		/* Disable the PME# generation functionality */
2076		pci_pme_active(dev, false);
 
 
2077	}
2078}
2079
2080static void pci_add_saved_cap(struct pci_dev *pci_dev,
2081	struct pci_cap_saved_state *new_cap)
 
 
 
 
 
 
 
 
 
2082{
2083	hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
 
 
 
 
2084}
2085
2086/**
2087 * _pci_add_cap_save_buffer - allocate buffer for saving given
2088 *                            capability registers
2089 * @dev: the PCI device
2090 * @cap: the capability to allocate the buffer for
2091 * @extended: Standard or Extended capability ID
2092 * @size: requested size of the buffer
2093 */
2094static int _pci_add_cap_save_buffer(struct pci_dev *dev, u16 cap,
2095				    bool extended, unsigned int size)
2096{
2097	int pos;
2098	struct pci_cap_saved_state *save_state;
2099
2100	if (extended)
2101		pos = pci_find_ext_capability(dev, cap);
2102	else
2103		pos = pci_find_capability(dev, cap);
2104
2105	if (pos <= 0)
2106		return 0;
2107
2108	save_state = kzalloc(sizeof(*save_state) + size, GFP_KERNEL);
2109	if (!save_state)
2110		return -ENOMEM;
2111
2112	save_state->cap.cap_nr = cap;
2113	save_state->cap.cap_extended = extended;
2114	save_state->cap.size = size;
2115	pci_add_saved_cap(dev, save_state);
2116
2117	return 0;
2118}
2119
2120int pci_add_cap_save_buffer(struct pci_dev *dev, char cap, unsigned int size)
2121{
2122	return _pci_add_cap_save_buffer(dev, cap, false, size);
2123}
2124
2125int pci_add_ext_cap_save_buffer(struct pci_dev *dev, u16 cap, unsigned int size)
2126{
2127	return _pci_add_cap_save_buffer(dev, cap, true, size);
2128}
2129
2130/**
2131 * pci_allocate_cap_save_buffers - allocate buffers for saving capabilities
2132 * @dev: the PCI device
2133 */
2134void pci_allocate_cap_save_buffers(struct pci_dev *dev)
2135{
2136	int error;
2137
2138	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_EXP,
2139					PCI_EXP_SAVE_REGS * sizeof(u16));
2140	if (error)
2141		dev_err(&dev->dev,
2142			"unable to preallocate PCI Express save buffer\n");
2143
2144	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_PCIX, sizeof(u16));
2145	if (error)
2146		dev_err(&dev->dev,
2147			"unable to preallocate PCI-X save buffer\n");
2148
2149	pci_allocate_vc_save_buffers(dev);
2150}
2151
2152void pci_free_cap_save_buffers(struct pci_dev *dev)
2153{
2154	struct pci_cap_saved_state *tmp;
2155	struct hlist_node *n;
2156
2157	hlist_for_each_entry_safe(tmp, n, &dev->saved_cap_space, next)
2158		kfree(tmp);
2159}
2160
2161/**
2162 * pci_configure_ari - enable or disable ARI forwarding
2163 * @dev: the PCI device
2164 *
2165 * If @dev and its upstream bridge both support ARI, enable ARI in the
2166 * bridge.  Otherwise, disable ARI in the bridge.
2167 */
2168void pci_configure_ari(struct pci_dev *dev)
2169{
 
2170	u32 cap;
 
2171	struct pci_dev *bridge;
2172
2173	if (pcie_ari_disabled || !pci_is_pcie(dev) || dev->devfn)
 
 
 
 
2174		return;
2175
2176	bridge = dev->bus->self;
2177	if (!bridge)
 
 
 
 
2178		return;
2179
2180	pcie_capability_read_dword(bridge, PCI_EXP_DEVCAP2, &cap);
 
 
 
 
 
2181	if (!(cap & PCI_EXP_DEVCAP2_ARI))
2182		return;
2183
2184	if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI)) {
2185		pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2,
2186					 PCI_EXP_DEVCTL2_ARI);
2187		bridge->ari_enabled = 1;
2188	} else {
2189		pcie_capability_clear_word(bridge, PCI_EXP_DEVCTL2,
2190					   PCI_EXP_DEVCTL2_ARI);
2191		bridge->ari_enabled = 0;
2192	}
2193}
2194
2195static int pci_acs_enable;
2196
2197/**
2198 * pci_request_acs - ask for ACS to be enabled if supported
 
 
 
 
 
 
2199 */
2200void pci_request_acs(void)
2201{
2202	pci_acs_enable = 1;
 
 
 
 
 
 
 
 
 
 
 
 
2203}
 
2204
2205/**
2206 * pci_std_enable_acs - enable ACS on devices using standard ACS capabilites
2207 * @dev: the PCI device
 
2208 */
2209static int pci_std_enable_acs(struct pci_dev *dev)
2210{
2211	int pos;
2212	u16 cap;
2213	u16 ctrl;
2214
2215	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS);
 
 
 
2216	if (!pos)
2217		return -ENODEV;
2218
2219	pci_read_config_word(dev, pos + PCI_ACS_CAP, &cap);
2220	pci_read_config_word(dev, pos + PCI_ACS_CTRL, &ctrl);
 
 
 
 
 
 
2221
2222	/* Source Validation */
2223	ctrl |= (cap & PCI_ACS_SV);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2224
2225	/* P2P Request Redirect */
2226	ctrl |= (cap & PCI_ACS_RR);
2227
2228	/* P2P Completion Redirect */
2229	ctrl |= (cap & PCI_ACS_CR);
 
2230
2231	/* Upstream Forwarding */
2232	ctrl |= (cap & PCI_ACS_UF);
 
 
 
 
 
 
 
 
2233
2234	pci_write_config_word(dev, pos + PCI_ACS_CTRL, ctrl);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2235
2236	return 0;
2237}
 
2238
2239/**
2240 * pci_enable_acs - enable ACS if hardware support it
2241 * @dev: the PCI device
 
 
2242 */
2243void pci_enable_acs(struct pci_dev *dev)
2244{
2245	if (!pci_acs_enable)
 
 
 
2246		return;
2247
2248	if (!pci_std_enable_acs(dev))
 
2249		return;
2250
2251	pci_dev_specific_enable_acs(dev);
 
 
2252}
 
2253
2254static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags)
 
 
 
 
 
 
 
2255{
2256	int pos;
2257	u16 cap, ctrl;
 
 
 
2258
2259	pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ACS);
2260	if (!pos)
2261		return false;
2262
2263	/*
2264	 * Except for egress control, capabilities are either required
2265	 * or only required if controllable.  Features missing from the
2266	 * capability field can therefore be assumed as hard-wired enabled.
2267	 */
2268	pci_read_config_word(pdev, pos + PCI_ACS_CAP, &cap);
2269	acs_flags &= (cap | PCI_ACS_EC);
2270
2271	pci_read_config_word(pdev, pos + PCI_ACS_CTRL, &ctrl);
2272	return (ctrl & acs_flags) == acs_flags;
2273}
 
2274
2275/**
2276 * pci_acs_enabled - test ACS against required flags for a given device
2277 * @pdev: device to test
2278 * @acs_flags: required PCI ACS flags
2279 *
2280 * Return true if the device supports the provided flags.  Automatically
2281 * filters out flags that are not implemented on multifunction devices.
2282 *
2283 * Note that this interface checks the effective ACS capabilities of the
2284 * device rather than the actual capabilities.  For instance, most single
2285 * function endpoints are not required to support ACS because they have no
2286 * opportunity for peer-to-peer access.  We therefore return 'true'
2287 * regardless of whether the device exposes an ACS capability.  This makes
2288 * it much easier for callers of this function to ignore the actual type
2289 * or topology of the device when testing ACS support.
2290 */
2291bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
2292{
 
 
2293	int ret;
2294
2295	ret = pci_dev_specific_acs_enabled(pdev, acs_flags);
2296	if (ret >= 0)
2297		return ret > 0;
2298
2299	/*
2300	 * Conventional PCI and PCI-X devices never support ACS, either
2301	 * effectively or actually.  The shared bus topology implies that
2302	 * any device on the bus can receive or snoop DMA.
2303	 */
2304	if (!pci_is_pcie(pdev))
2305		return false;
2306
2307	switch (pci_pcie_type(pdev)) {
2308	/*
2309	 * PCI/X-to-PCIe bridges are not specifically mentioned by the spec,
2310	 * but since their primary interface is PCI/X, we conservatively
2311	 * handle them as we would a non-PCIe device.
2312	 */
2313	case PCI_EXP_TYPE_PCIE_BRIDGE:
2314	/*
2315	 * PCIe 3.0, 6.12.1 excludes ACS on these devices.  "ACS is never
2316	 * applicable... must never implement an ACS Extended Capability...".
2317	 * This seems arbitrary, but we take a conservative interpretation
2318	 * of this statement.
2319	 */
2320	case PCI_EXP_TYPE_PCI_BRIDGE:
2321	case PCI_EXP_TYPE_RC_EC:
2322		return false;
2323	/*
2324	 * PCIe 3.0, 6.12.1.1 specifies that downstream and root ports should
2325	 * implement ACS in order to indicate their peer-to-peer capabilities,
2326	 * regardless of whether they are single- or multi-function devices.
2327	 */
2328	case PCI_EXP_TYPE_DOWNSTREAM:
2329	case PCI_EXP_TYPE_ROOT_PORT:
2330		return pci_acs_flags_enabled(pdev, acs_flags);
2331	/*
2332	 * PCIe 3.0, 6.12.1.2 specifies ACS capabilities that should be
2333	 * implemented by the remaining PCIe types to indicate peer-to-peer
2334	 * capabilities, but only when they are part of a multifunction
2335	 * device.  The footnote for section 6.12 indicates the specific
2336	 * PCIe types included here.
2337	 */
2338	case PCI_EXP_TYPE_ENDPOINT:
2339	case PCI_EXP_TYPE_UPSTREAM:
2340	case PCI_EXP_TYPE_LEG_END:
2341	case PCI_EXP_TYPE_RC_END:
2342		if (!pdev->multifunction)
2343			break;
2344
2345		return pci_acs_flags_enabled(pdev, acs_flags);
 
 
 
 
2346	}
2347
2348	/*
2349	 * PCIe 3.0, 6.12.1.3 specifies no ACS capabilities are applicable
2350	 * to single function devices with the exception of downstream ports.
2351	 */
2352	return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2353}
2354
2355/**
2356 * pci_acs_path_enable - test ACS flags from start to end in a hierarchy
2357 * @start: starting downstream device
2358 * @end: ending upstream device or NULL to search to the root bus
2359 * @acs_flags: required flags
2360 *
2361 * Walk up a device tree from start to end testing PCI ACS support.  If
2362 * any step along the way does not support the required flags, return false.
2363 */
2364bool pci_acs_path_enabled(struct pci_dev *start,
2365			  struct pci_dev *end, u16 acs_flags)
2366{
2367	struct pci_dev *pdev, *parent = start;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2368
2369	do {
2370		pdev = parent;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2371
2372		if (!pci_acs_enabled(pdev, acs_flags))
2373			return false;
2374
2375		if (pci_is_root_bus(pdev->bus))
2376			return (end == NULL);
2377
2378		parent = pdev->bus->self;
2379	} while (pdev != end);
2380
2381	return true;
2382}
2383
2384/**
2385 * pci_swizzle_interrupt_pin - swizzle INTx for device behind bridge
2386 * @dev: the PCI device
2387 * @pin: the INTx pin (1=INTA, 2=INTB, 3=INTC, 4=INTD)
2388 *
2389 * Perform INTx swizzling for a device behind one level of bridge.  This is
2390 * required by section 9.1 of the PCI-to-PCI bridge specification for devices
2391 * behind bridges on add-in cards.  For devices with ARI enabled, the slot
2392 * number is always 0 (see the Implementation Note in section 2.2.8.1 of
2393 * the PCI Express Base Specification, Revision 2.1)
2394 */
2395u8 pci_swizzle_interrupt_pin(const struct pci_dev *dev, u8 pin)
2396{
2397	int slot;
2398
2399	if (pci_ari_enabled(dev->bus))
2400		slot = 0;
2401	else
2402		slot = PCI_SLOT(dev->devfn);
2403
2404	return (((pin - 1) + slot) % 4) + 1;
2405}
2406
2407int
2408pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
2409{
2410	u8 pin;
2411
2412	pin = dev->pin;
2413	if (!pin)
2414		return -1;
2415
2416	while (!pci_is_root_bus(dev->bus)) {
2417		pin = pci_swizzle_interrupt_pin(dev, pin);
2418		dev = dev->bus->self;
2419	}
2420	*bridge = dev;
2421	return pin;
2422}
2423
2424/**
2425 * pci_common_swizzle - swizzle INTx all the way to root bridge
2426 * @dev: the PCI device
2427 * @pinp: pointer to the INTx pin value (1=INTA, 2=INTB, 3=INTD, 4=INTD)
2428 *
2429 * Perform INTx swizzling for a device.  This traverses through all PCI-to-PCI
2430 * bridges all the way up to a PCI root bus.
2431 */
2432u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp)
2433{
2434	u8 pin = *pinp;
2435
2436	while (!pci_is_root_bus(dev->bus)) {
2437		pin = pci_swizzle_interrupt_pin(dev, pin);
2438		dev = dev->bus->self;
2439	}
2440	*pinp = pin;
2441	return PCI_SLOT(dev->devfn);
2442}
2443
2444/**
2445 *	pci_release_region - Release a PCI bar
2446 *	@pdev: PCI device whose resources were previously reserved by pci_request_region
2447 *	@bar: BAR to release
2448 *
2449 *	Releases the PCI I/O and memory resources previously reserved by a
2450 *	successful call to pci_request_region.  Call this function only
2451 *	after all use of the PCI regions has ceased.
2452 */
2453void pci_release_region(struct pci_dev *pdev, int bar)
2454{
2455	struct pci_devres *dr;
2456
2457	if (pci_resource_len(pdev, bar) == 0)
2458		return;
2459	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
2460		release_region(pci_resource_start(pdev, bar),
2461				pci_resource_len(pdev, bar));
2462	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
2463		release_mem_region(pci_resource_start(pdev, bar),
2464				pci_resource_len(pdev, bar));
2465
2466	dr = find_pci_dr(pdev);
2467	if (dr)
2468		dr->region_mask &= ~(1 << bar);
2469}
2470
2471/**
2472 *	__pci_request_region - Reserved PCI I/O and memory resource
2473 *	@pdev: PCI device whose resources are to be reserved
2474 *	@bar: BAR to be reserved
2475 *	@res_name: Name to be associated with resource.
2476 *	@exclusive: whether the region access is exclusive or not
2477 *
2478 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2479 *	being reserved by owner @res_name.  Do not access any
2480 *	address inside the PCI regions unless this call returns
2481 *	successfully.
2482 *
2483 *	If @exclusive is set, then the region is marked so that userspace
2484 *	is explicitly not allowed to map the resource via /dev/mem or
2485 *	sysfs MMIO access.
2486 *
2487 *	Returns 0 on success, or %EBUSY on error.  A warning
2488 *	message is also printed on failure.
2489 */
2490static int __pci_request_region(struct pci_dev *pdev, int bar, const char *res_name,
2491									int exclusive)
2492{
2493	struct pci_devres *dr;
2494
2495	if (pci_resource_len(pdev, bar) == 0)
2496		return 0;
2497
2498	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
2499		if (!request_region(pci_resource_start(pdev, bar),
2500			    pci_resource_len(pdev, bar), res_name))
2501			goto err_out;
2502	}
2503	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
2504		if (!__request_mem_region(pci_resource_start(pdev, bar),
2505					pci_resource_len(pdev, bar), res_name,
2506					exclusive))
2507			goto err_out;
2508	}
2509
2510	dr = find_pci_dr(pdev);
2511	if (dr)
2512		dr->region_mask |= 1 << bar;
2513
2514	return 0;
2515
2516err_out:
2517	dev_warn(&pdev->dev, "BAR %d: can't reserve %pR\n", bar,
2518		 &pdev->resource[bar]);
2519	return -EBUSY;
2520}
2521
2522/**
2523 *	pci_request_region - Reserve PCI I/O and memory resource
2524 *	@pdev: PCI device whose resources are to be reserved
2525 *	@bar: BAR to be reserved
2526 *	@res_name: Name to be associated with resource
2527 *
2528 *	Mark the PCI region associated with PCI device @pdev BAR @bar as
2529 *	being reserved by owner @res_name.  Do not access any
2530 *	address inside the PCI regions unless this call returns
2531 *	successfully.
2532 *
2533 *	Returns 0 on success, or %EBUSY on error.  A warning
2534 *	message is also printed on failure.
2535 */
2536int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
2537{
2538	return __pci_request_region(pdev, bar, res_name, 0);
2539}
2540
2541/**
2542 *	pci_request_region_exclusive - Reserved PCI I/O and memory resource
2543 *	@pdev: PCI device whose resources are to be reserved
2544 *	@bar: BAR to be reserved
2545 *	@res_name: Name to be associated with resource.
2546 *
2547 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2548 *	being reserved by owner @res_name.  Do not access any
2549 *	address inside the PCI regions unless this call returns
2550 *	successfully.
2551 *
2552 *	Returns 0 on success, or %EBUSY on error.  A warning
2553 *	message is also printed on failure.
2554 *
2555 *	The key difference that _exclusive makes it that userspace is
2556 *	explicitly not allowed to map the resource via /dev/mem or
2557 *	sysfs.
2558 */
2559int pci_request_region_exclusive(struct pci_dev *pdev, int bar, const char *res_name)
2560{
2561	return __pci_request_region(pdev, bar, res_name, IORESOURCE_EXCLUSIVE);
2562}
2563/**
2564 * pci_release_selected_regions - Release selected PCI I/O and memory resources
2565 * @pdev: PCI device whose resources were previously reserved
2566 * @bars: Bitmask of BARs to be released
2567 *
2568 * Release selected PCI I/O and memory resources previously reserved.
2569 * Call this function only after all use of the PCI regions has ceased.
2570 */
2571void pci_release_selected_regions(struct pci_dev *pdev, int bars)
2572{
2573	int i;
2574
2575	for (i = 0; i < 6; i++)
2576		if (bars & (1 << i))
2577			pci_release_region(pdev, i);
2578}
2579
2580static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
2581				 const char *res_name, int excl)
2582{
2583	int i;
2584
2585	for (i = 0; i < 6; i++)
2586		if (bars & (1 << i))
2587			if (__pci_request_region(pdev, i, res_name, excl))
2588				goto err_out;
2589	return 0;
2590
2591err_out:
2592	while(--i >= 0)
2593		if (bars & (1 << i))
2594			pci_release_region(pdev, i);
2595
2596	return -EBUSY;
2597}
2598
2599
2600/**
2601 * pci_request_selected_regions - Reserve selected PCI I/O and memory resources
2602 * @pdev: PCI device whose resources are to be reserved
2603 * @bars: Bitmask of BARs to be requested
2604 * @res_name: Name to be associated with resource
2605 */
2606int pci_request_selected_regions(struct pci_dev *pdev, int bars,
2607				 const char *res_name)
2608{
2609	return __pci_request_selected_regions(pdev, bars, res_name, 0);
2610}
2611
2612int pci_request_selected_regions_exclusive(struct pci_dev *pdev,
2613				 int bars, const char *res_name)
2614{
2615	return __pci_request_selected_regions(pdev, bars, res_name,
2616			IORESOURCE_EXCLUSIVE);
2617}
2618
2619/**
2620 *	pci_release_regions - Release reserved PCI I/O and memory resources
2621 *	@pdev: PCI device whose resources were previously reserved by pci_request_regions
2622 *
2623 *	Releases all PCI I/O and memory resources previously reserved by a
2624 *	successful call to pci_request_regions.  Call this function only
2625 *	after all use of the PCI regions has ceased.
2626 */
2627
2628void pci_release_regions(struct pci_dev *pdev)
2629{
2630	pci_release_selected_regions(pdev, (1 << 6) - 1);
2631}
2632
2633/**
2634 *	pci_request_regions - Reserved PCI I/O and memory resources
2635 *	@pdev: PCI device whose resources are to be reserved
2636 *	@res_name: Name to be associated with resource.
2637 *
2638 *	Mark all PCI regions associated with PCI device @pdev as
2639 *	being reserved by owner @res_name.  Do not access any
2640 *	address inside the PCI regions unless this call returns
2641 *	successfully.
2642 *
2643 *	Returns 0 on success, or %EBUSY on error.  A warning
2644 *	message is also printed on failure.
2645 */
2646int pci_request_regions(struct pci_dev *pdev, const char *res_name)
2647{
2648	return pci_request_selected_regions(pdev, ((1 << 6) - 1), res_name);
2649}
2650
2651/**
2652 *	pci_request_regions_exclusive - Reserved PCI I/O and memory resources
2653 *	@pdev: PCI device whose resources are to be reserved
2654 *	@res_name: Name to be associated with resource.
2655 *
2656 *	Mark all PCI regions associated with PCI device @pdev as
2657 *	being reserved by owner @res_name.  Do not access any
2658 *	address inside the PCI regions unless this call returns
2659 *	successfully.
2660 *
2661 *	pci_request_regions_exclusive() will mark the region so that
2662 *	/dev/mem and the sysfs MMIO access will not be allowed.
2663 *
2664 *	Returns 0 on success, or %EBUSY on error.  A warning
2665 *	message is also printed on failure.
2666 */
2667int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
2668{
2669	return pci_request_selected_regions_exclusive(pdev,
2670					((1 << 6) - 1), res_name);
2671}
2672
2673static void __pci_set_master(struct pci_dev *dev, bool enable)
2674{
2675	u16 old_cmd, cmd;
2676
2677	pci_read_config_word(dev, PCI_COMMAND, &old_cmd);
2678	if (enable)
2679		cmd = old_cmd | PCI_COMMAND_MASTER;
2680	else
2681		cmd = old_cmd & ~PCI_COMMAND_MASTER;
2682	if (cmd != old_cmd) {
2683		dev_dbg(&dev->dev, "%s bus mastering\n",
2684			enable ? "enabling" : "disabling");
2685		pci_write_config_word(dev, PCI_COMMAND, cmd);
2686	}
2687	dev->is_busmaster = enable;
2688}
2689
2690/**
2691 * pcibios_setup - process "pci=" kernel boot arguments
2692 * @str: string used to pass in "pci=" kernel boot arguments
2693 *
2694 * Process kernel boot arguments.  This is the default implementation.
2695 * Architecture specific implementations can override this as necessary.
2696 */
2697char * __weak __init pcibios_setup(char *str)
2698{
2699	return str;
2700}
2701
2702/**
2703 * pcibios_set_master - enable PCI bus-mastering for device dev
2704 * @dev: the PCI device to enable
2705 *
2706 * Enables PCI bus-mastering for the device.  This is the default
2707 * implementation.  Architecture specific implementations can override
2708 * this if necessary.
2709 */
2710void __weak pcibios_set_master(struct pci_dev *dev)
2711{
2712	u8 lat;
2713
2714	/* The latency timer doesn't apply to PCIe (either Type 0 or Type 1) */
2715	if (pci_is_pcie(dev))
2716		return;
2717
2718	pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
2719	if (lat < 16)
2720		lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency;
2721	else if (lat > pcibios_max_latency)
2722		lat = pcibios_max_latency;
2723	else
2724		return;
2725
2726	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
2727}
2728
2729/**
2730 * pci_set_master - enables bus-mastering for device dev
2731 * @dev: the PCI device to enable
2732 *
2733 * Enables bus-mastering on the device and calls pcibios_set_master()
2734 * to do the needed arch specific settings.
2735 */
2736void pci_set_master(struct pci_dev *dev)
2737{
2738	__pci_set_master(dev, true);
2739	pcibios_set_master(dev);
2740}
2741
2742/**
2743 * pci_clear_master - disables bus-mastering for device dev
2744 * @dev: the PCI device to disable
2745 */
2746void pci_clear_master(struct pci_dev *dev)
2747{
2748	__pci_set_master(dev, false);
2749}
2750
2751/**
2752 * pci_set_cacheline_size - ensure the CACHE_LINE_SIZE register is programmed
2753 * @dev: the PCI device for which MWI is to be enabled
2754 *
2755 * Helper function for pci_set_mwi.
2756 * Originally copied from drivers/net/acenic.c.
2757 * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>.
2758 *
2759 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2760 */
2761int pci_set_cacheline_size(struct pci_dev *dev)
2762{
2763	u8 cacheline_size;
2764
2765	if (!pci_cache_line_size)
2766		return -EINVAL;
2767
2768	/* Validate current setting: the PCI_CACHE_LINE_SIZE must be
2769	   equal to or multiple of the right value. */
2770	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2771	if (cacheline_size >= pci_cache_line_size &&
2772	    (cacheline_size % pci_cache_line_size) == 0)
2773		return 0;
2774
2775	/* Write the correct value. */
2776	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size);
2777	/* Read it back. */
2778	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2779	if (cacheline_size == pci_cache_line_size)
2780		return 0;
2781
2782	dev_printk(KERN_DEBUG, &dev->dev, "cache line size of %d is not "
2783		   "supported\n", pci_cache_line_size << 2);
2784
2785	return -EINVAL;
2786}
2787EXPORT_SYMBOL_GPL(pci_set_cacheline_size);
2788
2789#ifdef PCI_DISABLE_MWI
2790int pci_set_mwi(struct pci_dev *dev)
2791{
2792	return 0;
2793}
2794
2795int pci_try_set_mwi(struct pci_dev *dev)
2796{
2797	return 0;
2798}
2799
2800void pci_clear_mwi(struct pci_dev *dev)
2801{
2802}
2803
2804#else
2805
2806/**
2807 * pci_set_mwi - enables memory-write-invalidate PCI transaction
2808 * @dev: the PCI device for which MWI is enabled
2809 *
2810 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2811 *
2812 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2813 */
2814int
2815pci_set_mwi(struct pci_dev *dev)
2816{
2817	int rc;
2818	u16 cmd;
2819
2820	rc = pci_set_cacheline_size(dev);
2821	if (rc)
2822		return rc;
2823
2824	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2825	if (! (cmd & PCI_COMMAND_INVALIDATE)) {
2826		dev_dbg(&dev->dev, "enabling Mem-Wr-Inval\n");
2827		cmd |= PCI_COMMAND_INVALIDATE;
2828		pci_write_config_word(dev, PCI_COMMAND, cmd);
2829	}
2830
2831	return 0;
2832}
2833
2834/**
2835 * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
2836 * @dev: the PCI device for which MWI is enabled
2837 *
2838 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2839 * Callers are not required to check the return value.
2840 *
2841 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2842 */
2843int pci_try_set_mwi(struct pci_dev *dev)
2844{
2845	int rc = pci_set_mwi(dev);
2846	return rc;
2847}
2848
2849/**
2850 * pci_clear_mwi - disables Memory-Write-Invalidate for device dev
2851 * @dev: the PCI device to disable
2852 *
2853 * Disables PCI Memory-Write-Invalidate transaction on the device
2854 */
2855void
2856pci_clear_mwi(struct pci_dev *dev)
2857{
2858	u16 cmd;
2859
2860	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2861	if (cmd & PCI_COMMAND_INVALIDATE) {
2862		cmd &= ~PCI_COMMAND_INVALIDATE;
2863		pci_write_config_word(dev, PCI_COMMAND, cmd);
2864	}
2865}
2866#endif /* ! PCI_DISABLE_MWI */
2867
2868/**
2869 * pci_intx - enables/disables PCI INTx for device dev
2870 * @pdev: the PCI device to operate on
2871 * @enable: boolean: whether to enable or disable PCI INTx
2872 *
2873 * Enables/disables PCI INTx for device dev
2874 */
2875void
2876pci_intx(struct pci_dev *pdev, int enable)
2877{
2878	u16 pci_command, new;
2879
2880	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
2881
2882	if (enable) {
2883		new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
2884	} else {
2885		new = pci_command | PCI_COMMAND_INTX_DISABLE;
2886	}
2887
2888	if (new != pci_command) {
2889		struct pci_devres *dr;
2890
2891		pci_write_config_word(pdev, PCI_COMMAND, new);
2892
2893		dr = find_pci_dr(pdev);
2894		if (dr && !dr->restore_intx) {
2895			dr->restore_intx = 1;
2896			dr->orig_intx = !enable;
2897		}
2898	}
2899}
2900
2901/**
2902 * pci_intx_mask_supported - probe for INTx masking support
2903 * @dev: the PCI device to operate on
2904 *
2905 * Check if the device dev support INTx masking via the config space
2906 * command word.
2907 */
2908bool pci_intx_mask_supported(struct pci_dev *dev)
2909{
2910	bool mask_supported = false;
2911	u16 orig, new;
2912
2913	if (dev->broken_intx_masking)
2914		return false;
2915
2916	pci_cfg_access_lock(dev);
2917
2918	pci_read_config_word(dev, PCI_COMMAND, &orig);
2919	pci_write_config_word(dev, PCI_COMMAND,
2920			      orig ^ PCI_COMMAND_INTX_DISABLE);
2921	pci_read_config_word(dev, PCI_COMMAND, &new);
2922
2923	/*
2924	 * There's no way to protect against hardware bugs or detect them
2925	 * reliably, but as long as we know what the value should be, let's
2926	 * go ahead and check it.
2927	 */
2928	if ((new ^ orig) & ~PCI_COMMAND_INTX_DISABLE) {
2929		dev_err(&dev->dev, "Command register changed from "
2930			"0x%x to 0x%x: driver or hardware bug?\n", orig, new);
2931	} else if ((new ^ orig) & PCI_COMMAND_INTX_DISABLE) {
2932		mask_supported = true;
2933		pci_write_config_word(dev, PCI_COMMAND, orig);
2934	}
2935
2936	pci_cfg_access_unlock(dev);
2937	return mask_supported;
2938}
2939EXPORT_SYMBOL_GPL(pci_intx_mask_supported);
2940
2941static bool pci_check_and_set_intx_mask(struct pci_dev *dev, bool mask)
2942{
2943	struct pci_bus *bus = dev->bus;
2944	bool mask_updated = true;
2945	u32 cmd_status_dword;
2946	u16 origcmd, newcmd;
2947	unsigned long flags;
2948	bool irq_pending;
2949
2950	/*
2951	 * We do a single dword read to retrieve both command and status.
2952	 * Document assumptions that make this possible.
2953	 */
2954	BUILD_BUG_ON(PCI_COMMAND % 4);
2955	BUILD_BUG_ON(PCI_COMMAND + 2 != PCI_STATUS);
2956
2957	raw_spin_lock_irqsave(&pci_lock, flags);
2958
2959	bus->ops->read(bus, dev->devfn, PCI_COMMAND, 4, &cmd_status_dword);
2960
2961	irq_pending = (cmd_status_dword >> 16) & PCI_STATUS_INTERRUPT;
2962
2963	/*
2964	 * Check interrupt status register to see whether our device
2965	 * triggered the interrupt (when masking) or the next IRQ is
2966	 * already pending (when unmasking).
2967	 */
2968	if (mask != irq_pending) {
2969		mask_updated = false;
2970		goto done;
2971	}
2972
2973	origcmd = cmd_status_dword;
2974	newcmd = origcmd & ~PCI_COMMAND_INTX_DISABLE;
2975	if (mask)
2976		newcmd |= PCI_COMMAND_INTX_DISABLE;
2977	if (newcmd != origcmd)
2978		bus->ops->write(bus, dev->devfn, PCI_COMMAND, 2, newcmd);
2979
2980done:
2981	raw_spin_unlock_irqrestore(&pci_lock, flags);
2982
2983	return mask_updated;
2984}
2985
2986/**
2987 * pci_check_and_mask_intx - mask INTx on pending interrupt
2988 * @dev: the PCI device to operate on
2989 *
2990 * Check if the device dev has its INTx line asserted, mask it and
2991 * return true in that case. False is returned if not interrupt was
2992 * pending.
2993 */
2994bool pci_check_and_mask_intx(struct pci_dev *dev)
2995{
2996	return pci_check_and_set_intx_mask(dev, true);
2997}
2998EXPORT_SYMBOL_GPL(pci_check_and_mask_intx);
2999
3000/**
3001 * pci_check_and_unmask_intx - unmask INTx if no interrupt is pending
3002 * @dev: the PCI device to operate on
3003 *
3004 * Check if the device dev has its INTx line asserted, unmask it if not
3005 * and return true. False is returned and the mask remains active if
3006 * there was still an interrupt pending.
3007 */
3008bool pci_check_and_unmask_intx(struct pci_dev *dev)
3009{
3010	return pci_check_and_set_intx_mask(dev, false);
3011}
3012EXPORT_SYMBOL_GPL(pci_check_and_unmask_intx);
3013
3014/**
3015 * pci_msi_off - disables any MSI or MSI-X capabilities
3016 * @dev: the PCI device to operate on
3017 *
3018 * If you want to use MSI, see pci_enable_msi() and friends.
3019 * This is a lower-level primitive that allows us to disable
3020 * MSI operation at the device level.
3021 */
3022void pci_msi_off(struct pci_dev *dev)
3023{
3024	int pos;
3025	u16 control;
3026
3027	/*
3028	 * This looks like it could go in msi.c, but we need it even when
3029	 * CONFIG_PCI_MSI=n.  For the same reason, we can't use
3030	 * dev->msi_cap or dev->msix_cap here.
3031	 */
3032	pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
3033	if (pos) {
3034		pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control);
3035		control &= ~PCI_MSI_FLAGS_ENABLE;
3036		pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control);
3037	}
3038	pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
3039	if (pos) {
3040		pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control);
3041		control &= ~PCI_MSIX_FLAGS_ENABLE;
3042		pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control);
3043	}
3044}
3045EXPORT_SYMBOL_GPL(pci_msi_off);
3046
3047int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size)
3048{
3049	return dma_set_max_seg_size(&dev->dev, size);
3050}
3051EXPORT_SYMBOL(pci_set_dma_max_seg_size);
3052
3053int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask)
3054{
3055	return dma_set_seg_boundary(&dev->dev, mask);
3056}
3057EXPORT_SYMBOL(pci_set_dma_seg_boundary);
3058
3059/**
3060 * pci_wait_for_pending_transaction - waits for pending transaction
3061 * @dev: the PCI device to operate on
3062 *
3063 * Return 0 if transaction is pending 1 otherwise.
3064 */
3065int pci_wait_for_pending_transaction(struct pci_dev *dev)
3066{
3067	if (!pci_is_pcie(dev))
3068		return 1;
3069
3070	return pci_wait_for_pending(dev, pci_pcie_cap(dev) + PCI_EXP_DEVSTA,
3071				    PCI_EXP_DEVSTA_TRPND);
3072}
3073EXPORT_SYMBOL(pci_wait_for_pending_transaction);
3074
3075static int pcie_flr(struct pci_dev *dev, int probe)
3076{
 
 
3077	u32 cap;
 
 
 
 
 
3078
3079	pcie_capability_read_dword(dev, PCI_EXP_DEVCAP, &cap);
3080	if (!(cap & PCI_EXP_DEVCAP_FLR))
3081		return -ENOTTY;
3082
3083	if (probe)
3084		return 0;
3085
3086	if (!pci_wait_for_pending_transaction(dev))
3087		dev_err(&dev->dev, "transaction is not cleared; proceeding with reset anyway\n");
 
 
3088
3089	pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
 
 
 
 
 
 
 
 
 
 
 
3090
3091	msleep(100);
3092
3093	return 0;
3094}
3095
3096static int pci_af_flr(struct pci_dev *dev, int probe)
3097{
 
3098	int pos;
3099	u8 cap;
 
3100
3101	pos = pci_find_capability(dev, PCI_CAP_ID_AF);
3102	if (!pos)
3103		return -ENOTTY;
3104
3105	pci_read_config_byte(dev, pos + PCI_AF_CAP, &cap);
3106	if (!(cap & PCI_AF_CAP_TP) || !(cap & PCI_AF_CAP_FLR))
3107		return -ENOTTY;
3108
3109	if (probe)
3110		return 0;
3111
3112	/* Wait for Transaction Pending bit clean */
3113	if (pci_wait_for_pending(dev, pos + PCI_AF_STATUS, PCI_AF_STATUS_TP))
3114		goto clear;
 
 
 
 
 
 
3115
3116	dev_err(&dev->dev, "transaction is not cleared; "
3117			"proceeding with reset anyway\n");
3118
3119clear:
3120	pci_write_config_byte(dev, pos + PCI_AF_CTRL, PCI_AF_CTRL_FLR);
3121	msleep(100);
3122
3123	return 0;
3124}
3125
3126/**
3127 * pci_pm_reset - Put device into PCI_D3 and back into PCI_D0.
3128 * @dev: Device to reset.
3129 * @probe: If set, only check if the device can be reset this way.
3130 *
3131 * If @dev supports native PCI PM and its PCI_PM_CTRL_NO_SOFT_RESET flag is
3132 * unset, it will be reinitialized internally when going from PCI_D3hot to
3133 * PCI_D0.  If that's the case and the device is not in a low-power state
3134 * already, force it into PCI_D3hot and back to PCI_D0, causing it to be reset.
3135 *
3136 * NOTE: This causes the caller to sleep for twice the device power transition
3137 * cooldown period, which for the D0->D3hot and D3hot->D0 transitions is 10 ms
3138 * by default (i.e. unless the @dev's d3_delay field has a different value).
3139 * Moreover, only devices in D0 can be reset by this function.
3140 */
3141static int pci_pm_reset(struct pci_dev *dev, int probe)
3142{
3143	u16 csr;
3144
3145	if (!dev->pm_cap)
3146		return -ENOTTY;
3147
3148	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &csr);
3149	if (csr & PCI_PM_CTRL_NO_SOFT_RESET)
3150		return -ENOTTY;
3151
3152	if (probe)
3153		return 0;
3154
3155	if (dev->current_state != PCI_D0)
3156		return -EINVAL;
3157
3158	csr &= ~PCI_PM_CTRL_STATE_MASK;
3159	csr |= PCI_D3hot;
3160	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
3161	pci_dev_d3_sleep(dev);
3162
3163	csr &= ~PCI_PM_CTRL_STATE_MASK;
3164	csr |= PCI_D0;
3165	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
3166	pci_dev_d3_sleep(dev);
3167
3168	return 0;
3169}
3170
3171/**
3172 * pci_reset_bridge_secondary_bus - Reset the secondary bus on a PCI bridge.
3173 * @dev: Bridge device
3174 *
3175 * Use the bridge control register to assert reset on the secondary bus.
3176 * Devices on the secondary bus are left in power-on state.
3177 */
3178void pci_reset_bridge_secondary_bus(struct pci_dev *dev)
3179{
3180	u16 ctrl;
3181
3182	pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &ctrl);
3183	ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
3184	pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
3185	/*
3186	 * PCI spec v3.0 7.6.4.2 requires minimum Trst of 1ms.  Double
3187	 * this to 2ms to ensure that we meet the minimum requirement.
3188	 */
3189	msleep(2);
3190
3191	ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
3192	pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
3193
3194	/*
3195	 * Trhfa for conventional PCI is 2^25 clock cycles.
3196	 * Assuming a minimum 33MHz clock this results in a 1s
3197	 * delay before we can consider subordinate devices to
3198	 * be re-initialized.  PCIe has some ways to shorten this,
3199	 * but we don't make use of them yet.
3200	 */
3201	ssleep(1);
3202}
3203EXPORT_SYMBOL_GPL(pci_reset_bridge_secondary_bus);
3204
3205static int pci_parent_bus_reset(struct pci_dev *dev, int probe)
3206{
3207	struct pci_dev *pdev;
3208
3209	if (pci_is_root_bus(dev->bus) || dev->subordinate || !dev->bus->self)
3210		return -ENOTTY;
3211
3212	list_for_each_entry(pdev, &dev->bus->devices, bus_list)
3213		if (pdev != dev)
3214			return -ENOTTY;
3215
3216	if (probe)
3217		return 0;
3218
3219	pci_reset_bridge_secondary_bus(dev->bus->self);
 
 
 
 
 
 
 
3220
3221	return 0;
3222}
3223
3224static int pci_reset_hotplug_slot(struct hotplug_slot *hotplug, int probe)
3225{
3226	int rc = -ENOTTY;
3227
3228	if (!hotplug || !try_module_get(hotplug->ops->owner))
3229		return rc;
3230
3231	if (hotplug->ops->reset_slot)
3232		rc = hotplug->ops->reset_slot(hotplug, probe);
3233
3234	module_put(hotplug->ops->owner);
3235
3236	return rc;
3237}
3238
3239static int pci_dev_reset_slot_function(struct pci_dev *dev, int probe)
3240{
3241	struct pci_dev *pdev;
3242
3243	if (dev->subordinate || !dev->slot)
3244		return -ENOTTY;
3245
3246	list_for_each_entry(pdev, &dev->bus->devices, bus_list)
3247		if (pdev != dev && pdev->slot == dev->slot)
3248			return -ENOTTY;
3249
3250	return pci_reset_hotplug_slot(dev->slot->hotplug, probe);
3251}
3252
3253static int __pci_dev_reset(struct pci_dev *dev, int probe)
3254{
3255	int rc;
3256
3257	might_sleep();
3258
 
 
 
 
 
 
3259	rc = pci_dev_specific_reset(dev, probe);
3260	if (rc != -ENOTTY)
3261		goto done;
3262
3263	rc = pcie_flr(dev, probe);
3264	if (rc != -ENOTTY)
3265		goto done;
3266
3267	rc = pci_af_flr(dev, probe);
3268	if (rc != -ENOTTY)
3269		goto done;
3270
3271	rc = pci_pm_reset(dev, probe);
3272	if (rc != -ENOTTY)
3273		goto done;
3274
3275	rc = pci_dev_reset_slot_function(dev, probe);
3276	if (rc != -ENOTTY)
3277		goto done;
3278
3279	rc = pci_parent_bus_reset(dev, probe);
3280done:
3281	return rc;
3282}
3283
3284static void pci_dev_lock(struct pci_dev *dev)
3285{
3286	pci_cfg_access_lock(dev);
3287	/* block PM suspend, driver probe, etc. */
3288	device_lock(&dev->dev);
3289}
3290
3291/* Return 1 on successful lock, 0 on contention */
3292static int pci_dev_trylock(struct pci_dev *dev)
3293{
3294	if (pci_cfg_access_trylock(dev)) {
3295		if (device_trylock(&dev->dev))
3296			return 1;
3297		pci_cfg_access_unlock(dev);
3298	}
3299
3300	return 0;
3301}
3302
3303static void pci_dev_unlock(struct pci_dev *dev)
3304{
3305	device_unlock(&dev->dev);
3306	pci_cfg_access_unlock(dev);
3307}
3308
3309static void pci_dev_save_and_disable(struct pci_dev *dev)
3310{
3311	/*
3312	 * Wake-up device prior to save.  PM registers default to D0 after
3313	 * reset and a simple register restore doesn't reliably return
3314	 * to a non-D0 state anyway.
3315	 */
3316	pci_set_power_state(dev, PCI_D0);
3317
3318	pci_save_state(dev);
3319	/*
3320	 * Disable the device by clearing the Command register, except for
3321	 * INTx-disable which is set.  This not only disables MMIO and I/O port
3322	 * BARs, but also prevents the device from being Bus Master, preventing
3323	 * DMA from the device including MSI/MSI-X interrupts.  For PCI 2.3
3324	 * compliant devices, INTx-disable prevents legacy interrupts.
3325	 */
3326	pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
3327}
3328
3329static void pci_dev_restore(struct pci_dev *dev)
3330{
3331	pci_restore_state(dev);
3332}
3333
3334static int pci_dev_reset(struct pci_dev *dev, int probe)
3335{
3336	int rc;
3337
3338	if (!probe)
3339		pci_dev_lock(dev);
3340
3341	rc = __pci_dev_reset(dev, probe);
3342
3343	if (!probe)
3344		pci_dev_unlock(dev);
3345
3346	return rc;
3347}
3348/**
3349 * __pci_reset_function - reset a PCI device function
3350 * @dev: PCI device to reset
3351 *
3352 * Some devices allow an individual function to be reset without affecting
3353 * other functions in the same device.  The PCI device must be responsive
3354 * to PCI config space in order to use this function.
3355 *
3356 * The device function is presumed to be unused when this function is called.
3357 * Resetting the device will make the contents of PCI configuration space
3358 * random, so any caller of this must be prepared to reinitialise the
3359 * device including MSI, bus mastering, BARs, decoding IO and memory spaces,
3360 * etc.
3361 *
3362 * Returns 0 if the device function was successfully reset or negative if the
3363 * device doesn't support resetting a single function.
3364 */
3365int __pci_reset_function(struct pci_dev *dev)
3366{
3367	return pci_dev_reset(dev, 0);
3368}
3369EXPORT_SYMBOL_GPL(__pci_reset_function);
3370
3371/**
3372 * __pci_reset_function_locked - reset a PCI device function while holding
3373 * the @dev mutex lock.
3374 * @dev: PCI device to reset
3375 *
3376 * Some devices allow an individual function to be reset without affecting
3377 * other functions in the same device.  The PCI device must be responsive
3378 * to PCI config space in order to use this function.
3379 *
3380 * The device function is presumed to be unused and the caller is holding
3381 * the device mutex lock when this function is called.
3382 * Resetting the device will make the contents of PCI configuration space
3383 * random, so any caller of this must be prepared to reinitialise the
3384 * device including MSI, bus mastering, BARs, decoding IO and memory spaces,
3385 * etc.
3386 *
3387 * Returns 0 if the device function was successfully reset or negative if the
3388 * device doesn't support resetting a single function.
3389 */
3390int __pci_reset_function_locked(struct pci_dev *dev)
3391{
3392	return __pci_dev_reset(dev, 0);
3393}
3394EXPORT_SYMBOL_GPL(__pci_reset_function_locked);
3395
3396/**
3397 * pci_probe_reset_function - check whether the device can be safely reset
3398 * @dev: PCI device to reset
3399 *
3400 * Some devices allow an individual function to be reset without affecting
3401 * other functions in the same device.  The PCI device must be responsive
3402 * to PCI config space in order to use this function.
3403 *
3404 * Returns 0 if the device function can be reset or negative if the
3405 * device doesn't support resetting a single function.
3406 */
3407int pci_probe_reset_function(struct pci_dev *dev)
3408{
3409	return pci_dev_reset(dev, 1);
3410}
3411
3412/**
3413 * pci_reset_function - quiesce and reset a PCI device function
3414 * @dev: PCI device to reset
3415 *
3416 * Some devices allow an individual function to be reset without affecting
3417 * other functions in the same device.  The PCI device must be responsive
3418 * to PCI config space in order to use this function.
3419 *
3420 * This function does not just reset the PCI portion of a device, but
3421 * clears all the state associated with the device.  This function differs
3422 * from __pci_reset_function in that it saves and restores device state
3423 * over the reset.
3424 *
3425 * Returns 0 if the device function was successfully reset or negative if the
3426 * device doesn't support resetting a single function.
3427 */
3428int pci_reset_function(struct pci_dev *dev)
3429{
3430	int rc;
3431
3432	rc = pci_dev_reset(dev, 1);
3433	if (rc)
3434		return rc;
3435
3436	pci_dev_save_and_disable(dev);
 
 
 
 
 
 
3437
3438	rc = pci_dev_reset(dev, 0);
3439
3440	pci_dev_restore(dev);
3441
3442	return rc;
3443}
3444EXPORT_SYMBOL_GPL(pci_reset_function);
3445
3446/**
3447 * pci_try_reset_function - quiesce and reset a PCI device function
3448 * @dev: PCI device to reset
3449 *
3450 * Same as above, except return -EAGAIN if unable to lock device.
3451 */
3452int pci_try_reset_function(struct pci_dev *dev)
3453{
3454	int rc;
3455
3456	rc = pci_dev_reset(dev, 1);
3457	if (rc)
3458		return rc;
3459
3460	pci_dev_save_and_disable(dev);
3461
3462	if (pci_dev_trylock(dev)) {
3463		rc = __pci_dev_reset(dev, 0);
3464		pci_dev_unlock(dev);
3465	} else
3466		rc = -EAGAIN;
3467
3468	pci_dev_restore(dev);
3469
3470	return rc;
3471}
3472EXPORT_SYMBOL_GPL(pci_try_reset_function);
3473
3474/* Lock devices from the top of the tree down */
3475static void pci_bus_lock(struct pci_bus *bus)
3476{
3477	struct pci_dev *dev;
3478
3479	list_for_each_entry(dev, &bus->devices, bus_list) {
3480		pci_dev_lock(dev);
3481		if (dev->subordinate)
3482			pci_bus_lock(dev->subordinate);
3483	}
3484}
3485
3486/* Unlock devices from the bottom of the tree up */
3487static void pci_bus_unlock(struct pci_bus *bus)
3488{
3489	struct pci_dev *dev;
3490
3491	list_for_each_entry(dev, &bus->devices, bus_list) {
3492		if (dev->subordinate)
3493			pci_bus_unlock(dev->subordinate);
3494		pci_dev_unlock(dev);
3495	}
3496}
3497
3498/* Return 1 on successful lock, 0 on contention */
3499static int pci_bus_trylock(struct pci_bus *bus)
3500{
3501	struct pci_dev *dev;
3502
3503	list_for_each_entry(dev, &bus->devices, bus_list) {
3504		if (!pci_dev_trylock(dev))
3505			goto unlock;
3506		if (dev->subordinate) {
3507			if (!pci_bus_trylock(dev->subordinate)) {
3508				pci_dev_unlock(dev);
3509				goto unlock;
3510			}
3511		}
3512	}
3513	return 1;
3514
3515unlock:
3516	list_for_each_entry_continue_reverse(dev, &bus->devices, bus_list) {
3517		if (dev->subordinate)
3518			pci_bus_unlock(dev->subordinate);
3519		pci_dev_unlock(dev);
3520	}
3521	return 0;
3522}
3523
3524/* Lock devices from the top of the tree down */
3525static void pci_slot_lock(struct pci_slot *slot)
3526{
3527	struct pci_dev *dev;
3528
3529	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
3530		if (!dev->slot || dev->slot != slot)
3531			continue;
3532		pci_dev_lock(dev);
3533		if (dev->subordinate)
3534			pci_bus_lock(dev->subordinate);
3535	}
3536}
3537
3538/* Unlock devices from the bottom of the tree up */
3539static void pci_slot_unlock(struct pci_slot *slot)
3540{
3541	struct pci_dev *dev;
3542
3543	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
3544		if (!dev->slot || dev->slot != slot)
3545			continue;
3546		if (dev->subordinate)
3547			pci_bus_unlock(dev->subordinate);
3548		pci_dev_unlock(dev);
3549	}
3550}
3551
3552/* Return 1 on successful lock, 0 on contention */
3553static int pci_slot_trylock(struct pci_slot *slot)
3554{
3555	struct pci_dev *dev;
3556
3557	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
3558		if (!dev->slot || dev->slot != slot)
3559			continue;
3560		if (!pci_dev_trylock(dev))
3561			goto unlock;
3562		if (dev->subordinate) {
3563			if (!pci_bus_trylock(dev->subordinate)) {
3564				pci_dev_unlock(dev);
3565				goto unlock;
3566			}
3567		}
3568	}
3569	return 1;
3570
3571unlock:
3572	list_for_each_entry_continue_reverse(dev,
3573					     &slot->bus->devices, bus_list) {
3574		if (!dev->slot || dev->slot != slot)
3575			continue;
3576		if (dev->subordinate)
3577			pci_bus_unlock(dev->subordinate);
3578		pci_dev_unlock(dev);
3579	}
3580	return 0;
3581}
3582
3583/* Save and disable devices from the top of the tree down */
3584static void pci_bus_save_and_disable(struct pci_bus *bus)
3585{
3586	struct pci_dev *dev;
3587
3588	list_for_each_entry(dev, &bus->devices, bus_list) {
3589		pci_dev_save_and_disable(dev);
3590		if (dev->subordinate)
3591			pci_bus_save_and_disable(dev->subordinate);
3592	}
3593}
3594
3595/*
3596 * Restore devices from top of the tree down - parent bridges need to be
3597 * restored before we can get to subordinate devices.
3598 */
3599static void pci_bus_restore(struct pci_bus *bus)
3600{
3601	struct pci_dev *dev;
3602
3603	list_for_each_entry(dev, &bus->devices, bus_list) {
3604		pci_dev_restore(dev);
3605		if (dev->subordinate)
3606			pci_bus_restore(dev->subordinate);
3607	}
3608}
3609
3610/* Save and disable devices from the top of the tree down */
3611static void pci_slot_save_and_disable(struct pci_slot *slot)
3612{
3613	struct pci_dev *dev;
3614
3615	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
3616		if (!dev->slot || dev->slot != slot)
3617			continue;
3618		pci_dev_save_and_disable(dev);
3619		if (dev->subordinate)
3620			pci_bus_save_and_disable(dev->subordinate);
3621	}
3622}
3623
3624/*
3625 * Restore devices from top of the tree down - parent bridges need to be
3626 * restored before we can get to subordinate devices.
3627 */
3628static void pci_slot_restore(struct pci_slot *slot)
3629{
3630	struct pci_dev *dev;
3631
3632	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
3633		if (!dev->slot || dev->slot != slot)
3634			continue;
3635		pci_dev_restore(dev);
3636		if (dev->subordinate)
3637			pci_bus_restore(dev->subordinate);
3638	}
3639}
3640
3641static int pci_slot_reset(struct pci_slot *slot, int probe)
3642{
3643	int rc;
3644
3645	if (!slot)
3646		return -ENOTTY;
3647
3648	if (!probe)
3649		pci_slot_lock(slot);
3650
3651	might_sleep();
3652
3653	rc = pci_reset_hotplug_slot(slot->hotplug, probe);
3654
3655	if (!probe)
3656		pci_slot_unlock(slot);
3657
3658	return rc;
3659}
3660
3661/**
3662 * pci_probe_reset_slot - probe whether a PCI slot can be reset
3663 * @slot: PCI slot to probe
3664 *
3665 * Return 0 if slot can be reset, negative if a slot reset is not supported.
3666 */
3667int pci_probe_reset_slot(struct pci_slot *slot)
3668{
3669	return pci_slot_reset(slot, 1);
3670}
3671EXPORT_SYMBOL_GPL(pci_probe_reset_slot);
3672
3673/**
3674 * pci_reset_slot - reset a PCI slot
3675 * @slot: PCI slot to reset
3676 *
3677 * A PCI bus may host multiple slots, each slot may support a reset mechanism
3678 * independent of other slots.  For instance, some slots may support slot power
3679 * control.  In the case of a 1:1 bus to slot architecture, this function may
3680 * wrap the bus reset to avoid spurious slot related events such as hotplug.
3681 * Generally a slot reset should be attempted before a bus reset.  All of the
3682 * function of the slot and any subordinate buses behind the slot are reset
3683 * through this function.  PCI config space of all devices in the slot and
3684 * behind the slot is saved before and restored after reset.
3685 *
3686 * Return 0 on success, non-zero on error.
3687 */
3688int pci_reset_slot(struct pci_slot *slot)
3689{
3690	int rc;
3691
3692	rc = pci_slot_reset(slot, 1);
3693	if (rc)
3694		return rc;
3695
3696	pci_slot_save_and_disable(slot);
3697
3698	rc = pci_slot_reset(slot, 0);
3699
3700	pci_slot_restore(slot);
3701
3702	return rc;
3703}
3704EXPORT_SYMBOL_GPL(pci_reset_slot);
3705
3706/**
3707 * pci_try_reset_slot - Try to reset a PCI slot
3708 * @slot: PCI slot to reset
3709 *
3710 * Same as above except return -EAGAIN if the slot cannot be locked
3711 */
3712int pci_try_reset_slot(struct pci_slot *slot)
3713{
3714	int rc;
3715
3716	rc = pci_slot_reset(slot, 1);
3717	if (rc)
3718		return rc;
3719
3720	pci_slot_save_and_disable(slot);
3721
3722	if (pci_slot_trylock(slot)) {
3723		might_sleep();
3724		rc = pci_reset_hotplug_slot(slot->hotplug, 0);
3725		pci_slot_unlock(slot);
3726	} else
3727		rc = -EAGAIN;
3728
3729	pci_slot_restore(slot);
3730
3731	return rc;
3732}
3733EXPORT_SYMBOL_GPL(pci_try_reset_slot);
3734
3735static int pci_bus_reset(struct pci_bus *bus, int probe)
3736{
3737	if (!bus->self)
3738		return -ENOTTY;
3739
3740	if (probe)
3741		return 0;
3742
3743	pci_bus_lock(bus);
3744
3745	might_sleep();
3746
3747	pci_reset_bridge_secondary_bus(bus->self);
3748
3749	pci_bus_unlock(bus);
3750
3751	return 0;
3752}
3753
3754/**
3755 * pci_probe_reset_bus - probe whether a PCI bus can be reset
3756 * @bus: PCI bus to probe
3757 *
3758 * Return 0 if bus can be reset, negative if a bus reset is not supported.
3759 */
3760int pci_probe_reset_bus(struct pci_bus *bus)
3761{
3762	return pci_bus_reset(bus, 1);
3763}
3764EXPORT_SYMBOL_GPL(pci_probe_reset_bus);
3765
3766/**
3767 * pci_reset_bus - reset a PCI bus
3768 * @bus: top level PCI bus to reset
3769 *
3770 * Do a bus reset on the given bus and any subordinate buses, saving
3771 * and restoring state of all devices.
3772 *
3773 * Return 0 on success, non-zero on error.
3774 */
3775int pci_reset_bus(struct pci_bus *bus)
3776{
3777	int rc;
3778
3779	rc = pci_bus_reset(bus, 1);
3780	if (rc)
3781		return rc;
3782
3783	pci_bus_save_and_disable(bus);
3784
3785	rc = pci_bus_reset(bus, 0);
3786
3787	pci_bus_restore(bus);
3788
3789	return rc;
3790}
3791EXPORT_SYMBOL_GPL(pci_reset_bus);
3792
3793/**
3794 * pci_try_reset_bus - Try to reset a PCI bus
3795 * @bus: top level PCI bus to reset
3796 *
3797 * Same as above except return -EAGAIN if the bus cannot be locked
3798 */
3799int pci_try_reset_bus(struct pci_bus *bus)
3800{
3801	int rc;
3802
3803	rc = pci_bus_reset(bus, 1);
3804	if (rc)
3805		return rc;
3806
3807	pci_bus_save_and_disable(bus);
3808
3809	if (pci_bus_trylock(bus)) {
3810		might_sleep();
3811		pci_reset_bridge_secondary_bus(bus->self);
3812		pci_bus_unlock(bus);
3813	} else
3814		rc = -EAGAIN;
3815
3816	pci_bus_restore(bus);
3817
3818	return rc;
3819}
3820EXPORT_SYMBOL_GPL(pci_try_reset_bus);
3821
3822/**
3823 * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count
3824 * @dev: PCI device to query
3825 *
3826 * Returns mmrbc: maximum designed memory read count in bytes
3827 *    or appropriate error value.
3828 */
3829int pcix_get_max_mmrbc(struct pci_dev *dev)
3830{
3831	int cap;
3832	u32 stat;
3833
3834	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3835	if (!cap)
3836		return -EINVAL;
3837
3838	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3839		return -EINVAL;
3840
3841	return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
3842}
3843EXPORT_SYMBOL(pcix_get_max_mmrbc);
3844
3845/**
3846 * pcix_get_mmrbc - get PCI-X maximum memory read byte count
3847 * @dev: PCI device to query
3848 *
3849 * Returns mmrbc: maximum memory read count in bytes
3850 *    or appropriate error value.
3851 */
3852int pcix_get_mmrbc(struct pci_dev *dev)
3853{
3854	int cap;
3855	u16 cmd;
3856
3857	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3858	if (!cap)
3859		return -EINVAL;
3860
3861	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3862		return -EINVAL;
3863
3864	return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
3865}
3866EXPORT_SYMBOL(pcix_get_mmrbc);
3867
3868/**
3869 * pcix_set_mmrbc - set PCI-X maximum memory read byte count
3870 * @dev: PCI device to query
3871 * @mmrbc: maximum memory read count in bytes
3872 *    valid values are 512, 1024, 2048, 4096
3873 *
3874 * If possible sets maximum memory read byte count, some bridges have erratas
3875 * that prevent this.
3876 */
3877int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
3878{
3879	int cap;
3880	u32 stat, v, o;
3881	u16 cmd;
3882
3883	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
3884		return -EINVAL;
3885
3886	v = ffs(mmrbc) - 10;
3887
3888	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3889	if (!cap)
3890		return -EINVAL;
3891
3892	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3893		return -EINVAL;
3894
3895	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
3896		return -E2BIG;
3897
3898	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3899		return -EINVAL;
3900
3901	o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
3902	if (o != v) {
3903		if (v > o && (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC))
 
3904			return -EIO;
3905
3906		cmd &= ~PCI_X_CMD_MAX_READ;
3907		cmd |= v << 2;
3908		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
3909			return -EIO;
3910	}
3911	return 0;
3912}
3913EXPORT_SYMBOL(pcix_set_mmrbc);
3914
3915/**
3916 * pcie_get_readrq - get PCI Express read request size
3917 * @dev: PCI device to query
3918 *
3919 * Returns maximum memory read request in bytes
3920 *    or appropriate error value.
3921 */
3922int pcie_get_readrq(struct pci_dev *dev)
3923{
 
3924	u16 ctl;
3925
3926	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
 
 
 
 
 
 
3927
3928	return 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12);
3929}
3930EXPORT_SYMBOL(pcie_get_readrq);
3931
3932/**
3933 * pcie_set_readrq - set PCI Express maximum memory read request
3934 * @dev: PCI device to query
3935 * @rq: maximum memory read count in bytes
3936 *    valid values are 128, 256, 512, 1024, 2048, 4096
3937 *
3938 * If possible sets maximum memory read request in bytes
3939 */
3940int pcie_set_readrq(struct pci_dev *dev, int rq)
3941{
3942	u16 v;
 
3943
3944	if (rq < 128 || rq > 4096 || !is_power_of_2(rq))
3945		return -EINVAL;
 
 
 
 
 
 
3946
3947	/*
3948	 * If using the "performance" PCIe config, we clamp the
3949	 * read rq size to the max packet size to prevent the
3950	 * host bridge generating requests larger than we can
3951	 * cope with
3952	 */
3953	if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
3954		int mps = pcie_get_mps(dev);
3955
3956		if (mps < rq)
3957			rq = mps;
 
 
3958	}
3959
3960	v = (ffs(rq) - 8) << 12;
3961
3962	return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
3963						  PCI_EXP_DEVCTL_READRQ, v);
3964}
3965EXPORT_SYMBOL(pcie_set_readrq);
3966
3967/**
3968 * pcie_get_mps - get PCI Express maximum payload size
3969 * @dev: PCI device to query
3970 *
3971 * Returns maximum payload size in bytes
 
3972 */
3973int pcie_get_mps(struct pci_dev *dev)
3974{
 
3975	u16 ctl;
3976
3977	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
 
 
 
 
 
 
3978
3979	return 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
3980}
3981EXPORT_SYMBOL(pcie_get_mps);
3982
3983/**
3984 * pcie_set_mps - set PCI Express maximum payload size
3985 * @dev: PCI device to query
3986 * @mps: maximum payload size in bytes
3987 *    valid values are 128, 256, 512, 1024, 2048, 4096
3988 *
3989 * If possible sets maximum payload size
3990 */
3991int pcie_set_mps(struct pci_dev *dev, int mps)
3992{
3993	u16 v;
 
3994
3995	if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
3996		return -EINVAL;
3997
3998	v = ffs(mps) - 8;
3999	if (v > dev->pcie_mpss)
4000		return -EINVAL;
4001	v <<= 5;
4002
4003	return pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
4004						  PCI_EXP_DEVCTL_PAYLOAD, v);
4005}
4006EXPORT_SYMBOL(pcie_set_mps);
4007
4008/**
4009 * pcie_get_minimum_link - determine minimum link settings of a PCI device
4010 * @dev: PCI device to query
4011 * @speed: storage for minimum speed
4012 * @width: storage for minimum width
4013 *
4014 * This function will walk up the PCI device chain and determine the minimum
4015 * link width and speed of the device.
4016 */
4017int pcie_get_minimum_link(struct pci_dev *dev, enum pci_bus_speed *speed,
4018			  enum pcie_link_width *width)
4019{
4020	int ret;
4021
4022	*speed = PCI_SPEED_UNKNOWN;
4023	*width = PCIE_LNK_WIDTH_UNKNOWN;
4024
4025	while (dev) {
4026		u16 lnksta;
4027		enum pci_bus_speed next_speed;
4028		enum pcie_link_width next_width;
4029
4030		ret = pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &lnksta);
4031		if (ret)
4032			return ret;
4033
4034		next_speed = pcie_link_speed[lnksta & PCI_EXP_LNKSTA_CLS];
4035		next_width = (lnksta & PCI_EXP_LNKSTA_NLW) >>
4036			PCI_EXP_LNKSTA_NLW_SHIFT;
4037
4038		if (next_speed < *speed)
4039			*speed = next_speed;
4040
4041		if (next_width < *width)
4042			*width = next_width;
4043
4044		dev = dev->bus->self;
4045	}
4046
4047	return 0;
4048}
4049EXPORT_SYMBOL(pcie_get_minimum_link);
4050
4051/**
4052 * pci_select_bars - Make BAR mask from the type of resource
4053 * @dev: the PCI device for which BAR mask is made
4054 * @flags: resource type mask to be selected
4055 *
4056 * This helper routine makes bar mask from the type of resource.
4057 */
4058int pci_select_bars(struct pci_dev *dev, unsigned long flags)
4059{
4060	int i, bars = 0;
4061	for (i = 0; i < PCI_NUM_RESOURCES; i++)
4062		if (pci_resource_flags(dev, i) & flags)
4063			bars |= (1 << i);
4064	return bars;
4065}
4066
4067/**
4068 * pci_resource_bar - get position of the BAR associated with a resource
4069 * @dev: the PCI device
4070 * @resno: the resource number
4071 * @type: the BAR type to be filled in
4072 *
4073 * Returns BAR position in config space, or 0 if the BAR is invalid.
4074 */
4075int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type)
4076{
4077	int reg;
4078
4079	if (resno < PCI_ROM_RESOURCE) {
4080		*type = pci_bar_unknown;
4081		return PCI_BASE_ADDRESS_0 + 4 * resno;
4082	} else if (resno == PCI_ROM_RESOURCE) {
4083		*type = pci_bar_mem32;
4084		return dev->rom_base_reg;
4085	} else if (resno < PCI_BRIDGE_RESOURCES) {
4086		/* device specific resource */
4087		reg = pci_iov_resource_bar(dev, resno, type);
4088		if (reg)
4089			return reg;
4090	}
4091
4092	dev_err(&dev->dev, "BAR %d: invalid resource\n", resno);
4093	return 0;
4094}
4095
4096/* Some architectures require additional programming to enable VGA */
4097static arch_set_vga_state_t arch_set_vga_state;
4098
4099void __init pci_register_set_vga_state(arch_set_vga_state_t func)
4100{
4101	arch_set_vga_state = func;	/* NULL disables */
4102}
4103
4104static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,
4105		      unsigned int command_bits, u32 flags)
4106{
4107	if (arch_set_vga_state)
4108		return arch_set_vga_state(dev, decode, command_bits,
4109						flags);
4110	return 0;
4111}
4112
4113/**
4114 * pci_set_vga_state - set VGA decode state on device and parents if requested
4115 * @dev: the PCI device
4116 * @decode: true = enable decoding, false = disable decoding
4117 * @command_bits: PCI_COMMAND_IO and/or PCI_COMMAND_MEMORY
4118 * @flags: traverse ancestors and change bridges
4119 * CHANGE_BRIDGE_ONLY / CHANGE_BRIDGE
4120 */
4121int pci_set_vga_state(struct pci_dev *dev, bool decode,
4122		      unsigned int command_bits, u32 flags)
4123{
4124	struct pci_bus *bus;
4125	struct pci_dev *bridge;
4126	u16 cmd;
4127	int rc;
4128
4129	WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)));
4130
4131	/* ARCH specific VGA enables */
4132	rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);
4133	if (rc)
4134		return rc;
4135
4136	if (flags & PCI_VGA_STATE_CHANGE_DECODES) {
4137		pci_read_config_word(dev, PCI_COMMAND, &cmd);
4138		if (decode == true)
4139			cmd |= command_bits;
4140		else
4141			cmd &= ~command_bits;
4142		pci_write_config_word(dev, PCI_COMMAND, cmd);
4143	}
4144
4145	if (!(flags & PCI_VGA_STATE_CHANGE_BRIDGE))
4146		return 0;
4147
4148	bus = dev->bus;
4149	while (bus) {
4150		bridge = bus->self;
4151		if (bridge) {
4152			pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
4153					     &cmd);
4154			if (decode == true)
4155				cmd |= PCI_BRIDGE_CTL_VGA;
4156			else
4157				cmd &= ~PCI_BRIDGE_CTL_VGA;
4158			pci_write_config_word(bridge, PCI_BRIDGE_CONTROL,
4159					      cmd);
4160		}
4161		bus = bus->parent;
4162	}
4163	return 0;
4164}
4165
4166bool pci_device_is_present(struct pci_dev *pdev)
4167{
4168	u32 v;
4169
4170	return pci_bus_read_dev_vendor_id(pdev->bus, pdev->devfn, &v, 0);
4171}
4172EXPORT_SYMBOL_GPL(pci_device_is_present);
4173
4174#define RESOURCE_ALIGNMENT_PARAM_SIZE COMMAND_LINE_SIZE
4175static char resource_alignment_param[RESOURCE_ALIGNMENT_PARAM_SIZE] = {0};
4176static DEFINE_SPINLOCK(resource_alignment_lock);
4177
4178/**
4179 * pci_specified_resource_alignment - get resource alignment specified by user.
4180 * @dev: the PCI device to get
4181 *
4182 * RETURNS: Resource alignment if it is specified.
4183 *          Zero if it is not specified.
4184 */
4185static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev)
4186{
4187	int seg, bus, slot, func, align_order, count;
4188	resource_size_t align = 0;
4189	char *p;
4190
4191	spin_lock(&resource_alignment_lock);
4192	p = resource_alignment_param;
4193	while (*p) {
4194		count = 0;
4195		if (sscanf(p, "%d%n", &align_order, &count) == 1 &&
4196							p[count] == '@') {
4197			p += count + 1;
4198		} else {
4199			align_order = -1;
4200		}
4201		if (sscanf(p, "%x:%x:%x.%x%n",
4202			&seg, &bus, &slot, &func, &count) != 4) {
4203			seg = 0;
4204			if (sscanf(p, "%x:%x.%x%n",
4205					&bus, &slot, &func, &count) != 3) {
4206				/* Invalid format */
4207				printk(KERN_ERR "PCI: Can't parse resource_alignment parameter: %s\n",
4208					p);
4209				break;
4210			}
4211		}
4212		p += count;
4213		if (seg == pci_domain_nr(dev->bus) &&
4214			bus == dev->bus->number &&
4215			slot == PCI_SLOT(dev->devfn) &&
4216			func == PCI_FUNC(dev->devfn)) {
4217			if (align_order == -1) {
4218				align = PAGE_SIZE;
4219			} else {
4220				align = 1 << align_order;
4221			}
4222			/* Found */
4223			break;
4224		}
4225		if (*p != ';' && *p != ',') {
4226			/* End of param or invalid format */
4227			break;
4228		}
4229		p++;
4230	}
4231	spin_unlock(&resource_alignment_lock);
4232	return align;
4233}
4234
4235/*
4236 * This function disables memory decoding and releases memory resources
4237 * of the device specified by kernel's boot parameter 'pci=resource_alignment='.
4238 * It also rounds up size to specified alignment.
4239 * Later on, the kernel will assign page-aligned memory resource back
4240 * to the device.
4241 */
4242void pci_reassigndev_resource_alignment(struct pci_dev *dev)
4243{
4244	int i;
4245	struct resource *r;
4246	resource_size_t align, size;
4247	u16 command;
4248
4249	/* check if specified PCI is target device to reassign */
4250	align = pci_specified_resource_alignment(dev);
4251	if (!align)
4252		return;
4253
4254	if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
4255	    (dev->class >> 8) == PCI_CLASS_BRIDGE_HOST) {
4256		dev_warn(&dev->dev,
4257			"Can't reassign resources to host bridge.\n");
4258		return;
4259	}
4260
4261	dev_info(&dev->dev,
4262		"Disabling memory decoding and releasing memory resources.\n");
4263	pci_read_config_word(dev, PCI_COMMAND, &command);
4264	command &= ~PCI_COMMAND_MEMORY;
4265	pci_write_config_word(dev, PCI_COMMAND, command);
4266
4267	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++) {
4268		r = &dev->resource[i];
4269		if (!(r->flags & IORESOURCE_MEM))
4270			continue;
4271		size = resource_size(r);
4272		if (size < align) {
4273			size = align;
4274			dev_info(&dev->dev,
4275				"Rounding up size of resource #%d to %#llx.\n",
4276				i, (unsigned long long)size);
4277		}
4278		r->flags |= IORESOURCE_UNSET;
4279		r->end = size - 1;
4280		r->start = 0;
4281	}
4282	/* Need to disable bridge's resource window,
4283	 * to enable the kernel to reassign new resource
4284	 * window later on.
4285	 */
4286	if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE &&
4287	    (dev->class >> 8) == PCI_CLASS_BRIDGE_PCI) {
4288		for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
4289			r = &dev->resource[i];
4290			if (!(r->flags & IORESOURCE_MEM))
4291				continue;
4292			r->flags |= IORESOURCE_UNSET;
4293			r->end = resource_size(r) - 1;
4294			r->start = 0;
4295		}
4296		pci_disable_bridge_window(dev);
4297	}
4298}
4299
4300static ssize_t pci_set_resource_alignment_param(const char *buf, size_t count)
4301{
4302	if (count > RESOURCE_ALIGNMENT_PARAM_SIZE - 1)
4303		count = RESOURCE_ALIGNMENT_PARAM_SIZE - 1;
4304	spin_lock(&resource_alignment_lock);
4305	strncpy(resource_alignment_param, buf, count);
4306	resource_alignment_param[count] = '\0';
4307	spin_unlock(&resource_alignment_lock);
4308	return count;
4309}
4310
4311static ssize_t pci_get_resource_alignment_param(char *buf, size_t size)
4312{
4313	size_t count;
4314	spin_lock(&resource_alignment_lock);
4315	count = snprintf(buf, size, "%s", resource_alignment_param);
4316	spin_unlock(&resource_alignment_lock);
4317	return count;
4318}
4319
4320static ssize_t pci_resource_alignment_show(struct bus_type *bus, char *buf)
4321{
4322	return pci_get_resource_alignment_param(buf, PAGE_SIZE);
4323}
4324
4325static ssize_t pci_resource_alignment_store(struct bus_type *bus,
4326					const char *buf, size_t count)
4327{
4328	return pci_set_resource_alignment_param(buf, count);
4329}
4330
4331BUS_ATTR(resource_alignment, 0644, pci_resource_alignment_show,
4332					pci_resource_alignment_store);
4333
4334static int __init pci_resource_alignment_sysfs_init(void)
4335{
4336	return bus_create_file(&pci_bus_type,
4337					&bus_attr_resource_alignment);
4338}
4339
4340late_initcall(pci_resource_alignment_sysfs_init);
4341
4342static void pci_no_domains(void)
4343{
4344#ifdef CONFIG_PCI_DOMAINS
4345	pci_domains_supported = 0;
4346#endif
4347}
4348
4349/**
4350 * pci_ext_cfg_avail - can we access extended PCI config space?
 
4351 *
4352 * Returns 1 if we can access PCI extended config space (offsets
4353 * greater than 0xff). This is the default implementation. Architecture
4354 * implementations can override this.
4355 */
4356int __weak pci_ext_cfg_avail(void)
4357{
4358	return 1;
4359}
4360
4361void __weak pci_fixup_cardbus(struct pci_bus *bus)
4362{
4363}
4364EXPORT_SYMBOL(pci_fixup_cardbus);
4365
4366static int __init pci_setup(char *str)
4367{
4368	while (str) {
4369		char *k = strchr(str, ',');
4370		if (k)
4371			*k++ = 0;
4372		if (*str && (str = pcibios_setup(str)) && *str) {
4373			if (!strcmp(str, "nomsi")) {
4374				pci_no_msi();
4375			} else if (!strcmp(str, "noaer")) {
4376				pci_no_aer();
4377			} else if (!strncmp(str, "realloc=", 8)) {
4378				pci_realloc_get_opt(str + 8);
4379			} else if (!strncmp(str, "realloc", 7)) {
4380				pci_realloc_get_opt("on");
4381			} else if (!strcmp(str, "nodomains")) {
4382				pci_no_domains();
4383			} else if (!strncmp(str, "noari", 5)) {
4384				pcie_ari_disabled = true;
4385			} else if (!strncmp(str, "cbiosize=", 9)) {
4386				pci_cardbus_io_size = memparse(str + 9, &str);
4387			} else if (!strncmp(str, "cbmemsize=", 10)) {
4388				pci_cardbus_mem_size = memparse(str + 10, &str);
4389			} else if (!strncmp(str, "resource_alignment=", 19)) {
4390				pci_set_resource_alignment_param(str + 19,
4391							strlen(str + 19));
4392			} else if (!strncmp(str, "ecrc=", 5)) {
4393				pcie_ecrc_get_policy(str + 5);
4394			} else if (!strncmp(str, "hpiosize=", 9)) {
4395				pci_hotplug_io_size = memparse(str + 9, &str);
4396			} else if (!strncmp(str, "hpmemsize=", 10)) {
4397				pci_hotplug_mem_size = memparse(str + 10, &str);
4398			} else if (!strncmp(str, "pcie_bus_tune_off", 17)) {
4399				pcie_bus_config = PCIE_BUS_TUNE_OFF;
4400			} else if (!strncmp(str, "pcie_bus_safe", 13)) {
4401				pcie_bus_config = PCIE_BUS_SAFE;
4402			} else if (!strncmp(str, "pcie_bus_perf", 13)) {
4403				pcie_bus_config = PCIE_BUS_PERFORMANCE;
4404			} else if (!strncmp(str, "pcie_bus_peer2peer", 18)) {
4405				pcie_bus_config = PCIE_BUS_PEER2PEER;
4406			} else if (!strncmp(str, "pcie_scan_all", 13)) {
4407				pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
4408			} else {
4409				printk(KERN_ERR "PCI: Unknown option `%s'\n",
4410						str);
4411			}
4412		}
4413		str = k;
4414	}
4415	return 0;
4416}
4417early_param("pci", pci_setup);
4418
4419EXPORT_SYMBOL(pci_reenable_device);
4420EXPORT_SYMBOL(pci_enable_device_io);
4421EXPORT_SYMBOL(pci_enable_device_mem);
4422EXPORT_SYMBOL(pci_enable_device);
4423EXPORT_SYMBOL(pcim_enable_device);
4424EXPORT_SYMBOL(pcim_pin_device);
4425EXPORT_SYMBOL(pci_disable_device);
4426EXPORT_SYMBOL(pci_find_capability);
4427EXPORT_SYMBOL(pci_bus_find_capability);
4428EXPORT_SYMBOL(pci_release_regions);
4429EXPORT_SYMBOL(pci_request_regions);
4430EXPORT_SYMBOL(pci_request_regions_exclusive);
4431EXPORT_SYMBOL(pci_release_region);
4432EXPORT_SYMBOL(pci_request_region);
4433EXPORT_SYMBOL(pci_request_region_exclusive);
4434EXPORT_SYMBOL(pci_release_selected_regions);
4435EXPORT_SYMBOL(pci_request_selected_regions);
4436EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
4437EXPORT_SYMBOL(pci_set_master);
4438EXPORT_SYMBOL(pci_clear_master);
4439EXPORT_SYMBOL(pci_set_mwi);
4440EXPORT_SYMBOL(pci_try_set_mwi);
4441EXPORT_SYMBOL(pci_clear_mwi);
4442EXPORT_SYMBOL_GPL(pci_intx);
4443EXPORT_SYMBOL(pci_assign_resource);
4444EXPORT_SYMBOL(pci_find_parent_resource);
4445EXPORT_SYMBOL(pci_select_bars);
4446
4447EXPORT_SYMBOL(pci_set_power_state);
4448EXPORT_SYMBOL(pci_save_state);
4449EXPORT_SYMBOL(pci_restore_state);
4450EXPORT_SYMBOL(pci_pme_capable);
4451EXPORT_SYMBOL(pci_pme_active);
4452EXPORT_SYMBOL(pci_wake_from_d3);
 
4453EXPORT_SYMBOL(pci_prepare_to_sleep);
4454EXPORT_SYMBOL(pci_back_from_sleep);
4455EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state);