--- old/include/linux/ide.h Tue Mar 18 20:25:44 2003 +++ new/include/linux/ide.h Tue Mar 18 20:25:13 2003 @@ -727,6 +727,7 @@ unsigned present : 1; /* drive is physically present */ unsigned noprobe : 1; /* from: hdx=noprobe */ + unsigned probe : 1; /* from: hdx=probe */ unsigned busy : 1; /* currently doing revalidate_disk() */ unsigned removable : 1; /* 1 if need to do check_media_change */ unsigned is_flash : 1; /* 1 if probed as flash */ --- old/drivers/ide/ide.c Tue Mar 18 20:21:27 2003 +++ new/drivers/ide/ide.c Tue Mar 18 20:31:57 2003 @@ -1689,6 +1689,7 @@ * "idex=" is recognized for all "x" from "0" to "3", such as "ide1". * * "hdx=noprobe" : drive may be present, but do not probe for it + * "hdx=probe" : we want to probe for the drive, even if hidden by a flash. * "hdx=none" : drive is NOT present, ignore cmos and do not probe * "hdx=nowerr" : ignore the WRERR_STAT bit on this drive * "hdx=cdrom" : drive is present, and is a cdrom drive @@ -1815,7 +1816,7 @@ const char *hd_words[] = {"none", "noprobe", "nowerr", "cdrom", "serialize", "autotune", "noautotune", "slow", "swapdata", "bswap", "flash", - "remap", "noremap", "scsi", NULL}; + "remap", "noremap", "scsi", "probe", NULL}; unit = s[2] - 'a'; hw = unit / MAX_DRIVES; unit = unit % MAX_DRIVES; @@ -1886,6 +1887,9 @@ drive->scsi = 0; goto bad_option; #endif /* defined(CONFIG_BLK_DEV_IDESCSI) && defined(CONFIG_SCSI) */ + case -15: /* "probe" */ + drive->probe = 1; + goto done; case 3: /* cyl,head,sect */ drive->media = ide_disk; drive->cyl = drive->bios_cyl = vals[0]; @@ -2531,7 +2535,7 @@ continue; register_disk(gd,MKDEV(hwif->major,unit<forced_geom && drive->noprobe) ? 1 : + (drive->forced_geom && drive->noprobe && !drive->probe) ? 1 : #endif /* CONFIG_BLK_DEV_ISAPNP */ 1<is_flash = 0; if (drive_is_flashcard(drive)) { ide_drive_t *mate = &hwif->drives[1^drive->select.b.unit]; - if (!mate->ata_flash) { + if (!mate->ata_flash && !mate->probe) { mate->present = 0; mate->noprobe = 1; } @@ -505,7 +505,7 @@ static inline u8 probe_for_drive (ide_drive_t *drive) { /* skip probing? */ - if (drive->noprobe) + if (drive->noprobe && !drive->probe) return drive->present; /* if !(success||timed-out) */