PCI: Introduce pci_rescan_bus()
[linux-block.git] / drivers / pci / pci-driver.c
CommitLineData
1da177e4
LT
1/*
2 * drivers/pci/pci-driver.c
3 *
2b937303
GKH
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 *
1da177e4
LT
9 */
10
11#include <linux/pci.h>
12#include <linux/module.h>
13#include <linux/init.h>
14#include <linux/device.h>
d42c6997 15#include <linux/mempolicy.h>
4e57b681
TS
16#include <linux/string.h>
17#include <linux/slab.h>
8c65b4a6 18#include <linux/sched.h>
873392ca 19#include <linux/cpu.h>
1da177e4
LT
20#include "pci.h"
21
1da177e4
LT
22/*
23 * Dynamic device IDs are disabled for !CONFIG_HOTPLUG
24 */
25
75865858
GKH
26struct pci_dynid {
27 struct list_head node;
28 struct pci_device_id id;
29};
1da177e4 30
3d3c2ae1
GK
31#ifdef CONFIG_HOTPLUG
32
1da177e4 33/**
8f7020d3
RD
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
1da177e4
LT
38 *
39 * Adds a new dynamic pci device ID to this driver,
40 * and causes the driver to probe for all devices again.
41 */
f8eb1005 42static ssize_t
1da177e4
LT
43store_new_id(struct device_driver *driver, const char *buf, size_t count)
44{
75865858 45 struct pci_dynid *dynid;
1da177e4 46 struct pci_driver *pdrv = to_pci_driver(driver);
b41d6cf3 47 const struct pci_device_id *ids = pdrv->id_table;
6ba18636 48 __u32 vendor, device, subvendor=PCI_ANY_ID,
1da177e4
LT
49 subdevice=PCI_ANY_ID, class=0, class_mask=0;
50 unsigned long driver_data=0;
51 int fields=0;
2debb4d2 52 int retval=0;
1da177e4 53
b41d6cf3 54 fields = sscanf(buf, "%x %x %x %x %x %x %lx",
1da177e4
LT
55 &vendor, &device, &subvendor, &subdevice,
56 &class, &class_mask, &driver_data);
6ba18636 57 if (fields < 2)
1da177e4
LT
58 return -EINVAL;
59
b41d6cf3
JD
60 /* Only accept driver_data values that match an existing id_table
61 entry */
2debb4d2
CW
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++;
b41d6cf3 70 }
2debb4d2
CW
71 if (retval) /* No match */
72 return retval;
b41d6cf3 73 }
b41d6cf3 74
f5afe806 75 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
1da177e4
LT
76 if (!dynid)
77 return -ENOMEM;
78
1da177e4
LT
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;
edbc25ca 85 dynid->id.driver_data = driver_data;
1da177e4
LT
86
87 spin_lock(&pdrv->dynids.lock);
a56bc69a 88 list_add_tail(&dynid->node, &pdrv->dynids.list);
1da177e4
LT
89 spin_unlock(&pdrv->dynids.lock);
90
75865858 91 if (get_driver(&pdrv->driver)) {
b19441af 92 retval = driver_attach(&pdrv->driver);
75865858 93 put_driver(&pdrv->driver);
1da177e4
LT
94 }
95
b19441af
GKH
96 if (retval)
97 return retval;
1da177e4
LT
98 return count;
99}
1da177e4 100static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
1da177e4 101
0994375e
CW
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
1da177e4
LT
148static void
149pci_free_dynids(struct pci_driver *drv)
150{
75865858 151 struct pci_dynid *dynid, *n;
1da177e4
LT
152
153 spin_lock(&drv->dynids.lock);
75865858 154 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
1da177e4
LT
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)
03d43b19 166 error = driver_create_file(&drv->driver, &driver_attr_new_id);
1da177e4
LT
167 return error;
168}
169
03d43b19
GKH
170static void pci_remove_newid_file(struct pci_driver *drv)
171{
172 driver_remove_file(&drv->driver, &driver_attr_new_id);
173}
0994375e
CW
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}
1da177e4 188#else /* !CONFIG_HOTPLUG */
1da177e4
LT
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}
03d43b19 194static inline void pci_remove_newid_file(struct pci_driver *drv) {}
0994375e
CW
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) {}
1da177e4
LT
200#endif
201
202/**
75865858 203 * pci_match_id - See if a pci device matches a given pci_id table
1da177e4 204 * @ids: array of PCI device id structures to search in
75865858
GKH
205 * @dev: the PCI device structure to match against.
206 *
1da177e4 207 * Used by a driver to check whether a PCI device present in the
75865858 208 * system is in its list of supported devices. Returns the matching
1da177e4 209 * pci_device_id structure or %NULL if there is no match.
75865858 210 *
8b60756a 211 * Deprecated, don't use this as it will not catch any dynamic ids
75865858 212 * that a driver might want to check for.
1da177e4 213 */
75865858
GKH
214const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
215 struct pci_dev *dev)
1da177e4 216{
75865858
GKH
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 }
1da177e4
LT
223 }
224 return NULL;
225}
226
227/**
ae9608af 228 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
75865858 229 * @drv: the PCI driver to match against
39ba487f 230 * @dev: the PCI device structure to match against
75865858
GKH
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.
1da177e4 235 */
d73460d7
AB
236static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
237 struct pci_dev *dev)
75865858 238{
75865858 239 struct pci_dynid *dynid;
1da177e4 240
7461b60a 241 /* Look at the dynamic ids first, before the static ones */
75865858
GKH
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 }
1da177e4 248 }
75865858 249 spin_unlock(&drv->dynids.lock);
7461b60a
RK
250
251 return pci_match_id(drv->id_table, dev);
1da177e4
LT
252}
253
873392ca
RR
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
d42c6997
AK
267static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
268 const struct pci_device_id *id)
269{
873392ca
RR
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);
f70316da 278 if (node >= 0) {
873392ca 279 int cpu;
f70316da 280 node_to_cpumask_ptr(nodecpumask, node);
873392ca
RR
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);
d42c6997
AK
291 return error;
292}
293
1da177e4
LT
294/**
295 * __pci_device_probe()
8f7020d3
RD
296 * @drv: driver to call to check if it wants the PCI device
297 * @pci_dev: PCI device being probed
1da177e4 298 *
8f7020d3 299 * returns 0 on success, else error.
1da177e4
LT
300 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
301 */
302static int
303__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
75865858
GKH
304{
305 const struct pci_device_id *id;
1da177e4
LT
306 int error = 0;
307
308 if (!pci_dev->driver && drv->probe) {
75865858
GKH
309 error = -ENODEV;
310
311 id = pci_match_device(drv, pci_dev);
312 if (id)
d42c6997 313 error = pci_call_probe(drv, pci_dev, id);
75865858
GKH
314 if (error >= 0) {
315 pci_dev->driver = drv;
316 error = 0;
317 }
1da177e4
LT
318 }
319 return error;
320}
321
322static 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
338static 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
2449e06a
SL
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
1da177e4
LT
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
bbb44d9f
RW
369static 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
fa58d305
RW
382/*
383 * Default "suspend" method for devices that have no driver provided suspend,
384 * or not even a driver at all (second part).
bbb44d9f 385 */
bb808945 386static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
bbb44d9f 387{
bbb44d9f
RW
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
355a72d7
RW
396/*
397 * Default "resume" method for devices that have no driver provided resume,
398 * or not even a driver at all (second part).
399 */
bb808945 400static int pci_pm_reenable_device(struct pci_dev *pci_dev)
355a72d7
RW
401{
402 int retval;
403
bbb44d9f
RW
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
416static int pci_legacy_suspend(struct device *dev, pm_message_t state)
1da177e4
LT
417{
418 struct pci_dev * pci_dev = to_pci_dev(dev);
419 struct pci_driver * drv = pci_dev->driver;
420 int i = 0;
421
02669492 422 if (drv && drv->suspend) {
99dadce8
RW
423 pci_power_t prev = pci_dev->current_state;
424
aa8c6c93
RW
425 pci_dev->state_saved = false;
426
1da177e4 427 i = drv->suspend(pci_dev, state);
02669492 428 suspend_report_result(drv->suspend, i);
aa8c6c93
RW
429 if (i)
430 return i;
431
432 if (pci_dev->state_saved)
433 goto Fixup;
434
99dadce8
RW
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);
aa8c6c93 440 goto Fixup;
99dadce8 441 }
02669492 442 }
ad8cfa1d 443
aa8c6c93
RW
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:
ad8cfa1d
RW
451 pci_fixup_device(pci_fixup_suspend, pci_dev);
452
1da177e4
LT
453 return i;
454}
455
bbb44d9f 456static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
cbd69dbb
LT
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}
1da177e4 468
f6dc1e5e
RW
469static int pci_legacy_resume_early(struct device *dev)
470{
f6dc1e5e
RW
471 struct pci_dev * pci_dev = to_pci_dev(dev);
472 struct pci_driver * drv = pci_dev->driver;
473
aa8c6c93
RW
474 return drv && drv->resume_early ?
475 drv->resume_early(pci_dev) : 0;
f6dc1e5e
RW
476}
477
bbb44d9f 478static int pci_legacy_resume(struct device *dev)
1da177e4
LT
479{
480 struct pci_dev * pci_dev = to_pci_dev(dev);
481 struct pci_driver * drv = pci_dev->driver;
482
ad8cfa1d
RW
483 pci_fixup_device(pci_fixup_resume, pci_dev);
484
aa8c6c93
RW
485 return drv && drv->resume ?
486 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
1da177e4
LT
487}
488
571ff758
RW
489/* Auxiliary functions used by the new power management framework */
490
73410429
RW
491static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev)
492{
aa8c6c93 493 pci_restore_standard_config(pci_dev);
418e4da3 494 pci_dev->state_saved = false;
aa8c6c93 495 pci_fixup_device(pci_fixup_resume_early, pci_dev);
73410429
RW
496}
497
5294e256 498static void pci_pm_default_resume(struct pci_dev *pci_dev)
571ff758 499{
73410429
RW
500 pci_fixup_device(pci_fixup_resume, pci_dev);
501
5294e256
RW
502 if (!pci_is_bridge(pci_dev))
503 pci_enable_wake(pci_dev, PCI_D0, false);
571ff758
RW
504}
505
5294e256 506static void pci_pm_default_suspend(struct pci_dev *pci_dev)
73410429 507{
5294e256 508 /* Disable non-bridge devices without PM support */
cbbc2f6b
RW
509 if (!pci_is_bridge(pci_dev))
510 pci_disable_enabled_device(pci_dev);
73410429
RW
511 pci_save_state(pci_dev);
512}
513
07e836e8
RW
514static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
515{
516 struct pci_driver *drv = pci_dev->driver;
bb808945 517 bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
07e836e8 518 || drv->resume_early);
bb808945
RW
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;
07e836e8
RW
528}
529
571ff758
RW
530/* New power management framework */
531
bbb44d9f
RW
532static 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
543static 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
553static int pci_pm_suspend(struct device *dev)
554{
555 struct pci_dev *pci_dev = to_pci_dev(dev);
ddb7c9d2 556 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 557
ad8cfa1d
RW
558 if (pci_has_legacy_pm_support(pci_dev))
559 return pci_legacy_suspend(dev, PMSG_SUSPEND);
bb808945 560
5294e256
RW
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
ddb7c9d2
RW
572 error = pm->suspend(dev);
573 suspend_report_result(pm->suspend, error);
5294e256
RW
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 }
bbb44d9f 587 }
fa58d305 588
5294e256
RW
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 }
bbb44d9f 594
5294e256
RW
595 Fixup:
596 pci_fixup_device(pci_fixup_suspend, pci_dev);
597
598 return 0;
bbb44d9f
RW
599}
600
601static int pci_pm_suspend_noirq(struct device *dev)
c8958177 602{
355a72d7 603 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 604 struct device_driver *drv = dev->driver;
bbb44d9f 605 int error = 0;
c8958177 606
bb808945
RW
607 if (pci_has_legacy_pm_support(pci_dev))
608 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
609
d67e37d7
RW
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);
bbb44d9f
RW
613 }
614
d67e37d7
RW
615 if (!error)
616 pci_pm_set_unknown_state(pci_dev);
617
bbb44d9f 618 return error;
c8958177 619}
1da177e4 620
f6dc1e5e 621static int pci_pm_resume_noirq(struct device *dev)
bbb44d9f
RW
622{
623 struct pci_dev *pci_dev = to_pci_dev(dev);
624 struct device_driver *drv = dev->driver;
355a72d7 625 int error = 0;
bbb44d9f 626
aa8c6c93
RW
627 pci_pm_default_resume_noirq(pci_dev);
628
ad8cfa1d 629 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 630 return pci_legacy_resume_early(dev);
bb808945 631
f6dc1e5e
RW
632 if (drv && drv->pm && drv->pm->resume_noirq)
633 error = drv->pm->resume_noirq(dev);
bbb44d9f
RW
634
635 return error;
636}
637
f6dc1e5e 638static int pci_pm_resume(struct device *dev)
bbb44d9f 639{
355a72d7 640 struct pci_dev *pci_dev = to_pci_dev(dev);
5294e256 641 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
642 int error = 0;
643
418e4da3
RW
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
ad8cfa1d 651 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 652 return pci_legacy_resume(dev);
bb808945 653
5294e256 654 pci_pm_default_resume(pci_dev);
73410429 655
5294e256
RW
656 if (pm) {
657 if (pm->resume)
658 error = pm->resume(dev);
659 } else {
660 pci_pm_reenable_device(pci_dev);
661 }
bbb44d9f 662
5294e256 663 return 0;
bbb44d9f
RW
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
677static int pci_pm_freeze(struct device *dev)
678{
679 struct pci_dev *pci_dev = to_pci_dev(dev);
5294e256 680 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 681
ad8cfa1d
RW
682 if (pci_has_legacy_pm_support(pci_dev))
683 return pci_legacy_suspend(dev, PMSG_FREEZE);
bb808945 684
5294e256
RW
685 if (!pm) {
686 pci_pm_default_suspend(pci_dev);
687 return 0;
bbb44d9f
RW
688 }
689
5294e256 690 pci_dev->state_saved = false;
d67e37d7 691
5294e256
RW
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;
bbb44d9f
RW
705}
706
707static int pci_pm_freeze_noirq(struct device *dev)
708{
355a72d7 709 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 710 struct device_driver *drv = dev->driver;
bbb44d9f
RW
711 int error = 0;
712
bb808945
RW
713 if (pci_has_legacy_pm_support(pci_dev))
714 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
715
d67e37d7
RW
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);
bbb44d9f
RW
719 }
720
d67e37d7
RW
721 if (!error)
722 pci_pm_set_unknown_state(pci_dev);
723
bbb44d9f
RW
724 return error;
725}
726
f6dc1e5e 727static int pci_pm_thaw_noirq(struct device *dev)
bbb44d9f 728{
355a72d7 729 struct pci_dev *pci_dev = to_pci_dev(dev);
bbb44d9f
RW
730 struct device_driver *drv = dev->driver;
731 int error = 0;
732
ad8cfa1d 733 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 734 return pci_legacy_resume_early(dev);
bb808945 735
f6dc1e5e 736 pci_update_current_state(pci_dev, PCI_D0);
d67e37d7 737
f6dc1e5e
RW
738 if (drv && drv->pm && drv->pm->thaw_noirq)
739 error = drv->pm->thaw_noirq(dev);
bbb44d9f
RW
740
741 return error;
742}
743
f6dc1e5e 744static int pci_pm_thaw(struct device *dev)
bbb44d9f 745{
355a72d7 746 struct pci_dev *pci_dev = to_pci_dev(dev);
5294e256 747 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
748 int error = 0;
749
ad8cfa1d 750 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 751 return pci_legacy_resume(dev);
bb808945 752
5294e256
RW
753 if (pm) {
754 if (pm->thaw)
755 error = pm->thaw(dev);
756 } else {
757 pci_pm_reenable_device(pci_dev);
758 }
bbb44d9f
RW
759
760 return error;
761}
762
763static int pci_pm_poweroff(struct device *dev)
764{
355a72d7 765 struct pci_dev *pci_dev = to_pci_dev(dev);
ddb7c9d2 766 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
767 int error = 0;
768
ad8cfa1d
RW
769 if (pci_has_legacy_pm_support(pci_dev))
770 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
bb808945 771
5294e256
RW
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) {
ddb7c9d2
RW
780 error = pm->poweroff(dev);
781 suspend_report_result(pm->poweroff, error);
bbb44d9f
RW
782 }
783
5294e256
RW
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);
c9b9972b 789
bbb44d9f
RW
790 return error;
791}
792
793static int pci_pm_poweroff_noirq(struct device *dev)
794{
adf09493 795 struct device_driver *drv = dev->driver;
bbb44d9f
RW
796 int error = 0;
797
bb808945
RW
798 if (pci_has_legacy_pm_support(to_pci_dev(dev)))
799 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
800
d67e37d7
RW
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);
bbb44d9f
RW
804 }
805
806 return error;
807}
808
f6dc1e5e 809static int pci_pm_restore_noirq(struct device *dev)
bbb44d9f
RW
810{
811 struct pci_dev *pci_dev = to_pci_dev(dev);
812 struct device_driver *drv = dev->driver;
355a72d7 813 int error = 0;
bbb44d9f 814
aa8c6c93
RW
815 pci_pm_default_resume_noirq(pci_dev);
816
ad8cfa1d 817 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 818 return pci_legacy_resume_early(dev);
bb808945 819
f6dc1e5e
RW
820 if (drv && drv->pm && drv->pm->restore_noirq)
821 error = drv->pm->restore_noirq(dev);
bbb44d9f
RW
822
823 return error;
824}
825
f6dc1e5e 826static int pci_pm_restore(struct device *dev)
bbb44d9f
RW
827{
828 struct pci_dev *pci_dev = to_pci_dev(dev);
5294e256 829 struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
830 int error = 0;
831
418e4da3
RW
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
ad8cfa1d 839 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 840 return pci_legacy_resume(dev);
bb808945 841
5294e256 842 pci_pm_default_resume(pci_dev);
73410429 843
5294e256
RW
844 if (pm) {
845 if (pm->restore)
846 error = pm->restore(dev);
847 } else {
848 pci_pm_reenable_device(pci_dev);
849 }
bbb44d9f
RW
850
851 return error;
c8958177 852}
1da177e4 853
bbb44d9f
RW
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
adf09493
RW
867struct 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,
bbb44d9f
RW
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
adf09493 884#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
bbb44d9f
RW
885
886#else /* !CONFIG_PM_SLEEP */
887
888#define PCI_PM_OPS_PTR NULL
889
890#endif /* !CONFIG_PM_SLEEP */
891
1da177e4 892/**
863b18f4 893 * __pci_register_driver - register a new pci driver
1da177e4 894 * @drv: the driver structure to register
863b18f4 895 * @owner: owner module of drv
f95d882d 896 * @mod_name: module name string
1da177e4
LT
897 *
898 * Adds the driver structure to the list of registered drivers.
899 * Returns a negative value on error, otherwise 0.
eaae4b3a 900 * If no error occurred, the driver remains registered even if
1da177e4
LT
901 * no device was claimed during registration.
902 */
725522b5
GKH
903int __pci_register_driver(struct pci_driver *drv, struct module *owner,
904 const char *mod_name)
1da177e4
LT
905{
906 int error;
907
908 /* initialize common driver fields */
909 drv->driver.name = drv->name;
910 drv->driver.bus = &pci_bus_type;
863b18f4 911 drv->driver.owner = owner;
725522b5 912 drv->driver.mod_name = mod_name;
50b00755 913
75865858
GKH
914 spin_lock_init(&drv->dynids.lock);
915 INIT_LIST_HEAD(&drv->dynids.list);
1da177e4
LT
916
917 /* register with core */
918 error = driver_register(&drv->driver);
50bf14b3 919 if (error)
0994375e 920 goto out;
1da177e4 921
50bf14b3
AM
922 error = pci_create_newid_file(drv);
923 if (error)
0994375e 924 goto out_newid;
1da177e4 925
0994375e
CW
926 error = pci_create_removeid_file(drv);
927 if (error)
928 goto out_removeid;
929out:
1da177e4 930 return error;
0994375e
CW
931
932out_removeid:
933 pci_remove_newid_file(drv);
934out_newid:
935 driver_unregister(&drv->driver);
936 goto out;
1da177e4
LT
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
949void
950pci_unregister_driver(struct pci_driver *drv)
951{
0994375e 952 pci_remove_removeid_file(drv);
03d43b19 953 pci_remove_newid_file(drv);
1da177e4
LT
954 driver_unregister(&drv->driver);
955 pci_free_dynids(drv);
956}
957
958static 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 */
969struct pci_driver *
970pci_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
1da177e4 985 * @dev: the PCI device structure to match against
8f7020d3 986 * @drv: the device driver to search for matching PCI device id structures
1da177e4
LT
987 *
988 * Used by a driver to check whether a PCI device present in the
8f7020d3 989 * system is in its list of supported devices. Returns the matching
1da177e4
LT
990 * pci_device_id structure or %NULL if there is no match.
991 */
75865858 992static int pci_bus_match(struct device *dev, struct device_driver *drv)
1da177e4 993{
75865858
GKH
994 struct pci_dev *pci_dev = to_pci_dev(dev);
995 struct pci_driver *pci_drv = to_pci_driver(drv);
1da177e4
LT
996 const struct pci_device_id *found_id;
997
75865858 998 found_id = pci_match_device(pci_drv, pci_dev);
1da177e4
LT
999 if (found_id)
1000 return 1;
1001
75865858 1002 return 0;
1da177e4
LT
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 */
1017struct 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 */
1031void pci_dev_put(struct pci_dev *dev)
1032{
1033 if (dev)
1034 put_device(&dev->dev);
1035}
1036
1037#ifndef CONFIG_HOTPLUG
7eff2e7a 1038int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1da177e4
LT
1039{
1040 return -ENODEV;
1041}
1042#endif
1043
1044struct bus_type pci_bus_type = {
1045 .name = "pci",
1046 .match = pci_bus_match,
312c004d 1047 .uevent = pci_uevent,
b15d686a
RK
1048 .probe = pci_device_probe,
1049 .remove = pci_device_remove,
cbd69dbb 1050 .shutdown = pci_device_shutdown,
1da177e4 1051 .dev_attrs = pci_dev_attrs,
bbb44d9f 1052 .pm = PCI_PM_OPS_PTR,
1da177e4
LT
1053};
1054
1055static int __init pci_driver_init(void)
1056{
1057 return bus_register(&pci_bus_type);
1058}
1059
1060postcore_initcall(pci_driver_init);
1061
75865858 1062EXPORT_SYMBOL(pci_match_id);
863b18f4 1063EXPORT_SYMBOL(__pci_register_driver);
1da177e4
LT
1064EXPORT_SYMBOL(pci_unregister_driver);
1065EXPORT_SYMBOL(pci_dev_driver);
1066EXPORT_SYMBOL(pci_bus_type);
1067EXPORT_SYMBOL(pci_dev_get);
1068EXPORT_SYMBOL(pci_dev_put);