Linux Audio

Check our new training course

Loading...
v3.5.6
 
   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
  24struct 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 */
  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;
  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
  80static 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 * Dynamic device ID manipulation via sysfs is disabled for !CONFIG_HOTPLUG
  94 */
  95#ifdef CONFIG_HOTPLUG
  96/**
  97 * store_new_id - sysfs frontend to pci_add_dynid()
  98 * @driver: target device driver
  99 * @buf: buffer for scanning device ID data
 100 * @count: input size
 101 *
 102 * Allow PCI IDs to be added to an existing driver via sysfs.
 103 */
 104static ssize_t
 105store_new_id(struct device_driver *driver, const char *buf, size_t count)
 106{
 107	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,
 110		subdevice=PCI_ANY_ID, class=0, class_mask=0;
 111	unsigned long driver_data=0;
 112	int fields=0;
 113	int retval;
 114
 115	fields = sscanf(buf, "%x %x %x %x %x %x %lx",
 116			&vendor, &device, &subvendor, &subdevice,
 117			&class, &class_mask, &driver_data);
 118	if (fields < 2)
 119		return -EINVAL;
 120
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 121	/* Only accept driver_data values that match an existing id_table
 122	   entry */
 123	if (ids) {
 124		retval = -EINVAL;
 125		while (ids->vendor || ids->subvendor || ids->class_mask) {
 126			if (driver_data == ids->driver_data) {
 127				retval = 0;
 128				break;
 129			}
 130			ids++;
 131		}
 132		if (retval)	/* No match */
 133			return retval;
 134	}
 135
 136	retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
 137			       class, class_mask, driver_data);
 138	if (retval)
 139		return retval;
 140	return count;
 141}
 142static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
 143
 144/**
 145 * store_remove_id - remove a PCI device ID from this driver
 146 * @driver: target device driver
 147 * @buf: buffer for scanning device ID data
 148 * @count: input size
 149 *
 150 * Removes a dynamic pci device ID to this driver.
 151 */
 152static ssize_t
 153store_remove_id(struct device_driver *driver, const char *buf, size_t count)
 154{
 155	struct pci_dynid *dynid, *n;
 156	struct pci_driver *pdrv = to_pci_driver(driver);
 157	__u32 vendor, device, subvendor = PCI_ANY_ID,
 158		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
 159	int fields = 0;
 160	int retval = -ENODEV;
 161
 162	fields = sscanf(buf, "%x %x %x %x %x %x",
 163			&vendor, &device, &subvendor, &subdevice,
 164			&class, &class_mask);
 165	if (fields < 2)
 166		return -EINVAL;
 167
 168	spin_lock(&pdrv->dynids.lock);
 169	list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
 170		struct pci_device_id *id = &dynid->id;
 171		if ((id->vendor == vendor) &&
 172		    (id->device == device) &&
 173		    (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
 174		    (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
 175		    !((id->class ^ class) & class_mask)) {
 176			list_del(&dynid->node);
 177			kfree(dynid);
 178			retval = 0;
 179			break;
 180		}
 181	}
 182	spin_unlock(&pdrv->dynids.lock);
 183
 184	if (retval)
 185		return retval;
 186	return count;
 187}
 188static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id);
 189
 190static int
 191pci_create_newid_files(struct pci_driver *drv)
 192{
 193	int error = 0;
 194
 195	if (drv->probe != NULL) {
 196		error = driver_create_file(&drv->driver, &driver_attr_new_id);
 197		if (error == 0) {
 198			error = driver_create_file(&drv->driver,
 199					&driver_attr_remove_id);
 200			if (error)
 201				driver_remove_file(&drv->driver,
 202						&driver_attr_new_id);
 203		}
 204	}
 205	return error;
 206}
 
 207
 208static void pci_remove_newid_files(struct pci_driver *drv)
 209{
 210	driver_remove_file(&drv->driver, &driver_attr_remove_id);
 211	driver_remove_file(&drv->driver, &driver_attr_new_id);
 212}
 213#else /* !CONFIG_HOTPLUG */
 214static inline int pci_create_newid_files(struct pci_driver *drv)
 215{
 216	return 0;
 217}
 218static inline void pci_remove_newid_files(struct pci_driver *drv) {}
 219#endif
 220
 221/**
 222 * pci_match_id - See if a pci device matches a given pci_id table
 223 * @ids: array of PCI device id structures to search in
 224 * @dev: the PCI device structure to match against.
 225 *
 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
 228 * pci_device_id structure or %NULL if there is no match.
 229 *
 230 * Deprecated, don't use this as it will not catch any dynamic ids
 231 * that a driver might want to check for.
 232 */
 233const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
 234					 struct pci_dev *dev)
 235{
 236	if (ids) {
 237		while (ids->vendor || ids->subvendor || ids->class_mask) {
 238			if (pci_match_one_device(ids, dev))
 239				return ids;
 240			ids++;
 241		}
 242	}
 243	return NULL;
 244}
 
 
 
 
 
 
 
 
 245
 246/**
 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 * Used by a driver to check whether a PCI device present in the
 252 * system is in its list of supported devices.  Returns the matching
 253 * pci_device_id structure or %NULL if there is no match.
 254 */
 255static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
 256						    struct pci_dev *dev)
 257{
 258	struct pci_dynid *dynid;
 
 
 
 
 
 259
 260	/* Look at the dynamic ids first, before the static ones */
 261	spin_lock(&drv->dynids.lock);
 262	list_for_each_entry(dynid, &drv->dynids.list, node) {
 263		if (pci_match_one_device(&dynid->id, dev)) {
 264			spin_unlock(&drv->dynids.lock);
 265			return &dynid->id;
 266		}
 267	}
 268	spin_unlock(&drv->dynids.lock);
 269
 270	return pci_match_id(drv->id_table, dev);
 
 
 
 
 
 
 
 271}
 272
 273struct drv_dev_and_id {
 274	struct pci_driver *drv;
 275	struct pci_dev *dev;
 276	const struct pci_device_id *id;
 277};
 278
 279static long local_pci_probe(void *_ddi)
 280{
 281	struct drv_dev_and_id *ddi = _ddi;
 282	struct device *dev = &ddi->dev->dev;
 
 
 283	int rc;
 284
 285	/* Unbound PCI devices are always set to disabled and suspended.
 286	 * During probe, the device is set to enabled and active and the
 287	 * usage count is incremented.  If the driver supports runtime PM,
 288	 * it should call pm_runtime_put_noidle() in its probe routine and
 289	 * pm_runtime_get_noresume() in its remove routine.
 290	 */
 291	pm_runtime_get_noresume(dev);
 292	pm_runtime_set_active(dev);
 293	pm_runtime_enable(dev);
 294
 295	rc = ddi->drv->probe(ddi->dev, ddi->id);
 296	if (rc) {
 297		pm_runtime_disable(dev);
 298		pm_runtime_set_suspended(dev);
 299		pm_runtime_put_noidle(dev);
 
 
 
 300	}
 301	return rc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 302}
 303
 304static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
 305			  const struct pci_device_id *id)
 306{
 307	int error, node;
 
 308	struct drv_dev_and_id ddi = { drv, dev, id };
 309
 310	/* Execute driver initialization on node where the device's
 311	   bus is attached to.  This way the driver likely allocates
 312	   its local memory on the right node without any need to
 313	   change it. */
 
 314	node = dev_to_node(&dev->dev);
 315	if (node >= 0) {
 316		int cpu;
 317
 318		get_online_cpus();
 319		cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
 320		if (cpu < nr_cpu_ids)
 321			error = work_on_cpu(cpu, local_pci_probe, &ddi);
 322		else
 323			error = local_pci_probe(&ddi);
 324		put_online_cpus();
 325	} else
 
 
 
 
 
 
 
 
 326		error = local_pci_probe(&ddi);
 
 
 
 327	return error;
 328}
 329
 330/**
 331 * __pci_device_probe - check if a driver wants to claim a specific PCI device
 332 * @drv: driver to call to check if it wants the PCI device
 333 * @pci_dev: PCI device being probed
 334 * 
 335 * returns 0 on success, else error.
 336 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
 337 */
 338static int
 339__pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
 340{
 341	const struct pci_device_id *id;
 342	int error = 0;
 343
 344	if (!pci_dev->driver && drv->probe) {
 345		error = -ENODEV;
 346
 347		id = pci_match_device(drv, pci_dev);
 348		if (id)
 349			error = pci_call_probe(drv, pci_dev, id);
 350		if (error >= 0) {
 351			pci_dev->driver = drv;
 352			error = 0;
 353		}
 354	}
 355	return error;
 356}
 357
 358static int pci_device_probe(struct device * dev)
 359{
 360	int error = 0;
 361	struct pci_driver *drv;
 362	struct pci_dev *pci_dev;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 363
 364	drv = to_pci_driver(dev->driver);
 365	pci_dev = to_pci_dev(dev);
 366	pci_dev_get(pci_dev);
 367	error = __pci_device_probe(drv, pci_dev);
 368	if (error)
 
 369		pci_dev_put(pci_dev);
 
 370
 371	return error;
 372}
 373
 374static int pci_device_remove(struct device * dev)
 375{
 376	struct pci_dev * pci_dev = to_pci_dev(dev);
 377	struct pci_driver * drv = pci_dev->driver;
 378
 379	if (drv) {
 380		if (drv->remove) {
 381			pm_runtime_get_sync(dev);
 382			drv->remove(pci_dev);
 383			pm_runtime_put_noidle(dev);
 384		}
 
 385		pci_dev->driver = NULL;
 
 386	}
 387
 388	/* Undo the runtime PM settings in local_pci_probe() */
 389	pm_runtime_disable(dev);
 390	pm_runtime_set_suspended(dev);
 391	pm_runtime_put_noidle(dev);
 392
 393	/*
 394	 * If the device is still on, set the power state as "unknown",
 395	 * since it might change by the next time we load the driver.
 396	 */
 397	if (pci_dev->current_state == PCI_D0)
 398		pci_dev->current_state = PCI_UNKNOWN;
 399
 400	/*
 401	 * We would love to complain here if pci_dev->is_enabled is set, that
 402	 * the driver should have called pci_disable_device(), but the
 403	 * unfortunate fact is there are too many odd BIOS and bridge setups
 404	 * that don't like drivers doing that all of the time.  
 405	 * Oh well, we can dream of sane hardware when we sleep, no matter how
 406	 * horrible the crap we have to deal with is when we are awake...
 407	 */
 408
 409	pci_dev_put(pci_dev);
 410	return 0;
 411}
 412
 413static void pci_device_shutdown(struct device *dev)
 414{
 415	struct pci_dev *pci_dev = to_pci_dev(dev);
 416	struct pci_driver *drv = pci_dev->driver;
 417
 
 
 418	if (drv && drv->shutdown)
 419		drv->shutdown(pci_dev);
 420	pci_msi_shutdown(pci_dev);
 421	pci_msix_shutdown(pci_dev);
 422
 423	/*
 424	 * Turn off Bus Master bit on the device to tell it to not
 425	 * continue to do DMA
 426	 */
 427	pci_disable_device(pci_dev);
 428
 429	/*
 430	 * Devices may be enabled to wake up by runtime PM, but they need not
 431	 * be supposed to wake up the system from its "power off" state (e.g.
 432	 * ACPI S5).  Therefore disable wakeup for all devices that aren't
 433	 * supposed to wake up the system at this point.  The state argument
 434	 * will be ignored by pci_enable_wake().
 435	 */
 436	if (!device_may_wakeup(dev))
 437		pci_enable_wake(pci_dev, PCI_UNKNOWN, false);
 438}
 439
 440#ifdef CONFIG_PM
 441
 442/* Auxiliary functions used for system resume and run-time resume. */
 443
 444/**
 445 * pci_restore_standard_config - restore standard config registers of PCI device
 446 * @pci_dev: PCI device to handle
 447 */
 448static int pci_restore_standard_config(struct pci_dev *pci_dev)
 449{
 450	pci_update_current_state(pci_dev, PCI_UNKNOWN);
 451
 452	if (pci_dev->current_state != PCI_D0) {
 453		int error = pci_set_power_state(pci_dev, PCI_D0);
 454		if (error)
 455			return error;
 456	}
 457
 458	pci_restore_state(pci_dev);
 
 459	return 0;
 460}
 461
 462static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
 463{
 464	pci_restore_standard_config(pci_dev);
 465	pci_fixup_device(pci_fixup_resume_early, pci_dev);
 466}
 467
 468#endif
 469
 470#ifdef CONFIG_PM_SLEEP
 471
 
 
 
 
 
 
 
 
 472/*
 473 * Default "suspend" method for devices that have no driver provided suspend,
 474 * or not even a driver at all (second part).
 475 */
 476static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
 477{
 478	/*
 479	 * mark its power state as "unknown", since we don't know if
 480	 * e.g. the BIOS will change its device state when we suspend.
 481	 */
 482	if (pci_dev->current_state == PCI_D0)
 483		pci_dev->current_state = PCI_UNKNOWN;
 484}
 485
 486/*
 487 * Default "resume" method for devices that have no driver provided resume,
 488 * or not even a driver at all (second part).
 489 */
 490static int pci_pm_reenable_device(struct pci_dev *pci_dev)
 491{
 492	int retval;
 493
 494	/* if the device was enabled before suspend, reenable */
 495	retval = pci_reenable_device(pci_dev);
 496	/*
 497	 * if the device was busmaster before the suspend, make it busmaster
 498	 * again
 499	 */
 500	if (pci_dev->is_busmaster)
 501		pci_set_master(pci_dev);
 502
 503	return retval;
 504}
 505
 506static int pci_legacy_suspend(struct device *dev, pm_message_t state)
 507{
 508	struct pci_dev * pci_dev = to_pci_dev(dev);
 509	struct pci_driver * drv = pci_dev->driver;
 510
 511	if (drv && drv->suspend) {
 512		pci_power_t prev = pci_dev->current_state;
 513		int error;
 514
 515		error = drv->suspend(pci_dev, state);
 516		suspend_report_result(drv->suspend, error);
 517		if (error)
 518			return error;
 519
 520		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 521		    && pci_dev->current_state != PCI_UNKNOWN) {
 522			WARN_ONCE(pci_dev->current_state != prev,
 523				"PCI PM: Device state not saved by %pF\n",
 524				drv->suspend);
 525		}
 526	}
 527
 528	pci_fixup_device(pci_fixup_suspend, pci_dev);
 529
 530	return 0;
 531}
 532
 533static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
 534{
 535	struct pci_dev * pci_dev = to_pci_dev(dev);
 536	struct pci_driver * drv = pci_dev->driver;
 537
 538	if (drv && drv->suspend_late) {
 539		pci_power_t prev = pci_dev->current_state;
 540		int error;
 541
 542		error = drv->suspend_late(pci_dev, state);
 543		suspend_report_result(drv->suspend_late, error);
 544		if (error)
 545			return error;
 546
 547		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 548		    && pci_dev->current_state != PCI_UNKNOWN) {
 549			WARN_ONCE(pci_dev->current_state != prev,
 550				"PCI PM: Device state not saved by %pF\n",
 551				drv->suspend_late);
 552			return 0;
 553		}
 554	}
 555
 556	if (!pci_dev->state_saved)
 557		pci_save_state(pci_dev);
 558
 559	pci_pm_set_unknown_state(pci_dev);
 560
 561	return 0;
 562}
 563
 564static int pci_legacy_resume_early(struct device *dev)
 565{
 566	struct pci_dev * pci_dev = to_pci_dev(dev);
 567	struct pci_driver * drv = pci_dev->driver;
 568
 569	return drv && drv->resume_early ?
 570			drv->resume_early(pci_dev) : 0;
 571}
 572
 573static int pci_legacy_resume(struct device *dev)
 574{
 575	struct pci_dev * pci_dev = to_pci_dev(dev);
 576	struct pci_driver * drv = pci_dev->driver;
 577
 578	pci_fixup_device(pci_fixup_resume, pci_dev);
 579
 580	return drv && drv->resume ?
 581			drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
 582}
 583
 584/* Auxiliary functions used by the new power management framework */
 585
 586static void pci_pm_default_resume(struct pci_dev *pci_dev)
 587{
 588	pci_fixup_device(pci_fixup_resume, pci_dev);
 589
 590	if (!pci_is_bridge(pci_dev))
 591		pci_enable_wake(pci_dev, PCI_D0, false);
 592}
 593
 594static void pci_pm_default_suspend(struct pci_dev *pci_dev)
 595{
 596	/* Disable non-bridge devices without PM support */
 597	if (!pci_is_bridge(pci_dev))
 598		pci_disable_enabled_device(pci_dev);
 599}
 600
 601static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
 602{
 603	struct pci_driver *drv = pci_dev->driver;
 604	bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
 605		|| drv->resume_early);
 606
 607	/*
 608	 * Legacy PM support is used by default, so warn if the new framework is
 609	 * supported as well.  Drivers are supposed to support either the
 610	 * former, or the latter, but not both at the same time.
 611	 */
 612	WARN(ret && drv->driver.pm, "driver %s device %04x:%04x\n",
 613		drv->name, pci_dev->vendor, pci_dev->device);
 614
 615	return ret;
 616}
 617
 618/* New power management framework */
 619
 620static int pci_pm_prepare(struct device *dev)
 621{
 622	struct device_driver *drv = dev->driver;
 623	int error = 0;
 624
 625	/*
 626	 * If a PCI device configured to wake up the system from sleep states
 627	 * has been suspended at run time and there's a resume request pending
 628	 * for it, this is equivalent to the device signaling wakeup, so the
 629	 * system suspend operation should be aborted.
 630	 */
 631	pm_runtime_get_noresume(dev);
 632	if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
 633		pm_wakeup_event(dev, 0);
 634
 635	if (pm_wakeup_pending()) {
 636		pm_runtime_put_sync(dev);
 637		return -EBUSY;
 638	}
 
 
 639
 640	/*
 641	 * PCI devices suspended at run time need to be resumed at this
 642	 * point, because in general it is necessary to reconfigure them for
 643	 * system suspend.  Namely, if the device is supposed to wake up the
 644	 * system from the sleep state, we may need to reconfigure it for this
 645	 * purpose.  In turn, if the device is not supposed to wake up the
 646	 * system from the sleep state, we'll have to prevent it from signaling
 647	 * wake-up.
 648	 */
 649	pm_runtime_resume(dev);
 650
 651	if (drv && drv->pm && drv->pm->prepare)
 652		error = drv->pm->prepare(dev);
 653
 654	return error;
 655}
 656
 657static void pci_pm_complete(struct device *dev)
 658{
 659	struct device_driver *drv = dev->driver;
 660
 661	if (drv && drv->pm && drv->pm->complete)
 662		drv->pm->complete(dev);
 663
 664	pm_runtime_put_sync(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 665}
 666
 667#else /* !CONFIG_PM_SLEEP */
 668
 669#define pci_pm_prepare	NULL
 670#define pci_pm_complete	NULL
 671
 672#endif /* !CONFIG_PM_SLEEP */
 673
 674#ifdef CONFIG_SUSPEND
 
 
 
 
 
 
 
 
 
 
 
 
 675
 676static int pci_pm_suspend(struct device *dev)
 677{
 678	struct pci_dev *pci_dev = to_pci_dev(dev);
 679	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 680
 
 
 681	if (pci_has_legacy_pm_support(pci_dev))
 682		return pci_legacy_suspend(dev, PMSG_SUSPEND);
 683
 684	if (!pm) {
 685		pci_pm_default_suspend(pci_dev);
 686		goto Fixup;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 687	}
 688
 689	if (pm->suspend) {
 690		pci_power_t prev = pci_dev->current_state;
 691		int error;
 692
 693		error = pm->suspend(dev);
 694		suspend_report_result(pm->suspend, error);
 695		if (error)
 696			return error;
 697
 698		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 699		    && pci_dev->current_state != PCI_UNKNOWN) {
 700			WARN_ONCE(pci_dev->current_state != prev,
 701				"PCI PM: State of device not saved by %pF\n",
 702				pm->suspend);
 703		}
 704	}
 705
 706 Fixup:
 707	pci_fixup_device(pci_fixup_suspend, pci_dev);
 708
 709	return 0;
 710}
 711
 
 
 
 
 
 
 
 
 
 
 712static int pci_pm_suspend_noirq(struct device *dev)
 713{
 714	struct pci_dev *pci_dev = to_pci_dev(dev);
 715	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 716
 
 
 
 717	if (pci_has_legacy_pm_support(pci_dev))
 718		return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
 719
 720	if (!pm) {
 721		pci_save_state(pci_dev);
 722		return 0;
 723	}
 724
 725	if (pm->suspend_noirq) {
 726		pci_power_t prev = pci_dev->current_state;
 727		int error;
 728
 729		error = pm->suspend_noirq(dev);
 730		suspend_report_result(pm->suspend_noirq, error);
 731		if (error)
 732			return error;
 733
 734		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 735		    && pci_dev->current_state != PCI_UNKNOWN) {
 736			WARN_ONCE(pci_dev->current_state != prev,
 737				"PCI PM: State of device not saved by %pF\n",
 738				pm->suspend_noirq);
 739			return 0;
 740		}
 741	}
 742
 743	if (!pci_dev->state_saved) {
 
 
 
 
 
 
 
 
 
 
 
 744		pci_save_state(pci_dev);
 745		if (!pci_is_bridge(pci_dev))
 746			pci_prepare_to_sleep(pci_dev);
 747	}
 748
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 749	pci_pm_set_unknown_state(pci_dev);
 750
 751	/*
 752	 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
 753	 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
 754	 * hasn't been quiesced and tries to turn it off.  If the controller
 755	 * is already in D3, this can hang or cause memory corruption.
 756	 *
 757	 * Since the value of the COMMAND register doesn't matter once the
 758	 * device has been suspended, we can safely set it to 0 here.
 759	 */
 760	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
 761		pci_write_config_word(pci_dev, PCI_COMMAND, 0);
 762
 
 
 
 
 
 
 
 
 
 
 
 
 
 763	return 0;
 764}
 765
 766static int pci_pm_resume_noirq(struct device *dev)
 767{
 768	struct pci_dev *pci_dev = to_pci_dev(dev);
 769	struct device_driver *drv = dev->driver;
 770	int error = 0;
 
 771
 772	pci_pm_default_resume_early(pci_dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 773
 774	if (pci_has_legacy_pm_support(pci_dev))
 775		return pci_legacy_resume_early(dev);
 776
 777	if (drv && drv->pm && drv->pm->resume_noirq)
 778		error = drv->pm->resume_noirq(dev);
 779
 780	return error;
 
 
 
 
 
 
 
 
 781}
 782
 783static int pci_pm_resume(struct device *dev)
 784{
 785	struct pci_dev *pci_dev = to_pci_dev(dev);
 786	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 787	int error = 0;
 788
 789	/*
 790	 * This is necessary for the suspend error path in which resume is
 791	 * called without restoring the standard config registers of the device.
 792	 */
 793	if (pci_dev->state_saved)
 794		pci_restore_standard_config(pci_dev);
 795
 796	if (pci_has_legacy_pm_support(pci_dev))
 797		return pci_legacy_resume(dev);
 798
 799	pci_pm_default_resume(pci_dev);
 800
 801	if (pm) {
 802		if (pm->resume)
 803			error = pm->resume(dev);
 804	} else {
 805		pci_pm_reenable_device(pci_dev);
 806	}
 807
 808	return error;
 809}
 810
 811#else /* !CONFIG_SUSPEND */
 812
 813#define pci_pm_suspend		NULL
 
 814#define pci_pm_suspend_noirq	NULL
 815#define pci_pm_resume		NULL
 
 816#define pci_pm_resume_noirq	NULL
 817
 818#endif /* !CONFIG_SUSPEND */
 819
 820#ifdef CONFIG_HIBERNATE_CALLBACKS
 821
 
 
 
 
 
 
 822static int pci_pm_freeze(struct device *dev)
 823{
 824	struct pci_dev *pci_dev = to_pci_dev(dev);
 825	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 826
 827	if (pci_has_legacy_pm_support(pci_dev))
 828		return pci_legacy_suspend(dev, PMSG_FREEZE);
 829
 830	if (!pm) {
 831		pci_pm_default_suspend(pci_dev);
 832		return 0;
 833	}
 834
 
 
 
 
 
 
 
 
 
 
 
 835	if (pm->freeze) {
 836		int error;
 837
 838		error = pm->freeze(dev);
 839		suspend_report_result(pm->freeze, error);
 840		if (error)
 841			return error;
 842	}
 843
 844	return 0;
 845}
 846
 847static int pci_pm_freeze_noirq(struct device *dev)
 848{
 849	struct pci_dev *pci_dev = to_pci_dev(dev);
 850	struct device_driver *drv = dev->driver;
 851
 852	if (pci_has_legacy_pm_support(pci_dev))
 853		return pci_legacy_suspend_late(dev, PMSG_FREEZE);
 854
 855	if (drv && drv->pm && drv->pm->freeze_noirq) {
 856		int error;
 857
 858		error = drv->pm->freeze_noirq(dev);
 859		suspend_report_result(drv->pm->freeze_noirq, error);
 860		if (error)
 861			return error;
 862	}
 863
 864	if (!pci_dev->state_saved)
 865		pci_save_state(pci_dev);
 866
 867	pci_pm_set_unknown_state(pci_dev);
 868
 
 
 
 869	return 0;
 870}
 871
 872static int pci_pm_thaw_noirq(struct device *dev)
 873{
 874	struct pci_dev *pci_dev = to_pci_dev(dev);
 875	struct device_driver *drv = dev->driver;
 876	int error = 0;
 877
 878	if (pci_has_legacy_pm_support(pci_dev))
 879		return pci_legacy_resume_early(dev);
 
 
 
 880
 881	pci_update_current_state(pci_dev, PCI_D0);
 
 
 
 
 
 
 
 
 
 
 882
 883	if (drv && drv->pm && drv->pm->thaw_noirq)
 884		error = drv->pm->thaw_noirq(dev);
 885
 886	return error;
 
 
 
 887}
 888
 889static int pci_pm_thaw(struct device *dev)
 890{
 891	struct pci_dev *pci_dev = to_pci_dev(dev);
 892	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 893	int error = 0;
 894
 895	if (pci_has_legacy_pm_support(pci_dev))
 896		return pci_legacy_resume(dev);
 897
 898	if (pm) {
 899		if (pm->thaw)
 900			error = pm->thaw(dev);
 901	} else {
 902		pci_pm_reenable_device(pci_dev);
 903	}
 904
 905	pci_dev->state_saved = false;
 906
 907	return error;
 908}
 909
 910static int pci_pm_poweroff(struct device *dev)
 911{
 912	struct pci_dev *pci_dev = to_pci_dev(dev);
 913	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 914
 915	if (pci_has_legacy_pm_support(pci_dev))
 916		return pci_legacy_suspend(dev, PMSG_HIBERNATE);
 917
 918	if (!pm) {
 919		pci_pm_default_suspend(pci_dev);
 920		goto Fixup;
 
 
 
 
 
 
 
 
 
 921	}
 922
 923	if (pm->poweroff) {
 924		int error;
 925
 926		error = pm->poweroff(dev);
 927		suspend_report_result(pm->poweroff, error);
 928		if (error)
 929			return error;
 930	}
 931
 932 Fixup:
 933	pci_fixup_device(pci_fixup_suspend, pci_dev);
 934
 935	return 0;
 936}
 937
 
 
 
 
 
 
 
 
 
 
 938static int pci_pm_poweroff_noirq(struct device *dev)
 939{
 940	struct pci_dev *pci_dev = to_pci_dev(dev);
 941	struct device_driver *drv = dev->driver;
 942
 943	if (pci_has_legacy_pm_support(to_pci_dev(dev)))
 
 
 
 944		return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
 945
 946	if (!drv || !drv->pm)
 
 947		return 0;
 
 948
 949	if (drv->pm->poweroff_noirq) {
 950		int error;
 951
 952		error = drv->pm->poweroff_noirq(dev);
 953		suspend_report_result(drv->pm->poweroff_noirq, error);
 954		if (error)
 955			return error;
 956	}
 957
 958	if (!pci_dev->state_saved && !pci_is_bridge(pci_dev))
 959		pci_prepare_to_sleep(pci_dev);
 960
 961	/*
 962	 * The reason for doing this here is the same as for the analogous code
 963	 * in pci_pm_suspend_noirq().
 964	 */
 965	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
 966		pci_write_config_word(pci_dev, PCI_COMMAND, 0);
 967
 
 
 
 
 
 968	return 0;
 969}
 970
 971static int pci_pm_restore_noirq(struct device *dev)
 972{
 973	struct pci_dev *pci_dev = to_pci_dev(dev);
 974	struct device_driver *drv = dev->driver;
 975	int error = 0;
 
 
 
 
 
 
 976
 977	pci_pm_default_resume_early(pci_dev);
 
 978
 979	if (pci_has_legacy_pm_support(pci_dev))
 980		return pci_legacy_resume_early(dev);
 981
 982	if (drv && drv->pm && drv->pm->restore_noirq)
 983		error = drv->pm->restore_noirq(dev);
 984
 985	return error;
 986}
 987
 988static int pci_pm_restore(struct device *dev)
 989{
 990	struct pci_dev *pci_dev = to_pci_dev(dev);
 991	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 992	int error = 0;
 993
 994	/*
 995	 * This is necessary for the hibernation error path in which restore is
 996	 * called without restoring the standard config registers of the device.
 997	 */
 998	if (pci_dev->state_saved)
 999		pci_restore_standard_config(pci_dev);
1000
1001	if (pci_has_legacy_pm_support(pci_dev))
1002		return pci_legacy_resume(dev);
1003
1004	pci_pm_default_resume(pci_dev);
1005
1006	if (pm) {
1007		if (pm->restore)
1008			error = pm->restore(dev);
1009	} else {
1010		pci_pm_reenable_device(pci_dev);
1011	}
1012
1013	return error;
1014}
1015
1016#else /* !CONFIG_HIBERNATE_CALLBACKS */
1017
1018#define pci_pm_freeze		NULL
1019#define pci_pm_freeze_noirq	NULL
1020#define pci_pm_thaw		NULL
1021#define pci_pm_thaw_noirq	NULL
1022#define pci_pm_poweroff		NULL
 
1023#define pci_pm_poweroff_noirq	NULL
1024#define pci_pm_restore		NULL
1025#define pci_pm_restore_noirq	NULL
1026
1027#endif /* !CONFIG_HIBERNATE_CALLBACKS */
1028
1029#ifdef CONFIG_PM_RUNTIME
1030
1031static int pci_pm_runtime_suspend(struct device *dev)
1032{
1033	struct pci_dev *pci_dev = to_pci_dev(dev);
1034	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1035	pci_power_t prev = pci_dev->current_state;
1036	int error;
1037
1038	if (!pm || !pm->runtime_suspend)
1039		return -ENOSYS;
 
 
 
 
 
 
 
1040
1041	error = pm->runtime_suspend(dev);
1042	suspend_report_result(pm->runtime_suspend, error);
1043	if (error)
1044		return error;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1045
1046	pci_fixup_device(pci_fixup_suspend, pci_dev);
1047
1048	if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 
1049	    && pci_dev->current_state != PCI_UNKNOWN) {
1050		WARN_ONCE(pci_dev->current_state != prev,
1051			"PCI PM: State of device not saved by %pF\n",
1052			pm->runtime_suspend);
1053		return 0;
1054	}
1055
1056	if (!pci_dev->state_saved)
1057		pci_save_state(pci_dev);
1058
1059	pci_finish_runtime_suspend(pci_dev);
1060
1061	return 0;
1062}
1063
1064static int pci_pm_runtime_resume(struct device *dev)
1065{
1066	struct pci_dev *pci_dev = to_pci_dev(dev);
1067	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 
 
1068
1069	if (!pm || !pm->runtime_resume)
1070		return -ENOSYS;
 
 
 
 
1071
1072	pci_pm_default_resume_early(pci_dev);
1073	__pci_enable_wake(pci_dev, PCI_D0, true, false);
1074	pci_fixup_device(pci_fixup_resume, pci_dev);
 
 
 
 
 
 
 
 
 
 
1075
1076	return pm->runtime_resume(dev);
1077}
1078
1079static int pci_pm_runtime_idle(struct device *dev)
1080{
 
1081	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1082
 
 
 
 
 
 
 
1083	if (!pm)
1084		return -ENOSYS;
1085
1086	if (pm->runtime_idle) {
1087		int ret = pm->runtime_idle(dev);
1088		if (ret)
1089			return ret;
1090	}
1091
1092	pm_runtime_suspend(dev);
1093
1094	return 0;
1095}
1096
1097#else /* !CONFIG_PM_RUNTIME */
1098
1099#define pci_pm_runtime_suspend	NULL
1100#define pci_pm_runtime_resume	NULL
1101#define pci_pm_runtime_idle	NULL
1102
1103#endif /* !CONFIG_PM_RUNTIME */
1104
1105#ifdef CONFIG_PM
1106
1107const struct dev_pm_ops pci_dev_pm_ops = {
1108	.prepare = pci_pm_prepare,
1109	.complete = pci_pm_complete,
1110	.suspend = pci_pm_suspend,
 
1111	.resume = pci_pm_resume,
 
1112	.freeze = pci_pm_freeze,
1113	.thaw = pci_pm_thaw,
1114	.poweroff = pci_pm_poweroff,
 
1115	.restore = pci_pm_restore,
1116	.suspend_noirq = pci_pm_suspend_noirq,
1117	.resume_noirq = pci_pm_resume_noirq,
1118	.freeze_noirq = pci_pm_freeze_noirq,
1119	.thaw_noirq = pci_pm_thaw_noirq,
1120	.poweroff_noirq = pci_pm_poweroff_noirq,
1121	.restore_noirq = pci_pm_restore_noirq,
1122	.runtime_suspend = pci_pm_runtime_suspend,
1123	.runtime_resume = pci_pm_runtime_resume,
1124	.runtime_idle = pci_pm_runtime_idle,
1125};
1126
1127#define PCI_PM_OPS_PTR	(&pci_dev_pm_ops)
1128
1129#else /* !COMFIG_PM_OPS */
 
 
 
 
1130
1131#define PCI_PM_OPS_PTR	NULL
1132
1133#endif /* !COMFIG_PM_OPS */
1134
1135/**
1136 * __pci_register_driver - register a new pci driver
1137 * @drv: the driver structure to register
1138 * @owner: owner module of drv
1139 * @mod_name: module name string
1140 * 
1141 * Adds the driver structure to the list of registered drivers.
1142 * Returns a negative value on error, otherwise 0. 
1143 * If no error occurred, the driver remains registered even if 
1144 * no device was claimed during registration.
1145 */
1146int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1147			  const char *mod_name)
1148{
1149	int error;
1150
1151	/* initialize common driver fields */
1152	drv->driver.name = drv->name;
1153	drv->driver.bus = &pci_bus_type;
1154	drv->driver.owner = owner;
1155	drv->driver.mod_name = mod_name;
 
1156
1157	spin_lock_init(&drv->dynids.lock);
1158	INIT_LIST_HEAD(&drv->dynids.list);
1159
1160	/* register with core */
1161	error = driver_register(&drv->driver);
1162	if (error)
1163		goto out;
1164
1165	error = pci_create_newid_files(drv);
1166	if (error)
1167		goto out_newid;
1168out:
1169	return error;
1170
1171out_newid:
1172	driver_unregister(&drv->driver);
1173	goto out;
1174}
 
