ide: make legacy IDE VLB modules check for the "probe" kernel params (v2)

Legacy IDE VLB host drivers didn't check for "probe" options when compiled
as modules, which was obviously wrong as we don't want module to poke at
random I/O ports by simply loading it.  Fix it by adding "probe" module param
to legacy IDE VLB host drivers.

v2:
* don't obsolete old "ide0=dtc2278/ht6560b/qd65xx/ali14xx/umc8672"
  IDE driver options yet (per Alan Cox's request) and enhance documentation

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
Bartlomiej Zolnierkiewicz 2007-03-03 17:48:55 +01:00
parent b6209a90ec
commit 849138827c
8 changed files with 66 additions and 20 deletions

View file

@ -294,13 +294,8 @@ The following are valid ONLY on ide0, which usually corresponds
to the first ATA interface found on the particular host, and the defaults for to the first ATA interface found on the particular host, and the defaults for
the base,ctl ports must not be altered. the base,ctl ports must not be altered.
"ide0=dtc2278" : probe/support DTC2278 interface
"ide0=ht6560b" : probe/support HT6560B interface
"ide0=cmd640_vlb" : *REQUIRED* for VLB cards with the CMD640 chip "ide0=cmd640_vlb" : *REQUIRED* for VLB cards with the CMD640 chip
(not for PCI -- automatically detected) (not for PCI -- automatically detected)
"ide0=qd65xx" : probe/support qd65xx interface
"ide0=ali14xx" : probe/support ali14xx chipsets (ALI M1439/M1443/M1445)
"ide0=umc8672" : probe/support umc8672 chipsets
"ide=doubler" : probe/support IDE doublers on Amiga "ide=doubler" : probe/support IDE doublers on Amiga
@ -308,6 +303,15 @@ There may be more options than shown -- use the source, Luke!
Everything else is rejected with a "BAD OPTION" message. Everything else is rejected with a "BAD OPTION" message.
For legacy IDE VLB host drivers (ali14xx/dtc2278/ht6560b/qd65xx/umc8672)
you need to explicitly enable probing by using "probe" kernel parameter,
i.e. to enable probing for ALI M14xx chipsets (ali14xx host driver) use:
* "ali14xx.probe" boot option when ali14xx driver is built-in the kernel
* "probe" module parameter when ali14xx driver is compiled as module
("modprobe ali14xx probe")
================================================================================ ================================================================================
IDE ATAPI streaming tape driver IDE ATAPI streaming tape driver

View file

@ -1023,7 +1023,7 @@ config BLK_DEV_4DRIVES
config BLK_DEV_ALI14XX config BLK_DEV_ALI14XX
tristate "ALI M14xx support" tristate "ALI M14xx support"
help help
This driver is enabled at runtime using the "ide0=ali14xx" kernel This driver is enabled at runtime using the "ali14xx.probe" kernel
boot parameter. It enables support for the secondary IDE interface boot parameter. It enables support for the secondary IDE interface
of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
I/O speeds to be set as well. See the files I/O speeds to be set as well. See the files
@ -1033,7 +1033,7 @@ config BLK_DEV_ALI14XX
config BLK_DEV_DTC2278 config BLK_DEV_DTC2278
tristate "DTC-2278 support" tristate "DTC-2278 support"
help help
This driver is enabled at runtime using the "ide0=dtc2278" kernel This driver is enabled at runtime using the "dtc2278.probe" kernel
boot parameter. It enables support for the secondary IDE interface boot parameter. It enables support for the secondary IDE interface
of the DTC-2278 card, and permits faster I/O speeds to be set as of the DTC-2278 card, and permits faster I/O speeds to be set as
well. See the <file:Documentation/ide.txt> and well. See the <file:Documentation/ide.txt> and
@ -1042,7 +1042,7 @@ config BLK_DEV_DTC2278
config BLK_DEV_HT6560B config BLK_DEV_HT6560B
tristate "Holtek HT6560B support" tristate "Holtek HT6560B support"
help help
This driver is enabled at runtime using the "ide0=ht6560b" kernel This driver is enabled at runtime using the "ht6560b.probe" kernel
boot parameter. It enables support for the secondary IDE interface boot parameter. It enables support for the secondary IDE interface
of the Holtek card, and permits faster I/O speeds to be set as well. of the Holtek card, and permits faster I/O speeds to be set as well.
See the <file:Documentation/ide.txt> and See the <file:Documentation/ide.txt> and
@ -1051,7 +1051,7 @@ config BLK_DEV_HT6560B
config BLK_DEV_QD65XX config BLK_DEV_QD65XX
tristate "QDI QD65xx support" tristate "QDI QD65xx support"
help help
This driver is enabled at runtime using the "ide0=qd65xx" kernel This driver is enabled at runtime using the "qd65xx.probe" kernel
boot parameter. It permits faster I/O speeds to be set. See the boot parameter. It permits faster I/O speeds to be set. See the
<file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c> for <file:Documentation/ide.txt> and <file:drivers/ide/legacy/qd65xx.c> for
more info. more info.
@ -1059,7 +1059,7 @@ config BLK_DEV_QD65XX
config BLK_DEV_UMC8672 config BLK_DEV_UMC8672
tristate "UMC-8672 support" tristate "UMC-8672 support"
help help
This driver is enabled at runtime using the "ide0=umc8672" kernel This driver is enabled at runtime using the "umc8672.probe" kernel
boot parameter. It enables support for the secondary IDE interface boot parameter. It enables support for the secondary IDE interface
of the UMC-8672, and permits faster I/O speeds to be set as well. of the UMC-8672, and permits faster I/O speeds to be set as well.
See the files <file:Documentation/ide.txt> and See the files <file:Documentation/ide.txt> and

View file

@ -1484,23 +1484,23 @@ static int __init match_parm (char *s, const char *keywords[], int vals[], int m
} }
#ifdef CONFIG_BLK_DEV_ALI14XX #ifdef CONFIG_BLK_DEV_ALI14XX
static int __initdata probe_ali14xx; extern int probe_ali14xx;
extern int ali14xx_init(void); extern int ali14xx_init(void);
#endif #endif
#ifdef CONFIG_BLK_DEV_UMC8672 #ifdef CONFIG_BLK_DEV_UMC8672
static int __initdata probe_umc8672; extern int probe_umc8672;
extern int umc8672_init(void); extern int umc8672_init(void);
#endif #endif
#ifdef CONFIG_BLK_DEV_DTC2278 #ifdef CONFIG_BLK_DEV_DTC2278
static int __initdata probe_dtc2278; extern int probe_dtc2278;
extern int dtc2278_init(void); extern int dtc2278_init(void);
#endif #endif
#ifdef CONFIG_BLK_DEV_HT6560B #ifdef CONFIG_BLK_DEV_HT6560B
static int __initdata probe_ht6560b; extern int probe_ht6560b;
extern int ht6560b_init(void); extern int ht6560b_init(void);
#endif #endif
#ifdef CONFIG_BLK_DEV_QD65XX #ifdef CONFIG_BLK_DEV_QD65XX
static int __initdata probe_qd65xx; extern int probe_qd65xx;
extern int qd65xx_init(void); extern int qd65xx_init(void);
#endif #endif

