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