Merge tag 'regulator-v3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[deliverable/linux.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>
6cbf8214 20#include <linux/pm_runtime.h>
eea3fc03 21#include <linux/suspend.h>
1da177e4
LT
22#include "pci.h"
23
75865858
GKH
24struct pci_dynid {
25 struct list_head node;
26 struct pci_device_id id;
27};
1da177e4 28
9dba910e
TH
29/**
30 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
31 * @drv: target pci driver
32 * @vendor: PCI vendor ID
33 * @device: PCI device ID
34 * @subvendor: PCI subvendor ID
35 * @subdevice: PCI subdevice ID
36 * @class: PCI class
37 * @class_mask: PCI class mask
38 * @driver_data: private driver data
39 *
40 * Adds a new dynamic pci device ID to this driver and causes the
41 * driver to probe for all devices again. @drv must have been
42 * registered prior to calling this function.
43 *
44 * CONTEXT:
45 * Does GFP_KERNEL allocation.
46 *
47 * RETURNS:
48 * 0 on success, -errno on failure.
49 */
50int pci_add_dynid(struct pci_driver *drv,
51 unsigned int vendor, unsigned int device,
52 unsigned int subvendor, unsigned int subdevice,
53 unsigned int class, unsigned int class_mask,
54 unsigned long driver_data)
55{
56 struct pci_dynid *dynid;
57 int retval;
58
59 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
60 if (!dynid)
61 return -ENOMEM;
62
63 dynid->id.vendor = vendor;
64 dynid->id.device = device;
65 dynid->id.subvendor = subvendor;
66 dynid->id.subdevice = subdevice;
67 dynid->id.class = class;
68 dynid->id.class_mask = class_mask;
69 dynid->id.driver_data = driver_data;
3d3c2ae1 70
9dba910e
TH
71 spin_lock(&drv->dynids.lock);
72 list_add_tail(&dynid->node, &drv->dynids.list);
73 spin_unlock(&drv->dynids.lock);
74
9dba910e 75 retval = driver_attach(&drv->driver);
9dba910e
TH
76
77 return retval;
78}
79
80static void pci_free_dynids(struct pci_driver *drv)
81{
82 struct pci_dynid *dynid, *n;
3d3c2ae1 83
9dba910e
TH
84 spin_lock(&drv->dynids.lock);
85 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
86 list_del(&dynid->node);
87 kfree(dynid);
88 }
89 spin_unlock(&drv->dynids.lock);
90}
91
1da177e4 92/**
9dba910e 93 * store_new_id - sysfs frontend to pci_add_dynid()
8f7020d3
RD
94 * @driver: target device driver
95 * @buf: buffer for scanning device ID data
96 * @count: input size
1da177e4 97 *
9dba910e 98 * Allow PCI IDs to be added to an existing driver via sysfs.
1da177e4 99 */
f8eb1005 100static ssize_t
1da177e4
LT
101store_new_id(struct device_driver *driver, const char *buf, size_t count)
102{
1da177e4 103 struct pci_driver *pdrv = to_pci_driver(driver);
b41d6cf3 104 const struct pci_device_id *ids = pdrv->id_table;
6ba18636 105 __u32 vendor, device, subvendor=PCI_ANY_ID,
1da177e4
LT
106 subdevice=PCI_ANY_ID, class=0, class_mask=0;
107 unsigned long driver_data=0;
108 int fields=0;
9dba910e 109 int retval;
1da177e4 110
b41d6cf3 111 fields = sscanf(buf, "%x %x %x %x %x %x %lx",
1da177e4
LT
112 &vendor, &device, &subvendor, &subdevice,
113 &class, &class_mask, &driver_data);
6ba18636 114 if (fields < 2)
1da177e4
LT
115 return -EINVAL;
116
b41d6cf3
JD
117 /* Only accept driver_data values that match an existing id_table
118 entry */
2debb4d2
CW
119 if (ids) {
120 retval = -EINVAL;
121 while (ids->vendor || ids->subvendor || ids->class_mask) {
122 if (driver_data == ids->driver_data) {
123 retval = 0;
124 break;
125 }
126 ids++;
b41d6cf3 127 }
2debb4d2
CW
128 if (retval) /* No match */
129 return retval;
b41d6cf3 130 }
b41d6cf3 131
9dba910e
TH
132 retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
133 class, class_mask, driver_data);
b19441af
GKH
134 if (retval)
135 return retval;
1da177e4
LT
136 return count;
137}
19b6e6a4 138static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
1da177e4 139
0994375e
CW
140/**
141 * store_remove_id - remove a PCI device ID from this driver
142 * @driver: target device driver
143 * @buf: buffer for scanning device ID data
144 * @count: input size
145 *
146 * Removes a dynamic pci device ID to this driver.
147 */
148static ssize_t
149store_remove_id(struct device_driver *driver, const char *buf, size_t count)
150{
151 struct pci_dynid *dynid, *n;
152 struct pci_driver *pdrv = to_pci_driver(driver);
153 __u32 vendor, device, subvendor = PCI_ANY_ID,
154 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
155 int fields = 0;
156 int retval = -ENODEV;
157
158 fields = sscanf(buf, "%x %x %x %x %x %x",
159 &vendor, &device, &subvendor, &subdevice,
160 &class, &class_mask);
161 if (fields < 2)
162 return -EINVAL;
163
164 spin_lock(&pdrv->dynids.lock);
165 list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
166 struct pci_device_id *id = &dynid->id;
167 if ((id->vendor == vendor) &&
168 (id->device == device) &&
169 (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
170 (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
171 !((id->class ^ class) & class_mask)) {
172 list_del(&dynid->node);
173 kfree(dynid);
174 retval = 0;
175 break;
176 }
177 }
178 spin_unlock(&pdrv->dynids.lock);
179
180 if (retval)
181 return retval;
182 return count;
183}
19b6e6a4 184static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
0994375e 185
19b6e6a4
GKH
186static struct attribute *pci_drv_attrs[] = {
187 &driver_attr_new_id.attr,
188 &driver_attr_remove_id.attr,
189 NULL,
bfb09a86 190};
19b6e6a4 191ATTRIBUTE_GROUPS(pci_drv);
0994375e 192
1da177e4 193/**
75865858 194 * pci_match_id - See if a pci device matches a given pci_id table
1da177e4 195 * @ids: array of PCI device id structures to search in
75865858
GKH
196 * @dev: the PCI device structure to match against.
197 *
1da177e4 198 * Used by a driver to check whether a PCI device present in the
75865858 199 * system is in its list of supported devices. Returns the matching
1da177e4 200 * pci_device_id structure or %NULL if there is no match.
75865858 201 *
8b60756a 202 * Deprecated, don't use this as it will not catch any dynamic ids
75865858 203 * that a driver might want to check for.
1da177e4 204 */
75865858
GKH
205const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
206 struct pci_dev *dev)
1da177e4 207{
75865858
GKH
208 if (ids) {
209 while (ids->vendor || ids->subvendor || ids->class_mask) {
210 if (pci_match_one_device(ids, dev))
211 return ids;
212 ids++;
213 }
1da177e4
LT
214 }
215 return NULL;
216}
217
218/**
ae9608af 219 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
75865858 220 * @drv: the PCI driver to match against
39ba487f 221 * @dev: the PCI device structure to match against
75865858
GKH
222 *
223 * Used by a driver to check whether a PCI device present in the
224 * system is in its list of supported devices. Returns the matching
225 * pci_device_id structure or %NULL if there is no match.
1da177e4 226 */
d73460d7
AB
227static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
228 struct pci_dev *dev)
75865858 229{
75865858 230 struct pci_dynid *dynid;
1da177e4 231
7461b60a 232 /* Look at the dynamic ids first, before the static ones */
75865858
GKH
233 spin_lock(&drv->dynids.lock);
234 list_for_each_entry(dynid, &drv->dynids.list, node) {
235 if (pci_match_one_device(&dynid->id, dev)) {
236 spin_unlock(&drv->dynids.lock);
237 return &dynid->id;
238 }
1da177e4 239 }
75865858 240 spin_unlock(&drv->dynids.lock);
7461b60a
RK
241
242 return pci_match_id(drv->id_table, dev);
1da177e4
LT
243}
244
873392ca
RR
245struct drv_dev_and_id {
246 struct pci_driver *drv;
247 struct pci_dev *dev;
248 const struct pci_device_id *id;
249};
250
251static long local_pci_probe(void *_ddi)
252{
253 struct drv_dev_and_id *ddi = _ddi;
967577b0
HY
254 struct pci_dev *pci_dev = ddi->dev;
255 struct pci_driver *pci_drv = ddi->drv;
256 struct device *dev = &pci_dev->dev;
f3ec4f87
AS
257 int rc;
258
967577b0
HY
259 /*
260 * Unbound PCI devices are always put in D0, regardless of
261 * runtime PM status. During probe, the device is set to
262 * active and the usage count is incremented. If the driver
263 * supports runtime PM, it should call pm_runtime_put_noidle()
264 * in its probe routine and pm_runtime_get_noresume() in its
265 * remove routine.
f3ec4f87 266 */
967577b0
HY
267 pm_runtime_get_sync(dev);
268 pci_dev->driver = pci_drv;
269 rc = pci_drv->probe(pci_dev, ddi->id);
f3ec4f87 270 if (rc) {
967577b0
HY
271 pci_dev->driver = NULL;
272 pm_runtime_put_sync(dev);
f3ec4f87
AS
273 }
274 return rc;
873392ca
RR
275}
276
d42c6997
AK
277static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
278 const struct pci_device_id *id)
279{
873392ca
RR
280 int error, node;
281 struct drv_dev_and_id ddi = { drv, dev, id };
282
283 /* Execute driver initialization on node where the device's
284 bus is attached to. This way the driver likely allocates
285 its local memory on the right node without any need to
286 change it. */
287 node = dev_to_node(&dev->dev);
f70316da 288 if (node >= 0) {
873392ca 289 int cpu;
873392ca
RR
290
291 get_online_cpus();
a70f7302 292 cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
873392ca
RR
293 if (cpu < nr_cpu_ids)
294 error = work_on_cpu(cpu, local_pci_probe, &ddi);
295 else
296 error = local_pci_probe(&ddi);
297 put_online_cpus();
298 } else
299 error = local_pci_probe(&ddi);
d42c6997
AK
300 return error;
301}
302
1da177e4 303/**
23ea3793 304 * __pci_device_probe - check if a driver wants to claim a specific PCI device
8f7020d3
RD
305 * @drv: driver to call to check if it wants the PCI device
306 * @pci_dev: PCI device being probed
1da177e4 307 *
8f7020d3 308 * returns 0 on success, else error.
1da177e4
LT
309 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
310 */
311static int
312__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
75865858
GKH
313{
314 const struct pci_device_id *id;
1da177e4
LT
315 int error = 0;
316
317 if (!pci_dev->driver && drv->probe) {
75865858
GKH
318 error = -ENODEV;
319
320 id = pci_match_device(drv, pci_dev);
321 if (id)
d42c6997 322 error = pci_call_probe(drv, pci_dev, id);
967577b0 323 if (error >= 0)
75865858 324 error = 0;
1da177e4
LT
325 }
326 return error;
327}
328
329static int pci_device_probe(struct device * dev)
330{
331 int error = 0;
332 struct pci_driver *drv;
333 struct pci_dev *pci_dev;
334
335 drv = to_pci_driver(dev->driver);
336 pci_dev = to_pci_dev(dev);
337 pci_dev_get(pci_dev);
338 error = __pci_device_probe(drv, pci_dev);
339 if (error)
340 pci_dev_put(pci_dev);
341
342 return error;
343}
344
345static int pci_device_remove(struct device * dev)
346{
347 struct pci_dev * pci_dev = to_pci_dev(dev);
348 struct pci_driver * drv = pci_dev->driver;
349
350 if (drv) {
f3ec4f87
AS
351 if (drv->remove) {
352 pm_runtime_get_sync(dev);
1da177e4 353 drv->remove(pci_dev);
f3ec4f87
AS
354 pm_runtime_put_noidle(dev);
355 }
1da177e4
LT
356 pci_dev->driver = NULL;
357 }
358
f3ec4f87 359 /* Undo the runtime PM settings in local_pci_probe() */
967577b0 360 pm_runtime_put_sync(dev);
f3ec4f87 361
2449e06a
SL
362 /*
363 * If the device is still on, set the power state as "unknown",
364 * since it might change by the next time we load the driver.
365 */
366 if (pci_dev->current_state == PCI_D0)
367 pci_dev->current_state = PCI_UNKNOWN;
368
1da177e4
LT
369 /*
370 * We would love to complain here if pci_dev->is_enabled is set, that
371 * the driver should have called pci_disable_device(), but the
372 * unfortunate fact is there are too many odd BIOS and bridge setups
373 * that don't like drivers doing that all of the time.
374 * Oh well, we can dream of sane hardware when we sleep, no matter how
375 * horrible the crap we have to deal with is when we are awake...
376 */
377
378 pci_dev_put(pci_dev);
379 return 0;
380}
381
bbb44d9f
RW
382static void pci_device_shutdown(struct device *dev)
383{
384 struct pci_dev *pci_dev = to_pci_dev(dev);
385 struct pci_driver *drv = pci_dev->driver;
386
3ff2de9b
HY
387 pm_runtime_resume(dev);
388
bbb44d9f
RW
389 if (drv && drv->shutdown)
390 drv->shutdown(pci_dev);
391 pci_msi_shutdown(pci_dev);
392 pci_msix_shutdown(pci_dev);
5b415f1e 393
b566a22c
KA
394 /*
395 * Turn off Bus Master bit on the device to tell it to not
6e0eda3c 396 * continue to do DMA. Don't touch devices in D3cold or unknown states.
b566a22c 397 */
6e0eda3c
KK
398 if (pci_dev->current_state <= PCI_D3hot)
399 pci_clear_master(pci_dev);
bbb44d9f
RW
400}
401
aa338601 402#ifdef CONFIG_PM
6cbf8214
RW
403
404/* Auxiliary functions used for system resume and run-time resume. */
405
406/**
407 * pci_restore_standard_config - restore standard config registers of PCI device
408 * @pci_dev: PCI device to handle
409 */
410static int pci_restore_standard_config(struct pci_dev *pci_dev)
411{
412 pci_update_current_state(pci_dev, PCI_UNKNOWN);
413
414 if (pci_dev->current_state != PCI_D0) {
415 int error = pci_set_power_state(pci_dev, PCI_D0);
416 if (error)
417 return error;
418 }
419
1d3c16a8
JM
420 pci_restore_state(pci_dev);
421 return 0;
6cbf8214
RW
422}
423
db288c9c
RW
424#endif
425
426#ifdef CONFIG_PM_SLEEP
427
6cbf8214
RW
428static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
429{
db288c9c
RW
430 pci_power_up(pci_dev);
431 pci_restore_state(pci_dev);
6cbf8214
RW
432 pci_fixup_device(pci_fixup_resume_early, pci_dev);
433}
434
fa58d305
RW
435/*
436 * Default "suspend" method for devices that have no driver provided suspend,
437 * or not even a driver at all (second part).
bbb44d9f 438 */
bb808945 439static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
bbb44d9f 440{
bbb44d9f
RW
441 /*
442 * mark its power state as "unknown", since we don't know if
443 * e.g. the BIOS will change its device state when we suspend.
444 */
445 if (pci_dev->current_state == PCI_D0)
446 pci_dev->current_state = PCI_UNKNOWN;
447}
448
355a72d7
RW
449/*
450 * Default "resume" method for devices that have no driver provided resume,
451 * or not even a driver at all (second part).
452 */
bb808945 453static int pci_pm_reenable_device(struct pci_dev *pci_dev)
355a72d7
RW
454{
455 int retval;
456
bbb44d9f
RW
457 /* if the device was enabled before suspend, reenable */
458 retval = pci_reenable_device(pci_dev);
459 /*
460 * if the device was busmaster before the suspend, make it busmaster
461 * again
462 */
463 if (pci_dev->is_busmaster)
464 pci_set_master(pci_dev);
465
466 return retval;
467}
468
469static int pci_legacy_suspend(struct device *dev, pm_message_t state)
1da177e4
LT
470{
471 struct pci_dev * pci_dev = to_pci_dev(dev);
472 struct pci_driver * drv = pci_dev->driver;
46939f8b 473
02669492 474 if (drv && drv->suspend) {
99dadce8 475 pci_power_t prev = pci_dev->current_state;
46939f8b 476 int error;
aa8c6c93 477
57ef8026
FP
478 error = drv->suspend(pci_dev, state);
479 suspend_report_result(drv->suspend, error);
480 if (error)
481 return error;
aa8c6c93 482
46939f8b 483 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
99dadce8
RW
484 && pci_dev->current_state != PCI_UNKNOWN) {
485 WARN_ONCE(pci_dev->current_state != prev,
486 "PCI PM: Device state not saved by %pF\n",
487 drv->suspend);
99dadce8 488 }
02669492 489 }
ad8cfa1d
RW
490
491 pci_fixup_device(pci_fixup_suspend, pci_dev);
492
46939f8b 493 return 0;
1da177e4
LT
494}
495
bbb44d9f 496static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
cbd69dbb
LT
497{
498 struct pci_dev * pci_dev = to_pci_dev(dev);
499 struct pci_driver * drv = pci_dev->driver;
cbd69dbb
LT
500
501 if (drv && drv->suspend_late) {
46939f8b
RW
502 pci_power_t prev = pci_dev->current_state;
503 int error;
504
57ef8026
FP
505 error = drv->suspend_late(pci_dev, state);
506 suspend_report_result(drv->suspend_late, error);
46939f8b
RW
507 if (error)
508 return error;
509
510 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
511 && pci_dev->current_state != PCI_UNKNOWN) {
512 WARN_ONCE(pci_dev->current_state != prev,
513 "PCI PM: Device state not saved by %pF\n",
514 drv->suspend_late);
515 return 0;
516 }
cbd69dbb 517 }
46939f8b
RW
518
519 if (!pci_dev->state_saved)
520 pci_save_state(pci_dev);
521
522 pci_pm_set_unknown_state(pci_dev);
523
524 return 0;
cbd69dbb 525}
1da177e4 526
f6dc1e5e
RW
527static int pci_legacy_resume_early(struct device *dev)
528{
f6dc1e5e
RW
529 struct pci_dev * pci_dev = to_pci_dev(dev);
530 struct pci_driver * drv = pci_dev->driver;
531
aa8c6c93
RW
532 return drv && drv->resume_early ?
533 drv->resume_early(pci_dev) : 0;
f6dc1e5e
RW
534}
535
bbb44d9f 536static int pci_legacy_resume(struct device *dev)
1da177e4
LT
537{
538 struct pci_dev * pci_dev = to_pci_dev(dev);
539 struct pci_driver * drv = pci_dev->driver;
540
ad8cfa1d
RW
541 pci_fixup_device(pci_fixup_resume, pci_dev);
542
aa8c6c93
RW
543 return drv && drv->resume ?
544 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
1da177e4
LT
545}
546
571ff758
RW
547/* Auxiliary functions used by the new power management framework */
548
5294e256 549static void pci_pm_default_resume(struct pci_dev *pci_dev)
571ff758 550{
73410429
RW
551 pci_fixup_device(pci_fixup_resume, pci_dev);
552
5294e256
RW
553 if (!pci_is_bridge(pci_dev))
554 pci_enable_wake(pci_dev, PCI_D0, false);
571ff758
RW
555}
556
5294e256 557static void pci_pm_default_suspend(struct pci_dev *pci_dev)
73410429 558{
5294e256 559 /* Disable non-bridge devices without PM support */
cbbc2f6b
RW
560 if (!pci_is_bridge(pci_dev))
561 pci_disable_enabled_device(pci_dev);
73410429
RW
562}
563
07e836e8
RW
564static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
565{
566 struct pci_driver *drv = pci_dev->driver;
bb808945 567 bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
07e836e8 568 || drv->resume_early);
bb808945
RW
569
570 /*
571 * Legacy PM support is used by default, so warn if the new framework is
572 * supported as well. Drivers are supposed to support either the
573 * former, or the latter, but not both at the same time.
574 */
82440a82
DF
575 WARN(ret && drv->driver.pm, "driver %s device %04x:%04x\n",
576 drv->name, pci_dev->vendor, pci_dev->device);
bb808945
RW
577
578 return ret;
07e836e8
RW
579}
580
571ff758
RW
581/* New power management framework */
582
bbb44d9f
RW
583static int pci_pm_prepare(struct device *dev)
584{
585 struct device_driver *drv = dev->driver;
586 int error = 0;
587
6cbf8214
RW
588 /*
589 * PCI devices suspended at run time need to be resumed at this
590 * point, because in general it is necessary to reconfigure them for
591 * system suspend. Namely, if the device is supposed to wake up the
592 * system from the sleep state, we may need to reconfigure it for this
593 * purpose. In turn, if the device is not supposed to wake up the
594 * system from the sleep state, we'll have to prevent it from signaling
595 * wake-up.
596 */
eea3fc03 597 pm_runtime_resume(dev);
6cbf8214 598
bbb44d9f
RW
599 if (drv && drv->pm && drv->pm->prepare)
600 error = drv->pm->prepare(dev);
601
602 return error;
603}
604
605static void pci_pm_complete(struct device *dev)
606{
607 struct device_driver *drv = dev->driver;
608
609 if (drv && drv->pm && drv->pm->complete)
610 drv->pm->complete(dev);
611}
612
6cbf8214
RW
613#else /* !CONFIG_PM_SLEEP */
614
615#define pci_pm_prepare NULL
616#define pci_pm_complete NULL
617
618#endif /* !CONFIG_PM_SLEEP */
619
bbb44d9f
RW
620#ifdef CONFIG_SUSPEND
621
622static int pci_pm_suspend(struct device *dev)
623{
624 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 625 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 626
ad8cfa1d
RW
627 if (pci_has_legacy_pm_support(pci_dev))
628 return pci_legacy_suspend(dev, PMSG_SUSPEND);
bb808945 629
5294e256
RW
630 if (!pm) {
631 pci_pm_default_suspend(pci_dev);
632 goto Fixup;
633 }
634
82fee4d6 635 pci_dev->state_saved = false;
5294e256
RW
636 if (pm->suspend) {
637 pci_power_t prev = pci_dev->current_state;
638 int error;
639
ddb7c9d2
RW
640 error = pm->suspend(dev);
641 suspend_report_result(pm->suspend, error);
5294e256
RW
642 if (error)
643 return error;
644
46939f8b 645 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
5294e256
RW
646 && pci_dev->current_state != PCI_UNKNOWN) {
647 WARN_ONCE(pci_dev->current_state != prev,
648 "PCI PM: State of device not saved by %pF\n",
649 pm->suspend);
5294e256 650 }
bbb44d9f 651 }
fa58d305 652
5294e256
RW
653 Fixup:
654 pci_fixup_device(pci_fixup_suspend, pci_dev);
655
656 return 0;
bbb44d9f
RW
657}
658
659static int pci_pm_suspend_noirq(struct device *dev)
c8958177 660{
355a72d7 661 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 662 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
c8958177 663
bb808945
RW
664 if (pci_has_legacy_pm_support(pci_dev))
665 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
666
931ff68a
RW
667 if (!pm) {
668 pci_save_state(pci_dev);
46939f8b 669 return 0;
931ff68a 670 }
46939f8b
RW
671
672 if (pm->suspend_noirq) {
673 pci_power_t prev = pci_dev->current_state;
674 int error;
675
676 error = pm->suspend_noirq(dev);
677 suspend_report_result(pm->suspend_noirq, error);
678 if (error)
679 return error;
680
681 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
682 && pci_dev->current_state != PCI_UNKNOWN) {
683 WARN_ONCE(pci_dev->current_state != prev,
684 "PCI PM: State of device not saved by %pF\n",
685 pm->suspend_noirq);
686 return 0;
687 }
bbb44d9f
RW
688 }
689
46939f8b
RW
690 if (!pci_dev->state_saved) {
691 pci_save_state(pci_dev);
692 if (!pci_is_bridge(pci_dev))
693 pci_prepare_to_sleep(pci_dev);
694 }
d67e37d7 695
46939f8b
RW
696 pci_pm_set_unknown_state(pci_dev);
697
dbf0e4c7
AS
698 /*
699 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
700 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
701 * hasn't been quiesced and tries to turn it off. If the controller
702 * is already in D3, this can hang or cause memory corruption.
703 *
704 * Since the value of the COMMAND register doesn't matter once the
705 * device has been suspended, we can safely set it to 0 here.
706 */
707 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
708 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
709
46939f8b 710 return 0;
c8958177 711}
1da177e4 712
f6dc1e5e 713static int pci_pm_resume_noirq(struct device *dev)
bbb44d9f
RW
714{
715 struct pci_dev *pci_dev = to_pci_dev(dev);
716 struct device_driver *drv = dev->driver;
355a72d7 717 int error = 0;
bbb44d9f 718
6cbf8214 719 pci_pm_default_resume_early(pci_dev);
aa8c6c93 720
ad8cfa1d 721 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 722 return pci_legacy_resume_early(dev);
bb808945 723
f6dc1e5e
RW
724 if (drv && drv->pm && drv->pm->resume_noirq)
725 error = drv->pm->resume_noirq(dev);
bbb44d9f
RW
726
727 return error;
728}
729
f6dc1e5e 730static int pci_pm_resume(struct device *dev)
bbb44d9f 731{
355a72d7 732 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 733 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
734 int error = 0;
735
418e4da3
RW
736 /*
737 * This is necessary for the suspend error path in which resume is
738 * called without restoring the standard config registers of the device.
739 */
740 if (pci_dev->state_saved)
741 pci_restore_standard_config(pci_dev);
742
ad8cfa1d 743 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 744 return pci_legacy_resume(dev);
bb808945 745
5294e256 746 pci_pm_default_resume(pci_dev);
73410429 747
5294e256
RW
748 if (pm) {
749 if (pm->resume)
750 error = pm->resume(dev);
751 } else {
752 pci_pm_reenable_device(pci_dev);
753 }
bbb44d9f 754
999cce4a 755 return error;
bbb44d9f
RW
756}
757
758#else /* !CONFIG_SUSPEND */
759
760#define pci_pm_suspend NULL
761#define pci_pm_suspend_noirq NULL
762#define pci_pm_resume NULL
763#define pci_pm_resume_noirq NULL
764
765#endif /* !CONFIG_SUSPEND */
766
1f112cee 767#ifdef CONFIG_HIBERNATE_CALLBACKS
bbb44d9f 768
699c1985
SO
769
770/*
771 * pcibios_pm_ops - provide arch-specific hooks when a PCI device is doing
772 * a hibernate transition
773 */
774struct dev_pm_ops __weak pcibios_pm_ops;
775
bbb44d9f
RW
776static int pci_pm_freeze(struct device *dev)
777{
778 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 779 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 780
ad8cfa1d
RW
781 if (pci_has_legacy_pm_support(pci_dev))
782 return pci_legacy_suspend(dev, PMSG_FREEZE);
bb808945 783
5294e256
RW
784 if (!pm) {
785 pci_pm_default_suspend(pci_dev);
786 return 0;
bbb44d9f
RW
787 }
788
82fee4d6 789 pci_dev->state_saved = false;
5294e256
RW
790 if (pm->freeze) {
791 int error;
792
793 error = pm->freeze(dev);
794 suspend_report_result(pm->freeze, error);
795 if (error)
796 return error;
797 }
798
699c1985
SO
799 if (pcibios_pm_ops.freeze)
800 return pcibios_pm_ops.freeze(dev);
801
5294e256 802 return 0;
bbb44d9f
RW
803}
804
805static int pci_pm_freeze_noirq(struct device *dev)
806{
355a72d7 807 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 808 struct device_driver *drv = dev->driver;
bbb44d9f 809
bb808945
RW
810 if (pci_has_legacy_pm_support(pci_dev))
811 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
812
d67e37d7 813 if (drv && drv->pm && drv->pm->freeze_noirq) {
46939f8b
RW
814 int error;
815
d67e37d7
RW
816 error = drv->pm->freeze_noirq(dev);
817 suspend_report_result(drv->pm->freeze_noirq, error);
46939f8b
RW
818 if (error)
819 return error;
bbb44d9f
RW
820 }
821
46939f8b
RW
822 if (!pci_dev->state_saved)
823 pci_save_state(pci_dev);
d67e37d7 824
46939f8b
RW
825 pci_pm_set_unknown_state(pci_dev);
826
699c1985
SO
827 if (pcibios_pm_ops.freeze_noirq)
828 return pcibios_pm_ops.freeze_noirq(dev);
829
46939f8b 830 return 0;
bbb44d9f
RW
831}
832
f6dc1e5e 833static int pci_pm_thaw_noirq(struct device *dev)
bbb44d9f 834{
355a72d7 835 struct pci_dev *pci_dev = to_pci_dev(dev);
bbb44d9f
RW
836 struct device_driver *drv = dev->driver;
837 int error = 0;
838
699c1985
SO
839 if (pcibios_pm_ops.thaw_noirq) {
840 error = pcibios_pm_ops.thaw_noirq(dev);
841 if (error)
842 return error;
843 }
844
ad8cfa1d 845 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 846 return pci_legacy_resume_early(dev);
bb808945 847
f6dc1e5e 848 pci_update_current_state(pci_dev, PCI_D0);
d67e37d7 849
f6dc1e5e
RW
850 if (drv && drv->pm && drv->pm->thaw_noirq)
851 error = drv->pm->thaw_noirq(dev);
bbb44d9f
RW
852
853 return error;
854}
855
f6dc1e5e 856static int pci_pm_thaw(struct device *dev)
bbb44d9f 857{
355a72d7 858 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 859 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
860 int error = 0;
861
699c1985
SO
862 if (pcibios_pm_ops.thaw) {
863 error = pcibios_pm_ops.thaw(dev);
864 if (error)
865 return error;
866 }
867
ad8cfa1d 868 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 869 return pci_legacy_resume(dev);
bb808945 870
5294e256
RW
871 if (pm) {
872 if (pm->thaw)
873 error = pm->thaw(dev);
874 } else {
875 pci_pm_reenable_device(pci_dev);
876 }
bbb44d9f 877
4b77b0a2
RW
878 pci_dev->state_saved = false;
879
bbb44d9f
RW
880 return error;
881}
882
883static int pci_pm_poweroff(struct device *dev)
884{
355a72d7 885 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 886 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 887
ad8cfa1d
RW
888 if (pci_has_legacy_pm_support(pci_dev))
889 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
bb808945 890
5294e256
RW
891 if (!pm) {
892 pci_pm_default_suspend(pci_dev);
893 goto Fixup;
894 }
895
82fee4d6 896 pci_dev->state_saved = false;
5294e256 897 if (pm->poweroff) {
46939f8b
RW
898 int error;
899
ddb7c9d2
RW
900 error = pm->poweroff(dev);
901 suspend_report_result(pm->poweroff, error);
46939f8b
RW
902 if (error)
903 return error;
bbb44d9f
RW
904 }
905
5294e256
RW
906 Fixup:
907 pci_fixup_device(pci_fixup_suspend, pci_dev);
c9b9972b 908
699c1985
SO
909 if (pcibios_pm_ops.poweroff)
910 return pcibios_pm_ops.poweroff(dev);
911
46939f8b 912 return 0;
bbb44d9f
RW
913}
914
915static int pci_pm_poweroff_noirq(struct device *dev)
916{
46939f8b 917 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 918 struct device_driver *drv = dev->driver;
bbb44d9f 919
bb808945
RW
920 if (pci_has_legacy_pm_support(to_pci_dev(dev)))
921 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
922
46939f8b
RW
923 if (!drv || !drv->pm)
924 return 0;
925
926 if (drv->pm->poweroff_noirq) {
927 int error;
928
d67e37d7
RW
929 error = drv->pm->poweroff_noirq(dev);
930 suspend_report_result(drv->pm->poweroff_noirq, error);
46939f8b
RW
931 if (error)
932 return error;
bbb44d9f
RW
933 }
934
46939f8b
RW
935 if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
936 pci_prepare_to_sleep(pci_dev);
937
0b68c8e2
RW
938 /*
939 * The reason for doing this here is the same as for the analogous code
940 * in pci_pm_suspend_noirq().
941 */
942 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
943 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
944
699c1985
SO
945 if (pcibios_pm_ops.poweroff_noirq)
946 return pcibios_pm_ops.poweroff_noirq(dev);
947
46939f8b 948 return 0;
bbb44d9f
RW
949}
950
f6dc1e5e 951static int pci_pm_restore_noirq(struct device *dev)
bbb44d9f
RW
952{
953 struct pci_dev *pci_dev = to_pci_dev(dev);
954 struct device_driver *drv = dev->driver;
355a72d7 955 int error = 0;
bbb44d9f 956
699c1985
SO
957 if (pcibios_pm_ops.restore_noirq) {
958 error = pcibios_pm_ops.restore_noirq(dev);
959 if (error)
960 return error;
961 }
962
6cbf8214 963 pci_pm_default_resume_early(pci_dev);
aa8c6c93 964
ad8cfa1d 965 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 966 return pci_legacy_resume_early(dev);
bb808945 967
f6dc1e5e
RW
968 if (drv && drv->pm && drv->pm->restore_noirq)
969 error = drv->pm->restore_noirq(dev);
bbb44d9f
RW
970
971 return error;
972}
973
f6dc1e5e 974static int pci_pm_restore(struct device *dev)
bbb44d9f
RW
975{
976 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 977 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
978 int error = 0;
979
699c1985
SO
980 if (pcibios_pm_ops.restore) {
981 error = pcibios_pm_ops.restore(dev);
982 if (error)
983 return error;
984 }
985
418e4da3
RW
986 /*
987 * This is necessary for the hibernation error path in which restore is
988 * called without restoring the standard config registers of the device.
989 */
990 if (pci_dev->state_saved)
991 pci_restore_standard_config(pci_dev);
992
ad8cfa1d 993 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 994 return pci_legacy_resume(dev);
bb808945 995
5294e256 996 pci_pm_default_resume(pci_dev);
73410429 997
5294e256
RW
998 if (pm) {
999 if (pm->restore)
1000 error = pm->restore(dev);
1001 } else {
1002 pci_pm_reenable_device(pci_dev);
1003 }
bbb44d9f
RW
1004
1005 return error;
c8958177 1006}
1da177e4 1007
1f112cee 1008#else /* !CONFIG_HIBERNATE_CALLBACKS */
bbb44d9f
RW
1009
1010#define pci_pm_freeze NULL
1011#define pci_pm_freeze_noirq NULL
1012#define pci_pm_thaw NULL
1013#define pci_pm_thaw_noirq NULL
1014#define pci_pm_poweroff NULL
1015#define pci_pm_poweroff_noirq NULL
1016#define pci_pm_restore NULL
1017#define pci_pm_restore_noirq NULL
1018
1f112cee 1019#endif /* !CONFIG_HIBERNATE_CALLBACKS */
bbb44d9f 1020
6cbf8214
RW
1021#ifdef CONFIG_PM_RUNTIME
1022
1023static int pci_pm_runtime_suspend(struct device *dev)
1024{
1025 struct pci_dev *pci_dev = to_pci_dev(dev);
1026 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1027 pci_power_t prev = pci_dev->current_state;
1028 int error;
1029
967577b0
HY
1030 /*
1031 * If pci_dev->driver is not set (unbound), the device should
1032 * always remain in D0 regardless of the runtime PM status
1033 */
1034 if (!pci_dev->driver)
1035 return 0;
1036
6cbf8214
RW
1037 if (!pm || !pm->runtime_suspend)
1038 return -ENOSYS;
1039
82fee4d6 1040 pci_dev->state_saved = false;
448bd857 1041 pci_dev->no_d3cold = false;
6cbf8214
RW
1042 error = pm->runtime_suspend(dev);
1043 suspend_report_result(pm->runtime_suspend, error);
1044 if (error)
1045 return error;
448bd857
HY
1046 if (!pci_dev->d3cold_allowed)
1047 pci_dev->no_d3cold = true;
6cbf8214
RW
1048
1049 pci_fixup_device(pci_fixup_suspend, pci_dev);
1050
1051 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
1052 && pci_dev->current_state != PCI_UNKNOWN) {
1053 WARN_ONCE(pci_dev->current_state != prev,
1054 "PCI PM: State of device not saved by %pF\n",
1055 pm->runtime_suspend);
1056 return 0;
1057 }
1058
42eca230 1059 if (!pci_dev->state_saved) {
6cbf8214 1060 pci_save_state(pci_dev);
42eca230
DA
1061 pci_finish_runtime_suspend(pci_dev);
1062 }
6cbf8214
RW
1063
1064 return 0;
1065}
1066
1067static int pci_pm_runtime_resume(struct device *dev)
1068{
448bd857 1069 int rc;
6cbf8214
RW
1070 struct pci_dev *pci_dev = to_pci_dev(dev);
1071 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1072
967577b0
HY
1073 /*
1074 * If pci_dev->driver is not set (unbound), the device should
1075 * always remain in D0 regardless of the runtime PM status
1076 */
1077 if (!pci_dev->driver)
1078 return 0;
1079
6cbf8214
RW
1080 if (!pm || !pm->runtime_resume)
1081 return -ENOSYS;
1082
db288c9c
RW
1083 pci_restore_standard_config(pci_dev);
1084 pci_fixup_device(pci_fixup_resume_early, pci_dev);
6cbf8214
RW
1085 __pci_enable_wake(pci_dev, PCI_D0, true, false);
1086 pci_fixup_device(pci_fixup_resume, pci_dev);
1087
448bd857
HY
1088 rc = pm->runtime_resume(dev);
1089
1090 pci_dev->runtime_d3cold = false;
1091
1092 return rc;
6cbf8214
RW
1093}
1094
1095static int pci_pm_runtime_idle(struct device *dev)
1096{
967577b0 1097 struct pci_dev *pci_dev = to_pci_dev(dev);
6cbf8214 1098 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
45f0a85c 1099 int ret = 0;
6cbf8214 1100
967577b0
HY
1101 /*
1102 * If pci_dev->driver is not set (unbound), the device should
1103 * always remain in D0 regardless of the runtime PM status
1104 */
1105 if (!pci_dev->driver)
45f0a85c 1106 return 0;
967577b0 1107
6cbf8214
RW
1108 if (!pm)
1109 return -ENOSYS;
1110
45f0a85c
RW
1111 if (pm->runtime_idle)
1112 ret = pm->runtime_idle(dev);
6cbf8214 1113
45f0a85c 1114 return ret;
6cbf8214
RW
1115}
1116
1117#else /* !CONFIG_PM_RUNTIME */
1118
1119#define pci_pm_runtime_suspend NULL
1120#define pci_pm_runtime_resume NULL
1121#define pci_pm_runtime_idle NULL
1122
1123#endif /* !CONFIG_PM_RUNTIME */
1124
aa338601 1125#ifdef CONFIG_PM
6cbf8214 1126
8150f32b 1127const struct dev_pm_ops pci_dev_pm_ops = {
adf09493
RW
1128 .prepare = pci_pm_prepare,
1129 .complete = pci_pm_complete,
1130 .suspend = pci_pm_suspend,
1131 .resume = pci_pm_resume,
1132 .freeze = pci_pm_freeze,
1133 .thaw = pci_pm_thaw,
1134 .poweroff = pci_pm_poweroff,
1135 .restore = pci_pm_restore,
bbb44d9f
RW
1136 .suspend_noirq = pci_pm_suspend_noirq,
1137 .resume_noirq = pci_pm_resume_noirq,
1138 .freeze_noirq = pci_pm_freeze_noirq,
1139 .thaw_noirq = pci_pm_thaw_noirq,
1140 .poweroff_noirq = pci_pm_poweroff_noirq,
1141 .restore_noirq = pci_pm_restore_noirq,
6cbf8214
RW
1142 .runtime_suspend = pci_pm_runtime_suspend,
1143 .runtime_resume = pci_pm_runtime_resume,
1144 .runtime_idle = pci_pm_runtime_idle,
bbb44d9f
RW
1145};
1146
adf09493 1147#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
bbb44d9f 1148
6cbf8214 1149#else /* !COMFIG_PM_OPS */
bbb44d9f
RW
1150
1151#define PCI_PM_OPS_PTR NULL
1152
6cbf8214 1153#endif /* !COMFIG_PM_OPS */
bbb44d9f 1154
1da177e4 1155/**
863b18f4 1156 * __pci_register_driver - register a new pci driver
1da177e4 1157 * @drv: the driver structure to register
863b18f4 1158 * @owner: owner module of drv
f95d882d 1159 * @mod_name: module name string
1da177e4
LT
1160 *
1161 * Adds the driver structure to the list of registered drivers.
1162 * Returns a negative value on error, otherwise 0.
eaae4b3a 1163 * If no error occurred, the driver remains registered even if
1da177e4
LT
1164 * no device was claimed during registration.
1165 */
725522b5
GKH
1166int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1167 const char *mod_name)
1da177e4 1168{
1da177e4
LT
1169 /* initialize common driver fields */
1170 drv->driver.name = drv->name;
1171 drv->driver.bus = &pci_bus_type;
863b18f4 1172 drv->driver.owner = owner;
725522b5 1173 drv->driver.mod_name = mod_name;
50b00755 1174
75865858
GKH
1175 spin_lock_init(&drv->dynids.lock);
1176 INIT_LIST_HEAD(&drv->dynids.list);
1da177e4
LT
1177
1178 /* register with core */
bfb09a86 1179 return driver_register(&drv->driver);
1da177e4
LT
1180}
1181
1182/**
1183 * pci_unregister_driver - unregister a pci driver
1184 * @drv: the driver structure to unregister
1185 *
1186 * Deletes the driver structure from the list of registered PCI drivers,
1187 * gives it a chance to clean up by calling its remove() function for
1188 * each device it was responsible for, and marks those devices as
1189 * driverless.
1190 */
1191
1192void
1193pci_unregister_driver(struct pci_driver *drv)
1194{
1195 driver_unregister(&drv->driver);
1196 pci_free_dynids(drv);
1197}
1198
1199static struct pci_driver pci_compat_driver = {
1200 .name = "compat"
1201};
1202
1203/**
1204 * pci_dev_driver - get the pci_driver of a device
1205 * @dev: the device to query
1206 *
1207 * Returns the appropriate pci_driver structure or %NULL if there is no
1208 * registered driver for the device.
1209 */
1210struct pci_driver *
1211pci_dev_driver(const struct pci_dev *dev)
1212{
1213 if (dev->driver)
1214 return dev->driver;
1215 else {
1216 int i;
1217 for(i=0; i<=PCI_ROM_RESOURCE; i++)
1218 if (dev->resource[i].flags & IORESOURCE_BUSY)
1219 return &pci_compat_driver;
1220 }
1221 return NULL;
1222}
1223
1224/**
1225 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1da177e4 1226 * @dev: the PCI device structure to match against
8f7020d3 1227 * @drv: the device driver to search for matching PCI device id structures
1da177e4
LT
1228 *
1229 * Used by a driver to check whether a PCI device present in the
8f7020d3 1230 * system is in its list of supported devices. Returns the matching
1da177e4
LT
1231 * pci_device_id structure or %NULL if there is no match.
1232 */
75865858 1233static int pci_bus_match(struct device *dev, struct device_driver *drv)
1da177e4 1234{
75865858 1235 struct pci_dev *pci_dev = to_pci_dev(dev);
58d9a38f 1236 struct pci_driver *pci_drv;
1da177e4
LT
1237 const struct pci_device_id *found_id;
1238
58d9a38f
YL
1239 if (!pci_dev->match_driver)
1240 return 0;
1241
1242 pci_drv = to_pci_driver(drv);
75865858 1243 found_id = pci_match_device(pci_drv, pci_dev);
1da177e4
LT
1244 if (found_id)
1245 return 1;
1246
75865858 1247 return 0;
1da177e4
LT
1248}
1249
1250/**
1251 * pci_dev_get - increments the reference count of the pci device structure
1252 * @dev: the device being referenced
1253 *
1254 * Each live reference to a device should be refcounted.
1255 *
1256 * Drivers for PCI devices should normally record such references in
1257 * their probe() methods, when they bind to a device, and release
1258 * them by calling pci_dev_put(), in their disconnect() methods.
1259 *
1260 * A pointer to the device with the incremented reference counter is returned.
1261 */
1262struct pci_dev *pci_dev_get(struct pci_dev *dev)
1263{
1264 if (dev)
1265 get_device(&dev->dev);
1266 return dev;
1267}
1268
1269/**
1270 * pci_dev_put - release a use of the pci device structure
1271 * @dev: device that's been disconnected
1272 *
1273 * Must be called when a user of a device is finished with it. When the last
1274 * user of the device calls this function, the memory of the device is freed.
1275 */
1276void pci_dev_put(struct pci_dev *dev)
1277{
1278 if (dev)
1279 put_device(&dev->dev);
1280}
1281
8ccc9aa1
BP
1282static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1283{
1284 struct pci_dev *pdev;
1285
1286 if (!dev)
1287 return -ENODEV;
1288
1289 pdev = to_pci_dev(dev);
1290 if (!pdev)
1291 return -ENODEV;
1292
1293 if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class))
1294 return -ENOMEM;
1295
1296 if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
1297 return -ENOMEM;
1298
1299 if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
1300 pdev->subsystem_device))
1301 return -ENOMEM;
1302
1303 if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
1304 return -ENOMEM;
1305
1306 if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x",
1307 pdev->vendor, pdev->device,
1308 pdev->subsystem_vendor, pdev->subsystem_device,
1309 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
1310 (u8)(pdev->class)))
1311 return -ENOMEM;
1312 return 0;
1313}
1314
1da177e4
LT
1315struct bus_type pci_bus_type = {
1316 .name = "pci",
1317 .match = pci_bus_match,
312c004d 1318 .uevent = pci_uevent,
b15d686a
RK
1319 .probe = pci_device_probe,
1320 .remove = pci_device_remove,
cbd69dbb 1321 .shutdown = pci_device_shutdown,
1da177e4 1322 .dev_attrs = pci_dev_attrs,
244afeca 1323 .bus_groups = pci_bus_groups,
19b6e6a4 1324 .drv_groups = pci_drv_groups,
bbb44d9f 1325 .pm = PCI_PM_OPS_PTR,
1da177e4
LT
1326};
1327
1328static int __init pci_driver_init(void)
1329{
1330 return bus_register(&pci_bus_type);
1331}
1332
1333postcore_initcall(pci_driver_init);
1334
9dba910e 1335EXPORT_SYMBOL_GPL(pci_add_dynid);
75865858 1336EXPORT_SYMBOL(pci_match_id);
863b18f4 1337EXPORT_SYMBOL(__pci_register_driver);
1da177e4
LT
1338EXPORT_SYMBOL(pci_unregister_driver);
1339EXPORT_SYMBOL(pci_dev_driver);
1340EXPORT_SYMBOL(pci_bus_type);
1341EXPORT_SYMBOL(pci_dev_get);
1342EXPORT_SYMBOL(pci_dev_put);
This page took 0.84223 seconds and 5 git commands to generate.