View file

@ -228,9 +228,17 @@ static int __init ali14xx_probe(void)
return 0; return 0;
} }
int probe_ali14xx = 0;
module_param_named(probe, probe_ali14xx, bool, 0);
MODULE_PARM_DESC(probe, "probe for ALI M14xx chipsets");
/* Can be called directly from ide.c. */ /* Can be called directly from ide.c. */
int __init ali14xx_init(void) int __init ali14xx_init(void)
{ {
if (probe_ali14xx == 0)
goto out;
/* auto-detect IDE controller port */ /* auto-detect IDE controller port */
if (findPort()) { if (findPort()) {
if (ali14xx_probe()) if (ali14xx_probe())
@ -238,6 +246,7 @@ int __init ali14xx_init(void)
return 0; return 0;
} }
printk(KERN_ERR "ali14xx: not found.\n"); printk(KERN_ERR "ali14xx: not found.\n");
out:
return -ENODEV; return -ENODEV;
} }

View file

@ -92,7 +92,7 @@ static void tune_dtc2278 (ide_drive_t *drive, u8 pio)
HWIF(drive)->drives[!drive->select.b.unit].io_32bit = 1; HWIF(drive)->drives[!drive->select.b.unit].io_32bit = 1;
} }
static int __init probe_dtc2278(void) static int __init dtc2278_probe(void)
{ {
unsigned long flags; unsigned long flags;
ide_hwif_t *hwif, *mate; ide_hwif_t *hwif, *mate;
@ -143,10 +143,18 @@ static int __init probe_dtc2278(void)
return 0; return 0;
} }
int probe_dtc2278 = 0;
module_param_named(probe, probe_dtc2278, bool, 0);
MODULE_PARM_DESC(probe, "probe for DTC2278xx chipsets");
/* Can be called directly from ide.c. */ /* Can be called directly from ide.c. */
int __init dtc2278_init(void) int __init dtc2278_init(void)
{ {
if (probe_dtc2278()) { if (probe_dtc2278 == 0)
return -ENODEV;
if (dtc2278_probe()) {
printk(KERN_ERR "dtc2278: ide interfaces already in use!\n"); printk(KERN_ERR "dtc2278: ide interfaces already in use!\n");
return -EBUSY; return -EBUSY;
} }

View file

@ -301,12 +301,20 @@ static void tune_ht6560b (ide_drive_t *drive, u8 pio)
#endif #endif
} }
int probe_ht6560b = 0;
module_param_named(probe, probe_ht6560b, bool, 0);
MODULE_PARM_DESC(probe, "probe for HT6560B chipset");
/* Can be called directly from ide.c. */ /* Can be called directly from ide.c. */
int __init ht6560b_init(void) int __init ht6560b_init(void)
{ {
ide_hwif_t *hwif, *mate; ide_hwif_t *hwif, *mate;
int t; int t;
if (probe_ht6560b == 0)
return -ENODEV;
hwif = &ide_hwifs[0]; hwif = &ide_hwifs[0];
mate = &ide_hwifs[1]; mate = &ide_hwifs[1];

View file

@ -488,9 +488,17 @@ static int __init qd_probe(int base)
return 1; return 1;
} }
int probe_qd65xx = 0;
module_param_named(probe, probe_qd65xx, bool, 0);
MODULE_PARM_DESC(probe, "probe for QD65xx chipsets");
/* Can be called directly from ide.c. */ /* Can be called directly from ide.c. */
int __init qd65xx_init(void) int __init qd65xx_init(void)
{ {
if (probe_qd65xx == 0)
return -ENODEV;
if (qd_probe(0x30)) if (qd_probe(0x30))
qd_probe(0xb0); qd_probe(0xb0);
if (ide_hwifs[0].chipset != ide_qd65xx && if (ide_hwifs[0].chipset != ide_qd65xx &&

View file

@ -165,12 +165,21 @@ static int __init umc8672_probe(void)
return 0; return 0;
} }
int probe_umc8672 = 0;
module_param_named(probe, probe_umc8672, bool, 0);
MODULE_PARM_DESC(probe, "probe for UMC8672 chipset");
/* Can be called directly from ide.c. */ /* Can be called directly from ide.c. */
int __init umc8672_init(void) int __init umc8672_init(void)
{ {
if (umc8672_probe()) if (probe_umc8672 == 0)
return -ENODEV; goto out;
return 0;
if (umc8672_probe() == 0)
return 0;;
out:
return -ENODEV;;
} }
#ifdef MODULE #ifdef MODULE