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/module.h> 16 #include <linux/spinlock.h> 17 #include <linux/string.h> 18 #include <linux/log2.h> 19 #include <linux/pci-aspm.h> 20 #include <linux/pm_wakeup.h> 21 #include <asm/dma.h> /* isa_dma_bridge_buggy */ 22 #include "pci.h" 23 24 unsigned int pci_pm_d3_delay = 10; 25 26 #ifdef CONFIG_PCI_DOMAINS 27 int pci_domains_supported = 1; 28 #endif 29 30 #define DEFAULT_CARDBUS_IO_SIZE (256) 31 #define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024) 32 /* pci=cbmemsize=nnM,cbiosize=nn can override this */ 33 unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE; 34 unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE; 35 36 /** 37 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children 38 * @bus: pointer to PCI bus structure to search 39 * 40 * Given a PCI bus, returns the highest PCI bus number present in the set 41 * including the given PCI bus and its list of child PCI buses. 42 */ 43 unsigned char pci_bus_max_busnr(struct pci_bus* bus) 44 { 45 struct list_head *tmp; 46 unsigned char max, n; 47 48 max = bus->subordinate; 49 list_for_each(tmp, &bus->children) { 50 n = pci_bus_max_busnr(pci_bus_b(tmp)); 51 if(n > max) 52 max = n; 53 } 54 return max; 55 } 56 EXPORT_SYMBOL_GPL(pci_bus_max_busnr); 57 58 #if 0 59 /** 60 * pci_max_busnr - returns maximum PCI bus number 61 * 62 * Returns the highest PCI bus number present in the system global list of 63 * PCI buses. 64 */ 65 unsigned char __devinit 66 pci_max_busnr(void) 67 { 68 struct pci_bus *bus = NULL; 69 unsigned char max, n; 70 71 max = 0; 72 while ((bus = pci_find_next_bus(bus)) != NULL) { 73 n = pci_bus_max_busnr(bus); 74 if(n > max) 75 max = n; 76 } 77 return max; 78 } 79 80 #endif /* 0 */ 81 82 #define PCI_FIND_CAP_TTL 48 83 84 static int __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn, 85 u8 pos, int cap, int *ttl) 86 { 87 u8 id; 88 89 while ((*ttl)--) { 90 pci_bus_read_config_byte(bus, devfn, pos, &pos); 91 if (pos < 0x40) 92 break; 93 pos &= ~3; 94 pci_bus_read_config_byte(bus, devfn, pos + PCI_CAP_LIST_ID, 95 &id); 96 if (id == 0xff) 97 break; 98 if (id == cap) 99 return pos; 100 pos += PCI_CAP_LIST_NEXT; 101 } 102 return 0; 103 } 104 105 static int __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn, 106 u8 pos, int cap) 107 { 108 int ttl = PCI_FIND_CAP_TTL; 109 110 return __pci_find_next_cap_ttl(bus, devfn, pos, cap, &ttl); 111 } 112 113 int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap) 114 { 115 return __pci_find_next_cap(dev->bus, dev->devfn, 116 pos + PCI_CAP_LIST_NEXT, cap); 117 } 118 EXPORT_SYMBOL_GPL(pci_find_next_capability); 119 120 static int __pci_bus_find_cap_start(struct pci_bus *bus, 121 unsigned int devfn, u8 hdr_type) 122 { 123 u16 status; 124 125 pci_bus_read_config_word(bus, devfn, PCI_STATUS, &status); 126 if (!(status & PCI_STATUS_CAP_LIST)) 127 return 0; 128 129 switch (hdr_type) { 130 case PCI_HEADER_TYPE_NORMAL: 131 case PCI_HEADER_TYPE_BRIDGE: 132 return PCI_CAPABILITY_LIST; 133 case PCI_HEADER_TYPE_CARDBUS: 134 return PCI_CB_CAPABILITY_LIST; 135 default: 136 return 0; 137 } 138 139 return 0; 140 } 141 142 /** 143 * pci_find_capability - query for devices' capabilities 144 * @dev: PCI device to query 145 * @cap: capability code 146 * 147 * Tell if a device supports a given PCI capability. 148 * Returns the address of the requested capability structure within the 149 * device's PCI configuration space or 0 in case the device does not 150 * support it. Possible values for @cap: 151 * 152 * %PCI_CAP_ID_PM Power Management 153 * %PCI_CAP_ID_AGP Accelerated Graphics Port 154 * %PCI_CAP_ID_VPD Vital Product Data 155 * %PCI_CAP_ID_SLOTID Slot Identification 156 * %PCI_CAP_ID_MSI Message Signalled Interrupts 157 * %PCI_CAP_ID_CHSWP CompactPCI HotSwap 158 * %PCI_CAP_ID_PCIX PCI-X 159 * %PCI_CAP_ID_EXP PCI Express 160 */ 161 int pci_find_capability(struct pci_dev *dev, int cap) 162 { 163 int pos; 164 165 pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type); 166 if (pos) 167 pos = __pci_find_next_cap(dev->bus, dev->devfn, pos, cap); 168 169 return pos; 170 } 171 172 /** 173 * pci_bus_find_capability - query for devices' capabilities 174 * @bus: the PCI bus to query 175 * @devfn: PCI device to query 176 * @cap: capability code 177 * 178 * Like pci_find_capability() but works for pci devices that do not have a 179 * pci_dev structure set up yet. 180 * 181 * Returns the address of the requested capability structure within the 182 * device's PCI configuration space or 0 in case the device does not 183 * support it. 184 */ 185 int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap) 186 { 187 int pos; 188 u8 hdr_type; 189 190 pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type); 191 192 pos = __pci_bus_find_cap_start(bus, devfn, hdr_type & 0x7f); 193 if (pos) 194 pos = __pci_find_next_cap(bus, devfn, pos, cap); 195 196 return pos; 197 } 198 199 /** 200 * pci_find_ext_capability - Find an extended capability 201 * @dev: PCI device to query 202 * @cap: capability code 203 * 204 * Returns the address of the requested extended capability structure 205 * within the device's PCI configuration space or 0 if the device does 206 * not support it. Possible values for @cap: 207 * 208 * %PCI_EXT_CAP_ID_ERR Advanced Error Reporting 209 * %PCI_EXT_CAP_ID_VC Virtual Channel 210 * %PCI_EXT_CAP_ID_DSN Device Serial Number 211 * %PCI_EXT_CAP_ID_PWR Power Budgeting 212 */ 213 int pci_find_ext_capability(struct pci_dev *dev, int cap) 214 { 215 u32 header; 216 int ttl = 480; /* 3840 bytes, minimum 8 bytes per capability */ 217 int pos = 0x100; 218 219 if (dev->cfg_size <= 256) 220 return 0; 221 222 if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL) 223 return 0; 224 225 /* 226 * If we have no capabilities, this is indicated by cap ID, 227 * cap version and next pointer all being 0. 228 */ 229 if (header == 0) 230 return 0; 231 232 while (ttl-- > 0) { 233 if (PCI_EXT_CAP_ID(header) == cap) 234 return pos; 235 236 pos = PCI_EXT_CAP_NEXT(header); 237 if (pos < 0x100) 238 break; 239 240 if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL) 241 break; 242 } 243 244 return 0; 245 } 246 EXPORT_SYMBOL_GPL(pci_find_ext_capability); 247 248 static int __pci_find_next_ht_cap(struct pci_dev *dev, int pos, int ht_cap) 249 { 250 int rc, ttl = PCI_FIND_CAP_TTL; 251 u8 cap, mask; 252 253 if (ht_cap == HT_CAPTYPE_SLAVE || ht_cap == HT_CAPTYPE_HOST) 254 mask = HT_3BIT_CAP_MASK; 255 else 256 mask = HT_5BIT_CAP_MASK; 257 258 pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, pos, 259 PCI_CAP_ID_HT, &ttl); 260 while (pos) { 261 rc = pci_read_config_byte(dev, pos + 3, &cap); 262 if (rc != PCIBIOS_SUCCESSFUL) 263 return 0; 264 265 if ((cap & mask) == ht_cap) 266 return pos; 267 268 pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, 269 pos + PCI_CAP_LIST_NEXT, 270 PCI_CAP_ID_HT, &ttl); 271 } 272 273 return 0; 274 } 275 /** 276 * pci_find_next_ht_capability - query a device's Hypertransport capabilities 277 * @dev: PCI device to query 278 * @pos: Position from which to continue searching 279 * @ht_cap: Hypertransport capability code 280 * 281 * To be used in conjunction with pci_find_ht_capability() to search for 282 * all capabilities matching @ht_cap. @pos should always be a value returned 283 * from pci_find_ht_capability(). 284 * 285 * NB. To be 100% safe against broken PCI devices, the caller should take 286 * steps to avoid an infinite loop. 287 */ 288 int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap) 289 { 290 return __pci_find_next_ht_cap(dev, pos + PCI_CAP_LIST_NEXT, ht_cap); 291 } 292 EXPORT_SYMBOL_GPL(pci_find_next_ht_capability); 293 294 /** 295 * pci_find_ht_capability - query a device's Hypertransport capabilities 296 * @dev: PCI device to query 297 * @ht_cap: Hypertransport capability code 298 * 299 * Tell if a device supports a given Hypertransport capability. 300 * Returns an address within the device's PCI configuration space 301 * or 0 in case the device does not support the request capability. 302 * The address points to the PCI capability, of type PCI_CAP_ID_HT, 303 * which has a Hypertransport capability matching @ht_cap. 304 */ 305 int pci_find_ht_capability(struct pci_dev *dev, int ht_cap) 306 { 307 int pos; 308 309 pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type); 310 if (pos) 311 pos = __pci_find_next_ht_cap(dev, pos, ht_cap); 312 313 return pos; 314 } 315 EXPORT_SYMBOL_GPL(pci_find_ht_capability); 316 317 /** 318 * pci_find_parent_resource - return resource region of parent bus of given region 319 * @dev: PCI device structure contains resources to be searched 320 * @res: child resource record for which parent is sought 321 * 322 * For given resource region of given device, return the resource 323 * region of parent bus the given region is contained in or where 324 * it should be allocated from. 325 */ 326 struct resource * 327 pci_find_parent_resource(const struct pci_dev *dev, struct resource *res) 328 { 329 const struct pci_bus *bus = dev->bus; 330 int i; 331 struct resource *best = NULL; 332 333 for(i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { 334 struct resource *r = bus->resource[i]; 335 if (!r) 336 continue; 337 if (res->start && !(res->start >= r->start && res->end <= r->end)) 338 continue; /* Not contained */ 339 if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM)) 340 continue; /* Wrong type */ 341 if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH)) 342 return r; /* Exact match */ 343 if ((res->flags & IORESOURCE_PREFETCH) && !(r->flags & IORESOURCE_PREFETCH)) 344 best = r; /* Approximating prefetchable by non-prefetchable */ 345 } 346 return best; 347 } 348 349 /** 350 * pci_restore_bars - restore a devices BAR values (e.g. after wake-up) 351 * @dev: PCI device to have its BARs restored 352 * 353 * Restore the BAR values for a given device, so as to make it 354 * accessible by its driver. 355 */ 356 static void 357 pci_restore_bars(struct pci_dev *dev) 358 { 359 int i, numres; 360 361 switch (dev->hdr_type) { 362 case PCI_HEADER_TYPE_NORMAL: 363 numres = 6; 364 break; 365 case PCI_HEADER_TYPE_BRIDGE: 366 numres = 2; 367 break; 368 case PCI_HEADER_TYPE_CARDBUS: 369 numres = 1; 370 break; 371 default: 372 /* Should never get here, but just in case... */ 373 return; 374 } 375 376 for (i = 0; i < numres; i ++) 377 pci_update_resource(dev, &dev->resource[i], i); 378 } 379 380 static struct pci_platform_pm_ops *pci_platform_pm; 381 382 int pci_set_platform_pm(struct pci_platform_pm_ops *ops) 383 { 384 if (!ops->is_manageable || !ops->set_state || !ops->choose_state 385 || !ops->sleep_wake || !ops->can_wakeup) 386 return -EINVAL; 387 pci_platform_pm = ops; 388 return 0; 389 } 390 391 static inline bool platform_pci_power_manageable(struct pci_dev *dev) 392 { 393 return pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false; 394 } 395 396 static inline int platform_pci_set_power_state(struct pci_dev *dev, 397 pci_power_t t) 398 { 399 return pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS; 400 } 401 402 static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev) 403 { 404 return pci_platform_pm ? 405 pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR; 406 } 407 408 static inline bool platform_pci_can_wakeup(struct pci_dev *dev) 409 { 410 return pci_platform_pm ? pci_platform_pm->can_wakeup(dev) : false; 411 } 412 413 static inline int platform_pci_sleep_wake(struct pci_dev *dev, bool enable) 414 { 415 return pci_platform_pm ? 416 pci_platform_pm->sleep_wake(dev, enable) : -ENODEV; 417 } 418 419 /** 420 * pci_raw_set_power_state - Use PCI PM registers to set the power state of 421 * given PCI device 422 * @dev: PCI device to handle. 423 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into. 424 * 425 * RETURN VALUE: 426 * -EINVAL if the requested state is invalid. 427 * -EIO if device does not support PCI PM or its PM capabilities register has a 428 * wrong version, or device doesn't support the requested state. 429 * 0 if device already is in the requested state. 430 * 0 if device's power state has been successfully changed. 431 */ 432 static int 433 pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state) 434 { 435 u16 pmcsr; 436 bool need_restore = false; 437 438 if (!dev->pm_cap) 439 return -EIO; 440 441 if (state < PCI_D0 || state > PCI_D3hot) 442 return -EINVAL; 443 444 /* Validate current state: 445 * Can enter D0 from any state, but if we can only go deeper 446 * to sleep if we're already in a low power state 447 */ 448 if (dev->current_state == state) { 449 /* we're already there */ 450 return 0; 451 } else if (state != PCI_D0 && dev->current_state <= PCI_D3cold 452 && dev->current_state > state) { 453 dev_err(&dev->dev, "invalid power transition " 454 "(from state %d to %d)\n", dev->current_state, state); 455 return -EINVAL; 456 } 457 458 /* check if this device supports the desired state */ 459 if ((state == PCI_D1 && !dev->d1_support) 460 || (state == PCI_D2 && !dev->d2_support)) 461 return -EIO; 462 463 pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr); 464 465 /* If we're (effectively) in D3, force entire word to 0. 466 * This doesn't affect PME_Status, disables PME_En, and 467 * sets PowerState to 0. 468 */ 469 switch (dev->current_state) { 470 case PCI_D0: 471 case PCI_D1: 472 case PCI_D2: 473 pmcsr &= ~PCI_PM_CTRL_STATE_MASK; 474 pmcsr |= state; 475 break; 476 case PCI_UNKNOWN: /* Boot-up */ 477 if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot 478 && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET)) 479 need_restore = true; 480 /* Fall-through: force to D0 */ 481 default: 482 pmcsr = 0; 483 break; 484 } 485 486 /* enter specified state */ 487 pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr); 488 489 /* Mandatory power management transition delays */ 490 /* see PCI PM 1.1 5.6.1 table 18 */ 491 if (state == PCI_D3hot || dev->current_state == PCI_D3hot) 492 msleep(pci_pm_d3_delay); 493 else if (state == PCI_D2 || dev->current_state == PCI_D2) 494 udelay(200); 495 496 dev->current_state = state; 497 498 /* According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT 499 * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning 500 * from D3hot to D0 _may_ perform an internal reset, thereby 501 * going to "D0 Uninitialized" rather than "D0 Initialized". 502 * For example, at least some versions of the 3c905B and the 503 * 3c556B exhibit this behaviour. 504 * 505 * At least some laptop BIOSen (e.g. the Thinkpad T21) leave 506 * devices in a D3hot state at boot. Consequently, we need to 507 * restore at least the BARs so that the device will be 508 * accessible to its driver. 509 */ 510 if (need_restore) 511 pci_restore_bars(dev); 512 513 if (dev->bus->self) 514 pcie_aspm_pm_state_change(dev->bus->self); 515 516 return 0; 517 } 518 519 /** 520 * pci_update_current_state - Read PCI power state of given device from its 521 * PCI PM registers and cache it 522 * @dev: PCI device to handle. 523 */ 524 static void pci_update_current_state(struct pci_dev *dev) 525 { 526 if (dev->pm_cap) { 527 u16 pmcsr; 528 529 pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr); 530 dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK); 531 } 532 } 533 534 /** 535 * pci_set_power_state - Set the power state of a PCI device 536 * @dev: PCI device to handle. 537 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into. 538 * 539 * Transition a device to a new power state, using the platform formware and/or 540 * the device's PCI PM registers. 541 * 542 * RETURN VALUE: 543 * -EINVAL if the requested state is invalid. 544 * -EIO if device does not support PCI PM or its PM capabilities register has a 545 * wrong version, or device doesn't support the requested state. 546 * 0 if device already is in the requested state. 547 * 0 if device's power state has been successfully changed. 548 */ 549 int pci_set_power_state(struct pci_dev *dev, pci_power_t state) 550 { 551 int error; 552 553 /* bound the state we're entering */ 554 if (state > PCI_D3hot) 555 state = PCI_D3hot; 556 else if (state < PCI_D0) 557 state = PCI_D0; 558 else if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev)) 559 /* 560 * If the device or the parent bridge do not support PCI PM, 561 * ignore the request if we're doing anything other than putting 562 * it into D0 (which would only happen on boot). 563 */ 564 return 0; 565 566 if (state == PCI_D0 && platform_pci_power_manageable(dev)) { 567 /* 568 * Allow the platform to change the state, for example via ACPI 569 * _PR0, _PS0 and some such, but do not trust it. 570 */ 571 int ret = platform_pci_set_power_state(dev, PCI_D0); 572 if (!ret) 573 pci_update_current_state(dev); 574 } 575 /* This device is quirked not to be put into D3, so 576 don't put it in D3 */ 577 if (state == PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3)) 578 return 0; 579 580 error = pci_raw_set_power_state(dev, state); 581 582 if (state > PCI_D0 && platform_pci_power_manageable(dev)) { 583 /* Allow the platform to finalize the transition */ 584 int ret = platform_pci_set_power_state(dev, state); 585 if (!ret) { 586 pci_update_current_state(dev); 587 error = 0; 588 } 589 } 590 591 return error; 592 } 593 594 /** 595 * pci_choose_state - Choose the power state of a PCI device 596 * @dev: PCI device to be suspended 597 * @state: target sleep state for the whole system. This is the value 598 * that is passed to suspend() function. 599 * 600 * Returns PCI power state suitable for given device and given system 601 * message. 602 */ 603 604 pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state) 605 { 606 pci_power_t ret; 607 608 if (!pci_find_capability(dev, PCI_CAP_ID_PM)) 609 return PCI_D0; 610 611 ret = platform_pci_choose_state(dev); 612 if (ret != PCI_POWER_ERROR) 613 return ret; 614 615 switch (state.event) { 616 case PM_EVENT_ON: 617 return PCI_D0; 618 case PM_EVENT_FREEZE: 619 case PM_EVENT_PRETHAW: 620 /* REVISIT both freeze and pre-thaw "should" use D0 */ 621 case PM_EVENT_SUSPEND: 622 case PM_EVENT_HIBERNATE: 623 return PCI_D3hot; 624 default: 625 dev_info(&dev->dev, "unrecognized suspend event %d\n", 626 state.event); 627 BUG(); 628 } 629 return PCI_D0; 630 } 631 632 EXPORT_SYMBOL(pci_choose_state); 633 634 static int pci_save_pcie_state(struct pci_dev *dev) 635 { 636 int pos, i = 0; 637 struct pci_cap_saved_state *save_state; 638 u16 *cap; 639 int found = 0; 640 641 pos = pci_find_capability(dev, PCI_CAP_ID_EXP); 642 if (pos <= 0) 643 return 0; 644 645 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); 646 if (!save_state) 647 save_state = kzalloc(sizeof(*save_state) + sizeof(u16) * 4, GFP_KERNEL); 648 else 649 found = 1; 650 if (!save_state) { 651 dev_err(&dev->dev, "out of memory in pci_save_pcie_state\n"); 652 return -ENOMEM; 653 } 654 cap = (u16 *)&save_state->data[0]; 655 656 pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]); 657 pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]); 658 pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]); 659 pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]); 660 save_state->cap_nr = PCI_CAP_ID_EXP; 661 if (!found) 662 pci_add_saved_cap(dev, save_state); 663 return 0; 664 } 665 666 static void pci_restore_pcie_state(struct pci_dev *dev) 667 { 668 int i = 0, pos; 669 struct pci_cap_saved_state *save_state; 670 u16 *cap; 671 672 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); 673 pos = pci_find_capability(dev, PCI_CAP_ID_EXP); 674 if (!save_state || pos <= 0) 675 return; 676 cap = (u16 *)&save_state->data[0]; 677 678 pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]); 679 pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]); 680 pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]); 681 pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]); 682 } 683 684 685 static int pci_save_pcix_state(struct pci_dev *dev) 686 { 687 int pos, i = 0; 688 struct pci_cap_saved_state *save_state; 689 u16 *cap; 690 int found = 0; 691 692 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX); 693 if (pos <= 0) 694 return 0; 695 696 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX); 697 if (!save_state) 698 save_state = kzalloc(sizeof(*save_state) + sizeof(u16), GFP_KERNEL); 699 else 700 found = 1; 701 if (!save_state) { 702 dev_err(&dev->dev, "out of memory in pci_save_pcie_state\n"); 703 return -ENOMEM; 704 } 705 cap = (u16 *)&save_state->data[0]; 706 707 pci_read_config_word(dev, pos + PCI_X_CMD, &cap[i++]); 708 save_state->cap_nr = PCI_CAP_ID_PCIX; 709 if (!found) 710 pci_add_saved_cap(dev, save_state); 711 return 0; 712 } 713 714 static void pci_restore_pcix_state(struct pci_dev *dev) 715 { 716 int i = 0, pos; 717 struct pci_cap_saved_state *save_state; 718 u16 *cap; 719 720 save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX); 721 pos = pci_find_capability(dev, PCI_CAP_ID_PCIX); 722 if (!save_state || pos <= 0) 723 return; 724 cap = (u16 *)&save_state->data[0]; 725 726 pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]); 727 } 728 729 730 /** 731 * pci_save_state - save the PCI configuration space of a device before suspending 732 * @dev: - PCI device that we're dealing with 733 */ 734 int 735 pci_save_state(struct pci_dev *dev) 736 { 737 int i; 738 /* XXX: 100% dword access ok here? */ 739 for (i = 0; i < 16; i++) 740 pci_read_config_dword(dev, i * 4,&dev->saved_config_space[i]); 741 if ((i = pci_save_pcie_state(dev)) != 0) 742 return i; 743 if ((i = pci_save_pcix_state(dev)) != 0) 744 return i; 745 return 0; 746 } 747 748 /** 749 * pci_restore_state - Restore the saved state of a PCI device 750 * @dev: - PCI device that we're dealing with 751 */ 752 int 753 pci_restore_state(struct pci_dev *dev) 754 { 755 int i; 756 u32 val; 757 758 /* PCI Express register must be restored first */ 759 pci_restore_pcie_state(dev); 760 761 /* 762 * The Base Address register should be programmed before the command 763 * register(s) 764 */ 765 for (i = 15; i >= 0; i--) { 766 pci_read_config_dword(dev, i * 4, &val); 767 if (val != dev->saved_config_space[i]) { 768 dev_printk(KERN_DEBUG, &dev->dev, "restoring config " 769 "space at offset %#x (was %#x, writing %#x)\n", 770 i, val, (int)dev->saved_config_space[i]); 771 pci_write_config_dword(dev,i * 4, 772 dev->saved_config_space[i]); 773 } 774 } 775 pci_restore_pcix_state(dev); 776 pci_restore_msi_state(dev); 777 778 return 0; 779 } 780 781 static int do_pci_enable_device(struct pci_dev *dev, int bars) 782 { 783 int err; 784 785 err = pci_set_power_state(dev, PCI_D0); 786 if (err < 0 && err != -EIO) 787 return err; 788 err = pcibios_enable_device(dev, bars); 789 if (err < 0) 790 return err; 791 pci_fixup_device(pci_fixup_enable, dev); 792 793 return 0; 794 } 795 796 /** 797 * pci_reenable_device - Resume abandoned device 798 * @dev: PCI device to be resumed 799 * 800 * Note this function is a backend of pci_default_resume and is not supposed 801 * to be called by normal code, write proper resume handler and use it instead. 802 */ 803 int pci_reenable_device(struct pci_dev *dev) 804 { 805 if (atomic_read(&dev->enable_cnt)) 806 return do_pci_enable_device(dev, (1 << PCI_NUM_RESOURCES) - 1); 807 return 0; 808 } 809 810 static int __pci_enable_device_flags(struct pci_dev *dev, 811 resource_size_t flags) 812 { 813 int err; 814 int i, bars = 0; 815 816 if (atomic_add_return(1, &dev->enable_cnt) > 1) 817 return 0; /* already enabled */ 818 819 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) 820 if (dev->resource[i].flags & flags) 821 bars |= (1 << i); 822 823 err = do_pci_enable_device(dev, bars); 824 if (err < 0) 825 atomic_dec(&dev->enable_cnt); 826 return err; 827 } 828 829 /** 830 * pci_enable_device_io - Initialize a device for use with IO space 831 * @dev: PCI device to be initialized 832 * 833 * Initialize device before it's used by a driver. Ask low-level code 834 * to enable I/O resources. Wake up the device if it was suspended. 835 * Beware, this function can fail. 836 */ 837 int pci_enable_device_io(struct pci_dev *dev) 838 { 839 return __pci_enable_device_flags(dev, IORESOURCE_IO); 840 } 841 842 /** 843 * pci_enable_device_mem - Initialize a device for use with Memory space 844 * @dev: PCI device to be initialized 845 * 846 * Initialize device before it's used by a driver. Ask low-level code 847 * to enable Memory resources. Wake up the device if it was suspended. 848 * Beware, this function can fail. 849 */ 850 int pci_enable_device_mem(struct pci_dev *dev) 851 { 852 return __pci_enable_device_flags(dev, IORESOURCE_MEM); 853 } 854 855 /** 856 * pci_enable_device - Initialize device before it's used by a driver. 857 * @dev: PCI device to be initialized 858 * 859 * Initialize device before it's used by a driver. Ask low-level code 860 * to enable I/O and memory. Wake up the device if it was suspended. 861 * Beware, this function can fail. 862 * 863 * Note we don't actually enable the device many times if we call 864 * this function repeatedly (we just increment the count). 865 */ 866 int pci_enable_device(struct pci_dev *dev) 867 { 868 return __pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO); 869 } 870 871 /* 872 * Managed PCI resources. This manages device on/off, intx/msi/msix 873 * on/off and BAR regions. pci_dev itself records msi/msix status, so 874 * there's no need to track it separately. pci_devres is initialized 875 * when a device is enabled using managed PCI device enable interface. 876 */ 877 struct pci_devres { 878 unsigned int enabled:1; 879 unsigned int pinned:1; 880 unsigned int orig_intx:1; 881 unsigned int restore_intx:1; 882 u32 region_mask; 883 }; 884 885 static void pcim_release(struct device *gendev, void *res) 886 { 887 struct pci_dev *dev = container_of(gendev, struct pci_dev, dev); 888 struct pci_devres *this = res; 889 int i; 890 891 if (dev->msi_enabled) 892 pci_disable_msi(dev); 893 if (dev->msix_enabled) 894 pci_disable_msix(dev); 895 896 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) 897 if (this->region_mask & (1 << i)) 898 pci_release_region(dev, i); 899 900 if (this->restore_intx) 901 pci_intx(dev, this->orig_intx); 902 903 if (this->enabled && !this->pinned) 904 pci_disable_device(dev); 905 } 906 907 static struct pci_devres * get_pci_dr(struct pci_dev *pdev) 908 { 909 struct pci_devres *dr, *new_dr; 910 911 dr = devres_find(&pdev->dev, pcim_release, NULL, NULL); 912 if (dr) 913 return dr; 914 915 new_dr = devres_alloc(pcim_release, sizeof(*new_dr), GFP_KERNEL); 916 if (!new_dr) 917 return NULL; 918 return devres_get(&pdev->dev, new_dr, NULL, NULL); 919 } 920 921 static struct pci_devres * find_pci_dr(struct pci_dev *pdev) 922 { 923 if (pci_is_managed(pdev)) 924 return devres_find(&pdev->dev, pcim_release, NULL, NULL); 925 return NULL; 926 } 927 928 /** 929 * pcim_enable_device - Managed pci_enable_device() 930 * @pdev: PCI device to be initialized 931 * 932 * Managed pci_enable_device(). 933 */ 934 int pcim_enable_device(struct pci_dev *pdev) 935 { 936 struct pci_devres *dr; 937 int rc; 938 939 dr = get_pci_dr(pdev); 940 if (unlikely(!dr)) 941 return -ENOMEM; 942 if (dr->enabled) 943 return 0; 944 945 rc = pci_enable_device(pdev); 946 if (!rc) { 947 pdev->is_managed = 1; 948 dr->enabled = 1; 949 } 950 return rc; 951 } 952 953 /** 954 * pcim_pin_device - Pin managed PCI device 955 * @pdev: PCI device to pin 956 * 957 * Pin managed PCI device @pdev. Pinned device won't be disabled on 958 * driver detach. @pdev must have been enabled with 959 * pcim_enable_device(). 960 */ 961 void pcim_pin_device(struct pci_dev *pdev) 962 { 963 struct pci_devres *dr; 964 965 dr = find_pci_dr(pdev); 966 WARN_ON(!dr || !dr->enabled); 967 if (dr) 968 dr->pinned = 1; 969 } 970 971 /** 972 * pcibios_disable_device - disable arch specific PCI resources for device dev 973 * @dev: the PCI device to disable 974 * 975 * Disables architecture specific PCI resources for the device. This 976 * is the default implementation. Architecture implementations can 977 * override this. 978 */ 979 void __attribute__ ((weak)) pcibios_disable_device (struct pci_dev *dev) {} 980 981 /** 982 * pci_disable_device - Disable PCI device after use 983 * @dev: PCI device to be disabled 984 * 985 * Signal to the system that the PCI device is not in use by the system 986 * anymore. This only involves disabling PCI bus-mastering, if active. 987 * 988 * Note we don't actually disable the device until all callers of 989 * pci_device_enable() have called pci_device_disable(). 990 */ 991 void 992 pci_disable_device(struct pci_dev *dev) 993 { 994 struct pci_devres *dr; 995 u16 pci_command; 996 997 dr = find_pci_dr(dev); 998 if (dr) 999 dr->enabled = 0; 1000 1001 if (atomic_sub_return(1, &dev->enable_cnt) != 0) 1002 return; 1003 1004 pci_read_config_word(dev, PCI_COMMAND, &pci_command); 1005 if (pci_command & PCI_COMMAND_MASTER) { 1006 pci_command &= ~PCI_COMMAND_MASTER; 1007 pci_write_config_word(dev, PCI_COMMAND, pci_command); 1008 } 1009 dev->is_busmaster = 0; 1010 1011 pcibios_disable_device(dev); 1012 } 1013 1014 /** 1015 * pcibios_set_pcie_reset_state - set reset state for device dev 1016 * @dev: the PCI-E device reset 1017 * @state: Reset state to enter into 1018 * 1019 * 1020 * Sets the PCI-E reset state for the device. This is the default 1021 * implementation. Architecture implementations can override this. 1022 */ 1023 int __attribute__ ((weak)) pcibios_set_pcie_reset_state(struct pci_dev *dev, 1024 enum pcie_reset_state state) 1025 { 1026 return -EINVAL; 1027 } 1028 1029 /** 1030 * pci_set_pcie_reset_state - set reset state for device dev 1031 * @dev: the PCI-E device reset 1032 * @state: Reset state to enter into 1033 * 1034 * 1035 * Sets the PCI reset state for the device. 1036 */ 1037 int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state) 1038 { 1039 return pcibios_set_pcie_reset_state(dev, state); 1040 } 1041 1042 /** 1043 * pci_pme_capable - check the capability of PCI device to generate PME# 1044 * @dev: PCI device to handle. 1045 * @state: PCI state from which device will issue PME#. 1046 */ 1047 bool pci_pme_capable(struct pci_dev *dev, pci_power_t state) 1048 { 1049 if (!dev->pm_cap) 1050 return false; 1051 1052 return !!(dev->pme_support & (1 << state)); 1053 } 1054 1055 /** 1056 * pci_pme_active - enable or disable PCI device's PME# function 1057 * @dev: PCI device to handle. 1058 * @enable: 'true' to enable PME# generation; 'false' to disable it. 1059 * 1060 * The caller must verify that the device is capable of generating PME# before 1061 * calling this function with @enable equal to 'true'. 1062 */ 1063 void pci_pme_active(struct pci_dev *dev, bool enable) 1064 { 1065 u16 pmcsr; 1066 1067 if (!dev->pm_cap) 1068 return; 1069 1070 pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr); 1071 /* Clear PME_Status by writing 1 to it and enable PME# */ 1072 pmcsr |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE; 1073 if (!enable) 1074 pmcsr &= ~PCI_PM_CTRL_PME_ENABLE; 1075 1076 pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr); 1077 1078 dev_printk(KERN_INFO, &dev->dev, "PME# %s\n", 1079 enable ? "enabled" : "disabled"); 1080 } 1081 1082 /** 1083 * pci_enable_wake - enable PCI device as wakeup event source 1084 * @dev: PCI device affected 1085 * @state: PCI state from which device will issue wakeup events 1086 * @enable: True to enable event generation; false to disable 1087 * 1088 * This enables the device as a wakeup event source, or disables it. 1089 * When such events involves platform-specific hooks, those hooks are 1090 * called automatically by this routine. 1091 * 1092 * Devices with legacy power management (no standard PCI PM capabilities) 1093 * always require such platform hooks. 1094 * 1095 * RETURN VALUE: 1096 * 0 is returned on success 1097 * -EINVAL is returned if device is not supposed to wake up the system 1098 * Error code depending on the platform is returned if both the platform and 1099 * the native mechanism fail to enable the generation of wake-up events 1100 */ 1101 int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable) 1102 { 1103 int error = 0; 1104 bool pme_done = false; 1105 1106 if (!device_may_wakeup(&dev->dev)) 1107 return -EINVAL; 1108 1109 /* 1110 * According to "PCI System Architecture" 4th ed. by Tom Shanley & Don 1111 * Anderson we should be doing PME# wake enable followed by ACPI wake 1112 * enable. To disable wake-up we call the platform first, for symmetry. 1113 */ 1114 1115 if (!enable && platform_pci_can_wakeup(dev)) 1116 error = platform_pci_sleep_wake(dev, false); 1117 1118 if (!enable || pci_pme_capable(dev, state)) { 1119 pci_pme_active(dev, enable); 1120 pme_done = true; 1121 } 1122 1123 if (enable && platform_pci_can_wakeup(dev)) 1124 error = platform_pci_sleep_wake(dev, true); 1125 1126 return pme_done ? 0 : error; 1127 } 1128 1129 /** 1130 * pci_target_state - find an appropriate low power state for a given PCI dev 1131 * @dev: PCI device 1132 * 1133 * Use underlying platform code to find a supported low power state for @dev. 1134 * If the platform can't manage @dev, return the deepest state from which it 1135 * can generate wake events, based on any available PME info. 1136 */ 1137 pci_power_t pci_target_state(struct pci_dev *dev) 1138 { 1139 pci_power_t target_state = PCI_D3hot; 1140 1141 if (platform_pci_power_manageable(dev)) { 1142 /* 1143 * Call the platform to choose the target state of the device 1144 * and enable wake-up from this state if supported. 1145 */ 1146 pci_power_t state = platform_pci_choose_state(dev); 1147 1148 switch (state) { 1149 case PCI_POWER_ERROR: 1150 case PCI_UNKNOWN: 1151 break; 1152 case PCI_D1: 1153 case PCI_D2: 1154 if (pci_no_d1d2(dev)) 1155 break; 1156 default: 1157 target_state = state; 1158 } 1159 } else if (device_may_wakeup(&dev->dev)) { 1160 /* 1161 * Find the deepest state from which the device can generate 1162 * wake-up events, make it the target state and enable device 1163 * to generate PME#. 1164 */ 1165 if (!dev->pm_cap) 1166 return PCI_POWER_ERROR; 1167 1168 if (dev->pme_support) { 1169 while (target_state 1170 && !(dev->pme_support & (1 << target_state))) 1171 target_state--; 1172 } 1173 } 1174 1175 return target_state; 1176 } 1177 1178 /** 1179 * pci_prepare_to_sleep - prepare PCI device for system-wide transition into a sleep state 1180 * @dev: Device to handle. 1181 * 1182 * Choose the power state appropriate for the device depending on whether 1183 * it can wake up the system and/or is power manageable by the platform 1184 * (PCI_D3hot is the default) and put the device into that state. 1185 */ 1186 int pci_prepare_to_sleep(struct pci_dev *dev) 1187 { 1188 pci_power_t target_state = pci_target_state(dev); 1189 int error; 1190 1191 if (target_state == PCI_POWER_ERROR) 1192 return -EIO; 1193 1194 pci_enable_wake(dev, target_state, true); 1195 1196 error = pci_set_power_state(dev, target_state); 1197 1198 if (error) 1199 pci_enable_wake(dev, target_state, false); 1200 1201 return error; 1202 } 1203 1204 /** 1205 * pci_back_from_sleep - turn PCI device on during system-wide transition into working state 1206 * @dev: Device to handle. 1207 * 1208 * Disable device's sytem wake-up capability and put it into D0. 1209 */ 1210 int pci_back_from_sleep(struct pci_dev *dev) 1211 { 1212 pci_enable_wake(dev, PCI_D0, false); 1213 return pci_set_power_state(dev, PCI_D0); 1214 } 1215 1216 /** 1217 * pci_pm_init - Initialize PM functions of given PCI device 1218 * @dev: PCI device to handle. 1219 */ 1220 void pci_pm_init(struct pci_dev *dev) 1221 { 1222 int pm; 1223 u16 pmc; 1224 1225 dev->pm_cap = 0; 1226 1227 /* find PCI PM capability in list */ 1228 pm = pci_find_capability(dev, PCI_CAP_ID_PM); 1229 if (!pm) 1230 return; 1231 /* Check device's ability to generate PME# */ 1232 pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc); 1233 1234 if ((pmc & PCI_PM_CAP_VER_MASK) > 3) { 1235 dev_err(&dev->dev, "unsupported PM cap regs version (%u)\n", 1236 pmc & PCI_PM_CAP_VER_MASK); 1237 return; 1238 } 1239 1240 dev->pm_cap = pm; 1241 1242 dev->d1_support = false; 1243 dev->d2_support = false; 1244 if (!pci_no_d1d2(dev)) { 1245 if (pmc & PCI_PM_CAP_D1) { 1246 dev_printk(KERN_DEBUG, &dev->dev, "supports D1\n"); 1247 dev->d1_support = true; 1248 } 1249 if (pmc & PCI_PM_CAP_D2) { 1250 dev_printk(KERN_DEBUG, &dev->dev, "supports D2\n"); 1251 dev->d2_support = true; 1252 } 1253 } 1254 1255 pmc &= PCI_PM_CAP_PME_MASK; 1256 if (pmc) { 1257 dev_printk(KERN_INFO, &dev->dev, 1258 "PME# supported from%s%s%s%s%s\n", 1259 (pmc & PCI_PM_CAP_PME_D0) ? " D0" : "", 1260 (pmc & PCI_PM_CAP_PME_D1) ? " D1" : "", 1261 (pmc & PCI_PM_CAP_PME_D2) ? " D2" : "", 1262 (pmc & PCI_PM_CAP_PME_D3) ? " D3hot" : "", 1263 (pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : ""); 1264 dev->pme_support = pmc >> PCI_PM_CAP_PME_SHIFT; 1265 /* 1266 * Make device's PM flags reflect the wake-up capability, but 1267 * let the user space enable it to wake up the system as needed. 1268 */ 1269 device_set_wakeup_capable(&dev->dev, true); 1270 device_set_wakeup_enable(&dev->dev, false); 1271 /* Disable the PME# generation functionality */ 1272 pci_pme_active(dev, false); 1273 } else { 1274 dev->pme_support = 0; 1275 } 1276 } 1277 1278 int 1279 pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge) 1280 { 1281 u8 pin; 1282 1283 pin = dev->pin; 1284 if (!pin) 1285 return -1; 1286 pin--; 1287 while (dev->bus->self) { 1288 pin = (pin + PCI_SLOT(dev->devfn)) % 4; 1289 dev = dev->bus->self; 1290 } 1291 *bridge = dev; 1292 return pin; 1293 } 1294 1295 /** 1296 * pci_release_region - Release a PCI bar 1297 * @pdev: PCI device whose resources were previously reserved by pci_request_region 1298 * @bar: BAR to release 1299 * 1300 * Releases the PCI I/O and memory resources previously reserved by a 1301 * successful call to pci_request_region. Call this function only 1302 * after all use of the PCI regions has ceased. 1303 */ 1304 void pci_release_region(struct pci_dev *pdev, int bar) 1305 { 1306 struct pci_devres *dr; 1307 1308 if (pci_resource_len(pdev, bar) == 0) 1309 return; 1310 if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) 1311 release_region(pci_resource_start(pdev, bar), 1312 pci_resource_len(pdev, bar)); 1313 else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) 1314 release_mem_region(pci_resource_start(pdev, bar), 1315 pci_resource_len(pdev, bar)); 1316 1317 dr = find_pci_dr(pdev); 1318 if (dr) 1319 dr->region_mask &= ~(1 << bar); 1320 } 1321 1322 /** 1323 * pci_request_region - Reserved PCI I/O and memory resource 1324 * @pdev: PCI device whose resources are to be reserved 1325 * @bar: BAR to be reserved 1326 * @res_name: Name to be associated with resource. 1327 * 1328 * Mark the PCI region associated with PCI device @pdev BR @bar as 1329 * being reserved by owner @res_name. Do not access any 1330 * address inside the PCI regions unless this call returns 1331 * successfully. 1332 * 1333 * Returns 0 on success, or %EBUSY on error. A warning 1334 * message is also printed on failure. 1335 */ 1336 int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name) 1337 { 1338 struct pci_devres *dr; 1339 1340 if (pci_resource_len(pdev, bar) == 0) 1341 return 0; 1342 1343 if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) { 1344 if (!request_region(pci_resource_start(pdev, bar), 1345 pci_resource_len(pdev, bar), res_name)) 1346 goto err_out; 1347 } 1348 else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) { 1349 if (!request_mem_region(pci_resource_start(pdev, bar), 1350 pci_resource_len(pdev, bar), res_name)) 1351 goto err_out; 1352 } 1353 1354 dr = find_pci_dr(pdev); 1355 if (dr) 1356 dr->region_mask |= 1 << bar; 1357 1358 return 0; 1359 1360 err_out: 1361 dev_warn(&pdev->dev, "BAR %d: can't reserve %s region [%#llx-%#llx]\n", 1362 bar, 1363 pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem", 1364 (unsigned long long)pci_resource_start(pdev, bar), 1365 (unsigned long long)pci_resource_end(pdev, bar)); 1366 return -EBUSY; 1367 } 1368 1369 /** 1370 * pci_release_selected_regions - Release selected PCI I/O and memory resources 1371 * @pdev: PCI device whose resources were previously reserved 1372 * @bars: Bitmask of BARs to be released 1373 * 1374 * Release selected PCI I/O and memory resources previously reserved. 1375 * Call this function only after all use of the PCI regions has ceased. 1376 */ 1377 void pci_release_selected_regions(struct pci_dev *pdev, int bars) 1378 { 1379 int i; 1380 1381 for (i = 0; i < 6; i++) 1382 if (bars & (1 << i)) 1383 pci_release_region(pdev, i); 1384 } 1385 1386 /** 1387 * pci_request_selected_regions - Reserve selected PCI I/O and memory resources 1388 * @pdev: PCI device whose resources are to be reserved 1389 * @bars: Bitmask of BARs to be requested 1390 * @res_name: Name to be associated with resource 1391 */ 1392 int pci_request_selected_regions(struct pci_dev *pdev, int bars, 1393 const char *res_name) 1394 { 1395 int i; 1396 1397 for (i = 0; i < 6; i++) 1398 if (bars & (1 << i)) 1399 if(pci_request_region(pdev, i, res_name)) 1400 goto err_out; 1401 return 0; 1402 1403 err_out: 1404 while(--i >= 0) 1405 if (bars & (1 << i)) 1406 pci_release_region(pdev, i); 1407 1408 return -EBUSY; 1409 } 1410 1411 /** 1412 * pci_release_regions - Release reserved PCI I/O and memory resources 1413 * @pdev: PCI device whose resources were previously reserved by pci_request_regions 1414 * 1415 * Releases all PCI I/O and memory resources previously reserved by a 1416 * successful call to pci_request_regions. Call this function only 1417 * after all use of the PCI regions has ceased. 1418 */ 1419 1420 void pci_release_regions(struct pci_dev *pdev) 1421 { 1422 pci_release_selected_regions(pdev, (1 << 6) - 1); 1423 } 1424 1425 /** 1426 * pci_request_regions - Reserved PCI I/O and memory resources 1427 * @pdev: PCI device whose resources are to be reserved 1428 * @res_name: Name to be associated with resource. 1429 * 1430 * Mark all PCI regions associated with PCI device @pdev as 1431 * being reserved by owner @res_name. Do not access any 1432 * address inside the PCI regions unless this call returns 1433 * successfully. 1434 * 1435 * Returns 0 on success, or %EBUSY on error. A warning 1436 * message is also printed on failure. 1437 */ 1438 int pci_request_regions(struct pci_dev *pdev, const char *res_name) 1439 { 1440 return pci_request_selected_regions(pdev, ((1 << 6) - 1), res_name); 1441 } 1442 1443 /** 1444 * pci_set_master - enables bus-mastering for device dev 1445 * @dev: the PCI device to enable 1446 * 1447 * Enables bus-mastering on the device and calls pcibios_set_master() 1448 * to do the needed arch specific settings. 1449 */ 1450 void 1451 pci_set_master(struct pci_dev *dev) 1452 { 1453 u16 cmd; 1454 1455 pci_read_config_word(dev, PCI_COMMAND, &cmd); 1456 if (! (cmd & PCI_COMMAND_MASTER)) { 1457 dev_dbg(&dev->dev, "enabling bus mastering\n"); 1458 cmd |= PCI_COMMAND_MASTER; 1459 pci_write_config_word(dev, PCI_COMMAND, cmd); 1460 } 1461 dev->is_busmaster = 1; 1462 pcibios_set_master(dev); 1463 } 1464 1465 #ifdef PCI_DISABLE_MWI 1466 int pci_set_mwi(struct pci_dev *dev) 1467 { 1468 return 0; 1469 } 1470 1471 int pci_try_set_mwi(struct pci_dev *dev) 1472 { 1473 return 0; 1474 } 1475 1476 void pci_clear_mwi(struct pci_dev *dev) 1477 { 1478 } 1479 1480 #else 1481 1482 #ifndef PCI_CACHE_LINE_BYTES 1483 #define PCI_CACHE_LINE_BYTES L1_CACHE_BYTES 1484 #endif 1485 1486 /* This can be overridden by arch code. */ 1487 /* Don't forget this is measured in 32-bit words, not bytes */ 1488 u8 pci_cache_line_size = PCI_CACHE_LINE_BYTES / 4; 1489 1490 /** 1491 * pci_set_cacheline_size - ensure the CACHE_LINE_SIZE register is programmed 1492 * @dev: the PCI device for which MWI is to be enabled 1493 * 1494 * Helper function for pci_set_mwi. 1495 * Originally copied from drivers/net/acenic.c. 1496 * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>. 1497 * 1498 * RETURNS: An appropriate -ERRNO error value on error, or zero for success. 1499 */ 1500 static int 1501 pci_set_cacheline_size(struct pci_dev *dev) 1502 { 1503 u8 cacheline_size; 1504 1505 if (!pci_cache_line_size) 1506 return -EINVAL; /* The system doesn't support MWI. */ 1507 1508 /* Validate current setting: the PCI_CACHE_LINE_SIZE must be 1509 equal to or multiple of the right value. */ 1510 pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); 1511 if (cacheline_size >= pci_cache_line_size && 1512 (cacheline_size % pci_cache_line_size) == 0) 1513 return 0; 1514 1515 /* Write the correct value. */ 1516 pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size); 1517 /* Read it back. */ 1518 pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size); 1519 if (cacheline_size == pci_cache_line_size) 1520 return 0; 1521 1522 dev_printk(KERN_DEBUG, &dev->dev, "cache line size of %d is not " 1523 "supported\n", pci_cache_line_size << 2); 1524 1525 return -EINVAL; 1526 } 1527 1528 /** 1529 * pci_set_mwi - enables memory-write-invalidate PCI transaction 1530 * @dev: the PCI device for which MWI is enabled 1531 * 1532 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. 1533 * 1534 * RETURNS: An appropriate -ERRNO error value on error, or zero for success. 1535 */ 1536 int 1537 pci_set_mwi(struct pci_dev *dev) 1538 { 1539 int rc; 1540 u16 cmd; 1541 1542 rc = pci_set_cacheline_size(dev); 1543 if (rc) 1544 return rc; 1545 1546 pci_read_config_word(dev, PCI_COMMAND, &cmd); 1547 if (! (cmd & PCI_COMMAND_INVALIDATE)) { 1548 dev_dbg(&dev->dev, "enabling Mem-Wr-Inval\n"); 1549 cmd |= PCI_COMMAND_INVALIDATE; 1550 pci_write_config_word(dev, PCI_COMMAND, cmd); 1551 } 1552 1553 return 0; 1554 } 1555 1556 /** 1557 * pci_try_set_mwi - enables memory-write-invalidate PCI transaction 1558 * @dev: the PCI device for which MWI is enabled 1559 * 1560 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. 1561 * Callers are not required to check the return value. 1562 * 1563 * RETURNS: An appropriate -ERRNO error value on error, or zero for success. 1564 */ 1565 int pci_try_set_mwi(struct pci_dev *dev) 1566 { 1567 int rc = pci_set_mwi(dev); 1568 return rc; 1569 } 1570 1571 /** 1572 * pci_clear_mwi - disables Memory-Write-Invalidate for device dev 1573 * @dev: the PCI device to disable 1574 * 1575 * Disables PCI Memory-Write-Invalidate transaction on the device 1576 */ 1577 void 1578 pci_clear_mwi(struct pci_dev *dev) 1579 { 1580 u16 cmd; 1581 1582 pci_read_config_word(dev, PCI_COMMAND, &cmd); 1583 if (cmd & PCI_COMMAND_INVALIDATE) { 1584 cmd &= ~PCI_COMMAND_INVALIDATE; 1585 pci_write_config_word(dev, PCI_COMMAND, cmd); 1586 } 1587 } 1588 #endif /* ! PCI_DISABLE_MWI */ 1589 1590 /** 1591 * pci_intx - enables/disables PCI INTx for device dev 1592 * @pdev: the PCI device to operate on 1593 * @enable: boolean: whether to enable or disable PCI INTx 1594 * 1595 * Enables/disables PCI INTx for device dev 1596 */ 1597 void 1598 pci_intx(struct pci_dev *pdev, int enable) 1599 { 1600 u16 pci_command, new; 1601 1602 pci_read_config_word(pdev, PCI_COMMAND, &pci_command); 1603 1604 if (enable) { 1605 new = pci_command & ~PCI_COMMAND_INTX_DISABLE; 1606 } else { 1607 new = pci_command | PCI_COMMAND_INTX_DISABLE; 1608 } 1609 1610 if (new != pci_command) { 1611 struct pci_devres *dr; 1612 1613 pci_write_config_word(pdev, PCI_COMMAND, new); 1614 1615 dr = find_pci_dr(pdev); 1616 if (dr && !dr->restore_intx) { 1617 dr->restore_intx = 1; 1618 dr->orig_intx = !enable; 1619 } 1620 } 1621 } 1622 1623 /** 1624 * pci_msi_off - disables any msi or msix capabilities 1625 * @dev: the PCI device to operate on 1626 * 1627 * If you want to use msi see pci_enable_msi and friends. 1628 * This is a lower level primitive that allows us to disable 1629 * msi operation at the device level. 1630 */ 1631 void pci_msi_off(struct pci_dev *dev) 1632 { 1633 int pos; 1634 u16 control; 1635 1636 pos = pci_find_capability(dev, PCI_CAP_ID_MSI); 1637 if (pos) { 1638 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control); 1639 control &= ~PCI_MSI_FLAGS_ENABLE; 1640 pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control); 1641 } 1642 pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); 1643 if (pos) { 1644 pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control); 1645 control &= ~PCI_MSIX_FLAGS_ENABLE; 1646 pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control); 1647 } 1648 } 1649 1650 #ifndef HAVE_ARCH_PCI_SET_DMA_MASK 1651 /* 1652 * These can be overridden by arch-specific implementations 1653 */ 1654 int 1655 pci_set_dma_mask(struct pci_dev *dev, u64 mask) 1656 { 1657 if (!pci_dma_supported(dev, mask)) 1658 return -EIO; 1659 1660 dev->dma_mask = mask; 1661 1662 return 0; 1663 } 1664 1665 int 1666 pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) 1667 { 1668 if (!pci_dma_supported(dev, mask)) 1669 return -EIO; 1670 1671 dev->dev.coherent_dma_mask = mask; 1672 1673 return 0; 1674 } 1675 #endif 1676 1677 #ifndef HAVE_ARCH_PCI_SET_DMA_MAX_SEGMENT_SIZE 1678 int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size) 1679 { 1680 return dma_set_max_seg_size(&dev->dev, size); 1681 } 1682 EXPORT_SYMBOL(pci_set_dma_max_seg_size); 1683 #endif 1684 1685 #ifndef HAVE_ARCH_PCI_SET_DMA_SEGMENT_BOUNDARY 1686 int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask) 1687 { 1688 return dma_set_seg_boundary(&dev->dev, mask); 1689 } 1690 EXPORT_SYMBOL(pci_set_dma_seg_boundary); 1691 #endif 1692 1693 /** 1694 * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count 1695 * @dev: PCI device to query 1696 * 1697 * Returns mmrbc: maximum designed memory read count in bytes 1698 * or appropriate error value. 1699 */ 1700 int pcix_get_max_mmrbc(struct pci_dev *dev) 1701 { 1702 int err, cap; 1703 u32 stat; 1704 1705 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 1706 if (!cap) 1707 return -EINVAL; 1708 1709 err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); 1710 if (err) 1711 return -EINVAL; 1712 1713 return (stat & PCI_X_STATUS_MAX_READ) >> 12; 1714 } 1715 EXPORT_SYMBOL(pcix_get_max_mmrbc); 1716 1717 /** 1718 * pcix_get_mmrbc - get PCI-X maximum memory read byte count 1719 * @dev: PCI device to query 1720 * 1721 * Returns mmrbc: maximum memory read count in bytes 1722 * or appropriate error value. 1723 */ 1724 int pcix_get_mmrbc(struct pci_dev *dev) 1725 { 1726 int ret, cap; 1727 u32 cmd; 1728 1729 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 1730 if (!cap) 1731 return -EINVAL; 1732 1733 ret = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); 1734 if (!ret) 1735 ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2); 1736 1737 return ret; 1738 } 1739 EXPORT_SYMBOL(pcix_get_mmrbc); 1740 1741 /** 1742 * pcix_set_mmrbc - set PCI-X maximum memory read byte count 1743 * @dev: PCI device to query 1744 * @mmrbc: maximum memory read count in bytes 1745 * valid values are 512, 1024, 2048, 4096 1746 * 1747 * If possible sets maximum memory read byte count, some bridges have erratas 1748 * that prevent this. 1749 */ 1750 int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc) 1751 { 1752 int cap, err = -EINVAL; 1753 u32 stat, cmd, v, o; 1754 1755 if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc)) 1756 goto out; 1757 1758 v = ffs(mmrbc) - 10; 1759 1760 cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); 1761 if (!cap) 1762 goto out; 1763 1764 err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); 1765 if (err) 1766 goto out; 1767 1768 if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21) 1769 return -E2BIG; 1770 1771 err = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); 1772 if (err) 1773 goto out; 1774 1775 o = (cmd & PCI_X_CMD_MAX_READ) >> 2; 1776 if (o != v) { 1777 if (v > o && dev->bus && 1778 (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC)) 1779 return -EIO; 1780 1781 cmd &= ~PCI_X_CMD_MAX_READ; 1782 cmd |= v << 2; 1783 err = pci_write_config_dword(dev, cap + PCI_X_CMD, cmd); 1784 } 1785 out: 1786 return err; 1787 } 1788 EXPORT_SYMBOL(pcix_set_mmrbc); 1789 1790 /** 1791 * pcie_get_readrq - get PCI Express read request size 1792 * @dev: PCI device to query 1793 * 1794 * Returns maximum memory read request in bytes 1795 * or appropriate error value. 1796 */ 1797 int pcie_get_readrq(struct pci_dev *dev) 1798 { 1799 int ret, cap; 1800 u16 ctl; 1801 1802 cap = pci_find_capability(dev, PCI_CAP_ID_EXP); 1803 if (!cap) 1804 return -EINVAL; 1805 1806 ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl); 1807 if (!ret) 1808 ret = 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12); 1809 1810 return ret; 1811 } 1812 EXPORT_SYMBOL(pcie_get_readrq); 1813 1814 /** 1815 * pcie_set_readrq - set PCI Express maximum memory read request 1816 * @dev: PCI device to query 1817 * @rq: maximum memory read count in bytes 1818 * valid values are 128, 256, 512, 1024, 2048, 4096 1819 * 1820 * If possible sets maximum read byte count 1821 */ 1822 int pcie_set_readrq(struct pci_dev *dev, int rq) 1823 { 1824 int cap, err = -EINVAL; 1825 u16 ctl, v; 1826 1827 if (rq < 128 || rq > 4096 || !is_power_of_2(rq)) 1828 goto out; 1829 1830 v = (ffs(rq) - 8) << 12; 1831 1832 cap = pci_find_capability(dev, PCI_CAP_ID_EXP); 1833 if (!cap) 1834 goto out; 1835 1836 err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl); 1837 if (err) 1838 goto out; 1839 1840 if ((ctl & PCI_EXP_DEVCTL_READRQ) != v) { 1841 ctl &= ~PCI_EXP_DEVCTL_READRQ; 1842 ctl |= v; 1843 err = pci_write_config_dword(dev, cap + PCI_EXP_DEVCTL, ctl); 1844 } 1845 1846 out: 1847 return err; 1848 } 1849 EXPORT_SYMBOL(pcie_set_readrq); 1850 1851 /** 1852 * pci_select_bars - Make BAR mask from the type of resource 1853 * @dev: the PCI device for which BAR mask is made 1854 * @flags: resource type mask to be selected 1855 * 1856 * This helper routine makes bar mask from the type of resource. 1857 */ 1858 int pci_select_bars(struct pci_dev *dev, unsigned long flags) 1859 { 1860 int i, bars = 0; 1861 for (i = 0; i < PCI_NUM_RESOURCES; i++) 1862 if (pci_resource_flags(dev, i) & flags) 1863 bars |= (1 << i); 1864 return bars; 1865 } 1866 1867 static void __devinit pci_no_domains(void) 1868 { 1869 #ifdef CONFIG_PCI_DOMAINS 1870 pci_domains_supported = 0; 1871 #endif 1872 } 1873 1874 static int __devinit pci_init(void) 1875 { 1876 struct pci_dev *dev = NULL; 1877 1878 while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { 1879 pci_fixup_device(pci_fixup_final, dev); 1880 } 1881 return 0; 1882 } 1883 1884 static int __devinit pci_setup(char *str) 1885 { 1886 while (str) { 1887 char *k = strchr(str, ','); 1888 if (k) 1889 *k++ = 0; 1890 if (*str && (str = pcibios_setup(str)) && *str) { 1891 if (!strcmp(str, "nomsi")) { 1892 pci_no_msi(); 1893 } else if (!strcmp(str, "noaer")) { 1894 pci_no_aer(); 1895 } else if (!strcmp(str, "nodomains")) { 1896 pci_no_domains(); 1897 } else if (!strncmp(str, "cbiosize=", 9)) { 1898 pci_cardbus_io_size = memparse(str + 9, &str); 1899 } else if (!strncmp(str, "cbmemsize=", 10)) { 1900 pci_cardbus_mem_size = memparse(str + 10, &str); 1901 } else { 1902 printk(KERN_ERR "PCI: Unknown option `%s'\n", 1903 str); 1904 } 1905 } 1906 str = k; 1907 } 1908 return 0; 1909 } 1910 early_param("pci", pci_setup); 1911 1912 device_initcall(pci_init); 1913 1914 EXPORT_SYMBOL(pci_reenable_device); 1915 EXPORT_SYMBOL(pci_enable_device_io); 1916 EXPORT_SYMBOL(pci_enable_device_mem); 1917 EXPORT_SYMBOL(pci_enable_device); 1918 EXPORT_SYMBOL(pcim_enable_device); 1919 EXPORT_SYMBOL(pcim_pin_device); 1920 EXPORT_SYMBOL(pci_disable_device); 1921 EXPORT_SYMBOL(pci_find_capability); 1922 EXPORT_SYMBOL(pci_bus_find_capability); 1923 EXPORT_SYMBOL(pci_release_regions); 1924 EXPORT_SYMBOL(pci_request_regions); 1925 EXPORT_SYMBOL(pci_release_region); 1926 EXPORT_SYMBOL(pci_request_region); 1927 EXPORT_SYMBOL(pci_release_selected_regions); 1928 EXPORT_SYMBOL(pci_request_selected_regions); 1929 EXPORT_SYMBOL(pci_set_master); 1930 EXPORT_SYMBOL(pci_set_mwi); 1931 EXPORT_SYMBOL(pci_try_set_mwi); 1932 EXPORT_SYMBOL(pci_clear_mwi); 1933 EXPORT_SYMBOL_GPL(pci_intx); 1934 EXPORT_SYMBOL(pci_set_dma_mask); 1935 EXPORT_SYMBOL(pci_set_consistent_dma_mask); 1936 EXPORT_SYMBOL(pci_assign_resource); 1937 EXPORT_SYMBOL(pci_find_parent_resource); 1938 EXPORT_SYMBOL(pci_select_bars); 1939 1940 EXPORT_SYMBOL(pci_set_power_state); 1941 EXPORT_SYMBOL(pci_save_state); 1942 EXPORT_SYMBOL(pci_restore_state); 1943 EXPORT_SYMBOL(pci_pme_capable); 1944 EXPORT_SYMBOL(pci_pme_active); 1945 EXPORT_SYMBOL(pci_enable_wake); 1946 EXPORT_SYMBOL(pci_target_state); 1947 EXPORT_SYMBOL(pci_prepare_to_sleep); 1948 EXPORT_SYMBOL(pci_back_from_sleep); 1949 EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state); 1950 1951