aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide.c
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-26 14:13:07 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-26 14:13:07 -0500
commitade2daf9c6e57845fe83a24e0a9fa1c03c6e91b1 (patch)
tree68070062d6306442caee50630c4213c911eb9064 /drivers/ide/ide.c
parent8ac4ce742c66100931b6f2d7a36b0df08bc721fe (diff)
ide: make remaining built-in only IDE host drivers modular (take 2)
* Make remaining built-in only IDE host drivers modular, add ide-scan-pci.c file for probing PCI host drivers registered with IDE core (special case for built-in IDE and CONFIG_IDEPCI_PCIBUS_ORDER=y) and then take care of the ordering in which all IDE host drivers are probed when IDE is built-in during link time. * Move probing of gayle, falconide, macide, q40ide and buddha (m68k arch specific) host drivers, before PCI ones (no PCI on m68k), ide-cris (cris arch specific), cmd640 (x86 arch specific) and pmac (ppc arch specific). * Move probing of ide-cris (cris arch specific) host driver before cmd640 (x86 arch specific). * Move probing of mpc8xx (ppc specific) host driver before ide-pnp (depends on ISA and none of ppc platform that use mpc8xx supports ISA) and ide-h8300 (h8300 arch specific). * Add "probe_vlb" kernel parameter to cmd640 host driver and update Documentation/ide.txt accordingly. * Make IDE_ARM config option visible so it can also be disabled if needed. * Remove bogus comment from ide.c while at it. v2: * Fix two issues spotted by Sergei: - replace ENOMEM error value by ENOENT in ide-h8300 host driver - fix MODULE_PARM_DESC() in cmd640 host driver Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: Mikael Starvik <starvik@axis.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide.c')
-rw-r--r--drivers/ide/ide.c131
1 files changed, 2 insertions, 129 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 6f99f5c90062..5f3e53ec5838 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -95,7 +95,7 @@ DEFINE_MUTEX(ide_cfg_mtx);
95 __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock); 95 __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
96 96
97#ifdef CONFIG_IDEPCI_PCIBUS_ORDER 97#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
98static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */ 98int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
99#endif 99#endif
100 100
101int noautodma = 0; 101int noautodma = 0;
@@ -178,8 +178,6 @@ static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
178#endif 178#endif
179} 179}
180 180
181extern void ide_arm_init(void);
182
183/* 181/*
184 * init_ide_data() sets reasonable default values into all fields 182 * init_ide_data() sets reasonable default values into all fields
185 * of all instances of the hwifs and drives, but only on the first call. 183 * of all instances of the hwifs and drives, but only on the first call.
@@ -1223,26 +1221,12 @@ static int __init match_parm (char *s, const char *keywords[], int vals[], int m
1223 return 0; /* zero = nothing matched */ 1221 return 0; /* zero = nothing matched */
1224} 1222}
1225 1223
1226#ifdef CONFIG_BLK_DEV_ALI14XX
1227extern int probe_ali14xx; 1224extern int probe_ali14xx;
1228extern int ali14xx_init(void);
1229#endif
1230#ifdef CONFIG_BLK_DEV_UMC8672
1231extern int probe_umc8672; 1225extern int probe_umc8672;
1232extern int umc8672_init(void);
1233#endif
1234#ifdef CONFIG_BLK_DEV_DTC2278
1235extern int probe_dtc2278; 1226extern int probe_dtc2278;
1236extern int dtc2278_init(void);
1237#endif
1238#ifdef CONFIG_BLK_DEV_HT6560B
1239extern int probe_ht6560b; 1227extern int probe_ht6560b;
1240extern int ht6560b_init(void);
1241#endif
1242#ifdef CONFIG_BLK_DEV_QD65XX
1243extern int probe_qd65xx; 1228extern int probe_qd65xx;
1244extern int qd65xx_init(void); 1229extern int cmd640_vlb;
1245#endif
1246 1230
1247static int __initdata is_chipset_set[MAX_HWIFS]; 1231static int __initdata is_chipset_set[MAX_HWIFS];
1248 1232
@@ -1458,11 +1442,8 @@ static int __init ide_setup(char *s)
1458#endif 1442#endif
1459#ifdef CONFIG_BLK_DEV_CMD640 1443#ifdef CONFIG_BLK_DEV_CMD640
1460 case -14: /* "cmd640_vlb" */ 1444 case -14: /* "cmd640_vlb" */
1461 {
1462 extern int cmd640_vlb; /* flag for cmd640.c */
1463 cmd640_vlb = 1; 1445 cmd640_vlb = 1;
1464 goto done; 1446 goto done;
1465 }
1466#endif 1447#endif
1467#ifdef CONFIG_BLK_DEV_HT6560B 1448#ifdef CONFIG_BLK_DEV_HT6560B
1468 case -13: /* "ht6560b" */ 1449 case -13: /* "ht6560b" */
@@ -1552,83 +1533,6 @@ done:
1552 return 1; 1533 return 1;
1553} 1534}
1554 1535
1555extern void __init pnpide_init(void);
1556extern void __exit pnpide_exit(void);
1557extern void __init h8300_ide_init(void);
1558extern void __init mpc8xx_ide_probe(void);
1559
1560/*
1561 * probe_for_hwifs() finds/initializes "known" IDE interfaces
1562 */
1563static void __init probe_for_hwifs (void)
1564{
1565#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
1566 ide_scan_pcibus(ide_scan_direction);
1567#endif
1568
1569#ifdef CONFIG_ETRAX_IDE
1570 {
1571 extern void init_e100_ide(void);
1572 init_e100_ide();
1573 }
1574#endif /* CONFIG_ETRAX_IDE */
1575#ifdef CONFIG_BLK_DEV_CMD640
1576 {
1577 extern void ide_probe_for_cmd640x(void);
1578 ide_probe_for_cmd640x();
1579 }
1580#endif /* CONFIG_BLK_DEV_CMD640 */
1581#ifdef CONFIG_BLK_DEV_IDE_PMAC
1582 {
1583 extern int pmac_ide_probe(void);
1584 (void)pmac_ide_probe();
1585 }
1586#endif /* CONFIG_BLK_DEV_IDE_PMAC */
1587#ifdef CONFIG_BLK_DEV_GAYLE
1588 {
1589 extern void gayle_init(void);
1590 gayle_init();
1591 }
1592#endif /* CONFIG_BLK_DEV_GAYLE */
1593#ifdef CONFIG_BLK_DEV_FALCON_IDE
1594 {
1595 extern void falconide_init(void);
1596 falconide_init();
1597 }
1598#endif /* CONFIG_BLK_DEV_FALCON_IDE */
1599#ifdef CONFIG_BLK_DEV_MAC_IDE
1600 {
1601 extern void macide_init(void);
1602 macide_init();
1603 }
1604#endif /* CONFIG_BLK_DEV_MAC_IDE */
1605#ifdef CONFIG_BLK_DEV_Q40IDE
1606 {
1607 extern void q40ide_init(void);
1608 q40ide_init();
1609 }
1610#endif /* CONFIG_BLK_DEV_Q40IDE */
1611#ifdef CONFIG_BLK_DEV_BUDDHA
1612 {
1613 extern void buddha_init(void);
1614 buddha_init();
1615 }
1616#endif /* CONFIG_BLK_DEV_BUDDHA */
1617#ifdef CONFIG_BLK_DEV_IDEPNP
1618 pnpide_init();
1619#endif
1620#ifdef CONFIG_H8300
1621 h8300_ide_init();
1622#endif
1623#ifdef BLK_DEV_MPC8xx_IDE
1624 mpc8xx_ide_probe();
1625#endif
1626}
1627
1628/*
1629 * Probe module
1630 */
1631
1632EXPORT_SYMBOL(ide_lock); 1536EXPORT_SYMBOL(ide_lock);
1633 1537
1634static int ide_bus_match(struct device *dev, struct device_driver *drv) 1538static int ide_bus_match(struct device *dev, struct device_driver *drv)
@@ -1775,33 +1679,6 @@ static int __init ide_init(void)
1775 1679
1776 proc_ide_create(); 1680 proc_ide_create();
1777 1681
1778#ifdef CONFIG_IDE_ARM
1779 ide_arm_init();
1780#endif
1781#ifdef CONFIG_BLK_DEV_ALI14XX
1782 if (probe_ali14xx)
1783 (void)ali14xx_init();
1784#endif
1785#ifdef CONFIG_BLK_DEV_UMC8672
1786 if (probe_umc8672)
1787 (void)umc8672_init();
1788#endif
1789#ifdef CONFIG_BLK_DEV_DTC2278
1790 if (probe_dtc2278)
1791 (void)dtc2278_init();
1792#endif
1793#ifdef CONFIG_BLK_DEV_HT6560B
1794 if (probe_ht6560b)
1795 (void)ht6560b_init();
1796#endif
1797#ifdef CONFIG_BLK_DEV_QD65XX
1798 if (probe_qd65xx)
1799 (void)qd65xx_init();
1800#endif
1801
1802 /* Probe for special PCI and other "known" interface chipsets. */
1803 probe_for_hwifs();
1804
1805 return 0; 1682 return 0;
1806} 1683}
1807 1684
@@ -1837,10 +1714,6 @@ void __exit cleanup_module (void)
1837 for (index = 0; index < MAX_HWIFS; ++index) 1714 for (index = 0; index < MAX_HWIFS; ++index)
1838 ide_unregister(index); 1715 ide_unregister(index);
1839 1716
1840#ifdef CONFIG_BLK_DEV_IDEPNP
1841 pnpide_exit();
1842#endif
1843
1844 proc_ide_destroy(); 1717 proc_ide_destroy();
1845 1718
1846 bus_unregister(&ide_bus_type); 1719 bus_unregister(&ide_bus_type);