1175
1176/**
1177 * pci_unregister_driver - unregister a pci driver
1178 * @drv: the driver structure to unregister
1179 * 
1180 * Deletes the driver structure from the list of registered PCI drivers,
1181 * gives it a chance to clean up by calling its remove() function for
1182 * each device it was responsible for, and marks those devices as
1183 * driverless.
1184 */
1185
1186void
1187pci_unregister_driver(struct pci_driver *drv)
1188{
1189	pci_remove_newid_files(drv);
1190	driver_unregister(&drv->driver);
1191	pci_free_dynids(drv);
1192}
 
1193
1194static struct pci_driver pci_compat_driver = {
1195	.name = "compat"
1196};
1197
1198/**
1199 * pci_dev_driver - get the pci_driver of a device
1200 * @dev: the device to query
1201 *
1202 * Returns the appropriate pci_driver structure or %NULL if there is no 
1203 * registered driver for the device.
1204 */
1205struct pci_driver *
1206pci_dev_driver(const struct pci_dev *dev)
1207{
1208	if (dev->driver)
1209		return dev->driver;
1210	else {
1211		int i;
1212		for(i=0; i<=PCI_ROM_RESOURCE; i++)
1213			if (dev->resource[i].flags & IORESOURCE_BUSY)
1214				return &pci_compat_driver;
1215	}
1216	return NULL;
1217}
 
