Skip to content

Commit

Permalink
ide: remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters (take 2)
Browse files Browse the repository at this point in the history
* Remove obsoleted "idex=base[,ctl[,irq]]" kernel parameters
  and update Documentation/ide/ide.txt.

* Remove no longer needed ide_forced chipset type.

v2:
* is_chipset_set[] -> is_chipset_set in ide.c.

* Documentation/ide/ide.txt fix.

Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>
  • Loading branch information
bzolnier committed Apr 17, 2008
1 parent 80aa31c commit 9a0e77f
Show file tree
Hide file tree
Showing 8 changed files with 17 additions and 81 deletions.
33 changes: 1 addition & 32 deletions Documentation/ide/ide.txt
Original file line number Diff line number Diff line change
Expand Up @@ -71,29 +71,6 @@ This driver automatically probes for most IDE interfaces (including all PCI
ones), for the drives/geometries attached to those interfaces, and for the IRQ
lines being used by the interfaces (normally 14, 15 for ide0/ide1).

For special cases, interfaces may be specified using kernel "command line"
options. For example,

ide3=0x168,0x36e,10 /* ioports 0x168-0x16f,0x36e, irq 10 */

Normally the irq number need not be specified, as ide.c will probe for it:

ide3=0x168,0x36e /* ioports 0x168-0x16f,0x36e */

The standard port, and irq values are these:

ide0=0x1f0,0x3f6,14
ide1=0x170,0x376,15
ide2=0x1e8,0x3ee,11
ide3=0x168,0x36e,10

Note that the first parameter reserves 8 contiguous ioports, whereas the
second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'.

In all probability the device uses these ports and IRQs if it is attached
to the appropriate ide channel. Pass the parameter for the correct ide
channel to the kernel, as explained above.

Any number of interfaces may share a single IRQ if necessary, at a slight
performance penalty, whether on separate cards or a single VLB card.
The IDE driver automatically detects and handles this. However, this may
Expand Down Expand Up @@ -199,7 +176,7 @@ When ide.c is used as a module, you can pass command line parameters to the
driver using the "options=" keyword to insmod, while replacing any ',' with
';'. For example:

insmod ide.o options="ide0=serialize ide1=serialize ide2=0x1e8;0x3ee;11"
insmod ide.o options="hda=nodma hdb=nodma"


================================================================================
Expand Down Expand Up @@ -240,14 +217,6 @@ Summary of ide driver parameters for kernel command line
As for VLB, it is safest to not specify it.
Bigger values are safer than smaller ones.

"idex=base" : probe for an interface at the addr specified,
where "base" is usually 0x1f0 or 0x170
and "ctl" is assumed to be "base"+0x206

"idex=base,ctl" : specify both base and ctl

"idex=base,ctl,irq" : specify base, ctl, and irq number

"idex=serialize" : do not overlap operations on idex. Please note
that you will have to specify this option for
both the respective primary and secondary channel
Expand Down
3 changes: 1 addition & 2 deletions drivers/ide/ide-generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,7 @@ static int __init ide_generic_init(void)
ide_hwif_t *hwif = &ide_hwifs[i];

if (hwif->io_ports[IDE_DATA_OFFSET] &&
(hwif->chipset == ide_unknown ||
hwif->chipset == ide_forced))
hwif->chipset == ide_unknown)
idx[i] = i;
else
idx[i] = 0xff;
Expand Down
3 changes: 1 addition & 2 deletions drivers/ide/ide-probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -1519,8 +1519,7 @@ int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
hwif = &ide_hwifs[idx[i]];

if (hwif->present) {
if (hwif->chipset == ide_unknown ||
hwif->chipset == ide_forced)
if (hwif->chipset == ide_unknown)
hwif->chipset = ide_generic;
hwif_register_devices(hwif);
}
Expand Down
3 changes: 0 additions & 3 deletions drivers/ide/ide-proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ 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_generic: name = "generic"; break;
case ide_pci: name = "pci"; break;
Expand Down
41 changes: 12 additions & 29 deletions drivers/ide/ide.c
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,7 @@ extern int probe_ht6560b;
extern int probe_qd65xx;
extern int cmd640_vlb;

