pci-driver.c 31.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
/*
 * drivers/pci/pci-driver.c
 *
4 5 6 7 8
 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com>
 * (C) Copyright 2007 Novell Inc.
 *
 * Released under the GPL v2 only.
 *
L
Linus Torvalds 已提交
9 10 11 12 13 14
 */

#include <linux/pci.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
15
#include <linux/mempolicy.h>
T
Tim Schmielau 已提交
16 17
#include <linux/string.h>
#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>
L
Linus Torvalds 已提交
22 23
#include "pci.h"

24 25 26 27
struct pci_dynid {
	struct list_head node;
	struct pci_device_id id;
};
L
Linus Torvalds 已提交
28

T
Tejun Heo 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
/**
 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
 * @drv: target pci driver
 * @vendor: PCI vendor ID
 * @device: PCI device ID
 * @subvendor: PCI subvendor ID
 * @subdevice: PCI subdevice ID
 * @class: PCI class
 * @class_mask: PCI class mask
 * @driver_data: private driver data
 *
 * Adds a new dynamic pci device ID to this driver and causes the
 * driver to probe for all devices again.  @drv must have been
 * registered prior to calling this function.
 *
 * CONTEXT:
 * Does GFP_KERNEL allocation.
 *
 * RETURNS:
 * 0 on success, -errno on failure.
 */
int pci_add_dynid(struct pci_driver *drv,
		  unsigned int vendor, unsigned int device,
		  unsigned int subvendor, unsigned int subdevice,
		  unsigned int class, unsigned int class_mask,
		  unsigned long driver_data)
{
	struct pci_dynid *dynid;
	int retval;

	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
	if (!dynid)
		return -ENOMEM;

	dynid->id.vendor = vendor;
	dynid->id.device = device;
	dynid->id.subvendor = subvendor;
	dynid->id.subdevice = subdevice;
	dynid->id.class = class;
	dynid->id.class_mask = class_mask;
	dynid->id.driver_data = driver_data;
70

T
Tejun Heo 已提交
71 72 73 74 75 76 77 78 79 80 81 82
	spin_lock(&drv->dynids.lock);
	list_add_tail(&dynid->node, &drv->dynids.list);
	spin_unlock(&drv->dynids.lock);

	retval = driver_attach(&drv->driver);

	return retval;
}

static void pci_free_dynids(struct pci_driver *drv)
{
	struct pci_dynid *dynid, *n;
83

T
Tejun Heo 已提交
84 85 86 87 88 89 90 91 92 93 94 95
	spin_lock(&drv->dynids.lock);
	list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
		list_del(&dynid->node);
		kfree(dynid);
	}
	spin_unlock(&drv->dynids.lock);
}

/*
 * Dynamic device ID manipulation via sysfs is disabled for !CONFIG_HOTPLUG
 */
#ifdef CONFIG_HOTPLUG
L
Linus Torvalds 已提交
96
/**
T
Tejun Heo 已提交
97
 * store_new_id - sysfs frontend to pci_add_dynid()
R
Randy Dunlap 已提交
98 99 100
 * @driver: target device driver
 * @buf: buffer for scanning device ID data
 * @count: input size
L
Linus Torvalds 已提交
101
 *
T
Tejun Heo 已提交
102
 * Allow PCI IDs to be added to an existing driver via sysfs.
L
Linus Torvalds 已提交
103
 */
104
static ssize_t
L
Linus Torvalds 已提交
105 106 107
store_new_id(struct device_driver *driver, const char *buf, size_t count)
{
	struct pci_driver *pdrv = to_pci_driver(driver);
108
	const struct pci_device_id *ids = pdrv->id_table;
109
	__u32 vendor, device, subvendor=PCI_ANY_ID,
L
Linus Torvalds 已提交
110 111 112
		subdevice=PCI_ANY_ID, class=0, class_mask=0;
	unsigned long driver_data=0;
	int fields=0;
T
Tejun Heo 已提交
113
	int retval;
L
Linus Torvalds 已提交
114

115
	fields = sscanf(buf, "%x %x %x %x %x %x %lx",
L
Linus Torvalds 已提交
116 117
			&vendor, &device, &subvendor, &subdevice,
			&class, &class_mask, &driver_data);
118
	if (fields < 2)
L
Linus Torvalds 已提交
119 120
		return -EINVAL;

121 122
	/* Only accept driver_data values that match an existing id_table
	   entry */
123 124 125 126 127 128 129 130
	if (ids) {
		retval = -EINVAL;
		while (ids->vendor || ids->subvendor || ids->class_mask) {
			if (driver_data == ids->driver_data) {
				retval = 0;
				break;
			}
			ids++;
131
		}
132 133
		if (retval)	/* No match */
			return retval;
134 135
	}

T
Tejun Heo 已提交
136 137
	retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
			       class, class_mask, driver_data);
138 139
	if (retval)
		return retval;
L
Linus Torvalds 已提交
140 141 142 143
	return count;
}
static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);

C
Chris Wright 已提交
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
/**
 * store_remove_id - remove a PCI device ID from this driver
 * @driver: target device driver
 * @buf: buffer for scanning device ID data
 * @count: input size
 *
 * Removes a dynamic pci device ID to this driver.
 */