1218
1219/**
1220 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1221 * @dev: the PCI device structure to match against
1222 * @drv: the device driver to search for matching PCI device id structures
1223 * 
1224 * Used by a driver to check whether a PCI device present in the
1225 * system is in its list of supported devices. Returns the matching
1226 * pci_device_id structure or %NULL if there is no match.
1227 */
1228static int pci_bus_match(struct device *dev, struct device_driver *drv)
1229{
1230	struct pci_dev *pci_dev = to_pci_dev(dev);
1231	struct pci_driver *pci_drv = to_pci_driver(drv);
1232	const struct pci_device_id *found_id;
1233
 
 
 
 
1234	found_id = pci_match_device(pci_drv, pci_dev);
1235	if (found_id)
1236		return 1;
1237
1238	return 0;
1239}
1240
1241/**
1242 * pci_dev_get - increments the reference count of the pci device structure
1243 * @dev: the device being referenced
1244 *
1245 * Each live reference to a device should be refcounted.
1246 *
1247 * Drivers for PCI devices should normally record such references in
1248 * their probe() methods, when they bind to a device, and release
1249 * them by calling pci_dev_put(), in their disconnect() methods.
1250 *
1251 * A pointer to the device with the incremented reference counter is returned.
1252 */
1253struct pci_dev *pci_dev_get(struct pci_dev *dev)
1254{
1255	if (dev)
1256		get_device(&dev->dev);
1257	return dev;
1258}
 
