cregit-Linux how code gets into the kernel

Release 4.14 drivers/ide/ide-scan-pci.c

Directory: drivers/ide
/*
 * 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

PersonTokensPropCommitsCommitProp
Bartlomiej Zolnierkiewicz57100.00%1100.00%
Total57100.00%1100.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; int ret; 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) { pci_assign_irq(dev); ret = d->probe(dev, id); if (ret >= 0) { dev->driver = d; pci_dev_get(dev); return 1; } } } } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Bartlomiej Zolnierkiewicz10085.47%150.00%
Lorenzo Pieralisi1714.53%150.00%
Total117100.00%2100.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

PersonTokensPropCommitsCommitProp
Bartlomiej Zolnierkiewicz10296.23%125.00%
Thiago Farina21.89%125.00%
Adrian Bunk10.94%125.00%
Harvey Harrison10.94%125.00%
Total106100.00%4100.00%

device_initcall(ide_scan_pcibus);

Overall Contributors

PersonTokensPropCommitsCommitProp
Bartlomiej Zolnierkiewicz29792.81%228.57%
Lorenzo Pieralisi175.31%114.29%
Thiago Farina20.62%114.29%
Adrian Bunk20.62%114.29%
Paul Gortmaker10.31%114.29%
Harvey Harrison10.31%114.29%
Total320100.00%7100.00%
Directory: drivers/ide
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.