static int __initdata is_chipset_set[MAX_HWIFS];
static int __initdata is_chipset_set;

/*
* ide_setup() gets called VERY EARLY during initialization,
Expand Down Expand Up @@ -1328,8 +1328,6 @@ static int __init ide_setup(char *s)
"minus10", "four", "qd65xx", "ht6560b", "cmd640_vlb",
"dtc2278", "umc8672", "ali14xx", NULL };

hw_regs_t hwregs;

hw = s[3] - '0';
hwif = &ide_hwifs[hw];
i = match_parm(&s[4], ide_words, vals, 3);
Expand All @@ -1338,19 +1336,14 @@ static int __init ide_setup(char *s)
* Cryptic check to ensure chipset not already set for hwif.
* Note: we can't depend on hwif->chipset here.
*/
if ((i >= -18 && i <= -11) || (i > 0 && i <= 3)) {
if (i >= -18 && i <= -11) {
/* chipset already specified */
if (is_chipset_set[hw])
if (is_chipset_set)
goto bad_option;
if (i > -18 && i <= -11) {
/* these drivers are for "ide0=" only */
if (hw != 0)
goto bad_hwif;
/* chipset already specified for 2nd port */
if (is_chipset_set[hw+1])
goto bad_option;
}
is_chipset_set[hw] = 1;
/* these drivers are for "ide0=" only */
if (hw != 0)
goto bad_hwif;
is_chipset_set = 1;
printk("\n");
}

Expand Down Expand Up @@ -1430,21 +1423,11 @@ static int __init ide_setup(char *s)
case -1: /* "noprobe" */
hwif->noprobe = 1;
goto obsolete_option;

case 1: /* base */
vals[1] = vals[0] + 0x206; /* default ctl */
case 2: /* base,ctl */
vals[2] = 0; /* default irq = probe for it */
case 3: /* base,ctl,irq */
memset(&hwregs, 0, sizeof(hwregs));
ide_init_hwif_ports(&hwregs, vals[0], vals[1], &hwif->irq);
memcpy(hwif->io_ports, hwregs.io_ports, sizeof(hwif->io_ports));
hwif->irq = vals[2];
hwif->noprobe = 0;
hwif->chipset = ide_forced;
goto obsolete_option;

case 0: goto bad_option;
case 0:
case 1:
case 2:
case 3:
goto bad_option;
default:
printk(" -- SUPPORT NOT CONFIGURED IN THIS KERNEL\n");
return 1;
Expand Down
2 changes: 1 addition & 1 deletion drivers/ide/pci/cmd640.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ static void __init setup_device_ptrs (void)
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_forced) {
if (hwif->chipset == ide_unknown) {
if (hwif->io_ports[IDE_DATA_OFFSET] == 0x1f0)
cmd_hwif0 = hwif;
else if (hwif->io_ports[IDE_DATA_OFFSET] == 0x170)
Expand Down
11 changes: 0 additions & 11 deletions drivers/ide/setup-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,6 @@ static ide_hwif_t *ide_match_hwif(unsigned long io_base, u8 bootable, const char
int h;
ide_hwif_t *hwif;

/*
* Look for a hwif with matching io_base specified using
* parameters to ide_setup().
*/
for (h = 0; h < MAX_HWIFS; ++h) {
hwif = &ide_hwifs[h];
if (hwif->io_ports[IDE_DATA_OFFSET] == io_base) {
if (hwif->chipset == ide_forced)
return hwif; /* a perfect match */
}
}
/*
* Look for a hwif with matching io_base default value.
* If chipset is "ide_unknown", then claim that hwif slot.
Expand Down
2 changes: 1 addition & 1 deletion include/linux/ide.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ enum { ide_unknown, ide_generic, ide_pci,
ide_rz1000, ide_trm290,
ide_cmd646, ide_cy82c693, ide_4drives,
ide_pmac, ide_etrax100, ide_acorn,
ide_au1xxx, ide_palm3710, ide_forced
ide_au1xxx, ide_palm3710
};

typedef u8 hwif_chipset_t;
Expand Down

0 comments on commit 9a0e77f

Please sign in to comment.