Loading Documentation/ide/ide.txt +14 −17 Original line number Diff line number Diff line Loading @@ -82,17 +82,16 @@ Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. For really weird situations, the apparent (fdisk) geometry can also be specified on the kernel "command line" using LILO. The format of such lines is: hdx=cyls,heads,sects or hdx=cdrom ide_core.chs=[interface_number.device_number]:cyls,heads,sects or ide_core.cdrom=[interface_number.device_number] where hdx can be any of hda through hdh, Three values are required (cyls,heads,sects). For example: For example: hdc=1050,32,64 hdd=cdrom ide_core.chs=1.0:1050,32,64 ide_core.cdrom=1.1 either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). If the auto-probing during boot time confuses a drive (ie. the drive works with hd.c but not with ide.c), then an command line option may be specified Loading @@ -101,7 +100,7 @@ probe/identification sequence. For example: ide_core.noprobe=0.1 or hdc=768,16,32 ide_core.chs=1.0:768,16,32 ide_core.noprobe=1.0 Note that when only one IDE device is attached to an interface, it should be Loading @@ -118,9 +117,9 @@ If for some reason your cdrom drive is *not* found at boot time, you can force the probe to look harder by supplying a kernel command line parameter via LILO, such as: hdc=cdrom /* hdc = "master" on second interface */ ide_core.cdrom=1.0 /* "master" on second interface (hdc) */ or hdd=cdrom /* hdd = "slave" on second interface */ ide_core.cdrom=1.1 /* "slave" on second interface (hdd) */ For example, a GW2000 system might have a hard drive on the primary interface (/dev/hda) and an IDE cdrom drive on the secondary interface Loading Loading @@ -182,12 +181,6 @@ driver using the "options=" keyword to insmod, while replacing any ',' with Summary of ide driver parameters for kernel command line -------------------------------------------------------- "hdx=" is recognized for all "x" from "a" to "u", such as "hdc". "hdx=cdrom" : drive is present, and is a cdrom drive "hdx=cyl,head,sect" : disk drive is present, with specified geometry "ide=doubler" : probe/support IDE doublers on Amiga There may be more options than shown -- use the source, Luke! Loading Loading @@ -230,6 +223,10 @@ Other kernel parameters for ide_core are: * "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit * "cdrom=[interface_number.device_number]" to force device as a CD-ROM * "chs=[interface_number.device_number]" to force device as a disk (using CHS) ================================================================================ Some Terminology Loading drivers/ide/ide.c +66 −5 Original line number Diff line number Diff line Loading @@ -924,7 +924,7 @@ static int __init ide_setup(char *s) drive->media = ide_cdrom; /* an ATAPI device ignores DRDY */ drive->ready_stat = 0; goto done; goto obsolete_option; case -5: /* nodma */ drive->nodma = 1; goto obsolete_option; Loading @@ -948,7 +948,7 @@ static int __init ide_setup(char *s) drive->sect = drive->bios_sect = vals[2]; drive->present = 1; drive->forced_geom = 1; goto done; goto obsolete_option; default: goto bad_option; } Loading @@ -975,9 +975,6 @@ static int __init ide_setup(char *s) obsolete_option: printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n"); return 1; done: printk("\n"); return 1; } EXPORT_SYMBOL(ide_lock); Loading Loading @@ -1167,6 +1164,51 @@ static unsigned int ide_nowerr; module_param_call(nowerr, ide_set_dev_param_mask, NULL, &ide_nowerr, 0); MODULE_PARM_DESC(nowerr, "ignore the WRERR_STAT bit for a device"); static unsigned int ide_cdroms; module_param_call(cdrom, ide_set_dev_param_mask, NULL, &ide_cdroms, 0); MODULE_PARM_DESC(cdrom, "force device as a CD-ROM"); struct chs_geom { unsigned int cyl; u8 head; u8 sect; }; static unsigned int ide_disks; static struct chs_geom ide_disks_chs[MAX_HWIFS * MAX_DRIVES]; static int ide_set_disk_chs(const char *str, struct kernel_param *kp) { int a, b, c = 0, h = 0, s = 0, i, j = 1; if (sscanf(str, "%d.%d:%d,%d,%d", &a, &b, &c, &h, &s) != 5 && sscanf(str, "%d.%d:%d", &a, &b, &j) != 3) return -EINVAL; i = a * MAX_DRIVES + b; if (i >= MAX_HWIFS * MAX_DRIVES || j < 0 || j > 1) return -EINVAL; if (c > INT_MAX || h > 255 || s > 255) return -EINVAL; if (j) ide_disks |= (1 << i); else ide_disks &= (1 << i); ide_disks_chs[i].cyl = c; ide_disks_chs[i].head = h; ide_disks_chs[i].sect = s; return 0; } module_param_call(chs, ide_set_disk_chs, NULL, NULL, 0); MODULE_PARM_DESC(chs, "force device as a disk (using CHS)"); static void ide_dev_apply_params(ide_drive_t *drive) { int i = drive->hwif->index * MAX_DRIVES + drive->select.b.unit; Loading @@ -1189,6 +1231,25 @@ static void ide_dev_apply_params(ide_drive_t *drive) drive->name); drive->bad_wstat = BAD_R_STAT; } if (ide_cdroms & (1 << i)) { printk(KERN_INFO "ide: forcing %s as a CD-ROM\n", drive->name); drive->present = 1; drive->media = ide_cdrom; /* an ATAPI device ignores DRDY */ drive->ready_stat = 0; } if (ide_disks & (1 << i)) { drive->cyl = drive->bios_cyl = ide_disks_chs[i].cyl; drive->head = drive->bios_head = ide_disks_chs[i].head; drive->sect = drive->bios_sect = ide_disks_chs[i].sect; drive->forced_geom = 1; printk(KERN_INFO "ide: forcing %s as a disk (%d/%d/%d)\n", drive->name, drive->cyl, drive->head, drive->sect); drive->present = 1; drive->media = ide_disk; drive->ready_stat = READY_STAT; } } static unsigned int ide_ignore_cable; Loading Loading
Documentation/ide/ide.txt +14 −17 Original line number Diff line number Diff line Loading @@ -82,17 +82,16 @@ Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. For really weird situations, the apparent (fdisk) geometry can also be specified on the kernel "command line" using LILO. The format of such lines is: hdx=cyls,heads,sects or hdx=cdrom ide_core.chs=[interface_number.device_number]:cyls,heads,sects or ide_core.cdrom=[interface_number.device_number] where hdx can be any of hda through hdh, Three values are required (cyls,heads,sects). For example: For example: hdc=1050,32,64 hdd=cdrom ide_core.chs=1.0:1050,32,64 ide_core.cdrom=1.1 either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). If the auto-probing during boot time confuses a drive (ie. the drive works with hd.c but not with ide.c), then an command line option may be specified Loading @@ -101,7 +100,7 @@ probe/identification sequence. For example: ide_core.noprobe=0.1 or hdc=768,16,32 ide_core.chs=1.0:768,16,32 ide_core.noprobe=1.0 Note that when only one IDE device is attached to an interface, it should be Loading @@ -118,9 +117,9 @@ If for some reason your cdrom drive is *not* found at boot time, you can force the probe to look harder by supplying a kernel command line parameter via LILO, such as: hdc=cdrom /* hdc = "master" on second interface */ ide_core.cdrom=1.0 /* "master" on second interface (hdc) */ or hdd=cdrom /* hdd = "slave" on second interface */ ide_core.cdrom=1.1 /* "slave" on second interface (hdd) */ For example, a GW2000 system might have a hard drive on the primary interface (/dev/hda) and an IDE cdrom drive on the secondary interface Loading Loading @@ -182,12 +181,6 @@ driver using the "options=" keyword to insmod, while replacing any ',' with Summary of ide driver parameters for kernel command line -------------------------------------------------------- "hdx=" is recognized for all "x" from "a" to "u", such as "hdc". "hdx=cdrom" : drive is present, and is a cdrom drive "hdx=cyl,head,sect" : disk drive is present, with specified geometry "ide=doubler" : probe/support IDE doublers on Amiga There may be more options than shown -- use the source, Luke! Loading Loading @@ -230,6 +223,10 @@ Other kernel parameters for ide_core are: * "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit * "cdrom=[interface_number.device_number]" to force device as a CD-ROM * "chs=[interface_number.device_number]" to force device as a disk (using CHS) ================================================================================ Some Terminology Loading
drivers/ide/ide.c +66 −5 Original line number Diff line number Diff line Loading @@ -924,7 +924,7 @@ static int __init ide_setup(char *s) drive->media = ide_cdrom; /* an ATAPI device ignores DRDY */ drive->ready_stat = 0; goto done; goto obsolete_option; case -5: /* nodma */ drive->nodma = 1; goto obsolete_option; Loading @@ -948,7 +948,7 @@ static int __init ide_setup(char *s) drive->sect = drive->bios_sect = vals[2]; drive->present = 1; drive->forced_geom = 1; goto done; goto obsolete_option; default: goto bad_option; } Loading @@ -975,9 +975,6 @@ static int __init ide_setup(char *s) obsolete_option: printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n"); return 1; done: printk("\n"); return 1; } EXPORT_SYMBOL(ide_lock); Loading Loading @@ -1167,6 +1164,51 @@ static unsigned int ide_nowerr; module_param_call(nowerr, ide_set_dev_param_mask, NULL, &ide_nowerr, 0); MODULE_PARM_DESC(nowerr, "ignore the WRERR_STAT bit for a device"); static unsigned int ide_cdroms; module_param_call(cdrom, ide_set_dev_param_mask, NULL, &ide_cdroms, 0); MODULE_PARM_DESC(cdrom, "force device as a CD-ROM"); struct chs_geom { unsigned int cyl; u8 head; u8 sect; }; static unsigned int ide_disks; static struct chs_geom ide_disks_chs[MAX_HWIFS * MAX_DRIVES]; static int ide_set_disk_chs(const char *str, struct kernel_param *kp) { int a, b, c = 0, h = 0, s = 0, i, j = 1; if (sscanf(str, "%d.%d:%d,%d,%d", &a, &b, &c, &h, &s) != 5 && sscanf(str, "%d.%d:%d", &a, &b, &j) != 3) return -EINVAL; i = a * MAX_DRIVES + b; if (i >= MAX_HWIFS * MAX_DRIVES || j < 0 || j > 1) return -EINVAL; if (c > INT_MAX || h > 255 || s > 255) return -EINVAL; if (j) ide_disks |= (1 << i); else ide_disks &= (1 << i); ide_disks_chs[i].cyl = c; ide_disks_chs[i].head = h; ide_disks_chs[i].sect = s; return 0; } module_param_call(chs, ide_set_disk_chs, NULL, NULL, 0); MODULE_PARM_DESC(chs, "force device as a disk (using CHS)"); static void ide_dev_apply_params(ide_drive_t *drive) { int i = drive->hwif->index * MAX_DRIVES + drive->select.b.unit; Loading @@ -1189,6 +1231,25 @@ static void ide_dev_apply_params(ide_drive_t *drive) drive->name); drive->bad_wstat = BAD_R_STAT; } if (ide_cdroms & (1 << i)) { printk(KERN_INFO "ide: forcing %s as a CD-ROM\n", drive->name); drive->present = 1; drive->media = ide_cdrom; /* an ATAPI device ignores DRDY */ drive->ready_stat = 0; } if (ide_disks & (1 << i)) { drive->cyl = drive->bios_cyl = ide_disks_chs[i].cyl; drive->head = drive->bios_head = ide_disks_chs[i].head; drive->sect = drive->bios_sect = ide_disks_chs[i].sect; drive->forced_geom = 1; printk(KERN_INFO "ide: forcing %s as a disk (%d/%d/%d)\n", drive->name, drive->cyl, drive->head, drive->sect); drive->present = 1; drive->media = ide_disk; drive->ready_stat = READY_STAT; } } static unsigned int ide_ignore_cable; Loading