1259
1260/**
1261 * pci_dev_put - release a use of the pci device structure
1262 * @dev: device that's been disconnected
1263 *
1264 * Must be called when a user of a device is finished with it.  When the last
1265 * user of the device calls this function, the memory of the device is freed.
1266 */
1267void pci_dev_put(struct pci_dev *dev)
1268{
1269	if (dev)
1270		put_device(&dev->dev);
1271}
 
1272
1273#ifndef CONFIG_HOTPLUG
1274int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1275{
1276	return -ENODEV;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1277}
1278#endif
1279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1280struct bus_type pci_bus_type = {
1281	.name		= "pci",
1282	.match		= pci_bus_match,
1283	.uevent		= pci_uevent,
1284	.probe		= pci_device_probe,
1285	.remove		= pci_device_remove,
1286	.shutdown	= pci_device_shutdown,
1287	.dev_attrs	= pci_dev_attrs,
1288	.bus_attrs	= pci_bus_attrs,
 
1289	.pm		= PCI_PM_OPS_PTR,
 
 
1290};
 
1291
1292static int __init pci_driver_init(void)
 
1293{
1294	return bus_register(&pci_bus_type);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1295}
1296
1297postcore_initcall(pci_driver_init);
 
 
 
 
 
1298
1299EXPORT_SYMBOL_GPL(pci_add_dynid);
1300EXPORT_SYMBOL(pci_match_id);
1301EXPORT_SYMBOL(__pci_register_driver);
1302EXPORT_SYMBOL(pci_unregister_driver);
1303EXPORT_SYMBOL(pci_dev_driver);
1304EXPORT_SYMBOL(pci_bus_type);
1305EXPORT_SYMBOL(pci_dev_get);
1306EXPORT_SYMBOL(pci_dev_put);
 
 
 
 
 
 
 
 
 
