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 <linux/pm_runtime.h>
21#include "pci.h"
22
23struct pci_dynid {
24 struct list_head node;
25 struct pci_device_id id;
26};
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49int pci_add_dynid(struct pci_driver *drv,
50 unsigned int vendor, unsigned int device,
51 unsigned int subvendor, unsigned int subdevice,
52 unsigned int class, unsigned int class_mask,
53 unsigned long driver_data)
54{
55 struct pci_dynid *dynid;
56 int retval;
57
58 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
59 if (!dynid)
60 return -ENOMEM;
61
62 dynid->id.vendor = vendor;
63 dynid->id.device = device;
64 dynid->id.subvendor = subvendor;
65 dynid->id.subdevice = subdevice;
66 dynid->id.class = class;
67 dynid->id.class_mask = class_mask;
68 dynid->id.driver_data = driver_data;
69
70 spin_lock(&drv->dynids.lock);
71 list_add_tail(&dynid->node, &drv->dynids.list);
72 spin_unlock(&drv->dynids.lock);
73
74 get_driver(&drv->driver);
75 retval = driver_attach(&drv->driver);
76 put_driver(&drv->driver);
77
78 return retval;
79}
80
81static void pci_free_dynids(struct pci_driver *drv)
82{
83 struct pci_dynid *dynid, *n;
84
85 spin_lock(&drv->dynids.lock);
86 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
87 list_del(&dynid->node);
88 kfree(dynid);
89 }
90 spin_unlock(&drv->dynids.lock);
91}
92
93
94
95
96#ifdef CONFIG_HOTPLUG
97
98
99
100
101
102
103
104
105static ssize_t
106store_new_id(struct device_driver *driver, const char *buf, size_t count)
107{
108 struct pci_driver *pdrv = to_pci_driver(driver);
109 const struct pci_device_id *ids = pdrv->id_table;
110 __u32 vendor, device, subvendor=PCI_ANY_ID,
111 subdevice=PCI_ANY_ID, class=0, class_mask=0;
112 unsigned long driver_data=0;
113 int fields=0;
114 int retval;
115
116 fields = sscanf(buf, "%x %x %x %x %x %x %lx",
117 &vendor, &device, &subvendor, &subdevice,
118 &class, &class_mask, &driver_data);
119 if (fields < 2)
120 return -EINVAL;
121
122
123
124 if (ids) {
125 retval = -EINVAL;
126 while (ids->vendor || ids->subvendor || ids->class_mask) {
127 if (driver_data == ids->driver_data) {
128 retval = 0;
129 break;
130 }
131 ids++;
132 }
133 if (retval)
134 return retval;
135 }
136
137 retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
138 class, class_mask, driver_data);
139 if (retval)
140 return retval;
141 return count;
142}
143static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
144
145
146
147
148
149
150
151
152
153static ssize_t
154store_remove_id(struct device_driver *driver, const char *buf, size_t count)
155{
156 struct pci_dynid *dynid, *n;
157 struct pci_driver *pdrv = to_pci_driver(driver);
158 __u32 vendor, device, subvendor = PCI_ANY_ID,
159 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
160 int fields = 0;
161 int retval = -ENODEV;
162
163 fields = sscanf(buf, "%x %x %x %x %x %x",
164 &vendor, &device, &subvendor, &subdevice,
165 &class, &class_mask);
166 if (fields < 2)
167 return -EINVAL;
168
169 spin_lock(&pdrv->dynids.lock);
170 list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
171 struct pci_device_id *id = &dynid->id;
172 if ((id->vendor == vendor) &&
173 (id->device == device) &&
174 (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
175 (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
176 !((id->class ^ class) & class_mask)) {
177 list_del(&dynid->node);
178 kfree(dynid);
179 retval = 0;
180 break;
181 }
182 }
183 spin_unlock(&pdrv->dynids.lock);
184
185 if (retval)
186 return retval;
187 return count;
188}
189static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
190
191static int
192pci_create_newid_file(struct pci_driver *drv)
193{
194 int error = 0;
195 if (drv->probe != NULL)
196 error = driver_create_file(&drv->driver, &driver_attr_new_id);
197 return error;
198}
199
200static void pci_remove_newid_file(struct pci_driver *drv)
201{
202 driver_remove_file(&drv->driver, &driver_attr_new_id);
203}
204
205static int
206pci_create_removeid_file(struct pci_driver *drv)
207{
208 int error = 0;
209 if (drv->probe != NULL)
210 error = driver_create_file(&drv->driver,&driver_attr_remove_id);
211 return error;
212}
213
214static void pci_remove_removeid_file(struct pci_driver *drv)
215{
216 driver_remove_file(&drv->driver, &driver_attr_remove_id);
217}
218#else
219static inline int pci_create_newid_file(struct pci_driver *drv)
220{
221 return 0;
222}
223static inline void pci_remove_newid_file(struct pci_driver *drv) {}
224static inline int pci_create_removeid_file(struct pci_driver *drv)
225{
226 return 0;
227}
228static inline void pci_remove_removeid_file(struct pci_driver *drv) {}
229#endif
230
231
232
233
234
235
236
237
238
239
240
241
242
243const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
244 struct pci_dev *dev)
245{
246 if (ids) {
247 while (ids->vendor || ids->subvendor || ids->class_mask) {
248 if (pci_match_one_device(ids, dev))
249 return ids;
250 ids++;
251 }
252 }
253 return NULL;
254}
255
256
257
258
259
260
261
262
263
264
265static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
266 struct pci_dev *dev)
267{
268 struct pci_dynid *dynid;
269
270
271 spin_lock(&drv->dynids.lock);
272 list_for_each_entry(dynid, &drv->dynids.list, node) {
273 if (pci_match_one_device(&dynid->id, dev)) {
274 spin_unlock(&drv->dynids.lock);
275 return &dynid->id;
276 }
277 }
278 spin_unlock(&drv->dynids.lock);
279
280 return pci_match_id(drv->id_table, dev);
281}
282
283struct drv_dev_and_id {
284 struct pci_driver *drv;
285 struct pci_dev *dev;
286 const struct pci_device_id *id;
287};
288
289static long local_pci_probe(void *_ddi)
290{
291 struct drv_dev_and_id *ddi = _ddi;
292
293 return ddi->drv->probe(ddi->dev, ddi->id);
294}
295
296static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
297 const struct pci_device_id *id)
298{
299 int error, node;
300 struct drv_dev_and_id ddi = { drv, dev, id };
301
302
303
304
305
306 node = dev_to_node(&dev->dev);
307 if (node >= 0) {
308 int cpu;
309
310 get_online_cpus();
311 cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
312 if (cpu < nr_cpu_ids)
313 error = work_on_cpu(cpu, local_pci_probe, &ddi);
314 else
315 error = local_pci_probe(&ddi);
316 put_online_cpus();
317 } else
318 error = local_pci_probe(&ddi);
319 return error;
320}
321
322
323
324
325
326
327
328
329
330static int
331__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
332{
333 const struct pci_device_id *id;
334 int error = 0;
335
336 if (!pci_dev->driver && drv->probe) {
337 error = -ENODEV;
338
339 id = pci_match_device(drv, pci_dev);
340 if (id)
341 error = pci_call_probe(drv, pci_dev, id);
342 if (error >= 0) {
343 pci_dev->driver = drv;
344 error = 0;
345 }
346 }
347 return error;
348}
349
350static int pci_device_probe(struct device * dev)
351{
352 int error = 0;
353 struct pci_driver *drv;
354 struct pci_dev *pci_dev;
355
356 drv = to_pci_driver(dev->driver);
357 pci_dev = to_pci_dev(dev);
358 pci_dev_get(pci_dev);
359 error = __pci_device_probe(drv, pci_dev);
360 if (error)
361 pci_dev_put(pci_dev);
362
363 return error;
364}
365
366static int pci_device_remove(struct device * dev)
367{
368 struct pci_dev * pci_dev = to_pci_dev(dev);
369 struct pci_driver * drv = pci_dev->driver;
370
371 if (drv) {
372 if (drv->remove)
373 drv->remove(pci_dev);
374 pci_dev->driver = NULL;
375 }
376
377
378
379
380
381 if (pci_dev->current_state == PCI_D0)
382 pci_dev->current_state = PCI_UNKNOWN;
383
384
385
386
387
388
389
390
391
392
393 pci_dev_put(pci_dev);
394 return 0;
395}
396
397static void pci_device_shutdown(struct device *dev)
398{
399 struct pci_dev *pci_dev = to_pci_dev(dev);
400 struct pci_driver *drv = pci_dev->driver;
401
402 if (drv && drv->shutdown)
403 drv->shutdown(pci_dev);
404 pci_msi_shutdown(pci_dev);
405 pci_msix_shutdown(pci_dev);
406}
407
408#ifdef CONFIG_PM_OPS
409
410
411
412
413
414
415
416static int pci_restore_standard_config(struct pci_dev *pci_dev)
417{
418 pci_update_current_state(pci_dev, PCI_UNKNOWN);
419
420 if (pci_dev->current_state != PCI_D0) {
421 int error = pci_set_power_state(pci_dev, PCI_D0);
422 if (error)
423 return error;
424 }
425
426 return pci_restore_state(pci_dev);
427}
428
429static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
430{
431 pci_restore_standard_config(pci_dev);
432 pci_fixup_device(pci_fixup_resume_early, pci_dev);
433}
434
435#endif
436
437#ifdef CONFIG_PM_SLEEP
438
439
440
441
442
443static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
444{
445
446
447
448
449 if (pci_dev->current_state == PCI_D0)
450 pci_dev->current_state = PCI_UNKNOWN;
451}
452
453
454
455
456
457static int pci_pm_reenable_device(struct pci_dev *pci_dev)
458{
459 int retval;
460
461
462 retval = pci_reenable_device(pci_dev);
463
464
465
466
467 if (pci_dev->is_busmaster)
468 pci_set_master(pci_dev);
469
470 return retval;
471}
472
473static int pci_legacy_suspend(struct device *dev, pm_message_t state)
474{
475 struct pci_dev * pci_dev = to_pci_dev(dev);
476 struct pci_driver * drv = pci_dev->driver;
477
478 if (drv && drv->suspend) {
479 pci_power_t prev = pci_dev->current_state;
480 int error;
481
482 error = drv->suspend(pci_dev, state);
483 suspend_report_result(drv->suspend, error);
484 if (error)
485 return error;
486
487 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
488 && pci_dev->current_state != PCI_UNKNOWN) {
489 WARN_ONCE(pci_dev->current_state != prev,
490 "PCI PM: Device state not saved by %pF\n",
491 drv->suspend);
492 }
493 }
494
495 pci_fixup_device(pci_fixup_suspend, pci_dev);
496
497 return 0;
498}
499
500static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
501{
502 struct pci_dev * pci_dev = to_pci_dev(dev);
503 struct pci_driver * drv = pci_dev->driver;
504
505 if (drv && drv->suspend_late) {
506 pci_power_t prev = pci_dev->current_state;
507 int error;
508
509 error = drv->suspend_late(pci_dev, state);
510 suspend_report_result(drv->suspend_late, error);
511 if (error)
512 return error;
513
514 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
515 && pci_dev->current_state != PCI_UNKNOWN) {
516 WARN_ONCE(pci_dev->current_state != prev,
517 "PCI PM: Device state not saved by %pF\n",
518 drv->suspend_late);
519 return 0;
520 }
521 }
522
523 if (!pci_dev->state_saved)
524 pci_save_state(pci_dev);
525
526 pci_pm_set_unknown_state(pci_dev);
527
528 return 0;
529}
530
531static int pci_legacy_resume_early(struct device *dev)
532{
533 struct pci_dev * pci_dev = to_pci_dev(dev);
534 struct pci_driver * drv = pci_dev->driver;
535
536 return drv && drv->resume_early ?
537 drv->resume_early(pci_dev) : 0;
538}
539
540static int pci_legacy_resume(struct device *dev)
541{
542 struct pci_dev * pci_dev = to_pci_dev(dev);
543 struct pci_driver * drv = pci_dev->driver;
544
545 pci_fixup_device(pci_fixup_resume, pci_dev);
546
547 return drv && drv->resume ?
548 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
549}
550
551
552
553static void pci_pm_default_resume(struct pci_dev *pci_dev)
554{
555 pci_fixup_device(pci_fixup_resume, pci_dev);
556
557 if (!pci_is_bridge(pci_dev))
558 pci_enable_wake(pci_dev, PCI_D0, false);
559}
560
561static void pci_pm_default_suspend(struct pci_dev *pci_dev)
562{
563
564 if (!pci_is_bridge(pci_dev))
565 pci_disable_enabled_device(pci_dev);
566}
567
568static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
569{
570 struct pci_driver *drv = pci_dev->driver;
571 bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
572 || drv->resume_early);
573
574
575
576
577
578
579 WARN_ON(ret && drv->driver.pm);
580
581 return ret;
582}
583
584
585
586static int pci_pm_prepare(struct device *dev)
587{
588 struct device_driver *drv = dev->driver;
589 int error = 0;
590
591
592
593
594
595
596
597
598
599
600 pm_runtime_resume(dev);
601
602 if (drv && drv->pm && drv->pm->prepare)
603 error = drv->pm->prepare(dev);
604
605 return error;
606}
607
608static void pci_pm_complete(struct device *dev)
609{
610 struct device_driver *drv = dev->driver;
611
612 if (drv && drv->pm && drv->pm->complete)
613 drv->pm->complete(dev);
614}
615
616#else
617
618#define pci_pm_prepare NULL
619#define pci_pm_complete NULL
620
621#endif
622
623#ifdef CONFIG_SUSPEND
624
625static int pci_pm_suspend(struct device *dev)
626{
627 struct pci_dev *pci_dev = to_pci_dev(dev);
628 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
629
630 if (pci_has_legacy_pm_support(pci_dev))
631 return pci_legacy_suspend(dev, PMSG_SUSPEND);
632
633 if (!pm) {
634 pci_pm_default_suspend(pci_dev);
635 goto Fixup;
636 }
637
638 if (pm->suspend) {
639 pci_power_t prev = pci_dev->current_state;
640 int error;
641
642 error = pm->suspend(dev);
643 suspend_report_result(pm->suspend, error);
644 if (error)
645 return error;
646
647 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
648 && pci_dev->current_state != PCI_UNKNOWN) {
649 WARN_ONCE(pci_dev->current_state != prev,
650 "PCI PM: State of device not saved by %pF\n",
651 pm->suspend);
652 }
653 }
654
655 Fixup:
656 pci_fixup_device(pci_fixup_suspend, pci_dev);
657
658 return 0;
659}
660
661static int pci_pm_suspend_noirq(struct device *dev)
662{
663 struct pci_dev *pci_dev = to_pci_dev(dev);
664 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
665
666 if (pci_has_legacy_pm_support(pci_dev))
667 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
668
669 if (!pm) {
670 pci_save_state(pci_dev);
671 return 0;
672 }
673
674 if (pm->suspend_noirq) {
675 pci_power_t prev = pci_dev->current_state;
676 int error;
677
678 error = pm->suspend_noirq(dev);
679 suspend_report_result(pm->suspend_noirq, error);
680 if (error)
681 return error;
682
683 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
684 && pci_dev->current_state != PCI_UNKNOWN) {
685 WARN_ONCE(pci_dev->current_state != prev,
686 "PCI PM: State of device not saved by %pF\n",
687 pm->suspend_noirq);
688 return 0;
689 }
690 }
691
692 if (!pci_dev->state_saved) {
693 pci_save_state(pci_dev);
694 if (!pci_is_bridge(pci_dev))
695 pci_prepare_to_sleep(pci_dev);
696 }
697
698 pci_pm_set_unknown_state(pci_dev);
699
700 return 0;
701}
702
703static int pci_pm_resume_noirq(struct device *dev)
704{
705 struct pci_dev *pci_dev = to_pci_dev(dev);
706 struct device_driver *drv = dev->driver;
707 int error = 0;
708
709 pci_pm_default_resume_early(pci_dev);
710
711 if (pci_has_legacy_pm_support(pci_dev))
712 return pci_legacy_resume_early(dev);
713
714 if (drv && drv->pm && drv->pm->resume_noirq)
715 error = drv->pm->resume_noirq(dev);
716
717 return error;
718}
719
720static int pci_pm_resume(struct device *dev)
721{
722 struct pci_dev *pci_dev = to_pci_dev(dev);
723 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
724 int error = 0;
725
726
727
728
729
730 if (pci_dev->state_saved)
731 pci_restore_standard_config(pci_dev);
732
733 if (pci_has_legacy_pm_support(pci_dev))
734 return pci_legacy_resume(dev);
735
736 pci_pm_default_resume(pci_dev);
737
738 if (pm) {
739 if (pm->resume)
740 error = pm->resume(dev);
741 } else {
742 pci_pm_reenable_device(pci_dev);
743 }
744
745 return error;
746}
747
748#else
749
750#define pci_pm_suspend NULL
751#define pci_pm_suspend_noirq NULL
752#define pci_pm_resume NULL
753#define pci_pm_resume_noirq NULL
754
755#endif
756
757#ifdef CONFIG_HIBERNATION
758
759static int pci_pm_freeze(struct device *dev)
760{
761 struct pci_dev *pci_dev = to_pci_dev(dev);
762 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
763
764 if (pci_has_legacy_pm_support(pci_dev))
765 return pci_legacy_suspend(dev, PMSG_FREEZE);
766
767 if (!pm) {
768 pci_pm_default_suspend(pci_dev);
769 return 0;
770 }
771
772 if (pm->freeze) {
773 int error;
774
775 error = pm->freeze(dev);
776 suspend_report_result(pm->freeze, error);
777 if (error)
778 return error;
779 }
780
781 return 0;
782}
783
784static int pci_pm_freeze_noirq(struct device *dev)
785{
786 struct pci_dev *pci_dev = to_pci_dev(dev);
787 struct device_driver *drv = dev->driver;
788
789 if (pci_has_legacy_pm_support(pci_dev))
790 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
791
792 if (drv && drv->pm && drv->pm->freeze_noirq) {
793 int error;
794
795 error = drv->pm->freeze_noirq(dev);
796 suspend_report_result(drv->pm->freeze_noirq, error);
797 if (error)
798 return error;
799 }
800
801 if (!pci_dev->state_saved)
802 pci_save_state(pci_dev);
803
804 pci_pm_set_unknown_state(pci_dev);
805
806 return 0;
807}
808
809static int pci_pm_thaw_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 if (pci_has_legacy_pm_support(pci_dev))
816 return pci_legacy_resume_early(dev);
817
818 pci_update_current_state(pci_dev, PCI_D0);
819
820 if (drv && drv->pm && drv->pm->thaw_noirq)
821 error = drv->pm->thaw_noirq(dev);
822
823 return error;
824}
825
826static int pci_pm_thaw(struct device *dev)
827{
828 struct pci_dev *pci_dev = to_pci_dev(dev);
829 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
830 int error = 0;
831
832 if (pci_has_legacy_pm_support(pci_dev))
833 return pci_legacy_resume(dev);
834
835 if (pm) {
836 if (pm->thaw)
837 error = pm->thaw(dev);
838 } else {
839 pci_pm_reenable_device(pci_dev);
840 }
841
842 pci_dev->state_saved = false;
843
844 return error;
845}
846
847static int pci_pm_poweroff(struct device *dev)
848{
849 struct pci_dev *pci_dev = to_pci_dev(dev);
850 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
851
852 if (pci_has_legacy_pm_support(pci_dev))
853 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
854
855 if (!pm) {
856 pci_pm_default_suspend(pci_dev);
857 goto Fixup;
858 }
859
860 if (pm->poweroff) {
861 int error;
862
863 error = pm->poweroff(dev);
864 suspend_report_result(pm->poweroff, error);
865 if (error)
866 return error;
867 }
868
869 Fixup:
870 pci_fixup_device(pci_fixup_suspend, pci_dev);
871
872 return 0;
873}
874
875static int pci_pm_poweroff_noirq(struct device *dev)
876{
877 struct pci_dev *pci_dev = to_pci_dev(dev);
878 struct device_driver *drv = dev->driver;
879
880 if (pci_has_legacy_pm_support(to_pci_dev(dev)))
881 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
882
883 if (!drv || !drv->pm)
884 return 0;
885
886 if (drv->pm->poweroff_noirq) {
887 int error;
888
889 error = drv->pm->poweroff_noirq(dev);
890 suspend_report_result(drv->pm->poweroff_noirq, error);
891 if (error)
892 return error;
893 }
894
895 if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
896 pci_prepare_to_sleep(pci_dev);
897
898 return 0;
899}
900
901static int pci_pm_restore_noirq(struct device *dev)
902{
903 struct pci_dev *pci_dev = to_pci_dev(dev);
904 struct device_driver *drv = dev->driver;
905 int error = 0;
906
907 pci_pm_default_resume_early(pci_dev);
908
909 if (pci_has_legacy_pm_support(pci_dev))
910 return pci_legacy_resume_early(dev);
911
912 if (drv && drv->pm && drv->pm->restore_noirq)
913 error = drv->pm->restore_noirq(dev);
914
915 return error;
916}
917
918static int pci_pm_restore(struct device *dev)
919{
920 struct pci_dev *pci_dev = to_pci_dev(dev);
921 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
922 int error = 0;
923
924
925
926
927
928 if (pci_dev->state_saved)
929 pci_restore_standard_config(pci_dev);
930
931 if (pci_has_legacy_pm_support(pci_dev))
932 return pci_legacy_resume(dev);
933
934 pci_pm_default_resume(pci_dev);
935
936 if (pm) {
937 if (pm->restore)
938 error = pm->restore(dev);
939 } else {
940 pci_pm_reenable_device(pci_dev);
941 }
942
943 return error;
944}
945
946#else
947
948#define pci_pm_freeze NULL
949#define pci_pm_freeze_noirq NULL
950#define pci_pm_thaw NULL
951#define pci_pm_thaw_noirq NULL
952#define pci_pm_poweroff NULL
953#define pci_pm_poweroff_noirq NULL
954#define pci_pm_restore NULL
955#define pci_pm_restore_noirq NULL
956
957#endif
958
959#ifdef CONFIG_PM_RUNTIME
960
961static int pci_pm_runtime_suspend(struct device *dev)
962{
963 struct pci_dev *pci_dev = to_pci_dev(dev);
964 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
965 pci_power_t prev = pci_dev->current_state;
966 int error;
967
968 if (!pm || !pm->runtime_suspend)
969 return -ENOSYS;
970
971 error = pm->runtime_suspend(dev);
972 suspend_report_result(pm->runtime_suspend, error);
973 if (error)
974 return error;
975
976 pci_fixup_device(pci_fixup_suspend, pci_dev);
977
978 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
979 && pci_dev->current_state != PCI_UNKNOWN) {
980 WARN_ONCE(pci_dev->current_state != prev,
981 "PCI PM: State of device not saved by %pF\n",
982 pm->runtime_suspend);
983 return 0;
984 }
985
986 if (!pci_dev->state_saved)
987 pci_save_state(pci_dev);
988
989 pci_finish_runtime_suspend(pci_dev);
990
991 return 0;
992}
993
994static int pci_pm_runtime_resume(struct device *dev)
995{
996 struct pci_dev *pci_dev = to_pci_dev(dev);
997 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
998
999 if (!pm || !pm->runtime_resume)
1000 return -ENOSYS;
1001
1002 pci_pm_default_resume_early(pci_dev);
1003 __pci_enable_wake(pci_dev, PCI_D0, true, false);
1004 pci_fixup_device(pci_fixup_resume, pci_dev);
1005
1006 return pm->runtime_resume(dev);
1007}
1008
1009static int pci_pm_runtime_idle(struct device *dev)
1010{
1011 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1012
1013 if (!pm)
1014 return -ENOSYS;
1015
1016 if (pm->runtime_idle) {
1017 int ret = pm->runtime_idle(dev);
1018 if (ret)
1019 return ret;
1020 }
1021
1022 pm_runtime_suspend(dev);
1023
1024 return 0;
1025}
1026
1027#else
1028
1029#define pci_pm_runtime_suspend NULL
1030#define pci_pm_runtime_resume NULL
1031#define pci_pm_runtime_idle NULL
1032
1033#endif
1034
1035#ifdef CONFIG_PM_OPS
1036
1037const struct dev_pm_ops pci_dev_pm_ops = {
1038 .prepare = pci_pm_prepare,
1039 .complete = pci_pm_complete,
1040 .suspend = pci_pm_suspend,
1041 .resume = pci_pm_resume,
1042 .freeze = pci_pm_freeze,
1043 .thaw = pci_pm_thaw,
1044 .poweroff = pci_pm_poweroff,
1045 .restore = pci_pm_restore,
1046 .suspend_noirq = pci_pm_suspend_noirq,
1047 .resume_noirq = pci_pm_resume_noirq,
1048 .freeze_noirq = pci_pm_freeze_noirq,
1049 .thaw_noirq = pci_pm_thaw_noirq,
1050 .poweroff_noirq = pci_pm_poweroff_noirq,
1051 .restore_noirq = pci_pm_restore_noirq,
1052 .runtime_suspend = pci_pm_runtime_suspend,
1053 .runtime_resume = pci_pm_runtime_resume,
1054 .runtime_idle = pci_pm_runtime_idle,
1055};
1056
1057#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
1058
1059#else
1060
1061#define PCI_PM_OPS_PTR NULL
1062
1063#endif
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1077 const char *mod_name)
1078{
1079 int error;
1080
1081
1082 drv->driver.name = drv->name;
1083 drv->driver.bus = &pci_bus_type;
1084 drv->driver.owner = owner;
1085 drv->driver.mod_name = mod_name;
1086
1087 spin_lock_init(&drv->dynids.lock);
1088 INIT_LIST_HEAD(&drv->dynids.list);
1089
1090
1091 error = driver_register(&drv->driver);
1092 if (error)
1093 goto out;
1094
1095 error = pci_create_newid_file(drv);
1096 if (error)
1097 goto out_newid;
1098
1099 error = pci_create_removeid_file(drv);
1100 if (error)
1101 goto out_removeid;
1102out:
1103 return error;
1104
1105out_removeid:
1106 pci_remove_newid_file(drv);
1107out_newid:
1108 driver_unregister(&drv->driver);
1109 goto out;
1110}
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122void
1123pci_unregister_driver(struct pci_driver *drv)
1124{
1125 pci_remove_removeid_file(drv);
1126 pci_remove_newid_file(drv);
1127 driver_unregister(&drv->driver);
1128 pci_free_dynids(drv);
1129}
1130
1131static struct pci_driver pci_compat_driver = {
1132 .name = "compat"
1133};
1134
1135
1136
1137
1138
1139
1140
1141
1142struct pci_driver *
1143pci_dev_driver(const struct pci_dev *dev)
1144{
1145 if (dev->driver)
1146 return dev->driver;
1147 else {
1148 int i;
1149 for(i=0; i<=PCI_ROM_RESOURCE; i++)
1150 if (dev->resource[i].flags & IORESOURCE_BUSY)
1151 return &pci_compat_driver;
1152 }
1153 return NULL;
1154}
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165static int pci_bus_match(struct device *dev, struct device_driver *drv)
1166{
1167 struct pci_dev *pci_dev = to_pci_dev(dev);
1168 struct pci_driver *pci_drv = to_pci_driver(drv);
1169 const struct pci_device_id *found_id;
1170
1171 found_id = pci_match_device(pci_drv, pci_dev);
1172 if (found_id)
1173 return 1;
1174
1175 return 0;
1176}
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190struct pci_dev *pci_dev_get(struct pci_dev *dev)
1191{
1192 if (dev)
1193 get_device(&dev->dev);
1194 return dev;
1195}
1196
1197
1198
1199
1200
1201
1202
1203
1204void pci_dev_put(struct pci_dev *dev)
1205{
1206 if (dev)
1207 put_device(&dev->dev);
1208}
1209
1210#ifndef CONFIG_HOTPLUG
1211int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1212{
1213 return -ENODEV;
1214}
1215#endif
1216
1217struct bus_type pci_bus_type = {
1218 .name = "pci",
1219 .match = pci_bus_match,
1220 .uevent = pci_uevent,
1221 .probe = pci_device_probe,
1222 .remove = pci_device_remove,
1223 .shutdown = pci_device_shutdown,
1224 .dev_attrs = pci_dev_attrs,
1225 .bus_attrs = pci_bus_attrs,
1226 .pm = PCI_PM_OPS_PTR,
1227};
1228
1229static int __init pci_driver_init(void)
1230{
1231 return bus_register(&pci_bus_type);
1232}
1233
1234postcore_initcall(pci_driver_init);
1235
1236EXPORT_SYMBOL_GPL(pci_add_dynid);
1237EXPORT_SYMBOL(pci_match_id);
1238EXPORT_SYMBOL(__pci_register_driver);
1239EXPORT_SYMBOL(pci_unregister_driver);
1240EXPORT_SYMBOL(pci_dev_driver);
1241EXPORT_SYMBOL(pci_bus_type);
1242EXPORT_SYMBOL(pci_dev_get);
1243EXPORT_SYMBOL(pci_dev_put);
1244