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