xref: /openbmc/linux/drivers/pci/pci-driver.c (revision 96de0e252cedffad61b3cb5e05662c591898e69a)
1 /*
2  * drivers/pci/pci-driver.c
3  *
4  */
5 
6 #include <linux/pci.h>
7 #include <linux/module.h>
8 #include <linux/init.h>
9 #include <linux/device.h>
10 #include <linux/mempolicy.h>
11 #include <linux/string.h>
12 #include <linux/slab.h>
13 #include <linux/sched.h>
14 #include "pci.h"
15 
16 /*
17  * Dynamic device IDs are disabled for !CONFIG_HOTPLUG
18  */
19 
20 struct pci_dynid {
21 	struct list_head node;
22 	struct pci_device_id id;
23 };
24 
25 #ifdef CONFIG_HOTPLUG
26 
27 /**
28  * store_new_id - add a new PCI device ID to this driver and re-probe devices
29  * @driver: target device driver
30  * @buf: buffer for scanning device ID data
31  * @count: input size
32  *
33  * Adds a new dynamic pci device ID to this driver,
34  * and causes the driver to probe for all devices again.
35  */
36 static ssize_t
37 store_new_id(struct device_driver *driver, const char *buf, size_t count)
38 {
39 	struct pci_dynid *dynid;
40 	struct pci_driver *pdrv = to_pci_driver(driver);
41 	__u32 vendor, device, subvendor=PCI_ANY_ID,
42 		subdevice=PCI_ANY_ID, class=0, class_mask=0;
43 	unsigned long driver_data=0;
44 	int fields=0;
45 	int retval = 0;
46 
47 	fields = sscanf(buf, "%x %x %x %x %x %x %lux",
48 			&vendor, &device, &subvendor, &subdevice,
49 			&class, &class_mask, &driver_data);
50 	if (fields < 2)
51 		return -EINVAL;
52 
53 	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
54 	if (!dynid)
55 		return -ENOMEM;
56 
57 	dynid->id.vendor = vendor;
58 	dynid->id.device = device;
59 	dynid->id.subvendor = subvendor;
60 	dynid->id.subdevice = subdevice;
61 	dynid->id.class = class;
62 	dynid->id.class_mask = class_mask;
63 	dynid->id.driver_data = pdrv->dynids.use_driver_data ?
64 		driver_data : 0UL;
65 
66 	spin_lock(&pdrv->dynids.lock);
67 	list_add_tail(&dynid->node, &pdrv->dynids.list);
68 	spin_unlock(&pdrv->dynids.lock);
69 
70 	if (get_driver(&pdrv->driver)) {
71 		retval = driver_attach(&pdrv->driver);
72 		put_driver(&pdrv->driver);
73 	}
74 
75 	if (retval)
76 		return retval;
77 	return count;
78 }
79 static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
80 
81 static void
82 pci_free_dynids(struct pci_driver *drv)
83 {
84 	struct pci_dynid *dynid, *n;
85 
86 	spin_lock(&drv->dynids.lock);
87 	list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
88 		list_del(&dynid->node);
89 		kfree(dynid);
90 	}
91 	spin_unlock(&drv->dynids.lock);
92 }
93 
94 static int
95 pci_create_newid_file(struct pci_driver *drv)
96 {
97 	int error = 0;
98 	if (drv->probe != NULL)
99 		error = sysfs_create_file(&drv->driver.kobj,
100 					  &driver_attr_new_id.attr);
101 	return error;
102 }
103 
104 #else /* !CONFIG_HOTPLUG */
105 static inline void pci_free_dynids(struct pci_driver *drv) {}
106 static inline int pci_create_newid_file(struct pci_driver *drv)
107 {
108 	return 0;
109 }
110 #endif
111 
112 /**
113  * pci_match_id - See if a pci device matches a given pci_id table
114  * @ids: array of PCI device id structures to search in
115  * @dev: the PCI device structure to match against.
116  *
117  * Used by a driver to check whether a PCI device present in the
118  * system is in its list of supported devices.  Returns the matching
119  * pci_device_id structure or %NULL if there is no match.
120  *
121  * Deprecated, don't use this as it will not catch any dynamic ids
122  * that a driver might want to check for.
123  */
124 const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
125 					 struct pci_dev *dev)
126 {
127 	if (ids) {
128 		while (ids->vendor || ids->subvendor || ids->class_mask) {
129 			if (pci_match_one_device(ids, dev))
130 				return ids;
131 			ids++;
132 		}
133 	}
134 	return NULL;
135 }
136 
137 /**
138  * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
139  * @drv: the PCI driver to match against
140  * @dev: the PCI device structure to match against
141  *
142  * Used by a driver to check whether a PCI device present in the
143  * system is in its list of supported devices.  Returns the matching
144  * pci_device_id structure or %NULL if there is no match.
145  */
146 const struct pci_device_id *pci_match_device(struct pci_driver *drv,
147 					     struct pci_dev *dev)
148 {
149 	struct pci_dynid *dynid;
150 
151 	/* Look at the dynamic ids first, before the static ones */
152 	spin_lock(&drv->dynids.lock);
153 	list_for_each_entry(dynid, &drv->dynids.list, node) {
154 		if (pci_match_one_device(&dynid->id, dev)) {
155 			spin_unlock(&drv->dynids.lock);
156 			return &dynid->id;
157 		}
158 	}
159 	spin_unlock(&drv->dynids.lock);
160 
161 	return pci_match_id(drv->id_table, dev);
162 }
163 
164 static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
165 			  const struct pci_device_id *id)
166 {
167 	int error;
168 #ifdef CONFIG_NUMA
169 	/* Execute driver initialization on node where the
170 	   device's bus is attached to.  This way the driver likely
171 	   allocates its local memory on the right node without
172 	   any need to change it. */
173 	struct mempolicy *oldpol;
174 	cpumask_t oldmask = current->cpus_allowed;
175 	int node = pcibus_to_node(dev->bus);
176 	if (node >= 0 && node_online(node))
177 	    set_cpus_allowed(current, node_to_cpumask(node));
178 	/* And set default memory allocation policy */
179 	oldpol = current->mempolicy;
180 	current->mempolicy = &default_policy;
181 	mpol_get(current->mempolicy);
182 #endif
183 	error = drv->probe(dev, id);
184 #ifdef CONFIG_NUMA
185 	set_cpus_allowed(current, oldmask);
186 	mpol_free(current->mempolicy);
187 	current->mempolicy = oldpol;
188 #endif
189 	return error;
190 }
191 
192 /**
193  * __pci_device_probe()
194  * @drv: driver to call to check if it wants the PCI device
195  * @pci_dev: PCI device being probed
196  *
197  * returns 0 on success, else error.
198  * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
199  */
200 static int
201 __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
202 {
203 	const struct pci_device_id *id;
204 	int error = 0;
205 
206 	if (!pci_dev->driver && drv->probe) {
207 		error = -ENODEV;
208 
209 		id = pci_match_device(drv, pci_dev);
210 		if (id)
211 			error = pci_call_probe(drv, pci_dev, id);
212 		if (error >= 0) {
213 			pci_dev->driver = drv;
214 			error = 0;
215 		}
216 	}
217 	return error;
218 }
219 
220 static int pci_device_probe(struct device * dev)
221 {
222 	int error = 0;
223 	struct pci_driver *drv;
224 	struct pci_dev *pci_dev;
225 
226 	drv = to_pci_driver(dev->driver);
227 	pci_dev = to_pci_dev(dev);
228 	pci_dev_get(pci_dev);
229 	error = __pci_device_probe(drv, pci_dev);
230 	if (error)
231 		pci_dev_put(pci_dev);
232 
233 	return error;
234 }
235 
236 static int pci_device_remove(struct device * dev)
237 {
238 	struct pci_dev * pci_dev = to_pci_dev(dev);
239 	struct pci_driver * drv = pci_dev->driver;
240 
241 	if (drv) {
242 		if (drv->remove)
243 			drv->remove(pci_dev);
244 		pci_dev->driver = NULL;
245 	}
246 
247 	/*
248 	 * If the device is still on, set the power state as "unknown",
249 	 * since it might change by the next time we load the driver.
250 	 */
251 	if (pci_dev->current_state == PCI_D0)
252 		pci_dev->current_state = PCI_UNKNOWN;
253 
254 	/*
255 	 * We would love to complain here if pci_dev->is_enabled is set, that
256 	 * the driver should have called pci_disable_device(), but the
257 	 * unfortunate fact is there are too many odd BIOS and bridge setups
258 	 * that don't like drivers doing that all of the time.
259 	 * Oh well, we can dream of sane hardware when we sleep, no matter how
260 	 * horrible the crap we have to deal with is when we are awake...
261 	 */
262 
263 	pci_dev_put(pci_dev);
264 	return 0;
265 }
266 
267 static int pci_device_suspend(struct device * dev, pm_message_t state)
268 {
269 	struct pci_dev * pci_dev = to_pci_dev(dev);
270 	struct pci_driver * drv = pci_dev->driver;
271 	int i = 0;
272 
273 	if (drv && drv->suspend) {
274 		i = drv->suspend(pci_dev, state);
275 		suspend_report_result(drv->suspend, i);
276 	} else {
277 		pci_save_state(pci_dev);
278 		/*
279 		 * mark its power state as "unknown", since we don't know if
280 		 * e.g. the BIOS will change its device state when we suspend.
281 		 */
282 		if (pci_dev->current_state == PCI_D0)
283 			pci_dev->current_state = PCI_UNKNOWN;
284 	}
285 	return i;
286 }
287 
288 static int pci_device_suspend_late(struct device * dev, pm_message_t state)
289 {
290 	struct pci_dev * pci_dev = to_pci_dev(dev);
291 	struct pci_driver * drv = pci_dev->driver;
292 	int i = 0;
293 
294 	if (drv && drv->suspend_late) {
295 		i = drv->suspend_late(pci_dev, state);
296 		suspend_report_result(drv->suspend_late, i);
297 	}
298 	return i;
299 }
300 
301 /*
302  * Default resume method for devices that have no driver provided resume,
303  * or not even a driver at all.
304  */
305 static int pci_default_resume(struct pci_dev *pci_dev)
306 {
307 	int retval = 0;
308 
309 	/* restore the PCI config space */
310 	pci_restore_state(pci_dev);
311 	/* if the device was enabled before suspend, reenable */
312 	retval = pci_reenable_device(pci_dev);
313 	/* if the device was busmaster before the suspend, make it busmaster again */
314 	if (pci_dev->is_busmaster)
315 		pci_set_master(pci_dev);
316 
317 	return retval;
318 }
319 
320 static int pci_device_resume(struct device * dev)
321 {
322 	int error;
323 	struct pci_dev * pci_dev = to_pci_dev(dev);
324 	struct pci_driver * drv = pci_dev->driver;
325 
326 	if (drv && drv->resume)
327 		error = drv->resume(pci_dev);
328 	else
329 		error = pci_default_resume(pci_dev);
330 	return error;
331 }
332 
333 static int pci_device_resume_early(struct device * dev)
334 {
335 	int error = 0;
336 	struct pci_dev * pci_dev = to_pci_dev(dev);
337 	struct pci_driver * drv = pci_dev->driver;
338 
339 	pci_fixup_device(pci_fixup_resume, pci_dev);
340 
341 	if (drv && drv->resume_early)
342 		error = drv->resume_early(pci_dev);
343 	return error;
344 }
345 
346 static void pci_device_shutdown(struct device *dev)
347 {
348 	struct pci_dev *pci_dev = to_pci_dev(dev);
349 	struct pci_driver *drv = pci_dev->driver;
350 
351 	if (drv && drv->shutdown)
352 		drv->shutdown(pci_dev);
353 }
354 
355 #define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
356 #define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
357 
358 static ssize_t
359 pci_driver_attr_show(struct kobject * kobj, struct attribute *attr, char *buf)
360 {
361 	struct device_driver *driver = kobj_to_pci_driver(kobj);
362 	struct driver_attribute *dattr = attr_to_driver_attribute(attr);
363 	ssize_t ret;
364 
365 	if (!get_driver(driver))
366 		return -ENODEV;
367 
368 	ret = dattr->show ? dattr->show(driver, buf) : -EIO;
369 
370 	put_driver(driver);
371 	return ret;
372 }
373 
374 static ssize_t
375 pci_driver_attr_store(struct kobject * kobj, struct attribute *attr,
376 		      const char *buf, size_t count)
377 {
378 	struct device_driver *driver = kobj_to_pci_driver(kobj);
379 	struct driver_attribute *dattr = attr_to_driver_attribute(attr);
380 	ssize_t ret;
381 
382 	if (!get_driver(driver))
383 		return -ENODEV;
384 
385 	ret = dattr->store ? dattr->store(driver, buf, count) : -EIO;
386 
387 	put_driver(driver);
388 	return ret;
389 }
390 
391 static struct sysfs_ops pci_driver_sysfs_ops = {
392 	.show = pci_driver_attr_show,
393 	.store = pci_driver_attr_store,
394 };
395 static struct kobj_type pci_driver_kobj_type = {
396 	.sysfs_ops = &pci_driver_sysfs_ops,
397 };
398 
399 /**
400  * __pci_register_driver - register a new pci driver
401  * @drv: the driver structure to register
402  * @owner: owner module of drv
403  * @mod_name: module name string
404  *
405  * Adds the driver structure to the list of registered drivers.
406  * Returns a negative value on error, otherwise 0.
407  * If no error occurred, the driver remains registered even if
408  * no device was claimed during registration.
409  */
410 int __pci_register_driver(struct pci_driver *drv, struct module *owner,
411 			  const char *mod_name)
412 {
413 	int error;
414 
415 	/* initialize common driver fields */
416 	drv->driver.name = drv->name;
417 	drv->driver.bus = &pci_bus_type;
418 	drv->driver.owner = owner;
419 	drv->driver.mod_name = mod_name;
420 	drv->driver.kobj.ktype = &pci_driver_kobj_type;
421 
422 	spin_lock_init(&drv->dynids.lock);
423 	INIT_LIST_HEAD(&drv->dynids.list);
424 
425 	/* register with core */
426 	error = driver_register(&drv->driver);
427 	if (error)
428 		return error;
429 
430 	error = pci_create_newid_file(drv);
431 	if (error)
432 		driver_unregister(&drv->driver);
433 
434 	return error;
435 }
436 
437 /**
438  * pci_unregister_driver - unregister a pci driver
439  * @drv: the driver structure to unregister
440  *
441  * Deletes the driver structure from the list of registered PCI drivers,
442  * gives it a chance to clean up by calling its remove() function for
443  * each device it was responsible for, and marks those devices as
444  * driverless.
445  */
446 
447 void
448 pci_unregister_driver(struct pci_driver *drv)
449 {
450 	driver_unregister(&drv->driver);
451 	pci_free_dynids(drv);
452 }
453 
454 static struct pci_driver pci_compat_driver = {
455 	.name = "compat"
456 };
457 
458 /**
459  * pci_dev_driver - get the pci_driver of a device
460  * @dev: the device to query
461  *
462  * Returns the appropriate pci_driver structure or %NULL if there is no
463  * registered driver for the device.
464  */
465 struct pci_driver *
466 pci_dev_driver(const struct pci_dev *dev)
467 {
468 	if (dev->driver)
469 		return dev->driver;
470 	else {
471 		int i;
472 		for(i=0; i<=PCI_ROM_RESOURCE; i++)
473 			if (dev->resource[i].flags & IORESOURCE_BUSY)
474 				return &pci_compat_driver;
475 	}
476 	return NULL;
477 }
478 
479 /**
480  * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
481  * @dev: the PCI device structure to match against
482  * @drv: the device driver to search for matching PCI device id structures
483  *
484  * Used by a driver to check whether a PCI device present in the
485  * system is in its list of supported devices. Returns the matching
486  * pci_device_id structure or %NULL if there is no match.
487  */
488 static int pci_bus_match(struct device *dev, struct device_driver *drv)
489 {
490 	struct pci_dev *pci_dev = to_pci_dev(dev);
491 	struct pci_driver *pci_drv = to_pci_driver(drv);
492 	const struct pci_device_id *found_id;
493 
494 	found_id = pci_match_device(pci_drv, pci_dev);
495 	if (found_id)
496 		return 1;
497 
498 	return 0;
499 }
500 
501 /**
502  * pci_dev_get - increments the reference count of the pci device structure
503  * @dev: the device being referenced
504  *
505  * Each live reference to a device should be refcounted.
506  *
507  * Drivers for PCI devices should normally record such references in
508  * their probe() methods, when they bind to a device, and release
509  * them by calling pci_dev_put(), in their disconnect() methods.
510  *
511  * A pointer to the device with the incremented reference counter is returned.
512  */
513 struct pci_dev *pci_dev_get(struct pci_dev *dev)
514 {
515 	if (dev)
516 		get_device(&dev->dev);
517 	return dev;
518 }
519 
520 /**
521  * pci_dev_put - release a use of the pci device structure
522  * @dev: device that's been disconnected
523  *
524  * Must be called when a user of a device is finished with it.  When the last
525  * user of the device calls this function, the memory of the device is freed.
526  */
527 void pci_dev_put(struct pci_dev *dev)
528 {
529 	if (dev)
530 		put_device(&dev->dev);
531 }
532 
533 #ifndef CONFIG_HOTPLUG
534 int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
535 {
536 	return -ENODEV;
537 }
538 #endif
539 
540 struct bus_type pci_bus_type = {
541 	.name		= "pci",
542 	.match		= pci_bus_match,
543 	.uevent		= pci_uevent,
544 	.probe		= pci_device_probe,
545 	.remove		= pci_device_remove,
546 	.suspend	= pci_device_suspend,
547 	.suspend_late	= pci_device_suspend_late,
548 	.resume_early	= pci_device_resume_early,
549 	.resume		= pci_device_resume,
550 	.shutdown	= pci_device_shutdown,
551 	.dev_attrs	= pci_dev_attrs,
552 };
553 
554 static int __init pci_driver_init(void)
555 {
556 	return bus_register(&pci_bus_type);
557 }
558 
559 postcore_initcall(pci_driver_init);
560 
561 EXPORT_SYMBOL(pci_match_id);
562 EXPORT_SYMBOL(pci_match_device);
563 EXPORT_SYMBOL(__pci_register_driver);
564 EXPORT_SYMBOL(pci_unregister_driver);
565 EXPORT_SYMBOL(pci_dev_driver);
566 EXPORT_SYMBOL(pci_bus_type);
567 EXPORT_SYMBOL(pci_dev_get);
568 EXPORT_SYMBOL(pci_dev_put);
569