Blame view
drivers/ide/ide-scan-pci.c
2.69 KB
9ac59226c ide: move CONFIG_... |
1 2 3 4 5 6 7 8 |
/* * 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 */ |
ade2daf9c ide: make remaini... |
9 10 11 12 |
#include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/ide.h> |
9ac59226c ide: move CONFIG_... |
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
/* * 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; } 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; |
b1f9e5e35 ide: fix IRQ assi... |
57 |
int ret; |
9ac59226c ide: move CONFIG_... |
58 59 60 61 62 63 |
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); |
b1f9e5e35 ide: fix IRQ assi... |
64 65 66 67 68 69 70 71 |
if (id != NULL) { pci_assign_irq(dev); ret = d->probe(dev, id); if (ret >= 0) { dev->driver = d; pci_dev_get(dev); return 1; } |
9ac59226c ide: move CONFIG_... |
72 73 74 75 76 77 78 79 80 81 82 83 84 |
} } } return 0; } /** * 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. */ |
2eae6ebbf ide: small ide-sc... |
85 |
static int __init ide_scan_pcibus(void) |
9ac59226c ide: move CONFIG_... |
86 87 |
{ struct pci_dev *dev = NULL; |
6a0033457 drivers/ide: conv... |
88 |
struct pci_driver *d, *tmp; |
9ac59226c ide: move CONFIG_... |
89 90 |
pre_init = 0; |
db210f824 ide/ide-scan-pci.... |
91 |
for_each_pci_dev(dev) |
a594eeb1a IDE: remove ide=r... |
92 |
ide_scan_pcidev(dev); |
9ac59226c ide: move CONFIG_... |
93 94 95 96 97 |
/* * Hand the drivers over to the PCI layer now we * are post init. */ |
6a0033457 drivers/ide: conv... |
98 |
list_for_each_entry_safe(d, tmp, &ide_pci_drivers, node) { |
78a515f9f drivers/ide: Fix ... |
99 |
list_del(&d->node); |
9ac59226c ide: move CONFIG_... |
100 101 102 103 |
if (__pci_register_driver(d, d->driver.owner, d->driver.mod_name)) printk(KERN_ERR "%s: failed to register %s driver ", |
eb63963a5 ide: replace rema... |
104 |
__func__, d->driver.mod_name); |
9ac59226c ide: move CONFIG_... |
105 106 107 108 |
} return 0; } |
e04a2bd6d drivers/ide: make... |
109 |
device_initcall(ide_scan_pcibus); |