ide: make remaining built-in only IDE host drivers modular (take 2)
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Jan 2008 19:13:07 +0000 (20:13 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sat, 26 Jan 2008 19:13:07 +0000 (20:13 +0100)
* 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>
30 files changed:
Documentation/ide.txt
drivers/ide/Kconfig
drivers/ide/Makefile
drivers/ide/arm/Makefile
drivers/ide/arm/ide_arm.c
drivers/ide/cris/Makefile
drivers/ide/cris/ide-cris.c
drivers/ide/h8300/Makefile [new file with mode: 0644]
drivers/ide/h8300/ide-h8300.c
drivers/ide/ide-pnp.c
drivers/ide/ide-scan-pci.c [new file with mode: 0644]
drivers/ide/ide.c
drivers/ide/legacy/Makefile
drivers/ide/legacy/ali14xx.c
drivers/ide/legacy/buddha.c
drivers/ide/legacy/dtc2278.c
drivers/ide/legacy/falconide.c
drivers/ide/legacy/gayle.c
drivers/ide/legacy/ht6560b.c
drivers/ide/legacy/macide.c
drivers/ide/legacy/q40ide.c
drivers/ide/legacy/qd65xx.c
drivers/ide/legacy/umc8672.c
drivers/ide/pci/Makefile
drivers/ide/pci/cmd640.c
drivers/ide/ppc/Makefile [new file with mode: 0644]
drivers/ide/ppc/mpc8xx.c
drivers/ide/ppc/pmac.c
drivers/ide/setup-pci.c
include/linux/ide.h

index 1d50f23a5cab092b237f09b21ff873f334224782..b29ccb43d6cc95692404bd60aed6e2a1cf349844 100644 (file)
@@ -30,7 +30,7 @@
 ***
 ***  The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT*
 ***  automatically detected by Linux.  For safe, reliable operation with such
-***  interfaces, one *MUST* use the "ide0=cmd640_vlb" kernel option.
+***  interfaces, one *MUST* use the "cmd640.probe_vlb" kernel option.
 ***
 ***  Use of the "serialize" option is no longer necessary.
 
@@ -292,9 +292,6 @@ The following are valid ONLY on ide0, which usually corresponds
 to the first ATA interface found on the particular host, and the defaults for
 the base,ctl ports must not be altered.
 
- "ide0=cmd640_vlb"     : *REQUIRED* for VLB cards with the CMD640 chip
-                         (not for PCI -- automatically detected)
-
  "ide=doubler"         : probe/support IDE doublers on Amiga
 
 There may be more options than shown -- use the source, Luke!
@@ -310,6 +307,10 @@ i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use:
 * "probe" module parameter when ali14xx driver is compiled as module
   ("modprobe ali14xx probe")
 
+Also for legacy CMD640 host driver (cmd640) you need to use "probe_vlb"
+kernel paremeter to enable probing for VLB version of the chipset (PCI ones
+are detected automatically).
+
 ================================================================================
 
 IDE ATAPI streaming tape driver
index 7c419e87a4a4557a773ec7fa6e7bb428cf3d6c50..e92128a87f26798cfb394ad17c6306c6411f11f5 100644 (file)
@@ -325,7 +325,7 @@ config BLK_DEV_PLATFORM
          If unsure, say N.
 
 config BLK_DEV_CMD640
-       bool "CMD640 chipset bugfix/support"
+       tristate "CMD640 chipset bugfix/support"
        depends on X86
        ---help---
          The CMD-Technologies CMD640 IDE chip is used on many common 486 and
@@ -359,7 +359,7 @@ config BLK_DEV_CMD640_ENHANCED
          Otherwise say N.
 
 config BLK_DEV_IDEPNP
-       bool "PNP EIDE support"
+       tristate "PNP EIDE support"
        depends on PNP
        help
          If you have a PnP (Plug and Play) compatible EIDE card and
@@ -788,7 +788,7 @@ config BLK_DEV_CELLEB
 endif
 
 config BLK_DEV_IDE_PMAC
-       bool "Builtin PowerMac IDE support"
+       tristate "Builtin PowerMac IDE support"
        depends on PPC_PMAC && IDE=y && BLK_DEV_IDE=y
        help
          This driver provides support for the built-in IDE controller on
@@ -842,7 +842,9 @@ config BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ
        depends on BLK_DEV_IDE_AU1XXX
 
 config IDE_ARM
-       def_bool ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
+       tristate "ARM IDE support"
+       depends on ARM && (ARCH_CLPS7500 || ARCH_RPC || ARCH_SHARK)
+       default y
 
 config BLK_DEV_IDE_ICSIDE
        tristate "ICS IDE interface support"
@@ -874,7 +876,7 @@ config BLK_DEV_IDE_BAST
          Simtec BAST or the Thorcom VR1000
 
 config ETRAX_IDE
-       bool "ETRAX IDE support"
+       tristate "ETRAX IDE support"
        depends on CRIS && BROKEN
        select BLK_DEV_IDEDMA
        help
@@ -908,14 +910,14 @@ config ETRAX_IDE_G27_RESET
 endchoice
 
 config IDE_H8300
-       bool "H8300 IDE support"
+       tristate "H8300 IDE support"
        depends on H8300
        default y
        help
          Enables the H8300 IDE driver.
 
 config BLK_DEV_GAYLE
-       bool "Amiga Gayle IDE interface support"
+       tristate "Amiga Gayle IDE interface support"
        depends on AMIGA
        help
          This is the IDE driver for the Amiga Gayle IDE interface. It supports
@@ -946,7 +948,7 @@ config BLK_DEV_IDEDOUBLER
          runtime using the "ide=doubler" kernel boot parameter.
 
 config BLK_DEV_BUDDHA
-       bool "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)"
+       tristate "Buddha/Catweasel/X-Surf IDE interface support (EXPERIMENTAL)"
        depends on ZORRO && EXPERIMENTAL
        help
          This is the IDE driver for the IDE interfaces on the Buddha, 
@@ -958,7 +960,7 @@ config BLK_DEV_BUDDHA
          to one of its IDE interfaces.
 
 config BLK_DEV_FALCON_IDE
-       bool "Falcon IDE interface support"
+       tristate "Falcon IDE interface support"
        depends on ATARI
        help
          This is the IDE driver for the builtin IDE interface on the Atari
@@ -967,7 +969,7 @@ config BLK_DEV_FALCON_IDE
          interface.
 
 config BLK_DEV_MAC_IDE
-       bool "Macintosh Quadra/Powerbook IDE interface support"
+       tristate "Macintosh Quadra/Powerbook IDE interface support"
        depends on MAC
        help
          This is the IDE driver for the builtin IDE interface on some m68k
@@ -980,7 +982,7 @@ config BLK_DEV_MAC_IDE
          builtin IDE interface.
 
 config BLK_DEV_Q40IDE
-       bool "Q40/Q60 IDE interface support"
+       tristate "Q40/Q60 IDE interface support"
        depends on Q40
        help
          Enable the on-board IDE controller in the Q40/Q60.  This should
@@ -988,7 +990,7 @@ config BLK_DEV_Q40IDE
          drive subsystem through an expansion card.
 
 config BLK_DEV_MPC8xx_IDE
-       bool "MPC8xx IDE support"
+       tristate "MPC8xx IDE support"
        depends on 8xx && (LWMON || IVMS8 || IVML24 || TQM8xxL) && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE
        help
          This option provides support for IDE on Motorola MPC8xx Systems.
index b181fc672057b7d157c9a1375f148ea8d06c06d1..0d2da89d15cff8f989f4436f5b9f1e8618e9b05a 100644 (file)
@@ -7,41 +7,37 @@
 # Note : at this point, these files are compiled on all systems.
 # In the future, some of these should be built conditionally.
 #
-# First come modules that register themselves with the core
+# link order is important here
 
 EXTRA_CFLAGS                           += -Idrivers/ide
 
-obj-$(CONFIG_BLK_DEV_IDE)              += pci/
-
 ide-core-y += ide.o ide-io.o ide-iops.o ide-lib.o ide-probe.o ide-taskfile.o
 
-ide-core-$(CONFIG_BLK_DEV_CMD640)      += pci/cmd640.o
-
-# Core IDE code - must come before legacy
+# core IDE code
 ide-core-$(CONFIG_BLK_DEV_IDEPCI)      += setup-pci.o
 ide-core-$(CONFIG_BLK_DEV_IDEDMA)      += ide-dma.o
 ide-core-$(CONFIG_IDE_PROC_FS)         += ide-proc.o
-ide-core-$(CONFIG_BLK_DEV_IDEPNP)      += ide-pnp.o
 ide-core-$(CONFIG_BLK_DEV_IDEACPI)     += ide-acpi.o
 
-# built-in only drivers from arm/
-ide-core-$(CONFIG_IDE_ARM)             += arm/ide_arm.o
+obj-$(CONFIG_BLK_DEV_IDE)              += ide-core.o
 
-# built-in only drivers from legacy/
-ide-core-$(CONFIG_BLK_DEV_BUDDHA)      += legacy/buddha.o
-ide-core-$(CONFIG_BLK_DEV_FALCON_IDE)  += legacy/falconide.o
-ide-core-$(CONFIG_BLK_DEV_GAYLE)       += legacy/gayle.o
-ide-core-$(CONFIG_BLK_DEV_MAC_IDE)     += legacy/macide.o
-ide-core-$(CONFIG_BLK_DEV_Q40IDE)      += legacy/q40ide.o
+ifeq ($(CONFIG_IDE_ARM), y)
+       ide-arm-core-y += arm/ide_arm.o
+       obj-y += ide-arm-core.o
+endif
 
-# built-in only drivers from ppc/
-ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE)  += ppc/mpc8xx.o
-ide-core-$(CONFIG_BLK_DEV_IDE_PMAC)    += ppc/pmac.o
+obj-$(CONFIG_BLK_DEV_IDE)              += legacy/ pci/
 