static ssize_t
store_remove_id(struct device_driver *driver, const char *buf, size_t count)
{
	struct pci_dynid *dynid, *n;
	struct pci_driver *pdrv = to_pci_driver(driver);
	__u32 vendor, device, subvendor = PCI_ANY_ID,
		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
	int fields = 0;
	int retval = -ENODEV;

	fields = sscanf(buf, "%x %x %x %x %x %x",
			&vendor, &device, &subvendor, &subdevice,
			&class, &class_mask);
	if (fields < 2)
		return -EINVAL;

	spin_lock(&pdrv->dynids.lock);
	list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
		struct pci_device_id *id = &dynid->id;
		if ((id->vendor == vendor) &&
		    (id->device == device) &&
		    (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
		    (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
		    !((id->class ^ class) & class_mask)) {
			list_del(&dynid->node);
			kfree(dynid);
			retval = 0;
			break;
		}
	}
	spin_unlock(&pdrv->dynids.lock);

	if (retval)
		return retval;
	return count;
}
static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);

L
Linus Torvalds 已提交
190
static int
191
pci_create_newid_files(struct pci_driver *drv)
L
Linus Torvalds 已提交
192 193
{
	int error = 0;
C
Chris Wright 已提交
194

195 196 197 198 199 200 201 202 203 204
	if (drv->probe != NULL) {
		error = driver_create_file(&drv->driver, &driver_attr_new_id);
		if (error == 0) {
			error = driver_create_file(&drv->driver,
					&driver_attr_remove_id);
			if (error)
				driver_remove_file(&drv->driver,
						&driver_attr_new_id);
		}
	}
C
Chris Wright 已提交
205 206 207
	return error;
}

208
static void pci_remove_newid_files(struct pci_driver *drv)
C
Chris Wright 已提交
209 210
{
	driver_remove_file(&drv->driver, &driver_attr_remove_id);
211
	driver_remove_file(&drv->driver, &driver_attr_new_id);
C
Chris Wright 已提交
212
}
L
Linus Torvalds 已提交
213
#else /* !CONFIG_HOTPLUG */
214
static inline int pci_create_newid_files(struct pci_driver *drv)
L
Linus Torvalds 已提交
215 216 217
{
	return 0;
}
218
static inline void pci_remove_newid_files(struct pci_driver *drv) {}
L
Linus Torvalds 已提交
219 220 221
#endif

/**
222
 * pci_match_id - See if a pci device matches a given pci_id table
L
Linus Torvalds 已提交
223
 * @ids: array of PCI device id structures to search in
224 225
 * @dev: the PCI device structure to match against.
 *
L
Linus Torvalds 已提交
226
 * Used by a driver to check whether a PCI device present in the
227
 * system is in its list of supported devices.  Returns the matching
L
Linus Torvalds 已提交
228
 * pci_device_id structure or %NULL if there is no match.
229
 *
R
Randy Dunlap 已提交
230
 * Deprecated, don't use this as it will not catch any dynamic ids
231
 * that a driver might want to check for.
L
Linus Torvalds 已提交
232
 */
233 234
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
					 struct pci_dev *dev)
L
Linus Torvalds 已提交
235
{
236 237 238 239 240 241
	if (ids) {
		while (ids->vendor || ids->subvendor || ids->class_mask) {
			if (pci_match_one_device(ids, dev))
				return ids;
			ids++;
		}
L
Linus Torvalds 已提交
242 243 244 245 246
	}
	return NULL;
}

/**
R
Randy Dunlap 已提交
247
 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
248
 * @drv: the PCI driver to match against
249
 * @dev: the PCI device structure to match against
250 251 252 253
 *
 * Used by a driver to check whether a PCI device present in the
 * system is in its list of supported devices.  Returns the matching
 * pci_device_id structure or %NULL if there is no match.
L
Linus Torvalds 已提交
254
 */
A
Adrian Bunk 已提交
255 256
static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
						    struct pci_dev *dev)
257 258
{
	struct pci_dynid *dynid;
L
Linus Torvalds 已提交
259

260
	/* Look at the dynamic ids first, before the static ones */
261 262 263 264 265 266
	spin_lock(&drv->dynids.lock);
	list_for_each_entry(dynid, &drv->dynids.list, node) {
		if (pci_match_one_device(&dynid->id, dev)) {
			spin_unlock(&drv->dynids.lock);
			return &dynid->id;
		}
L
Linus Torvalds 已提交
267
	}
268
	spin_unlock(&drv->dynids.lock);
269 270

	return pci_match_id(drv->id_table, dev);
L
Linus Torvalds 已提交
271 272
}

273 274 275 276 277 278 279 280 281
struct drv_dev_and_id {
	struct pci_driver *drv;
	struct pci_dev *dev;
	const struct pci_device_id *id;
};

static long local_pci_probe(void *_ddi)
{
	struct drv_dev_and_id *ddi = _ddi;
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
	struct device *dev = &ddi->dev->dev;
	int rc;

	/* Unbound PCI devices are always set to disabled and suspended.
	 * During probe, the device is set to enabled and active and the
	 * usage count is incremented.  If the driver supports runtime PM,
	 * it should call pm_runtime_put_noidle() in its probe routine and
	 * pm_runtime_get_noresume() in its remove routine.
	 */
	pm_runtime_get_noresume(dev);
	pm_runtime_set_active(dev);
	pm_runtime_enable(dev);

	rc = ddi->drv->probe(ddi->dev, ddi->id);
	if (rc) {
		pm_runtime_disable(dev);
		pm_runtime_set_suspended(dev);
		pm_runtime_put_noidle(dev);
	}
	return rc;
302 303
}

