]> git.hungrycats.org Git - linux/commitdiff
[PATCH] fix issues with loading PCI IDE drivers as modules
authorBartlomiej Zolnierkiewicz <b.zolnierkiewicz@elka.pw.edu.pl>
Sun, 1 Feb 2004 04:50:52 +0000 (20:50 -0800)
committerDavid S. Miller <davem@nuts.davemloft.net>
Sun, 1 Feb 2004 04:50:52 +0000 (20:50 -0800)
From: Davin McCall <davmac@ozonline.com.au>

Set hwif->chipset to ide_forced if it was forced by kernel parameters.

Set hwif->chipset to ide_generic for hwifs controlled by generic IDE
code, so they wont be taken by setup_pci.c:ide_match_hwif().

Patch also fixes /proc/ide/ideX/model to report "generic" instead of
"(none)" for default hwifs.

This has been in -mm since 2.6.1-mm1.

drivers/ide/ide-probe.c
drivers/ide/ide-proc.c
drivers/ide/ide.c
drivers/ide/pci/cmd640.c
drivers/ide/setup-pci.c
include/linux/ide.h

index ef80249cda495fe7ec602151fd398e8f7a7ae43b..59d3da8c6e48e28bd121889830dc7d656e32cf19 100644 (file)
@@ -1343,6 +1343,8 @@ int ideprobe_init (void)
                        int unit;
                        if (!hwif->present)
                                continue;
+                       if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced)
+                               hwif->chipset = ide_generic;
                        for (unit = 0; unit < MAX_DRIVES; ++unit)
                                if (hwif->drives[unit].present)
                                        ata_attach(&hwif->drives[unit]);
index 49b754b86efa1dcc3865bebd92d6d25168d64cc4..323eeb79f0eb5aae893859b8fea1bb8f731025bf 100644 (file)
@@ -348,8 +348,10 @@ static int proc_ide_read_imodel
        int             len;
        const char      *name;
 
+       /*
+        * Neither ide_unknown nor ide_forced should be set at this point.
+        */
        switch (hwif->chipset) {
-               case ide_unknown:       name = "(none)";        break;
                case ide_generic:       name = "generic";       break;
                case ide_pci:           name = "pci";           break;
                case ide_cmd640:        name = "cmd640";        break;
index bf2282aa9c7a4f3099be900725a1b58b6d842af2..01134b2e1bb0895ac5ee4a87ac12977dbf8fd82a 100644 (file)
@@ -2179,7 +2179,7 @@ int __init ide_setup (char *s)
                                memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
                                hwif->irq      = vals[2];
                                hwif->noprobe  = 0;
-                               hwif->chipset  = ide_generic;
+                               hwif->chipset  = ide_forced;
                                goto done;
 
                        case 0: goto bad_option;
index 08a74cdb6605b9220bf1745df14477e2a73a37ab..0eac8ee64d2ec7f466873fbf8b1fdfc2fc9e12b6 100644 (file)
@@ -419,7 +419,7 @@ static void __init setup_device_ptrs (void)
        cmd_hwif1 = &ide_hwifs[1]; /* default, if not found below */
        for (i = 0; i < MAX_HWIFS; i++) {
                ide_hwif_t *hwif = &ide_hwifs[i];
-               if (hwif->chipset == ide_unknown || hwif->chipset == ide_generic) {
+               if (hwif->chipset == ide_unknown || hwif->chipset == ide_forced) {
                        if (hwif->io_ports[IDE_DATA_OFFSET] == 0x1f0)
                                cmd_hwif0 = hwif;
                        else if (hwif->io_ports[IDE_DATA_OFFSET] == 0x170)
index e0ed9c0493f9f2a3038db18766a859a2a0c5c5b3..a2ff75859e454063cdbb51cea3c60636c8d67ec3 100644 (file)
@@ -59,7 +59,7 @@ static ide_hwif_t *ide_match_hwif(unsigned long io_base, u8 bootable, const char
        for (h = 0; h < MAX_HWIFS; ++h) {
                hwif = &ide_hwifs[h];
                if (hwif->io_ports[IDE_DATA_OFFSET] == io_base) {
-                       if (hwif->chipset == ide_generic)
+                       if (hwif->chipset == ide_forced)
                                return hwif; /* a perfect match */
                }
        }
index a9c107b8716d4985d9707a1c555227e5958980d1..ea10e916d9eb1ee9964f293a842a77a3d39211d7 100644 (file)
@@ -279,7 +279,7 @@ typedef enum {      ide_unknown,    ide_generic,    ide_pci,
                ide_pdc4030,    ide_rz1000,     ide_trm290,
                ide_cmd646,     ide_cy82c693,   ide_4drives,
                ide_pmac,       ide_etrax100,   ide_acorn,
-               ide_pc9800
+               ide_pc9800,     ide_forced
 } hwif_chipset_t;
 
 /*