-# built-in only drivers from h8300/
-ide-core-$(CONFIG_IDE_H8300)           += h8300/ide-h8300.o
+obj-$(CONFIG_IDEPCI_PCIBUS_ORDER)      += ide-scan-pci.o
 
-obj-$(CONFIG_BLK_DEV_IDE)              += ide-core.o
+ifeq ($(CONFIG_BLK_DEV_CMD640), y)
+       cmd640-core-y += pci/cmd640.o
+       obj-y += cmd640-core.o
+endif
+
+obj-$(CONFIG_BLK_DEV_IDE)              += cris/ ppc/
+obj-$(CONFIG_BLK_DEV_IDEPNP)           += ide-pnp.o
+obj-$(CONFIG_IDE_H8300)                        += h8300/
 obj-$(CONFIG_IDE_GENERIC)              += ide-generic.o
 
 obj-$(CONFIG_BLK_DEV_IDEDISK)          += ide-disk.o
@@ -49,6 +45,20 @@ obj-$(CONFIG_BLK_DEV_IDECD)          += ide-cd.o
 obj-$(CONFIG_BLK_DEV_IDETAPE)          += ide-tape.o
 obj-$(CONFIG_BLK_DEV_IDEFLOPPY)                += ide-floppy.o
 
-obj-$(CONFIG_BLK_DEV_IDE)              += legacy/ arm/ mips/
-obj-$(CONFIG_BLK_DEV_HD)               += legacy/
-obj-$(CONFIG_ETRAX_IDE)                += cris/
+ifeq ($(CONFIG_BLK_DEV_IDECS), y)
+       ide-cs-core-y += legacy/ide-cs.o
+       obj-y += ide-cs-core.o
+endif
+
+ifeq ($(CONFIG_BLK_DEV_PLATFORM), y)
+       ide-platform-core-y += legacy/ide_platform.o
+       obj-y += ide-platform-core.o
+endif
+
+obj-$(CONFIG_BLK_DEV_IDE)              += arm/ mips/
+
+# old hd driver must be last
+ifeq ($(CONFIG_BLK_DEV_HD), y)
+       hd-core-y += legacy/hd.o
+       obj-y += hd-core.o
+endif
index 6a78f0755f262802b0e5835e4141b0aabb5c05cb..5f63ad216862e50fd1d583384cc61a83d2dd182f 100644 (file)
@@ -3,4 +3,8 @@ obj-$(CONFIG_BLK_DEV_IDE_ICSIDE)        += icside.o
 obj-$(CONFIG_BLK_DEV_IDE_RAPIDE)       += rapide.o
 obj-$(CONFIG_BLK_DEV_IDE_BAST)         += bast-ide.o
 