v5.9
   1// SPDX-License-Identifier: GPL-2.0
   2/*
 
 
   3 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com>
   4 * (C) Copyright 2007 Novell Inc.
 
 
 
   5 */
   6
   7#include <linux/pci.h>
   8#include <linux/module.h>
   9#include <linux/init.h>
  10#include <linux/device.h>
  11#include <linux/mempolicy.h>
  12#include <linux/string.h>
  13#include <linux/slab.h>
  14#include <linux/sched.h>
  15#include <linux/sched/isolation.h>
  16#include <linux/cpu.h>
  17#include <linux/pm_runtime.h>
  18#include <linux/suspend.h>
  19#include <linux/kexec.h>
  20#include <linux/of_device.h>
  21#include <linux/acpi.h>
  22#include "pci.h"
  23#include "pcie/portdrv.h"
  24
  25struct pci_dynid {
  26	struct list_head node;
  27	struct pci_device_id id;
  28};
  29
  30/**
  31 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
  32 * @drv: target pci driver
  33 * @vendor: PCI vendor ID
  34 * @device: PCI device ID
  35 * @subvendor: PCI subvendor ID
  36 * @subdevice: PCI subdevice ID
  37 * @class: PCI class
  38 * @class_mask: PCI class mask
  39 * @driver_data: private driver data
  40 *
  41 * Adds a new dynamic pci device ID to this driver and causes the
  42 * driver to probe for all devices again.  @drv must have been
  43 * registered prior to calling this function.
  44 *
  45 * CONTEXT:
  46 * Does GFP_KERNEL allocation.
  47 *
  48 * RETURNS:
  49 * 0 on success, -errno on failure.
  50 */
  51int pci_add_dynid(struct pci_driver *drv,
  52		  unsigned int vendor, unsigned int device,
  53		  unsigned int subvendor, unsigned int subdevice,
  54		  unsigned int class, unsigned int class_mask,
  55		  unsigned long driver_data)
  56{
  57	struct pci_dynid *dynid;
 
  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	return driver_attach(&drv->driver);
 
 
  76}
  77EXPORT_SYMBOL_GPL(pci_add_dynid);
  78
  79static void pci_free_dynids(struct pci_driver *drv)
  80{
  81	struct pci_dynid *dynid, *n;
  82
  83	spin_lock(&drv->dynids.lock);
  84	list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
  85		list_del(&dynid->node);
  86		kfree(dynid);
  87	}
  88	spin_unlock(&drv->dynids.lock);
  89}
  90
 
 
 
 
  91/**
  92 * store_new_id - sysfs frontend to pci_add_dynid()
  93 * @driver: target device driver
  94 * @buf: buffer for scanning device ID data
  95 * @count: input size
  96 *
  97 * Allow PCI IDs to be added to an existing driver via sysfs.
  98 */
  99static ssize_t new_id_store(struct device_driver *driver, const char *buf,
 100			    size_t count)
 101{
 102	struct pci_driver *pdrv = to_pci_driver(driver);
 103	const struct pci_device_id *ids = pdrv->id_table;
 104	u32 vendor, device, subvendor = PCI_ANY_ID,
 105		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
 106	unsigned long driver_data = 0;
 107	int fields = 0;
 108	int retval = 0;
 109
 110	fields = sscanf(buf, "%x %x %x %x %x %x %lx",
 111			&vendor, &device, &subvendor, &subdevice,
 112			&class, &class_mask, &driver_data);
 113	if (fields < 2)
 114		return -EINVAL;
 115
 116	if (fields != 7) {
 117		struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
 118		if (!pdev)
 119			return -ENOMEM;
 120
 121		pdev->vendor = vendor;
 122		pdev->device = device;
 123		pdev->subsystem_vendor = subvendor;
 124		pdev->subsystem_device = subdevice;
 125		pdev->class = class;
 126
 127		if (pci_match_id(pdrv->id_table, pdev))
 128			retval = -EEXIST;
 129
 130		kfree(pdev);
 131
 132		if (retval)
 133			return retval;
 134	}
 135
 136	/* Only accept driver_data values that match an existing id_table
 137	   entry */
 138	if (ids) {
 139		retval = -EINVAL;
 140		while (ids->vendor || ids->subvendor || ids->class_mask) {
 141			if (driver_data == ids->driver_data) {
 142				retval = 0;
 143				break;
 144			}
 145			ids++;
 146		}
 147		if (retval)	/* No match */
 148			return retval;
 149	}
 150
 151	retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
 152			       class, class_mask, driver_data);
 153	if (retval)
 154		return retval;
 155	return count;
 156}
 157static DRIVER_ATTR_WO(new_id);
 158
 159/**
 160 * store_remove_id - remove a PCI device ID from this driver
 161 * @driver: target device driver
 162 * @buf: buffer for scanning device ID data
 163 * @count: input size
 164 *
 165 * Removes a dynamic pci device ID to this driver.
 166 */
 167static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
 168			       size_t count)
 169{
 170	struct pci_dynid *dynid, *n;
 171	struct pci_driver *pdrv = to_pci_driver(driver);
 172	u32 vendor, device, subvendor = PCI_ANY_ID,
 173		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
 174	int fields = 0;
 175	size_t retval = -ENODEV;
 176
 177	fields = sscanf(buf, "%x %x %x %x %x %x",
 178			&vendor, &device, &subvendor, &subdevice,
 179			&class, &class_mask);
 180	if (fields < 2)
 181		return -EINVAL;
 182
 183	spin_lock(&pdrv->dynids.lock);
 184	list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
 185		struct pci_device_id *id = &dynid->id;
 186		if ((id->vendor == vendor) &&
 187		    (id->device == device) &&
 188		    (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
 189		    (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
 190		    !((id->class ^ class) & class_mask)) {
 191			list_del(&dynid->node);
 192			kfree(dynid);
 193			retval = count;
 194			break;
 195		}
 196	}
 197	spin_unlock(&pdrv->dynids.lock);
 198
 199	return retval;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 200}
 201static DRIVER_ATTR_WO(remove_id);
 202
 203static struct attribute *pci_drv_attrs[] = {
 204	&driver_attr_new_id.attr,
 205	&driver_attr_remove_id.attr,
 206	NULL,
 207};
 208ATTRIBUTE_GROUPS(pci_drv);
 
 
 
 
 
 
 209
 210/**
 211 * pci_match_id - See if a pci device matches a given pci_id table
 212 * @ids: array of PCI device id structures to search in
 213 * @dev: the PCI device structure to match against.
 214 *
 215 * Used by a driver to check whether a PCI device present in the
 216 * system is in its list of supported devices.  Returns the matching
 217 * pci_device_id structure or %NULL if there is no match.
 218 *
 219 * Deprecated, don't use this as it will not catch any dynamic ids
 220 * that a driver might want to check for.
 221 */
 222const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
 223					 struct pci_dev *dev)
 224{
 225	if (ids) {
 226		while (ids->vendor || ids->subvendor || ids->class_mask) {
 227			if (pci_match_one_device(ids, dev))
 228				return ids;
 229			ids++;
 230		}
 231	}
 232	return NULL;
 233}
 234EXPORT_SYMBOL(pci_match_id);
 235
 236static const struct pci_device_id pci_device_id_any = {
 237	.vendor = PCI_ANY_ID,
 238	.device = PCI_ANY_ID,
 239	.subvendor = PCI_ANY_ID,
 240	.subdevice = PCI_ANY_ID,
 241};
 242
 243/**
 244 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
 245 * @drv: the PCI driver to match against
 246 * @dev: the PCI device structure to match against
 247 *
 248 * Used by a driver to check whether a PCI device present in the
 249 * system is in its list of supported devices.  Returns the matching
 250 * pci_device_id structure or %NULL if there is no match.
 251 */
 252static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
 253						    struct pci_dev *dev)
 254{
 255	struct pci_dynid *dynid;
 256	const struct pci_device_id *found_id = NULL;
 257
 258	/* When driver_override is set, only bind to the matching driver */
 259	if (dev->driver_override && strcmp(dev->driver_override, drv->name))
 260		return NULL;
 261
 262	/* Look at the dynamic ids first, before the static ones */
 263	spin_lock(&drv->dynids.lock);
 264	list_for_each_entry(dynid, &drv->dynids.list, node) {
 265		if (pci_match_one_device(&dynid->id, dev)) {
 266			found_id = &dynid->id;
 267			break;
 268		}
 269	}
 270	spin_unlock(&drv->dynids.lock);
 271
 272	if (!found_id)
 273		found_id = pci_match_id(drv->id_table, dev);
 274
 275	/* driver_override will always match, send a dummy id */
 276	if (!found_id && dev->driver_override)
 277		found_id = &pci_device_id_any;
 278
 279	return found_id;
 280}
 281
 282struct drv_dev_and_id {
 283	struct pci_driver *drv;
 284	struct pci_dev *dev;
 285	const struct pci_device_id *id;
 286};
 287
 288static long local_pci_probe(void *_ddi)
 289{
 290	struct drv_dev_and_id *ddi = _ddi;
 291	struct pci_dev *pci_dev = ddi->dev;
 292	struct pci_driver *pci_drv = ddi->drv;
 293	struct device *dev = &pci_dev->dev;
 294	int rc;
 295
 296	/*
 297	 * Unbound PCI devices are always put in D0, regardless of
 298	 * runtime PM status.  During probe, the device is set to
 299	 * active and the usage count is incremented.  If the driver
 300	 * supports runtime PM, it should call pm_runtime_put_noidle(),
 301	 * or any other runtime PM helper function decrementing the usage
 302	 * count, in its probe routine and pm_runtime_get_noresume() in
 303	 * its remove routine.
 304	 */
 305	pm_runtime_get_sync(dev);
 306	pci_dev->driver = pci_drv;
 307	rc = pci_drv->probe(pci_dev, ddi->id);
 308	if (!rc)
 309		return rc;
 310	if (rc < 0) {
 311		pci_dev->driver = NULL;
 312		pm_runtime_put_sync(dev);
 313		return rc;
 314	}
 315	/*
 316	 * Probe function should return < 0 for failure, 0 for success
 317	 * Treat values > 0 as success, but warn.
 318	 */
 319	pci_warn(pci_dev, "Driver probe function unexpectedly returned %d\n",
 320		 rc);
 321	return 0;
 322}
 323
 324static bool pci_physfn_is_probed(struct pci_dev *dev)
 325{
 326#ifdef CONFIG_PCI_IOV
 327	return dev->is_virtfn && dev->physfn->is_probed;
 328#else
 329	return false;
 330#endif
 331}
 332
 333static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
 334			  const struct pci_device_id *id)
 335{
 336	int error, node, cpu;
 337	int hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
 338	struct drv_dev_and_id ddi = { drv, dev, id };
 339
 340	/*
 341	 * Execute driver initialization on node where the device is
 342	 * attached.  This way the driver likely allocates its local memory
 343	 * on the right node.
 344	 */
 345	node = dev_to_node(&dev->dev);
 346	dev->is_probed = 1;
 
 347
 348	cpu_hotplug_disable();
 349
 350	/*
 351	 * Prevent nesting work_on_cpu() for the case where a Virtual Function
 352	 * device is probed from work_on_cpu() of the Physical device.
 353	 */
 354	if (node < 0 || node >= MAX_NUMNODES || !node_online(node) ||
 355	    pci_physfn_is_probed(dev))
 356		cpu = nr_cpu_ids;
 357	else
 358		cpu = cpumask_any_and(cpumask_of_node(node),
 359				      housekeeping_cpumask(hk_flags));
 360
 361	if (cpu < nr_cpu_ids)
 362		error = work_on_cpu(cpu, local_pci_probe, &ddi);
 363	else
 364		error = local_pci_probe(&ddi);
 365
 366	dev->is_probed = 0;
 367	cpu_hotplug_enable();
 368	return error;
 369}
 370
 371/**
 372 * __pci_device_probe - check if a driver wants to claim a specific PCI device
 373 * @drv: driver to call to check if it wants the PCI device
 374 * @pci_dev: PCI device being probed
 375 *
 376 * returns 0 on success, else error.
 377 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
 378 */
 379static int __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
 
 380{
 381	const struct pci_device_id *id;
 382	int error = 0;
 383
 384	if (!pci_dev->driver && drv->probe) {
 385		error = -ENODEV;
 386
 387		id = pci_match_device(drv, pci_dev);
 388		if (id)
 389			error = pci_call_probe(drv, pci_dev, id);
 
 
 
 
 390	}
 391	return error;
 392}
 393
 394int __weak pcibios_alloc_irq(struct pci_dev *dev)
 395{
 396	return 0;
 397}
 398
 399void __weak pcibios_free_irq(struct pci_dev *dev)
 400{
 401}
 402
 403#ifdef CONFIG_PCI_IOV
 404static inline bool pci_device_can_probe(struct pci_dev *pdev)
 405{
 406	return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe ||
 407		pdev->driver_override);
 408}
 409#else
 410static inline bool pci_device_can_probe(struct pci_dev *pdev)
 411{
 412	return true;
 413}
 414#endif
 415
 416static int pci_device_probe(struct device *dev)
 417{
 418	int error;
 419	struct pci_dev *pci_dev = to_pci_dev(dev);
 420	struct pci_driver *drv = to_pci_driver(dev->driver);
 421
 422	if (!pci_device_can_probe(pci_dev))
 423		return -ENODEV;
 424
 425	pci_assign_irq(pci_dev);
 426
 427	error = pcibios_alloc_irq(pci_dev);
 428	if (error < 0)
 429		return error;
 430
 
 
 431	pci_dev_get(pci_dev);
 432	error = __pci_device_probe(drv, pci_dev);
 433	if (error) {
 434		pcibios_free_irq(pci_dev);
 435		pci_dev_put(pci_dev);
 436	}
 437
 438	return error;
 439}
 440
 441static int pci_device_remove(struct device *dev)
 442{
 443	struct pci_dev *pci_dev = to_pci_dev(dev);
 444	struct pci_driver *drv = pci_dev->driver;
 445
 446	if (drv) {
 447		if (drv->remove) {
 448			pm_runtime_get_sync(dev);
 449			drv->remove(pci_dev);
 450			pm_runtime_put_noidle(dev);
 451		}
 452		pcibios_free_irq(pci_dev);
 453		pci_dev->driver = NULL;
 454		pci_iov_remove(pci_dev);
 455	}
 456
 457	/* Undo the runtime PM settings in local_pci_probe() */
 458	pm_runtime_put_sync(dev);
 
 
 459
 460	/*
 461	 * If the device is still on, set the power state as "unknown",
 462	 * since it might change by the next time we load the driver.
 463	 */
 464	if (pci_dev->current_state == PCI_D0)
 465		pci_dev->current_state = PCI_UNKNOWN;
 466
 467	/*
 468	 * We would love to complain here if pci_dev->is_enabled is set, that
 469	 * the driver should have called pci_disable_device(), but the
 470	 * unfortunate fact is there are too many odd BIOS and bridge setups
 471	 * that don't like drivers doing that all of the time.
 472	 * Oh well, we can dream of sane hardware when we sleep, no matter how
 473	 * horrible the crap we have to deal with is when we are awake...
 474	 */
 475
 476	pci_dev_put(pci_dev);
 477	return 0;
 478}
 479
 480static void pci_device_shutdown(struct device *dev)
 481{
 482	struct pci_dev *pci_dev = to_pci_dev(dev);
 483	struct pci_driver *drv = pci_dev->driver;
 484
 485	pm_runtime_resume(dev);
 486
 487	if (drv && drv->shutdown)
 488		drv->shutdown(pci_dev);
 
 
 
 
 
 
 
 
 489
 490	/*
 491	 * If this is a kexec reboot, turn off Bus Master bit on the
 492	 * device to tell it to not continue to do DMA. Don't touch
 493	 * devices in D3cold or unknown states.
 494	 * If it is not a kexec reboot, firmware will hit the PCI
 495	 * devices with big hammer and stop their DMA any way.
 496	 */
 497	if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
 498		pci_clear_master(pci_dev);
 499}
 500
 501#ifdef CONFIG_PM
 502
 503/* Auxiliary functions used for system resume and run-time resume. */
 504
 505/**
 506 * pci_restore_standard_config - restore standard config registers of PCI device
 507 * @pci_dev: PCI device to handle
 508 */
 509static int pci_restore_standard_config(struct pci_dev *pci_dev)
 510{
 511	pci_update_current_state(pci_dev, PCI_UNKNOWN);
 512
 513	if (pci_dev->current_state != PCI_D0) {
 514		int error = pci_set_power_state(pci_dev, PCI_D0);
 515		if (error)
 516			return error;
 517	}
 518
 519	pci_restore_state(pci_dev);
 520	pci_pme_restore(pci_dev);
 521	return 0;
 522}
 523
 524static void pci_pm_default_resume(struct pci_dev *pci_dev)
 525{
 526	pci_fixup_device(pci_fixup_resume, pci_dev);
 527	pci_enable_wake(pci_dev, PCI_D0, false);
 528}
 529
 530#endif
 531
 532#ifdef CONFIG_PM_SLEEP
 533
 534static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
 535{
 536	pci_power_up(pci_dev);
 537	pci_update_current_state(pci_dev, PCI_D0);
 538	pci_restore_state(pci_dev);
 539	pci_pme_restore(pci_dev);
 540}
 541
 542/*
 543 * Default "suspend" method for devices that have no driver provided suspend,
 544 * or not even a driver at all (second part).
 545 */
 546static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
 547{
 548	/*
 549	 * mark its power state as "unknown", since we don't know if
 550	 * e.g. the BIOS will change its device state when we suspend.
 551	 */
 552	if (pci_dev->current_state == PCI_D0)
 553		pci_dev->current_state = PCI_UNKNOWN;
 554}
 555
 556/*
 557 * Default "resume" method for devices that have no driver provided resume,
 558 * or not even a driver at all (second part).
 559 */
 560static int pci_pm_reenable_device(struct pci_dev *pci_dev)
 561{
 562	int retval;
 563
 564	/* if the device was enabled before suspend, reenable */
 565	retval = pci_reenable_device(pci_dev);
 566	/*
 567	 * if the device was busmaster before the suspend, make it busmaster
 568	 * again
 569	 */
 570	if (pci_dev->is_busmaster)
 571		pci_set_master(pci_dev);
 572
 573	return retval;
 574}
 575
 576static int pci_legacy_suspend(struct device *dev, pm_message_t state)
 577{
 578	struct pci_dev *pci_dev = to_pci_dev(dev);
 579	struct pci_driver *drv = pci_dev->driver;
 580
 581	if (drv && drv->suspend) {
 582		pci_power_t prev = pci_dev->current_state;
 583		int error;
 584
 585		error = drv->suspend(pci_dev, state);
 586		suspend_report_result(drv->suspend, error);
 587		if (error)
 588			return error;
 589
 590		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 591		    && pci_dev->current_state != PCI_UNKNOWN) {
 592			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
 593				      "PCI PM: Device state not saved by %pS\n",
 594				      drv->suspend);
 595		}
 596	}
 597
 598	pci_fixup_device(pci_fixup_suspend, pci_dev);
 599
 600	return 0;
 601}
 602
 603static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
 604{
 605	struct pci_dev *pci_dev = to_pci_dev(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 606
 607	if (!pci_dev->state_saved)
 608		pci_save_state(pci_dev);
 609
 610	pci_pm_set_unknown_state(pci_dev);
 611
 612	pci_fixup_device(pci_fixup_suspend_late, pci_dev);
 
 
 
 
 
 
 613
 614	return 0;
 
 615}
 616
 617static int pci_legacy_resume(struct device *dev)
 618{
 619	struct pci_dev *pci_dev = to_pci_dev(dev);
 620	struct pci_driver *drv = pci_dev->driver;
 621
 622	pci_fixup_device(pci_fixup_resume, pci_dev);
 623
 624	return drv && drv->resume ?
 625			drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
 626}
 627
 628/* Auxiliary functions used by the new power management framework */
 629
 
 
 
 
 
 
 
 
 630static void pci_pm_default_suspend(struct pci_dev *pci_dev)
 631{
 632	/* Disable non-bridge devices without PM support */
 633	if (!pci_has_subordinate(pci_dev))
 634		pci_disable_enabled_device(pci_dev);
 635}
 636
 637static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
 638{
 639	struct pci_driver *drv = pci_dev->driver;
 640	bool ret = drv && (drv->suspend || drv->resume);
 
 641
 642	/*
 643	 * Legacy PM support is used by default, so warn if the new framework is
 644	 * supported as well.  Drivers are supposed to support either the
 645	 * former, or the latter, but not both at the same time.
 646	 */
 647	pci_WARN(pci_dev, ret && drv->driver.pm, "device %04x:%04x\n",
 648		 pci_dev->vendor, pci_dev->device);
 649
 650	return ret;
 651}
 652
 653/* New power management framework */
 654
 655static int pci_pm_prepare(struct device *dev)
 656{
 657	struct pci_dev *pci_dev = to_pci_dev(dev);
 658	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 659
 660	if (pm && pm->prepare) {
 661		int error = pm->prepare(dev);
 662		if (error < 0)
 663			return error;
 
 
 
 
 
 664
 665		if (!error && dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_PREPARE))
 666			return 0;
 
 667	}
 668	if (pci_dev_need_resume(pci_dev))
 669		return 0;
 670
 671	/*
 672	 * The PME setting needs to be adjusted here in case the direct-complete
 673	 * optimization is used with respect to this device.
 
 
 
 
 
 674	 */
 675	pci_dev_adjust_pme(pci_dev);
 676	return 1;
 
 
 
 
 677}
 678
 679static void pci_pm_complete(struct device *dev)
 680{
 681	struct pci_dev *pci_dev = to_pci_dev(dev);
 682
 683	pci_dev_complete_resume(pci_dev);
 684	pm_generic_complete(dev);
 685
 686	/* Resume device if platform firmware has put it in reset-power-on */
 687	if (pm_runtime_suspended(dev) && pm_resume_via_firmware()) {
 688		pci_power_t pre_sleep_state = pci_dev->current_state;
 689
 690		pci_refresh_power_state(pci_dev);
 691		/*
 692		 * On platforms with ACPI this check may also trigger for
 693		 * devices sharing power resources if one of those power
 694		 * resources has been activated as a result of a change of the
 695		 * power state of another device sharing it.  However, in that
 696		 * case it is also better to resume the device, in general.
 697		 */
 698		if (pci_dev->current_state < pre_sleep_state)
 699			pm_request_resume(dev);
 700	}
 701}
 702
 703#else /* !CONFIG_PM_SLEEP */
 704
 705#define pci_pm_prepare	NULL
 706#define pci_pm_complete	NULL
 707
 708#endif /* !CONFIG_PM_SLEEP */
 709
 710#ifdef CONFIG_SUSPEND
 711static void pcie_pme_root_status_cleanup(struct pci_dev *pci_dev)
 712{
 713	/*
 714	 * Some BIOSes forget to clear Root PME Status bits after system
 715	 * wakeup, which breaks ACPI-based runtime wakeup on PCI Express.
 716	 * Clear those bits now just in case (shouldn't hurt).
 717	 */
 718	if (pci_is_pcie(pci_dev) &&
 719	    (pci_pcie_type(pci_dev) == PCI_EXP_TYPE_ROOT_PORT ||
 720	     pci_pcie_type(pci_dev) == PCI_EXP_TYPE_RC_EC))
 721		pcie_clear_root_pme_status(pci_dev);
 722}
 723
 724static int pci_pm_suspend(struct device *dev)
 725{
 726	struct pci_dev *pci_dev = to_pci_dev(dev);
 727	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 728
 729	pci_dev->skip_bus_pm = false;
 730
 731	if (pci_has_legacy_pm_support(pci_dev))
 732		return pci_legacy_suspend(dev, PMSG_SUSPEND);
 733
 734	if (!pm) {
 735		pci_pm_default_suspend(pci_dev);
 736		return 0;
 737	}
 738
 739	/*
 740	 * PCI devices suspended at run time may need to be resumed at this
 741	 * point, because in general it may be necessary to reconfigure them for
 742	 * system suspend.  Namely, if the device is expected to wake up the
 743	 * system from the sleep state, it may have to be reconfigured for this
 744	 * purpose, or if the device is not expected to wake up the system from
 745	 * the sleep state, it should be prevented from signaling wakeup events
 746	 * going forward.
 747	 *
 748	 * Also if the driver of the device does not indicate that its system
 749	 * suspend callbacks can cope with runtime-suspended devices, it is
 750	 * better to resume the device from runtime suspend here.
 751	 */
 752	if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
 753	    pci_dev_need_resume(pci_dev)) {
 754		pm_runtime_resume(dev);
 755		pci_dev->state_saved = false;
 756	} else {
 757		pci_dev_adjust_pme(pci_dev);
 758	}
 759
 760	if (pm->suspend) {
 761		pci_power_t prev = pci_dev->current_state;
 762		int error;
 763
 764		error = pm->suspend(dev);
 765		suspend_report_result(pm->suspend, error);
 766		if (error)
 767			return error;
 768
 769		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 770		    && pci_dev->current_state != PCI_UNKNOWN) {
 771			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
 772				      "PCI PM: State of device not saved by %pS\n",
 773				      pm->suspend);
 774		}
 775	}
 776
 
 
 
 777	return 0;
 778}
 779
 780static int pci_pm_suspend_late(struct device *dev)
 781{
 782	if (dev_pm_skip_suspend(dev))
 783		return 0;
 784
 785	pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
 786
 787	return pm_generic_suspend_late(dev);
 788}
 789
 790static int pci_pm_suspend_noirq(struct device *dev)
 791{
 792	struct pci_dev *pci_dev = to_pci_dev(dev);
 793	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 794
 795	if (dev_pm_skip_suspend(dev))
 796		return 0;
 797
 798	if (pci_has_legacy_pm_support(pci_dev))
 799		return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
 800
 801	if (!pm) {
 802		pci_save_state(pci_dev);
 803		goto Fixup;
 804	}
 805
 806	if (pm->suspend_noirq) {
 807		pci_power_t prev = pci_dev->current_state;
 808		int error;
 809
 810		error = pm->suspend_noirq(dev);
 811		suspend_report_result(pm->suspend_noirq, error);
 812		if (error)
 813			return error;
 814
 815		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
 816		    && pci_dev->current_state != PCI_UNKNOWN) {
 817			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
 818				      "PCI PM: State of device not saved by %pS\n",
 819				      pm->suspend_noirq);
 820			goto Fixup;
 821		}
 822	}
 823
 824	if (pci_dev->skip_bus_pm) {
 825		/*
 826		 * Either the device is a bridge with a child in D0 below it, or
 827		 * the function is running for the second time in a row without
 828		 * going through full resume, which is possible only during
 829		 * suspend-to-idle in a spurious wakeup case.  The device should
 830		 * be in D0 at this point, but if it is a bridge, it may be
 831		 * necessary to save its state.
 832		 */
 833		if (!pci_dev->state_saved)
 834			pci_save_state(pci_dev);
 835	} else if (!pci_dev->state_saved) {
 836		pci_save_state(pci_dev);
 837		if (pci_power_manageable(pci_dev))
 838			pci_prepare_to_sleep(pci_dev);
 839	}
 840
 841	pci_dbg(pci_dev, "PCI PM: Suspend power state: %s\n",
 842		pci_power_name(pci_dev->current_state));
 843
 844	if (pci_dev->current_state == PCI_D0) {
 845		pci_dev->skip_bus_pm = true;
 846		/*
 847		 * Per PCI PM r1.2, table 6-1, a bridge must be in D0 if any
 848		 * downstream device is in D0, so avoid changing the power state
 849		 * of the parent bridge by setting the skip_bus_pm flag for it.
 850		 */
 851		if (pci_dev->bus->self)
 852			pci_dev->bus->self->skip_bus_pm = true;
 853	}
 854
 855	if (pci_dev->skip_bus_pm && pm_suspend_no_platform()) {
 856		pci_dbg(pci_dev, "PCI PM: Skipped\n");
 857		goto Fixup;
 858	}
 859
 860	pci_pm_set_unknown_state(pci_dev);
 861
 862	/*
 863	 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
 864	 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
 865	 * hasn't been quiesced and tries to turn it off.  If the controller
 866	 * is already in D3, this can hang or cause memory corruption.
 867	 *
 868	 * Since the value of the COMMAND register doesn't matter once the
 869	 * device has been suspended, we can safely set it to 0 here.
 870	 */
 871	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
 872		pci_write_config_word(pci_dev, PCI_COMMAND, 0);
 873
 874Fixup:
 875	pci_fixup_device(pci_fixup_suspend_late, pci_dev);
 876
 877	/*
 878	 * If the target system sleep state is suspend-to-idle, it is sufficient
 879	 * to check whether or not the device's wakeup settings are good for
 880	 * runtime PM.  Otherwise, the pm_resume_via_firmware() check will cause
 881	 * pci_pm_complete() to take care of fixing up the device's state
 882	 * anyway, if need be.
 883	 */
 884	if (device_can_wakeup(dev) && !device_may_wakeup(dev))
 885		dev->power.may_skip_resume = false;
 886
 887	return 0;
 888}
 889
 890static int pci_pm_resume_noirq(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	pci_power_t prev_state = pci_dev->current_state;
 895	bool skip_bus_pm = pci_dev->skip_bus_pm;
 896
 897	if (dev_pm_skip_resume(dev))
 898		return 0;
 899
 900	/*
 901	 * In the suspend-to-idle case, devices left in D0 during suspend will
 902	 * stay in D0, so it is not necessary to restore or update their
 903	 * configuration here and attempting to put them into D0 again is
 904	 * pointless, so avoid doing that.
 905	 */
 906	if (!(skip_bus_pm && pm_suspend_no_platform()))
 907		pci_pm_default_resume_early(pci_dev);
 908
 909	pci_fixup_device(pci_fixup_resume_early, pci_dev);
 910	pcie_pme_root_status_cleanup(pci_dev);
 911
 912	if (!skip_bus_pm && prev_state == PCI_D3cold)
 913		pci_bridge_wait_for_secondary_bus(pci_dev);
 914
 915	if (pci_has_legacy_pm_support(pci_dev))
 916		return 0;
 917
 918	if (pm && pm->resume_noirq)
 919		return pm->resume_noirq(dev);
 920
 921	return 0;
 922}
 923
 924static int pci_pm_resume_early(struct device *dev)
 925{
 926	if (dev_pm_skip_resume(dev))
 927		return 0;
 928
 929	return pm_generic_resume_early(dev);
 930}
 931
 932static int pci_pm_resume(struct device *dev)
 933{
 934	struct pci_dev *pci_dev = to_pci_dev(dev);
 935	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 
 936
 937	/*
 938	 * This is necessary for the suspend error path in which resume is
 939	 * called without restoring the standard config registers of the device.
 940	 */
 941	if (pci_dev->state_saved)
 942		pci_restore_standard_config(pci_dev);
 943
 944	if (pci_has_legacy_pm_support(pci_dev))
 945		return pci_legacy_resume(dev);
 946
 947	pci_pm_default_resume(pci_dev);
 948
 949	if (pm) {
 950		if (pm->resume)
 951			return pm->resume(dev);
 952	} else {
 953		pci_pm_reenable_device(pci_dev);
 954	}
 955
 956	return 0;
 957}
 958
 959#else /* !CONFIG_SUSPEND */
 960
 961#define pci_pm_suspend		NULL
 962#define pci_pm_suspend_late	NULL
 963#define pci_pm_suspend_noirq	NULL
 964#define pci_pm_resume		NULL
 965#define pci_pm_resume_early	NULL
 966#define pci_pm_resume_noirq	NULL
 967
 968#endif /* !CONFIG_SUSPEND */
 969
 970#ifdef CONFIG_HIBERNATE_CALLBACKS
 971
 972/*
 973 * pcibios_pm_ops - provide arch-specific hooks when a PCI device is doing
 974 * a hibernate transition
 975 */
 976struct dev_pm_ops __weak pcibios_pm_ops;
 977
 978static int pci_pm_freeze(struct device *dev)
 979{
 980	struct pci_dev *pci_dev = to_pci_dev(dev);
 981	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 982
 983	if (pci_has_legacy_pm_support(pci_dev))
 984		return pci_legacy_suspend(dev, PMSG_FREEZE);
 985
 986	if (!pm) {
 987		pci_pm_default_suspend(pci_dev);
 988		return 0;
 989	}
 990
 991	/*
 992	 * Resume all runtime-suspended devices before creating a snapshot
 993	 * image of system memory, because the restore kernel generally cannot
 994	 * be expected to always handle them consistently and they need to be
 995	 * put into the runtime-active metastate during system resume anyway,
 996	 * so it is better to ensure that the state saved in the image will be
 997	 * always consistent with that.
 998	 */
 999	pm_runtime_resume(dev);
1000	pci_dev->state_saved = false;
1001
1002	if (pm->freeze) {
1003		int error;
1004
1005		error = pm->freeze(dev);
1006		suspend_report_result(pm->freeze, error);
1007		if (error)
1008			return error;
1009	}
1010
1011	return 0;
1012}
1013
1014static int pci_pm_freeze_noirq(struct device *dev)
1015{
1016	struct pci_dev *pci_dev = to_pci_dev(dev);
1017	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1018
1019	if (pci_has_legacy_pm_support(pci_dev))
1020		return pci_legacy_suspend_late(dev, PMSG_FREEZE);
1021
1022	if (pm && pm->freeze_noirq) {
1023		int error;
1024
1025		error = pm->freeze_noirq(dev);
1026		suspend_report_result(pm->freeze_noirq, error);
1027		if (error)
1028			return error;
1029	}
1030
1031	if (!pci_dev->state_saved)
1032		pci_save_state(pci_dev);
1033
1034	pci_pm_set_unknown_state(pci_dev);
1035
1036	if (pcibios_pm_ops.freeze_noirq)
1037		return pcibios_pm_ops.freeze_noirq(dev);
1038
1039	return 0;
1040}
1041
1042static int pci_pm_thaw_noirq(struct device *dev)
1043{
1044	struct pci_dev *pci_dev = to_pci_dev(dev);
1045	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1046	int error;
1047
1048	if (pcibios_pm_ops.thaw_noirq) {
1049		error = pcibios_pm_ops.thaw_noirq(dev);
1050		if (error)
1051			return error;
1052	}
1053
1054	/*
1055	 * The pm->thaw_noirq() callback assumes the device has been
1056	 * returned to D0 and its config state has been restored.
1057	 *
1058	 * In addition, pci_restore_state() restores MSI-X state in MMIO
1059	 * space, which requires the device to be in D0, so return it to D0
1060	 * in case the driver's "freeze" callbacks put it into a low-power
1061	 * state.
1062	 */
1063	pci_set_power_state(pci_dev, PCI_D0);
1064	pci_restore_state(pci_dev);
1065
1066	if (pci_has_legacy_pm_support(pci_dev))
1067		return 0;
1068
1069	if (pm && pm->thaw_noirq)
1070		return pm->thaw_noirq(dev);
1071
1072	return 0;
1073}
1074
1075static int pci_pm_thaw(struct device *dev)
1076{
1077	struct pci_dev *pci_dev = to_pci_dev(dev);
1078	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1079	int error = 0;
1080
1081	if (pci_has_legacy_pm_support(pci_dev))
1082		return pci_legacy_resume(dev);
1083
1084	if (pm) {
1085		if (pm->thaw)
1086			error = pm->thaw(dev);
1087	} else {
1088		pci_pm_reenable_device(pci_dev);
1089	}
1090
1091	pci_dev->state_saved = false;
1092
1093	return error;
1094}
1095
1096static int pci_pm_poweroff(struct device *dev)
1097{
1098	struct pci_dev *pci_dev = to_pci_dev(dev);
1099	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1100
1101	if (pci_has_legacy_pm_support(pci_dev))
1102		return pci_legacy_suspend(dev, PMSG_HIBERNATE);
1103
1104	if (!pm) {
1105		pci_pm_default_suspend(pci_dev);
1106		return 0;
1107	}
1108
1109	/* The reason to do that is the same as in pci_pm_suspend(). */
1110	if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
1111	    pci_dev_need_resume(pci_dev)) {
1112		pm_runtime_resume(dev);
1113		pci_dev->state_saved = false;
1114	} else {
1115		pci_dev_adjust_pme(pci_dev);
1116	}
1117
1118	if (pm->poweroff) {
1119		int error;
1120
1121		error = pm->poweroff(dev);
1122		suspend_report_result(pm->poweroff, error);
1123		if (error)
1124			return error;
1125	}
1126
 
 
 
