aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-05-10 22:13:03 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-10 22:13:03 -0400
commit291b38a7565b41676cafd1b4052315a94d9c8977 (patch)
tree876251a73901865110c8d0d048cf379b8a6ff0e4
parentb5a53b61a2890ec08f404f524c1c42aa86f09be4 (diff)
parent6192c41fc608b0a58d5540b015aa1672c266f3c5 (diff)
Merge tag 'hwparam-20170420' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs
Pull hw lockdown support from David Howells: "Annotation of module parameters that configure hardware resources including ioports, iomem addresses, irq lines and dma channels. This allows a future patch to prohibit the use of such module parameters to prevent that hardware from being abused to gain access to the running kernel image as part of locking the kernel down under UEFI secure boot conditions. Annotations are made by changing: module_param(n, t, p) module_param_named(n, v, t, p) module_param_array(n, t, m, p) to: module_param_hw(n, t, hwtype, p) module_param_hw_named(n, v, t, hwtype, p) module_param_hw_array(n, t, hwtype, m, p) where the module parameter refers to a hardware setting hwtype specifies the type of the resource being configured. This can be one of: ioport Module parameter configures an I/O port iomem Module parameter configures an I/O mem address ioport_or_iomem Module parameter could be either (runtime set) irq Module parameter configures an I/O port dma Module parameter configures a DMA channel dma_addr Module parameter configures a DMA buffer address other Module parameter configures some other value Note that the hwtype is compile checked, but not currently stored (the lockdown code probably won't require it). It is, however, there for future use. A bonus is that the hwtype can also be used for grepping. The intention is for the kernel to ignore or reject attempts to set annotated module parameters if lockdown is enabled. This applies to options passed on the boot command line, passed to insmod/modprobe or direct twiddling in /sys/module/ parameter files. The module initialisation then needs to handle the parameter not being set, by (1) giving an error, (2) probing for a value or (3) using a reasonable default. What I can't do is just reject a module out of hand because it may take a hardware setting in the module parameters. Some important modules, some ipmi stuff for instance, both probe for hardware and allow hardware to be manually specified; if the driver is aborts with any error, you don't get any ipmi hardware. Further, trying to do this entirely in the module initialisation code doesn't protect against sysfs twiddling. [!] Note that in and of itself, this series of patches should have no effect on the the size of the kernel or code execution - that is left to a patch in the next series to effect. It does mark annotated kernel parameters with a KERNEL_PARAM_FL_HWPARAM flag in an already existing field" * tag 'hwparam-20170420' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs: (38 commits) Annotate hardware config module parameters in sound/pci/ Annotate hardware config module parameters in sound/oss/ Annotate hardware config module parameters in sound/isa/ Annotate hardware config module parameters in sound/drivers/ Annotate hardware config module parameters in fs/pstore/ Annotate hardware config module parameters in drivers/watchdog/ Annotate hardware config module parameters in drivers/video/ Annotate hardware config module parameters in drivers/tty/ Annotate hardware config module parameters in drivers/staging/vme/ Annotate hardware config module parameters in drivers/staging/speakup/ Annotate hardware config module parameters in drivers/staging/media/ Annotate hardware config module parameters in drivers/scsi/ Annotate hardware config module parameters in drivers/pcmcia/ Annotate hardware config module parameters in drivers/pci/hotplug/ Annotate hardware config module parameters in drivers/parport/ Annotate hardware config module parameters in drivers/net/wireless/ Annotate hardware config module parameters in drivers/net/wan/ Annotate hardware config module parameters in drivers/net/irda/ Annotate hardware config module parameters in drivers/net/hamradio/ Annotate hardware config module parameters in drivers/net/ethernet/ ...
-rw-r--r--arch/x86/mm/testmmiotrace.c2
-rw-r--r--drivers/char/applicom.c4
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c14
-rw-r--r--drivers/char/mwave/mwavedd.c8
-rw-r--r--drivers/clocksource/cs5535-clockevt.c2
-rw-r--r--drivers/cpufreq/speedstep-smi.c2
-rw-r--r--drivers/gpio/gpio-104-dio-48e.c4
-rw-r--r--drivers/gpio/gpio-104-idi-48.c4
-rw-r--r--drivers/gpio/gpio-104-idio-16.c4
-rw-r--r--drivers/gpio/gpio-gpio-mm.c2
-rw-r--r--drivers/gpio/gpio-ws16c48.c4
-rw-r--r--drivers/i2c/busses/i2c-ali15x3.c2
-rw-r--r--drivers/i2c/busses/i2c-elektor.c6
-rw-r--r--drivers/i2c/busses/i2c-parport-light.c4
-rw-r--r--drivers/i2c/busses/i2c-pca-isa.c4
-rw-r--r--drivers/i2c/busses/i2c-piix4.c2
-rw-r--r--drivers/i2c/busses/i2c-sis5595.c2
-rw-r--r--drivers/i2c/busses/i2c-viapro.c2
-rw-r--r--drivers/i2c/busses/scx200_acb.c2
-rw-r--r--drivers/iio/adc/stx104.c2
-rw-r--r--drivers/iio/dac/cio-dac.c2
-rw-r--r--drivers/input/mouse/inport.c2
-rw-r--r--drivers/input/mouse/logibm.c2
-rw-r--r--drivers/input/touchscreen/mk712.c4
-rw-r--r--drivers/isdn/hardware/avm/b1isa.c4
-rw-r--r--drivers/isdn/hardware/avm/t1isa.c4
-rw-r--r--drivers/isdn/hisax/config.c10
-rw-r--r--drivers/media/pci/zoran/zoran_card.c2
-rw-r--r--drivers/media/rc/serial_ir.c10
-rw-r--r--drivers/misc/dummy-irq.c2
-rw-r--r--drivers/mmc/host/wbsd.c8
-rw-r--r--drivers/net/appletalk/cops.c6
-rw-r--r--drivers/net/appletalk/ltpc.c6
-rw-r--r--drivers/net/arcnet/com20020-isa.c4
-rw-r--r--drivers/net/arcnet/com90io.c4
-rw-r--r--drivers/net/arcnet/com90xx.c4
-rw-r--r--drivers/net/can/cc770/cc770_isa.c8
-rw-r--r--drivers/net/can/sja1000/sja1000_isa.c8
-rw-r--r--drivers/net/ethernet/3com/3c509.c2
-rw-r--r--drivers/net/ethernet/3com/3c59x.c4
-rw-r--r--drivers/net/ethernet/8390/ne.c4
-rw-r--r--drivers/net/ethernet/8390/smc-ultra.c4
-rw-r--r--drivers/net/ethernet/8390/wd.c8
-rw-r--r--drivers/net/ethernet/amd/lance.c6
-rw-r--r--drivers/net/ethernet/amd/ni65.c6
-rw-r--r--drivers/net/ethernet/cirrus/cs89x0.c6
-rw-r--r--drivers/net/ethernet/dec/tulip/de4x5.c2
-rw-r--r--drivers/net/ethernet/hp/hp100.c2
-rw-r--r--drivers/net/ethernet/realtek/atp.c4
-rw-r--r--drivers/net/ethernet/smsc/smc9194.c4
-rw-r--r--drivers/net/hamradio/baycom_epp.c2
-rw-r--r--drivers/net/hamradio/baycom_par.c2
-rw-r--r--drivers/net/hamradio/baycom_ser_fdx.c4
-rw-r--r--drivers/net/hamradio/baycom_ser_hdx.c4
-rw-r--r--drivers/net/hamradio/dmascc.c2
-rw-r--r--drivers/net/irda/ali-ircc.c6
-rw-r--r--drivers/net/irda/nsc-ircc.c6
-rw-r--r--drivers/net/irda/smsc-ircc2.c10
-rw-r--r--drivers/net/irda/w83977af_ir.c4
-rw-r--r--drivers/net/wan/cosa.c6
-rw-r--r--drivers/net/wan/hostess_sv11.c6
-rw-r--r--drivers/net/wan/sbni.c4
-rw-r--r--drivers/net/wan/sealevel.c8
-rw-r--r--drivers/net/wireless/cisco/airo.c4
-rw-r--r--drivers/parport/parport_pc.c8
-rw-r--r--drivers/pci/hotplug/cpcihp_generic.c2
-rw-r--r--drivers/pcmcia/i82365.c8
-rw-r--r--drivers/pcmcia/tcic.c8
-rw-r--r--drivers/scsi/aha152x.c4
-rw-r--r--drivers/scsi/aha1542.c2
-rw-r--r--drivers/scsi/g_NCR5380.c8
-rw-r--r--drivers/scsi/gdth.c2
-rw-r--r--drivers/scsi/qlogicfas.c4
-rw-r--r--drivers/staging/speakup/speakup_acntpc.c2
-rw-r--r--drivers/staging/speakup/speakup_dtlk.c2
-rw-r--r--drivers/staging/speakup/speakup_keypc.c2
-rw-r--r--drivers/staging/vme/devices/vme_pio2_core.c8
-rw-r--r--drivers/tty/cyclades.c4
-rw-r--r--drivers/tty/moxa.c2
-rw-r--r--drivers/tty/mxser.c2
-rw-r--r--drivers/tty/rocket.c10
-rw-r--r--drivers/tty/serial/8250/8250_core.c4
-rw-r--r--drivers/tty/synclink.c6
-rw-r--r--drivers/video/fbdev/arcfb.c8
-rw-r--r--drivers/video/fbdev/n411.c6
-rw-r--r--drivers/watchdog/cpu5wdt.c2
-rw-r--r--drivers/watchdog/eurotechwdt.c4
-rw-r--r--drivers/watchdog/pc87413_wdt.c2
-rw-r--r--drivers/watchdog/sc1200wdt.c2
-rw-r--r--drivers/watchdog/wdt.c4
-rw-r--r--fs/pstore/ram.c2
-rw-r--r--include/linux/moduleparam.h65
-rw-r--r--sound/drivers/mpu401/mpu401.c4
-rw-r--r--sound/drivers/mtpav.c4
-rw-r--r--sound/drivers/serial-u16550.c4
-rw-r--r--sound/isa/ad1848/ad1848.c6
-rw-r--r--sound/isa/adlib.c2
-rw-r--r--sound/isa/cmi8328.c12
-rw-r--r--sound/isa/cmi8330.c20
-rw-r--r--sound/isa/cs423x/cs4231.c12
-rw-r--r--sound/isa/cs423x/cs4236.c18
-rw-r--r--sound/isa/es1688/es1688.c12
-rw-r--r--sound/isa/es18xx.c12
-rw-r--r--sound/isa/galaxy/galaxy.c16
-rw-r--r--sound/isa/gus/gusclassic.c8
-rw-r--r--sound/isa/gus/gusextreme.c16
-rw-r--r--sound/isa/gus/gusmax.c8
-rw-r--r--sound/isa/gus/interwave.c10
-rw-r--r--sound/isa/msnd/msnd_pinnacle.c20
-rw-r--r--sound/isa/opl3sa2.c16
-rw-r--r--sound/isa/opti9xx/miro.c14
-rw-r--r--sound/isa/opti9xx/opti92x-ad1848.c14
-rw-r--r--sound/isa/sb/jazz16.c12
-rw-r--r--sound/isa/sb/sb16.c14
-rw-r--r--sound/isa/sb/sb8.c6
-rw-r--r--sound/isa/sc6000.c12
-rw-r--r--sound/isa/sscape.c12
-rw-r--r--sound/isa/wavefront/wavefront.c18
-rw-r--r--sound/oss/ad1848.c8
-rw-r--r--sound/oss/aedsp16.c12
-rw-r--r--sound/oss/mpu401.c4
-rw-r--r--sound/oss/msnd_pinnacle.c20
-rw-r--r--sound/oss/opl3.c2
-rw-r--r--sound/oss/pas2_card.c18
-rw-r--r--sound/oss/pss.c14
-rw-r--r--sound/oss/sb_card.c10
-rw-r--r--sound/oss/trix.c18
-rw-r--r--sound/oss/uart401.c4
-rw-r--r--sound/oss/uart6850.c4
-rw-r--r--sound/oss/waveartist.c8
-rw-r--r--sound/pci/als4000.c2
-rw-r--r--sound/pci/cmipci.c6
-rw-r--r--sound/pci/ens1370.c2
-rw-r--r--sound/pci/riptide/riptide.c6
-rw-r--r--sound/pci/sonicvibes.c2
-rw-r--r--sound/pci/via82xx.c2
-rw-r--r--sound/pci/ymfpci/ymfpci.c6
137 files changed, 491 insertions, 428 deletions
diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c
index 38868adf07ea..f6ae6830b341 100644
--- a/arch/x86/mm/testmmiotrace.c
+++ b/arch/x86/mm/testmmiotrace.c
@@ -9,7 +9,7 @@
9#include <linux/mmiotrace.h> 9#include <linux/mmiotrace.h>
10 10
11static unsigned long mmio_address; 11static unsigned long mmio_address;
12module_param(mmio_address, ulong, 0); 12module_param_hw(mmio_address, ulong, iomem, 0);
13MODULE_PARM_DESC(mmio_address, " Start address of the mapping of 16 kB " 13MODULE_PARM_DESC(mmio_address, " Start address of the mapping of 16 kB "
14 "(or 8 MB if read_far is non-zero)."); 14 "(or 8 MB if read_far is non-zero).");
15 15
diff --git a/drivers/char/applicom.c b/drivers/char/applicom.c
index e770ad977472..b67263d6e34b 100644
--- a/drivers/char/applicom.c
+++ b/drivers/char/applicom.c
@@ -94,9 +94,9 @@ static struct applicom_board {
94static unsigned int irq = 0; /* interrupt number IRQ */ 94static unsigned int irq = 0; /* interrupt number IRQ */
95static unsigned long mem = 0; /* physical segment of board */ 95static unsigned long mem = 0; /* physical segment of board */
96 96
97module_param(irq, uint, 0); 97module_param_hw(irq, uint, irq, 0);
98MODULE_PARM_DESC(irq, "IRQ of the Applicom board"); 98MODULE_PARM_DESC(irq, "IRQ of the Applicom board");
99module_param(mem, ulong, 0); 99module_param_hw(mem, ulong, iomem, 0);
100MODULE_PARM_DESC(mem, "Shared Memory Address of Applicom board"); 100MODULE_PARM_DESC(mem, "Shared Memory Address of Applicom board");
101 101
102static unsigned int numboards; /* number of installed boards */ 102static unsigned int numboards; /* number of installed boards */
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index b2b618f066e0..59ee93ea84eb 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -1375,39 +1375,39 @@ MODULE_PARM_DESC(type, "Defines the type of each interface, each"
1375 " interface separated by commas. The types are 'kcs'," 1375 " interface separated by commas. The types are 'kcs',"
1376 " 'smic', and 'bt'. For example si_type=kcs,bt will set" 1376 " 'smic', and 'bt'. For example si_type=kcs,bt will set"
1377 " the first interface to kcs and the second to bt"); 1377 " the first interface to kcs and the second to bt");
1378module_param_array(addrs, ulong, &num_addrs, 0); 1378module_param_hw_array(addrs, ulong, iomem, &num_addrs, 0);
1379MODULE_PARM_DESC(addrs, "Sets the memory address of each interface, the" 1379MODULE_PARM_DESC(addrs, "Sets the memory address of each interface, the"
1380 " addresses separated by commas. Only use if an interface" 1380 " addresses separated by commas. Only use if an interface"
1381 " is in memory. Otherwise, set it to zero or leave" 1381 " is in memory. Otherwise, set it to zero or leave"
1382 " it blank."); 1382 " it blank.");
1383module_param_array(ports, uint, &num_ports, 0); 1383module_param_hw_array(ports, uint, ioport, &num_ports, 0);
1384MODULE_PARM_DESC(ports, "Sets the port address of each interface, the" 1384MODULE_PARM_DESC(ports, "Sets the port address of each interface, the"
1385 " addresses separated by commas. Only use if an interface" 1385 " addresses separated by commas. Only use if an interface"
1386 " is a port. Otherwise, set it to zero or leave" 1386 " is a port. Otherwise, set it to zero or leave"
1387 " it blank."); 1387 " it blank.");
1388module_param_array(irqs, int, &num_irqs, 0); 1388module_param_hw_array(irqs, int, irq, &num_irqs, 0);
1389MODULE_PARM_DESC(irqs, "Sets the interrupt of each interface, the" 1389MODULE_PARM_DESC(irqs, "Sets the interrupt of each interface, the"
1390 " addresses separated by commas. Only use if an interface" 1390 " addresses separated by commas. Only use if an interface"
1391 " has an interrupt. Otherwise, set it to zero or leave" 1391 " has an interrupt. Otherwise, set it to zero or leave"
1392 " it blank."); 1392 " it blank.");
1393module_param_array(regspacings, int, &num_regspacings, 0); 1393module_param_hw_array(regspacings, int, other, &num_regspacings, 0);
1394MODULE_PARM_DESC(regspacings, "The number of bytes between the start address" 1394MODULE_PARM_DESC(regspacings, "The number of bytes between the start address"
1395 " and each successive register used by the interface. For" 1395 " and each successive register used by the interface. For"
1396 " instance, if the start address is 0xca2 and the spacing" 1396 " instance, if the start address is 0xca2 and the spacing"
1397 " is 2, then the second address is at 0xca4. Defaults" 1397 " is 2, then the second address is at 0xca4. Defaults"
1398 " to 1."); 1398 " to 1.");
1399module_param_array(regsizes, int, &num_regsizes, 0); 1399module_param_hw_array(regsizes, int, other, &num_regsizes, 0);
1400MODULE_PARM_DESC(regsizes, "The size of the specific IPMI register in bytes." 1400MODULE_PARM_DESC(regsizes, "The size of the specific IPMI register in bytes."
1401 " This should generally be 1, 2, 4, or 8 for an 8-bit," 1401 " This should generally be 1, 2, 4, or 8 for an 8-bit,"
1402 " 16-bit, 32-bit, or 64-bit register. Use this if you" 1402 " 16-bit, 32-bit, or 64-bit register. Use this if you"
1403 " the 8-bit IPMI register has to be read from a larger" 1403 " the 8-bit IPMI register has to be read from a larger"
1404 " register."); 1404 " register.");
1405module_param_array(regshifts, int, &num_regshifts, 0); 1405module_param_hw_array(regshifts, int, other, &num_regshifts, 0);
1406MODULE_PARM_DESC(regshifts, "The amount to shift the data read from the." 1406MODULE_PARM_DESC(regshifts, "The amount to shift the data read from the."
1407 " IPMI register, in bits. For instance, if the data" 1407 " IPMI register, in bits. For instance, if the data"
1408 " is read from a 32-bit word and the IPMI data is in" 1408 " is read from a 32-bit word and the IPMI data is in"
1409 " bit 8-15, then the shift would be 8"); 1409 " bit 8-15, then the shift would be 8");
1410module_param_array(slave_addrs, int, &num_slave_addrs, 0); 1410module_param_hw_array(slave_addrs, int, other, &num_slave_addrs, 0);
1411MODULE_PARM_DESC(slave_addrs, "Set the default IPMB slave address for" 1411MODULE_PARM_DESC(slave_addrs, "Set the default IPMB slave address for"
1412 " the controller. Normally this is 0x20, but can be" 1412 " the controller. Normally this is 0x20, but can be"
1413 " overridden by this parm. This is an array indexed" 1413 " overridden by this parm. This is an array indexed"
diff --git a/drivers/char/mwave/mwavedd.c b/drivers/char/mwave/mwavedd.c
index 3a3ff2eb6cba..b5e3103c1175 100644
--- a/drivers/char/mwave/mwavedd.c
+++ b/drivers/char/mwave/mwavedd.c
@@ -80,10 +80,10 @@ int mwave_3780i_io = 0;
80int mwave_uart_irq = 0; 80int mwave_uart_irq = 0;
81int mwave_uart_io = 0; 81int mwave_uart_io = 0;
82module_param(mwave_debug, int, 0); 82module_param(mwave_debug, int, 0);
83module_param(mwave_3780i_irq, int, 0); 83module_param_hw(mwave_3780i_irq, int, irq, 0);
84module_param(mwave_3780i_io, int, 0); 84module_param_hw(mwave_3780i_io, int, ioport, 0);
85module_param(mwave_uart_irq, int, 0); 85module_param_hw(mwave_uart_irq, int, irq, 0);
86module_param(mwave_uart_io, int, 0); 86module_param_hw(mwave_uart_io, int, ioport, 0);
87 87
88static int mwave_open(struct inode *inode, struct file *file); 88static int mwave_open(struct inode *inode, struct file *file);
89static int mwave_close(struct inode *inode, struct file *file); 89static int mwave_close(struct inode *inode, struct file *file);
diff --git a/drivers/clocksource/cs5535-clockevt.c b/drivers/clocksource/cs5535-clockevt.c
index 9a7e37cf56b0..a1df588343f2 100644
--- a/drivers/clocksource/cs5535-clockevt.c
+++ b/drivers/clocksource/cs5535-clockevt.c
@@ -22,7 +22,7 @@
22#define DRV_NAME "cs5535-clockevt" 22#define DRV_NAME "cs5535-clockevt"
23 23
24static int timer_irq; 24static int timer_irq;
25module_param_named(irq, timer_irq, int, 0644); 25module_param_hw_named(irq, timer_irq, int, irq, 0644);
26MODULE_PARM_DESC(irq, "Which IRQ to use for the clock source MFGPT ticks."); 26MODULE_PARM_DESC(irq, "Which IRQ to use for the clock source MFGPT ticks.");
27 27
28/* 28/*
diff --git a/drivers/cpufreq/speedstep-smi.c b/drivers/cpufreq/speedstep-smi.c
index 770a9ae1999a..37b30071c220 100644
--- a/drivers/cpufreq/speedstep-smi.c
+++ b/drivers/cpufreq/speedstep-smi.c
@@ -378,7 +378,7 @@ static void __exit speedstep_exit(void)
378 cpufreq_unregister_driver(&speedstep_driver); 378 cpufreq_unregister_driver(&speedstep_driver);
379} 379}
380 380
381module_param(smi_port, int, 0444); 381module_param_hw(smi_port, int, ioport, 0444);
382module_param(smi_cmd, int, 0444); 382module_param(smi_cmd, int, 0444);
383module_param(smi_sig, uint, 0444); 383module_param(smi_sig, uint, 0444);
384 384
diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
index 61b50c40b87b..598e209efa2d 100644
--- a/drivers/gpio/gpio-104-dio-48e.c
+++ b/drivers/gpio/gpio-104-dio-48e.c
@@ -33,11 +33,11 @@
33 33
34static unsigned int base[MAX_NUM_DIO48E]; 34static unsigned int base[MAX_NUM_DIO48E];
35static unsigned int num_dio48e; 35static unsigned int num_dio48e;
36module_param_array(base, uint, &num_dio48e, 0); 36module_param_hw_array(base, uint, ioport, &num_dio48e, 0);
37MODULE_PARM_DESC(base, "ACCES 104-DIO-48E base addresses"); 37MODULE_PARM_DESC(base, "ACCES 104-DIO-48E base addresses");
38 38
39static unsigned int irq[MAX_NUM_DIO48E]; 39static unsigned int irq[MAX_NUM_DIO48E];
40module_param_array(irq, uint, NULL, 0); 40module_param_hw_array(irq, uint, irq, NULL, 0);
41MODULE_PARM_DESC(irq, "ACCES 104-DIO-48E interrupt line numbers"); 41MODULE_PARM_DESC(irq, "ACCES 104-DIO-48E interrupt line numbers");
42 42
43/** 43/**
diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c
index 337c048168d8..51f046e29ff7 100644
--- a/drivers/gpio/gpio-104-idi-48.c
+++ b/drivers/gpio/gpio-104-idi-48.c
@@ -33,11 +33,11 @@
33 33
34static unsigned int base[MAX_NUM_IDI_48]; 34static unsigned int base[MAX_NUM_IDI_48];
35static unsigned int num_idi_48; 35static unsigned int num_idi_48;
36module_param_array(base, uint, &num_idi_48, 0); 36module_param_hw_array(base, uint, ioport, &num_idi_48, 0);
37MODULE_PARM_DESC(base, "ACCES 104-IDI-48 base addresses"); 37MODULE_PARM_DESC(base, "ACCES 104-IDI-48 base addresses");
38 38
39static unsigned int irq[MAX_NUM_IDI_48]; 39static unsigned int irq[MAX_NUM_IDI_48];
40module_param_array(irq, uint, NULL, 0); 40module_param_hw_array(irq, uint, irq, NULL, 0);
41MODULE_PARM_DESC(irq, "ACCES 104-IDI-48 interrupt line numbers"); 41MODULE_PARM_DESC(irq, "ACCES 104-IDI-48 interrupt line numbers");
42 42
43/** 43/**
diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-idio-16.c
index 5281e1cedb01..ec2ce34ff473 100644
--- a/drivers/gpio/gpio-104-idio-16.c
+++ b/drivers/gpio/gpio-104-idio-16.c
@@ -33,11 +33,11 @@
33 33
34static unsigned int base[MAX_NUM_IDIO_16]; 34static unsigned int base[MAX_NUM_IDIO_16];
35static unsigned int num_idio_16; 35static unsigned int num_idio_16;
36module_param_array(base, uint, &num_idio_16, 0); 36module_param_hw_array(base, uint, ioport, &num_idio_16, 0);
37MODULE_PARM_DESC(base, "ACCES 104-IDIO-16 base addresses"); 37MODULE_PARM_DESC(base, "ACCES 104-IDIO-16 base addresses");
38 38
39static unsigned int irq[MAX_NUM_IDIO_16]; 39static unsigned int irq[MAX_NUM_IDIO_16];
40module_param_array(irq, uint, NULL, 0); 40module_param_hw_array(irq, uint, irq, NULL, 0);
41MODULE_PARM_DESC(irq, "ACCES 104-IDIO-16 interrupt line numbers"); 41MODULE_PARM_DESC(irq, "ACCES 104-IDIO-16 interrupt line numbers");
42 42
43/** 43/**
diff --git a/drivers/gpio/gpio-gpio-mm.c b/drivers/gpio/gpio-gpio-mm.c
index fa4baa2543db..11ade5b288f8 100644
--- a/drivers/gpio/gpio-gpio-mm.c
+++ b/drivers/gpio/gpio-gpio-mm.c
@@ -31,7 +31,7 @@
31 31
32static unsigned int base[MAX_NUM_GPIOMM]; 32static unsigned int base[MAX_NUM_GPIOMM];
33static unsigned int num_gpiomm; 33static unsigned int num_gpiomm;
34module_param_array(base, uint, &num_gpiomm, 0); 34module_param_hw_array(base, uint, ioport, &num_gpiomm, 0);
35MODULE_PARM_DESC(base, "Diamond Systems GPIO-MM base addresses"); 35MODULE_PARM_DESC(base, "Diamond Systems GPIO-MM base addresses");
36 36
37/** 37/**
diff --git a/drivers/gpio/gpio-ws16c48.c b/drivers/gpio/gpio-ws16c48.c
index 87d63695dfcf..5037974ac063 100644
--- a/drivers/gpio/gpio-ws16c48.c
+++ b/drivers/gpio/gpio-ws16c48.c
@@ -30,11 +30,11 @@
30 30
31static unsigned int base[MAX_NUM_WS16C48]; 31static unsigned int base[MAX_NUM_WS16C48];
32static unsigned int num_ws16c48; 32static unsigned int num_ws16c48;
33module_param_array(base, uint, &num_ws16c48, 0); 33module_param_hw_array(base, uint, ioport, &num_ws16c48, 0);
34MODULE_PARM_DESC(base, "WinSystems WS16C48 base addresses"); 34MODULE_PARM_DESC(base, "WinSystems WS16C48 base addresses");
35 35
36static unsigned int irq[MAX_NUM_WS16C48]; 36static unsigned int irq[MAX_NUM_WS16C48];
37module_param_array(irq, uint, NULL, 0); 37module_param_hw_array(irq, uint, irq, NULL, 0);
38MODULE_PARM_DESC(irq, "WinSystems WS16C48 interrupt line numbers"); 38MODULE_PARM_DESC(irq, "WinSystems WS16C48 interrupt line numbers");
39 39
40/** 40/**
diff --git a/drivers/i2c/busses/i2c-ali15x3.c b/drivers/i2c/busses/i2c-ali15x3.c
index 45c5c4883022..6e6bf46bcb52 100644
--- a/drivers/i2c/busses/i2c-ali15x3.c
+++ b/drivers/i2c/busses/i2c-ali15x3.c
@@ -119,7 +119,7 @@
119/* If force_addr is set to anything different from 0, we forcibly enable 119/* If force_addr is set to anything different from 0, we forcibly enable
120 the device at the given address. */ 120 the device at the given address. */
121static u16 force_addr; 121static u16 force_addr;
122module_param(force_addr, ushort, 0); 122module_param_hw(force_addr, ushort, ioport, 0);
123MODULE_PARM_DESC(force_addr, 123MODULE_PARM_DESC(force_addr,
124 "Initialize the base address of the i2c controller"); 124 "Initialize the base address of the i2c controller");
125 125
diff --git a/drivers/i2c/busses/i2c-elektor.c b/drivers/i2c/busses/i2c-elektor.c
index 8af62fb3fe41..5416003e0605 100644
--- a/drivers/i2c/busses/i2c-elektor.c
+++ b/drivers/i2c/busses/i2c-elektor.c
@@ -323,9 +323,9 @@ MODULE_AUTHOR("Hans Berglund <hb@spacetec.no>");
323MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter"); 323MODULE_DESCRIPTION("I2C-Bus adapter routines for PCF8584 ISA bus adapter");
324MODULE_LICENSE("GPL"); 324MODULE_LICENSE("GPL");
325 325
326module_param(base, int, 0); 326module_param_hw(base, int, ioport_or_iomem, 0);
327module_param(irq, int, 0); 327module_param_hw(irq, int, irq, 0);
328module_param(clock, int, 0); 328module_param(clock, int, 0);
329module_param(own, int, 0); 329module_param(own, int, 0);
330module_param(mmapped, int, 0); 330module_param_hw(mmapped, int, other, 0);
331module_isa_driver(i2c_elektor_driver, 1); 331module_isa_driver(i2c_elektor_driver, 1);
diff --git a/drivers/i2c/busses/i2c-parport-light.c b/drivers/i2c/busses/i2c-parport-light.c
index 1bcdd10b68b9..faa8fb8f2b8f 100644
--- a/drivers/i2c/busses/i2c-parport-light.c
+++ b/drivers/i2c/busses/i2c-parport-light.c
@@ -38,11 +38,11 @@
38static struct platform_device *pdev; 38static struct platform_device *pdev;
39 39
40static u16 base; 40static u16 base;
41module_param(base, ushort, 0); 41module_param_hw(base, ushort, ioport, 0);
42MODULE_PARM_DESC(base, "Base I/O address"); 42MODULE_PARM_DESC(base, "Base I/O address");
43 43
44static int irq; 44static int irq;
45module_param(irq, int, 0); 45module_param_hw(irq, int, irq, 0);
46MODULE_PARM_DESC(irq, "IRQ (optional)"); 46MODULE_PARM_DESC(irq, "IRQ (optional)");
47 47
48/* ----- Low-level parallel port access ----------------------------------- */ 48/* ----- Low-level parallel port access ----------------------------------- */
diff --git a/drivers/i2c/busses/i2c-pca-isa.c b/drivers/i2c/busses/i2c-pca-isa.c
index ba88f17f636c..946ac646de2a 100644
--- a/drivers/i2c/busses/i2c-pca-isa.c
+++ b/drivers/i2c/busses/i2c-pca-isa.c
@@ -197,9 +197,9 @@ MODULE_AUTHOR("Ian Campbell <icampbell@arcom.com>");
197MODULE_DESCRIPTION("ISA base PCA9564/PCA9665 driver"); 197MODULE_DESCRIPTION("ISA base PCA9564/PCA9665 driver");
198MODULE_LICENSE("GPL"); 198MODULE_LICENSE("GPL");
199 199
200module_param(base, ulong, 0); 200module_param_hw(base, ulong, ioport, 0);
201MODULE_PARM_DESC(base, "I/O base address"); 201MODULE_PARM_DESC(base, "I/O base address");
202module_param(irq, int, 0); 202module_param_hw(irq, int, irq, 0);
203MODULE_PARM_DESC(irq, "IRQ"); 203MODULE_PARM_DESC(irq, "IRQ");
204module_param(clock, int, 0); 204module_param(clock, int, 0);
205MODULE_PARM_DESC(clock, "Clock rate in hertz.\n\t\t" 205MODULE_PARM_DESC(clock, "Clock rate in hertz.\n\t\t"
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
index c21ca7bf2efe..0ecdb47a23ab 100644
--- a/drivers/i2c/busses/i2c-piix4.c
+++ b/drivers/i2c/busses/i2c-piix4.c
@@ -106,7 +106,7 @@ MODULE_PARM_DESC(force, "Forcibly enable the PIIX4. DANGEROUS!");
106/* If force_addr is set to anything different from 0, we forcibly enable 106/* If force_addr is set to anything different from 0, we forcibly enable
107 the PIIX4 at the given address. VERY DANGEROUS! */ 107 the PIIX4 at the given address. VERY DANGEROUS! */
108static int force_addr; 108static int force_addr;
109module_param (force_addr, int, 0); 109module_param_hw(force_addr, int, ioport, 0);
110MODULE_PARM_DESC(force_addr, 110MODULE_PARM_DESC(force_addr,
111 "Forcibly enable the PIIX4 at the given address. " 111 "Forcibly enable the PIIX4 at the given address. "
112 "EXTREMELY DANGEROUS!"); 112 "EXTREMELY DANGEROUS!");
diff --git a/drivers/i2c/busses/i2c-sis5595.c b/drivers/i2c/busses/i2c-sis5595.c
index 7d58a40faf2d..d543a9867ba4 100644
--- a/drivers/i2c/busses/i2c-sis5595.c
+++ b/drivers/i2c/busses/i2c-sis5595.c
@@ -119,7 +119,7 @@ static int blacklist[] = {
119/* If force_addr is set to anything different from 0, we forcibly enable 119/* If force_addr is set to anything different from 0, we forcibly enable
120 the device at the given address. */ 120 the device at the given address. */
121static u16 force_addr; 121static u16 force_addr;
122module_param(force_addr, ushort, 0); 122module_param_hw(force_addr, ushort, ioport, 0);
123MODULE_PARM_DESC(force_addr, "Initialize the base address of the i2c controller"); 123MODULE_PARM_DESC(force_addr, "Initialize the base address of the i2c controller");
124 124
125static struct pci_driver sis5595_driver; 125static struct pci_driver sis5595_driver;
diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c
index 0ee2646f3b00..0dc45e12bb1d 100644
--- a/drivers/i2c/busses/i2c-viapro.c
+++ b/drivers/i2c/busses/i2c-viapro.c
@@ -94,7 +94,7 @@ MODULE_PARM_DESC(force, "Forcibly enable the SMBus. DANGEROUS!");
94/* If force_addr is set to anything different from 0, we forcibly enable 94/* If force_addr is set to anything different from 0, we forcibly enable
95 the VT596 at the given address. VERY DANGEROUS! */ 95 the VT596 at the given address. VERY DANGEROUS! */
96static u16 force_addr; 96static u16 force_addr;
97module_param(force_addr, ushort, 0); 97module_param_hw(force_addr, ushort, ioport, 0);
98MODULE_PARM_DESC(force_addr, 98MODULE_PARM_DESC(force_addr,
99 "Forcibly enable the SMBus at the given address. " 99 "Forcibly enable the SMBus at the given address. "
100 "EXTREMELY DANGEROUS!"); 100 "EXTREMELY DANGEROUS!");
diff --git a/drivers/i2c/busses/scx200_acb.c b/drivers/i2c/busses/scx200_acb.c
index 0a7e410b6195..e0923bee8d1f 100644
--- a/drivers/i2c/busses/scx200_acb.c
+++ b/drivers/i2c/busses/scx200_acb.c
@@ -42,7 +42,7 @@ MODULE_LICENSE("GPL");
42 42
43#define MAX_DEVICES 4 43#define MAX_DEVICES 4
44static int base[MAX_DEVICES] = { 0x820, 0x840 }; 44static int base[MAX_DEVICES] = { 0x820, 0x840 };
45module_param_array(base, int, NULL, 0); 45module_param_hw_array(base, int, ioport, NULL, 0);
46MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers"); 46MODULE_PARM_DESC(base, "Base addresses for the ACCESS.bus controllers");
47 47
48#define POLL_TIMEOUT (HZ/5) 48#define POLL_TIMEOUT (HZ/5)
diff --git a/drivers/iio/adc/stx104.c b/drivers/iio/adc/stx104.c
index 2df84fa5e3fc..2da741d27540 100644
--- a/drivers/iio/adc/stx104.c
+++ b/drivers/iio/adc/stx104.c
@@ -49,7 +49,7 @@
49 49
50static unsigned int base[max_num_isa_dev(STX104_EXTENT)]; 50static unsigned int base[max_num_isa_dev(STX104_EXTENT)];
51static unsigned int num_stx104; 51static unsigned int num_stx104;
52module_param_array(base, uint, &num_stx104, 0); 52module_param_hw_array(base, uint, ioport, &num_stx104, 0);
53MODULE_PARM_DESC(base, "Apex Embedded Systems STX104 base addresses"); 53MODULE_PARM_DESC(base, "Apex Embedded Systems STX104 base addresses");
54 54
55/** 55/**
diff --git a/drivers/iio/dac/cio-dac.c b/drivers/iio/dac/cio-dac.c
index a0464227a3a0..a8dffd938615 100644
--- a/drivers/iio/dac/cio-dac.c
+++ b/drivers/iio/dac/cio-dac.c
@@ -39,7 +39,7 @@
39 39
40static unsigned int base[max_num_isa_dev(CIO_DAC_EXTENT)]; 40static unsigned int base[max_num_isa_dev(CIO_DAC_EXTENT)];
41static unsigned int num_cio_dac; 41static unsigned int num_cio_dac;
42module_param_array(base, uint, &num_cio_dac, 0); 42module_param_hw_array(base, uint, ioport, &num_cio_dac, 0);
43MODULE_PARM_DESC(base, "Measurement Computing CIO-DAC base addresses"); 43MODULE_PARM_DESC(base, "Measurement Computing CIO-DAC base addresses");
44 44
45/** 45/**
diff --git a/drivers/input/mouse/inport.c b/drivers/input/mouse/inport.c
index 3827a22362de..9ce71dfa0de1 100644
--- a/drivers/input/mouse/inport.c
+++ b/drivers/input/mouse/inport.c
@@ -78,7 +78,7 @@ MODULE_LICENSE("GPL");
78#define INPORT_IRQ 5 78#define INPORT_IRQ 5
79 79
80static int inport_irq = INPORT_IRQ; 80static int inport_irq = INPORT_IRQ;
81module_param_named(irq, inport_irq, uint, 0); 81module_param_hw_named(irq, inport_irq, uint, irq, 0);
82MODULE_PARM_DESC(irq, "IRQ number (5=default)"); 82MODULE_PARM_DESC(irq, "IRQ number (5=default)");
83 83
84static struct input_dev *inport_dev; 84static struct input_dev *inport_dev;
diff --git a/drivers/input/mouse/logibm.c b/drivers/input/mouse/logibm.c
index e2413113df22..6f165e053f4d 100644
--- a/drivers/input/mouse/logibm.c
+++ b/drivers/input/mouse/logibm.c
@@ -69,7 +69,7 @@ MODULE_LICENSE("GPL");
69#define LOGIBM_IRQ 5 69#define LOGIBM_IRQ 5
70 70
71static int logibm_irq = LOGIBM_IRQ; 71static int logibm_irq = LOGIBM_IRQ;
72module_param_named(irq, logibm_irq, uint, 0); 72module_param_hw_named(irq, logibm_irq, uint, irq, 0);
73MODULE_PARM_DESC(irq, "IRQ number (5=default)"); 73MODULE_PARM_DESC(irq, "IRQ number (5=default)");
74 74
75static struct input_dev *logibm_dev; 75static struct input_dev *logibm_dev;
diff --git a/drivers/input/touchscreen/mk712.c b/drivers/input/touchscreen/mk712.c
index 36e57deacd03..bd5352824f77 100644
--- a/drivers/input/touchscreen/mk712.c
+++ b/drivers/input/touchscreen/mk712.c
@@ -50,11 +50,11 @@ MODULE_DESCRIPTION("ICS MicroClock MK712 TouchScreen driver");
50MODULE_LICENSE("GPL"); 50MODULE_LICENSE("GPL");
51 51
52static unsigned int mk712_io = 0x260; /* Also 0x200, 0x208, 0x300 */ 52static unsigned int mk712_io = 0x260; /* Also 0x200, 0x208, 0x300 */
53module_param_named(io, mk712_io, uint, 0); 53module_param_hw_named(io, mk712_io, uint, ioport, 0);
54MODULE_PARM_DESC(io, "I/O base address of MK712 touchscreen controller"); 54MODULE_PARM_DESC(io, "I/O base address of MK712 touchscreen controller");
55 55
56static unsigned int mk712_irq = 10; /* Also 12, 14, 15 */ 56static unsigned int mk712_irq = 10; /* Also 12, 14, 15 */
57module_param_named(irq, mk712_irq, uint, 0); 57module_param_hw_named(irq, mk712_irq, uint, irq, 0);
58MODULE_PARM_DESC(irq, "IRQ of MK712 touchscreen controller"); 58MODULE_PARM_DESC(irq, "IRQ of MK712 touchscreen controller");
59 59
60/* eight 8-bit registers */ 60/* eight 8-bit registers */
diff --git a/drivers/isdn/hardware/avm/b1isa.c b/drivers/isdn/hardware/avm/b1isa.c
index 31ef8130a87f..54e871a47387 100644
--- a/drivers/isdn/hardware/avm/b1isa.c
+++ b/drivers/isdn/hardware/avm/b1isa.c
@@ -169,8 +169,8 @@ static struct pci_dev isa_dev[MAX_CARDS];
169static int io[MAX_CARDS]; 169static int io[MAX_CARDS];
170static int irq[MAX_CARDS]; 170static int irq[MAX_CARDS];
171 171
172module_param_array(io, int, NULL, 0); 172module_param_hw_array(io, int, ioport, NULL, 0);
173module_param_array(irq, int, NULL, 0); 173module_param_hw_array(irq, int, irq, NULL, 0);
174MODULE_PARM_DESC(io, "I/O base address(es)"); 174MODULE_PARM_DESC(io, "I/O base address(es)");
175MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); 175MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
176 176
diff --git a/drivers/isdn/hardware/avm/t1isa.c b/drivers/isdn/hardware/avm/t1isa.c
index 72ef18853951..9516203c735f 100644
--- a/drivers/isdn/hardware/avm/t1isa.c
+++ b/drivers/isdn/hardware/avm/t1isa.c
@@ -516,8 +516,8 @@ static int io[MAX_CARDS];
516static int irq[MAX_CARDS]; 516static int irq[MAX_CARDS];
517static int cardnr[MAX_CARDS]; 517static int cardnr[MAX_CARDS];
518 518
519module_param_array(io, int, NULL, 0); 519module_param_hw_array(io, int, ioport, NULL, 0);
520module_param_array(irq, int, NULL, 0); 520module_param_hw_array(irq, int, irq, NULL, 0);
521module_param_array(cardnr, int, NULL, 0); 521module_param_array(cardnr, int, NULL, 0);
522MODULE_PARM_DESC(io, "I/O base address(es)"); 522MODULE_PARM_DESC(io, "I/O base address(es)");
523MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); 523MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c
index 2d12c6ceeb89..c7d68675b028 100644
--- a/drivers/isdn/hisax/config.c
+++ b/drivers/isdn/hisax/config.c
@@ -350,13 +350,13 @@ MODULE_AUTHOR("Karsten Keil");
350MODULE_LICENSE("GPL"); 350MODULE_LICENSE("GPL");
351module_param_array(type, int, NULL, 0); 351module_param_array(type, int, NULL, 0);
352module_param_array(protocol, int, NULL, 0); 352module_param_array(protocol, int, NULL, 0);
353module_param_array(io, int, NULL, 0); 353module_param_hw_array(io, int, ioport, NULL, 0);
354module_param_array(irq, int, NULL, 0); 354module_param_hw_array(irq, int, irq, NULL, 0);
355module_param_array(mem, int, NULL, 0); 355module_param_hw_array(mem, int, iomem, NULL, 0);
356module_param(id, charp, 0); 356module_param(id, charp, 0);
357#ifdef IO0_IO1 357#ifdef IO0_IO1
358module_param_array(io0, int, NULL, 0); 358module_param_hw_array(io0, int, ioport, NULL, 0);
359module_param_array(io1, int, NULL, 0); 359module_param_hw_array(io1, int, ioport, NULL, 0);
360#endif 360#endif
361#endif /* MODULE */ 361#endif /* MODULE */
362 362
diff --git a/drivers/media/pci/zoran/zoran_card.c b/drivers/media/pci/zoran/zoran_card.c
index 5266755add63..4680f001653a 100644
--- a/drivers/media/pci/zoran/zoran_card.c
+++ b/drivers/media/pci/zoran/zoran_card.c
@@ -69,7 +69,7 @@ MODULE_PARM_DESC(card, "Card type");
69 */ 69 */
70 70
71static unsigned long vidmem; /* default = 0 - Video memory base address */ 71static unsigned long vidmem; /* default = 0 - Video memory base address */
72module_param(vidmem, ulong, 0444); 72module_param_hw(vidmem, ulong, iomem, 0444);
73MODULE_PARM_DESC(vidmem, "Default video memory base address"); 73MODULE_PARM_DESC(vidmem, "Default video memory base address");
74 74
75/* 75/*
diff --git a/drivers/media/rc/serial_ir.c b/drivers/media/rc/serial_ir.c
index 2f0a0d248936..77d5d4cbed0a 100644
--- a/drivers/media/rc/serial_ir.c
+++ b/drivers/media/rc/serial_ir.c
@@ -833,11 +833,11 @@ MODULE_LICENSE("GPL");
833module_param(type, int, 0444); 833module_param(type, int, 0444);
834MODULE_PARM_DESC(type, "Hardware type (0 = home-brew, 1 = IRdeo, 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug"); 834MODULE_PARM_DESC(type, "Hardware type (0 = home-brew, 1 = IRdeo, 2 = IRdeo Remote, 3 = AnimaX, 4 = IgorPlug");
835 835
836module_param(io, int, 0444); 836module_param_hw(io, int, ioport, 0444);
837MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)"); 837MODULE_PARM_DESC(io, "I/O address base (0x3f8 or 0x2f8)");
838 838
839/* some architectures (e.g. intel xscale) have memory mapped registers */ 839/* some architectures (e.g. intel xscale) have memory mapped registers */
840module_param(iommap, ulong, 0444); 840module_param_hw(iommap, ulong, other, 0444);
841MODULE_PARM_DESC(iommap, "physical base for memory mapped I/O (0 = no memory mapped io)"); 841MODULE_PARM_DESC(iommap, "physical base for memory mapped I/O (0 = no memory mapped io)");
842 842
843/* 843/*
@@ -845,13 +845,13 @@ MODULE_PARM_DESC(iommap, "physical base for memory mapped I/O (0 = no memory map
845 * on 32bit word boundaries. 845 * on 32bit word boundaries.
846 * See linux-kernel/drivers/tty/serial/8250/8250.c serial_in()/out() 846 * See linux-kernel/drivers/tty/serial/8250/8250.c serial_in()/out()
847 */ 847 */
848module_param(ioshift, int, 0444); 848module_param_hw(ioshift, int, other, 0444);
849MODULE_PARM_DESC(ioshift, "shift I/O register offset (0 = no shift)"); 849MODULE_PARM_DESC(ioshift, "shift I/O register offset (0 = no shift)");
850 850
851module_param(irq, int, 0444); 851module_param_hw(irq, int, irq, 0444);
852MODULE_PARM_DESC(irq, "Interrupt (4 or 3)"); 852MODULE_PARM_DESC(irq, "Interrupt (4 or 3)");
853 853
854module_param(share_irq, bool, 0444); 854module_param_hw(share_irq, bool, other, 0444);
855MODULE_PARM_DESC(share_irq, "Share interrupts (0 = off, 1 = on)"); 855MODULE_PARM_DESC(share_irq, "Share interrupts (0 = off, 1 = on)");
856 856
857module_param(sense, int, 0444); 857module_param(sense, int, 0444);
diff --git a/drivers/misc/dummy-irq.c b/drivers/misc/dummy-irq.c
index acbbe0390be4..76a1015d5783 100644
--- a/drivers/misc/dummy-irq.c
+++ b/drivers/misc/dummy-irq.c
@@ -59,6 +59,6 @@ module_exit(dummy_irq_exit);
59 59
60MODULE_LICENSE("GPL"); 60MODULE_LICENSE("GPL");
61MODULE_AUTHOR("Jiri Kosina"); 61MODULE_AUTHOR("Jiri Kosina");
62module_param(irq, uint, 0444); 62module_param_hw(irq, uint, irq, 0444);
63MODULE_PARM_DESC(irq, "The IRQ to register for"); 63MODULE_PARM_DESC(irq, "The IRQ to register for");
64MODULE_DESCRIPTION("Dummy IRQ handler driver"); 64MODULE_DESCRIPTION("Dummy IRQ handler driver");
diff --git a/drivers/mmc/host/wbsd.c b/drivers/mmc/host/wbsd.c
index bd04e8bae010..e15a9733fcfd 100644
--- a/drivers/mmc/host/wbsd.c
+++ b/drivers/mmc/host/wbsd.c
@@ -2001,11 +2001,11 @@ static void __exit wbsd_drv_exit(void)
2001module_init(wbsd_drv_init); 2001module_init(wbsd_drv_init);
2002module_exit(wbsd_drv_exit); 2002module_exit(wbsd_drv_exit);
2003#ifdef CONFIG_PNP 2003#ifdef CONFIG_PNP
2004module_param_named(nopnp, param_nopnp, uint, 0444); 2004module_param_hw_named(nopnp, param_nopnp, uint, other, 0444);
2005#endif 2005#endif
2006module_param_named(io, param_io, uint, 0444); 2006module_param_hw_named(io, param_io, uint, ioport, 0444);
2007module_param_named(irq, param_irq, uint, 0444); 2007module_param_hw_named(irq, param_irq, uint, irq, 0444);
2008module_param_named(dma, param_dma, int, 0444); 2008module_param_hw_named(dma, param_dma, int, dma, 0444);
2009 2009
2010MODULE_LICENSE("GPL"); 2010MODULE_LICENSE("GPL");
2011MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>"); 2011MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>");
diff --git a/drivers/net/appletalk/cops.c b/drivers/net/appletalk/cops.c
index 1b2e9217ec78..486e1e6997fc 100644
--- a/drivers/net/appletalk/cops.c
+++ b/drivers/net/appletalk/cops.c
@@ -986,9 +986,9 @@ static int cops_close(struct net_device *dev)
986static struct net_device *cops_dev; 986static struct net_device *cops_dev;
987 987
988MODULE_LICENSE("GPL"); 988MODULE_LICENSE("GPL");
989module_param(io, int, 0); 989module_param_hw(io, int, ioport, 0);
990module_param(irq, int, 0); 990module_param_hw(irq, int, irq, 0);
991module_param(board_type, int, 0); 991module_param_hw(board_type, int, other, 0);
992 992
993static int __init cops_module_init(void) 993static int __init cops_module_init(void)
994{ 994{
diff --git a/drivers/net/appletalk/ltpc.c b/drivers/net/appletalk/ltpc.c
index 01e2ac55c137..ac755d2950a6 100644
--- a/drivers/net/appletalk/ltpc.c
+++ b/drivers/net/appletalk/ltpc.c
@@ -1231,9 +1231,9 @@ static struct net_device *dev_ltpc;
1231 1231
1232MODULE_LICENSE("GPL"); 1232MODULE_LICENSE("GPL");
1233module_param(debug, int, 0); 1233module_param(debug, int, 0);
1234module_param(io, int, 0); 1234module_param_hw(io, int, ioport, 0);
1235module_param(irq, int, 0); 1235module_param_hw(irq, int, irq, 0);
1236module_param(dma, int, 0); 1236module_param_hw(dma, int, dma, 0);
1237 1237
1238 1238
1239static int __init ltpc_module_init(void) 1239static int __init ltpc_module_init(void)
diff --git a/drivers/net/arcnet/com20020-isa.c b/drivers/net/arcnet/com20020-isa.c
index b9e9931353b2..38fa60ddaf2e 100644
--- a/drivers/net/arcnet/com20020-isa.c
+++ b/drivers/net/arcnet/com20020-isa.c
@@ -129,8 +129,8 @@ static int clockp = 0;
129static int clockm = 0; 129static int clockm = 0;
130 130
131module_param(node, int, 0); 131module_param(node, int, 0);
132module_param(io, int, 0); 132module_param_hw(io, int, ioport, 0);
133module_param(irq, int, 0); 133module_param_hw(irq, int, irq, 0);
134module_param_string(device, device, sizeof(device), 0); 134module_param_string(device, device, sizeof(device), 0);
135module_param(timeout, int, 0); 135module_param(timeout, int, 0);
136module_param(backplane, int, 0); 136module_param(backplane, int, 0);
diff --git a/drivers/net/arcnet/com90io.c b/drivers/net/arcnet/com90io.c
index b57863df5bf5..4e56aaf2b984 100644
--- a/drivers/net/arcnet/com90io.c
+++ b/drivers/net/arcnet/com90io.c
@@ -347,8 +347,8 @@ static int io; /* use the insmod io= irq= shmem= options */
347static int irq; 347static int irq;
348static char device[9]; /* use eg. device=arc1 to change name */ 348static char device[9]; /* use eg. device=arc1 to change name */
349 349
350module_param(io, int, 0); 350module_param_hw(io, int, ioport, 0);
351module_param(irq, int, 0); 351module_param_hw(irq, int, irq, 0);
352module_param_string(device, device, sizeof(device), 0); 352module_param_string(device, device, sizeof(device), 0);
353MODULE_LICENSE("GPL"); 353MODULE_LICENSE("GPL");
354 354
diff --git a/drivers/net/arcnet/com90xx.c b/drivers/net/arcnet/com90xx.c
index 81f90c4703ae..ca4a57c30bf8 100644
--- a/drivers/net/arcnet/com90xx.c
+++ b/drivers/net/arcnet/com90xx.c
@@ -88,8 +88,8 @@ static int irq;
88static int shmem; 88static int shmem;
89static char device[9]; /* use eg. device=arc1 to change name */ 89static char device[9]; /* use eg. device=arc1 to change name */
90 90
91module_param(io, int, 0); 91module_param_hw(io, int, ioport, 0);
92module_param(irq, int, 0); 92module_param_hw(irq, int, irq, 0);
93module_param(shmem, int, 0); 93module_param(shmem, int, 0);
94module_param_string(device, device, sizeof(device), 0); 94module_param_string(device, device, sizeof(device), 0);
95 95
diff --git a/drivers/net/can/cc770/cc770_isa.c b/drivers/net/can/cc770/cc770_isa.c
index e0d15711e9ac..3a30fd3b4498 100644
--- a/drivers/net/can/cc770/cc770_isa.c
+++ b/drivers/net/can/cc770/cc770_isa.c
@@ -82,16 +82,16 @@ static u8 cor[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff};
82static u8 bcr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff}; 82static u8 bcr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff};
83static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; 83static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1};
84 84
85module_param_array(port, ulong, NULL, S_IRUGO); 85module_param_hw_array(port, ulong, ioport, NULL, S_IRUGO);
86MODULE_PARM_DESC(port, "I/O port number"); 86MODULE_PARM_DESC(port, "I/O port number");
87 87
88module_param_array(mem, ulong, NULL, S_IRUGO); 88module_param_hw_array(mem, ulong, iomem, NULL, S_IRUGO);
89MODULE_PARM_DESC(mem, "I/O memory address"); 89MODULE_PARM_DESC(mem, "I/O memory address");
90 90
91module_param_array(indirect, int, NULL, S_IRUGO); 91module_param_hw_array(indirect, int, ioport, NULL, S_IRUGO);
92MODULE_PARM_DESC(indirect, "Indirect access via address and data port"); 92MODULE_PARM_DESC(indirect, "Indirect access via address and data port");
93 93
94module_param_array(irq, int, NULL, S_IRUGO); 94module_param_hw_array(irq, int, irq, NULL, S_IRUGO);
95MODULE_PARM_DESC(irq, "IRQ number"); 95MODULE_PARM_DESC(irq, "IRQ number");
96 96
97module_param_array(clk, int, NULL, S_IRUGO); 97module_param_array(clk, int, NULL, S_IRUGO);
diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c
index e97e6d35b300..a89c1e92554d 100644
--- a/drivers/net/can/sja1000/sja1000_isa.c
+++ b/drivers/net/can/sja1000/sja1000_isa.c
@@ -48,16 +48,16 @@ static unsigned char ocr[MAXDEV] = {[0 ... (MAXDEV - 1)] = 0xff};
48static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1}; 48static int indirect[MAXDEV] = {[0 ... (MAXDEV - 1)] = -1};
49static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */ 49static spinlock_t indirect_lock[MAXDEV]; /* lock for indirect access mode */
50 50
51module_param_array(port, ulong, NULL, S_IRUGO); 51module_param_hw_array(port, ulong, ioport, NULL, S_IRUGO);
52MODULE_PARM_DESC(port, "I/O port number"); 52MODULE_PARM_DESC(port, "I/O port number");
53 53
54module_param_array(mem, ulong, NULL, S_IRUGO); 54module_param_hw_array(mem, ulong, iomem, NULL, S_IRUGO);
55MODULE_PARM_DESC(mem, "I/O memory address"); 55MODULE_PARM_DESC(mem, "I/O memory address");
56 56
57module_param_array(indirect, int, NULL, S_IRUGO); 57module_param_hw_array(indirect, int, ioport, NULL, S_IRUGO);
58MODULE_PARM_DESC(indirect, "Indirect access via address and data port"); 58MODULE_PARM_DESC(indirect, "Indirect access via address and data port");
59 59
60module_param_array(irq, int, NULL, S_IRUGO); 60module_param_hw_array(irq, int, irq, NULL, S_IRUGO);
61MODULE_PARM_DESC(irq, "IRQ number"); 61MODULE_PARM_DESC(irq, "IRQ number");
62 62
63module_param_array(clk, int, NULL, S_IRUGO); 63module_param_array(clk, int, NULL, S_IRUGO);
diff --git a/drivers/net/ethernet/3com/3c509.c b/drivers/net/ethernet/3com/3c509.c
index c7f9f2c77da7..db8592d412ab 100644
--- a/drivers/net/ethernet/3com/3c509.c
+++ b/drivers/net/ethernet/3com/3c509.c
@@ -1371,7 +1371,7 @@ el3_resume(struct device *pdev)
1371#endif /* CONFIG_PM */ 1371#endif /* CONFIG_PM */
1372 1372
1373module_param(debug,int, 0); 1373module_param(debug,int, 0);
1374module_param_array(irq, int, NULL, 0); 1374module_param_hw_array(irq, int, irq, NULL, 0);
1375module_param(max_interrupt_work, int, 0); 1375module_param(max_interrupt_work, int, 0);
1376MODULE_PARM_DESC(debug, "debug level (0-6)"); 1376MODULE_PARM_DESC(debug, "debug level (0-6)");
1377MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); 1377MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c
index 40196f41768a..e41245a54f8b 100644
--- a/drivers/net/ethernet/3com/3c59x.c
+++ b/drivers/net/ethernet/3com/3c59x.c
@@ -813,8 +813,8 @@ module_param(global_enable_wol, int, 0);
813module_param_array(enable_wol, int, NULL, 0); 813module_param_array(enable_wol, int, NULL, 0);
814module_param(rx_copybreak, int, 0); 814module_param(rx_copybreak, int, 0);
815module_param(max_interrupt_work, int, 0); 815module_param(max_interrupt_work, int, 0);
816module_param(compaq_ioaddr, int, 0); 816module_param_hw(compaq_ioaddr, int, ioport, 0);
817module_param(compaq_irq, int, 0); 817module_param_hw(compaq_irq, int, irq, 0);
818module_param(compaq_device_id, int, 0); 818module_param(compaq_device_id, int, 0);
819module_param(watchdog, int, 0); 819module_param(watchdog, int, 0);
820module_param(global_use_mmio, int, 0); 820module_param(global_use_mmio, int, 0);
diff --git a/drivers/net/ethernet/8390/ne.c b/drivers/net/ethernet/8390/ne.c
index c063b410a163..66f47987e2a2 100644
--- a/drivers/net/ethernet/8390/ne.c
+++ b/drivers/net/ethernet/8390/ne.c
@@ -74,8 +74,8 @@ static int bad[MAX_NE_CARDS];
74static u32 ne_msg_enable; 74static u32 ne_msg_enable;
75 75
76#ifdef MODULE 76#ifdef MODULE
77module_param_array(io, int, NULL, 0); 77module_param_hw_array(io, int, ioport, NULL, 0);
78module_param_array(irq, int, NULL, 0); 78module_param_hw_array(irq, int, irq, NULL, 0);
79module_param_array(bad, int, NULL, 0); 79module_param_array(bad, int, NULL, 0);
80module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); 80module_param_named(msg_enable, ne_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
81MODULE_PARM_DESC(io, "I/O base address(es),required"); 81MODULE_PARM_DESC(io, "I/O base address(es),required");
diff --git a/drivers/net/ethernet/8390/smc-ultra.c b/drivers/net/ethernet/8390/smc-ultra.c
index 364b6514f65f..4e02f6a23575 100644
--- a/drivers/net/ethernet/8390/smc-ultra.c
+++ b/drivers/net/ethernet/8390/smc-ultra.c
@@ -561,8 +561,8 @@ static struct net_device *dev_ultra[MAX_ULTRA_CARDS];
561static int io[MAX_ULTRA_CARDS]; 561static int io[MAX_ULTRA_CARDS];
562static int irq[MAX_ULTRA_CARDS]; 562static int irq[MAX_ULTRA_CARDS];
563 563
564module_param_array(io, int, NULL, 0); 564module_param_hw_array(io, int, ioport, NULL, 0);
565module_param_array(irq, int, NULL, 0); 565module_param_hw_array(irq, int, irq, NULL, 0);
566module_param_named(msg_enable, ultra_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); 566module_param_named(msg_enable, ultra_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
567MODULE_PARM_DESC(io, "I/O base address(es)"); 567MODULE_PARM_DESC(io, "I/O base address(es)");
568MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)"); 568MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
diff --git a/drivers/net/ethernet/8390/wd.c b/drivers/net/ethernet/8390/wd.c
index ad019cbc698f..6efa2722f850 100644
--- a/drivers/net/ethernet/8390/wd.c
+++ b/drivers/net/ethernet/8390/wd.c
@@ -503,10 +503,10 @@ static int irq[MAX_WD_CARDS];
503static int mem[MAX_WD_CARDS]; 503static int mem[MAX_WD_CARDS];
504static int mem_end[MAX_WD_CARDS]; /* for non std. mem size */ 504static int mem_end[MAX_WD_CARDS]; /* for non std. mem size */
505 505
506module_param_array(io, int, NULL, 0); 506module_param_hw_array(io, int, ioport, NULL, 0);
507module_param_array(irq, int, NULL, 0); 507module_param_hw_array(irq, int, irq, NULL, 0);
508module_param_array(mem, int, NULL, 0); 508module_param_hw_array(mem, int, iomem, NULL, 0);
509module_param_array(mem_end, int, NULL, 0); 509module_param_hw_array(mem_end, int, iomem, NULL, 0);
510module_param_named(msg_enable, wd_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH)); 510module_param_named(msg_enable, wd_msg_enable, uint, (S_IRUSR|S_IRGRP|S_IROTH));
511MODULE_PARM_DESC(io, "I/O base address(es)"); 511MODULE_PARM_DESC(io, "I/O base address(es)");
512MODULE_PARM_DESC(irq, "IRQ number(s) (ignored for PureData boards)"); 512MODULE_PARM_DESC(irq, "IRQ number(s) (ignored for PureData boards)");
diff --git a/drivers/net/ethernet/amd/lance.c b/drivers/net/ethernet/amd/lance.c
index 61a641f23149..12a6a93d221b 100644
--- a/drivers/net/ethernet/amd/lance.c
+++ b/drivers/net/ethernet/amd/lance.c
@@ -318,9 +318,9 @@ static int io[MAX_CARDS];
318static int dma[MAX_CARDS]; 318static int dma[MAX_CARDS];
319static int irq[MAX_CARDS]; 319static int irq[MAX_CARDS];
320 320
321module_param_array(io, int, NULL, 0); 321module_param_hw_array(io, int, ioport, NULL, 0);
322module_param_array(dma, int, NULL, 0); 322module_param_hw_array(dma, int, dma, NULL, 0);
323module_param_array(irq, int, NULL, 0); 323module_param_hw_array(irq, int, irq, NULL, 0);
324module_param(lance_debug, int, 0); 324module_param(lance_debug, int, 0);
325MODULE_PARM_DESC(io, "LANCE/PCnet I/O base address(es),required"); 325MODULE_PARM_DESC(io, "LANCE/PCnet I/O base address(es),required");
326MODULE_PARM_DESC(dma, "LANCE/PCnet ISA DMA channel (ignored for some devices)"); 326MODULE_PARM_DESC(dma, "LANCE/PCnet ISA DMA channel (ignored for some devices)");
diff --git a/drivers/net/ethernet/amd/ni65.c b/drivers/net/ethernet/amd/ni65.c
index 5985bf220a8d..e248d1ab3e47 100644
--- a/drivers/net/ethernet/amd/ni65.c
+++ b/drivers/net/ethernet/amd/ni65.c
@@ -1227,9 +1227,9 @@ static void set_multicast_list(struct net_device *dev)
1227#ifdef MODULE 1227#ifdef MODULE
1228static struct net_device *dev_ni65; 1228static struct net_device *dev_ni65;
1229 1229
1230module_param(irq, int, 0); 1230module_param_hw(irq, int, irq, 0);
1231module_param(io, int, 0); 1231module_param_hw(io, int, ioport, 0);
1232module_param(dma, int, 0); 1232module_param_hw(dma, int, dma, 0);
1233MODULE_PARM_DESC(irq, "ni6510 IRQ number (ignored for some cards)"); 1233MODULE_PARM_DESC(irq, "ni6510 IRQ number (ignored for some cards)");
1234MODULE_PARM_DESC(io, "ni6510 I/O base address"); 1234MODULE_PARM_DESC(io, "ni6510 I/O base address");
1235MODULE_PARM_DESC(dma, "ni6510 ISA DMA channel (ignored for some cards)"); 1235MODULE_PARM_DESC(dma, "ni6510 ISA DMA channel (ignored for some cards)");
diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c
index 47384f7323ac..da5b58b853e2 100644
--- a/drivers/net/ethernet/cirrus/cs89x0.c
+++ b/drivers/net/ethernet/cirrus/cs89x0.c
@@ -1704,12 +1704,12 @@ static int use_dma; /* These generate unused var warnings if ALLOW_DMA = 0 */
1704static int dma; 1704static int dma;
1705static int dmasize = 16; /* or 64 */ 1705static int dmasize = 16; /* or 64 */
1706 1706
1707module_param(io, int, 0); 1707module_param_hw(io, int, ioport, 0);
1708module_param(irq, int, 0); 1708module_param_hw(irq, int, irq, 0);
1709module_param(debug, int, 0); 1709module_param(debug, int, 0);
1710module_param_string(media, media, sizeof(media), 0); 1710module_param_string(media, media, sizeof(media), 0);
1711module_param(duplex, int, 0); 1711module_param(duplex, int, 0);
1712module_param(dma , int, 0); 1712module_param_hw(dma , int, dma, 0);
1713module_param(dmasize , int, 0); 1713module_param(dmasize , int, 0);
1714module_param(use_dma , int, 0); 1714module_param(use_dma , int, 0);
1715MODULE_PARM_DESC(io, "cs89x0 I/O base address"); 1715MODULE_PARM_DESC(io, "cs89x0 I/O base address");
diff --git a/drivers/net/ethernet/dec/tulip/de4x5.c b/drivers/net/ethernet/dec/tulip/de4x5.c
index df4a871df633..fd6bcf024729 100644
--- a/drivers/net/ethernet/dec/tulip/de4x5.c
+++ b/drivers/net/ethernet/dec/tulip/de4x5.c
@@ -1015,7 +1015,7 @@ static int compact_infoblock(struct net_device *dev, u_char count, u_char *p
1015 1015
1016static int io=0x0;/* EDIT THIS LINE FOR YOUR CONFIGURATION IF NEEDED */ 1016static int io=0x0;/* EDIT THIS LINE FOR YOUR CONFIGURATION IF NEEDED */
1017 1017
1018module_param(io, int, 0); 1018module_param_hw(io, int, ioport, 0);
1019module_param(de4x5_debug, int, 0); 1019module_param(de4x5_debug, int, 0);
1020module_param(dec_only, int, 0); 1020module_param(dec_only, int, 0);
1021module_param(args, charp, 0); 1021module_param(args, charp, 0);
diff --git a/drivers/net/ethernet/hp/hp100.c b/drivers/net/ethernet/hp/hp100.c
index 1a31bee6e728..5673b071e39d 100644
--- a/drivers/net/ethernet/hp/hp100.c
+++ b/drivers/net/ethernet/hp/hp100.c
@@ -2966,7 +2966,7 @@ MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adap
2966#define HP100_DEVICES 5 2966#define HP100_DEVICES 5
2967/* Parameters set by insmod */ 2967/* Parameters set by insmod */
2968static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 }; 2968static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 };
2969module_param_array(hp100_port, int, NULL, 0); 2969module_param_hw_array(hp100_port, int, ioport, NULL, 0);
2970 2970
2971/* List of devices */ 2971/* List of devices */
2972static struct net_device *hp100_devlist[HP100_DEVICES]; 2972static struct net_device *hp100_devlist[HP100_DEVICES];
diff --git a/drivers/net/ethernet/realtek/atp.c b/drivers/net/ethernet/realtek/atp.c
index 9bcd4aefc9c5..bed34684994f 100644
--- a/drivers/net/ethernet/realtek/atp.c
+++ b/drivers/net/ethernet/realtek/atp.c
@@ -151,8 +151,8 @@ MODULE_LICENSE("GPL");
151 151
152module_param(max_interrupt_work, int, 0); 152module_param(max_interrupt_work, int, 0);
153module_param(debug, int, 0); 153module_param(debug, int, 0);
154module_param_array(io, int, NULL, 0); 154module_param_hw_array(io, int, ioport, NULL, 0);
155module_param_array(irq, int, NULL, 0); 155module_param_hw_array(irq, int, irq, NULL, 0);
156module_param_array(xcvr, int, NULL, 0); 156module_param_array(xcvr, int, NULL, 0);
157MODULE_PARM_DESC(max_interrupt_work, "ATP maximum events handled per interrupt"); 157MODULE_PARM_DESC(max_interrupt_work, "ATP maximum events handled per interrupt");
158MODULE_PARM_DESC(debug, "ATP debug level (0-7)"); 158MODULE_PARM_DESC(debug, "ATP debug level (0-7)");
diff --git a/drivers/net/ethernet/smsc/smc9194.c b/drivers/net/ethernet/smsc/smc9194.c
index c8d84679ede7..d3bb2ba51f40 100644
--- a/drivers/net/ethernet/smsc/smc9194.c
+++ b/drivers/net/ethernet/smsc/smc9194.c
@@ -1501,8 +1501,8 @@ static void smc_set_multicast_list(struct net_device *dev)
1501static struct net_device *devSMC9194; 1501static struct net_device *devSMC9194;
1502MODULE_LICENSE("GPL"); 1502MODULE_LICENSE("GPL");
1503 1503
1504module_param(io, int, 0); 1504module_param_hw(io, int, ioport, 0);
1505module_param(irq, int, 0); 1505module_param_hw(irq, int, irq, 0);
1506module_param(ifport, int, 0); 1506module_param(ifport, int, 0);
1507MODULE_PARM_DESC(io, "SMC 99194 I/O base address"); 1507MODULE_PARM_DESC(io, "SMC 99194 I/O base address");
1508MODULE_PARM_DESC(irq, "SMC 99194 IRQ number"); 1508MODULE_PARM_DESC(irq, "SMC 99194 IRQ number");
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
index 594fa1407e29..1503f10122f7 100644
--- a/drivers/net/hamradio/baycom_epp.c
+++ b/drivers/net/hamradio/baycom_epp.c
@@ -1176,7 +1176,7 @@ static int iobase[NR_PORTS] = { 0x378, };
1176 1176
1177module_param_array(mode, charp, NULL, 0); 1177module_param_array(mode, charp, NULL, 0);
1178MODULE_PARM_DESC(mode, "baycom operating mode"); 1178MODULE_PARM_DESC(mode, "baycom operating mode");
1179module_param_array(iobase, int, NULL, 0); 1179module_param_hw_array(iobase, int, ioport, NULL, 0);
1180MODULE_PARM_DESC(iobase, "baycom io base address"); 1180MODULE_PARM_DESC(iobase, "baycom io base address");
1181 1181
1182MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu"); 1182MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
diff --git a/drivers/net/hamradio/baycom_par.c b/drivers/net/hamradio/baycom_par.c
index 809dc25909d1..92b13b39f426 100644
--- a/drivers/net/hamradio/baycom_par.c
+++ b/drivers/net/hamradio/baycom_par.c
@@ -481,7 +481,7 @@ static int iobase[NR_PORTS] = { 0x378, };
481 481
482module_param_array(mode, charp, NULL, 0); 482module_param_array(mode, charp, NULL, 0);
483MODULE_PARM_DESC(mode, "baycom operating mode; eg. par96 or picpar"); 483MODULE_PARM_DESC(mode, "baycom operating mode; eg. par96 or picpar");
484module_param_array(iobase, int, NULL, 0); 484module_param_hw_array(iobase, int, ioport, NULL, 0);
485MODULE_PARM_DESC(iobase, "baycom io base address"); 485MODULE_PARM_DESC(iobase, "baycom io base address");
486 486
487MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu"); 487MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
diff --git a/drivers/net/hamradio/baycom_ser_fdx.c b/drivers/net/hamradio/baycom_ser_fdx.c
index ebc06822fd4d..d9a646acca20 100644
--- a/drivers/net/hamradio/baycom_ser_fdx.c
+++ b/drivers/net/hamradio/baycom_ser_fdx.c
@@ -614,9 +614,9 @@ static int baud[NR_PORTS] = { [0 ... NR_PORTS-1] = 1200 };
614 614
615module_param_array(mode, charp, NULL, 0); 615module_param_array(mode, charp, NULL, 0);
616MODULE_PARM_DESC(mode, "baycom operating mode; * for software DCD"); 616MODULE_PARM_DESC(mode, "baycom operating mode; * for software DCD");
617module_param_array(iobase, int, NULL, 0); 617module_param_hw_array(iobase, int, ioport, NULL, 0);
618MODULE_PARM_DESC(iobase, "baycom io base address"); 618MODULE_PARM_DESC(iobase, "baycom io base address");
619module_param_array(irq, int, NULL, 0); 619module_param_hw_array(irq, int, irq, NULL, 0);
620MODULE_PARM_DESC(irq, "baycom irq number"); 620MODULE_PARM_DESC(irq, "baycom irq number");
621module_param_array(baud, int, NULL, 0); 621module_param_array(baud, int, NULL, 0);
622MODULE_PARM_DESC(baud, "baycom baud rate (300 to 4800)"); 622MODULE_PARM_DESC(baud, "baycom baud rate (300 to 4800)");
diff --git a/drivers/net/hamradio/baycom_ser_hdx.c b/drivers/net/hamradio/baycom_ser_hdx.c
index 60fcf512c208..f1c8a9ff3891 100644
--- a/drivers/net/hamradio/baycom_ser_hdx.c
+++ b/drivers/net/hamradio/baycom_ser_hdx.c
@@ -642,9 +642,9 @@ static int irq[NR_PORTS] = { 4, };
642 642
643module_param_array(mode, charp, NULL, 0); 643module_param_array(mode, charp, NULL, 0);
644MODULE_PARM_DESC(mode, "baycom operating mode; * for software DCD"); 644MODULE_PARM_DESC(mode, "baycom operating mode; * for software DCD");
645module_param_array(iobase, int, NULL, 0); 645module_param_hw_array(iobase, int, ioport, NULL, 0);
646MODULE_PARM_DESC(iobase, "baycom io base address"); 646MODULE_PARM_DESC(iobase, "baycom io base address");
647module_param_array(irq, int, NULL, 0); 647module_param_hw_array(irq, int, irq, NULL, 0);
648MODULE_PARM_DESC(irq, "baycom irq number"); 648MODULE_PARM_DESC(irq, "baycom irq number");
649 649
650MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu"); 650MODULE_AUTHOR("Thomas M. Sailer, sailer@ife.ee.ethz.ch, hb9jnx@hb9w.che.eu");
diff --git a/drivers/net/hamradio/dmascc.c b/drivers/net/hamradio/dmascc.c
index 2479072981a1..dec6b76bc0fb 100644
--- a/drivers/net/hamradio/dmascc.c
+++ b/drivers/net/hamradio/dmascc.c
@@ -274,7 +274,7 @@ static unsigned long rand;
274 274
275MODULE_AUTHOR("Klaus Kudielka"); 275MODULE_AUTHOR("Klaus Kudielka");
276MODULE_DESCRIPTION("Driver for high-speed SCC boards"); 276MODULE_DESCRIPTION("Driver for high-speed SCC boards");
277module_param_array(io, int, NULL, 0); 277module_param_hw_array(io, int, ioport, NULL, 0);
278MODULE_LICENSE("GPL"); 278MODULE_LICENSE("GPL");
279 279
280static void __exit dmascc_exit(void) 280static void __exit dmascc_exit(void)
diff --git a/drivers/net/irda/ali-ircc.c b/drivers/net/irda/ali-ircc.c
index c285eafd3f1c..35f198d83701 100644
--- a/drivers/net/irda/ali-ircc.c
+++ b/drivers/net/irda/ali-ircc.c
@@ -2207,11 +2207,11 @@ MODULE_LICENSE("GPL");
2207MODULE_ALIAS("platform:" ALI_IRCC_DRIVER_NAME); 2207MODULE_ALIAS("platform:" ALI_IRCC_DRIVER_NAME);
2208 2208
2209 2209
2210module_param_array(io, int, NULL, 0); 2210module_param_hw_array(io, int, ioport, NULL, 0);
2211MODULE_PARM_DESC(io, "Base I/O addresses"); 2211MODULE_PARM_DESC(io, "Base I/O addresses");
2212module_param_array(irq, int, NULL, 0); 2212module_param_hw_array(irq, int, irq, NULL, 0);
2213MODULE_PARM_DESC(irq, "IRQ lines"); 2213MODULE_PARM_DESC(irq, "IRQ lines");
2214module_param_array(dma, int, NULL, 0); 2214module_param_hw_array(dma, int, dma, NULL, 0);
2215MODULE_PARM_DESC(dma, "DMA channels"); 2215MODULE_PARM_DESC(dma, "DMA channels");
2216 2216
2217module_init(ali_ircc_init); 2217module_init(ali_ircc_init);
diff --git a/drivers/net/irda/nsc-ircc.c b/drivers/net/irda/nsc-ircc.c
index aaecc3baaf30..7beae147be11 100644
--- a/drivers/net/irda/nsc-ircc.c
+++ b/drivers/net/irda/nsc-ircc.c
@@ -2396,11 +2396,11 @@ MODULE_LICENSE("GPL");
2396 2396
2397module_param(qos_mtt_bits, int, 0); 2397module_param(qos_mtt_bits, int, 0);
2398MODULE_PARM_DESC(qos_mtt_bits, "Minimum Turn Time"); 2398MODULE_PARM_DESC(qos_mtt_bits, "Minimum Turn Time");
2399module_param_array(io, int, NULL, 0); 2399module_param_hw_array(io, int, ioport, NULL, 0);
2400MODULE_PARM_DESC(io, "Base I/O addresses"); 2400MODULE_PARM_DESC(io, "Base I/O addresses");
2401module_param_array(irq, int, NULL, 0); 2401module_param_hw_array(irq, int, irq, NULL, 0);
2402MODULE_PARM_DESC(irq, "IRQ lines"); 2402MODULE_PARM_DESC(irq, "IRQ lines");
2403module_param_array(dma, int, NULL, 0); 2403module_param_hw_array(dma, int, dma, NULL, 0);
2404MODULE_PARM_DESC(dma, "DMA channels"); 2404MODULE_PARM_DESC(dma, "DMA channels");
2405module_param(dongle_id, int, 0); 2405module_param(dongle_id, int, 0);
2406MODULE_PARM_DESC(dongle_id, "Type-id of used dongle"); 2406MODULE_PARM_DESC(dongle_id, "Type-id of used dongle");
diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c
index dcf92ba80872..23ed89ae5ddc 100644
--- a/drivers/net/irda/smsc-ircc2.c
+++ b/drivers/net/irda/smsc-ircc2.c
@@ -82,24 +82,24 @@ MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings, defaults
82 82
83#define DMA_INVAL 255 83#define DMA_INVAL 255
84static int ircc_dma = DMA_INVAL; 84static int ircc_dma = DMA_INVAL;
85module_param(ircc_dma, int, 0); 85module_param_hw(ircc_dma, int, dma, 0);
86MODULE_PARM_DESC(ircc_dma, "DMA channel"); 86MODULE_PARM_DESC(ircc_dma, "DMA channel");
87 87
88#define IRQ_INVAL 255 88#define IRQ_INVAL 255
89static int ircc_irq = IRQ_INVAL; 89static int ircc_irq = IRQ_INVAL;
90module_param(ircc_irq, int, 0); 90module_param_hw(ircc_irq, int, irq, 0);
91MODULE_PARM_DESC(ircc_irq, "IRQ line"); 91MODULE_PARM_DESC(ircc_irq, "IRQ line");
92 92
93static int ircc_fir; 93static int ircc_fir;
94module_param(ircc_fir, int, 0); 94module_param_hw(ircc_fir, int, ioport, 0);
95MODULE_PARM_DESC(ircc_fir, "FIR Base Address"); 95MODULE_PARM_DESC(ircc_fir, "FIR Base Address");
96 96
97static int ircc_sir; 97static int ircc_sir;
98module_param(ircc_sir, int, 0); 98module_param_hw(ircc_sir, int, ioport, 0);
99MODULE_PARM_DESC(ircc_sir, "SIR Base Address"); 99MODULE_PARM_DESC(ircc_sir, "SIR Base Address");
100 100
101static int ircc_cfg; 101static int ircc_cfg;
102module_param(ircc_cfg, int, 0); 102module_param_hw(ircc_cfg, int, ioport, 0);
103MODULE_PARM_DESC(ircc_cfg, "Configuration register base address"); 103MODULE_PARM_DESC(ircc_cfg, "Configuration register base address");
104 104
105static int ircc_transceiver; 105static int ircc_transceiver;
diff --git a/drivers/net/irda/w83977af_ir.c b/drivers/net/irda/w83977af_ir.c
index 8d5b903d1d9d..282b6c9ae05b 100644
--- a/drivers/net/irda/w83977af_ir.c
+++ b/drivers/net/irda/w83977af_ir.c
@@ -1263,9 +1263,9 @@ MODULE_LICENSE("GPL");
1263 1263
1264module_param(qos_mtt_bits, int, 0); 1264module_param(qos_mtt_bits, int, 0);
1265MODULE_PARM_DESC(qos_mtt_bits, "Mimimum Turn Time"); 1265MODULE_PARM_DESC(qos_mtt_bits, "Mimimum Turn Time");
1266module_param_array(io, int, NULL, 0); 1266module_param_hw_array(io, int, ioport, NULL, 0);
1267MODULE_PARM_DESC(io, "Base I/O addresses"); 1267MODULE_PARM_DESC(io, "Base I/O addresses");
1268module_param_array(irq, int, NULL, 0); 1268module_param_hw_array(irq, int, irq, NULL, 0);
1269MODULE_PARM_DESC(irq, "IRQ lines"); 1269MODULE_PARM_DESC(irq, "IRQ lines");
1270 1270
1271/* 1271/*
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
index 4ca71bca39ac..6ea16260ec76 100644
--- a/drivers/net/wan/cosa.c
+++ b/drivers/net/wan/cosa.c
@@ -232,11 +232,11 @@ static int irq[MAX_CARDS+1] = { -1, -1, -1, -1, -1, -1, 0, };
232static struct class *cosa_class; 232static struct class *cosa_class;
233 233
234#ifdef MODULE 234#ifdef MODULE
235module_param_array(io, int, NULL, 0); 235module_param_hw_array(io, int, ioport, NULL, 0);
236MODULE_PARM_DESC(io, "The I/O bases of the COSA or SRP cards"); 236MODULE_PARM_DESC(io, "The I/O bases of the COSA or SRP cards");
237module_param_array(irq, int, NULL, 0); 237module_param_hw_array(irq, int, irq, NULL, 0);
238MODULE_PARM_DESC(irq, "The IRQ lines of the COSA or SRP cards"); 238MODULE_PARM_DESC(irq, "The IRQ lines of the COSA or SRP cards");
239module_param_array(dma, int, NULL, 0); 239module_param_hw_array(dma, int, dma, NULL, 0);
240MODULE_PARM_DESC(dma, "The DMA channels of the COSA or SRP cards"); 240MODULE_PARM_DESC(dma, "The DMA channels of the COSA or SRP cards");
241 241
242MODULE_AUTHOR("Jan \"Yenya\" Kasprzak, <kas@fi.muni.cz>"); 242MODULE_AUTHOR("Jan \"Yenya\" Kasprzak, <kas@fi.muni.cz>");
diff --git a/drivers/net/wan/hostess_sv11.c b/drivers/net/wan/hostess_sv11.c
index dd6bb3364ad2..4de0737fbf8a 100644
--- a/drivers/net/wan/hostess_sv11.c
+++ b/drivers/net/wan/hostess_sv11.c
@@ -324,11 +324,11 @@ static void sv11_shutdown(struct z8530_dev *dev)
324static int io = 0x200; 324static int io = 0x200;
325static int irq = 9; 325static int irq = 9;
326 326
327module_param(io, int, 0); 327module_param_hw(io, int, ioport, 0);
328MODULE_PARM_DESC(io, "The I/O base of the Comtrol Hostess SV11 card"); 328MODULE_PARM_DESC(io, "The I/O base of the Comtrol Hostess SV11 card");
329module_param(dma, int, 0); 329module_param_hw(dma, int, dma, 0);
330MODULE_PARM_DESC(dma, "Set this to 1 to use DMA1/DMA3 for TX/RX"); 330MODULE_PARM_DESC(dma, "Set this to 1 to use DMA1/DMA3 for TX/RX");
331module_param(irq, int, 0); 331module_param_hw(irq, int, irq, 0);
332MODULE_PARM_DESC(irq, "The interrupt line setting for the Comtrol Hostess SV11 card"); 332MODULE_PARM_DESC(irq, "The interrupt line setting for the Comtrol Hostess SV11 card");
333 333
334MODULE_AUTHOR("Alan Cox"); 334MODULE_AUTHOR("Alan Cox");
diff --git a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c
index 3ca3419c54a0..bde8c0339831 100644
--- a/drivers/net/wan/sbni.c
+++ b/drivers/net/wan/sbni.c
@@ -1463,8 +1463,8 @@ set_multicast_list( struct net_device *dev )
1463 1463
1464 1464
1465#ifdef MODULE 1465#ifdef MODULE
1466module_param_array(io, int, NULL, 0); 1466module_param_hw_array(io, int, ioport, NULL, 0);
1467module_param_array(irq, int, NULL, 0); 1467module_param_hw_array(irq, int, irq, NULL, 0);
1468module_param_array(baud, int, NULL, 0); 1468module_param_array(baud, int, NULL, 0);
1469module_param_array(rxl, int, NULL, 0); 1469module_param_array(rxl, int, NULL, 0);
1470module_param_array(mac, int, NULL, 0); 1470module_param_array(mac, int, NULL, 0);
diff --git a/drivers/net/wan/sealevel.c b/drivers/net/wan/sealevel.c
index fbb5aa2c4d8f..c56f2c252113 100644
--- a/drivers/net/wan/sealevel.c
+++ b/drivers/net/wan/sealevel.c
@@ -363,13 +363,13 @@ static int rxdma=3;
363static int irq=5; 363static int irq=5;
364static bool slow=false; 364static bool slow=false;
365 365
366module_param(io, int, 0); 366module_param_hw(io, int, ioport, 0);
367MODULE_PARM_DESC(io, "The I/O base of the Sealevel card"); 367MODULE_PARM_DESC(io, "The I/O base of the Sealevel card");
368module_param(txdma, int, 0); 368module_param_hw(txdma, int, dma, 0);
369MODULE_PARM_DESC(txdma, "Transmit DMA channel"); 369MODULE_PARM_DESC(txdma, "Transmit DMA channel");
370module_param(rxdma, int, 0); 370module_param_hw(rxdma, int, dma, 0);
371MODULE_PARM_DESC(rxdma, "Receive DMA channel"); 371MODULE_PARM_DESC(rxdma, "Receive DMA channel");
372module_param(irq, int, 0); 372module_param_hw(irq, int, irq, 0);
373MODULE_PARM_DESC(irq, "The interrupt line setting for the SeaLevel card"); 373MODULE_PARM_DESC(irq, "The interrupt line setting for the SeaLevel card");
374module_param(slow, bool, 0); 374module_param(slow, bool, 0);
375MODULE_PARM_DESC(slow, "Set this for an older Sealevel card such as the 4012"); 375MODULE_PARM_DESC(slow, "Set this for an older Sealevel card such as the 4012");
diff --git a/drivers/net/wireless/cisco/airo.c b/drivers/net/wireless/cisco/airo.c
index 4b040451a9b8..1b7e125a28e2 100644
--- a/drivers/net/wireless/cisco/airo.c
+++ b/drivers/net/wireless/cisco/airo.c
@@ -246,8 +246,8 @@ MODULE_DESCRIPTION("Support for Cisco/Aironet 802.11 wireless ethernet cards. "
246 "Direct support for ISA/PCI/MPI cards and support for PCMCIA when used with airo_cs."); 246 "Direct support for ISA/PCI/MPI cards and support for PCMCIA when used with airo_cs.");
247MODULE_LICENSE("Dual BSD/GPL"); 247MODULE_LICENSE("Dual BSD/GPL");
248MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340/350"); 248MODULE_SUPPORTED_DEVICE("Aironet 4500, 4800 and Cisco 340/350");
249module_param_array(io, int, NULL, 0); 249module_param_hw_array(io, int, ioport, NULL, 0);
250module_param_array(irq, int, NULL, 0); 250module_param_hw_array(irq, int, irq, NULL, 0);
251module_param_array(rates, int, NULL, 0); 251module_param_array(rates, int, NULL, 0);
252module_param_array(ssids, charp, NULL, 0); 252module_param_array(ssids, charp, NULL, 0);
253module_param(auto_wep, int, 0); 253module_param(auto_wep, int, 0);
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index 9d42dfe65d44..5548193a28a6 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -3150,13 +3150,13 @@ static char *irq[PARPORT_PC_MAX_PORTS];
3150static char *dma[PARPORT_PC_MAX_PORTS]; 3150static char *dma[PARPORT_PC_MAX_PORTS];
3151 3151
3152MODULE_PARM_DESC(io, "Base I/O address (SPP regs)"); 3152MODULE_PARM_DESC(io, "Base I/O address (SPP regs)");
3153module_param_array(io, int, NULL, 0); 3153module_param_hw_array(io, int, ioport, NULL, 0);
3154MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)"); 3154MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)");
3155module_param_array(io_hi, int, NULL, 0); 3155module_param_hw_array(io_hi, int, ioport, NULL, 0);
3156MODULE_PARM_DESC(irq, "IRQ line"); 3156MODULE_PARM_DESC(irq, "IRQ line");
3157module_param_array(irq, charp, NULL, 0); 3157module_param_hw_array(irq, charp, irq, NULL, 0);
3158MODULE_PARM_DESC(dma, "DMA channel"); 3158MODULE_PARM_DESC(dma, "DMA channel");
3159module_param_array(dma, charp, NULL, 0); 3159module_param_hw_array(dma, charp, dma, NULL, 0);
3160#if defined(CONFIG_PARPORT_PC_SUPERIO) || \ 3160#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
3161 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO)) 3161 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
3162MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation"); 3162MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c
index 88a44a707b96..bbf9cf8aeaad 100644
--- a/drivers/pci/hotplug/cpcihp_generic.c
+++ b/drivers/pci/hotplug/cpcihp_generic.c
@@ -220,7 +220,7 @@ module_param(first_slot, byte, 0);
220MODULE_PARM_DESC(first_slot, "Hotswap bus first slot number"); 220MODULE_PARM_DESC(first_slot, "Hotswap bus first slot number");
221module_param(last_slot, byte, 0); 221module_param(last_slot, byte, 0);
222MODULE_PARM_DESC(last_slot, "Hotswap bus last slot number"); 222MODULE_PARM_DESC(last_slot, "Hotswap bus last slot number");
223module_param(port, ushort, 0); 223module_param_hw(port, ushort, ioport, 0);
224MODULE_PARM_DESC(port, "#ENUM signal I/O port"); 224MODULE_PARM_DESC(port, "#ENUM signal I/O port");
225module_param(enum_bit, uint, 0); 225module_param(enum_bit, uint, 0);
226MODULE_PARM_DESC(enum_bit, "#ENUM signal bit (0-7)"); 226MODULE_PARM_DESC(enum_bit, "#ENUM signal bit (0-7)");
diff --git a/drivers/pcmcia/i82365.c b/drivers/pcmcia/i82365.c
index eb0d80a429e4..fb38cc01859f 100644
--- a/drivers/pcmcia/i82365.c
+++ b/drivers/pcmcia/i82365.c
@@ -108,12 +108,12 @@ static int async_clock = -1;
108static int cable_mode = -1; 108static int cable_mode = -1;
109static int wakeup = 0; 109static int wakeup = 0;
110 110
111module_param(i365_base, ulong, 0444); 111module_param_hw(i365_base, ulong, ioport, 0444);
112module_param(ignore, int, 0444); 112module_param(ignore, int, 0444);
113module_param(extra_sockets, int, 0444); 113module_param(extra_sockets, int, 0444);
114module_param(irq_mask, int, 0444); 114module_param_hw(irq_mask, int, other, 0444);
115module_param_array(irq_list, int, &irq_list_count, 0444); 115module_param_hw_array(irq_list, int, irq, &irq_list_count, 0444);
116module_param(cs_irq, int, 0444); 116module_param_hw(cs_irq, int, irq, 0444);
117module_param(async_clock, int, 0444); 117module_param(async_clock, int, 0444);
118module_param(cable_mode, int, 0444); 118module_param(cable_mode, int, 0444);
119module_param(wakeup, int, 0444); 119module_param(wakeup, int, 0444);
diff --git a/drivers/pcmcia/tcic.c b/drivers/pcmcia/tcic.c
index 1ee63e5f0550..a1ac72d51d70 100644
--- a/drivers/pcmcia/tcic.c
+++ b/drivers/pcmcia/tcic.c
@@ -85,12 +85,12 @@ static int poll_quick = HZ/20;
85/* CCLK external clock time, in nanoseconds. 70 ns = 14.31818 MHz */ 85/* CCLK external clock time, in nanoseconds. 70 ns = 14.31818 MHz */
86static int cycle_time = 70; 86static int cycle_time = 70;
87 87
88module_param(tcic_base, ulong, 0444); 88module_param_hw(tcic_base, ulong, ioport, 0444);
89module_param(ignore, int, 0444); 89module_param(ignore, int, 0444);
90module_param(do_scan, int, 0444); 90module_param(do_scan, int, 0444);
91module_param(irq_mask, int, 0444); 91module_param_hw(irq_mask, int, other, 0444);
92module_param_array(irq_list, int, &irq_list_count, 0444); 92module_param_hw_array(irq_list, int, irq, &irq_list_count, 0444);
93module_param(cs_irq, int, 0444); 93module_param_hw(cs_irq, int, irq, 0444);
94module_param(poll_interval, int, 0444); 94module_param(poll_interval, int, 0444);
95module_param(poll_quick, int, 0444); 95module_param(poll_quick, int, 0444);
96module_param(cycle_time, int, 0444); 96module_param(cycle_time, int, 0444);
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index f44d0487236e..ce5dc73d85bb 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -331,11 +331,11 @@ MODULE_LICENSE("GPL");
331#if !defined(PCMCIA) 331#if !defined(PCMCIA)
332#if defined(MODULE) 332#if defined(MODULE)
333static int io[] = {0, 0}; 333static int io[] = {0, 0};
334module_param_array(io, int, NULL, 0); 334module_param_hw_array(io, int, ioport, NULL, 0);
335MODULE_PARM_DESC(io,"base io address of controller"); 335MODULE_PARM_DESC(io,"base io address of controller");
336 336
337static int irq[] = {0, 0}; 337static int irq[] = {0, 0};
338module_param_array(irq, int, NULL, 0); 338module_param_hw_array(irq, int, irq, NULL, 0);
339MODULE_PARM_DESC(irq,"interrupt for controller"); 339MODULE_PARM_DESC(irq,"interrupt for controller");
340 340
341static int scsiid[] = {7, 7}; 341static int scsiid[] = {7, 7};
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index 7db448ec8beb..a23cc9ac5acd 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -31,7 +31,7 @@ module_param(isapnp, bool, 0);
31MODULE_PARM_DESC(isapnp, "enable PnP support (default=1)"); 31MODULE_PARM_DESC(isapnp, "enable PnP support (default=1)");
32 32
33static int io[MAXBOARDS] = { 0x330, 0x334, 0, 0 }; 33static int io[MAXBOARDS] = { 0x330, 0x334, 0, 0 };
34module_param_array(io, int, NULL, 0); 34module_param_hw_array(io, int, ioport, NULL, 0);
35MODULE_PARM_DESC(io, "base IO address of controller (0x130,0x134,0x230,0x234,0x330,0x334, default=0x330,0x334)"); 35MODULE_PARM_DESC(io, "base IO address of controller (0x130,0x134,0x230,0x234,0x330,0x334, default=0x330,0x334)");
36 36
37/* time AHA spends on the AT-bus during data transfer */ 37/* time AHA spends on the AT-bus during data transfer */
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index 67c8dac321ad..c34fc91ba486 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -85,8 +85,8 @@ static int ncr_53c400;
85static int ncr_53c400a; 85static int ncr_53c400a;
86static int dtc_3181e; 86static int dtc_3181e;
87static int hp_c2502; 87static int hp_c2502;
88module_param(ncr_irq, int, 0); 88module_param_hw(ncr_irq, int, irq, 0);
89module_param(ncr_addr, int, 0); 89module_param_hw(ncr_addr, int, ioport, 0);
90module_param(ncr_5380, int, 0); 90module_param(ncr_5380, int, 0);
91module_param(ncr_53c400, int, 0); 91module_param(ncr_53c400, int, 0);
92module_param(ncr_53c400a, int, 0); 92module_param(ncr_53c400a, int, 0);
@@ -94,11 +94,11 @@ module_param(dtc_3181e, int, 0);
94module_param(hp_c2502, int, 0); 94module_param(hp_c2502, int, 0);
95 95
96static int irq[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; 96static int irq[] = { -1, -1, -1, -1, -1, -1, -1, -1 };
97module_param_array(irq, int, NULL, 0); 97module_param_hw_array(irq, int, irq, NULL, 0);
98MODULE_PARM_DESC(irq, "IRQ number(s) (0=none, 254=auto [default])"); 98MODULE_PARM_DESC(irq, "IRQ number(s) (0=none, 254=auto [default])");
99 99
100static int base[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; 100static int base[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
101module_param_array(base, int, NULL, 0); 101module_param_hw_array(base, int, ioport, NULL, 0);
102MODULE_PARM_DESC(base, "base address(es)"); 102MODULE_PARM_DESC(base, "base address(es)");
103 103
104static int card[] = { -1, -1, -1, -1, -1, -1, -1, -1 }; 104static int card[] = { -1, -1, -1, -1, -1, -1, -1, -1 };
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
index d020a13646ae..facc7271f932 100644
--- a/drivers/scsi/gdth.c
+++ b/drivers/scsi/gdth.c
@@ -353,7 +353,7 @@ static int probe_eisa_isa = 0;
353static int force_dma32 = 0; 353static int force_dma32 = 0;
354 354
355/* parameters for modprobe/insmod */ 355/* parameters for modprobe/insmod */
356module_param_array(irq, int, NULL, 0); 356module_param_hw_array(irq, int, irq, NULL, 0);
357module_param(disable, int, 0); 357module_param(disable, int, 0);
358module_param(reserve_mode, int, 0); 358module_param(reserve_mode, int, 0);
359module_param_array(reserve_list, int, NULL, 0); 359module_param_array(reserve_list, int, NULL, 0);
diff --git a/drivers/scsi/qlogicfas.c b/drivers/scsi/qlogicfas.c
index 61cac87fb86f..840823b99e51 100644
--- a/drivers/scsi/qlogicfas.c
+++ b/drivers/scsi/qlogicfas.c
@@ -137,8 +137,8 @@ err:
137static struct qlogicfas408_priv *cards; 137static struct qlogicfas408_priv *cards;
138static int iobase[MAX_QLOGICFAS]; 138static int iobase[MAX_QLOGICFAS];
139static int irq[MAX_QLOGICFAS] = { [0 ... MAX_QLOGICFAS-1] = -1 }; 139static int irq[MAX_QLOGICFAS] = { [0 ... MAX_QLOGICFAS-1] = -1 };
140module_param_array(iobase, int, NULL, 0); 140module_param_hw_array(iobase, int, ioport, NULL, 0);
141module_param_array(irq, int, NULL, 0); 141module_param_hw_array(irq, int, irq, NULL, 0);
142MODULE_PARM_DESC(iobase, "I/O address"); 142MODULE_PARM_DESC(iobase, "I/O address");
143MODULE_PARM_DESC(irq, "IRQ"); 143MODULE_PARM_DESC(irq, "IRQ");
144 144
diff --git a/drivers/staging/speakup/speakup_acntpc.c b/drivers/staging/speakup/speakup_acntpc.c
index ad72f8e883fc..a041441766aa 100644
--- a/drivers/staging/speakup/speakup_acntpc.c
+++ b/drivers/staging/speakup/speakup_acntpc.c
@@ -310,7 +310,7 @@ static void accent_release(void)
310 speakup_info.port_tts = 0; 310 speakup_info.port_tts = 0;
311} 311}
312 312
313module_param_named(port, port_forced, int, 0444); 313module_param_hw_named(port, port_forced, int, ioport, 0444);
314module_param_named(start, synth_acntpc.startup, short, 0444); 314module_param_named(start, synth_acntpc.startup, short, 0444);
315 315
316MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing)."); 316MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing).");
diff --git a/drivers/staging/speakup/speakup_dtlk.c b/drivers/staging/speakup/speakup_dtlk.c
index 5973acc0a006..33180937222d 100644
--- a/drivers/staging/speakup/speakup_dtlk.c
+++ b/drivers/staging/speakup/speakup_dtlk.c
@@ -382,7 +382,7 @@ static void dtlk_release(void)
382 speakup_info.port_tts = 0; 382 speakup_info.port_tts = 0;
383} 383}
384 384
385module_param_named(port, port_forced, int, 0444); 385module_param_hw_named(port, port_forced, int, ioport, 0444);
386module_param_named(start, synth_dtlk.startup, short, 0444); 386module_param_named(start, synth_dtlk.startup, short, 0444);
387 387
388MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing)."); 388MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing).");
diff --git a/drivers/staging/speakup/speakup_keypc.c b/drivers/staging/speakup/speakup_keypc.c
index ba7901178e0b..d3203f8fc3d0 100644
--- a/drivers/staging/speakup/speakup_keypc.c
+++ b/drivers/staging/speakup/speakup_keypc.c
@@ -312,7 +312,7 @@ static void keynote_release(void)
312 synth_port = 0; 312 synth_port = 0;
313} 313}
314 314
315module_param_named(port, port_forced, int, 0444); 315module_param_hw_named(port, port_forced, int, ioport, 0444);
316module_param_named(start, synth_keypc.startup, short, 0444); 316module_param_named(start, synth_keypc.startup, short, 0444);
317 317
318MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing)."); 318MODULE_PARM_DESC(port, "Set the port for the synthesizer (override probing).");
diff --git a/drivers/staging/vme/devices/vme_pio2_core.c b/drivers/staging/vme/devices/vme_pio2_core.c
index 20a2d835fdaa..367535b4b77f 100644
--- a/drivers/staging/vme/devices/vme_pio2_core.c
+++ b/drivers/staging/vme/devices/vme_pio2_core.c
@@ -466,16 +466,16 @@ static void __exit pio2_exit(void)
466 466
467/* These are required for each board */ 467/* These are required for each board */
468MODULE_PARM_DESC(bus, "Enumeration of VMEbus to which the board is connected"); 468MODULE_PARM_DESC(bus, "Enumeration of VMEbus to which the board is connected");
469module_param_array(bus, int, &bus_num, 0444); 469module_param_hw_array(bus, int, other, &bus_num, 0444);
470 470
471MODULE_PARM_DESC(base, "Base VME address for PIO2 Registers"); 471MODULE_PARM_DESC(base, "Base VME address for PIO2 Registers");
472module_param_array(base, long, &base_num, 0444); 472module_param_hw_array(base, long, other, &base_num, 0444);
473 473
474MODULE_PARM_DESC(vector, "VME IRQ Vector (Lower 4 bits masked)"); 474MODULE_PARM_DESC(vector, "VME IRQ Vector (Lower 4 bits masked)");
475module_param_array(vector, int, &vector_num, 0444); 475module_param_hw_array(vector, int, other, &vector_num, 0444);
476 476
477MODULE_PARM_DESC(level, "VME IRQ Level"); 477MODULE_PARM_DESC(level, "VME IRQ Level");
478module_param_array(level, int, &level_num, 0444); 478module_param_hw_array(level, int, other, &level_num, 0444);
479 479
480MODULE_PARM_DESC(variant, "Last 4 characters of PIO2 board variant"); 480MODULE_PARM_DESC(variant, "Last 4 characters of PIO2 board variant");
481module_param_array(variant, charp, &variant_num, 0444); 481module_param_array(variant, charp, &variant_num, 0444);
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index 5e4fa9206861..104f09c58163 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -156,8 +156,8 @@ static unsigned int cy_isa_addresses[] = {
156static long maddr[NR_CARDS]; 156static long maddr[NR_CARDS];
157static int irq[NR_CARDS]; 157static int irq[NR_CARDS];
158 158
159module_param_array(maddr, long, NULL, 0); 159module_param_hw_array(maddr, long, iomem, NULL, 0);
160module_param_array(irq, int, NULL, 0); 160module_param_hw_array(irq, int, irq, NULL, 0);
161 161
162#endif /* CONFIG_ISA */ 162#endif /* CONFIG_ISA */
163 163
diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
index 4caf0c3b1f99..3b251f4e5df0 100644
--- a/drivers/tty/moxa.c
+++ b/drivers/tty/moxa.c
@@ -179,7 +179,7 @@ MODULE_FIRMWARE("c320tunx.cod");
179 179
180module_param_array(type, uint, NULL, 0); 180module_param_array(type, uint, NULL, 0);
181MODULE_PARM_DESC(type, "card type: C218=2, C320=4"); 181MODULE_PARM_DESC(type, "card type: C218=2, C320=4");
182module_param_array(baseaddr, ulong, NULL, 0); 182module_param_hw_array(baseaddr, ulong, ioport, NULL, 0);
183MODULE_PARM_DESC(baseaddr, "base address"); 183MODULE_PARM_DESC(baseaddr, "base address");
184module_param_array(numports, uint, NULL, 0); 184module_param_array(numports, uint, NULL, 0);
185MODULE_PARM_DESC(numports, "numports (ignored for C218)"); 185MODULE_PARM_DESC(numports, "numports (ignored for C218)");
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
index 7b8f383fb090..8bd6fb6d9391 100644
--- a/drivers/tty/mxser.c
+++ b/drivers/tty/mxser.c
@@ -183,7 +183,7 @@ static int ttymajor = MXSERMAJOR;
183 183
184MODULE_AUTHOR("Casper Yang"); 184MODULE_AUTHOR("Casper Yang");
185MODULE_DESCRIPTION("MOXA Smartio/Industio Family Multiport Board Device Driver"); 185MODULE_DESCRIPTION("MOXA Smartio/Industio Family Multiport Board Device Driver");
186module_param_array(ioaddr, ulong, NULL, 0); 186module_param_hw_array(ioaddr, ulong, ioport, NULL, 0);
187MODULE_PARM_DESC(ioaddr, "ISA io addresses to look for a moxa board"); 187MODULE_PARM_DESC(ioaddr, "ISA io addresses to look for a moxa board");
188module_param(ttymajor, int, 0); 188module_param(ttymajor, int, 0);
189MODULE_LICENSE("GPL"); 189MODULE_LICENSE("GPL");
diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c
index d66c1edd9892..b51a877da986 100644
--- a/drivers/tty/rocket.c
+++ b/drivers/tty/rocket.c
@@ -250,15 +250,15 @@ static int sReadAiopNumChan(WordIO_t io);
250 250
251MODULE_AUTHOR("Theodore Ts'o"); 251MODULE_AUTHOR("Theodore Ts'o");
252MODULE_DESCRIPTION("Comtrol RocketPort driver"); 252MODULE_DESCRIPTION("Comtrol RocketPort driver");
253module_param(board1, ulong, 0); 253module_param_hw(board1, ulong, ioport, 0);
254MODULE_PARM_DESC(board1, "I/O port for (ISA) board #1"); 254MODULE_PARM_DESC(board1, "I/O port for (ISA) board #1");
255module_param(board2, ulong, 0); 255module_param_hw(board2, ulong, ioport, 0);
256MODULE_PARM_DESC(board2, "I/O port for (ISA) board #2"); 256MODULE_PARM_DESC(board2, "I/O port for (ISA) board #2");
257module_param(board3, ulong, 0); 257module_param_hw(board3, ulong, ioport, 0);
258MODULE_PARM_DESC(board3, "I/O port for (ISA) board #3"); 258MODULE_PARM_DESC(board3, "I/O port for (ISA) board #3");
259module_param(board4, ulong, 0); 259module_param_hw(board4, ulong, ioport, 0);
260MODULE_PARM_DESC(board4, "I/O port for (ISA) board #4"); 260MODULE_PARM_DESC(board4, "I/O port for (ISA) board #4");
261module_param(controller, ulong, 0); 261module_param_hw(controller, ulong, ioport, 0);
262MODULE_PARM_DESC(controller, "I/O port for (ISA) rocketport controller"); 262MODULE_PARM_DESC(controller, "I/O port for (ISA) rocketport controller");
263module_param(support_low_speed, bool, 0); 263module_param(support_low_speed, bool, 0);
264MODULE_PARM_DESC(support_low_speed, "1 means support 50 baud, 0 means support 460400 baud"); 264MODULE_PARM_DESC(support_low_speed, "1 means support 50 baud, 0 means support 460400 baud");
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index 48a07e2f617f..1aab3010fbfa 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -1191,7 +1191,7 @@ module_exit(serial8250_exit);
1191MODULE_LICENSE("GPL"); 1191MODULE_LICENSE("GPL");
1192MODULE_DESCRIPTION("Generic 8250/16x50 serial driver"); 1192MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
1193 1193
1194module_param(share_irqs, uint, 0644); 1194module_param_hw(share_irqs, uint, other, 0644);
1195MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices (unsafe)"); 1195MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices (unsafe)");
1196 1196
1197module_param(nr_uarts, uint, 0644); 1197module_param(nr_uarts, uint, 0644);
@@ -1201,7 +1201,7 @@ module_param(skip_txen_test, uint, 0644);
1201MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time"); 1201MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time");
1202 1202
1203#ifdef CONFIG_SERIAL_8250_RSA 1203#ifdef CONFIG_SERIAL_8250_RSA
1204module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444); 1204module_param_hw_array(probe_rsa, ulong, ioport, &probe_rsa_count, 0444);
1205MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); 1205MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
1206#endif 1206#endif
1207MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR); 1207MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
diff --git a/drivers/tty/synclink.c b/drivers/tty/synclink.c
index 657eed82eeb3..a2c308f7d637 100644
--- a/drivers/tty/synclink.c
+++ b/drivers/tty/synclink.c
@@ -869,9 +869,9 @@ static int txholdbufs[MAX_TOTAL_DEVICES];
869 869
870module_param(break_on_load, bool, 0); 870module_param(break_on_load, bool, 0);
871module_param(ttymajor, int, 0); 871module_param(ttymajor, int, 0);
872module_param_array(io, int, NULL, 0); 872module_param_hw_array(io, int, ioport, NULL, 0);
873module_param_array(irq, int, NULL, 0); 873module_param_hw_array(irq, int, irq, NULL, 0);
874module_param_array(dma, int, NULL, 0); 874module_param_hw_array(dma, int, dma, NULL, 0);
875module_param(debug_level, int, 0); 875module_param(debug_level, int, 0);
876module_param_array(maxframe, int, NULL, 0); 876module_param_array(maxframe, int, NULL, 0);
877module_param_array(txdmabufs, int, NULL, 0); 877module_param_array(txdmabufs, int, NULL, 0);
diff --git a/drivers/video/fbdev/arcfb.c b/drivers/video/fbdev/arcfb.c
index 1928cb2b5386..7e87d0d61658 100644
--- a/drivers/video/fbdev/arcfb.c
+++ b/drivers/video/fbdev/arcfb.c
@@ -645,17 +645,17 @@ module_param(nosplash, uint, 0);
645MODULE_PARM_DESC(nosplash, "Disable doing the splash screen"); 645MODULE_PARM_DESC(nosplash, "Disable doing the splash screen");
646module_param(arcfb_enable, uint, 0); 646module_param(arcfb_enable, uint, 0);
647MODULE_PARM_DESC(arcfb_enable, "Enable communication with Arc board"); 647MODULE_PARM_DESC(arcfb_enable, "Enable communication with Arc board");
648module_param(dio_addr, ulong, 0); 648module_param_hw(dio_addr, ulong, ioport, 0);
649MODULE_PARM_DESC(dio_addr, "IO address for data, eg: 0x480"); 649MODULE_PARM_DESC(dio_addr, "IO address for data, eg: 0x480");
650module_param(cio_addr, ulong, 0); 650module_param_hw(cio_addr, ulong, ioport, 0);
651MODULE_PARM_DESC(cio_addr, "IO address for control, eg: 0x400"); 651MODULE_PARM_DESC(cio_addr, "IO address for control, eg: 0x400");
652module_param(c2io_addr, ulong, 0); 652module_param_hw(c2io_addr, ulong, ioport, 0);
653MODULE_PARM_DESC(c2io_addr, "IO address for secondary control, eg: 0x408"); 653MODULE_PARM_DESC(c2io_addr, "IO address for secondary control, eg: 0x408");
654module_param(splashval, ulong, 0); 654module_param(splashval, ulong, 0);
655MODULE_PARM_DESC(splashval, "Splash pattern: 0xFF is black, 0x00 is green"); 655MODULE_PARM_DESC(splashval, "Splash pattern: 0xFF is black, 0x00 is green");
656module_param(tuhold, ulong, 0); 656module_param(tuhold, ulong, 0);
657MODULE_PARM_DESC(tuhold, "Time to hold between strobing data to Arc board"); 657MODULE_PARM_DESC(tuhold, "Time to hold between strobing data to Arc board");
658module_param(irq, uint, 0); 658module_param_hw(irq, uint, irq, 0);
659MODULE_PARM_DESC(irq, "IRQ for the Arc board"); 659MODULE_PARM_DESC(irq, "IRQ for the Arc board");
660 660
661module_init(arcfb_init); 661module_init(arcfb_init);
diff --git a/drivers/video/fbdev/n411.c b/drivers/video/fbdev/n411.c
index 053deacad7cc..a3677313396e 100644
--- a/drivers/video/fbdev/n411.c
+++ b/drivers/video/fbdev/n411.c
@@ -193,11 +193,11 @@ module_exit(n411_exit);
193 193
194module_param(nosplash, uint, 0); 194module_param(nosplash, uint, 0);
195MODULE_PARM_DESC(nosplash, "Disable doing the splash screen"); 195MODULE_PARM_DESC(nosplash, "Disable doing the splash screen");
196module_param(dio_addr, ulong, 0); 196module_param_hw(dio_addr, ulong, ioport, 0);
197MODULE_PARM_DESC(dio_addr, "IO address for data, eg: 0x480"); 197MODULE_PARM_DESC(dio_addr, "IO address for data, eg: 0x480");
198module_param(cio_addr, ulong, 0); 198module_param_hw(cio_addr, ulong, ioport, 0);
199MODULE_PARM_DESC(cio_addr, "IO address for control, eg: 0x400"); 199MODULE_PARM_DESC(cio_addr, "IO address for control, eg: 0x400");
200module_param(c2io_addr, ulong, 0); 200module_param_hw(c2io_addr, ulong, ioport, 0);
201MODULE_PARM_DESC(c2io_addr, "IO address for secondary control, eg: 0x408"); 201MODULE_PARM_DESC(c2io_addr, "IO address for secondary control, eg: 0x408");
202module_param(splashval, ulong, 0); 202module_param(splashval, ulong, 0);
203MODULE_PARM_DESC(splashval, "Splash pattern: 0x00 is black, 0x01 is white"); 203MODULE_PARM_DESC(splashval, "Splash pattern: 0x00 is black, 0x01 is white");
diff --git a/drivers/watchdog/cpu5wdt.c b/drivers/watchdog/cpu5wdt.c
index 6d03e8e30f8b..6c3f78e45c26 100644
--- a/drivers/watchdog/cpu5wdt.c
+++ b/drivers/watchdog/cpu5wdt.c
@@ -289,7 +289,7 @@ MODULE_DESCRIPTION("sma cpu5 watchdog driver");
289MODULE_SUPPORTED_DEVICE("sma cpu5 watchdog"); 289MODULE_SUPPORTED_DEVICE("sma cpu5 watchdog");
290MODULE_LICENSE("GPL"); 290MODULE_LICENSE("GPL");
291 291
292module_param(port, int, 0); 292module_param_hw(port, int, ioport, 0);
293MODULE_PARM_DESC(port, "base address of watchdog card, default is 0x91"); 293MODULE_PARM_DESC(port, "base address of watchdog card, default is 0x91");
294 294
295module_param(verbose, int, 0); 295module_param(verbose, int, 0);
diff --git a/drivers/watchdog/eurotechwdt.c b/drivers/watchdog/eurotechwdt.c
index 23ee53240c4c..38e96712264f 100644
--- a/drivers/watchdog/eurotechwdt.c
+++ b/drivers/watchdog/eurotechwdt.c
@@ -97,9 +97,9 @@ MODULE_PARM_DESC(nowayout,
97#define WDT_TIMER_CFG 0xf3 97#define WDT_TIMER_CFG 0xf3
98 98
99 99
100module_param(io, int, 0); 100module_param_hw(io, int, ioport, 0);
101MODULE_PARM_DESC(io, "Eurotech WDT io port (default=0x3f0)"); 101MODULE_PARM_DESC(io, "Eurotech WDT io port (default=0x3f0)");
102module_param(irq, int, 0); 102module_param_hw(irq, int, irq, 0);
103MODULE_PARM_DESC(irq, "Eurotech WDT irq (default=10)"); 103MODULE_PARM_DESC(irq, "Eurotech WDT irq (default=10)");
104module_param(ev, charp, 0); 104module_param(ev, charp, 0);
105MODULE_PARM_DESC(ev, "Eurotech WDT event type (default is `int')"); 105MODULE_PARM_DESC(ev, "Eurotech WDT event type (default is `int')");
diff --git a/drivers/watchdog/pc87413_wdt.c b/drivers/watchdog/pc87413_wdt.c
index 9f15dd9435d1..06a892e36a8d 100644
--- a/drivers/watchdog/pc87413_wdt.c
+++ b/drivers/watchdog/pc87413_wdt.c
@@ -579,7 +579,7 @@ MODULE_AUTHOR("Marcus Junker <junker@anduras.de>");
579MODULE_DESCRIPTION("PC87413 WDT driver"); 579MODULE_DESCRIPTION("PC87413 WDT driver");
580MODULE_LICENSE("GPL"); 580MODULE_LICENSE("GPL");
581 581
582module_param(io, int, 0); 582module_param_hw(io, int, ioport, 0);
583MODULE_PARM_DESC(io, MODNAME " I/O port (default: " 583MODULE_PARM_DESC(io, MODNAME " I/O port (default: "
584 __MODULE_STRING(IO_DEFAULT) ")."); 584 __MODULE_STRING(IO_DEFAULT) ").");
585 585
diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c
index 131193a7acdf..b34d3d5ba632 100644
--- a/drivers/watchdog/sc1200wdt.c
+++ b/drivers/watchdog/sc1200wdt.c
@@ -88,7 +88,7 @@ MODULE_PARM_DESC(isapnp,
88 "When set to 0 driver ISA PnP support will be disabled"); 88 "When set to 0 driver ISA PnP support will be disabled");
89#endif 89#endif
90 90
91module_param(io, int, 0); 91module_param_hw(io, int, ioport, 0);
92MODULE_PARM_DESC(io, "io port"); 92MODULE_PARM_DESC(io, "io port");
93module_param(timeout, int, 0); 93module_param(timeout, int, 0);
94MODULE_PARM_DESC(timeout, "range is 0-255 minutes, default is 1"); 94MODULE_PARM_DESC(timeout, "range is 0-255 minutes, default is 1");
diff --git a/drivers/watchdog/wdt.c b/drivers/watchdog/wdt.c
index e0206b5b7d89..e481fbbc4ae7 100644
--- a/drivers/watchdog/wdt.c
+++ b/drivers/watchdog/wdt.c
@@ -78,9 +78,9 @@ static int irq = 11;
78 78
79static DEFINE_SPINLOCK(wdt_lock); 79static DEFINE_SPINLOCK(wdt_lock);
80 80
81module_param(io, int, 0); 81module_param_hw(io, int, ioport, 0);
82MODULE_PARM_DESC(io, "WDT io port (default=0x240)"); 82MODULE_PARM_DESC(io, "WDT io port (default=0x240)");
83module_param(irq, int, 0); 83module_param_hw(irq, int, irq, 0);
84MODULE_PARM_DESC(irq, "WDT irq (default=11)"); 84MODULE_PARM_DESC(irq, "WDT irq (default=11)");
85 85
86/* Support for the Fan Tachometer on the WDT501-P */ 86/* Support for the Fan Tachometer on the WDT501-P */
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 5523df7f17ef..5cb022c8cd33 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -58,7 +58,7 @@ module_param_named(pmsg_size, ramoops_pmsg_size, ulong, 0400);
58MODULE_PARM_DESC(pmsg_size, "size of user space message log"); 58MODULE_PARM_DESC(pmsg_size, "size of user space message log");
59 59
60static unsigned long long mem_address; 60static unsigned long long mem_address;
61module_param(mem_address, ullong, 0400); 61module_param_hw(mem_address, ullong, other, 0400);
62MODULE_PARM_DESC(mem_address, 62MODULE_PARM_DESC(mem_address,
63 "start of reserved RAM used to store oops/panic logs"); 63 "start of reserved RAM used to store oops/panic logs");
64 64
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
index 52666d90ca94..6be1949ebcdf 100644
--- a/include/linux/moduleparam.h
+++ b/include/linux/moduleparam.h
@@ -60,9 +60,11 @@ struct kernel_param_ops {
60 * Flags available for kernel_param 60 * Flags available for kernel_param
61 * 61 *
62 * UNSAFE - the parameter is dangerous and setting it will taint the kernel 62 * UNSAFE - the parameter is dangerous and setting it will taint the kernel
63 * HWPARAM - Hardware param not permitted in lockdown mode
63 */ 64 */
64enum { 65enum {
65 KERNEL_PARAM_FL_UNSAFE = (1 << 0) 66 KERNEL_PARAM_FL_UNSAFE = (1 << 0),
67 KERNEL_PARAM_FL_HWPARAM = (1 << 1),
66}; 68};
67 69
68struct kernel_param { 70struct kernel_param {
@@ -451,6 +453,67 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp);
451 perm, -1, 0); \ 453 perm, -1, 0); \
452 __MODULE_PARM_TYPE(name, "array of " #type) 454 __MODULE_PARM_TYPE(name, "array of " #type)
453 455
456enum hwparam_type {
457 hwparam_ioport, /* Module parameter configures an I/O port */
458 hwparam_iomem, /* Module parameter configures an I/O mem address */
459 hwparam_ioport_or_iomem, /* Module parameter could be either, depending on other option */
460 hwparam_irq, /* Module parameter configures an I/O port */
461 hwparam_dma, /* Module parameter configures a DMA channel */
462 hwparam_dma_addr, /* Module parameter configures a DMA buffer address */
463 hwparam_other, /* Module parameter configures some other value */
464};
465
466/**
467 * module_param_hw_named - A parameter representing a hw parameters
468 * @name: a valid C identifier which is the parameter name.
469 * @value: the actual lvalue to alter.
470 * @type: the type of the parameter
471 * @hwtype: what the value represents (enum hwparam_type)
472 * @perm: visibility in sysfs.
473 *
474 * Usually it's a good idea to have variable names and user-exposed names the
475 * same, but that's harder if the variable must be non-static or is inside a
476 * structure. This allows exposure under a different name.
477 */
478#define module_param_hw_named(name, value, type, hwtype, perm) \
479 param_check_##type(name, &(value)); \
480 __module_param_call(MODULE_PARAM_PREFIX, name, \
481 &param_ops_##type, &value, \
482 perm, -1, \
483 KERNEL_PARAM_FL_HWPARAM | (hwparam_##hwtype & 0)); \
484 __MODULE_PARM_TYPE(name, #type)
485
486#define module_param_hw(name, type, hwtype, perm) \
487 module_param_hw_named(name, name, type, hwtype, perm)
488
489/**
490 * module_param_hw_array - A parameter representing an array of hw parameters
491 * @name: the name of the array variable
492 * @type: the type, as per module_param()
493 * @hwtype: what the value represents (enum hwparam_type)
494 * @nump: optional pointer filled in with the number written
495 * @perm: visibility in sysfs
496 *
497 * Input and output are as comma-separated values. Commas inside values
498 * don't work properly (eg. an array of charp).
499 *
500 * ARRAY_SIZE(@name) is used to determine the number of elements in the
501 * array, so the definition must be visible.
502 */
503#define module_param_hw_array(name, type, hwtype, nump, perm) \
504 param_check_##type(name, &(name)[0]); \
505 static const struct kparam_array __param_arr_##name \
506 = { .max = ARRAY_SIZE(name), .num = nump, \
507 .ops = &param_ops_##type, \
508 .elemsize = sizeof(name[0]), .elem = name }; \
509 __module_param_call(MODULE_PARAM_PREFIX, name, \
510 &param_array_ops, \
511 .arr = &__param_arr_##name, \
512 perm, -1, \
513 KERNEL_PARAM_FL_HWPARAM | (hwparam_##hwtype & 0)); \
514 __MODULE_PARM_TYPE(name, "array of " #type)
515
516
454extern const struct kernel_param_ops param_array_ops; 517extern const struct kernel_param_ops param_array_ops;
455 518
456extern const struct kernel_param_ops param_ops_string; 519extern const struct kernel_param_ops param_ops_string;
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
index fed7e7e2177b..9b86e00d7d95 100644
--- a/sound/drivers/mpu401/mpu401.c
+++ b/sound/drivers/mpu401/mpu401.c
@@ -53,9 +53,9 @@ MODULE_PARM_DESC(enable, "Enable MPU-401 device.");
53module_param_array(pnp, bool, NULL, 0444); 53module_param_array(pnp, bool, NULL, 0444);
54MODULE_PARM_DESC(pnp, "PnP detection for MPU-401 device."); 54MODULE_PARM_DESC(pnp, "PnP detection for MPU-401 device.");
55#endif 55#endif
56module_param_array(port, long, NULL, 0444); 56module_param_hw_array(port, long, ioport, NULL, 0444);
57MODULE_PARM_DESC(port, "Port # for MPU-401 device."); 57MODULE_PARM_DESC(port, "Port # for MPU-401 device.");
58module_param_array(irq, int, NULL, 0444); 58module_param_hw_array(irq, int, irq, NULL, 0444);
59MODULE_PARM_DESC(irq, "IRQ # for MPU-401 device."); 59MODULE_PARM_DESC(irq, "IRQ # for MPU-401 device.");
60module_param_array(uart_enter, bool, NULL, 0444); 60module_param_array(uart_enter, bool, NULL, 0444);
61MODULE_PARM_DESC(uart_enter, "Issue UART_ENTER command at open."); 61MODULE_PARM_DESC(uart_enter, "Issue UART_ENTER command at open.");
diff --git a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c
index 00b31f92c504..0f6392001e30 100644
--- a/sound/drivers/mtpav.c
+++ b/sound/drivers/mtpav.c
@@ -86,9 +86,9 @@ module_param(index, int, 0444);
86MODULE_PARM_DESC(index, "Index value for MotuMTPAV MIDI."); 86MODULE_PARM_DESC(index, "Index value for MotuMTPAV MIDI.");
87module_param(id, charp, 0444); 87module_param(id, charp, 0444);
88MODULE_PARM_DESC(id, "ID string for MotuMTPAV MIDI."); 88MODULE_PARM_DESC(id, "ID string for MotuMTPAV MIDI.");
89module_param(port, long, 0444); 89module_param_hw(port, long, ioport, 0444);
90MODULE_PARM_DESC(port, "Parallel port # for MotuMTPAV MIDI."); 90MODULE_PARM_DESC(port, "Parallel port # for MotuMTPAV MIDI.");
91module_param(irq, int, 0444); 91module_param_hw(irq, int, irq, 0444);
92MODULE_PARM_DESC(irq, "Parallel IRQ # for MotuMTPAV MIDI."); 92MODULE_PARM_DESC(irq, "Parallel IRQ # for MotuMTPAV MIDI.");
93module_param(hwports, int, 0444); 93module_param(hwports, int, 0444);
94MODULE_PARM_DESC(hwports, "Hardware ports # for MotuMTPAV MIDI."); 94MODULE_PARM_DESC(hwports, "Hardware ports # for MotuMTPAV MIDI.");
diff --git a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c
index 60d51ac4ccfe..88e66ea0306d 100644
--- a/sound/drivers/serial-u16550.c
+++ b/sound/drivers/serial-u16550.c
@@ -84,9 +84,9 @@ module_param_array(id, charp, NULL, 0444);
84MODULE_PARM_DESC(id, "ID string for Serial MIDI."); 84MODULE_PARM_DESC(id, "ID string for Serial MIDI.");
85module_param_array(enable, bool, NULL, 0444); 85module_param_array(enable, bool, NULL, 0444);
86MODULE_PARM_DESC(enable, "Enable UART16550A chip."); 86MODULE_PARM_DESC(enable, "Enable UART16550A chip.");
87module_param_array(port, long, NULL, 0444); 87module_param_hw_array(port, long, ioport, NULL, 0444);
88MODULE_PARM_DESC(port, "Port # for UART16550A chip."); 88MODULE_PARM_DESC(port, "Port # for UART16550A chip.");
89module_param_array(irq, int, NULL, 0444); 89module_param_hw_array(irq, int, irq, NULL, 0444);
90MODULE_PARM_DESC(irq, "IRQ # for UART16550A chip."); 90MODULE_PARM_DESC(irq, "IRQ # for UART16550A chip.");
91module_param_array(speed, int, NULL, 0444); 91module_param_array(speed, int, NULL, 0444);
92MODULE_PARM_DESC(speed, "Speed in bauds."); 92MODULE_PARM_DESC(speed, "Speed in bauds.");
diff --git a/sound/isa/ad1848/ad1848.c b/sound/isa/ad1848/ad1848.c
index a302d1f8d14f..e739b1c85c25 100644
--- a/sound/isa/ad1848/ad1848.c
+++ b/sound/isa/ad1848/ad1848.c
@@ -55,11 +55,11 @@ module_param_array(id, charp, NULL, 0444);
55MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard."); 55MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard.");
56module_param_array(enable, bool, NULL, 0444); 56module_param_array(enable, bool, NULL, 0444);
57MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 57MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
58module_param_array(port, long, NULL, 0444); 58module_param_hw_array(port, long, ioport, NULL, 0444);
59MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 59MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
60module_param_array(irq, int, NULL, 0444); 60module_param_hw_array(irq, int, irq, NULL, 0444);
61MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 61MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
62module_param_array(dma1, int, NULL, 0444); 62module_param_hw_array(dma1, int, dma, NULL, 0444);
63MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver."); 63MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver.");
64module_param_array(thinkpad, bool, NULL, 0444); 64module_param_array(thinkpad, bool, NULL, 0444);
65MODULE_PARM_DESC(thinkpad, "Enable only for the onboard CS4248 of IBM Thinkpad 360/750/755 series."); 65MODULE_PARM_DESC(thinkpad, "Enable only for the onboard CS4248 of IBM Thinkpad 360/750/755 series.");
diff --git a/sound/isa/adlib.c b/sound/isa/adlib.c
index 8d3060fd7ad7..5fb619eca5c8 100644
--- a/sound/isa/adlib.c
+++ b/sound/isa/adlib.c
@@ -27,7 +27,7 @@ module_param_array(id, charp, NULL, 0444);
27MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard."); 27MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard.");
28module_param_array(enable, bool, NULL, 0444); 28module_param_array(enable, bool, NULL, 0444);
29MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 29MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
30module_param_array(port, long, NULL, 0444); 30module_param_hw_array(port, long, ioport, NULL, 0444);
31MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 31MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
32 32
33static int snd_adlib_match(struct device *dev, unsigned int n) 33static int snd_adlib_match(struct device *dev, unsigned int n)
diff --git a/sound/isa/cmi8328.c b/sound/isa/cmi8328.c
index 787475084f46..8e1756c3b9bb 100644
--- a/sound/isa/cmi8328.c
+++ b/sound/isa/cmi8328.c
@@ -51,18 +51,18 @@ MODULE_PARM_DESC(index, "Index value for CMI8328 soundcard.");
51module_param_array(id, charp, NULL, 0444); 51module_param_array(id, charp, NULL, 0444);
52MODULE_PARM_DESC(id, "ID string for CMI8328 soundcard."); 52MODULE_PARM_DESC(id, "ID string for CMI8328 soundcard.");
53 53
54module_param_array(port, long, NULL, 0444); 54module_param_hw_array(port, long, ioport, NULL, 0444);
55MODULE_PARM_DESC(port, "Port # for CMI8328 driver."); 55MODULE_PARM_DESC(port, "Port # for CMI8328 driver.");
56module_param_array(irq, int, NULL, 0444); 56module_param_hw_array(irq, int, irq, NULL, 0444);
57MODULE_PARM_DESC(irq, "IRQ # for CMI8328 driver."); 57MODULE_PARM_DESC(irq, "IRQ # for CMI8328 driver.");
58module_param_array(dma1, int, NULL, 0444); 58module_param_hw_array(dma1, int, dma, NULL, 0444);
59MODULE_PARM_DESC(dma1, "DMA1 for CMI8328 driver."); 59MODULE_PARM_DESC(dma1, "DMA1 for CMI8328 driver.");
60module_param_array(dma2, int, NULL, 0444); 60module_param_hw_array(dma2, int, dma, NULL, 0444);
61MODULE_PARM_DESC(dma2, "DMA2 for CMI8328 driver."); 61MODULE_PARM_DESC(dma2, "DMA2 for CMI8328 driver.");
62 62
63module_param_array(mpuport, long, NULL, 0444); 63module_param_hw_array(mpuport, long, ioport, NULL, 0444);
64MODULE_PARM_DESC(mpuport, "MPU-401 port # for CMI8328 driver."); 64MODULE_PARM_DESC(mpuport, "MPU-401 port # for CMI8328 driver.");
65module_param_array(mpuirq, int, NULL, 0444); 65module_param_hw_array(mpuirq, int, irq, NULL, 0444);
66MODULE_PARM_DESC(mpuirq, "IRQ # for CMI8328 MPU-401 port."); 66MODULE_PARM_DESC(mpuirq, "IRQ # for CMI8328 MPU-401 port.");
67#ifdef SUPPORT_JOYSTICK 67#ifdef SUPPORT_JOYSTICK
68module_param_array(gameport, bool, NULL, 0444); 68module_param_array(gameport, bool, NULL, 0444);
diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c
index dfedfd85f205..f64b29ab5cc7 100644
--- a/sound/isa/cmi8330.c
+++ b/sound/isa/cmi8330.c
@@ -95,27 +95,27 @@ module_param_array(isapnp, bool, NULL, 0444);
95MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); 95MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
96#endif 96#endif
97 97
98module_param_array(sbport, long, NULL, 0444); 98module_param_hw_array(sbport, long, ioport, NULL, 0444);
99MODULE_PARM_DESC(sbport, "Port # for CMI8330/CMI8329 SB driver."); 99MODULE_PARM_DESC(sbport, "Port # for CMI8330/CMI8329 SB driver.");
100module_param_array(sbirq, int, NULL, 0444); 100module_param_hw_array(sbirq, int, irq, NULL, 0444);
101MODULE_PARM_DESC(sbirq, "IRQ # for CMI8330/CMI8329 SB driver."); 101MODULE_PARM_DESC(sbirq, "IRQ # for CMI8330/CMI8329 SB driver.");
102module_param_array(sbdma8, int, NULL, 0444); 102module_param_hw_array(sbdma8, int, dma, NULL, 0444);
103MODULE_PARM_DESC(sbdma8, "DMA8 for CMI8330/CMI8329 SB driver."); 103MODULE_PARM_DESC(sbdma8, "DMA8 for CMI8330/CMI8329 SB driver.");
104module_param_array(sbdma16, int, NULL, 0444); 104module_param_hw_array(sbdma16, int, dma, NULL, 0444);
105MODULE_PARM_DESC(sbdma16, "DMA16 for CMI8330/CMI8329 SB driver."); 105MODULE_PARM_DESC(sbdma16, "DMA16 for CMI8330/CMI8329 SB driver.");
106 106
107module_param_array(wssport, long, NULL, 0444); 107module_param_hw_array(wssport, long, ioport, NULL, 0444);
108MODULE_PARM_DESC(wssport, "Port # for CMI8330/CMI8329 WSS driver."); 108MODULE_PARM_DESC(wssport, "Port # for CMI8330/CMI8329 WSS driver.");
109module_param_array(wssirq, int, NULL, 0444); 109module_param_hw_array(wssirq, int, irq, NULL, 0444);
110MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330/CMI8329 WSS driver."); 110MODULE_PARM_DESC(wssirq, "IRQ # for CMI8330/CMI8329 WSS driver.");
111module_param_array(wssdma, int, NULL, 0444); 111module_param_hw_array(wssdma, int, dma, NULL, 0444);
112MODULE_PARM_DESC(wssdma, "DMA for CMI8330/CMI8329 WSS driver."); 112MODULE_PARM_DESC(wssdma, "DMA for CMI8330/CMI8329 WSS driver.");
113 113
114module_param_array(fmport, long, NULL, 0444); 114module_param_hw_array(fmport, long, ioport, NULL, 0444);
115MODULE_PARM_DESC(fmport, "FM port # for CMI8330/CMI8329 driver."); 115MODULE_PARM_DESC(fmport, "FM port # for CMI8330/CMI8329 driver.");
116module_param_array(mpuport, long, NULL, 0444); 116module_param_hw_array(mpuport, long, ioport, NULL, 0444);
117MODULE_PARM_DESC(mpuport, "MPU-401 port # for CMI8330/CMI8329 driver."); 117MODULE_PARM_DESC(mpuport, "MPU-401 port # for CMI8330/CMI8329 driver.");
118module_param_array(mpuirq, int, NULL, 0444); 118module_param_hw_array(mpuirq, int, irq, NULL, 0444);
119MODULE_PARM_DESC(mpuirq, "IRQ # for CMI8330/CMI8329 MPU-401 port."); 119MODULE_PARM_DESC(mpuirq, "IRQ # for CMI8330/CMI8329 MPU-401 port.");
120#ifdef CONFIG_PNP 120#ifdef CONFIG_PNP
121static int isa_registered; 121static int isa_registered;
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
index ef7448e9f813..e8edd9017a2f 100644
--- a/sound/isa/cs423x/cs4231.c
+++ b/sound/isa/cs423x/cs4231.c
@@ -55,17 +55,17 @@ module_param_array(id, charp, NULL, 0444);
55MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard."); 55MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard.");
56module_param_array(enable, bool, NULL, 0444); 56module_param_array(enable, bool, NULL, 0444);
57MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 57MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
58module_param_array(port, long, NULL, 0444); 58module_param_hw_array(port, long, ioport, NULL, 0444);
59MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 59MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
60module_param_array(mpu_port, long, NULL, 0444); 60module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
61MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver."); 61MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
62module_param_array(irq, int, NULL, 0444); 62module_param_hw_array(irq, int, irq, NULL, 0444);
63MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 63MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
64module_param_array(mpu_irq, int, NULL, 0444); 64module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
65MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver."); 65MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver.");
66module_param_array(dma1, int, NULL, 0444); 66module_param_hw_array(dma1, int, dma, NULL, 0444);
67MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver."); 67MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver.");
68module_param_array(dma2, int, NULL, 0444); 68module_param_hw_array(dma2, int, dma, NULL, 0444);
69MODULE_PARM_DESC(dma2, "DMA2 # for " CRD_NAME " driver."); 69MODULE_PARM_DESC(dma2, "DMA2 # for " CRD_NAME " driver.");
70 70
71static int snd_cs4231_match(struct device *dev, unsigned int n) 71static int snd_cs4231_match(struct device *dev, unsigned int n)
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
index 9d7582c90a95..1f9a3b2be7a1 100644
--- a/sound/isa/cs423x/cs4236.c
+++ b/sound/isa/cs423x/cs4236.c
@@ -98,23 +98,23 @@ MODULE_PARM_DESC(enable, "Enable " IDENT " soundcard.");
98module_param_array(isapnp, bool, NULL, 0444); 98module_param_array(isapnp, bool, NULL, 0444);
99MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); 99MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard.");
100#endif 100#endif
101module_param_array(port, long, NULL, 0444); 101module_param_hw_array(port, long, ioport, NULL, 0444);
102MODULE_PARM_DESC(port, "Port # for " IDENT " driver."); 102MODULE_PARM_DESC(port, "Port # for " IDENT " driver.");
103module_param_array(cport, long, NULL, 0444); 103module_param_hw_array(cport, long, ioport, NULL, 0444);
104MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver."); 104MODULE_PARM_DESC(cport, "Control port # for " IDENT " driver.");
105module_param_array(mpu_port, long, NULL, 0444); 105module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
106MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver."); 106MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " IDENT " driver.");
107module_param_array(fm_port, long, NULL, 0444); 107module_param_hw_array(fm_port, long, ioport, NULL, 0444);
108MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver."); 108MODULE_PARM_DESC(fm_port, "FM port # for " IDENT " driver.");
109module_param_array(sb_port, long, NULL, 0444); 109module_param_hw_array(sb_port, long, ioport, NULL, 0444);
110MODULE_PARM_DESC(sb_port, "SB port # for " IDENT " driver (optional)."); 110MODULE_PARM_DESC(sb_port, "SB port # for " IDENT " driver (optional).");
111module_param_array(irq, int, NULL, 0444); 111module_param_hw_array(irq, int, irq, NULL, 0444);
112MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver."); 112MODULE_PARM_DESC(irq, "IRQ # for " IDENT " driver.");
113module_param_array(mpu_irq, int, NULL, 0444); 113module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
114MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver."); 114MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " IDENT " driver.");
115module_param_array(dma1, int, NULL, 0444); 115module_param_hw_array(dma1, int, dma, NULL, 0444);
116MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver."); 116MODULE_PARM_DESC(dma1, "DMA1 # for " IDENT " driver.");
117module_param_array(dma2, int, NULL, 0444); 117module_param_hw_array(dma2, int, dma, NULL, 0444);
118MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); 118MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver.");
119 119
120#ifdef CONFIG_PNP 120#ifdef CONFIG_PNP
diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c
index 1901c2bb6c3b..36320e7f2789 100644
--- a/sound/isa/es1688/es1688.c
+++ b/sound/isa/es1688/es1688.c
@@ -71,17 +71,17 @@ module_param_array(isapnp, bool, NULL, 0444);
71MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); 71MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
72#endif 72#endif
73MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 73MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
74module_param_array(port, long, NULL, 0444); 74module_param_hw_array(port, long, ioport, NULL, 0444);
75MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 75MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
76module_param_array(mpu_port, long, NULL, 0444); 76module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
77MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver."); 77MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
78module_param_array(irq, int, NULL, 0444); 78module_param_hw_array(irq, int, irq, NULL, 0444);
79module_param_array(fm_port, long, NULL, 0444); 79module_param_hw_array(fm_port, long, ioport, NULL, 0444);
80MODULE_PARM_DESC(fm_port, "FM port # for ES1688 driver."); 80MODULE_PARM_DESC(fm_port, "FM port # for ES1688 driver.");
81MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 81MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
82module_param_array(mpu_irq, int, NULL, 0444); 82module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
83MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver."); 83MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver.");
84module_param_array(dma8, int, NULL, 0444); 84module_param_hw_array(dma8, int, dma, NULL, 0444);
85MODULE_PARM_DESC(dma8, "8-bit DMA # for " CRD_NAME " driver."); 85MODULE_PARM_DESC(dma8, "8-bit DMA # for " CRD_NAME " driver.");
86 86
87#ifdef CONFIG_PNP 87#ifdef CONFIG_PNP
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index 5094b62d8f77..0cabe2b8974f 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -1999,17 +1999,17 @@ MODULE_PARM_DESC(enable, "Enable ES18xx soundcard.");
1999module_param_array(isapnp, bool, NULL, 0444); 1999module_param_array(isapnp, bool, NULL, 0444);
2000MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); 2000MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
2001#endif 2001#endif
2002module_param_array(port, long, NULL, 0444); 2002module_param_hw_array(port, long, ioport, NULL, 0444);
2003MODULE_PARM_DESC(port, "Port # for ES18xx driver."); 2003MODULE_PARM_DESC(port, "Port # for ES18xx driver.");
2004module_param_array(mpu_port, long, NULL, 0444); 2004module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
2005MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ES18xx driver."); 2005MODULE_PARM_DESC(mpu_port, "MPU-401 port # for ES18xx driver.");
2006module_param_array(fm_port, long, NULL, 0444); 2006module_param_hw_array(fm_port, long, ioport, NULL, 0444);
2007MODULE_PARM_DESC(fm_port, "FM port # for ES18xx driver."); 2007MODULE_PARM_DESC(fm_port, "FM port # for ES18xx driver.");
2008module_param_array(irq, int, NULL, 0444); 2008module_param_hw_array(irq, int, irq, NULL, 0444);
2009MODULE_PARM_DESC(irq, "IRQ # for ES18xx driver."); 2009MODULE_PARM_DESC(irq, "IRQ # for ES18xx driver.");
2010module_param_array(dma1, int, NULL, 0444); 2010module_param_hw_array(dma1, int, dma, NULL, 0444);
2011MODULE_PARM_DESC(dma1, "DMA 1 # for ES18xx driver."); 2011MODULE_PARM_DESC(dma1, "DMA 1 # for ES18xx driver.");
2012module_param_array(dma2, int, NULL, 0444); 2012module_param_hw_array(dma2, int, dma, NULL, 0444);
2013MODULE_PARM_DESC(dma2, "DMA 2 # for ES18xx driver."); 2013MODULE_PARM_DESC(dma2, "DMA 2 # for ES18xx driver.");
2014 2014
2015#ifdef CONFIG_PNP 2015#ifdef CONFIG_PNP
diff --git a/sound/isa/galaxy/galaxy.c b/sound/isa/galaxy/galaxy.c
index 379abe2cbeb2..b9994cc9f5fb 100644
--- a/sound/isa/galaxy/galaxy.c
+++ b/sound/isa/galaxy/galaxy.c
@@ -53,21 +53,21 @@ static int mpu_irq[SNDRV_CARDS] = SNDRV_DEFAULT_IRQ;
53static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; 53static int dma1[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
54static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA; 54static int dma2[SNDRV_CARDS] = SNDRV_DEFAULT_DMA;
55 55
56module_param_array(port, long, NULL, 0444); 56module_param_hw_array(port, long, ioport, NULL, 0444);
57MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 57MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
58module_param_array(wss_port, long, NULL, 0444); 58module_param_hw_array(wss_port, long, ioport, NULL, 0444);
59MODULE_PARM_DESC(wss_port, "WSS port # for " CRD_NAME " driver."); 59MODULE_PARM_DESC(wss_port, "WSS port # for " CRD_NAME " driver.");
60module_param_array(mpu_port, long, NULL, 0444); 60module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
61MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver."); 61MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
62module_param_array(fm_port, long, NULL, 0444); 62module_param_hw_array(fm_port, long, ioport, NULL, 0444);
63MODULE_PARM_DESC(fm_port, "FM port # for " CRD_NAME " driver."); 63MODULE_PARM_DESC(fm_port, "FM port # for " CRD_NAME " driver.");
64module_param_array(irq, int, NULL, 0444); 64module_param_hw_array(irq, int, irq, NULL, 0444);
65MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 65MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
66module_param_array(mpu_irq, int, NULL, 0444); 66module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
67MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver."); 67MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver.");
68module_param_array(dma1, int, NULL, 0444); 68module_param_hw_array(dma1, int, dma, NULL, 0444);
69MODULE_PARM_DESC(dma1, "Playback DMA # for " CRD_NAME " driver."); 69MODULE_PARM_DESC(dma1, "Playback DMA # for " CRD_NAME " driver.");
70module_param_array(dma2, int, NULL, 0444); 70module_param_hw_array(dma2, int, dma, NULL, 0444);
71MODULE_PARM_DESC(dma2, "Capture DMA # for " CRD_NAME " driver."); 71MODULE_PARM_DESC(dma2, "Capture DMA # for " CRD_NAME " driver.");
72 72
73/* 73/*
diff --git a/sound/isa/gus/gusclassic.c b/sound/isa/gus/gusclassic.c
index c169be49ed71..92a997ab1229 100644
--- a/sound/isa/gus/gusclassic.c
+++ b/sound/isa/gus/gusclassic.c
@@ -58,13 +58,13 @@ module_param_array(id, charp, NULL, 0444);
58MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard."); 58MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard.");
59module_param_array(enable, bool, NULL, 0444); 59module_param_array(enable, bool, NULL, 0444);
60MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 60MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
61module_param_array(port, long, NULL, 0444); 61module_param_hw_array(port, long, ioport, NULL, 0444);
62MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 62MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
63module_param_array(irq, int, NULL, 0444); 63module_param_hw_array(irq, int, irq, NULL, 0444);
64MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 64MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
65module_param_array(dma1, int, NULL, 0444); 65module_param_hw_array(dma1, int, dma, NULL, 0444);
66MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver."); 66MODULE_PARM_DESC(dma1, "DMA1 # for " CRD_NAME " driver.");
67module_param_array(dma2, int, NULL, 0444); 67module_param_hw_array(dma2, int, dma, NULL, 0444);
68MODULE_PARM_DESC(dma2, "DMA2 # for " CRD_NAME " driver."); 68MODULE_PARM_DESC(dma2, "DMA2 # for " CRD_NAME " driver.");
69module_param_array(joystick_dac, int, NULL, 0444); 69module_param_array(joystick_dac, int, NULL, 0444);
70MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for " CRD_NAME " driver."); 70MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for " CRD_NAME " driver.");
diff --git a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c
index 77ac2fd723b4..beb52c0f70ea 100644
--- a/sound/isa/gus/gusextreme.c
+++ b/sound/isa/gus/gusextreme.c
@@ -66,21 +66,21 @@ module_param_array(id, charp, NULL, 0444);
66MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard."); 66MODULE_PARM_DESC(id, "ID string for " CRD_NAME " soundcard.");
67module_param_array(enable, bool, NULL, 0444); 67module_param_array(enable, bool, NULL, 0444);
68MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard."); 68MODULE_PARM_DESC(enable, "Enable " CRD_NAME " soundcard.");
69module_param_array(port, long, NULL, 0444); 69module_param_hw_array(port, long, ioport, NULL, 0444);
70MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver."); 70MODULE_PARM_DESC(port, "Port # for " CRD_NAME " driver.");
71module_param_array(gf1_port, long, NULL, 0444); 71module_param_hw_array(gf1_port, long, ioport, NULL, 0444);
72MODULE_PARM_DESC(gf1_port, "GF1 port # for " CRD_NAME " driver (optional)."); 72MODULE_PARM_DESC(gf1_port, "GF1 port # for " CRD_NAME " driver (optional).");
73module_param_array(mpu_port, long, NULL, 0444); 73module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
74MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver."); 74MODULE_PARM_DESC(mpu_port, "MPU-401 port # for " CRD_NAME " driver.");
75module_param_array(irq, int, NULL, 0444); 75module_param_hw_array(irq, int, irq, NULL, 0444);
76MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver."); 76MODULE_PARM_DESC(irq, "IRQ # for " CRD_NAME " driver.");
77module_param_array(mpu_irq, int, NULL, 0444); 77module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
78MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver."); 78MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for " CRD_NAME " driver.");
79module_param_array(gf1_irq, int, NULL, 0444); 79module_param_hw_array(gf1_irq, int, irq, NULL, 0444);
80MODULE_PARM_DESC(gf1_irq, "GF1 IRQ # for " CRD_NAME " driver."); 80MODULE_PARM_DESC(gf1_irq, "GF1 IRQ # for " CRD_NAME " driver.");
81module_param_array(dma8, int, NULL, 0444); 81module_param_hw_array(dma8, int, dma, NULL, 0444);
82MODULE_PARM_DESC(dma8, "8-bit DMA # for " CRD_NAME " driver."); 82MODULE_PARM_DESC(dma8, "8-bit DMA # for " CRD_NAME " driver.");
83module_param_array(dma1, int, NULL, 0444); 83module_param_hw_array(dma1, int, dma, NULL, 0444);
84MODULE_PARM_DESC(dma1, "GF1 DMA # for " CRD_NAME " driver."); 84MODULE_PARM_DESC(dma1, "GF1 DMA # for " CRD_NAME " driver.");
85module_param_array(joystick_dac, int, NULL, 0444); 85module_param_array(joystick_dac, int, NULL, 0444);
86MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for " CRD_NAME " driver."); 86MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for " CRD_NAME " driver.");
diff --git a/sound/isa/gus/gusmax.c b/sound/isa/gus/gusmax.c
index dd88c9d33492..63309a453140 100644
--- a/sound/isa/gus/gusmax.c
+++ b/sound/isa/gus/gusmax.c
@@ -56,13 +56,13 @@ module_param_array(id, charp, NULL, 0444);
56MODULE_PARM_DESC(id, "ID string for GUS MAX soundcard."); 56MODULE_PARM_DESC(id, "ID string for GUS MAX soundcard.");
57module_param_array(enable, bool, NULL, 0444); 57module_param_array(enable, bool, NULL, 0444);
58MODULE_PARM_DESC(enable, "Enable GUS MAX soundcard."); 58MODULE_PARM_DESC(enable, "Enable GUS MAX soundcard.");
59module_param_array(port, long, NULL, 0444); 59module_param_hw_array(port, long, ioport, NULL, 0444);
60MODULE_PARM_DESC(port, "Port # for GUS MAX driver."); 60MODULE_PARM_DESC(port, "Port # for GUS MAX driver.");
61module_param_array(irq, int, NULL, 0444); 61module_param_hw_array(irq, int, irq, NULL, 0444);
62MODULE_PARM_DESC(irq, "IRQ # for GUS MAX driver."); 62MODULE_PARM_DESC(irq, "IRQ # for GUS MAX driver.");
63module_param_array(dma1, int, NULL, 0444); 63module_param_hw_array(dma1, int, dma, NULL, 0444);
64MODULE_PARM_DESC(dma1, "DMA1 # for GUS MAX driver."); 64MODULE_PARM_DESC(dma1, "DMA1 # for GUS MAX driver.");
65module_param_array(dma2, int, NULL, 0444); 65module_param_hw_array(dma2, int, dma, NULL, 0444);
66MODULE_PARM_DESC(dma2, "DMA2 # for GUS MAX driver."); 66MODULE_PARM_DESC(dma2, "DMA2 # for GUS MAX driver.");
67module_param_array(joystick_dac, int, NULL, 0444); 67module_param_array(joystick_dac, int, NULL, 0444);
68MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS MAX driver."); 68MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for GUS MAX driver.");
diff --git a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c
index 70d0040484c8..0687b7ef3e53 100644
--- a/sound/isa/gus/interwave.c
+++ b/sound/isa/gus/interwave.c
@@ -92,17 +92,17 @@ MODULE_PARM_DESC(enable, "Enable InterWave soundcard.");
92module_param_array(isapnp, bool, NULL, 0444); 92module_param_array(isapnp, bool, NULL, 0444);
93MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard."); 93MODULE_PARM_DESC(isapnp, "ISA PnP detection for specified soundcard.");
94#endif 94#endif
95module_param_array(port, long, NULL, 0444); 95module_param_hw_array(port, long, ioport, NULL, 0444);
96MODULE_PARM_DESC(port, "Port # for InterWave driver."); 96MODULE_PARM_DESC(port, "Port # for InterWave driver.");
97#ifdef SNDRV_STB 97#ifdef SNDRV_STB
98module_param_array(port_tc, long, NULL, 0444); 98module_param_hw_array(port_tc, long, ioport, NULL, 0444);
99MODULE_PARM_DESC(port_tc, "Tone control (TEA6330T - i2c bus) port # for InterWave driver."); 99MODULE_PARM_DESC(port_tc, "Tone control (TEA6330T - i2c bus) port # for InterWave driver.");
100#endif 100#endif
101module_param_array(irq, int, NULL, 0444); 101module_param_hw_array(irq, int, irq, NULL, 0444);
102MODULE_PARM_DESC(irq, "IRQ # for InterWave driver."); 102MODULE_PARM_DESC(irq, "IRQ # for InterWave driver.");
103module_param_array(dma1, int, NULL, 0444); 103module_param_hw_array(dma1, int, dma, NULL, 0444);
104MODULE_PARM_DESC(dma1, "DMA1 # for InterWave driver."); 104MODULE_PARM_DESC(dma1, "DMA1 # for InterWave driver.");
105module_param_array(dma2, int, NULL, 0444); 105module_param_hw_array(dma2, int, dma, NULL, 0444);
106MODULE_PARM_DESC(dma2, "DMA2 # for InterWave driver."); 106MODULE_PARM_DESC(dma2, "DMA2 # for InterWave driver.");
107module_param_array(joystick_dac, int, NULL, 0444); 107module_param_array(joystick_dac, int, NULL, 0444);
108MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for InterWave driver."); 108MODULE_PARM_DESC(joystick_dac, "Joystick DAC level 0.59V-4.52V or 0.389V-2.98V for InterWave driver.");
diff --git a/sound/isa/msnd/msnd_pinnacle.c b/sound/isa/msnd/msnd_pinnacle.c
index 4c072666115d..ad4897337df5 100644
--- a/sound/isa/msnd/msnd_pinnacle.c
+++ b/sound/isa/msnd/msnd_pinnacle.c
@@ -800,22 +800,22 @@ MODULE_LICENSE("GPL");
800MODULE_FIRMWARE(INITCODEFILE); 800MODULE_FIRMWARE(INITCODEFILE);
801MODULE_FIRMWARE(PERMCODEFILE); 801MODULE_FIRMWARE(PERMCODEFILE);
802 802
803module_param_array(io, long, NULL, S_IRUGO); 803module_param_hw_array(io, long, ioport, NULL, S_IRUGO);
804MODULE_PARM_DESC(io, "IO port #"); 804MODULE_PARM_DESC(io, "IO port #");
805module_param_array(irq, int, NULL, S_IRUGO); 805module_param_hw_array(irq, int, irq, NULL, S_IRUGO);
806module_param_array(mem, long, NULL, S_IRUGO); 806module_param_hw_array(mem, long, iomem, NULL, S_IRUGO);
807module_param_array(write_ndelay, int, NULL, S_IRUGO); 807module_param_array(write_ndelay, int, NULL, S_IRUGO);
808module_param(calibrate_signal, int, S_IRUGO); 808module_param(calibrate_signal, int, S_IRUGO);
809#ifndef MSND_CLASSIC 809#ifndef MSND_CLASSIC
810module_param_array(digital, int, NULL, S_IRUGO); 810module_param_array(digital, int, NULL, S_IRUGO);
811module_param_array(cfg, long, NULL, S_IRUGO); 811module_param_hw_array(cfg, long, ioport, NULL, S_IRUGO);
812module_param_array(reset, int, 0, S_IRUGO); 812module_param_array(reset, int, 0, S_IRUGO);
813module_param_array(mpu_io, long, NULL, S_IRUGO); 813module_param_hw_array(mpu_io, long, ioport, NULL, S_IRUGO);
814module_param_array(mpu_irq, int, NULL, S_IRUGO); 814module_param_hw_array(mpu_irq, int, irq, NULL, S_IRUGO);
815module_param_array(ide_io0, long, NULL, S_IRUGO); 815module_param_hw_array(ide_io0, long, ioport, NULL, S_IRUGO);
816module_param_array(ide_io1, long, NULL, S_IRUGO); 816module_param_hw_array(ide_io1, long, ioport, NULL, S_IRUGO);
817module_param_array(ide_irq, int, NULL, S_IRUGO); 817module_param_hw_array(ide_irq, int, irq, NULL, S_IRUGO);
818module_param_array(joystick_io, long, NULL, S_IRUGO); 818module_param_hw_array(joystick_io, long, ioport, NULL, S_IRUGO);
819#endif 819#endif
820 820
821 821
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index ae133633a420..4098e3e0353d 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -69,21 +69,21 @@ MODULE_PARM_DESC(enable, "Enable OPL3-SA soundcard.");
69module_param_array(isapnp, bool, NULL, 0444); 69module_param_array(isapnp, bool, NULL, 0444);
70MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); 70MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
71#endif 71#endif
72module_param_array(port, long, NULL, 0444); 72module_param_hw_array(port, long, ioport, NULL, 0444);
73MODULE_PARM_DESC(port, "Port # for OPL3-SA driver."); 73MODULE_PARM_DESC(port, "Port # for OPL3-SA driver.");
74module_param_array(sb_port, long, NULL, 0444); 74module_param_hw_array(sb_port, long, ioport, NULL, 0444);
75MODULE_PARM_DESC(sb_port, "SB port # for OPL3-SA driver."); 75MODULE_PARM_DESC(sb_port, "SB port # for OPL3-SA driver.");
76module_param_array(wss_port, long, NULL, 0444); 76module_param_hw_array(wss_port, long, ioport, NULL, 0444);
77MODULE_PARM_DESC(wss_port, "WSS port # for OPL3-SA driver."); 77MODULE_PARM_DESC(wss_port, "WSS port # for OPL3-SA driver.");
78module_param_array(fm_port, long, NULL, 0444); 78module_param_hw_array(fm_port, long, ioport, NULL, 0444);
79MODULE_PARM_DESC(fm_port, "FM port # for OPL3-SA driver."); 79MODULE_PARM_DESC(fm_port, "FM port # for OPL3-SA driver.");
80module_param_array(midi_port, long, NULL, 0444); 80module_param_hw_array(midi_port, long, ioport, NULL, 0444);
81MODULE_PARM_DESC(midi_port, "MIDI port # for OPL3-SA driver."); 81MODULE_PARM_DESC(midi_port, "MIDI port # for OPL3-SA driver.");
82module_param_array(irq, int, NULL, 0444); 82module_param_hw_array(irq, int, irq, NULL, 0444);
83MODULE_PARM_DESC(irq, "IRQ # for OPL3-SA driver."); 83MODULE_PARM_DESC(irq, "IRQ # for OPL3-SA driver.");
84module_param_array(dma1, int, NULL, 0444); 84module_param_hw_array(dma1, int, dma, NULL, 0444);
85MODULE_PARM_DESC(dma1, "DMA1 # for OPL3-SA driver."); 85MODULE_PARM_DESC(dma1, "DMA1 # for OPL3-SA driver.");
86module_param_array(dma2, int, NULL, 0444); 86module_param_hw_array(dma2, int, dma, NULL, 0444);
87MODULE_PARM_DESC(dma2, "DMA2 # for OPL3-SA driver."); 87MODULE_PARM_DESC(dma2, "DMA2 # for OPL3-SA driver.");
88module_param_array(opl3sa3_ymode, int, NULL, 0444); 88module_param_array(opl3sa3_ymode, int, NULL, 0444);
89MODULE_PARM_DESC(opl3sa3_ymode, "Speaker size selection for 3D Enhancement mode: Desktop/Large Notebook/Small Notebook/HiFi."); 89MODULE_PARM_DESC(opl3sa3_ymode, "Speaker size selection for 3D Enhancement mode: Desktop/Large Notebook/Small Notebook/HiFi.");
diff --git a/sound/isa/opti9xx/miro.c b/sound/isa/opti9xx/miro.c
index 3a9067db1a84..bcbff56f060d 100644
--- a/sound/isa/opti9xx/miro.c
+++ b/sound/isa/opti9xx/miro.c
@@ -69,19 +69,19 @@ module_param(index, int, 0444);
69MODULE_PARM_DESC(index, "Index value for miro soundcard."); 69MODULE_PARM_DESC(index, "Index value for miro soundcard.");
70module_param(id, charp, 0444); 70module_param(id, charp, 0444);
71MODULE_PARM_DESC(id, "ID string for miro soundcard."); 71MODULE_PARM_DESC(id, "ID string for miro soundcard.");
72module_param(port, long, 0444); 72module_param_hw(port, long, ioport, 0444);
73MODULE_PARM_DESC(port, "WSS port # for miro driver."); 73MODULE_PARM_DESC(port, "WSS port # for miro driver.");
74module_param(mpu_port, long, 0444); 74module_param_hw(mpu_port, long, ioport, 0444);
75MODULE_PARM_DESC(mpu_port, "MPU-401 port # for miro driver."); 75MODULE_PARM_DESC(mpu_port, "MPU-401 port # for miro driver.");
76module_param(fm_port, long, 0444); 76module_param_hw(fm_port, long, ioport, 0444);
77MODULE_PARM_DESC(fm_port, "FM Port # for miro driver."); 77MODULE_PARM_DESC(fm_port, "FM Port # for miro driver.");
78module_param(irq, int, 0444); 78module_param_hw(irq, int, irq, 0444);
79MODULE_PARM_DESC(irq, "WSS irq # for miro driver."); 79MODULE_PARM_DESC(irq, "WSS irq # for miro driver.");
80module_param(mpu_irq, int, 0444); 80module_param_hw(mpu_irq, int, irq, 0444);
81MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for miro driver."); 81MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for miro driver.");
82module_param(dma1, int, 0444); 82module_param_hw(dma1, int, dma, 0444);
83MODULE_PARM_DESC(dma1, "1st dma # for miro driver."); 83MODULE_PARM_DESC(dma1, "1st dma # for miro driver.");
84module_param(dma2, int, 0444); 84module_param_hw(dma2, int, dma, 0444);
85MODULE_PARM_DESC(dma2, "2nd dma # for miro driver."); 85MODULE_PARM_DESC(dma2, "2nd dma # for miro driver.");
86module_param(wss, int, 0444); 86module_param(wss, int, 0444);
87MODULE_PARM_DESC(wss, "wss mode"); 87MODULE_PARM_DESC(wss, "wss mode");
diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
index 0a5266003786..ceddb392b1e3 100644
--- a/sound/isa/opti9xx/opti92x-ad1848.c
+++ b/sound/isa/opti9xx/opti92x-ad1848.c
@@ -88,20 +88,20 @@ MODULE_PARM_DESC(id, "ID string for opti9xx based soundcard.");
88module_param(isapnp, bool, 0444); 88module_param(isapnp, bool, 0444);
89MODULE_PARM_DESC(isapnp, "Enable ISA PnP detection for specified soundcard."); 89MODULE_PARM_DESC(isapnp, "Enable ISA PnP detection for specified soundcard.");
90#endif 90#endif
91module_param(port, long, 0444); 91module_param_hw(port, long, ioport, 0444);
92MODULE_PARM_DESC(port, "WSS port # for opti9xx driver."); 92MODULE_PARM_DESC(port, "WSS port # for opti9xx driver.");
93module_param(mpu_port, long, 0444); 93module_param_hw(mpu_port, long, ioport, 0444);
94MODULE_PARM_DESC(mpu_port, "MPU-401 port # for opti9xx driver."); 94MODULE_PARM_DESC(mpu_port, "MPU-401 port # for opti9xx driver.");
95module_param(fm_port, long, 0444); 95module_param_hw(fm_port, long, ioport, 0444);
96MODULE_PARM_DESC(fm_port, "FM port # for opti9xx driver."); 96MODULE_PARM_DESC(fm_port, "FM port # for opti9xx driver.");
97module_param(irq, int, 0444); 97module_param_hw(irq, int, irq, 0444);
98MODULE_PARM_DESC(irq, "WSS irq # for opti9xx driver."); 98MODULE_PARM_DESC(irq, "WSS irq # for opti9xx driver.");
99module_param(mpu_irq, int, 0444); 99module_param_hw(mpu_irq, int, irq, 0444);
100MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for opti9xx driver."); 100MODULE_PARM_DESC(mpu_irq, "MPU-401 irq # for opti9xx driver.");
101module_param(dma1, int, 0444); 101module_param_hw(dma1, int, dma, 0444);
102MODULE_PARM_DESC(dma1, "1st dma # for opti9xx driver."); 102MODULE_PARM_DESC(dma1, "1st dma # for opti9xx driver.");
103#if defined(CS4231) || defined(OPTi93X) 103#if defined(CS4231) || defined(OPTi93X)
104module_param(dma2, int, 0444); 104module_param_hw(dma2, int, dma, 0444);
105MODULE_PARM_DESC(dma2, "2nd dma # for opti9xx driver."); 105MODULE_PARM_DESC(dma2, "2nd dma # for opti9xx driver.");
106#endif /* CS4231 || OPTi93X */ 106#endif /* CS4231 || OPTi93X */
107 107
diff --git a/sound/isa/sb/jazz16.c b/sound/isa/sb/jazz16.c
index 4d909971eedb..bfa0055e1fd6 100644
--- a/sound/isa/sb/jazz16.c
+++ b/sound/isa/sb/jazz16.c
@@ -50,17 +50,17 @@ module_param_array(id, charp, NULL, 0444);
50MODULE_PARM_DESC(id, "ID string for Media Vision Jazz16 based soundcard."); 50MODULE_PARM_DESC(id, "ID string for Media Vision Jazz16 based soundcard.");
51module_param_array(enable, bool, NULL, 0444); 51module_param_array(enable, bool, NULL, 0444);
52MODULE_PARM_DESC(enable, "Enable Media Vision Jazz16 based soundcard."); 52MODULE_PARM_DESC(enable, "Enable Media Vision Jazz16 based soundcard.");
53module_param_array(port, long, NULL, 0444); 53module_param_hw_array(port, long, ioport, NULL, 0444);
54MODULE_PARM_DESC(port, "Port # for jazz16 driver."); 54MODULE_PARM_DESC(port, "Port # for jazz16 driver.");
55module_param_array(mpu_port, long, NULL, 0444); 55module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
56MODULE_PARM_DESC(mpu_port, "MPU-401 port # for jazz16 driver."); 56MODULE_PARM_DESC(mpu_port, "MPU-401 port # for jazz16 driver.");
57module_param_array(irq, int, NULL, 0444); 57module_param_hw_array(irq, int, irq, NULL, 0444);
58MODULE_PARM_DESC(irq, "IRQ # for jazz16 driver."); 58MODULE_PARM_DESC(irq, "IRQ # for jazz16 driver.");
59module_param_array(mpu_irq, int, NULL, 0444); 59module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
60MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for jazz16 driver."); 60MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for jazz16 driver.");
61module_param_array(dma8, int, NULL, 0444); 61module_param_hw_array(dma8, int, dma, NULL, 0444);
62MODULE_PARM_DESC(dma8, "DMA8 # for jazz16 driver."); 62MODULE_PARM_DESC(dma8, "DMA8 # for jazz16 driver.");
63module_param_array(dma16, int, NULL, 0444); 63module_param_hw_array(dma16, int, dma, NULL, 0444);
64MODULE_PARM_DESC(dma16, "DMA16 # for jazz16 driver."); 64MODULE_PARM_DESC(dma16, "DMA16 # for jazz16 driver.");
65 65
66#define SB_JAZZ16_WAKEUP 0xaf 66#define SB_JAZZ16_WAKEUP 0xaf
diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
index 4a7d7c89808f..3b2e4f405ff2 100644
--- a/sound/isa/sb/sb16.c
+++ b/sound/isa/sb/sb16.c
@@ -99,21 +99,21 @@ MODULE_PARM_DESC(enable, "Enable SoundBlaster 16 soundcard.");
99module_param_array(isapnp, bool, NULL, 0444); 99module_param_array(isapnp, bool, NULL, 0444);
100MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard."); 100MODULE_PARM_DESC(isapnp, "PnP detection for specified soundcard.");
101#endif 101#endif
102module_param_array(port, long, NULL, 0444); 102module_param_hw_array(port, long, ioport, NULL, 0444);
103MODULE_PARM_DESC(port, "Port # for SB16 driver."); 103MODULE_PARM_DESC(port, "Port # for SB16 driver.");
104module_param_array(mpu_port, long, NULL, 0444); 104module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
105MODULE_PARM_DESC(mpu_port, "MPU-401 port # for SB16 driver."); 105MODULE_PARM_DESC(mpu_port, "MPU-401 port # for SB16 driver.");
106module_param_array(fm_port, long, NULL, 0444); 106module_param_hw_array(fm_port, long, ioport, NULL, 0444);
107MODULE_PARM_DESC(fm_port, "FM port # for SB16 PnP driver."); 107MODULE_PARM_DESC(fm_port, "FM port # for SB16 PnP driver.");
108#ifdef SNDRV_SBAWE_EMU8000 108#ifdef SNDRV_SBAWE_EMU8000
109module_param_array(awe_port, long, NULL, 0444); 109module_param_hw_array(awe_port, long, ioport, NULL, 0444);
110MODULE_PARM_DESC(awe_port, "AWE port # for SB16 PnP driver."); 110MODULE_PARM_DESC(awe_port, "AWE port # for SB16 PnP driver.");
111#endif 111#endif
112module_param_array(irq, int, NULL, 0444); 112module_param_hw_array(irq, int, irq, NULL, 0444);
113MODULE_PARM_DESC(irq, "IRQ # for SB16 driver."); 113MODULE_PARM_DESC(irq, "IRQ # for SB16 driver.");
114module_param_array(dma8, int, NULL, 0444); 114module_param_hw_array(dma8, int, dma, NULL, 0444);
115MODULE_PARM_DESC(dma8, "8-bit DMA # for SB16 driver."); 115MODULE_PARM_DESC(dma8, "8-bit DMA # for SB16 driver.");
116module_param_array(dma16, int, NULL, 0444); 116module_param_hw_array(dma16, int, dma, NULL, 0444);
117MODULE_PARM_DESC(dma16, "16-bit DMA # for SB16 driver."); 117MODULE_PARM_DESC(dma16, "16-bit DMA # for SB16 driver.");
118module_param_array(mic_agc, int, NULL, 0444); 118module_param_array(mic_agc, int, NULL, 0444);
119MODULE_PARM_DESC(mic_agc, "Mic Auto-Gain-Control switch."); 119MODULE_PARM_DESC(mic_agc, "Mic Auto-Gain-Control switch.");
diff --git a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c
index ad42d2364199..d77dcba276b5 100644
--- a/sound/isa/sb/sb8.c
+++ b/sound/isa/sb/sb8.c
@@ -47,11 +47,11 @@ module_param_array(id, charp, NULL, 0444);
47MODULE_PARM_DESC(id, "ID string for Sound Blaster soundcard."); 47MODULE_PARM_DESC(id, "ID string for Sound Blaster soundcard.");
48module_param_array(enable, bool, NULL, 0444); 48module_param_array(enable, bool, NULL, 0444);
49MODULE_PARM_DESC(enable, "Enable Sound Blaster soundcard."); 49MODULE_PARM_DESC(enable, "Enable Sound Blaster soundcard.");
50module_param_array(port, long, NULL, 0444); 50module_param_hw_array(port, long, ioport, NULL, 0444);
51MODULE_PARM_DESC(port, "Port # for SB8 driver."); 51MODULE_PARM_DESC(port, "Port # for SB8 driver.");
52module_param_array(irq, int, NULL, 0444); 52module_param_hw_array(irq, int, irq, NULL, 0444);
53MODULE_PARM_DESC(irq, "IRQ # for SB8 driver."); 53MODULE_PARM_DESC(irq, "IRQ # for SB8 driver.");
54module_param_array(dma8, int, NULL, 0444); 54module_param_hw_array(dma8, int, dma, NULL, 0444);
55MODULE_PARM_DESC(dma8, "8-bit DMA # for SB8 driver."); 55MODULE_PARM_DESC(dma8, "8-bit DMA # for SB8 driver.");
56 56
57struct snd_sb8 { 57struct snd_sb8 {
diff --git a/sound/isa/sc6000.c b/sound/isa/sc6000.c
index b61a6633d8f2..c09d9b914efe 100644
--- a/sound/isa/sc6000.c
+++ b/sound/isa/sc6000.c
@@ -64,17 +64,17 @@ module_param_array(id, charp, NULL, 0444);
64MODULE_PARM_DESC(id, "ID string for sc-6000 based soundcard."); 64MODULE_PARM_DESC(id, "ID string for sc-6000 based soundcard.");
65module_param_array(enable, bool, NULL, 0444); 65module_param_array(enable, bool, NULL, 0444);
66MODULE_PARM_DESC(enable, "Enable sc-6000 based soundcard."); 66MODULE_PARM_DESC(enable, "Enable sc-6000 based soundcard.");
67module_param_array(port, long, NULL, 0444); 67module_param_hw_array(port, long, ioport, NULL, 0444);
68MODULE_PARM_DESC(port, "Port # for sc-6000 driver."); 68MODULE_PARM_DESC(port, "Port # for sc-6000 driver.");
69module_param_array(mss_port, long, NULL, 0444); 69module_param_hw_array(mss_port, long, ioport, NULL, 0444);
70MODULE_PARM_DESC(mss_port, "MSS Port # for sc-6000 driver."); 70MODULE_PARM_DESC(mss_port, "MSS Port # for sc-6000 driver.");
71module_param_array(mpu_port, long, NULL, 0444); 71module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
72MODULE_PARM_DESC(mpu_port, "MPU-401 port # for sc-6000 driver."); 72MODULE_PARM_DESC(mpu_port, "MPU-401 port # for sc-6000 driver.");
73module_param_array(irq, int, NULL, 0444); 73module_param_hw_array(irq, int, irq, NULL, 0444);
74MODULE_PARM_DESC(irq, "IRQ # for sc-6000 driver."); 74MODULE_PARM_DESC(irq, "IRQ # for sc-6000 driver.");
75module_param_array(mpu_irq, int, NULL, 0444); 75module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
76MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for sc-6000 driver."); 76MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ # for sc-6000 driver.");
77module_param_array(dma, int, NULL, 0444); 77module_param_hw_array(dma, int, dma, NULL, 0444);
78MODULE_PARM_DESC(dma, "DMA # for sc-6000 driver."); 78MODULE_PARM_DESC(dma, "DMA # for sc-6000 driver.");
79module_param_array(joystick, bool, NULL, 0444); 79module_param_array(joystick, bool, NULL, 0444);
80MODULE_PARM_DESC(joystick, "Enable gameport."); 80MODULE_PARM_DESC(joystick, "Enable gameport.");
diff --git a/sound/isa/sscape.c b/sound/isa/sscape.c
index fdcfa29e2205..54f5758a1bb3 100644
--- a/sound/isa/sscape.c
+++ b/sound/isa/sscape.c
@@ -63,22 +63,22 @@ MODULE_PARM_DESC(index, "Index number for SoundScape soundcard");
63module_param_array(id, charp, NULL, 0444); 63module_param_array(id, charp, NULL, 0444);
64MODULE_PARM_DESC(id, "Description for SoundScape card"); 64MODULE_PARM_DESC(id, "Description for SoundScape card");
65 65
66module_param_array(port, long, NULL, 0444); 66module_param_hw_array(port, long, ioport, NULL, 0444);
67MODULE_PARM_DESC(port, "Port # for SoundScape driver."); 67MODULE_PARM_DESC(port, "Port # for SoundScape driver.");
68 68
69module_param_array(wss_port, long, NULL, 0444); 69module_param_hw_array(wss_port, long, ioport, NULL, 0444);
70MODULE_PARM_DESC(wss_port, "WSS Port # for SoundScape driver."); 70MODULE_PARM_DESC(wss_port, "WSS Port # for SoundScape driver.");
71 71
72module_param_array(irq, int, NULL, 0444); 72module_param_hw_array(irq, int, irq, NULL, 0444);
73MODULE_PARM_DESC(irq, "IRQ # for SoundScape driver."); 73MODULE_PARM_DESC(irq, "IRQ # for SoundScape driver.");
74 74
75module_param_array(mpu_irq, int, NULL, 0444); 75module_param_hw_array(mpu_irq, int, irq, NULL, 0444);
76MODULE_PARM_DESC(mpu_irq, "MPU401 IRQ # for SoundScape driver."); 76MODULE_PARM_DESC(mpu_irq, "MPU401 IRQ # for SoundScape driver.");
77 77
78module_param_array(dma, int, NULL, 0444); 78module_param_hw_array(dma, int, dma, NULL, 0444);
79MODULE_PARM_DESC(dma, "DMA # for SoundScape driver."); 79MODULE_PARM_DESC(dma, "DMA # for SoundScape driver.");
80 80
81module_param_array(dma2, int, NULL, 0444); 81module_param_hw_array(dma2, int, dma, NULL, 0444);
82MODULE_PARM_DESC(dma2, "DMA2 # for SoundScape driver."); 82MODULE_PARM_DESC(dma2, "DMA2 # for SoundScape driver.");
83 83
84module_param_array(joystick, bool, NULL, 0444); 84module_param_array(joystick, bool, NULL, 0444);
diff --git a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c
index a0987a57c8a9..da4e9a85f0af 100644
--- a/sound/isa/wavefront/wavefront.c
+++ b/sound/isa/wavefront/wavefront.c
@@ -63,23 +63,23 @@ MODULE_PARM_DESC(enable, "Enable WaveFront soundcard.");
63module_param_array(isapnp, bool, NULL, 0444); 63module_param_array(isapnp, bool, NULL, 0444);
64MODULE_PARM_DESC(isapnp, "ISA PnP detection for WaveFront soundcards."); 64MODULE_PARM_DESC(isapnp, "ISA PnP detection for WaveFront soundcards.");
65#endif 65#endif
66module_param_array(cs4232_pcm_port, long, NULL, 0444); 66module_param_hw_array(cs4232_pcm_port, long, ioport, NULL, 0444);
67MODULE_PARM_DESC(cs4232_pcm_port, "Port # for CS4232 PCM interface."); 67MODULE_PARM_DESC(cs4232_pcm_port, "Port # for CS4232 PCM interface.");
68module_param_array(cs4232_pcm_irq, int, NULL, 0444); 68module_param_hw_array(cs4232_pcm_irq, int, irq, NULL, 0444);
69MODULE_PARM_DESC(cs4232_pcm_irq, "IRQ # for CS4232 PCM interface."); 69MODULE_PARM_DESC(cs4232_pcm_irq, "IRQ # for CS4232 PCM interface.");
70module_param_array(dma1, int, NULL, 0444); 70module_param_hw_array(dma1, int, dma, NULL, 0444);
71MODULE_PARM_DESC(dma1, "DMA1 # for CS4232 PCM interface."); 71MODULE_PARM_DESC(dma1, "DMA1 # for CS4232 PCM interface.");
72module_param_array(dma2, int, NULL, 0444); 72module_param_hw_array(dma2, int, dma, NULL, 0444);
73MODULE_PARM_DESC(dma2, "DMA2 # for CS4232 PCM interface."); 73MODULE_PARM_DESC(dma2, "DMA2 # for CS4232 PCM interface.");
74module_param_array(cs4232_mpu_port, long, NULL, 0444); 74module_param_hw_array(cs4232_mpu_port, long, ioport, NULL, 0444);
75MODULE_PARM_DESC(cs4232_mpu_port, "port # for CS4232 MPU-401 interface."); 75MODULE_PARM_DESC(cs4232_mpu_port, "port # for CS4232 MPU-401 interface.");
76module_param_array(cs4232_mpu_irq, int, NULL, 0444); 76module_param_hw_array(cs4232_mpu_irq, int, irq, NULL, 0444);
77MODULE_PARM_DESC(cs4232_mpu_irq, "IRQ # for CS4232 MPU-401 interface."); 77MODULE_PARM_DESC(cs4232_mpu_irq, "IRQ # for CS4232 MPU-401 interface.");
78module_param_array(ics2115_irq, int, NULL, 0444); 78module_param_hw_array(ics2115_irq, int, irq, NULL, 0444);
79MODULE_PARM_DESC(ics2115_irq, "IRQ # for ICS2115."); 79MODULE_PARM_DESC(ics2115_irq, "IRQ # for ICS2115.");
80module_param_array(ics2115_port, long, NULL, 0444); 80module_param_hw_array(ics2115_port, long, ioport, NULL, 0444);
81MODULE_PARM_DESC(ics2115_port, "Port # for ICS2115."); 81MODULE_PARM_DESC(ics2115_port, "Port # for ICS2115.");
82module_param_array(fm_port, long, NULL, 0444); 82module_param_hw_array(fm_port, long, ioport, NULL, 0444);
83MODULE_PARM_DESC(fm_port, "FM port #."); 83MODULE_PARM_DESC(fm_port, "FM port #.");
84module_param_array(use_cs4232_midi, bool, NULL, 0444); 84module_param_array(use_cs4232_midi, bool, NULL, 0444);
85MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly located inside your computer)"); 85MODULE_PARM_DESC(use_cs4232_midi, "Use CS4232 MPU-401 interface (inaccessibly located inside your computer)");
diff --git a/sound/oss/ad1848.c b/sound/oss/ad1848.c
index f6156d8169d0..2421f59cf279 100644
--- a/sound/oss/ad1848.c
+++ b/sound/oss/ad1848.c
@@ -2805,10 +2805,10 @@ static int __initdata dma = -1;
2805static int __initdata dma2 = -1; 2805static int __initdata dma2 = -1;
2806static int __initdata type = 0; 2806static int __initdata type = 0;
2807 2807
2808module_param(io, int, 0); /* I/O for a raw AD1848 card */ 2808module_param_hw(io, int, ioport, 0); /* I/O for a raw AD1848 card */
2809module_param(irq, int, 0); /* IRQ to use */ 2809module_param_hw(irq, int, irq, 0); /* IRQ to use */
2810module_param(dma, int, 0); /* First DMA channel */ 2810module_param_hw(dma, int, dma, 0); /* First DMA channel */
2811module_param(dma2, int, 0); /* Second DMA channel */ 2811module_param_hw(dma2, int, dma, 0); /* Second DMA channel */
2812module_param(type, int, 0); /* Card type */ 2812module_param(type, int, 0); /* Card type */
2813module_param(deskpro_xl, bool, 0); /* Special magic for Deskpro XL boxen */ 2813module_param(deskpro_xl, bool, 0); /* Special magic for Deskpro XL boxen */
2814module_param(deskpro_m, bool, 0); /* Special magic for Deskpro M box */ 2814module_param(deskpro_m, bool, 0); /* Special magic for Deskpro M box */
diff --git a/sound/oss/aedsp16.c b/sound/oss/aedsp16.c
index bb477d5c8528..f058ed6bdb69 100644
--- a/sound/oss/aedsp16.c
+++ b/sound/oss/aedsp16.c
@@ -1303,17 +1303,17 @@ static int __initdata mpu_irq = -1;
1303static int __initdata mss_base = -1; 1303static int __initdata mss_base = -1;
1304static int __initdata mpu_base = -1; 1304static int __initdata mpu_base = -1;
1305 1305
1306module_param(io, int, 0); 1306module_param_hw(io, int, ioport, 0);
1307MODULE_PARM_DESC(io, "I/O base address (0x220 0x240)"); 1307MODULE_PARM_DESC(io, "I/O base address (0x220 0x240)");
1308module_param(irq, int, 0); 1308module_param_hw(irq, int, irq, 0);
1309MODULE_PARM_DESC(irq, "IRQ line (5 7 9 10 11)"); 1309MODULE_PARM_DESC(irq, "IRQ line (5 7 9 10 11)");
1310module_param(dma, int, 0); 1310module_param_hw(dma, int, dma, 0);
1311MODULE_PARM_DESC(dma, "dma line (0 1 3)"); 1311MODULE_PARM_DESC(dma, "dma line (0 1 3)");
1312module_param(mpu_irq, int, 0); 1312module_param_hw(mpu_irq, int, irq, 0);
1313MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ line (5 7 9 10 0)"); 1313MODULE_PARM_DESC(mpu_irq, "MPU-401 IRQ line (5 7 9 10 0)");
1314module_param(mss_base, int, 0); 1314module_param_hw(mss_base, int, ioport, 0);
1315MODULE_PARM_DESC(mss_base, "MSS emulation I/O base address (0x530 0xE80)"); 1315MODULE_PARM_DESC(mss_base, "MSS emulation I/O base address (0x530 0xE80)");
1316module_param(mpu_base, int, 0); 1316module_param_hw(mpu_base, int, ioport, 0);
1317MODULE_PARM_DESC(mpu_base,"MPU-401 I/O base address (0x300 0x310 0x320 0x330)"); 1317MODULE_PARM_DESC(mpu_base,"MPU-401 I/O base address (0x300 0x310 0x320 0x330)");
1318MODULE_AUTHOR("Riccardo Facchetti <fizban@tin.it>"); 1318MODULE_AUTHOR("Riccardo Facchetti <fizban@tin.it>");
1319MODULE_DESCRIPTION("Audio Excel DSP 16 Driver Version " VERSION); 1319MODULE_DESCRIPTION("Audio Excel DSP 16 Driver Version " VERSION);
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c
index 862735005b43..20e8fa46f647 100644
--- a/sound/oss/mpu401.c
+++ b/sound/oss/mpu401.c
@@ -1748,8 +1748,8 @@ static struct address_info cfg;
1748static int io = -1; 1748static int io = -1;
1749static int irq = -1; 1749static int irq = -1;
1750 1750
1751module_param(irq, int, 0); 1751module_param_hw(irq, int, irq, 0);
1752module_param(io, int, 0); 1752module_param_hw(io, int, ioport, 0);
1753 1753
1754static int __init init_mpu401(void) 1754static int __init init_mpu401(void)
1755{ 1755{
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index f34ec01d2239..d2abc2cf3213 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -1727,22 +1727,22 @@ static int
1727calibrate_signal __initdata = CONFIG_MSND_CALSIGNAL; 1727calibrate_signal __initdata = CONFIG_MSND_CALSIGNAL;
1728#endif /* MODULE */ 1728#endif /* MODULE */
1729 1729
1730module_param (io, int, 0); 1730module_param_hw (io, int, ioport, 0);
1731module_param (irq, int, 0); 1731module_param_hw (irq, int, irq, 0);
1732module_param (mem, int, 0); 1732module_param_hw (mem, int, iomem, 0);
1733module_param (write_ndelay, int, 0); 1733module_param (write_ndelay, int, 0);
1734module_param (fifosize, int, 0); 1734module_param (fifosize, int, 0);
1735module_param (calibrate_signal, int, 0); 1735module_param (calibrate_signal, int, 0);
1736#ifndef MSND_CLASSIC 1736#ifndef MSND_CLASSIC
1737module_param (digital, bool, 0); 1737module_param (digital, bool, 0);
1738module_param (cfg, int, 0); 1738module_param_hw (cfg, int, ioport, 0);
1739module_param (reset, int, 0); 1739module_param (reset, int, 0);
1740module_param (mpu_io, int, 0); 1740module_param_hw (mpu_io, int, ioport, 0);
1741module_param (mpu_irq, int, 0); 1741module_param_hw (mpu_irq, int, irq, 0);
1742module_param (ide_io0, int, 0); 1742module_param_hw (ide_io0, int, ioport, 0);
1743module_param (ide_io1, int, 0); 1743module_param_hw (ide_io1, int, ioport, 0);
1744module_param (ide_irq, int, 0); 1744module_param_hw (ide_irq, int, irq, 0);
1745module_param (joystick_io, int, 0); 1745module_param_hw (joystick_io, int, ioport, 0);
1746#endif 1746#endif
1747 1747
1748static int __init msnd_init(void) 1748static int __init msnd_init(void)
diff --git a/sound/oss/opl3.c b/sound/oss/opl3.c
index b6d19adf8f41..f0f5b5be6314 100644
--- a/sound/oss/opl3.c
+++ b/sound/oss/opl3.c
@@ -1200,7 +1200,7 @@ static int me;
1200 1200
1201static int io = -1; 1201static int io = -1;
1202 1202
1203module_param(io, int, 0); 1203module_param_hw(io, int, ioport, 0);
1204 1204
1205static int __init init_opl3 (void) 1205static int __init init_opl3 (void)
1206{ 1206{
diff --git a/sound/oss/pas2_card.c b/sound/oss/pas2_card.c
index b07954a79536..769fca692d2a 100644
--- a/sound/oss/pas2_card.c
+++ b/sound/oss/pas2_card.c
@@ -383,15 +383,15 @@ static int __initdata sb_irq = -1;
383static int __initdata sb_dma = -1; 383static int __initdata sb_dma = -1;
384static int __initdata sb_dma16 = -1; 384static int __initdata sb_dma16 = -1;
385 385
386module_param(io, int, 0); 386module_param_hw(io, int, ioport, 0);
387module_param(irq, int, 0); 387module_param_hw(irq, int, irq, 0);
388module_param(dma, int, 0); 388module_param_hw(dma, int, dma, 0);
389module_param(dma16, int, 0); 389module_param_hw(dma16, int, dma, 0);
390 390
391module_param(sb_io, int, 0); 391module_param_hw(sb_io, int, ioport, 0);
392module_param(sb_irq, int, 0); 392module_param_hw(sb_irq, int, irq, 0);
393module_param(sb_dma, int, 0); 393module_param_hw(sb_dma, int, dma, 0);
394module_param(sb_dma16, int, 0); 394module_param_hw(sb_dma16, int, dma, 0);
395 395
396module_param(joystick, bool, 0); 396module_param(joystick, bool, 0);
397module_param(symphony, bool, 0); 397module_param(symphony, bool, 0);
diff --git a/sound/oss/pss.c b/sound/oss/pss.c
index 81314f9e2ccb..33c3a442e162 100644
--- a/sound/oss/pss.c
+++ b/sound/oss/pss.c
@@ -1139,19 +1139,19 @@ static bool pss_no_sound = 0; /* Just configure non-sound components */
1139static bool pss_keep_settings = 1; /* Keep hardware settings at module exit */ 1139static bool pss_keep_settings = 1; /* Keep hardware settings at module exit */
1140static char *pss_firmware = "/etc/sound/pss_synth"; 1140static char *pss_firmware = "/etc/sound/pss_synth";
1141 1141
1142module_param(pss_io, int, 0); 1142module_param_hw(pss_io, int, ioport, 0);
1143MODULE_PARM_DESC(pss_io, "Set i/o base of PSS card (probably 0x220 or 0x240)"); 1143MODULE_PARM_DESC(pss_io, "Set i/o base of PSS card (probably 0x220 or 0x240)");
1144module_param(mss_io, int, 0); 1144module_param_hw(mss_io, int, ioport, 0);
1145MODULE_PARM_DESC(mss_io, "Set WSS (audio) i/o base (0x530, 0x604, 0xE80, 0xF40, or other. Address must end in 0 or 4 and must be from 0x100 to 0xFF4)"); 1145MODULE_PARM_DESC(mss_io, "Set WSS (audio) i/o base (0x530, 0x604, 0xE80, 0xF40, or other. Address must end in 0 or 4 and must be from 0x100 to 0xFF4)");
1146module_param(mss_irq, int, 0); 1146module_param_hw(mss_irq, int, irq, 0);
1147MODULE_PARM_DESC(mss_irq, "Set WSS (audio) IRQ (3, 5, 7, 9, 10, 11, 12)"); 1147MODULE_PARM_DESC(mss_irq, "Set WSS (audio) IRQ (3, 5, 7, 9, 10, 11, 12)");
1148module_param(mss_dma, int, 0); 1148module_param_hw(mss_dma, int, dma, 0);
1149MODULE_PARM_DESC(mss_dma, "Set WSS (audio) DMA (0, 1, 3)"); 1149MODULE_PARM_DESC(mss_dma, "Set WSS (audio) DMA (0, 1, 3)");
1150module_param(mpu_io, int, 0); 1150module_param_hw(mpu_io, int, ioport, 0);
1151MODULE_PARM_DESC(mpu_io, "Set MIDI i/o base (0x330 or other. Address must be on 4 location boundaries and must be from 0x100 to 0xFFC)"); 1151MODULE_PARM_DESC(mpu_io, "Set MIDI i/o base (0x330 or other. Address must be on 4 location boundaries and must be from 0x100 to 0xFFC)");
1152module_param(mpu_irq, int, 0); 1152module_param_hw(mpu_irq, int, irq, 0);
1153MODULE_PARM_DESC(mpu_irq, "Set MIDI IRQ (3, 5, 7, 9, 10, 11, 12)"); 1153MODULE_PARM_DESC(mpu_irq, "Set MIDI IRQ (3, 5, 7, 9, 10, 11, 12)");
1154module_param(pss_cdrom_port, int, 0); 1154module_param_hw(pss_cdrom_port, int, ioport, 0);
1155MODULE_PARM_DESC(pss_cdrom_port, "Set the PSS CDROM port i/o base (0x340 or other)"); 1155MODULE_PARM_DESC(pss_cdrom_port, "Set the PSS CDROM port i/o base (0x340 or other)");
1156module_param(pss_enable_joystick, bool, 0); 1156module_param(pss_enable_joystick, bool, 0);
1157MODULE_PARM_DESC(pss_enable_joystick, "Enables the PSS joystick port (1 to enable, 0 to disable)"); 1157MODULE_PARM_DESC(pss_enable_joystick, "Enables the PSS joystick port (1 to enable, 0 to disable)");
diff --git a/sound/oss/sb_card.c b/sound/oss/sb_card.c
index fb5d7250de38..2a92cfe6cfe9 100644
--- a/sound/oss/sb_card.c
+++ b/sound/oss/sb_card.c
@@ -61,15 +61,15 @@ static int __initdata uart401 = 0;
61static int __initdata pnp = 0; 61static int __initdata pnp = 0;
62#endif 62#endif
63 63
64module_param(io, int, 000); 64module_param_hw(io, int, ioport, 000);
65MODULE_PARM_DESC(io, "Soundblaster i/o base address (0x220,0x240,0x260,0x280)"); 65MODULE_PARM_DESC(io, "Soundblaster i/o base address (0x220,0x240,0x260,0x280)");
66module_param(irq, int, 000); 66module_param_hw(irq, int, irq, 000);
67MODULE_PARM_DESC(irq, "IRQ (5,7,9,10)"); 67MODULE_PARM_DESC(irq, "IRQ (5,7,9,10)");
68module_param(dma, int, 000); 68module_param_hw(dma, int, dma, 000);
69MODULE_PARM_DESC(dma, "8-bit DMA channel (0,1,3)"); 69MODULE_PARM_DESC(dma, "8-bit DMA channel (0,1,3)");
70module_param(dma16, int, 000); 70module_param_hw(dma16, int, dma, 000);
71MODULE_PARM_DESC(dma16, "16-bit DMA channel (5,6,7)"); 71MODULE_PARM_DESC(dma16, "16-bit DMA channel (5,6,7)");
72module_param(mpu_io, int, 000); 72module_param_hw(mpu_io, int, ioport, 000);
73MODULE_PARM_DESC(mpu_io, "MPU base address"); 73MODULE_PARM_DESC(mpu_io, "MPU base address");
74module_param(type, int, 000); 74module_param(type, int, 000);
75MODULE_PARM_DESC(type, "You can set this to specific card type (doesn't " \ 75MODULE_PARM_DESC(type, "You can set this to specific card type (doesn't " \
diff --git a/sound/oss/trix.c b/sound/oss/trix.c
index 3c494dc93b93..a57bc635d758 100644
--- a/sound/oss/trix.c
+++ b/sound/oss/trix.c
@@ -413,15 +413,15 @@ static int __initdata sb_irq = -1;
413static int __initdata mpu_io = -1; 413static int __initdata mpu_io = -1;
414static int __initdata mpu_irq = -1; 414static int __initdata mpu_irq = -1;
415 415
416module_param(io, int, 0); 416module_param_hw(io, int, ioport, 0);
417module_param(irq, int, 0); 417module_param_hw(irq, int, irq, 0);
418module_param(dma, int, 0); 418module_param_hw(dma, int, dma, 0);
419module_param(dma2, int, 0); 419module_param_hw(dma2, int, dma, 0);
420module_param(sb_io, int, 0); 420module_param_hw(sb_io, int, ioport, 0);
421module_param(sb_dma, int, 0); 421module_param_hw(sb_dma, int, dma, 0);
422module_param(sb_irq, int, 0); 422module_param_hw(sb_irq, int, irq, 0);
423module_param(mpu_io, int, 0); 423module_param_hw(mpu_io, int, ioport, 0);
424module_param(mpu_irq, int, 0); 424module_param_hw(mpu_irq, int, irq, 0);
425module_param(joystick, bool, 0); 425module_param(joystick, bool, 0);
426 426
427static int __init init_trix(void) 427static int __init init_trix(void)
diff --git a/sound/oss/uart401.c b/sound/oss/uart401.c
index dae4d4344407..83dcc85b8688 100644
--- a/sound/oss/uart401.c
+++ b/sound/oss/uart401.c
@@ -429,8 +429,8 @@ static struct address_info cfg_mpu;
429static int io = -1; 429static int io = -1;
430static int irq = -1; 430static int irq = -1;
431 431
432module_param(io, int, 0444); 432module_param_hw(io, int, ioport, 0444);
433module_param(irq, int, 0444); 433module_param_hw(irq, int, irq, 0444);
434 434
435 435
436static int __init init_uart401(void) 436static int __init init_uart401(void)
diff --git a/sound/oss/uart6850.c b/sound/oss/uart6850.c
index 1079133dd6ab..eda32d7eddbd 100644
--- a/sound/oss/uart6850.c
+++ b/sound/oss/uart6850.c
@@ -315,8 +315,8 @@ static struct address_info cfg_mpu;
315static int __initdata io = -1; 315static int __initdata io = -1;
316static int __initdata irq = -1; 316static int __initdata irq = -1;
317 317
318module_param(io, int, 0); 318module_param_hw(io, int, ioport, 0);
319module_param(irq, int, 0); 319module_param_hw(irq, int, irq, 0);
320 320
321static int __init init_uart6850(void) 321static int __init init_uart6850(void)
322{ 322{
diff --git a/sound/oss/waveartist.c b/sound/oss/waveartist.c
index 0b8d0de87273..4f0c3a232e41 100644
--- a/sound/oss/waveartist.c
+++ b/sound/oss/waveartist.c
@@ -2036,8 +2036,8 @@ __setup("waveartist=", setup_waveartist);
2036#endif 2036#endif
2037 2037
2038MODULE_DESCRIPTION("Rockwell WaveArtist RWA-010 sound driver"); 2038MODULE_DESCRIPTION("Rockwell WaveArtist RWA-010 sound driver");
2039module_param(io, int, 0); /* IO base */ 2039module_param_hw(io, int, ioport, 0); /* IO base */
2040module_param(irq, int, 0); /* IRQ */ 2040module_param_hw(irq, int, irq, 0); /* IRQ */
2041module_param(dma, int, 0); /* DMA */ 2041module_param_hw(dma, int, dma, 0); /* DMA */
2042module_param(dma2, int, 0); /* DMA2 */ 2042module_param_hw(dma2, int, dma, 0); /* DMA2 */
2043MODULE_LICENSE("GPL"); 2043MODULE_LICENSE("GPL");
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index 92bc06d01288..7844a75d8ed9 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -102,7 +102,7 @@ MODULE_PARM_DESC(id, "ID string for ALS4000 soundcard.");
102module_param_array(enable, bool, NULL, 0444); 102module_param_array(enable, bool, NULL, 0444);
103MODULE_PARM_DESC(enable, "Enable ALS4000 soundcard."); 103MODULE_PARM_DESC(enable, "Enable ALS4000 soundcard.");
104#ifdef SUPPORT_JOYSTICK 104#ifdef SUPPORT_JOYSTICK
105module_param_array(joystick_port, int, NULL, 0444); 105module_param_hw_array(joystick_port, int, ioport, NULL, 0444);
106MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)"); 106MODULE_PARM_DESC(joystick_port, "Joystick port address for ALS4000 soundcard. (0 = disabled)");
107#endif 107#endif
108 108
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index 227c9d3802b8..745a0a3743b4 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -68,14 +68,14 @@ module_param_array(id, charp, NULL, 0444);
68MODULE_PARM_DESC(id, "ID string for C-Media PCI soundcard."); 68MODULE_PARM_DESC(id, "ID string for C-Media PCI soundcard.");
69module_param_array(enable, bool, NULL, 0444); 69module_param_array(enable, bool, NULL, 0444);
70MODULE_PARM_DESC(enable, "Enable C-Media PCI soundcard."); 70MODULE_PARM_DESC(enable, "Enable C-Media PCI soundcard.");
71module_param_array(mpu_port, long, NULL, 0444); 71module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
72MODULE_PARM_DESC(mpu_port, "MPU-401 port."); 72MODULE_PARM_DESC(mpu_port, "MPU-401 port.");
73module_param_array(fm_port, long, NULL, 0444); 73module_param_hw_array(fm_port, long, ioport, NULL, 0444);
74MODULE_PARM_DESC(fm_port, "FM port."); 74MODULE_PARM_DESC(fm_port, "FM port.");
75module_param_array(soft_ac3, bool, NULL, 0444); 75module_param_array(soft_ac3, bool, NULL, 0444);
76MODULE_PARM_DESC(soft_ac3, "Software-conversion of raw SPDIF packets (model 033 only)."); 76MODULE_PARM_DESC(soft_ac3, "Software-conversion of raw SPDIF packets (model 033 only).");
77#ifdef SUPPORT_JOYSTICK 77#ifdef SUPPORT_JOYSTICK
78module_param_array(joystick_port, int, NULL, 0444); 78module_param_hw_array(joystick_port, int, ioport, NULL, 0444);
79MODULE_PARM_DESC(joystick_port, "Joystick port address."); 79MODULE_PARM_DESC(joystick_port, "Joystick port address.");
80#endif 80#endif
81 81
diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c
index 5d10349d11ce..09a63ef41ef2 100644
--- a/sound/pci/ens1370.c
+++ b/sound/pci/ens1370.c
@@ -106,7 +106,7 @@ module_param_array(enable, bool, NULL, 0444);
106MODULE_PARM_DESC(enable, "Enable Ensoniq AudioPCI soundcard."); 106MODULE_PARM_DESC(enable, "Enable Ensoniq AudioPCI soundcard.");
107#ifdef SUPPORT_JOYSTICK 107#ifdef SUPPORT_JOYSTICK
108#ifdef CHIP1371 108#ifdef CHIP1371
109module_param_array(joystick_port, int, NULL, 0444); 109module_param_hw_array(joystick_port, int, ioport, NULL, 0444);
110MODULE_PARM_DESC(joystick_port, "Joystick port address."); 110MODULE_PARM_DESC(joystick_port, "Joystick port address.");
111#else 111#else
112module_param_array(joystick, bool, NULL, 0444); 112module_param_array(joystick, bool, NULL, 0444);
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c
index 19c9df6b0f3d..f067c76d77f8 100644
--- a/sound/pci/riptide/riptide.c
+++ b/sound/pci/riptide/riptide.c
@@ -137,12 +137,12 @@ MODULE_PARM_DESC(id, "ID string for Riptide soundcard.");
137module_param_array(enable, bool, NULL, 0444); 137module_param_array(enable, bool, NULL, 0444);
138MODULE_PARM_DESC(enable, "Enable Riptide soundcard."); 138MODULE_PARM_DESC(enable, "Enable Riptide soundcard.");
139#ifdef SUPPORT_JOYSTICK 139#ifdef SUPPORT_JOYSTICK
140module_param_array(joystick_port, int, NULL, 0444); 140module_param_hw_array(joystick_port, int, ioport, NULL, 0444);
141MODULE_PARM_DESC(joystick_port, "Joystick port # for Riptide soundcard."); 141MODULE_PARM_DESC(joystick_port, "Joystick port # for Riptide soundcard.");
142#endif 142#endif
143module_param_array(mpu_port, int, NULL, 0444); 143module_param_hw_array(mpu_port, int, ioport, NULL, 0444);
144MODULE_PARM_DESC(mpu_port, "MPU401 port # for Riptide driver."); 144MODULE_PARM_DESC(mpu_port, "MPU401 port # for Riptide driver.");
145module_param_array(opl3_port, int, NULL, 0444); 145module_param_hw_array(opl3_port, int, ioport, NULL, 0444);
146MODULE_PARM_DESC(opl3_port, "OPL3 port # for Riptide driver."); 146MODULE_PARM_DESC(opl3_port, "OPL3 port # for Riptide driver.");
147 147
148/* 148/*
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index a6aa48c5b969..8e3d4ec39c35 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -66,7 +66,7 @@ module_param_array(reverb, bool, NULL, 0444);
66MODULE_PARM_DESC(reverb, "Enable reverb (SRAM is present) for S3 SonicVibes soundcard."); 66MODULE_PARM_DESC(reverb, "Enable reverb (SRAM is present) for S3 SonicVibes soundcard.");
67module_param_array(mge, bool, NULL, 0444); 67module_param_array(mge, bool, NULL, 0444);
68MODULE_PARM_DESC(mge, "MIC Gain Enable for S3 SonicVibes soundcard."); 68MODULE_PARM_DESC(mge, "MIC Gain Enable for S3 SonicVibes soundcard.");
69module_param(dmaio, uint, 0444); 69module_param_hw(dmaio, uint, ioport, 0444);
70MODULE_PARM_DESC(dmaio, "DDMA i/o base address for S3 SonicVibes soundcard."); 70MODULE_PARM_DESC(dmaio, "DDMA i/o base address for S3 SonicVibes soundcard.");
71 71
72/* 72/*
diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c
index d078e86414c2..b6c84d15b10b 100644
--- a/sound/pci/via82xx.c
+++ b/sound/pci/via82xx.c
@@ -92,7 +92,7 @@ module_param(index, int, 0444);
92MODULE_PARM_DESC(index, "Index value for VIA 82xx bridge."); 92MODULE_PARM_DESC(index, "Index value for VIA 82xx bridge.");
93module_param(id, charp, 0444); 93module_param(id, charp, 0444);
94MODULE_PARM_DESC(id, "ID string for VIA 82xx bridge."); 94MODULE_PARM_DESC(id, "ID string for VIA 82xx bridge.");
95module_param(mpu_port, long, 0444); 95module_param_hw(mpu_port, long, ioport, 0444);
96MODULE_PARM_DESC(mpu_port, "MPU-401 port. (VT82C686x only)"); 96MODULE_PARM_DESC(mpu_port, "MPU-401 port. (VT82C686x only)");
97#ifdef SUPPORT_JOYSTICK 97#ifdef SUPPORT_JOYSTICK
98module_param(joystick, bool, 0444); 98module_param(joystick, bool, 0444);
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 812e27a1bcbc..4faf3e1ed06a 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -55,12 +55,12 @@ module_param_array(id, charp, NULL, 0444);
55MODULE_PARM_DESC(id, "ID string for the Yamaha DS-1 PCI soundcard."); 55MODULE_PARM_DESC(id, "ID string for the Yamaha DS-1 PCI soundcard.");
56module_param_array(enable, bool, NULL, 0444); 56module_param_array(enable, bool, NULL, 0444);
57MODULE_PARM_DESC(enable, "Enable Yamaha DS-1 soundcard."); 57MODULE_PARM_DESC(enable, "Enable Yamaha DS-1 soundcard.");
58module_param_array(mpu_port, long, NULL, 0444); 58module_param_hw_array(mpu_port, long, ioport, NULL, 0444);
59MODULE_PARM_DESC(mpu_port, "MPU-401 Port."); 59MODULE_PARM_DESC(mpu_port, "MPU-401 Port.");
60module_param_array(fm_port, long, NULL, 0444); 60module_param_hw_array(fm_port, long, ioport, NULL, 0444);
61MODULE_PARM_DESC(fm_port, "FM OPL-3 Port."); 61MODULE_PARM_DESC(fm_port, "FM OPL-3 Port.");
62#ifdef SUPPORT_JOYSTICK 62#ifdef SUPPORT_JOYSTICK
63module_param_array(joystick_port, long, NULL, 0444); 63module_param_hw_array(joystick_port, long, ioport, NULL, 0444);
64MODULE_PARM_DESC(joystick_port, "Joystick port address"); 64MODULE_PARM_DESC(joystick_port, "Joystick port address");
65#endif 65#endif
66module_param_array(rear_switch, bool, NULL, 0444); 66module_param_array(rear_switch, bool, NULL, 0444);