304 305 306
static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
			  const struct pci_device_id *id)
{
307 308 309 310 311 312 313 314
	int error, node;
	struct drv_dev_and_id ddi = { drv, dev, id };

	/* Execute driver initialization on node where the device's
	   bus is attached to.  This way the driver likely allocates
	   its local memory on the right node without any need to
	   change it. */
	node = dev_to_node(&dev->dev);
315
	if (node >= 0) {
316 317 318
		int cpu;

		get_online_cpus();
319
		cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
320 321 322 323 324 325 326
		if (cpu < nr_cpu_ids)
			error = work_on_cpu(cpu, local_pci_probe, &ddi);
		else
			error = local_pci_probe(&ddi);
		put_online_cpus();
	} else
		error = local_pci_probe(&ddi);
327 328 329
	return error;
}

L
Linus Torvalds 已提交
330
/**
331
 * __pci_device_probe - check if a driver wants to claim a specific PCI device
R
Randy Dunlap 已提交
332 333
 * @drv: driver to call to check if it wants the PCI device
 * @pci_dev: PCI device being probed
L
Linus Torvalds 已提交
334
 * 
R
Randy Dunlap 已提交
335
 * returns 0 on success, else error.
L
Linus Torvalds 已提交
336 337 338 339
 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
 */
static int
__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
340 341
{
	const struct pci_device_id *id;
L
Linus Torvalds 已提交
342 343 344
	int error = 0;

	if (!pci_dev->driver && drv->probe) {
345 346 347 348
		error = -ENODEV;

		id = pci_match_device(drv, pci_dev);
		if (id)
349
			error = pci_call_probe(drv, pci_dev, id);
350 351 352 353
		if (error >= 0) {
			pci_dev->driver = drv;
			error = 0;
		}
L
Linus Torvalds 已提交
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379
	}
	return error;
}

static int pci_device_probe(struct device * dev)
{
	int error = 0;
	struct pci_driver *drv;
	struct pci_dev *pci_dev;

	drv = to_pci_driver(dev->driver);
	pci_dev = to_pci_dev(dev);
	pci_dev_get(pci_dev);
	error = __pci_device_probe(drv, pci_dev);
	if (error)
		pci_dev_put(pci_dev);

	return error;
}

static int pci_device_remove(struct device * dev)
{
	struct pci_dev * pci_dev = to_pci_dev(dev);
	struct pci_driver * drv = pci_dev->driver;

	if (drv) {
380 381
		if (drv->remove) {
			pm_runtime_get_sync(dev);
L
Linus Torvalds 已提交
382
			drv->remove(pci_dev);
383 384
			pm_runtime_put_noidle(dev);
		}
L
Linus Torvalds 已提交
385 386 387
		pci_dev->driver = NULL;
	}

388 389 390 391 392
	/* Undo the runtime PM settings in local_pci_probe() */
	pm_runtime_disable(dev);
	pm_runtime_set_suspended(dev);
	pm_runtime_put_noidle(dev);

393 394 395 396 397 398 399
	/*
	 * If the device is still on, set the power state as "unknown",
	 * since it might change by the next time we load the driver.
	 */
	if (pci_dev->current_state == PCI_D0)
		pci_dev->current_state = PCI_UNKNOWN;

L
Linus Torvalds 已提交
400 401 402 403 404 405 406 407 408 409 410 411 412
	/*
	 * We would love to complain here if pci_dev->is_enabled is set, that
	 * the driver should have called pci_disable_device(), but the
	 * unfortunate fact is there are too many odd BIOS and bridge setups
	 * that don't like drivers doing that all of the time.  
	 * Oh well, we can dream of sane hardware when we sleep, no matter how
	 * horrible the crap we have to deal with is when we are awake...
	 */

	pci_dev_put(pci_dev);
	return 0;
}

413 414 415 416 417 418 419 420 421
static void pci_device_shutdown(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = pci_dev->driver;

	if (drv && drv->shutdown)
		drv->shutdown(pci_dev);
	pci_msi_shutdown(pci_dev);
	pci_msix_shutdown(pci_dev);
422

423 424 425 426 427 428
	/*
	 * Turn off Bus Master bit on the device to tell it to not
	 * continue to do DMA
	 */
	pci_disable_device(pci_dev);

429 430 431 432 433 434 435 436 437
	/*
	 * Devices may be enabled to wake up by runtime PM, but they need not
	 * be supposed to wake up the system from its "power off" state (e.g.
	 * ACPI S5).  Therefore disable wakeup for all devices that aren't
	 * supposed to wake up the system at this point.  The state argument
	 * will be ignored by pci_enable_wake().
	 */
	if (!device_may_wakeup(dev))
		pci_enable_wake(pci_dev, PCI_UNKNOWN, false);
438 439
}

R
Rafael J. Wysocki 已提交
440
#ifdef CONFIG_PM
441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457

/* Auxiliary functions used for system resume and run-time resume. */

/**
 * pci_restore_standard_config - restore standard config registers of PCI device
 * @pci_dev: PCI device to handle
 */
static int pci_restore_standard_config(struct pci_dev *pci_dev)
{
	pci_update_current_state(pci_dev, PCI_UNKNOWN);

	if (pci_dev->current_state != PCI_D0) {
		int error = pci_set_power_state(pci_dev, PCI_D0);
		if (error)
			return error;
	}

458 459
	pci_restore_state(pci_dev);
	return 0;
460 461
}

462 463 464 465
#endif

#ifdef CONFIG_PM_SLEEP

466 467
static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
{
468 469
	pci_power_up(pci_dev);
	pci_restore_state(pci_dev);
470 471 472
	pci_fixup_device(pci_fixup_resume_early, pci_dev);
}

