diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-26 14:13:07 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-26 14:13:07 -0500 |
commit | ade2daf9c6e57845fe83a24e0a9fa1c03c6e91b1 (patch) | |
tree | 68070062d6306442caee50630c4213c911eb9064 /drivers/ide/ide.c | |
parent | 8ac4ce742c66100931b6f2d7a36b0df08bc721fe (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.c | 131 |
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 |
98 | static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */ | 98 | int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */ |
99 | #endif | 99 | #endif |
100 | 100 | ||
101 | int noautodma = 0; | 101 | int 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 | ||
181 | extern 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 | ||
1227 | extern int probe_ali14xx; | 1224 | extern int probe_ali14xx; |
1228 | extern int ali14xx_init(void); | ||
1229 | #endif | ||
1230 | #ifdef CONFIG_BLK_DEV_UMC8672 | ||
1231 | extern int probe_umc8672; | 1225 | extern int probe_umc8672; |
1232 | extern int umc8672_init(void); | ||
1233 | #endif | ||
1234 | #ifdef CONFIG_BLK_DEV_DTC2278 | ||
1235 | extern int probe_dtc2278; | 1226 | extern int probe_dtc2278; |
1236 | extern int dtc2278_init(void); | ||
1237 | #endif | ||
1238 | #ifdef CONFIG_BLK_DEV_HT6560B | ||
1239 | extern int probe_ht6560b; | 1227 | extern int probe_ht6560b; |
1240 | extern int ht6560b_init(void); | ||
1241 | #endif | ||
1242 | #ifdef CONFIG_BLK_DEV_QD65XX | ||
1243 | extern int probe_qd65xx; | 1228 | extern int probe_qd65xx; |
1244 | extern int qd65xx_init(void); | 1229 | extern int cmd640_vlb; |
1245 | #endif | ||
1246 | 1230 | ||
1247 | static int __initdata is_chipset_set[MAX_HWIFS]; | 1231 | static 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 | ||
1555 | extern void __init pnpide_init(void); | ||
1556 | extern void __exit pnpide_exit(void); | ||
1557 | extern void __init h8300_ide_init(void); | ||
1558 | extern void __init mpc8xx_ide_probe(void); | ||
1559 | |||
1560 | /* | ||
1561 | * probe_for_hwifs() finds/initializes "known" IDE interfaces | ||
1562 | */ | ||
1563 | static 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 | |||
1632 | EXPORT_SYMBOL(ide_lock); | 1536 | EXPORT_SYMBOL(ide_lock); |
1633 | 1537 | ||
1634 | static int ide_bus_match(struct device *dev, struct device_driver *drv) | 1538 | static 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); |