95d1985702904a77c26171f708ed0fa37054747c
[safe/jmp/linux-2.6] / drivers / pci / pci-driver.c
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
26 struct 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  */
42 static ssize_t
43 store_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 }
100 static 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  */
110 static ssize_t
111 store_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 }
146 static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
147
148 static void
149 pci_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
161 static int
162 pci_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
170 static void pci_remove_newid_file(struct pci_driver *drv)
171 {
172         driver_remove_file(&drv->driver, &driver_attr_new_id);
173 }
174
175 static int
176 pci_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
184 static 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 */
189 static inline void pci_free_dynids(struct pci_driver *drv) {}
190 static inline int pci_create_newid_file(struct pci_driver *drv)
191 {
192         return 0;
193 }
194 static inline void pci_remove_newid_file(struct pci_driver *drv) {}
195 static inline int pci_create_removeid_file(struct pci_driver *drv)
196 {
197         return 0;
198 }
199 static 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  */
214 const 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  */
236 static 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
254 struct drv_dev_and_id {
255         struct pci_driver *drv;
256         struct pci_dev *dev;
257         const struct pci_device_id *id;
258 };
259
260 static 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
267 static 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                 node_to_cpumask_ptr(nodecpumask, node);
281
282                 get_online_cpus();
283                 cpu = cpumask_any_and(nodecpumask, cpu_online_mask);
284                 if (cpu < nr_cpu_ids)
285                         error = work_on_cpu(cpu, local_pci_probe, &ddi);
286                 else
287                         error = local_pci_probe(&ddi);
288                 put_online_cpus();
289         } else
290                 error = local_pci_probe(&ddi);
291         return error;
292 }
293
294 /**
295  * __pci_device_probe()
296  * @drv: driver to call to check if it wants the PCI device
297  * @pci_dev: PCI device being probed
298  * 
299  * returns 0 on success, else error.
300  * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
301  */
302 static int
303 __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
304 {
305         const struct pci_device_id *id;
306         int error = 0;
307
308         if (!pci_dev->driver && drv->probe) {
309                 error = -ENODEV;
310
311                 id = pci_match_device(drv, pci_dev);
312                 if (id)
313                         error = pci_call_probe(drv, pci_dev, id);
314                 if (error >= 0) {
315                         pci_dev->driver = drv;
316                         error = 0;
317                 }
318         }
319         return error;
320 }
321
322 static int pci_device_probe(struct device * dev)
323 {
324         int error = 0;
325         struct pci_driver *drv;
326         struct pci_dev *pci_dev;
327
328         drv = to_pci_driver(dev->driver);
329         pci_dev = to_pci_dev(dev);
330         pci_dev_get(pci_dev);
331         error = __pci_device_probe(drv, pci_dev);
332         if (error)
333                 pci_dev_put(pci_dev);
334
335         return error;
336 }
337
338 static int pci_device_remove(struct device * dev)
339 {
340         struct pci_dev * pci_dev = to_pci_dev(dev);
341         struct pci_driver * drv = pci_dev->driver;
342
343         if (drv) {
344                 if (drv->remove)
345                         drv->remove(pci_dev);
346                 pci_dev->driver = NULL;
347         }
348
349         /*
350          * If the device is still on, set the power state as "unknown",
351          * since it might change by the next time we load the driver.
352          */
353         if (pci_dev->current_state == PCI_D0)
354                 pci_dev->current_state = PCI_UNKNOWN;
355
356         /*
357          * We would love to complain here if pci_dev->is_enabled is set, that
358          * the driver should have called pci_disable_device(), but the
359          * unfortunate fact is there are too many odd BIOS and bridge setups
360          * that don't like drivers doing that all of the time.  
361          * Oh well, we can dream of sane hardware when we sleep, no matter how
362          * horrible the crap we have to deal with is when we are awake...
363          */
364
365         pci_dev_put(pci_dev);
366         return 0;
367 }
368
369 static void pci_device_shutdown(struct device *dev)
370 {
371         struct pci_dev *pci_dev = to_pci_dev(dev);
372         struct pci_driver *drv = pci_dev->driver;
373
374         if (drv && drv->shutdown)
375                 drv->shutdown(pci_dev);
376         pci_msi_shutdown(pci_dev);
377         pci_msix_shutdown(pci_dev);
378 }
379
380 #ifdef CONFIG_PM_SLEEP
381
382 /*
383  * Default "suspend" method for devices that have no driver provided suspend,
384  * or not even a driver at all (second part).
385  */
386 static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
387 {
388         /*
389          * mark its power state as "unknown", since we don't know if
390          * e.g. the BIOS will change its device state when we suspend.
391          */
392         if (pci_dev->current_state == PCI_D0)
393                 pci_dev->current_state = PCI_UNKNOWN;
394 }
395
396 /*
397  * Default "resume" method for devices that have no driver provided resume,
398  * or not even a driver at all (second part).
399  */
400 static int pci_pm_reenable_device(struct pci_dev *pci_dev)
401 {
402         int retval;
403
404         /* if the device was enabled before suspend, reenable */
405         retval = pci_reenable_device(pci_dev);
406         /*
407          * if the device was busmaster before the suspend, make it busmaster
408          * again
409          */
410         if (pci_dev->is_busmaster)
411                 pci_set_master(pci_dev);
412
413         return retval;
414 }
415
416 static int pci_legacy_suspend(struct device *dev, pm_message_t state)
417 {
418         struct pci_dev * pci_dev = to_pci_dev(dev);
419         struct pci_driver * drv = pci_dev->driver;
420         int i = 0;
421
422         if (drv && drv->suspend) {
423                 pci_power_t prev = pci_dev->current_state;
424
425                 pci_dev->state_saved = false;
426
427                 i = drv->suspend(pci_dev, state);
428                 suspend_report_result(drv->suspend, i);
429                 if (i)
430                         return i;
431
432                 if (pci_dev->state_saved)
433                         goto Fixup;
434
435                 if (pci_dev->current_state != PCI_D0
436                     && pci_dev->current_state != PCI_UNKNOWN) {
437                         WARN_ONCE(pci_dev->current_state != prev,
438                                 "PCI PM: Device state not saved by %pF\n",
439                                 drv->suspend);
440                         goto Fixup;
441                 }
442         }
443
444         pci_save_state(pci_dev);
445         /*
446          * This is for compatibility with existing code with legacy PM support.
447          */
448         pci_pm_set_unknown_state(pci_dev);
449
450  Fixup:
451         pci_fixup_device(pci_fixup_suspend, pci_dev);
452
453         return i;
454 }
455
456 static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
457 {
458         struct pci_dev * pci_dev = to_pci_dev(dev);
459         struct pci_driver * drv = pci_dev->driver;
460         int i = 0;
461
462         if (drv && drv->suspend_late) {
463                 i = drv->suspend_late(pci_dev, state);
464                 suspend_report_result(drv->suspend_late, i);
465         }
466         return i;
467 }
468
469 static int pci_legacy_resume_early(struct device *dev)
470 {
471         struct pci_dev * pci_dev = to_pci_dev(dev);
472         struct pci_driver * drv = pci_dev->driver;
473
474         return drv && drv->resume_early ?
475                         drv->resume_early(pci_dev) : 0;
476 }
477
478 static int pci_legacy_resume(struct device *dev)
479 {
480         struct pci_dev * pci_dev = to_pci_dev(dev);
481         struct pci_driver * drv = pci_dev->driver;
482
483         pci_fixup_device(pci_fixup_resume, pci_dev);
484
485         return drv && drv->resume ?
486                         drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
487 }
488
489 /* Auxiliary functions used by the new power management framework */
490
491 static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev)
492 {
493         pci_restore_standard_config(pci_dev);
494         pci_dev->state_saved = false;
495         pci_fixup_device(pci_fixup_resume_early, pci_dev);
496 }
497
498 static void pci_pm_default_resume(struct pci_dev *pci_dev)
499 {
500         pci_fixup_device(pci_fixup_resume, pci_dev);
501
502         if (!pci_is_bridge(pci_dev))
503                 pci_enable_wake(pci_dev, PCI_D0, false);
504 }
505
506 static void pci_pm_default_suspend(struct pci_dev *pci_dev)
507 {
508         /* Disable non-bridge devices without PM support */
509         if (!pci_is_bridge(pci_dev))
510                 pci_disable_enabled_device(pci_dev);
511         pci_save_state(pci_dev);
512 }
513
514 static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
515 {
516         struct pci_driver *drv = pci_dev->driver;
517         bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
518                 || drv->resume_early);
519
520         /*
521          * Legacy PM support is used by default, so warn if the new framework is
522          * supported as well.  Drivers are supposed to support either the
523          * former, or the latter, but not both at the same time.
524          */
525         WARN_ON(ret && drv->driver.pm);
526
527         return ret;
528 }
529
530 /* New power management framework */
531
532 static int pci_pm_prepare(struct device *dev)
533 {
534         struct device_driver *drv = dev->driver;
535         int error = 0;
536
537         if (drv && drv->pm && drv->pm->prepare)
538                 error = drv->pm->prepare(dev);
539
540         return error;
541 }
542
543 static void pci_pm_complete(struct device *dev)
544 {
545         struct device_driver *drv = dev->driver;
546
547         if (drv && drv->pm && drv->pm->complete)
548                 drv->pm->complete(dev);
549 }
550
551 #ifdef CONFIG_SUSPEND
552
553 static int pci_pm_suspend(struct device *dev)
554 {
555         struct pci_dev *pci_dev = to_pci_dev(dev);
556         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
557
558         if (pci_has_legacy_pm_support(pci_dev))
559                 return pci_legacy_suspend(dev, PMSG_SUSPEND);
560
561         if (!pm) {
562                 pci_pm_default_suspend(pci_dev);
563                 goto Fixup;
564         }
565
566         pci_dev->state_saved = false;
567
568         if (pm->suspend) {
569                 pci_power_t prev = pci_dev->current_state;
570                 int error;
571
572                 error = pm->suspend(dev);
573                 suspend_report_result(pm->suspend, error);
574                 if (error)
575                         return error;
576
577                 if (pci_dev->state_saved)
578                         goto Fixup;
579
580                 if (pci_dev->current_state != PCI_D0
581                     && pci_dev->current_state != PCI_UNKNOWN) {
582                         WARN_ONCE(pci_dev->current_state != prev,
583                                 "PCI PM: State of device not saved by %pF\n",
584                                 pm->suspend);
585                         goto Fixup;
586                 }
587         }
588
589         if (!pci_dev->state_saved) {
590                 pci_save_state(pci_dev);
591                 if (!pci_is_bridge(pci_dev))
592                         pci_prepare_to_sleep(pci_dev);
593         }
594
595  Fixup:
596         pci_fixup_device(pci_fixup_suspend, pci_dev);
597
598         return 0;
599 }
600
601 static int pci_pm_suspend_noirq(struct device *dev)
602 {
603         struct pci_dev *pci_dev = to_pci_dev(dev);
604         struct device_driver *drv = dev->driver;
605         int error = 0;
606
607         if (pci_has_legacy_pm_support(pci_dev))
608                 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
609
610         if (drv && drv->pm && drv->pm->suspend_noirq) {
611                 error = drv->pm->suspend_noirq(dev);
612                 suspend_report_result(drv->pm->suspend_noirq, error);
613         }
614
615         if (!error)
616                 pci_pm_set_unknown_state(pci_dev);
617
618         return error;
619 }
620
621 static int pci_pm_resume_noirq(struct device *dev)
622 {
623         struct pci_dev *pci_dev = to_pci_dev(dev);
624         struct device_driver *drv = dev->driver;
625         int error = 0;
626
627         pci_pm_default_resume_noirq(pci_dev);
628
629         if (pci_has_legacy_pm_support(pci_dev))
630                 return pci_legacy_resume_early(dev);
631
632         if (drv && drv->pm && drv->pm->resume_noirq)
633                 error = drv->pm->resume_noirq(dev);
634
635         return error;
636 }
637
638 static int pci_pm_resume(struct device *dev)
639 {
640         struct pci_dev *pci_dev = to_pci_dev(dev);
641         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
642         int error = 0;
643
644         /*
645          * This is necessary for the suspend error path in which resume is
646          * called without restoring the standard config registers of the device.
647          */
648         if (pci_dev->state_saved)
649                 pci_restore_standard_config(pci_dev);
650
651         if (pci_has_legacy_pm_support(pci_dev))
652                 return pci_legacy_resume(dev);
653
654         pci_pm_default_resume(pci_dev);
655
656         if (pm) {
657                 if (pm->resume)
658                         error = pm->resume(dev);
659         } else {
660                 pci_pm_reenable_device(pci_dev);
661         }
662
663         return 0;
664 }
665
666 #else /* !CONFIG_SUSPEND */
667
668 #define pci_pm_suspend          NULL
669 #define pci_pm_suspend_noirq    NULL
670 #define pci_pm_resume           NULL
671 #define pci_pm_resume_noirq     NULL
672
673 #endif /* !CONFIG_SUSPEND */
674
675 #ifdef CONFIG_HIBERNATION
676
677 static int pci_pm_freeze(struct device *dev)
678 {
679         struct pci_dev *pci_dev = to_pci_dev(dev);
680         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
681
682         if (pci_has_legacy_pm_support(pci_dev))
683                 return pci_legacy_suspend(dev, PMSG_FREEZE);
684
685         if (!pm) {
686                 pci_pm_default_suspend(pci_dev);
687                 return 0;
688         }
689
690         pci_dev->state_saved = false;
691
692         if (pm->freeze) {
693                 int error;
694
695                 error = pm->freeze(dev);
696                 suspend_report_result(pm->freeze, error);
697                 if (error)
698                         return error;
699         }
700
701         if (!pci_dev->state_saved)
702                 pci_save_state(pci_dev);
703
704         return 0;
705 }
706
707 static int pci_pm_freeze_noirq(struct device *dev)
708 {
709         struct pci_dev *pci_dev = to_pci_dev(dev);
710         struct device_driver *drv = dev->driver;
711         int error = 0;
712
713         if (pci_has_legacy_pm_support(pci_dev))
714                 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
715
716         if (drv && drv->pm && drv->pm->freeze_noirq) {
717                 error = drv->pm->freeze_noirq(dev);
718                 suspend_report_result(drv->pm->freeze_noirq, error);
719         }
720
721         if (!error)
722                 pci_pm_set_unknown_state(pci_dev);
723
724         return error;
725 }
726
727 static int pci_pm_thaw_noirq(struct device *dev)
728 {
729         struct pci_dev *pci_dev = to_pci_dev(dev);
730         struct device_driver *drv = dev->driver;
731         int error = 0;
732
733         if (pci_has_legacy_pm_support(pci_dev))
734                 return pci_legacy_resume_early(dev);
735
736         pci_update_current_state(pci_dev, PCI_D0);
737
738         if (drv && drv->pm && drv->pm->thaw_noirq)
739                 error = drv->pm->thaw_noirq(dev);
740
741         return error;
742 }
743
744 static int pci_pm_thaw(struct device *dev)
745 {
746         struct pci_dev *pci_dev = to_pci_dev(dev);
747         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
748         int error = 0;
749
750         if (pci_has_legacy_pm_support(pci_dev))
751                 return pci_legacy_resume(dev);
752
753         if (pm) {
754                 if (pm->thaw)
755                         error = pm->thaw(dev);
756         } else {
757                 pci_pm_reenable_device(pci_dev);
758         }
759
760         return error;
761 }
762
763 static int pci_pm_poweroff(struct device *dev)
764 {
765         struct pci_dev *pci_dev = to_pci_dev(dev);
766         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
767         int error = 0;
768
769         if (pci_has_legacy_pm_support(pci_dev))
770                 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
771
772         if (!pm) {
773                 pci_pm_default_suspend(pci_dev);
774                 goto Fixup;
775         }
776
777         pci_dev->state_saved = false;
778
779         if (pm->poweroff) {
780                 error = pm->poweroff(dev);
781                 suspend_report_result(pm->poweroff, error);
782         }
783
784         if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
785                 pci_prepare_to_sleep(pci_dev);
786
787  Fixup:
788         pci_fixup_device(pci_fixup_suspend, pci_dev);
789
790         return error;
791 }
792
793 static int pci_pm_poweroff_noirq(struct device *dev)
794 {
795         struct device_driver *drv = dev->driver;
796         int error = 0;
797
798         if (pci_has_legacy_pm_support(to_pci_dev(dev)))
799                 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
800
801         if (drv && drv->pm && drv->pm->poweroff_noirq) {
802                 error = drv->pm->poweroff_noirq(dev);
803                 suspend_report_result(drv->pm->poweroff_noirq, error);
804         }
805
806         return error;
807 }
808
809 static int pci_pm_restore_noirq(struct device *dev)
810 {
811         struct pci_dev *pci_dev = to_pci_dev(dev);
812         struct device_driver *drv = dev->driver;
813         int error = 0;
814
815         pci_pm_default_resume_noirq(pci_dev);
816
817         if (pci_has_legacy_pm_support(pci_dev))
818                 return pci_legacy_resume_early(dev);
819
820         if (drv && drv->pm && drv->pm->restore_noirq)
821                 error = drv->pm->restore_noirq(dev);
822
823         return error;
824 }
825
826 static int pci_pm_restore(struct device *dev)
827 {
828         struct pci_dev *pci_dev = to_pci_dev(dev);
829         struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
830         int error = 0;
831
832         /*
833          * This is necessary for the hibernation error path in which restore is
834          * called without restoring the standard config registers of the device.
835          */
836         if (pci_dev->state_saved)
837                 pci_restore_standard_config(pci_dev);
838
839         if (pci_has_legacy_pm_support(pci_dev))
840                 return pci_legacy_resume(dev);
841
842         pci_pm_default_resume(pci_dev);
843
844         if (pm) {
845                 if (pm->restore)
846                         error = pm->restore(dev);
847         } else {
848                 pci_pm_reenable_device(pci_dev);
849         }
850
851         return error;
852 }
853
854 #else /* !CONFIG_HIBERNATION */
855
856 #define pci_pm_freeze           NULL
857 #define pci_pm_freeze_noirq     NULL
858 #define pci_pm_thaw             NULL
859 #define pci_pm_thaw_noirq       NULL
860 #define pci_pm_poweroff         NULL
861 #define pci_pm_poweroff_noirq   NULL
862 #define pci_pm_restore          NULL
863 #define pci_pm_restore_noirq    NULL
864
865 #endif /* !CONFIG_HIBERNATION */
866
867 struct dev_pm_ops pci_dev_pm_ops = {
868         .prepare = pci_pm_prepare,
869         .complete = pci_pm_complete,
870         .suspend = pci_pm_suspend,
871         .resume = pci_pm_resume,
872         .freeze = pci_pm_freeze,
873         .thaw = pci_pm_thaw,
874         .poweroff = pci_pm_poweroff,
875         .restore = pci_pm_restore,
876         .suspend_noirq = pci_pm_suspend_noirq,
877         .resume_noirq = pci_pm_resume_noirq,
878         .freeze_noirq = pci_pm_freeze_noirq,
879         .thaw_noirq = pci_pm_thaw_noirq,
880         .poweroff_noirq = pci_pm_poweroff_noirq,
881         .restore_noirq = pci_pm_restore_noirq,
882 };
883
884 #define PCI_PM_OPS_PTR  (&pci_dev_pm_ops)
885
886 #else /* !CONFIG_PM_SLEEP */
887
888 #define PCI_PM_OPS_PTR  NULL
889
890 #endif /* !CONFIG_PM_SLEEP */
891
892 /**
893  * __pci_register_driver - register a new pci driver
894  * @drv: the driver structure to register
895  * @owner: owner module of drv
896  * @mod_name: module name string
897  * 
898  * Adds the driver structure to the list of registered drivers.
899  * Returns a negative value on error, otherwise 0. 
900  * If no error occurred, the driver remains registered even if 
901  * no device was claimed during registration.
902  */
903 int __pci_register_driver(struct pci_driver *drv, struct module *owner,
904                           const char *mod_name)
905 {
906         int error;
907
908         /* initialize common driver fields */
909         drv->driver.name = drv->name;
910         drv->driver.bus = &pci_bus_type;
911         drv->driver.owner = owner;
912         drv->driver.mod_name = mod_name;
913
914         spin_lock_init(&drv->dynids.lock);
915         INIT_LIST_HEAD(&drv->dynids.list);
916
917         /* register with core */
918         error = driver_register(&drv->driver);
919         if (error)
920                 goto out;
921
922         error = pci_create_newid_file(drv);
923         if (error)
924                 goto out_newid;
925
926         error = pci_create_removeid_file(drv);
927         if (error)
928                 goto out_removeid;
929 out:
930         return error;
931
932 out_removeid:
933         pci_remove_newid_file(drv);
934 out_newid:
935         driver_unregister(&drv->driver);
936         goto out;
937 }
938
939 /**
940  * pci_unregister_driver - unregister a pci driver
941  * @drv: the driver structure to unregister
942  * 
943  * Deletes the driver structure from the list of registered PCI drivers,
944  * gives it a chance to clean up by calling its remove() function for
945  * each device it was responsible for, and marks those devices as
946  * driverless.
947  */
948
949 void
950 pci_unregister_driver(struct pci_driver *drv)
951 {
952         pci_remove_removeid_file(drv);
953         pci_remove_newid_file(drv);
954         driver_unregister(&drv->driver);
955         pci_free_dynids(drv);
956 }
957
958 static struct pci_driver pci_compat_driver = {
959         .name = "compat"
960 };
961
962 /**
963  * pci_dev_driver - get the pci_driver of a device
964  * @dev: the device to query
965  *
966  * Returns the appropriate pci_driver structure or %NULL if there is no 
967  * registered driver for the device.
968  */
969 struct pci_driver *
970 pci_dev_driver(const struct pci_dev *dev)
971 {
972         if (dev->driver)
973                 return dev->driver;
974         else {
975                 int i;
976                 for(i=0; i<=PCI_ROM_RESOURCE; i++)
977                         if (dev->resource[i].flags & IORESOURCE_BUSY)
978                                 return &pci_compat_driver;
979         }
980         return NULL;
981 }
982
983 /**
984  * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
985  * @dev: the PCI device structure to match against
986  * @drv: the device driver to search for matching PCI device id structures
987  * 
988  * Used by a driver to check whether a PCI device present in the
989  * system is in its list of supported devices. Returns the matching
990  * pci_device_id structure or %NULL if there is no match.
991  */
992 static int pci_bus_match(struct device *dev, struct device_driver *drv)
993 {
994         struct pci_dev *pci_dev = to_pci_dev(dev);
995         struct pci_driver *pci_drv = to_pci_driver(drv);
996         const struct pci_device_id *found_id;
997
998         found_id = pci_match_device(pci_drv, pci_dev);
999         if (found_id)
1000                 return 1;
1001
1002         return 0;
1003 }
1004
1005 /**
1006  * pci_dev_get - increments the reference count of the pci device structure
1007  * @dev: the device being referenced
1008  *
1009  * Each live reference to a device should be refcounted.
1010  *
1011  * Drivers for PCI devices should normally record such references in
1012  * their probe() methods, when they bind to a device, and release
1013  * them by calling pci_dev_put(), in their disconnect() methods.
1014  *
1015  * A pointer to the device with the incremented reference counter is returned.
1016  */
1017 struct pci_dev *pci_dev_get(struct pci_dev *dev)
1018 {
1019         if (dev)
1020                 get_device(&dev->dev);
1021         return dev;
1022 }
1023
1024 /**
1025  * pci_dev_put - release a use of the pci device structure
1026  * @dev: device that's been disconnected
1027  *
1028  * Must be called when a user of a device is finished with it.  When the last
1029  * user of the device calls this function, the memory of the device is freed.
1030  */
1031 void pci_dev_put(struct pci_dev *dev)
1032 {
1033         if (dev)
1034                 put_device(&dev->dev);
1035 }
1036
1037 #ifndef CONFIG_HOTPLUG
1038 int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1039 {
1040         return -ENODEV;
1041 }
1042 #endif
1043
1044 struct bus_type pci_bus_type = {
1045         .name           = "pci",
1046         .match          = pci_bus_match,
1047         .uevent         = pci_uevent,
1048         .probe          = pci_device_probe,
1049         .remove         = pci_device_remove,
1050         .shutdown       = pci_device_shutdown,
1051         .dev_attrs      = pci_dev_attrs,
1052         .bus_attrs      = pci_bus_attrs,
1053         .pm             = PCI_PM_OPS_PTR,
1054 };
1055
1056 static int __init pci_driver_init(void)
1057 {
1058         return bus_register(&pci_bus_type);
1059 }
1060
1061 postcore_initcall(pci_driver_init);
1062
1063 EXPORT_SYMBOL(pci_match_id);
1064 EXPORT_SYMBOL(__pci_register_driver);
1065 EXPORT_SYMBOL(pci_unregister_driver);
1066 EXPORT_SYMBOL(pci_dev_driver);
1067 EXPORT_SYMBOL(pci_bus_type);
1068 EXPORT_SYMBOL(pci_dev_get);
1069 EXPORT_SYMBOL(pci_dev_put);