+ifeq ($(CONFIG_IDE_ARM), m)
+       obj-m += ide_arm.o
+endif
+
 EXTRA_CFLAGS   := -Idrivers/ide
index a1b5ddab6a486a8e12f42c60df9a3b0db5196682..60f2497542c05048d9a3f9b5e1a780d8717426f3 100644 (file)
@@ -24,7 +24,7 @@
 # define IDE_ARM_IRQ   IRQ_HARDDISK
 #endif
 
-void __init ide_arm_init(void)
+static int __init ide_arm_init(void)
 {
        ide_hwif_t *hwif;
        hw_regs_t hw;
@@ -41,4 +41,8 @@ void __init ide_arm_init(void)
 
                ide_device_add(idx);
        }
+
+       return 0;
 }
+
+module_init(ide_arm_init);
index 6176e8d6b2e669e76233bcfaad3df3f2bf1c0b6c..20b95960531f76ec68838887b8c75ea37da25031 100644 (file)
@@ -1,3 +1,3 @@
 EXTRA_CFLAGS                           += -Idrivers/ide
 
-obj-y                                  += ide-cris.o
+obj-$(CONFIG_IDE_ETRAX)                        += ide-cris.o
index 9245362970368925876f45833f1bd9ce6aa2c5f1..8c3294c4d23e2fd390dd6653aff30a6cb5d618ca 100644 (file)
@@ -754,8 +754,7 @@ static void cris_set_dma_mode(ide_drive_t *drive, const u8 speed)
                cris_ide_set_speed(TYPE_DMA, 0, strobe, hold);
 }
 