473 474 475
/*
 * Default "suspend" method for devices that have no driver provided suspend,
 * or not even a driver at all (second part).
476
 */
477
static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
478 479 480 481 482 483 484 485 486
{
	/*
	 * mark its power state as "unknown", since we don't know if
	 * e.g. the BIOS will change its device state when we suspend.
	 */
	if (pci_dev->current_state == PCI_D0)
		pci_dev->current_state = PCI_UNKNOWN;
}

487 488 489 490
/*
 * Default "resume" method for devices that have no driver provided resume,
 * or not even a driver at all (second part).
 */
491
static int pci_pm_reenable_device(struct pci_dev *pci_dev)
492 493 494
{
	int retval;

495 496 497 498 499 500 501 502 503 504 505 506 507
	/* if the device was enabled before suspend, reenable */
	retval = pci_reenable_device(pci_dev);
	/*
	 * if the device was busmaster before the suspend, make it busmaster
	 * again
	 */
	if (pci_dev->is_busmaster)
		pci_set_master(pci_dev);

	return retval;
}

static int pci_legacy_suspend(struct device *dev, pm_message_t state)
L
Linus Torvalds 已提交
508 509 510
{
	struct pci_dev * pci_dev = to_pci_dev(dev);
	struct pci_driver * drv = pci_dev->driver;
511

512
	if (drv && drv->suspend) {
513
		pci_power_t prev = pci_dev->current_state;
514
		int error;
515

516 517 518 519
		error = drv->suspend(pci_dev, state);
		suspend_report_result(drv->suspend, error);
		if (error)
			return error;
520

521
		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
522 523 524 525 526
		    && pci_dev->current_state != PCI_UNKNOWN) {
			WARN_ONCE(pci_dev->current_state != prev,
				"PCI PM: Device state not saved by %pF\n",
				drv->suspend);
		}
527
	}
528 529 530

	pci_fixup_device(pci_fixup_suspend, pci_dev);

531
	return 0;
L
Linus Torvalds 已提交
532 533
}

534
static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
L
Linus Torvalds 已提交
535 536 537 538 539
{
	struct pci_dev * pci_dev = to_pci_dev(dev);
	struct pci_driver * drv = pci_dev->driver;

	if (drv && drv->suspend_late) {
540 541 542
		pci_power_t prev = pci_dev->current_state;
		int error;

543 544
		error = drv->suspend_late(pci_dev, state);
		suspend_report_result(drv->suspend_late, error);
545 546 547 548 549 550 551 552 553 554
		if (error)
			return error;

		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
		    && pci_dev->current_state != PCI_UNKNOWN) {
			WARN_ONCE(pci_dev->current_state != prev,
				"PCI PM: Device state not saved by %pF\n",
				drv->suspend_late);
			return 0;
		}
L
Linus Torvalds 已提交
555
	}
556 557 558 559 560 561 562

	if (!pci_dev->state_saved)
		pci_save_state(pci_dev);

	pci_pm_set_unknown_state(pci_dev);

	return 0;
L
Linus Torvalds 已提交
563
}
L
Linus Torvalds 已提交
564

565 566 567 568 569
static int pci_legacy_resume_early(struct device *dev)
{
	struct pci_dev * pci_dev = to_pci_dev(dev);
	struct pci_driver * drv = pci_dev->driver;

570 571
	return drv && drv->resume_early ?
			drv->resume_early(pci_dev) : 0;
572 573
}

574
static int pci_legacy_resume(struct device *dev)
L
Linus Torvalds 已提交
575 576 577 578
{
	struct pci_dev * pci_dev = to_pci_dev(dev);
	struct pci_driver * drv = pci_dev->driver;

579 580
	pci_fixup_device(pci_fixup_resume, pci_dev);

581 582
	return drv && drv->resume ?
			drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
L
Linus Torvalds 已提交
583 584
}

585 586
/* Auxiliary functions used by the new power management framework */

587
static void pci_pm_default_resume(struct pci_dev *pci_dev)
588
{
589 590
	pci_fixup_device(pci_fixup_resume, pci_dev);

591 592
	if (!pci_is_bridge(pci_dev))
		pci_enable_wake(pci_dev, PCI_D0, false);
593 594
}

595
static void pci_pm_default_suspend(struct pci_dev *pci_dev)
596
{
597
	/* Disable non-bridge devices without PM support */
598 599
	if (!pci_is_bridge(pci_dev))
		pci_disable_enabled_device(pci_dev);
600 601
}

602 603 604
static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
{
	struct pci_driver *drv = pci_dev->driver;
605
	bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
606
		|| drv->resume_early);
607 608 609 610 611 612

	/*
	 * Legacy PM support is used by default, so warn if the new framework is
	 * supported as well.  Drivers are supposed to support either the
	 * former, or the latter, but not both at the same time.
	 */
613 614
	WARN(ret && drv->driver.pm, "driver %s device %04x:%04x\n",
		drv->name, pci_dev->vendor, pci_dev->device);
615 616

	return ret;
617 618
}

619 620
/* New power management framework */