1127	return 0;
1128}
1129
1130static int pci_pm_poweroff_late(struct device *dev)
1131{
1132	if (dev_pm_skip_suspend(dev))
1133		return 0;
1134
1135	pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
1136
1137	return pm_generic_poweroff_late(dev);
1138}
1139
1140static int pci_pm_poweroff_noirq(struct device *dev)
1141{
1142	struct pci_dev *pci_dev = to_pci_dev(dev);
1143	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1144
1145	if (dev_pm_skip_suspend(dev))
1146		return 0;
1147
1148	if (pci_has_legacy_pm_support(pci_dev))
1149		return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
1150
1151	if (!pm) {
1152		pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1153		return 0;
1154	}
1155
1156	if (pm->poweroff_noirq) {
1157		int error;
1158
1159		error = pm->poweroff_noirq(dev);
1160		suspend_report_result(pm->poweroff_noirq, error);
1161		if (error)
1162			return error;
1163	}
1164
1165	if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev))
1166		pci_prepare_to_sleep(pci_dev);
1167
1168	/*
1169	 * The reason for doing this here is the same as for the analogous code
1170	 * in pci_pm_suspend_noirq().
1171	 */
1172	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
1173		pci_write_config_word(pci_dev, PCI_COMMAND, 0);
1174
1175	pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1176
1177	if (pcibios_pm_ops.poweroff_noirq)
1178		return pcibios_pm_ops.poweroff_noirq(dev);
1179
1180	return 0;
1181}
1182
1183static int pci_pm_restore_noirq(struct device *dev)
1184{
1185	struct pci_dev *pci_dev = to_pci_dev(dev);
1186	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1187	int error;
1188
1189	if (pcibios_pm_ops.restore_noirq) {
1190		error = pcibios_pm_ops.restore_noirq(dev);
1191		if (error)
1192			return error;
1193	}
1194
1195	pci_pm_default_resume_early(pci_dev);
1196	pci_fixup_device(pci_fixup_resume_early, pci_dev);
1197
1198	if (pci_has_legacy_pm_support(pci_dev))
1199		return 0;
1200
1201	if (pm && pm->restore_noirq)
1202		return pm->restore_noirq(dev);
1203
1204	return 0;
1205}
1206
1207static int pci_pm_restore(struct device *dev)
1208{
1209	struct pci_dev *pci_dev = to_pci_dev(dev);
1210	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
 
1211
1212	/*
1213	 * This is necessary for the hibernation error path in which restore is
1214	 * called without restoring the standard config registers of the device.
1215	 */
1216	if (pci_dev->state_saved)
1217		pci_restore_standard_config(pci_dev);
1218
1219	if (pci_has_legacy_pm_support(pci_dev))
1220		return pci_legacy_resume(dev);
1221
1222	pci_pm_default_resume(pci_dev);
1223
1224	if (pm) {
1225		if (pm->restore)
1226			return pm->restore(dev);
1227	} else {
1228		pci_pm_reenable_device(pci_dev);
1229	}
1230
1231	return 0;
1232}
1233
1234#else /* !CONFIG_HIBERNATE_CALLBACKS */
1235
1236#define pci_pm_freeze		NULL
1237#define pci_pm_freeze_noirq	NULL
1238#define pci_pm_thaw		NULL
1239#define pci_pm_thaw_noirq	NULL
1240#define pci_pm_poweroff		NULL
1241#define pci_pm_poweroff_late	NULL
1242#define pci_pm_poweroff_noirq	NULL
1243#define pci_pm_restore		NULL
1244#define pci_pm_restore_noirq	NULL
1245
1246#endif /* !CONFIG_HIBERNATE_CALLBACKS */
1247
1248#ifdef CONFIG_PM
1249
1250static int pci_pm_runtime_suspend(struct device *dev)
1251{
1252	struct pci_dev *pci_dev = to_pci_dev(dev);
1253	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1254	pci_power_t prev = pci_dev->current_state;
1255	int error;
1256
1257	/*
1258	 * If pci_dev->driver is not set (unbound), we leave the device in D0,
1259	 * but it may go to D3cold when the bridge above it runtime suspends.
1260	 * Save its config space in case that happens.
1261	 */
1262	if (!pci_dev->driver) {
1263		pci_save_state(pci_dev);
1264		return 0;
1265	}
1266
1267	pci_dev->state_saved = false;
1268	if (pm && pm->runtime_suspend) {
1269		error = pm->runtime_suspend(dev);
1270		/*
1271		 * -EBUSY and -EAGAIN is used to request the runtime PM core
1272		 * to schedule a new suspend, so log the event only with debug
1273		 * log level.
1274		 */
1275		if (error == -EBUSY || error == -EAGAIN) {
1276			pci_dbg(pci_dev, "can't suspend now (%ps returned %d)\n",
1277				pm->runtime_suspend, error);
1278			return error;
1279		} else if (error) {
1280			pci_err(pci_dev, "can't suspend (%ps returned %d)\n",
1281				pm->runtime_suspend, error);
1282			return error;
1283		}
1284	}
1285
1286	pci_fixup_device(pci_fixup_suspend, pci_dev);
1287
1288	if (pm && pm->runtime_suspend
1289	    && !pci_dev->state_saved && pci_dev->current_state != PCI_D0
1290	    && pci_dev->current_state != PCI_UNKNOWN) {
1291		pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
1292			      "PCI PM: State of device not saved by %pS\n",
1293			      pm->runtime_suspend);
1294		return 0;
1295	}
1296
1297	if (!pci_dev->state_saved) {
1298		pci_save_state(pci_dev);
1299		pci_finish_runtime_suspend(pci_dev);
1300	}
1301
1302	return 0;
1303}
1304
1305static int pci_pm_runtime_resume(struct device *dev)
1306{
1307	struct pci_dev *pci_dev = to_pci_dev(dev);
1308	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1309	pci_power_t prev_state = pci_dev->current_state;
1310	int error = 0;
1311
1312	/*
1313	 * Restoring config space is necessary even if the device is not bound
1314	 * to a driver because although we left it in D0, it may have gone to
1315	 * D3cold when the bridge above it runtime suspended.
1316	 */
1317	pci_restore_standard_config(pci_dev);
1318
1319	if (!pci_dev->driver)
1320		return 0;
1321
1322	pci_fixup_device(pci_fixup_resume_early, pci_dev);
1323	pci_pm_default_resume(pci_dev);
1324
1325	if (prev_state == PCI_D3cold)
1326		pci_bridge_wait_for_secondary_bus(pci_dev);
1327
1328	if (pm && pm->runtime_resume)
1329		error = pm->runtime_resume(dev);
1330
1331	pci_dev->runtime_d3cold = false;
1332
1333	return error;
1334}
1335
1336static int pci_pm_runtime_idle(struct device *dev)
1337{
1338	struct pci_dev *pci_dev = to_pci_dev(dev);
1339	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1340
1341	/*
1342	 * If pci_dev->driver is not set (unbound), the device should
1343	 * always remain in D0 regardless of the runtime PM status
1344	 */
1345	if (!pci_dev->driver)
1346		return 0;
1347
1348	if (!pm)
1349		return -ENOSYS;
1350
1351	if (pm->runtime_idle)
1352		return pm->runtime_idle(dev);
 
 
 
 
 
1353
1354	return 0;
1355}
1356
1357static const struct dev_pm_ops pci_dev_pm_ops = {
 
 
 
 
 
 
 
 
 
 
1358	.prepare = pci_pm_prepare,
1359	.complete = pci_pm_complete,
1360	.suspend = pci_pm_suspend,
1361	.suspend_late = pci_pm_suspend_late,
1362	.resume = pci_pm_resume,
1363	.resume_early = pci_pm_resume_early,
1364	.freeze = pci_pm_freeze,
1365	.thaw = pci_pm_thaw,
1366	.poweroff = pci_pm_poweroff,
1367	.poweroff_late = pci_pm_poweroff_late,
1368	.restore = pci_pm_restore,
1369	.suspend_noirq = pci_pm_suspend_noirq,
1370	.resume_noirq = pci_pm_resume_noirq,
1371	.freeze_noirq = pci_pm_freeze_noirq,
1372	.thaw_noirq = pci_pm_thaw_noirq,
1373	.poweroff_noirq = pci_pm_poweroff_noirq,
1374	.restore_noirq = pci_pm_restore_noirq,
1375	.runtime_suspend = pci_pm_runtime_suspend,
1376	.runtime_resume = pci_pm_runtime_resume,
1377	.runtime_idle = pci_pm_runtime_idle,
1378};
1379
1380#define PCI_PM_OPS_PTR	(&pci_dev_pm_ops)
1381
1382#else /* !CONFIG_PM */
1383
1384#define pci_pm_runtime_suspend	NULL
1385#define pci_pm_runtime_resume	NULL
1386#define pci_pm_runtime_idle	NULL
1387
1388#define PCI_PM_OPS_PTR	NULL
1389
1390#endif /* !CONFIG_PM */
1391
1392/**
1393 * __pci_register_driver - register a new pci driver
1394 * @drv: the driver structure to register
1395 * @owner: owner module of drv
1396 * @mod_name: module name string
1397 *
1398 * Adds the driver structure to the list of registered drivers.
1399 * Returns a negative value on error, otherwise 0.
1400 * If no error occurred, the driver remains registered even if
1401 * no device was claimed during registration.
1402 */
1403int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1404			  const char *mod_name)
1405{
 
 
1406	/* initialize common driver fields */
1407	drv->driver.name = drv->name;
1408	drv->driver.bus = &pci_bus_type;
1409	drv->driver.owner = owner;
1410	drv->driver.mod_name = mod_name;
1411	drv->driver.groups = drv->groups;
1412
1413	spin_lock_init(&drv->dynids.lock);
1414	INIT_LIST_HEAD(&drv->dynids.list);
1415
1416	/* register with core */
1417	return driver_register(&drv->driver);
 
 
 
 
 
 
 
 
 
 
 
 
1418}
1419EXPORT_SYMBOL(__pci_register_driver);
1420
1421/**
1422 * pci_unregister_driver - unregister a pci driver
1423 * @drv: the driver structure to unregister
1424 *
1425 * Deletes the driver structure from the list of registered PCI drivers,
1426 * gives it a chance to clean up by calling its remove() function for
1427 * each device it was responsible for, and marks those devices as
1428 * driverless.
1429 */
1430
1431void pci_unregister_driver(struct pci_driver *drv)
 