-void __init
-init_e100_ide (void)
+static int __init init_e100_ide(void)
 {
        hw_regs_t hw;
        int ide_offsets[IDE_NR_PORTS], h, i;
@@ -823,6 +822,8 @@ init_e100_ide (void)
        cris_ide_set_speed(TYPE_UDMA, ATA_UDMA2_CYC, ATA_UDMA2_DVS, 0);
 
        ide_device_add(idx);
+
+       return 0;
 }
 
 static cris_dma_descr_type mydescr __attribute__ ((__aligned__(16)));
@@ -1056,3 +1057,5 @@ static void cris_dma_start(ide_drive_t *drive)
                LED_DISK_READ(1);
        }
 }
+
+module_init(init_e100_ide);
diff --git a/drivers/ide/h8300/Makefile b/drivers/ide/h8300/Makefile
new file mode 100644 (file)
index 0000000..5eba16f
--- /dev/null
@@ -0,0 +1,2 @@
+
+obj-$(CONFIG_IDE_H8300)                        += ide-h8300.o
index 9fa78e98d1ba8a280c0c095204aabd46f0e3ab8e..4f6d0191cf6c31c74c9bec652c11e08861a23918 100644 (file)
@@ -84,7 +84,7 @@ static inline void hwif_setup(ide_hwif_t *hwif)
        hwif->INSL  = NULL;
 }
 
-void __init h8300_ide_init(void)
+static int __init h8300_ide_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
@@ -104,7 +104,7 @@ void __init h8300_ide_init(void)
        hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
        if (hwif == NULL) {
                printk(KERN_ERR "ide-h8300: IDE I/F register failed\n");
-               return;
+               return -ENOENT;
        }
 
        index = hwif->index;
@@ -117,8 +117,12 @@ void __init h8300_ide_init(void)
 
        ide_device_add(idx);
 
-       return;
+       return 0;
 
 out_busy:
        printk(KERN_ERR "ide-h8300: IDE I/F resource already used.\n");
+
+       return -EBUSY;
 }
+
+module_init(h8300_ide_init);
index 802efd4d97608eec1ca0c3e21fa8816bec2e575a..cbbb0f75be92ea218d2ccf9ae4e452bfeb3adb1d 100644 (file)
@@ -75,12 +75,15 @@ static struct pnp_driver idepnp_driver = {
        .remove         = idepnp_remove,
 };
 
-void __init pnpide_init(void)
+static int __init pnpide_init(void)
 {
-       pnp_register_driver(&idepnp_driver);
+       return pnp_register_driver(&idepnp_driver);
 }
 
-void __exit pnpide_exit(void)
+static void __exit pnpide_exit(void)
 {
        pnp_unregister_driver(&idepnp_driver);
 }
+
+module_init(pnpide_init);
+module_exit(pnpide_exit);
diff --git a/drivers/ide/ide-scan-pci.c b/drivers/ide/ide-scan-pci.c
new file mode 100644 (file)
index 0000000..23015d8
--- /dev/null
@@ -0,0 +1,11 @@
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/ide.h>
+
+static int __init ide_scan_pci(void)
+{
+       return ide_scan_pcibus();
+}
+
+module_init(ide_scan_pci);
index 6f99f5c9006220ba6c670e647ade5aa8f44e1c5b..5f3e53ec58380d169ba9fbb840b8a8526c947e41 100644 (file)
@@ -95,7 +95,7 @@ DEFINE_MUTEX(ide_cfg_mtx);
  __cacheline_aligned_in_smp DEFINE_SPINLOCK(ide_lock);
 
 #ifdef CONFIG_IDEPCI_PCIBUS_ORDER
-static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
+int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
 #endif
 
 int noautodma = 0;
@@ -178,8 +178,6 @@ static void init_hwif_default(ide_hwif_t *hwif, unsigned int index)
 #endif
 }
 
-extern void ide_arm_init(void);
-
 /*
  * init_ide_data() sets reasonable default values into all fields
  * 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
        return 0;       /* zero = nothing matched */
 }
 
-#ifdef CONFIG_BLK_DEV_ALI14XX
 extern int probe_ali14xx;
-extern int ali14xx_init(void);
-#endif
-#ifdef CONFIG_BLK_DEV_UMC8672
 extern int probe_umc8672;
-extern int umc8672_init(void);
-#endif
-#ifdef CONFIG_BLK_DEV_DTC2278
 extern int probe_dtc2278;
-extern int dtc2278_init(void);
-#endif
-#ifdef CONFIG_BLK_DEV_HT6560B
 extern int probe_ht6560b;
-extern int ht6560b_init(void);
-#endif
-#ifdef CONFIG_BLK_DEV_QD65XX
 extern int probe_qd65xx;
-extern int qd65xx_init(void);
-#endif
+extern int cmd640_vlb;
 
 static int __initdata is_chipset_set[MAX_HWIFS];
 
@@ -1458,11 +1442,8 @@ static int __init ide_setup(char *s)
 #endif
 #ifdef CONFIG_BLK_DEV_CMD640
                        case -14: /* "cmd640_vlb" */