621 622 623 624 625
static int pci_pm_prepare(struct device *dev)
{
	struct device_driver *drv = dev->driver;
	int error = 0;

626 627 628 629 630 631 632 633 634 635 636 637 638 639 640
	/*
	 * If a PCI device configured to wake up the system from sleep states
	 * has been suspended at run time and there's a resume request pending
	 * for it, this is equivalent to the device signaling wakeup, so the
	 * system suspend operation should be aborted.
	 */
	pm_runtime_get_noresume(dev);
	if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
		pm_wakeup_event(dev, 0);

	if (pm_wakeup_pending()) {
		pm_runtime_put_sync(dev);
		return -EBUSY;
	}

641 642 643 644 645 646 647 648 649
	/*
	 * PCI devices suspended at run time need to be resumed at this
	 * point, because in general it is necessary to reconfigure them for
	 * system suspend.  Namely, if the device is supposed to wake up the
	 * system from the sleep state, we may need to reconfigure it for this
	 * purpose.  In turn, if the device is not supposed to wake up the
	 * system from the sleep state, we'll have to prevent it from signaling
	 * wake-up.
	 */
650
	pm_runtime_resume(dev);
651

652 653 654 655 656 657 658 659 660 661 662 663
	if (drv && drv->pm && drv->pm->prepare)
		error = drv->pm->prepare(dev);

	return error;
}

static void pci_pm_complete(struct device *dev)
{
	struct device_driver *drv = dev->driver;

	if (drv && drv->pm && drv->pm->complete)
		drv->pm->complete(dev);
664 665

	pm_runtime_put_sync(dev);
666 667
}

668 669 670 671 672 673 674
#else /* !CONFIG_PM_SLEEP */

#define pci_pm_prepare	NULL
#define pci_pm_complete	NULL

#endif /* !CONFIG_PM_SLEEP */

675 676 677 678 679
#ifdef CONFIG_SUSPEND

static int pci_pm_suspend(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
680
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
681

682 683
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_SUSPEND);
684

685 686 687 688 689 690 691 692 693
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
		goto Fixup;
	}

	if (pm->suspend) {
		pci_power_t prev = pci_dev->current_state;
		int error;

694 695
		error = pm->suspend(dev);
		suspend_report_result(pm->suspend, error);
696 697 698
		if (error)
			return error;

699
		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
700 701 702 703 704
		    && pci_dev->current_state != PCI_UNKNOWN) {
			WARN_ONCE(pci_dev->current_state != prev,
				"PCI PM: State of device not saved by %pF\n",
				pm->suspend);
		}
705
	}
706

707 708 709 710
 Fixup:
	pci_fixup_device(pci_fixup_suspend, pci_dev);

	return 0;
711 712 713
}

static int pci_pm_suspend_noirq(struct device *dev)
G
Greg KH 已提交
714
{
715
	struct pci_dev *pci_dev = to_pci_dev(dev);
716
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
G
Greg KH 已提交
717

718 719 720
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend_late(dev, PMSG_SUSPEND);

721 722
	if (!pm) {
		pci_save_state(pci_dev);
723
		return 0;
724
	}
725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741

	if (pm->suspend_noirq) {
		pci_power_t prev = pci_dev->current_state;
		int error;

		error = pm->suspend_noirq(dev);
		suspend_report_result(pm->suspend_noirq, error);
		if (error)
			return error;

		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
		    && pci_dev->current_state != PCI_UNKNOWN) {
			WARN_ONCE(pci_dev->current_state != prev,
				"PCI PM: State of device not saved by %pF\n",
				pm->suspend_noirq);
			return 0;
		}
742 743
	}

744 745 746 747 748
	if (!pci_dev->state_saved) {
		pci_save_state(pci_dev);
		if (!pci_is_bridge(pci_dev))
			pci_prepare_to_sleep(pci_dev);
	}
749

750 751
	pci_pm_set_unknown_state(pci_dev);

752 753 754 755 756 757 758 759 760 761 762 763
	/*
	 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
	 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
	 * hasn't been quiesced and tries to turn it off.  If the controller
	 * is already in D3, this can hang or cause memory corruption.
	 *
	 * Since the value of the COMMAND register doesn't matter once the
	 * device has been suspended, we can safely set it to 0 here.
	 */
	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
		pci_write_config_word(pci_dev, PCI_COMMAND, 0);

764
	return 0;
G
Greg KH 已提交
765
}
L
Linus Torvalds 已提交
766

767
static int pci_pm_resume_noirq(struct device *dev)
768 769 770
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct device_driver *drv = dev->driver;
771
	int error = 0;
772

773
	pci_pm_default_resume_early(pci_dev);
774

775
	if (pci_has_legacy_pm_support(pci_dev))
776
		return pci_legacy_resume_early(dev);
777

778 779
	if (drv && drv->pm && drv->pm->resume_noirq)
		error = drv->pm->resume_noirq(dev);
780 781 782 783

	return error;
}

784
static int pci_pm_resume(struct device *dev)
785
{
786
	struct pci_dev *pci_dev = to_pci_dev(dev);
787
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
788 789
	int error = 0;

790 791 792 793 794 795 796
	/*
	 * This is necessary for the suspend error path in which resume is
	 * called without restoring the standard config registers of the device.
	 */
	if (pci_dev->state_saved)
		pci_restore_standard_config(pci_dev);

797
	if (pci_has_legacy_pm_support(pci_dev))
798
		return pci_legacy_resume(dev);
799

800
	pci_pm_default_resume(pci_dev);
801

802 803 804 805 806 807
	if (pm) {
		if (pm->resume)
			error = pm->resume(dev);
	} else {
		pci_pm_reenable_device(pci_dev);
	}
808

809
	return error;
810 811 812 813 814 815 816 817 818 819 820
}

#else /* !CONFIG_SUSPEND */

