diff -ruN linux-2.4.21-pre5/drivers/ide/ide-dma.c linux-2.4.21-pre5.ide-fixes/drivers/ide/ide-dma.c --- linux-2.4.21-pre5/drivers/ide/ide-dma.c 2003-02-27 12:58:57.000000000 +0100 +++ linux-2.4.21-pre5.ide-fixes/drivers/ide/ide-dma.c 2003-02-27 13:03:38.000000000 +0100 @@ -112,7 +112,7 @@ { "WDC AC11000H" , "ALL" }, { "WDC AC22100H" , "ALL" }, - { "WDC AC32500H" , "ALL" }, +/* { "WDC AC32500H" , "ALL" },*//*mikpe*/ { "WDC AC33100H" , "ALL" }, { "WDC AC31600H" , "ALL" }, { "WDC AC32100H" , "24.09P07" }, @@ -193,7 +193,7 @@ const char *bad_dma_drives[] = {"WDC AC11000H", "WDC AC22100H", "WDC AC32100H", - "WDC AC32500H", +/* "WDC AC32500H",*//*mikpe*/ "WDC AC33100H", "WDC AC31600H", NULL}; diff -ruN linux-2.4.21-pre5/drivers/ide/ide.c linux-2.4.21-pre5.ide-fixes/drivers/ide/ide.c --- linux-2.4.21-pre5/drivers/ide/ide.c 2003-02-27 12:58:57.000000000 +0100 +++ linux-2.4.21-pre5.ide-fixes/drivers/ide/ide.c 2003-02-27 13:03:38.000000000 +0100 @@ -1015,6 +1015,7 @@ int ide_register (int arg1, int arg2, int irq) { hw_regs_t hw; + memset(&hw, 0, sizeof hw); ide_init_hwif_ports(&hw, (ide_ioreg_t) arg1, (ide_ioreg_t) arg2, NULL); hw.irq = irq; return ide_register_hw(&hw, NULL); @@ -1772,6 +1773,9 @@ if (strncmp(s,"hd",2) == 0 && s[2] == '=') /* hd= is for hd.c */ return 0; /* driver and not us */ + if (!strncmp(s, "idescsi=", 8)) /* for ide-scsi.c not us */ + return 0; + if (strncmp(s,"ide",3) && strncmp(s,"idebus",6) && strncmp(s,"hd",2)) /* hdx= & hdxlun= */ diff -ruN linux-2.4.21-pre5/drivers/scsi/ide-scsi.c linux-2.4.21-pre5.ide-fixes/drivers/scsi/ide-scsi.c --- linux-2.4.21-pre5/drivers/scsi/ide-scsi.c 2003-02-27 12:58:58.000000000 +0100 +++ linux-2.4.21-pre5.ide-fixes/drivers/scsi/ide-scsi.c 2003-02-27 13:03:38.000000000 +0100 @@ -734,6 +734,18 @@ NULL }; +static char *units; +#ifdef MODULE +MODULE_PARM(units, "s"); +#else +static int __init setup_idescsi(char *s) +{ + units = s; + return 1; +} +__setup("idescsi=", setup_idescsi); +#endif + int idescsi_attach (ide_drive_t *drive) { idescsi_scsi_t *scsi; @@ -750,6 +762,12 @@ // int id = 2 * HWIF(drive)->index + drive->select.b.unit; // int id = drive_count + 1; +#if 0 + if (units && !strstr(units, drive->name)) { + printk("ide-scsi: ignoring unit %s\n", drive->name); + return 0; + } +#endif for (id = 0; id < MAX_HWIFS*MAX_DRIVES; id++) if (idescsi_drives[id] == NULL) break; @@ -831,6 +849,10 @@ failed = 0; while ((drive = ide_scan_devices(media[i], idescsi_driver.name, NULL, failed++)) != NULL) { + if (units && !strstr(units, drive->name)) { + printk("ide-scsi: ignoring unit %s\n", drive->name); + continue; + } #ifdef MODULE /* skip drives we were told to ignore */ if (ignore != NULL && strstr(ignore, drive->name)) {