Release 4.12 drivers/ide/ide-scan-pci.c
  
  
  
/*
 * support for probing IDE PCI devices in the PCI bus order
 *
 * Copyright (c) 1998-2000  Andre Hedrick <andre@linux-ide.org>
 * Copyright (c) 1995-1998  Mark Lord
 *
 * May be copied or modified under the terms of the GNU General Public License
 */
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/ide.h>
/*
 *      Module interfaces
 */
static int pre_init = 1;		
/* Before first ordered IDE scan */
static LIST_HEAD(ide_pci_drivers);
/*
 *      __ide_pci_register_driver       -       attach IDE driver
 *      @driver: pci driver
 *      @module: owner module of the driver
 *
 *      Registers a driver with the IDE layer. The IDE layer arranges that
 *      boot time setup is done in the expected device order and then
 *      hands the controllers off to the core PCI code to do the rest of
 *      the work.
 *
 *      Returns are the same as for pci_register_driver
 */
int __ide_pci_register_driver(struct pci_driver *driver, struct module *module,
			      const char *mod_name)
{
	if (!pre_init)
		return __pci_register_driver(driver, module, mod_name);
	driver->driver.owner = module;
	list_add_tail(&driver->node, &ide_pci_drivers);
	return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp | 
| Bartlomiej Zolnierkiewicz | 57 | 100.00% | 1 | 100.00% | 
| Total | 57 | 100.00% | 1 | 100.00% | 
EXPORT_SYMBOL_GPL(__ide_pci_register_driver);
/**
 *      ide_scan_pcidev         -       find an IDE driver for a device
 *      @dev: PCI device to check
 *
 *      Look for an IDE driver to handle the device we are considering.
 *      This is only used during boot up to get the ordering correct. After
 *      boot up the pci layer takes over the job.
 */
static int __init ide_scan_pcidev(struct pci_dev *dev)
{
	struct list_head *l;
	struct pci_driver *d;
	list_for_each(l, &ide_pci_drivers) {
		d = list_entry(l, struct pci_driver, node);
		if (d->id_table) {
			const struct pci_device_id *id =
				pci_match_id(d->id_table, dev);
			if (id != NULL && d->probe(dev, id) >= 0) {
				dev->driver = d;
				pci_dev_get(dev);
				return 1;
			}
		}
	}
	return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp | 
| Bartlomiej Zolnierkiewicz | 101 | 100.00% | 1 | 100.00% | 
| Total | 101 | 100.00% | 1 | 100.00% | 
/**
 *      ide_scan_pcibus         -       perform the initial IDE driver scan
 *
 *      Perform the initial bus rather than driver ordered scan of the
 *      PCI drivers. After this all IDE pci handling becomes standard
 *      module ordering not traditionally ordered.
 */
static int __init ide_scan_pcibus(void)
{
	struct pci_dev *dev = NULL;
	struct pci_driver *d;
	struct list_head *l, *n;
	pre_init = 0;
	for_each_pci_dev(dev)
		ide_scan_pcidev(dev);
	/*
         *      Hand the drivers over to the PCI layer now we
         *      are post init.
         */
	list_for_each_safe(l, n, &ide_pci_drivers) {
		list_del(l);
		d = list_entry(l, struct pci_driver, node);
		if (__pci_register_driver(d, d->driver.owner,
					  d->driver.mod_name))
			printk(KERN_ERR "%s: failed to register %s driver\n",
					__func__, d->driver.mod_name);
	}
	return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp | 
| Bartlomiej Zolnierkiewicz | 102 | 96.23% | 1 | 25.00% | 
| Thiago Farina | 2 | 1.89% | 1 | 25.00% | 
| Adrian Bunk | 1 | 0.94% | 1 | 25.00% | 
| Harvey Harrison | 1 | 0.94% | 1 | 25.00% | 
| Total | 106 | 100.00% | 4 | 100.00% | 
device_initcall(ide_scan_pcibus);
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp | 
| Bartlomiej Zolnierkiewicz | 298 | 98.03% | 2 | 33.33% | 
| Adrian Bunk | 2 | 0.66% | 1 | 16.67% | 
| Thiago Farina | 2 | 0.66% | 1 | 16.67% | 
| Harvey Harrison | 1 | 0.33% | 1 | 16.67% | 
| Paul Gortmaker | 1 | 0.33% | 1 | 16.67% | 
| Total | 304 | 100.00% | 6 | 100.00% | 
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.