mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
ide: add "cdrom=" and "chs=" parameters
* Add "cdrom=" and "chs=" parameters. * Obsolete "hdx=cdrom" and "hdx=cyls,heads,sects" kernel parameters. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
6e87543a94
commit
4706a7e03a
2 changed files with 80 additions and 22 deletions
|
@ -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
|
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:
|
on the kernel "command line" using LILO. The format of such lines is:
|
||||||
|
|
||||||
hdx=cyls,heads,sects
|
ide_core.chs=[interface_number.device_number]:cyls,heads,sects
|
||||||
or hdx=cdrom
|
or ide_core.cdrom=[interface_number.device_number]
|
||||||
|
|
||||||
where hdx can be any of hda through hdh, Three values are required
|
For example:
|
||||||
(cyls,heads,sects). 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
|
The results of successful auto-probing may override the physical geometry/irq
|
||||||
override the physical geometry/irq specified, though the "original" geometry
|
specified, though the "original" geometry may be retained as the "logical"
|
||||||
may be retained as the "logical" geometry for partitioning purposes (fdisk).
|
geometry for partitioning purposes (fdisk).
|
||||||
|
|
||||||
If the auto-probing during boot time confuses a drive (ie. the drive works
|
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
|
with hd.c but not with ide.c), then an command line option may be specified
|
||||||
|
@ -101,7 +100,7 @@ probe/identification sequence. For example:
|
||||||
|
|
||||||
ide_core.noprobe=0.1
|
ide_core.noprobe=0.1
|
||||||
or
|
or
|
||||||
hdc=768,16,32
|
ide_core.chs=1.0:768,16,32
|
||||||
ide_core.noprobe=1.0
|
ide_core.noprobe=1.0
|
||||||
|
|
||||||
Note that when only one IDE device is attached to an interface, it should be
|
Note that when only one IDE device is attached to an interface, it should be
|
||||||
|
@ -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
|
the probe to look harder by supplying a kernel command line parameter
|
||||||
via LILO, such as:
|
via LILO, such as:
|
||||||
|
|
||||||
hdc=cdrom /* hdc = "master" on second interface */
|
ide_core.cdrom=1.0 /* "master" on second interface (hdc) */
|
||||||
or
|
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
|
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
|
interface (/dev/hda) and an IDE cdrom drive on the secondary interface
|
||||||
|
@ -182,12 +181,6 @@ driver using the "options=" keyword to insmod, while replacing any ',' with
|
||||||
Summary of ide driver parameters for kernel command line
|
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
|
"ide=doubler" : probe/support IDE doublers on Amiga
|
||||||
|
|
||||||
There may be more options than shown -- use the source, Luke!
|
There may be more options than shown -- use the source, Luke!
|
||||||
|
@ -230,6 +223,10 @@ Other kernel parameters for ide_core are:
|
||||||
|
|
||||||
* "nowerr=[interface_number.device_number]" to ignore the WRERR_STAT bit
|
* "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
|
Some Terminology
|
||||||
|
|
|
@ -924,7 +924,7 @@ static int __init ide_setup(char *s)
|
||||||
drive->media = ide_cdrom;
|
drive->media = ide_cdrom;
|
||||||
/* an ATAPI device ignores DRDY */
|
/* an ATAPI device ignores DRDY */
|
||||||
drive->ready_stat = 0;
|
drive->ready_stat = 0;
|
||||||
goto done;
|
goto obsolete_option;
|
||||||
case -5: /* nodma */
|
case -5: /* nodma */
|
||||||
drive->nodma = 1;
|
drive->nodma = 1;
|
||||||
goto obsolete_option;
|
goto obsolete_option;
|
||||||
|
@ -948,7 +948,7 @@ static int __init ide_setup(char *s)
|
||||||
drive->sect = drive->bios_sect = vals[2];
|
drive->sect = drive->bios_sect = vals[2];
|
||||||
drive->present = 1;
|
drive->present = 1;
|
||||||
drive->forced_geom = 1;
|
drive->forced_geom = 1;
|
||||||
goto done;
|
goto obsolete_option;
|
||||||
default:
|
default:
|
||||||
goto bad_option;
|
goto bad_option;
|
||||||
}
|
}
|
||||||
|
@ -975,9 +975,6 @@ bad_option:
|
||||||
obsolete_option:
|
obsolete_option:
|
||||||
printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n");
|
printk(" -- OBSOLETE OPTION, WILL BE REMOVED SOON!\n");
|
||||||
return 1;
|
return 1;
|
||||||
done:
|
|
||||||
printk("\n");
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(ide_lock);
|
EXPORT_SYMBOL(ide_lock);
|
||||||
|
@ -1167,6 +1164,51 @@ static unsigned int ide_nowerr;
|
||||||
module_param_call(nowerr, ide_set_dev_param_mask, NULL, &ide_nowerr, 0);
|
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");
|
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)
|
static void ide_dev_apply_params(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
int i = drive->hwif->index * MAX_DRIVES + drive->select.b.unit;
|
int i = drive->hwif->index * MAX_DRIVES + drive->select.b.unit;
|
||||||
|
@ -1189,6 +1231,25 @@ static void ide_dev_apply_params(ide_drive_t *drive)
|
||||||
drive->name);
|
drive->name);
|
||||||
drive->bad_wstat = BAD_R_STAT;
|
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;
|
static unsigned int ide_ignore_cable;
|
||||||
|
|
Loading…
Reference in a new issue