-                       {
-                               extern int cmd640_vlb; /* flag for cmd640.c */
                                cmd640_vlb = 1;
                                goto done;
-                       }
 #endif
 #ifdef CONFIG_BLK_DEV_HT6560B
                        case -13: /* "ht6560b" */
@@ -1552,83 +1533,6 @@ done:
        return 1;
 }
 
-extern void __init pnpide_init(void);
-extern void __exit pnpide_exit(void);
-extern void __init h8300_ide_init(void);
-extern void __init mpc8xx_ide_probe(void);
-
-/*
- * probe_for_hwifs() finds/initializes "known" IDE interfaces
- */
-static void __init probe_for_hwifs (void)
-{
-#ifdef CONFIG_IDEPCI_PCIBUS_ORDER
-       ide_scan_pcibus(ide_scan_direction);
-#endif
-
-#ifdef CONFIG_ETRAX_IDE
-       {
-               extern void init_e100_ide(void);
-               init_e100_ide();
-       }
-#endif /* CONFIG_ETRAX_IDE */
-#ifdef CONFIG_BLK_DEV_CMD640
-       {
-               extern void ide_probe_for_cmd640x(void);
-               ide_probe_for_cmd640x();
-       }
-#endif /* CONFIG_BLK_DEV_CMD640 */
-#ifdef CONFIG_BLK_DEV_IDE_PMAC
-       {
-               extern int pmac_ide_probe(void);
-               (void)pmac_ide_probe();
-       }
-#endif /* CONFIG_BLK_DEV_IDE_PMAC */
-#ifdef CONFIG_BLK_DEV_GAYLE
-       {
-               extern void gayle_init(void);
-               gayle_init();
-       }
-#endif /* CONFIG_BLK_DEV_GAYLE */
-#ifdef CONFIG_BLK_DEV_FALCON_IDE
-       {
-               extern void falconide_init(void);
-               falconide_init();
-       }
-#endif /* CONFIG_BLK_DEV_FALCON_IDE */
-#ifdef CONFIG_BLK_DEV_MAC_IDE
-       {
-               extern void macide_init(void);
-               macide_init();
-       }
-#endif /* CONFIG_BLK_DEV_MAC_IDE */
-#ifdef CONFIG_BLK_DEV_Q40IDE
-       {
-               extern void q40ide_init(void);
-               q40ide_init();
-       }
-#endif /* CONFIG_BLK_DEV_Q40IDE */
-#ifdef CONFIG_BLK_DEV_BUDDHA
-       {
-               extern void buddha_init(void);
-               buddha_init();
-       }
-#endif /* CONFIG_BLK_DEV_BUDDHA */
-#ifdef CONFIG_BLK_DEV_IDEPNP
-       pnpide_init();
-#endif
-#ifdef CONFIG_H8300
-       h8300_ide_init();
-#endif
-#ifdef BLK_DEV_MPC8xx_IDE
-       mpc8xx_ide_probe();
-#endif
-}
-
-/*
- * Probe module
- */
-
 EXPORT_SYMBOL(ide_lock);
 
 static int ide_bus_match(struct device *dev, struct device_driver *drv)
@@ -1775,33 +1679,6 @@ static int __init ide_init(void)
 
        proc_ide_create();
 
-#ifdef CONFIG_IDE_ARM
-       ide_arm_init();
-#endif
-#ifdef CONFIG_BLK_DEV_ALI14XX
-       if (probe_ali14xx)
-               (void)ali14xx_init();
-#endif
-#ifdef CONFIG_BLK_DEV_UMC8672
-       if (probe_umc8672)
-               (void)umc8672_init();
-#endif
-#ifdef CONFIG_BLK_DEV_DTC2278
-       if (probe_dtc2278)
-               (void)dtc2278_init();
-#endif
-#ifdef CONFIG_BLK_DEV_HT6560B
-       if (probe_ht6560b)
-               (void)ht6560b_init();
-#endif
-#ifdef CONFIG_BLK_DEV_QD65XX
-       if (probe_qd65xx)
-               (void)qd65xx_init();
-#endif
-
-       /* Probe for special PCI and other "known" interface chipsets. */
-       probe_for_hwifs();
-
        return 0;
 }
 
@@ -1837,10 +1714,6 @@ void __exit cleanup_module (void)
        for (index = 0; index < MAX_HWIFS; ++index)
                ide_unregister(index);
 
-#ifdef CONFIG_BLK_DEV_IDEPNP
-       pnpide_exit();
-#endif
-
        proc_ide_destroy();
 
        bus_unregister(&ide_bus_type);
index 409822349f1006c896e98d707cf45a0f9c1eb056..7043ec7d1e056455eda8f7cbf2bdbf9e927fa44d 100644 (file)
@@ -1,15 +1,24 @@
 
+# link order is important here
+
 obj-$(CONFIG_BLK_DEV_ALI14XX)          += ali14xx.o