1432{
 
1433	driver_unregister(&drv->driver);
1434	pci_free_dynids(drv);
1435}
1436EXPORT_SYMBOL(pci_unregister_driver);
1437
1438static struct pci_driver pci_compat_driver = {
1439	.name = "compat"
1440};
1441
1442/**
1443 * pci_dev_driver - get the pci_driver of a device
1444 * @dev: the device to query
1445 *
1446 * Returns the appropriate pci_driver structure or %NULL if there is no
1447 * registered driver for the device.
1448 */
1449struct pci_driver *pci_dev_driver(const struct pci_dev *dev)
 
1450{
1451	if (dev->driver)
1452		return dev->driver;
1453	else {
1454		int i;
1455		for (i = 0; i <= PCI_ROM_RESOURCE; i++)
1456			if (dev->resource[i].flags & IORESOURCE_BUSY)
1457				return &pci_compat_driver;
1458	}
1459	return NULL;
1460}
1461EXPORT_SYMBOL(pci_dev_driver);
1462
1463/**
1464 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1465 * @dev: the PCI device structure to match against
1466 * @drv: the device driver to search for matching PCI device id structures
1467 *
1468 * Used by a driver to check whether a PCI device present in the
1469 * system is in its list of supported devices. Returns the matching
1470 * pci_device_id structure or %NULL if there is no match.
1471 */
1472static int pci_bus_match(struct device *dev, struct device_driver *drv)
1473{
1474	struct pci_dev *pci_dev = to_pci_dev(dev);
1475	struct pci_driver *pci_drv;
1476	const struct pci_device_id *found_id;
1477
1478	if (!pci_dev->match_driver)
1479		return 0;
1480
1481	pci_drv = to_pci_driver(drv);
1482	found_id = pci_match_device(pci_drv, pci_dev);
1483	if (found_id)
1484		return 1;
1485
1486	return 0;
1487}
1488
1489/**
1490 * pci_dev_get - increments the reference count of the pci device structure
1491 * @dev: the device being referenced
1492 *
1493 * Each live reference to a device should be refcounted.
1494 *
1495 * Drivers for PCI devices should normally record such references in
1496 * their probe() methods, when they bind to a device, and release
1497 * them by calling pci_dev_put(), in their disconnect() methods.
1498 *
1499 * A pointer to the device with the incremented reference counter is returned.
1500 */
1501struct pci_dev *pci_dev_get(struct pci_dev *dev)
1502{
1503	if (dev)
1504		get_device(&dev->dev);
1505	return dev;
1506}
1507EXPORT_SYMBOL(pci_dev_get);
1508
1509/**
1510 * pci_dev_put - release a use of the pci device structure
1511 * @dev: device that's been disconnected
1512 *
1513 * Must be called when a user of a device is finished with it.  When the last
1514 * user of the device calls this function, the memory of the device is freed.
1515 */
1516void pci_dev_put(struct pci_dev *dev)
1517{
1518	if (dev)
1519		put_device(&dev->dev);
1520}
1521EXPORT_SYMBOL(pci_dev_put);
1522
1523static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
 
