1
2
3
4
5
6
7
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
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
35
36
37
38
39
40
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
61
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)
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
104
105
106
107
108
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
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
204
205
206
207
208
209
210
211
212
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
229
230
231
232
233
234
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
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
274
275
276
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
295
296
297
298
299
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
350
351
352 if (pci_dev->current_state == PCI_D0)
353 pci_dev->current_state = PCI_UNKNOWN;
354
355
356
357
358
359
360
361
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
383
384
385static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
386{
387
388
389
390
391 if (pci_dev->current_state == PCI_D0)
392 pci_dev->current_state = PCI_UNKNOWN;
393}
394
395
396
397
398
399static int pci_pm_reenable_device(struct pci_dev *pci_dev)
400{
401 int retval;
402
403
404 retval = pci_reenable_device(pci_dev);
405
406
407
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
496
497
498
499
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
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
544
545
546
547 WARN_ON(ret && drv->driver.pm);
548
549 return ret;
550}
551
552
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
680
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
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
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
880
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
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
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
933
934#define PCI_PM_OPS_PTR NULL
935
936#endif
937
938
939
940
941
942
943
944
945
946
947
948
949int __pci_register_driver(struct pci_driver *drv, struct module *owner,
950 const char *mod_name)
951{
952 int error;
953
954
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
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
987
988
989
990
991
992
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
1010
1011
1012
1013
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
1031
1032
1033
1034
1035
1036
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
1053
1054
1055
1056
1057
1058
1059
1060
1061
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
1072
1073
1074
1075
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