#define pci_pm_suspend		NULL
#define pci_pm_suspend_noirq	NULL
#define pci_pm_resume		NULL
#define pci_pm_resume_noirq	NULL

#endif /* !CONFIG_SUSPEND */

821
#ifdef CONFIG_HIBERNATE_CALLBACKS
822 823 824 825

static int pci_pm_freeze(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
826
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
827

828 829
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_FREEZE);
830

831 832 833
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
		return 0;
834 835
	}

836 837 838 839 840 841 842 843 844 845
	if (pm->freeze) {
		int error;

		error = pm->freeze(dev);
		suspend_report_result(pm->freeze, error);
		if (error)
			return error;
	}

	return 0;
846 847 848 849
}

static int pci_pm_freeze_noirq(struct device *dev)
{
850
	struct pci_dev *pci_dev = to_pci_dev(dev);
851
	struct device_driver *drv = dev->driver;
852

853 854 855
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend_late(dev, PMSG_FREEZE);

856
	if (drv && drv->pm && drv->pm->freeze_noirq) {
857 858
		int error;

859 860
		error = drv->pm->freeze_noirq(dev);
		suspend_report_result(drv->pm->freeze_noirq, error);
861 862
		if (error)
			return error;
863 864
	}

865 866
	if (!pci_dev->state_saved)
		pci_save_state(pci_dev);
867

868 869 870
	pci_pm_set_unknown_state(pci_dev);

	return 0;
871 872
}

873
static int pci_pm_thaw_noirq(struct device *dev)
874
{
875
	struct pci_dev *pci_dev = to_pci_dev(dev);
876 877 878
	struct device_driver *drv = dev->driver;
	int error = 0;

879
	if (pci_has_legacy_pm_support(pci_dev))
880
		return pci_legacy_resume_early(dev);
881

882
	pci_update_current_state(pci_dev, PCI_D0);
883

884 885
	if (drv && drv->pm && drv->pm->thaw_noirq)
		error = drv->pm->thaw_noirq(dev);
886 887 888 889

	return error;
}

890
static int pci_pm_thaw(struct device *dev)
891
{
892
	struct pci_dev *pci_dev = to_pci_dev(dev);
893
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
894 895
	int error = 0;

896
	if (pci_has_legacy_pm_support(pci_dev))
897
		return pci_legacy_resume(dev);
898

899 900 901 902 903 904
	if (pm) {
		if (pm->thaw)
			error = pm->thaw(dev);
	} else {
		pci_pm_reenable_device(pci_dev);
	}
905

906 907
	pci_dev->state_saved = false;

908 909 910 911 912
	return error;
}

static int pci_pm_poweroff(struct device *dev)
{
913
	struct pci_dev *pci_dev = to_pci_dev(dev);
914
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
915

916 917
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_HIBERNATE);
918

919 920 921 922 923 924
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
		goto Fixup;
	}

	if (pm->poweroff) {
925 926
		int error;

927 928
		error = pm->poweroff(dev);
		suspend_report_result(pm->poweroff, error);
929 930
		if (error)
			return error;
931 932
	}

933 934
 Fixup:
	pci_fixup_device(pci_fixup_suspend, pci_dev);
935

936
	return 0;
937 938 939 940
}

static int pci_pm_poweroff_noirq(struct device *dev)
{
941
	struct pci_dev *pci_dev = to_pci_dev(dev);
942
	struct device_driver *drv = dev->driver;
943

944 945 946
	if (pci_has_legacy_pm_support(to_pci_dev(dev)))
		return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);

947 948 949 950 951 952
	if (!drv || !drv->pm)
		return 0;

	if (drv->pm->poweroff_noirq) {
		int error;

953 954
		error = drv->pm->poweroff_noirq(dev);
		suspend_report_result(drv->pm->poweroff_noirq, error);
955 956
		if (error)
			return error;
957 958
	}

959 960 961
	if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
		pci_prepare_to_sleep(pci_dev);

962 963 964 965 966 967 968
	/*
	 * The reason for doing this here is the same as for the analogous code
	 * in pci_pm_suspend_noirq().
	 */
	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
		pci_write_config_word(pci_dev, PCI_COMMAND, 0);

969
	return 0;
970 971
}

972
static int pci_pm_restore_noirq(struct device *dev)
973 974 975
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct device_driver *drv = dev->driver;
976
	int error = 0;
977

978
	pci_pm_default_resume_early(pci_dev);
979

980
	if (pci_has_legacy_pm_support(pci_dev))
981
		return pci_legacy_resume_early(dev);
982

983 984
	if (drv && drv->pm && drv->pm->restore_noirq)
		error = drv->pm->restore_noirq(dev);
985 986 987 988

	return error;
}

989
static int pci_pm_restore(struct device *dev)
990 991
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
992
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
993 994
	int error = 0;

995 996 997 998 999 1000 1001
	/*
	 * This is necessary for the hibernation error path in which restore is
	 * called without restoring the standard config registers of the device.
	 */
	if (pci_dev->state_saved)
		pci_restore_standard_config(pci_dev);

1002
	if (pci_has_legacy_pm_support(pci_dev))
1003
		return pci_legacy_resume(dev);
1004

1005
	pci_pm_default_resume(pci_dev);
1006

1007 1008 1009 1010 1011 1012
	if (pm) {
		if (pm->restore)
			error = pm->restore(dev);
	} else {
		pci_pm_reenable_device(pci_dev);
	}
1013 1014

	return error;
G
Greg KH 已提交
1015
}
L
Linus Torvalds 已提交
1016