1524{
1525	struct pci_dev *pdev;
1526
1527	if (!dev)
1528		return -ENODEV;
1529
1530	pdev = to_pci_dev(dev);
1531
1532	if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class))
1533		return -ENOMEM;
1534
1535	if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
1536		return -ENOMEM;
1537
1538	if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
1539			   pdev->subsystem_device))
1540		return -ENOMEM;
1541
1542	if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
1543		return -ENOMEM;
1544
1545	if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X",
1546			   pdev->vendor, pdev->device,
1547			   pdev->subsystem_vendor, pdev->subsystem_device,
1548			   (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
1549			   (u8)(pdev->class)))
1550		return -ENOMEM;
1551
1552	return 0;
1553}
1554
1555#if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH)
1556/**
1557 * pci_uevent_ers - emit a uevent during recovery path of PCI device
1558 * @pdev: PCI device undergoing error recovery
1559 * @err_type: type of error event
1560 */
1561void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type)
1562{
1563	int idx = 0;
1564	char *envp[3];
1565
1566	switch (err_type) {
1567	case PCI_ERS_RESULT_NONE:
1568	case PCI_ERS_RESULT_CAN_RECOVER:
1569		envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY";
1570		envp[idx++] = "DEVICE_ONLINE=0";
1571		break;
1572	case PCI_ERS_RESULT_RECOVERED:
1573		envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY";
1574		envp[idx++] = "DEVICE_ONLINE=1";
1575		break;
1576	case PCI_ERS_RESULT_DISCONNECT:
1577		envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY";
1578		envp[idx++] = "DEVICE_ONLINE=0";
1579		break;
1580	default:
1581		break;
1582	}
1583
1584	if (idx > 0) {
1585		envp[idx++] = NULL;
1586		kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp);
1587	}
1588}
1589#endif
1590
1591static int pci_bus_num_vf(struct device *dev)
1592{
1593	return pci_num_vf(to_pci_dev(dev));
1594}
1595
1596/**
1597 * pci_dma_configure - Setup DMA configuration
1598 * @dev: ptr to dev structure
1599 *
1600 * Function to update PCI devices's DMA configuration using the same
1601 * info from the OF node or ACPI node of host bridge's parent (if any).
1602 */
1603static int pci_dma_configure(struct device *dev)
1604{
1605	struct device *bridge;
1606	int ret = 0;
1607
1608	bridge = pci_get_host_bridge_device(to_pci_dev(dev));
1609
1610	if (IS_ENABLED(CONFIG_OF) && bridge->parent &&
1611	    bridge->parent->of_node) {
1612		ret = of_dma_configure(dev, bridge->parent->of_node, true);
1613	} else if (has_acpi_companion(bridge)) {
1614		struct acpi_device *adev = to_acpi_device_node(bridge->fwnode);
1615
1616		ret = acpi_dma_configure(dev, acpi_get_dma_attr(adev));
1617	}
1618
1619	pci_put_host_bridge_device(bridge);
1620	return ret;
1621}
1622
1623struct bus_type pci_bus_type = {
1624	.name		= "pci",
1625	.match		= pci_bus_match,
1626	.uevent		= pci_uevent,
1627	.probe		= pci_device_probe,
1628	.remove		= pci_device_remove,
1629	.shutdown	= pci_device_shutdown,
1630	.dev_groups	= pci_dev_groups,
1631	.bus_groups	= pci_bus_groups,
1632	.drv_groups	= pci_drv_groups,
1633	.pm		= PCI_PM_OPS_PTR,
1634	.num_vf		= pci_bus_num_vf,
1635	.dma_configure	= pci_dma_configure,
1636};
1637EXPORT_SYMBOL(pci_bus_type);
1638
1639#ifdef CONFIG_PCIEPORTBUS
1640static int pcie_port_bus_match(struct device *dev, struct device_driver *drv)
1641{
1642	struct pcie_device *pciedev;
1643	struct pcie_port_service_driver *driver;
1644
1645	if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type)
1646		return 0;
1647
1648	pciedev = to_pcie_device(dev);
1649	driver = to_service_driver(drv);
1650
1651	if (driver->service != pciedev->service)
1652		return 0;
1653
1654	if (driver->port_type != PCIE_ANY_PORT &&
1655	    driver->port_type != pci_pcie_type(pciedev->port))
1656		return 0;
1657
1658	return 1;
1659}
1660
1661struct bus_type pcie_port_bus_type = {
1662	.name		= "pci_express",
1663	.match		= pcie_port_bus_match,
1664};
1665EXPORT_SYMBOL_GPL(pcie_port_bus_type);
1666#endif
1667
1668static int __init pci_driver_init(void)
1669{
1670	int ret;
1671
1672	ret = bus_register(&pci_bus_type);
1673	if (ret)
1674		return ret;
1675
1676#ifdef CONFIG_PCIEPORTBUS
1677	ret = bus_register(&pcie_port_bus_type);
1678	if (ret)
1679		return ret;
1680#endif
1681	dma_debug_add_bus(&pci_bus_type);
1682	return 0;
1683}
1684postcore_initcall(pci_driver_init);