+obj-$(CONFIG_BLK_DEV_UMC8672)          += umc8672.o
 obj-$(CONFIG_BLK_DEV_DTC2278)          += dtc2278.o
 obj-$(CONFIG_BLK_DEV_HT6560B)          += ht6560b.o
 obj-$(CONFIG_BLK_DEV_QD65XX)           += qd65xx.o
-obj-$(CONFIG_BLK_DEV_UMC8672)          += umc8672.o
 
-obj-$(CONFIG_BLK_DEV_IDECS)            += ide-cs.o
+obj-$(CONFIG_BLK_DEV_GAYLE)            += gayle.o
+obj-$(CONFIG_BLK_DEV_FALCON_IDE)       += falconide.o
+obj-$(CONFIG_BLK_DEV_MAC_IDE)          += macide.o
+obj-$(CONFIG_BLK_DEV_Q40IDE)           += q40ide.o
+obj-$(CONFIG_BLK_DEV_BUDDHA)           += buddha.o
 
-obj-$(CONFIG_BLK_DEV_PLATFORM)         += ide_platform.o
+ifeq ($(CONFIG_BLK_DEV_IDECS), m)
+       obj-m += ide-cs.o
+endif
 
-# Last of all
-obj-$(CONFIG_BLK_DEV_HD)               += hd.o
+ifeq ($(CONFIG_BLK_DEV_PLATFORM), m)
+       obj-m += ide_platform.o
+endif
 
 EXTRA_CFLAGS   := -Idrivers/ide
index 38c3a6d63f301c0e7df0a73a96b6f49353847712..5ec0be4cbad71d1d5f5fc626792db680c8cb09f9 100644 (file)
@@ -231,8 +231,7 @@ int probe_ali14xx = 0;
 module_param_named(probe, probe_ali14xx, bool, 0);
 MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets");
 
-/* Can be called directly from ide.c. */
-int __init ali14xx_init(void)
+static int __init ali14xx_init(void)
 {
        if (probe_ali14xx == 0)
                goto out;
@@ -248,9 +247,7 @@ out:
        return -ENODEV;
 }
 
-#ifdef MODULE
 module_init(ali14xx_init);
-#endif
 
 MODULE_AUTHOR("see local file");
 MODULE_DESCRIPTION("support of ALI 14XX IDE chipsets");
index ba64c4b9f91871c75d1fdc2c89c43b25103576b4..e97766aef37417b4bb56b2d9f97b369d6b943b15 100644 (file)
@@ -143,7 +143,7 @@ static int xsurf_ack_intr(ide_hwif_t *hwif)
      *  Probe for a Buddha or Catweasel IDE interface
      */
 
-void __init buddha_init(void)
+static int __init buddha_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
@@ -243,4 +243,8 @@ fail_base2:
 
                ide_device_add(idx);
        }
+
+       return 0;
 }
+
+module_init(buddha_init);
index 24a845d45bd29b369001979b9b24cede2c6bda05..13eee6da280656073f657db9ed2a44488eb5d3af 100644 (file)
@@ -150,8 +150,7 @@ int probe_dtc2278 = 0;
 module_param_named(probe, probe_dtc2278, bool, 0);
 MODULE_PARM_DESC(probe, "probe for DTC2278xx chipsets");
 
-/* Can be called directly from ide.c. */
-int __init dtc2278_init(void)
+static int __init dtc2278_init(void)
 {
        if (probe_dtc2278 == 0)
                return -ENODEV;
@@ -163,9 +162,7 @@ int __init dtc2278_init(void)
        return 0;
 }
 
-#ifdef MODULE
 module_init(dtc2278_init);
-#endif
 
 MODULE_AUTHOR("See Local File");
 MODULE_DESCRIPTION("support of DTC-2278 VLB IDE chipsets");
index c1a84540beb1e860718a65d2beb6ee491ca0a09c..dec2ef99c778699352ec1cf28b9bf39d3388f491 100644 (file)
@@ -62,7 +62,7 @@ EXPORT_SYMBOL(falconide_intr_lock);
      *  Probe for a Falcon IDE interface
      */
 
-void __init falconide_init(void)
+static int __init falconide_init(void)
 {
     if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
        hw_regs_t hw;
@@ -84,4 +84,9 @@ void __init falconide_init(void)
 
                ide_device_add(idx);
        }
+    }
+
+    return 0;
 }
+
+module_init(falconide_init);
index ec53dc9b483c43efd36b2de000e7afc738e60ee4..e21ef75c905515f9036f67d408358d8b464a824b 100644 (file)
@@ -110,13 +110,13 @@ static int gayle_ack_intr_a1200(ide_hwif_t *hwif)
      *  Probe for a Gayle IDE interface (and optionally for an IDE doubler)
      */
 
