From: Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>

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.



---

 drivers/ide/ide-probe.c  |    2 ++
 drivers/ide/ide-proc.c   |    4 +++-
 drivers/ide/ide.c        |    2 +-
 drivers/ide/pci/cmd640.c |    2 +-
 drivers/ide/setup-pci.c  |    2 +-
 include/linux/ide.h      |    2 +-
 6 files changed, 9 insertions(+), 5 deletions(-)

diff -puN drivers/ide/ide.c~ide-pci-modules-fix drivers/ide/ide.c
--- 25/drivers/ide/ide.c~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/drivers/ide/ide.c	2004-01-19 13:12:58.000000000 -0800
@@ -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;
diff -puN drivers/ide/ide-probe.c~ide-pci-modules-fix drivers/ide/ide-probe.c
--- 25/drivers/ide/ide-probe.c~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/drivers/ide/ide-probe.c	2004-01-19 13:12:58.000000000 -0800
@@ -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]);
diff -puN drivers/ide/ide-proc.c~ide-pci-modules-fix drivers/ide/ide-proc.c
--- 25/drivers/ide/ide-proc.c~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/drivers/ide/ide-proc.c	2004-01-19 13:12:58.000000000 -0800
@@ -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;
diff -puN drivers/ide/pci/cmd640.c~ide-pci-modules-fix drivers/ide/pci/cmd640.c
--- 25/drivers/ide/pci/cmd640.c~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/drivers/ide/pci/cmd640.c	2004-01-19 13:12:58.000000000 -0800
@@ -419,7 +419,7 @@ static void __init setup_device_ptrs (vo
 	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)
diff -puN drivers/ide/setup-pci.c~ide-pci-modules-fix drivers/ide/setup-pci.c
--- 25/drivers/ide/setup-pci.c~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/drivers/ide/setup-pci.c	2004-01-19 13:12:58.000000000 -0800
@@ -59,7 +59,7 @@ static ide_hwif_t *ide_match_hwif(unsign
 	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 */
 		}
 	}
diff -puN include/linux/ide.h~ide-pci-modules-fix include/linux/ide.h
--- 25/include/linux/ide.h~ide-pci-modules-fix	2004-01-19 13:12:58.000000000 -0800
+++ 25-akpm/include/linux/ide.h	2004-01-19 13:12:58.000000000 -0800
@@ -279,7 +279,7 @@ typedef enum {	ide_unknown,	ide_generic,
 		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;
 
 /*

_