linux/drivers/pci/pci-driver.c
<<
>>
Prefs
   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 <linux/cpu.h>
  20#include "pci.h"
  21
  22/*
  23 * Dynamic device IDs are disabled for !CONFIG_HOTPLUG
  24 */
  25
  26struct pci_dynid {
  27        struct list_head node;
  28        struct pci_device_id id;
  29};
  30
  31#ifdef CONFIG_HOTPLUG
  32
  33/**
  34 * store_new_id - add a new PCI device ID to this driver and re-probe devices
  35 * @driver: target device driver
  36 * @buf: buffer for scanning device ID data
  37 * @count: input size
  38 *
  39 * Adds a new dynamic pci device ID to this driver,
  40 * and causes the driver to probe for all devices again.
  41 */
  42static ssize_t
  43store_new_id(struct device_driver *driver, const char *buf, size_t count)
  44{
  45        struct pci_dynid *dynid;
  46        struct pci_driver *pdrv = to_pci_driver(driver);
  47        const struct pci_device_id *ids = pdrv->id_table;
  48        __u32 vendor, device, subvendor=PCI_ANY_ID,
  49                subdevice=PCI_ANY_ID, class=0, class_mask=0;
  50        unsigned long driver_data=0;
  51        int fields=0;
  52        int retval=0;
  53
  54        fields = sscanf(buf, "%x %x %x %x %x %x %lx",
  55                        &vendor, &device, &subvendor, &subdevice,
  56                        &class, &class_mask, &driver_data);
  57        if (fields < 2)
  58                return -EINVAL;
  59
  60        /* Only accept driver_data values that match an existing id_table
  61           entry */
  62        if (ids) {
  63                retval = -EINVAL;
  64                while (ids->vendor || ids->subvendor || ids->class_mask) {
  65                        if (driver_data == ids->driver_data) {
  66                                retval = 0;
  67                                break;
  68                        }
  69                        ids++;
  70                }
  71                if (retval)     /* No match */
  72                        return retval;
  73        }
  74
  75        dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
  76        if (!dynid)
  77                return -ENOMEM;
  78
  79        dynid->id.vendor = vendor;
  80        dynid->id.device = device;
  81        dynid->id.subvendor = subvendor;
  82        dynid->id.subdevice = subdevice;
  83        dynid->id.class = class;
  84        dynid->id.class_mask = class_mask;
  85        dynid->id.driver_data = driver_data;
  86
  87        spin_lock(&pdrv->dynids.lock);
  88        list_add_tail(&dynid->node, &pdrv->dynids.list);
  89        spin_unlock(&pdrv->dynids.lock);
  90
  91        if (get_driver(&pdrv->driver)) {
  92                retval = driver_attach(&pdrv->driver);
  93                put_driver(&pdrv->driver);
  94        }
  95
  96        if (retval)
  97                return retval;
  98        return count;
  99}
 100static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
 101
 102/**
 103 * store_remove_id - remove a PCI device ID from this driver
 104 * @driver: target device driver
 105 * @buf: buffer for scanning device ID data
 106 * @count: input size
 107 *
 108 * Removes a dynamic pci device ID to this driver.
 109 */
 110static ssize_t
 111store_remove_id(struct device_driver *driver, const char *buf, size_t count)
 112{
 113        struct pci_dynid *dynid, *n;
 114        struct pci_driver *pdrv = to_pci_driver(driver);
 115        __u32 vendor, device, subvendor = PCI_ANY_ID,
 116                subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
 117        int fields = 0;
 118        int retval = -ENODEV;
 119
 120        fields = sscanf(buf, "%x %x %x %x %x %x",
 121                        &vendor, &device, &subvendor, &subdevice,
 122                        &class, &class_mask);
 123        if (fields < 2)
 124                return -EINVAL;
 125
 126        spin_lock(&pdrv->dynids.lock);
 127        list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
 128                struct pci_device_id *id = &dynid->id;
 129                if ((id->vendor == vendor) &&
 130                    (id->device == device) &&
 131                    (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
 132                    (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
 133                    !((id->class ^ class) & class_mask)) {
 134                        list_del(&dynid->node);
 135                        kfree(dynid);
 136                        retval = 0;
 137                        break;
 138                }
 139        }
 140        spin_unlock(&pdrv->dynids.lock);
 141
 142        if (retval)
 143                return retval;
 144        return count;
 145}
 146static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
 147
 148static void
 149pci_free_dynids(struct pci_driver *drv)
 150{
 151        struct pci_dynid *dynid, *n;
 152
 153        spin_lock(&drv->dynids.lock);
 154        list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
 155                list_del(&dynid->node);
 156                kfree(dynid);
 157        }
 158        spin_unlock(&drv->dynids.lock);
 159}
 160
 161static int
 162pci_create_newid_file(struct pci_driver *drv)
 163{
 164        int error = 0;
 165        if (drv->probe != NULL)
 166                error = driver_create_file(&drv->driver, &driver_attr_new_id);
 167        return error;
 168}
 169
 170static void pci_remove_newid_file(struct pci_driver *drv)
 171{
 172        driver_remove_file(&drv->driver, &driver_attr_new_id);
 173}
 174
 175static int
 176pci_create_removeid_file(struct pci_driver *drv)
 177{
 178        int error = 0;
 179        if (drv->probe != NULL)
 180                error = driver_create_file(&drv->driver,&driver_attr_remove_id);
 181        return error;
 182}
 183
 184static void pci_remove_removeid_file(struct pci_driver *drv)
 185{
 186        driver_remove_file(&drv->driver, &driver_attr_remove_id);
 187}
 188#else /* !CONFIG_HOTPLUG */
 189static inline void pci_free_dynids(struct pci_driver *drv) {}
 190static inline int pci_create_newid_file(struct pci_driver *drv)
 191{
 192        return 0;
 193}
 194static inline void pci_remove_newid_file(struct pci_driver *drv) {}
 195static inline int pci_create_removeid_file(struct pci_driver *drv)
 196{
 197        return 0;
 198}
 199static inline void pci_remove_removeid_file(struct pci_driver *drv) {}
 200#endif
 201
 202/**
 203 * pci_match_id - See if a pci device matches a given pci_id table
 204 * @ids: array of PCI device id structures to search in
 205 * @dev: the PCI device structure to match against.
 206 *
 207 * Used by a driver to check whether a PCI device present in the
 208 * system is in its list of supported devices.  Returns the matching
 209 * pci_device_id structure or %NULL if there is no match.
 210 *
 211 * Deprecated, don't use this as it will not catch any dynamic ids
 212 * that a driver might want to check for.
 213 */
 214const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
 215                                         struct pci_dev *dev)
 216{
 217        if (ids) {
 218                while (ids->vendor || ids->subvendor || ids->class_mask) {
 219                        if (pci_match_one_device(ids, dev))
 220                                return ids;
 221                        ids++;
 222                }
 223        }
 224        return NULL;
 225}
 226
 227/**
 228 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
 229 * @drv: the PCI driver to match against
 230 * @dev: the PCI device structure to match against
 231 *
 232 * Used by a driver to check whether a PCI device present in the
 233 * system is in its list of supported devices.  Returns the matching
 234 * pci_device_id structure or %NULL if there is no match.
 235 */
 236static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
 237                                                    struct pci_dev *dev)
 238{
 239        struct pci_dynid *dynid;
 240
 241        /* Look at the dynamic ids first, before the static ones */
 242        spin_lock(&drv->dynids.lock);
 243        list_for_each_entry(dynid, &drv->dynids.list, node) {
 244                if (pci_match_one_device(&dynid->id, dev)) {
 245                        spin_unlock(&drv->dynids.lock);
 246                        return &dynid->id;
 247                }
 248        }
 249        spin_unlock(&drv->dynids.lock);
 250
 251        return pci_match_id(drv->id_table, dev);
 252}
 253
 254struct drv_dev_and_id {
 255        struct pci_driver *drv;
 256        struct pci_dev *dev;
 257        const struct pci_device_id *id;
 258};
 259
 260static long local_pci_probe(void *_ddi)
 261{
 262        struct drv_dev_and_id *ddi = _ddi;
 263
 264        return ddi->drv->probe(ddi->dev, ddi->id);
 265}
 266
 267static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
 268                          const struct pci_device_id *id)
 269{
 270        int error, node;
 271        struct drv_dev_and_id ddi = { drv, dev, id };
 272
 273        /* Execute driver initialization on node where the device's
 274           bus is attached to.  This way the driver likely allocates
 275           its local memory on the right node without any need to
 276           change it. */
 277        node = dev_to_node(&dev->dev);
 278        if (node >= 0) {
 279                int cpu;
 280
 281                get_online_cpus();
 282                cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
 283                if (cpu < nr_cpu_ids)
 284                        error = work_on_cpu(cpu, local_pci_probe, &ddi);
 285                else
 286                        error = local_pci_probe(&ddi);
 287                put_online_cpus();
 288        } else
 289                error = local_pci_probe(&ddi);
 290        return error;
 291}
 292
 293/**
 294 * __pci_device_probe()
 295 * @drv: driver to call to check if it wants the PCI device
 296 * @pci_dev: PCI device being probed
 297 * 
 298 * returns 0 on success, else error.
 299 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
 300 */
 301static int
 302__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
 303{
 304        const struct pci_device_id *id;
 305        int error = 0;
 306
 307        if (!pci_dev->driver && drv->probe) {
 308                error = -ENODEV;
 309
 310                id = pci_match_device(drv, pci_dev);
 311                if (id)
 312                        error = pci_call_probe(drv, pci_dev, id);
 313                if (error >= 0) {
 314                        pci_dev->driver = drv;
 315                        error = 0;
 316                }
 317        }
 318        return error;
 319}
 320
 321static int pci_device_probe(struct device * dev)
 322{
 323        int error = 0;
 324        struct pci_driver *drv;
 325        struct pci_dev *pci_dev;
 326
 327        drv = to_pci_driver(dev->driver);
 328        pci_dev = to_pci_dev(dev);
 329        pci_dev_get(pci_dev);
 330        error = __pci_device_probe(drv, pci_dev);
 331        if (error)
 332                pci_dev_put(pci_dev);
 333
 334        return error;
 335}
 336
 337static int pci_device_remove(struct device * dev)
 338{
 339        struct pci_dev * pci_dev = to_pci_dev(dev);
 340        struct pci_driver * drv = pci_dev->driver;
 341
 342        if (drv) {
 343                if (drv->remove)
 344                        drv->remove(pci_dev);
 345                pci_dev->driver = NULL;
 346        }
 347
 348        /*
 349         * If the device is still on, set the power state as "unknown",
 350         * since it might change by the next time we load the driver.
 351         */
 352        if (pci_dev->current_state == PCI_D0)
 353                pci_dev->current_state = PCI_UNKNOWN;
 354
 355        /*
 356         * We would love to complain here if pci_dev->is_enabled is set, that
 357         * the driver should have called pci_disable_device(), but the
 358         * unfortunate fact is there are too many odd BIOS and bridge setups
 359         * that don't like drivers doing that all of the time.  
 360         * Oh well, we can dream of sane hardware when we sleep, no matter how
 361         * horrible the crap we have to deal with is when we are awake...
 362         */
 363
 364        pci_dev_put(pci_dev);
 365        return 0;
 366}
 367
 368static void pci_device_shutdown(struct device *dev)
 369{
 370        struct pci_dev *pci_dev = to_pci_dev(dev);
 371        struct pci_driver *drv = pci_dev->driver;
 372
 373        if (drv && drv->shutdown)
 374                drv->shutdown(pci_dev);
 375        pci_msi_shutdown(pci_dev);
 376        pci_msix_shutdown(pci_dev);
 377}
 378
 379#ifdef CONFIG_PM_SLEEP
 380
 381/*
 382 * Default "suspend" method for devices that have no driver provided suspend,
 383 * or not even a driver at all (second part).
 384 */
 385static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
 386{
 387        /*
 388         * mark its power state as "unknown", since we don't know if
 389         * e.g. the BIOS will change its device state when we suspend.
 390         */
 391        if (pci_dev->current_state == PCI_D0)
 392                pci_dev->current_state = PCI_UNKNOWN;
 393}
 394
 395/*
 396 * Default "resume" method for devices that have no driver provided resume,
 397 * or not even a driver at all (second part).
 398 */
 399static int pci_pm_reenable_device(struct pci_dev *pci_dev)
 400{
 401        int retval;
 402
 403        /* if the device was enabled before suspend, reenable */
 404        retval = pci_reenable_device(pci_dev);
 405        /*
 406         * if the device was busmaster before the suspend, make it busmaster
 407         * again
 408         */
 409        if (pci_dev->is_busmaster)
 410                pci_set_master(pci_dev);
 411
 412        return retval;
 413}
 414
 415static int pci_legacy_suspend(struct device *dev, pm_message_t state)
 416{
 417        struct pci_dev * pci_dev = to_pci_dev(dev);
 418        struct pci_driver * drv = pci_dev->driver;
 419
 420        pci_dev->state_saved = false;
 421
 422        if (drv && drv->suspend) {
 423                pci_power_t prev = pci_dev->current_state;
 424                int error;
 425
 426                error = drv->suspend(pci_dev, state);
 427                suspend_report_result(drv->suspend, error);
 428                if (error)
 429                        return error;
 430
 431                if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 432                    && pci_dev->current_state != PCI_UNKNOWN) {
 433                        WARN_ONCE(pci_dev->current_state != prev,
 434                                "PCI PM: Device state not saved by %pF\n",
 435                                drv->suspend);
 436                }
 437        }
 438
 439        pci_fixup_device(pci_fixup_suspend, pci_dev);
 440
 441        return 0;
 442}
 443
 444static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
 445{
 446        struct pci_dev * pci_dev = to_pci_dev(dev);
 447        struct pci_driver * drv = pci_dev->driver;
 448
 449        if (drv && drv->suspend_late) {
 450                pci_power_t prev = pci_dev->current_state;
 451                int error;
 452
 453                error = drv->suspend_late(pci_dev, state);
 454                suspend_report_result(drv->suspend_late, error);
 455                if (error)
 456                        return error;
 457
 458                if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 459                    && pci_dev->current_state != PCI_UNKNOWN) {
 460                        WARN_ONCE(pci_dev->current_state != prev,
 461                                "PCI PM: Device state not saved by %pF\n",
 462                                drv->suspend_late);
 463                        return 0;
 464                }
 465        }
 466
 467        if (!pci_dev->state_saved)
 468                pci_save_state(pci_dev);
 469
 470        pci_pm_set_unknown_state(pci_dev);
 471
 472        return 0;
 473}
 474
 475static int pci_legacy_resume_early(struct device *dev)
 476{
 477        struct pci_dev * pci_dev = to_pci_dev(dev);
 478        struct pci_driver * drv = pci_dev->driver;
 479
 480        return drv && drv->resume_early ?
 481                        drv->resume_early(pci_dev) : 0;
 482}
 483
 484static int pci_legacy_resume(struct device *dev)
 485{
 486        struct pci_dev * pci_dev = to_pci_dev(dev);
 487        struct pci_driver * drv = pci_dev->driver;
 488
 489        pci_fixup_device(pci_fixup_resume, pci_dev);
 490
 491        return drv && drv->resume ?
 492                        drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
 493}
 494
 495/* Auxiliary functions used by the new power management framework */
 496
 497/**
 498 * pci_restore_standard_config - restore standard config registers of PCI device
 499 * @pci_dev: PCI device to handle
 500 */
 501static int pci_restore_standard_config(struct pci_dev *pci_dev)
 502{
 503        pci_update_current_state(pci_dev, PCI_UNKNOWN);
 504
 505        if (pci_dev->current_state != PCI_D0) {
 506                int error = pci_set_power_state(pci_dev, PCI_D0);
 507                if (error)
 508                        return error;
 509        }
 510
 511        return pci_dev->state_saved ? pci_restore_state(pci_dev) : 0;
 512}
 513
 514static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev)
 515{
 516        pci_restore_standard_config(pci_dev);
 517        pci_dev->state_saved = false;
 518        pci_fixup_device(pci_fixup_resume_early, pci_dev);
 519}
 520
 521static void pci_pm_default_resume(struct pci_dev *pci_dev)
 522{
 523        pci_fixup_device(pci_fixup_resume, pci_dev);
 524
 525        if (!pci_is_bridge(pci_dev))
 526                pci_enable_wake(pci_dev, PCI_D0, false);
 527}
 528
 529static void pci_pm_default_suspend(struct pci_dev *pci_dev)
 530{
 531        /* Disable non-bridge devices without PM support */
 532        if (!pci_is_bridge(pci_dev))
 533                pci_disable_enabled_device(pci_dev);
 534}
 535
 536static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
 537{
 538        struct pci_driver *drv = pci_dev->driver;
 539        bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
 540                || drv->resume_early);
 541
 542        /*
 543         * Legacy PM support is used by default, so warn if the new framework is
 544         * supported as well.  Drivers are supposed to support either the
 545         * former, or the latter, but not both at the same time.
 546         */
 547        WARN_ON(ret && drv->driver.pm);
 548
 549        return ret;
 550}
 551
 552/* New power management framework */
 553
 554static int pci_pm_prepare(struct device *dev)
 555{
 556        struct device_driver *drv = dev->driver;
 557        int error = 0;
 558
 559        if (drv && drv->pm && drv->pm->prepare)
 560                error = drv->pm->prepare(dev);
 561
 562        return error;
 563}
 564
 565static void pci_pm_complete(struct device *dev)
 566{
 567        struct device_driver *drv = dev->driver;
 568
 569        if (drv && drv->pm && drv->pm->complete)
 570                drv->pm->complete(dev);
 571}
 572
 573#ifdef CONFIG_SUSPEND
 574
 575static int pci_pm_suspend(struct device *dev)
 576{
 577        struct pci_dev *pci_dev = to_pci_dev(dev);
 578        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 579
 580        if (pci_has_legacy_pm_support(pci_dev))
 581                return pci_legacy_suspend(dev, PMSG_SUSPEND);
 582
 583        pci_dev->state_saved = false;
 584
 585        if (!pm) {
 586                pci_pm_default_suspend(pci_dev);
 587                goto Fixup;
 588        }
 589
 590        if (pm->suspend) {
 591                pci_power_t prev = pci_dev->current_state;
 592                int error;
 593
 594                error = pm->suspend(dev);
 595                suspend_report_result(pm->suspend, error);
 596                if (error)
 597                        return error;
 598
 599                if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 600                    && pci_dev->current_state != PCI_UNKNOWN) {
 601                        WARN_ONCE(pci_dev->current_state != prev,
 602                                "PCI PM: State of device not saved by %pF\n",
 603                                pm->suspend);
 604                }
 605        }
 606
 607 Fixup:
 608        pci_fixup_device(pci_fixup_suspend, pci_dev);
 609
 610        return 0;
 611}
 612
 613static int pci_pm_suspend_noirq(struct device *dev)
 614{
 615        struct pci_dev *pci_dev = to_pci_dev(dev);
 616        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 617
 618        if (pci_has_legacy_pm_support(pci_dev))
 619                return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
 620
 621        if (!pm) {
 622                pci_save_state(pci_dev);
 623                return 0;
 624        }
 625
 626        if (pm->suspend_noirq) {
 627                pci_power_t prev = pci_dev->current_state;
 628                int error;
 629
 630                error = pm->suspend_noirq(dev);
 631                suspend_report_result(pm->suspend_noirq, error);
 632                if (error)
 633                        return error;
 634
 635                if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 636                    && pci_dev->current_state != PCI_UNKNOWN) {
 637                        WARN_ONCE(pci_dev->current_state != prev,
 638                                "PCI PM: State of device not saved by %pF\n",
 639                                pm->suspend_noirq);
 640                        return 0;
 641                }
 642        }
 643
 644        if (!pci_dev->state_saved) {
 645                pci_save_state(pci_dev);
 646                if (!pci_is_bridge(pci_dev))
 647                        pci_prepare_to_sleep(pci_dev);
 648        }
 649
 650        pci_pm_set_unknown_state(pci_dev);
 651
 652        return 0;
 653}
 654
 655static int pci_pm_resume_noirq(struct device *dev)
 656{
 657        struct pci_dev *pci_dev = to_pci_dev(dev);
 658        struct device_driver *drv = dev->driver;
 659        int error = 0;
 660
 661        pci_pm_default_resume_noirq(pci_dev);
 662
 663        if (pci_has_legacy_pm_support(pci_dev))
 664                return pci_legacy_resume_early(dev);
 665
 666        if (drv && drv->pm && drv->pm->resume_noirq)
 667                error = drv->pm->resume_noirq(dev);
 668
 669        return error;
 670}
 671
 672static int pci_pm_resume(struct device *dev)
 673{
 674        struct pci_dev *pci_dev = to_pci_dev(dev);
 675        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 676        int error = 0;
 677
 678        /*
 679         * This is necessary for the suspend error path in which resume is
 680         * called without restoring the standard config registers of the device.
 681         */
 682        if (pci_dev->state_saved)
 683                pci_restore_standard_config(pci_dev);
 684
 685        if (pci_has_legacy_pm_support(pci_dev))
 686                return pci_legacy_resume(dev);
 687
 688        pci_pm_default_resume(pci_dev);
 689
 690        if (pm) {
 691                if (pm->resume)
 692                        error = pm->resume(dev);
 693        } else {
 694                pci_pm_reenable_device(pci_dev);
 695        }
 696
 697        return 0;
 698}
 699
 700#else /* !CONFIG_SUSPEND */
 701
 702#define pci_pm_suspend          NULL
 703#define pci_pm_suspend_noirq    NULL
 704#define pci_pm_resume           NULL
 705#define pci_pm_resume_noirq     NULL
 706
 707#endif /* !CONFIG_SUSPEND */
 708
 709#ifdef CONFIG_HIBERNATION
 710
 711static int pci_pm_freeze(struct device *dev)
 712{
 713        struct pci_dev *pci_dev = to_pci_dev(dev);
 714        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 715
 716        if (pci_has_legacy_pm_support(pci_dev))
 717                return pci_legacy_suspend(dev, PMSG_FREEZE);
 718
 719        pci_dev->state_saved = false;
 720
 721        if (!pm) {
 722                pci_pm_default_suspend(pci_dev);
 723                return 0;
 724        }
 725
 726        if (pm->freeze) {
 727                int error;
 728
 729                error = pm->freeze(dev);
 730                suspend_report_result(pm->freeze, error);
 731                if (error)
 732                        return error;
 733        }
 734
 735        return 0;
 736}
 737
 738static int pci_pm_freeze_noirq(struct device *dev)
 739{
 740        struct pci_dev *pci_dev = to_pci_dev(dev);
 741        struct device_driver *drv = dev->driver;
 742
 743        if (pci_has_legacy_pm_support(pci_dev))
 744                return pci_legacy_suspend_late(dev, PMSG_FREEZE);
 745
 746        if (drv && drv->pm && drv->pm->freeze_noirq) {
 747                int error;
 748
 749                error = drv->pm->freeze_noirq(dev);
 750                suspend_report_result(drv->pm->freeze_noirq, error);
 751                if (error)
 752                        return error;
 753        }
 754
 755        if (!pci_dev->state_saved)
 756                pci_save_state(pci_dev);
 757
 758        pci_pm_set_unknown_state(pci_dev);
 759
 760        return 0;
 761}
 762
 763static int pci_pm_thaw_noirq(struct device *dev)
 764{
 765        struct pci_dev *pci_dev = to_pci_dev(dev);
 766        struct device_driver *drv = dev->driver;
 767        int error = 0;
 768
 769        if (pci_has_legacy_pm_support(pci_dev))
 770                return pci_legacy_resume_early(dev);
 771
 772        pci_update_current_state(pci_dev, PCI_D0);
 773
 774        if (drv && drv->pm && drv->pm->thaw_noirq)
 775                error = drv->pm->thaw_noirq(dev);
 776
 777        return error;
 778}
 779
 780static int pci_pm_thaw(struct device *dev)
 781{
 782        struct pci_dev *pci_dev = to_pci_dev(dev);
 783        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 784        int error = 0;
 785
 786        if (pci_has_legacy_pm_support(pci_dev))
 787                return pci_legacy_resume(dev);
 788
 789        if (pm) {
 790                if (pm->thaw)
 791                        error = pm->thaw(dev);
 792        } else {
 793                pci_pm_reenable_device(pci_dev);
 794        }
 795
 796        return error;
 797}
 798
 799static int pci_pm_poweroff(struct device *dev)
 800{
 801        struct pci_dev *pci_dev = to_pci_dev(dev);
 802        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 803
 804        if (pci_has_legacy_pm_support(pci_dev))
 805                return pci_legacy_suspend(dev, PMSG_HIBERNATE);
 806
 807        pci_dev->state_saved = false;
 808
 809        if (!pm) {
 810                pci_pm_default_suspend(pci_dev);
 811                goto Fixup;
 812        }
 813
 814        if (pm->poweroff) {
 815                int error;
 816
 817                error = pm->poweroff(dev);
 818                suspend_report_result(pm->poweroff, error);
 819                if (error)
 820                        return error;
 821        }
 822
 823 Fixup:
 824        pci_fixup_device(pci_fixup_suspend, pci_dev);
 825
 826        return 0;
 827}
 828
 829static int pci_pm_poweroff_noirq(struct device *dev)
 830{
 831        struct pci_dev *pci_dev = to_pci_dev(dev);
 832        struct device_driver *drv = dev->driver;
 833
 834        if (pci_has_legacy_pm_support(to_pci_dev(dev)))
 835                return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
 836
 837        if (!drv || !drv->pm)
 838                return 0;
 839
 840        if (drv->pm->poweroff_noirq) {
 841                int error;
 842
 843                error = drv->pm->poweroff_noirq(dev);
 844                suspend_report_result(drv->pm->poweroff_noirq, error);
 845                if (error)
 846                        return error;
 847        }
 848
 849        if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
 850                pci_prepare_to_sleep(pci_dev);
 851
 852        return 0;
 853}
 854
 855static int pci_pm_restore_noirq(struct device *dev)
 856{
 857        struct pci_dev *pci_dev = to_pci_dev(dev);
 858        struct device_driver *drv = dev->driver;
 859        int error = 0;
 860
 861        pci_pm_default_resume_noirq(pci_dev);
 862
 863        if (pci_has_legacy_pm_support(pci_dev))
 864                return pci_legacy_resume_early(dev);
 865
 866        if (drv && drv->pm && drv->pm->restore_noirq)
 867                error = drv->pm->restore_noirq(dev);
 868
 869        return error;
 870}
 871
 872static int pci_pm_restore(struct device *dev)
 873{
 874        struct pci_dev *pci_dev = to_pci_dev(dev);
 875        struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 876        int error = 0;
 877
 878        /*
 879         * This is necessary for the hibernation error path in which restore is
 880         * called without restoring the standard config registers of the device.
 881         */
 882        if (pci_dev->state_saved)
 883                pci_restore_standard_config(pci_dev);
 884
 885        if (pci_has_legacy_pm_support(pci_dev))
 886                return pci_legacy_resume(dev);
 887
 888        pci_pm_default_resume(pci_dev);
 889
 890        if (pm) {
 891                if (pm->restore)
 892                        error = pm->restore(dev);
 893        } else {
 894                pci_pm_reenable_device(pci_dev);
 895        }
 896
 897        return error;
 898}
 899
 900#else /* !CONFIG_HIBERNATION */
 901
 902#define pci_pm_freeze           NULL
 903#define pci_pm_freeze_noirq     NULL
 904#define pci_pm_thaw             NULL
 905#define pci_pm_thaw_noirq       NULL
 906#define pci_pm_poweroff         NULL
 907#define pci_pm_poweroff_noirq   NULL
 908#define pci_pm_restore          NULL
 909#define pci_pm_restore_noirq    NULL
 910
 911#endif /* !CONFIG_HIBERNATION */
 912
 913struct dev_pm_ops pci_dev_pm_ops = {
 914        .prepare = pci_pm_prepare,
 915        .complete = pci_pm_complete,
 916        .suspend = pci_pm_suspend,
 917        .resume = pci_pm_resume,
 918        .freeze = pci_pm_freeze,
 919        .thaw = pci_pm_thaw,
 920        .poweroff = pci_pm_poweroff,
 921        .restore = pci_pm_restore,
 922        .suspend_noirq = pci_pm_suspend_noirq,
 923        .resume_noirq = pci_pm_resume_noirq,
 924        .freeze_noirq = pci_pm_freeze_noirq,
 925        .thaw_noirq = pci_pm_thaw_noirq,
 926        .poweroff_noirq = pci_pm_poweroff_noirq,
 927        .restore_noirq = pci_pm_restore_noirq,
 928};
 929
 930#define PCI_PM_OPS_PTR  (&pci_dev_pm_ops)
 931
 932#else /* !CONFIG_PM_SLEEP */
 933
 934#define PCI_PM_OPS_PTR  NULL
 935
 936#endif /* !CONFIG_PM_SLEEP */
 937
 938/**
 939 * __pci_register_driver - register a new pci driver
 940 * @drv: the driver structure to register
 941 * @owner: owner module of drv
 942 * @mod_name: module name string
 943 * 
 944 * Adds the driver structure to the list of registered drivers.
 945 * Returns a negative value on error, otherwise 0. 
 946 * If no error occurred, the driver remains registered even if 
 947 * no device was claimed during registration.
 948 */
 949int __pci_register_driver(struct pci_driver *drv, struct module *owner,
 950                          const char *mod_name)
 951{
 952        int error;
 953
 954        /* initialize common driver fields */
 955        drv->driver.name = drv->name;
 956        drv->driver.bus = &pci_bus_type;
 957        drv->driver.owner = owner;
 958        drv->driver.mod_name = mod_name;
 959
 960        spin_lock_init(&drv->dynids.lock);
 961        INIT_LIST_HEAD(&drv->dynids.list);
 962
 963        /* register with core */
 964        error = driver_register(&drv->driver);
 965        if (error)
 966                goto out;
 967
 968        error = pci_create_newid_file(drv);
 969        if (error)
 970                goto out_newid;
 971
 972        error = pci_create_removeid_file(drv);
 973        if (error)
 974                goto out_removeid;
 975out:
 976        return error;
 977
 978out_removeid:
 979        pci_remove_newid_file(drv);
 980out_newid:
 981        driver_unregister(&drv->driver);
 982        goto out;
 983}
 984
 985/**
 986 * pci_unregister_driver - unregister a pci driver
 987 * @drv: the driver structure to unregister
 988 * 
 989 * Deletes the driver structure from the list of registered PCI drivers,
 990 * gives it a chance to clean up by calling its remove() function for
 991 * each device it was responsible for, and marks those devices as
 992 * driverless.
 993 */
 994
 995void
 996pci_unregister_driver(struct pci_driver *drv)
 997{
 998        pci_remove_removeid_file(drv);
 999        pci_remove_newid_file(drv);
1000        driver_unregister(&drv->driver);
1001        pci_free_dynids(drv);
1002}
1003
1004static struct pci_driver pci_compat_driver = {
1005        .name = "compat"
1006};
1007
1008/**
1009 * pci_dev_driver - get the pci_driver of a device
1010 * @dev: the device to query
1011 *
1012 * Returns the appropriate pci_driver structure or %NULL if there is no 
1013 * registered driver for the device.
1014 */
1015struct pci_driver *
1016pci_dev_driver(const struct pci_dev *dev)
1017{
1018        if (dev->driver)
1019                return dev->driver;
1020        else {
1021                int i;
1022                for(i=0; i<=PCI_ROM_RESOURCE; i++)
1023                        if (dev->resource[i].flags & IORESOURCE_BUSY)
1024                                return &pci_compat_driver;
1025        }
1026        return NULL;
1027}
1028
1029/**
1030 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1031 * @dev: the PCI device structure to match against
1032 * @drv: the device driver to search for matching PCI device id structures
1033 * 
1034 * Used by a driver to check whether a PCI device present in the
1035 * system is in its list of supported devices. Returns the matching
1036 * pci_device_id structure or %NULL if there is no match.
1037 */
1038static int pci_bus_match(struct device *dev, struct device_driver *drv)
1039{
1040        struct pci_dev *pci_dev = to_pci_dev(dev);
1041        struct pci_driver *pci_drv = to_pci_driver(drv);
1042        const struct pci_device_id *found_id;
1043
1044        found_id = pci_match_device(pci_drv, pci_dev);
1045        if (found_id)
1046                return 1;
1047
1048        return 0;
1049}
1050
1051/**
1052 * pci_dev_get - increments the reference count of the pci device structure
1053 * @dev: the device being referenced
1054 *
1055 * Each live reference to a device should be refcounted.
1056 *
1057 * Drivers for PCI devices should normally record such references in
1058 * their probe() methods, when they bind to a device, and release
1059 * them by calling pci_dev_put(), in their disconnect() methods.
1060 *
1061 * A pointer to the device with the incremented reference counter is returned.
1062 */
1063struct pci_dev *pci_dev_get(struct pci_dev *dev)
1064{
1065        if (dev)
1066                get_device(&dev->dev);
1067        return dev;
1068}
1069
1070/**
1071 * pci_dev_put - release a use of the pci device structure
1072 * @dev: device that's been disconnected
1073 *
1074 * Must be called when a user of a device is finished with it.  When the last
1075 * user of the device calls this function, the memory of the device is freed.
1076 */
1077void pci_dev_put(struct pci_dev *dev)
1078{
1079        if (dev)
1080                put_device(&dev->dev);
1081}
1082
1083#ifndef CONFIG_HOTPLUG
1084int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1085{
1086        return -ENODEV;
1087}
1088#endif
1089
1090struct bus_type pci_bus_type = {
1091        .name           = "pci",
1092        .match          = pci_bus_match,
1093        .uevent         = pci_uevent,
1094        .probe          = pci_device_probe,
1095        .remove         = pci_device_remove,
1096        .shutdown       = pci_device_shutdown,
1097        .dev_attrs      = pci_dev_attrs,
1098        .bus_attrs      = pci_bus_attrs,
1099        .pm             = PCI_PM_OPS_PTR,
1100};
1101
1102static int __init pci_driver_init(void)
1103{
1104        return bus_register(&pci_bus_type);
1105}
1106
1107postcore_initcall(pci_driver_init);
1108
1109EXPORT_SYMBOL(pci_match_id);
1110EXPORT_SYMBOL(__pci_register_driver);
1111EXPORT_SYMBOL(pci_unregister_driver);
1112EXPORT_SYMBOL(pci_dev_driver);
1113EXPORT_SYMBOL(pci_bus_type);
1114EXPORT_SYMBOL(pci_dev_get);
1115EXPORT_SYMBOL(pci_dev_put);
1116