-void __init gayle_init(void)
+static int __init gayle_init(void)
 {
     int a4000, i;
     u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
     if (!MACH_IS_AMIGA)
-       return;
+       return -ENODEV;
 
     if ((a4000 = AMIGAHW_PRESENT(A4000_IDE)) || AMIGAHW_PRESENT(A1200_IDE))
        goto found;
@@ -126,7 +126,7 @@ void __init gayle_init(void)
                          NULL))
        goto found;
 #endif
-    return;
+    return -ENODEV;
 
 found:
     for (i = 0; i < GAYLE_NUM_PROBE_HWIFS; i++) {
@@ -191,4 +191,8 @@ found:
     }
 
     ide_device_add(idx);
+
+    return 0;
 }
+
+module_init(gayle_init);
index a4245d13f11b83d2dced3d1f82d33f0caa6c34e7..8da5031a6d05d7a7848033152bcbd57d34fe4f61 100644 (file)
@@ -307,8 +307,7 @@ int probe_ht6560b = 0;
 module_param_named(probe, probe_ht6560b, bool, 0);
 MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
 
-/* Can be called directly from ide.c. */
-int __init ht6560b_init(void)
+static int __init ht6560b_init(void)
 {
        ide_hwif_t *hwif, *mate;
        static u8 idx[4] = { 0, 1, 0xff, 0xff };
@@ -369,9 +368,7 @@ release_region:
        return -ENODEV;
 }
 
-#ifdef MODULE
 module_init(ht6560b_init);
-#endif
 
 MODULE_AUTHOR("See Local File");
 MODULE_DESCRIPTION("HT-6560B EIDE-controller support");
index c1b7881c280aa42b7dddec62511db0119370452f..6b3e960350aaac663ecc139060c660310b5b9e49 100644 (file)
@@ -81,7 +81,7 @@ int macide_ack_intr(ide_hwif_t* hwif)
  * Probe for a Macintosh IDE interface
  */
 
-void __init macide_init(void)
+static int __init macide_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
@@ -106,7 +106,7 @@ void __init macide_init(void)
                                IRQ_BABOON_1);
                break;
        default:
-               return;
+               return -ENODEV;
        }
 
        hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
@@ -139,4 +139,8 @@ void __init macide_init(void)
 
                ide_device_add(idx);
        }
+
+       return 0;
 }
+
+module_init(macide_init);
index 2082e9c6efd9859dfe297eccd9407480ef83cc5b..0154c91ee4b1c405dc9750d2d78c4a9df02efc71 100644 (file)
@@ -111,7 +111,7 @@ static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={
  *  Probe for Q40 IDE interfaces
  */
 
-void __init q40ide_init(void)
+static int __init q40ide_init(void)
 {
     int i;
     ide_hwif_t *hwif;
@@ -119,7 +119,7 @@ void __init q40ide_init(void)
     u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
     if (!MACH_IS_Q40)
-      return ;
+      return -ENODEV;
 
     for (i = 0; i < Q40IDE_NUM_HWIFS; i++) {
        hw_regs_t hw;
@@ -153,5 +153,8 @@ void __init q40ide_init(void)
     }
 
     ide_device_add(idx);
+
+    return 0;
 }
 
+module_init(q40ide_init);
index 912e73853faa1b3fa2082031cd6687e95be94dde..2bac4c1a65324685a9cdd2b85ca318ef40b7b6fe 100644 (file)
@@ -478,8 +478,7 @@ int probe_qd65xx = 0;
 module_param_named(probe, probe_qd65xx, bool, 0);
 MODULE_PARM_DESC(probe, "probe for QD65xx chipsets");
 
-/* Can be called directly from ide.c. */
-int __init qd65xx_init(void)
+static int __init qd65xx_init(void)
 {
        if (probe_qd65xx == 0)
                return -ENODEV;
@@ -492,9 +491,7 @@ int __init qd65xx_init(void)
        return 0;
 }
 
-#ifdef MODULE
 module_init(qd65xx_init);
-#endif
 
 MODULE_AUTHOR("Samuel Thibault");
 MODULE_DESCRIPTION("support of qd65xx vlb ide chipset");
index 79577b916874d085fa96dbf2c2036301e129ef11..a1ae1ae6699d0ecc5e04878a0210304291afdb9d 100644 (file)
@@ -169,8 +169,7 @@ int probe_umc8672 = 0;
 module_param_named(probe, probe_umc8672, bool, 0);
 MODULE_PARM_DESC(probe, "probe for UMC8672 chipset");
 
-/* Can be called directly from ide.c. */
-int __init umc8672_init(void)
+static int __init umc8672_init(void)
 {
        if (probe_umc8672 == 0)
                goto out;
@@ -181,9 +180,7 @@ out:
        return -ENODEV;;
 }
 
-#ifdef MODULE
 module_init(umc8672_init);
-#endif
 
 MODULE_AUTHOR("Wolfram Podien");
 MODULE_DESCRIPTION("Support for UMC 8672 IDE chipset");
index 95d1ea8f1f1403d2efd0a14c8bc8569a6a5e51fa..94803253e8af0268d1878833e7600d37035ace3a 100644 (file)
@@ -36,4 +36,8 @@ obj-$(CONFIG_BLK_DEV_VIA82CXXX)               += via82cxxx.o
 # Must appear at the end of the block
 obj-$(CONFIG_BLK_DEV_GENERIC)          += generic.o
 
+ifeq ($(CONFIG_BLK_DEV_CMD640), m)
+       obj-m += cmd640.o
+endif
+
 EXTRA_CFLAGS   := -Idrivers/ide
index 5096e059ac5a470735a9e95f124031e694f63bde..da3565e0071f417628d96fa806daa29c9876cd4a 100644 (file)
@@ -706,9 +706,9 @@ static int pci_conf2(void)
 }
 
 /*
- * Probe for a cmd640 chipset, and initialize it if found.  Called from ide.c
+ * Probe for a cmd640 chipset, and initialize it if found.
  */