1017
#else /* !CONFIG_HIBERNATE_CALLBACKS */
1018 1019 1020 1021 1022 1023 1024 1025 1026 1027

#define pci_pm_freeze		NULL
#define pci_pm_freeze_noirq	NULL
#define pci_pm_thaw		NULL
#define pci_pm_thaw_noirq	NULL
#define pci_pm_poweroff		NULL
#define pci_pm_poweroff_noirq	NULL
#define pci_pm_restore		NULL
#define pci_pm_restore_noirq	NULL

1028
#endif /* !CONFIG_HIBERNATE_CALLBACKS */
1029

1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041
#ifdef CONFIG_PM_RUNTIME

static int pci_pm_runtime_suspend(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
	pci_power_t prev = pci_dev->current_state;
	int error;

	if (!pm || !pm->runtime_suspend)
		return -ENOSYS;

1042
	pci_dev->no_d3cold = false;
1043 1044 1045 1046
	error = pm->runtime_suspend(dev);
	suspend_report_result(pm->runtime_suspend, error);
	if (error)
		return error;
1047 1048
	if (!pci_dev->d3cold_allowed)
		pci_dev->no_d3cold = true;
1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069

	pci_fixup_device(pci_fixup_suspend, pci_dev);

	if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
	    && pci_dev->current_state != PCI_UNKNOWN) {
		WARN_ONCE(pci_dev->current_state != prev,
			"PCI PM: State of device not saved by %pF\n",
			pm->runtime_suspend);
		return 0;
	}

	if (!pci_dev->state_saved)
		pci_save_state(pci_dev);

	pci_finish_runtime_suspend(pci_dev);

	return 0;
}

static int pci_pm_runtime_resume(struct device *dev)
{
1070
	int rc;
1071 1072 1073 1074 1075 1076
	struct pci_dev *pci_dev = to_pci_dev(dev);
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;

	if (!pm || !pm->runtime_resume)
		return -ENOSYS;

1077 1078
	pci_restore_standard_config(pci_dev);
	pci_fixup_device(pci_fixup_resume_early, pci_dev);
1079 1080 1081
	__pci_enable_wake(pci_dev, PCI_D0, true, false);
	pci_fixup_device(pci_fixup_resume, pci_dev);

1082 1083 1084 1085 1086
	rc = pm->runtime_resume(dev);

	pci_dev->runtime_d3cold = false;

	return rc;
1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114
}

static int pci_pm_runtime_idle(struct device *dev)
{
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;

	if (!pm)
		return -ENOSYS;

	if (pm->runtime_idle) {
		int ret = pm->runtime_idle(dev);
		if (ret)
			return ret;
	}

	pm_runtime_suspend(dev);

	return 0;
}

#else /* !CONFIG_PM_RUNTIME */

#define pci_pm_runtime_suspend	NULL
#define pci_pm_runtime_resume	NULL
#define pci_pm_runtime_idle	NULL

#endif /* !CONFIG_PM_RUNTIME */

R
Rafael J. Wysocki 已提交
1115
#ifdef CONFIG_PM
1116

1117
const struct dev_pm_ops pci_dev_pm_ops = {
1118 1119 1120 1121 1122 1123 1124 1125
	.prepare = pci_pm_prepare,
	.complete = pci_pm_complete,
	.suspend = pci_pm_suspend,
	.resume = pci_pm_resume,
	.freeze = pci_pm_freeze,
	.thaw = pci_pm_thaw,
	.poweroff = pci_pm_poweroff,
	.restore = pci_pm_restore,
1126 1127 1128 1129 1130 1131
	.suspend_noirq = pci_pm_suspend_noirq,
	.resume_noirq = pci_pm_resume_noirq,
	.freeze_noirq = pci_pm_freeze_noirq,
	.thaw_noirq = pci_pm_thaw_noirq,
	.poweroff_noirq = pci_pm_poweroff_noirq,
	.restore_noirq = pci_pm_restore_noirq,
1132 1133 1134
	.runtime_suspend = pci_pm_runtime_suspend,
	.runtime_resume = pci_pm_runtime_resume,
	.runtime_idle = pci_pm_runtime_idle,
1135 1136
};

1137
#define PCI_PM_OPS_PTR	(&pci_dev_pm_ops)
1138

1139
#else /* !COMFIG_PM_OPS */
1140 1141 1142

#define PCI_PM_OPS_PTR	NULL

1143
#endif /* !COMFIG_PM_OPS */
1144

L
Linus Torvalds 已提交
1145
/**
1146
 * __pci_register_driver - register a new pci driver
L
Linus Torvalds 已提交
1147
 * @drv: the driver structure to register
1148
 * @owner: owner module of drv
1149
 * @mod_name: module name string
L
Linus Torvalds 已提交
1150 1151 1152
 * 
 * Adds the driver structure to the list of registered drivers.
 * Returns a negative value on error, otherwise 0. 
1153
 * If no error occurred, the driver remains registered even if 
L
Linus Torvalds 已提交
1154 1155
 * no device was claimed during registration.
 */
1156 1157
int __pci_register_driver(struct pci_driver *drv, struct module *owner,
			  const char *mod_name)
