1 /* 2 * drivers/pci/pci-driver.c 3 * 4 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com> 5 * (C) Copyright 2007 Novell Inc. 6 * 7 * Released under the GPL v2 only. 8 * 9 */ 10 11 #include <linux/pci.h> 12 #include <linux/module.h> 13 #include <linux/init.h> 14 #include <linux/device.h> 15 #include <linux/mempolicy.h> 16 #include <linux/string.h> 17 #include <linux/slab.h> 18 #include <linux/sched.h> 19 #include "pci.h" 20 21 /* 22 * Dynamic device IDs are disabled for !CONFIG_HOTPLUG 23 */ 24 25 struct pci_dynid { 26 struct list_head node; 27 struct pci_device_id id; 28 }; 29 30 #ifdef CONFIG_HOTPLUG 31 32 /** 33 * store_new_id - add a new PCI device ID to this driver and re-probe devices 34 * @driver: target device driver 35 * @buf: buffer for scanning device ID data 36 * @count: input size 37 * 38 * Adds a new dynamic pci device ID to this driver, 39 * and causes the driver to probe for all devices again. 40 */ 41 static ssize_t 42 store_new_id(struct device_driver *driver, const char *buf, size_t count) 43 { 44 struct pci_dynid *dynid; 45 struct pci_driver *pdrv = to_pci_driver(driver); 46 const struct pci_device_id *ids = pdrv->id_table; 47 __u32 vendor, device, subvendor=PCI_ANY_ID, 48 subdevice=PCI_ANY_ID, class=0, class_mask=0; 49 unsigned long driver_data=0; 50 int fields=0; 51 int retval; 52 53 fields = sscanf(buf, "%x %x %x %x %x %x %lx", 54 &vendor, &device, &subvendor, &subdevice, 55 &class, &class_mask, &driver_data); 56 if (fields < 2) 57 return -EINVAL; 58 59 /* Only accept driver_data values that match an existing id_table 60 entry */ 61 retval = -EINVAL; 62 while (ids->vendor || ids->subvendor || ids->class_mask) { 63 if (driver_data == ids->driver_data) { 64 retval = 0; 65 break; 66 } 67 ids++; 68 } 69 if (retval) /* No match */ 70 return retval; 71 72 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL); 73 if (!dynid) 74 return -ENOMEM; 75 76 dynid->id.vendor = vendor; 77 dynid->id.device = device; 78 dynid->id.subvendor = subvendor; 79 dynid->id.subdevice = subdevice; 80 dynid->id.class = class; 81 dynid->id.class_mask = class_mask; 82 dynid->id.driver_data = driver_data; 83 84 spin_lock(&pdrv->dynids.lock); 85 list_add_tail(&dynid->node, &pdrv->dynids.list); 86 spin_unlock(&pdrv->dynids.lock); 87 88 if (get_driver(&pdrv->driver)) { 89 retval = driver_attach(&pdrv->driver); 90 put_driver(&pdrv->driver); 91 } 92 93 if (retval) 94 return retval; 95 return count; 96 } 97 static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id); 98 99 static void 100 pci_free_dynids(struct pci_driver *drv) 101 { 102 struct pci_dynid *dynid, *n; 103 104 spin_lock(&drv->dynids.lock); 105 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) { 106 list_del(&dynid->node); 107 kfree(dynid); 108 } 109 spin_unlock(&drv->dynids.lock); 110 } 111 112 static int 113 pci_create_newid_file(struct pci_driver *drv) 114 { 115 int error = 0; 116 if (drv->probe != NULL) 117 error = driver_create_file(&drv->driver, &driver_attr_new_id); 118 return error; 119 } 120 121 static void pci_remove_newid_file(struct pci_driver *drv) 122 { 123 driver_remove_file(&drv->driver, &driver_attr_new_id); 124 } 125 #else /* !CONFIG_HOTPLUG */ 126 static inline void pci_free_dynids(struct pci_driver *drv) {} 127 static inline int pci_create_newid_file(struct pci_driver *drv) 128 { 129 return 0; 130 } 131 static inline void pci_remove_newid_file(struct pci_driver *drv) {} 132 #endif 133 134 /** 135 * pci_match_id - See if a pci device matches a given pci_id table 136 * @ids: array of PCI device id structures to search in 137 * @dev: the PCI device structure to match against. 138 * 139 * Used by a driver to check whether a PCI device present in the 140 * system is in its list of supported devices. Returns the matching 141 * pci_device_id structure or %NULL if there is no match. 142 * 143 * Deprecated, don't use this as it will not catch any dynamic ids 144 * that a driver might want to check for. 145 */ 146 const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, 147 struct pci_dev *dev) 148 { 149 if (ids) { 150 while (ids->vendor || ids->subvendor || ids->class_mask) { 151 if (pci_match_one_device(ids, dev)) 152 return ids; 153 ids++; 154 } 155 } 156 return NULL; 157 } 158 159 /** 160 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure 161 * @drv: the PCI driver to match against 162 * @dev: the PCI device structure to match against 163 * 164 * Used by a driver to check whether a PCI device present in the 165 * system is in its list of supported devices. Returns the matching 166 * pci_device_id structure or %NULL if there is no match. 167 */ 168 static const struct pci_device_id *pci_match_device(struct pci_driver *drv, 169 struct pci_dev *dev) 170 { 171 struct pci_dynid *dynid; 172 173 /* Look at the dynamic ids first, before the static ones */ 174 spin_lock(&drv->dynids.lock); 175 list_for_each_entry(dynid, &drv->dynids.list, node) { 176 if (pci_match_one_device(&dynid->id, dev)) { 177 spin_unlock(&drv->dynids.lock); 178 return &dynid->id; 179 } 180 } 181 spin_unlock(&drv->dynids.lock); 182 183 return pci_match_id(drv->id_table, dev); 184 } 185 186 static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev, 187 const struct pci_device_id *id) 188 { 189 int error; 190 #ifdef CONFIG_NUMA 191 /* Execute driver initialization on node where the 192 device's bus is attached to. This way the driver likely 193 allocates its local memory on the right node without 194 any need to change it. */ 195 struct mempolicy *oldpol; 196 cpumask_t oldmask = current->cpus_allowed; 197 int node = dev_to_node(&dev->dev); 198 199 if (node >= 0) { 200 node_to_cpumask_ptr(nodecpumask, node); 201 set_cpus_allowed_ptr(current, nodecpumask); 202 } 203 /* And set default memory allocation policy */ 204 oldpol = current->mempolicy; 205 current->mempolicy = NULL; /* fall back to system default policy */ 206 #endif 207 error = drv->probe(dev, id); 208 #ifdef CONFIG_NUMA 209 set_cpus_allowed_ptr(current, &oldmask); 210 current->mempolicy = oldpol; 211 #endif 212 return error; 213 } 214 215 /** 216 * __pci_device_probe() 217 * @drv: driver to call to check if it wants the PCI device 218 * @pci_dev: PCI device being probed 219 * 220 * returns 0 on success, else error. 221 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev. 222 */ 223 static int 224 __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev) 225 { 226 const struct pci_device_id *id; 227 int error = 0; 228 229 if (!pci_dev->driver && drv->probe) { 230 error = -ENODEV; 231 232 id = pci_match_device(drv, pci_dev); 233 if (id) 234 error = pci_call_probe(drv, pci_dev, id); 235 if (error >= 0) { 236 pci_dev->driver = drv; 237 error = 0; 238 } 239 } 240 return error; 241 } 242 243 static int pci_device_probe(struct device * dev) 244 { 245 int error = 0; 246 struct pci_driver *drv; 247 struct pci_dev *pci_dev; 248 249 drv = to_pci_driver(dev->driver); 250 pci_dev = to_pci_dev(dev); 251 pci_dev_get(pci_dev); 252 error = __pci_device_probe(drv, pci_dev); 253 if (error) 254 pci_dev_put(pci_dev); 255 256 return error; 257 } 258 259 static int pci_device_remove(struct device * dev) 260 { 261 struct pci_dev * pci_dev = to_pci_dev(dev); 262 struct pci_driver * drv = pci_dev->driver; 263 264 if (drv) { 265 if (drv->remove) 266 drv->remove(pci_dev); 267 pci_dev->driver = NULL; 268 } 269 270 /* 271 * If the device is still on, set the power state as "unknown", 272 * since it might change by the next time we load the driver. 273 */ 274 if (pci_dev->current_state == PCI_D0) 275 pci_dev->current_state = PCI_UNKNOWN; 276 277 /* 278 * We would love to complain here if pci_dev->is_enabled is set, that 279 * the driver should have called pci_disable_device(), but the 280 * unfortunate fact is there are too many odd BIOS and bridge setups 281 * that don't like drivers doing that all of the time. 282 * Oh well, we can dream of sane hardware when we sleep, no matter how 283 * horrible the crap we have to deal with is when we are awake... 284 */ 285 286 pci_dev_put(pci_dev); 287 return 0; 288 } 289 290 static void pci_device_shutdown(struct device *dev) 291 { 292 struct pci_dev *pci_dev = to_pci_dev(dev); 293 struct pci_driver *drv = pci_dev->driver; 294 295 if (drv && drv->shutdown) 296 drv->shutdown(pci_dev); 297 pci_msi_shutdown(pci_dev); 298 pci_msix_shutdown(pci_dev); 299 } 300 301 #ifdef CONFIG_PM_SLEEP 302 303 /* 304 * Default "suspend" method for devices that have no driver provided suspend, 305 * or not even a driver at all. 306 */ 307 static void pci_default_pm_suspend(struct pci_dev *pci_dev) 308 { 309 pci_save_state(pci_dev); 310 /* 311 * mark its power state as "unknown", since we don't know if 312 * e.g. the BIOS will change its device state when we suspend. 313 */ 314 if (pci_dev->current_state == PCI_D0) 315 pci_dev->current_state = PCI_UNKNOWN; 316 } 317 318 /* 319 * Default "resume" method for devices that have no driver provided resume, 320 * or not even a driver at all. 321 */ 322 static int pci_default_pm_resume(struct pci_dev *pci_dev) 323 { 324 int retval = 0; 325 326 /* restore the PCI config space */ 327 pci_restore_state(pci_dev); 328 /* if the device was enabled before suspend, reenable */ 329 retval = pci_reenable_device(pci_dev); 330 /* 331 * if the device was busmaster before the suspend, make it busmaster 332 * again 333 */ 334 if (pci_dev->is_busmaster) 335 pci_set_master(pci_dev); 336 337 return retval; 338 } 339 340 static int pci_legacy_suspend(struct device *dev, pm_message_t state) 341 { 342 struct pci_dev * pci_dev = to_pci_dev(dev); 343 struct pci_driver * drv = pci_dev->driver; 344 int i = 0; 345 346 if (drv && drv->suspend) { 347 i = drv->suspend(pci_dev, state); 348 suspend_report_result(drv->suspend, i); 349 } else { 350 pci_default_pm_suspend(pci_dev); 351 } 352 return i; 353 } 354 355 static int pci_legacy_suspend_late(struct device *dev, pm_message_t state) 356 { 357 struct pci_dev * pci_dev = to_pci_dev(dev); 358 struct pci_driver * drv = pci_dev->driver; 359 int i = 0; 360 361 if (drv && drv->suspend_late) { 362 i = drv->suspend_late(pci_dev, state); 363 suspend_report_result(drv->suspend_late, i); 364 } 365 return i; 366 } 367 368 static int pci_legacy_resume(struct device *dev) 369 { 370 int error; 371 struct pci_dev * pci_dev = to_pci_dev(dev); 372 struct pci_driver * drv = pci_dev->driver; 373 374 if (drv && drv->resume) 375 error = drv->resume(pci_dev); 376 else 377 error = pci_default_pm_resume(pci_dev); 378 return error; 379 } 380 381 static int pci_legacy_resume_early(struct device *dev) 382 { 383 int error = 0; 384 struct pci_dev * pci_dev = to_pci_dev(dev); 385 struct pci_driver * drv = pci_dev->driver; 386 387 if (drv && drv->resume_early) 388 error = drv->resume_early(pci_dev); 389 return error; 390 } 391 392 static int pci_pm_prepare(struct device *dev) 393 { 394 struct device_driver *drv = dev->driver; 395 int error = 0; 396 397 if (drv && drv->pm && drv->pm->prepare) 398 error = drv->pm->prepare(dev); 399 400 return error; 401 } 402 403 static void pci_pm_complete(struct device *dev) 404 { 405 struct device_driver *drv = dev->driver; 406 407 if (drv && drv->pm && drv->pm->complete) 408 drv->pm->complete(dev); 409 } 410 411 #ifdef CONFIG_SUSPEND 412 413 static int pci_pm_suspend(struct device *dev) 414 { 415 struct pci_dev *pci_dev = to_pci_dev(dev); 416 struct device_driver *drv = dev->driver; 417 int error = 0; 418 419 if (drv && drv->pm) { 420 if (drv->pm->suspend) { 421 error = drv->pm->suspend(dev); 422 suspend_report_result(drv->pm->suspend, error); 423 } else { 424 pci_default_pm_suspend(pci_dev); 425 } 426 } else { 427 error = pci_legacy_suspend(dev, PMSG_SUSPEND); 428 } 429 pci_fixup_device(pci_fixup_suspend, pci_dev); 430 431 return error; 432 } 433 434 static int pci_pm_suspend_noirq(struct device *dev) 435 { 436 struct pci_dev *pci_dev = to_pci_dev(dev); 437 struct pci_driver *drv = pci_dev->driver; 438 int error = 0; 439 440 if (drv && drv->pm) { 441 if (drv->pm->suspend_noirq) { 442 error = drv->pm->suspend_noirq(dev); 443 suspend_report_result(drv->pm->suspend_noirq, error); 444 } 445 } else { 446 error = pci_legacy_suspend_late(dev, PMSG_SUSPEND); 447 } 448 449 return error; 450 } 451 452 static int pci_pm_resume(struct device *dev) 453 { 454 struct pci_dev *pci_dev = to_pci_dev(dev); 455 struct device_driver *drv = dev->driver; 456 int error; 457 458 pci_fixup_device(pci_fixup_resume, pci_dev); 459 460 if (drv && drv->pm) { 461 error = drv->pm->resume ? drv->pm->resume(dev) : 462 pci_default_pm_resume(pci_dev); 463 } else { 464 error = pci_legacy_resume(dev); 465 } 466 467 return error; 468 } 469 470 static int pci_pm_resume_noirq(struct device *dev) 471 { 472 struct pci_dev *pci_dev = to_pci_dev(dev); 473 struct pci_driver *drv = pci_dev->driver; 474 int error = 0; 475 476 pci_fixup_device(pci_fixup_resume_early, pci_dev); 477 478 if (drv && drv->pm) { 479 if (drv->pm->resume_noirq) 480 error = drv->pm->resume_noirq(dev); 481 } else { 482 error = pci_legacy_resume_early(dev); 483 } 484 485 return error; 486 } 487 488 #else /* !CONFIG_SUSPEND */ 489 490 #define pci_pm_suspend NULL 491 #define pci_pm_suspend_noirq NULL 492 #define pci_pm_resume NULL 493 #define pci_pm_resume_noirq NULL 494 495 #endif /* !CONFIG_SUSPEND */ 496 497 #ifdef CONFIG_HIBERNATION 498 499 static int pci_pm_freeze(struct device *dev) 500 { 501 struct pci_dev *pci_dev = to_pci_dev(dev); 502 struct device_driver *drv = dev->driver; 503 int error = 0; 504 505 if (drv && drv->pm) { 506 if (drv->pm->freeze) { 507 error = drv->pm->freeze(dev); 508 suspend_report_result(drv->pm->freeze, error); 509 } else { 510 pci_default_pm_suspend(pci_dev); 511 } 512 } else { 513 error = pci_legacy_suspend(dev, PMSG_FREEZE); 514 pci_fixup_device(pci_fixup_suspend, pci_dev); 515 } 516 517 return error; 518 } 519 520 static int pci_pm_freeze_noirq(struct device *dev) 521 { 522 struct pci_dev *pci_dev = to_pci_dev(dev); 523 struct pci_driver *drv = pci_dev->driver; 524 int error = 0; 525 526 if (drv && drv->pm) { 527 if (drv->pm->freeze_noirq) { 528 error = drv->pm->freeze_noirq(dev); 529 suspend_report_result(drv->pm->freeze_noirq, error); 530 } 531 } else { 532 error = pci_legacy_suspend_late(dev, PMSG_FREEZE); 533 } 534 535 return error; 536 } 537 538 static int pci_pm_thaw(struct device *dev) 539 { 540 struct device_driver *drv = dev->driver; 541 int error = 0; 542 543 if (drv && drv->pm) { 544 if (drv->pm->thaw) 545 error = drv->pm->thaw(dev); 546 } else { 547 pci_fixup_device(pci_fixup_resume, to_pci_dev(dev)); 548 error = pci_legacy_resume(dev); 549 } 550 551 return error; 552 } 553 554 static int pci_pm_thaw_noirq(struct device *dev) 555 { 556 struct pci_dev *pci_dev = to_pci_dev(dev); 557 struct pci_driver *drv = pci_dev->driver; 558 int error = 0; 559 560 if (drv && drv->pm) { 561 if (drv->pm->thaw_noirq) 562 error = drv->pm->thaw_noirq(dev); 563 } else { 564 pci_fixup_device(pci_fixup_resume_early, pci_dev); 565 error = pci_legacy_resume_early(dev); 566 } 567 568 return error; 569 } 570 571 static int pci_pm_poweroff(struct device *dev) 572 { 573 struct device_driver *drv = dev->driver; 574 int error = 0; 575 576 pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev)); 577 578 if (drv && drv->pm) { 579 if (drv->pm->poweroff) { 580 error = drv->pm->poweroff(dev); 581 suspend_report_result(drv->pm->poweroff, error); 582 } 583 } else { 584 error = pci_legacy_suspend(dev, PMSG_HIBERNATE); 585 } 586 587 return error; 588 } 589 590 static int pci_pm_poweroff_noirq(struct device *dev) 591 { 592 struct pci_dev *pci_dev = to_pci_dev(dev); 593 struct pci_driver *drv = pci_dev->driver; 594 int error = 0; 595 596 if (drv && drv->pm) { 597 if (drv->pm->poweroff_noirq) { 598 error = drv->pm->poweroff_noirq(dev); 599 suspend_report_result(drv->pm->poweroff_noirq, error); 600 } 601 } else { 602 error = pci_legacy_suspend_late(dev, PMSG_HIBERNATE); 603 } 604 605 return error; 606 } 607 608 static int pci_pm_restore(struct device *dev) 609 { 610 struct pci_dev *pci_dev = to_pci_dev(dev); 611 struct device_driver *drv = dev->driver; 612 int error; 613 614 if (drv && drv->pm) { 615 error = drv->pm->restore ? drv->pm->restore(dev) : 616 pci_default_pm_resume(pci_dev); 617 } else { 618 error = pci_legacy_resume(dev); 619 } 620 pci_fixup_device(pci_fixup_resume, pci_dev); 621 622 return error; 623 } 624 625 static int pci_pm_restore_noirq(struct device *dev) 626 { 627 struct pci_dev *pci_dev = to_pci_dev(dev); 628 struct pci_driver *drv = pci_dev->driver; 629 int error = 0; 630 631 pci_fixup_device(pci_fixup_resume, pci_dev); 632 633 if (drv && drv->pm) { 634 if (drv->pm->restore_noirq) 635 error = drv->pm->restore_noirq(dev); 636 } else { 637 error = pci_legacy_resume_early(dev); 638 } 639 pci_fixup_device(pci_fixup_resume_early, pci_dev); 640 641 return error; 642 } 643 644 #else /* !CONFIG_HIBERNATION */ 645 646 #define pci_pm_freeze NULL 647 #define pci_pm_freeze_noirq NULL 648 #define pci_pm_thaw NULL 649 #define pci_pm_thaw_noirq NULL 650 #define pci_pm_poweroff NULL 651 #define pci_pm_poweroff_noirq NULL 652 #define pci_pm_restore NULL 653 #define pci_pm_restore_noirq NULL 654 655 #endif /* !CONFIG_HIBERNATION */ 656 657 struct pm_ext_ops pci_pm_ops = { 658 .base = { 659 .prepare = pci_pm_prepare, 660 .complete = pci_pm_complete, 661 .suspend = pci_pm_suspend, 662 .resume = pci_pm_resume, 663 .freeze = pci_pm_freeze, 664 .thaw = pci_pm_thaw, 665 .poweroff = pci_pm_poweroff, 666 .restore = pci_pm_restore, 667 }, 668 .suspend_noirq = pci_pm_suspend_noirq, 669 .resume_noirq = pci_pm_resume_noirq, 670 .freeze_noirq = pci_pm_freeze_noirq, 671 .thaw_noirq = pci_pm_thaw_noirq, 672 .poweroff_noirq = pci_pm_poweroff_noirq, 673 .restore_noirq = pci_pm_restore_noirq, 674 }; 675 676 #define PCI_PM_OPS_PTR &pci_pm_ops 677 678 #else /* !CONFIG_PM_SLEEP */ 679 680 #define PCI_PM_OPS_PTR NULL 681 682 #endif /* !CONFIG_PM_SLEEP */ 683 684 /** 685 * __pci_register_driver - register a new pci driver 686 * @drv: the driver structure to register 687 * @owner: owner module of drv 688 * @mod_name: module name string 689 * 690 * Adds the driver structure to the list of registered drivers. 691 * Returns a negative value on error, otherwise 0. 692 * If no error occurred, the driver remains registered even if 693 * no device was claimed during registration. 694 */ 695 int __pci_register_driver(struct pci_driver *drv, struct module *owner, 696 const char *mod_name) 697 { 698 int error; 699 700 /* initialize common driver fields */ 701 drv->driver.name = drv->name; 702 drv->driver.bus = &pci_bus_type; 703 drv->driver.owner = owner; 704 drv->driver.mod_name = mod_name; 705 706 if (drv->pm) 707 drv->driver.pm = &drv->pm->base; 708 709 spin_lock_init(&drv->dynids.lock); 710 INIT_LIST_HEAD(&drv->dynids.list); 711 712 /* register with core */ 713 error = driver_register(&drv->driver); 714 if (error) 715 return error; 716 717 error = pci_create_newid_file(drv); 718 if (error) 719 driver_unregister(&drv->driver); 720 721 return error; 722 } 723 724 /** 725 * pci_unregister_driver - unregister a pci driver 726 * @drv: the driver structure to unregister 727 * 728 * Deletes the driver structure from the list of registered PCI drivers, 729 * gives it a chance to clean up by calling its remove() function for 730 * each device it was responsible for, and marks those devices as 731 * driverless. 732 */ 733 734 void 735 pci_unregister_driver(struct pci_driver *drv) 736 { 737 pci_remove_newid_file(drv); 738 driver_unregister(&drv->driver); 739 pci_free_dynids(drv); 740 } 741 742 static struct pci_driver pci_compat_driver = { 743 .name = "compat" 744 }; 745 746 /** 747 * pci_dev_driver - get the pci_driver of a device 748 * @dev: the device to query 749 * 750 * Returns the appropriate pci_driver structure or %NULL if there is no 751 * registered driver for the device. 752 */ 753 struct pci_driver * 754 pci_dev_driver(const struct pci_dev *dev) 755 { 756 if (dev->driver) 757 return dev->driver; 758 else { 759 int i; 760 for(i=0; i<=PCI_ROM_RESOURCE; i++) 761 if (dev->resource[i].flags & IORESOURCE_BUSY) 762 return &pci_compat_driver; 763 } 764 return NULL; 765 } 766 767 /** 768 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure 769 * @dev: the PCI device structure to match against 770 * @drv: the device driver to search for matching PCI device id structures 771 * 772 * Used by a driver to check whether a PCI device present in the 773 * system is in its list of supported devices. Returns the matching 774 * pci_device_id structure or %NULL if there is no match. 775 */ 776 static int pci_bus_match(struct device *dev, struct device_driver *drv) 777 { 778 struct pci_dev *pci_dev = to_pci_dev(dev); 779 struct pci_driver *pci_drv = to_pci_driver(drv); 780 const struct pci_device_id *found_id; 781 782 found_id = pci_match_device(pci_drv, pci_dev); 783 if (found_id) 784 return 1; 785 786 return 0; 787 } 788 789 /** 790 * pci_dev_get - increments the reference count of the pci device structure 791 * @dev: the device being referenced 792 * 793 * Each live reference to a device should be refcounted. 794 * 795 * Drivers for PCI devices should normally record such references in 796 * their probe() methods, when they bind to a device, and release 797 * them by calling pci_dev_put(), in their disconnect() methods. 798 * 799 * A pointer to the device with the incremented reference counter is returned. 800 */ 801 struct pci_dev *pci_dev_get(struct pci_dev *dev) 802 { 803 if (dev) 804 get_device(&dev->dev); 805 return dev; 806 } 807 808 /** 809 * pci_dev_put - release a use of the pci device structure 810 * @dev: device that's been disconnected 811 * 812 * Must be called when a user of a device is finished with it. When the last 813 * user of the device calls this function, the memory of the device is freed. 814 */ 815 void pci_dev_put(struct pci_dev *dev) 816 { 817 if (dev) 818 put_device(&dev->dev); 819 } 820 821 #ifndef CONFIG_HOTPLUG 822 int pci_uevent(struct device *dev, struct kobj_uevent_env *env) 823 { 824 return -ENODEV; 825 } 826 #endif 827 828 struct bus_type pci_bus_type = { 829 .name = "pci", 830 .match = pci_bus_match, 831 .uevent = pci_uevent, 832 .probe = pci_device_probe, 833 .remove = pci_device_remove, 834 .shutdown = pci_device_shutdown, 835 .dev_attrs = pci_dev_attrs, 836 .pm = PCI_PM_OPS_PTR, 837 }; 838 839 static int __init pci_driver_init(void) 840 { 841 return bus_register(&pci_bus_type); 842 } 843 844 postcore_initcall(pci_driver_init); 845 846 EXPORT_SYMBOL(pci_match_id); 847 EXPORT_SYMBOL(__pci_register_driver); 848 EXPORT_SYMBOL(pci_unregister_driver); 849 EXPORT_SYMBOL(pci_dev_driver); 850 EXPORT_SYMBOL(pci_bus_type); 851 EXPORT_SYMBOL(pci_dev_get); 852 EXPORT_SYMBOL(pci_dev_put); 853