-int __init ide_probe_for_cmd640x (void)
+static int __init cmd640x_init(void)
 {
 #ifdef CONFIG_BLK_DEV_CMD640_ENHANCED
        int second_port_toggled = 0;
@@ -883,3 +883,7 @@ int __init ide_probe_for_cmd640x (void)
        return 1;
 }
 
+module_param_named(probe_vlb, cmd640_vlb, bool, 0);
+MODULE_PARM_DESC(probe_vlb, "probe for VLB version of CMD640 chipset");
+
+module_init(cmd640x_init);
diff --git a/drivers/ide/ppc/Makefile b/drivers/ide/ppc/Makefile
new file mode 100644 (file)
index 0000000..65af584
--- /dev/null
@@ -0,0 +1,3 @@
+
+obj-$(CONFIG_BLK_DEV_IDE_PMAC)         += pmac.o
+obj-$(CONFIG_BLK_DEV_MPC8xx_IDE)       += mpc8xx.o
index 8172e813b034a583e785f855c2c802c939c4c53c..3fd5d45b5e0e2584cbdcfbfa2de47b62a47e8f08 100644 (file)
@@ -839,7 +839,7 @@ void m8xx_ide_init(void)
        ppc_ide_md.ide_init_hwif        = m8xx_ide_init_hwif_ports;
 }
 
-void __init mpc8xx_ide_probe(void)
+static int __init mpc8xx_ide_probe(void)
 {
        u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
 
@@ -851,4 +851,8 @@ void __init mpc8xx_ide_probe(void)
 #endif
 
        ide_device_add(idx);
+
+       return 0;
 }
+
+module_init(mpc8xx_ide_probe);
index 36e4b95707463b6caa74a08a6464f314135e08a6..cd514743df96d87c5c24d37517fae045283843bb 100644 (file)
@@ -1786,3 +1786,5 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
 }
 
 #endif /* CONFIG_BLK_DEV_IDEDMA_PMAC */
+
+module_init(pmac_ide_probe);
index d89f84d41b08789e64653dfd4746548e4499ddb0..63ef8aaa7b907f699f4babea104a6d425d0c8523 100644 (file)
@@ -766,21 +766,20 @@ static int __init ide_scan_pcidev(struct pci_dev *dev)
 
 /**
  *     ide_scan_pcibus         -       perform the initial IDE driver scan
- *     @scan_direction: set for reverse order scanning
  *
  *     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.
  */
-       
-void __init ide_scan_pcibus (int scan_direction)
+
+int __init ide_scan_pcibus(void)
 {
        struct pci_dev *dev = NULL;
        struct pci_driver *d;
        struct list_head *l, *n;
 
        pre_init = 0;
-       if (!scan_direction)
+       if (!ide_scan_direction)
                while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)))
                        ide_scan_pcidev(dev);
        else
@@ -801,5 +800,7 @@ void __init ide_scan_pcibus (int scan_direction)
                        printk(KERN_ERR "%s: failed to register %s driver\n",
                                        __FUNCTION__, d->driver.mod_name);
        }
+
+       return 0;
 }
 #endif
index 9c037a0f2af2f93400d64ba1c12ce3d42370cd26..735737500f8f8f8edde89df835eea1c3e5d32d5f 100644 (file)
@@ -1014,7 +1014,8 @@ extern void do_ide_request(struct request_queue *);
 void ide_init_disk(struct gendisk *, ide_drive_t *);
 
 #ifdef CONFIG_IDEPCI_PCIBUS_ORDER
-extern void ide_scan_pcibus(int scan_direction) __init;
+extern int ide_scan_direction;
+int __init ide_scan_pcibus(void);
 extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner, const char *mod_name);
 #define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE, KBUILD_MODNAME)
 #else