L
Linus Torvalds 已提交
1158 1159 1160 1161 1162 1163
{
	int error;

	/* initialize common driver fields */
	drv->driver.name = drv->name;
	drv->driver.bus = &pci_bus_type;
1164
	drv->driver.owner = owner;
1165
	drv->driver.mod_name = mod_name;
A
Alan Cox 已提交
1166

1167 1168
	spin_lock_init(&drv->dynids.lock);
	INIT_LIST_HEAD(&drv->dynids.list);
L
Linus Torvalds 已提交
1169 1170 1171

	/* register with core */
	error = driver_register(&drv->driver);
1172
	if (error)
C
Chris Wright 已提交
1173
		goto out;
L
Linus Torvalds 已提交
1174

1175
	error = pci_create_newid_files(drv);
1176
	if (error)
C
Chris Wright 已提交
1177 1178
		goto out_newid;
out:
L
Linus Torvalds 已提交
1179
	return error;
C
Chris Wright 已提交
1180 1181 1182 1183

out_newid:
	driver_unregister(&drv->driver);
	goto out;
L
Linus Torvalds 已提交
1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198
}

/**
 * pci_unregister_driver - unregister a pci driver
 * @drv: the driver structure to unregister
 * 
 * Deletes the driver structure from the list of registered PCI drivers,
 * gives it a chance to clean up by calling its remove() function for
 * each device it was responsible for, and marks those devices as
 * driverless.
 */

void
pci_unregister_driver(struct pci_driver *drv)
{
1199
	pci_remove_newid_files(drv);
L
Linus Torvalds 已提交
1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231
	driver_unregister(&drv->driver);
	pci_free_dynids(drv);
}

static struct pci_driver pci_compat_driver = {
	.name = "compat"
};

/**
 * pci_dev_driver - get the pci_driver of a device
 * @dev: the device to query
 *
 * Returns the appropriate pci_driver structure or %NULL if there is no 
 * registered driver for the device.
 */
struct pci_driver *
pci_dev_driver(const struct pci_dev *dev)
{
	if (dev->driver)
		return dev->driver;
	else {
		int i;
		for(i=0; i<=PCI_ROM_RESOURCE; i++)
			if (dev->resource[i].flags & IORESOURCE_BUSY)
				return &pci_compat_driver;
	}
	return NULL;
}

/**
 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
 * @dev: the PCI device structure to match against
R
Randy Dunlap 已提交
1232
 * @drv: the device driver to search for matching PCI device id structures
L
Linus Torvalds 已提交
1233 1234
 * 
 * Used by a driver to check whether a PCI device present in the
R
Randy Dunlap 已提交
1235
 * system is in its list of supported devices. Returns the matching
L
Linus Torvalds 已提交
1236 1237
 * pci_device_id structure or %NULL if there is no match.
 */
1238
static int pci_bus_match(struct device *dev, struct device_driver *drv)
L
Linus Torvalds 已提交
1239
{
1240 1241
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *pci_drv = to_pci_driver(drv);
L
Linus Torvalds 已提交
1242 1243
	const struct pci_device_id *found_id;

1244
	found_id = pci_match_device(pci_drv, pci_dev);
L
Linus Torvalds 已提交
1245 1246 1247
	if (found_id)
		return 1;

1248
	return 0;
L
Linus Torvalds 已提交
1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283
}

/**
 * pci_dev_get - increments the reference count of the pci device structure
 * @dev: the device being referenced
 *
 * Each live reference to a device should be refcounted.
 *
 * Drivers for PCI devices should normally record such references in
 * their probe() methods, when they bind to a device, and release
 * them by calling pci_dev_put(), in their disconnect() methods.
 *
 * A pointer to the device with the incremented reference counter is returned.
 */
struct pci_dev *pci_dev_get(struct pci_dev *dev)
{
	if (dev)
		get_device(&dev->dev);
	return dev;
}

/**
 * pci_dev_put - release a use of the pci device structure
 * @dev: device that's been disconnected
 *
 * Must be called when a user of a device is finished with it.  When the last
 * user of the device calls this function, the memory of the device is freed.
 */
void pci_dev_put(struct pci_dev *dev)
{
	if (dev)
		put_device(&dev->dev);
}

#ifndef CONFIG_HOTPLUG
1284
int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
L
Linus Torvalds 已提交
1285 1286 1287 1288 1289 1290 1291 1292
{
	return -ENODEV;
}
#endif

struct bus_type pci_bus_type = {
	.name		= "pci",
	.match		= pci_bus_match,
1293
	.uevent		= pci_uevent,
1294 1295
	.probe		= pci_device_probe,
	.remove		= pci_device_remove,
L
Linus Torvalds 已提交
1296
	.shutdown	= pci_device_shutdown,
L
Linus Torvalds 已提交
1297
	.dev_attrs	= pci_dev_attrs,
A
Alex Chiang 已提交
1298
	.bus_attrs	= pci_bus_attrs,
1299
	.pm		= PCI_PM_OPS_PTR,
L
Linus Torvalds 已提交
1300 1301 1302 1303 1304 1305 1306 1307 1308
};

static int __init pci_driver_init(void)
{
	return bus_register(&pci_bus_type);
}

postcore_initcall(pci_driver_init);

T
Tejun Heo 已提交
1309
EXPORT_SYMBOL_GPL(pci_add_dynid);
1310
EXPORT_SYMBOL(pci_match_id);
1311
EXPORT_SYMBOL(__pci_register_driver);
L
Linus Torvalds 已提交
1312 1313 1314 1315 1316
EXPORT_SYMBOL(pci_unregister_driver);
EXPORT_SYMBOL(pci_dev_driver);
EXPORT_SYMBOL(pci_bus_type);
EXPORT_SYMBOL(pci_dev_get);
EXPORT_SYMBOL(pci_dev_put);