On Mon, 2006-02-20 at 14:21 -0800, Greg KH wrote:
> > From: Andreas Gruenbacher <[email protected]>
> >
> > Just ignore old-style parameter definitions for parameters that aren't
> > actually there.
>
> Should we be emitting a warning message in the syslog so that people
> know they need to fix up their module paramater usage?
Agreed, but a deeper problem is that we load the module (an
improvement), but not set up the way the user wanted.
How about we clean the last 50 callers instead? Compile tested with
allyesconfig, but that doesn't get those hard to reach places...
Cheers!
Rusty.
MODULE_PARM was actually breaking: recent gcc version optimize them out
as unused. It's time to replace the last users, which are generally in
the most unloved drivers anyway.
Signed-off-by: Rusty Russell <[email protected]>
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/Documentation/networking/ray_cs.txt working-2.6.16-rc4-PARAM/Documentation/networking/ray_cs.txt
--- linux-2.6.16-rc4/Documentation/networking/ray_cs.txt 2006-01-10 15:17:56.000000000 +1100
+++ working-2.6.16-rc4-PARAM/Documentation/networking/ray_cs.txt 2006-02-21 13:09:47.000000000 +1100
@@ -25,7 +25,7 @@ the essid= string parameter is available
This will change after the method of sorting out parameters for all
the PCMCIA drivers is agreed upon. If you must have a built in driver
with nondefault parameters, they can be edited in
-/usr/src/linux/drivers/net/pcmcia/ray_cs.c. Searching for MODULE_PARM
+/usr/src/linux/drivers/net/pcmcia/ray_cs.c. Searching for module_param
will find them all.
Information on card services is available at:
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/Documentation/sound/oss/Introduction working-2.6.16-rc4-PARAM/Documentation/sound/oss/Introduction
--- linux-2.6.16-rc4/Documentation/sound/oss/Introduction 2005-02-04 18:47:38.000000000 +1100
+++ working-2.6.16-rc4-PARAM/Documentation/sound/oss/Introduction 2006-02-21 13:09:55.000000000 +1100
@@ -69,7 +69,7 @@ are available, for example IRQ, address,
Warning, the options for different cards sometime use different names
for the same or a similar feature (dma1= versus dma16=). As a last
-resort, inspect the code (search for MODULE_PARM).
+resort, inspect the code (search for module_param).
Notes:
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/Documentation/sound/oss/cs46xx working-2.6.16-rc4-PARAM/Documentation/sound/oss/cs46xx
--- linux-2.6.16-rc4/Documentation/sound/oss/cs46xx 2004-02-04 14:43:11.000000000 +1100
+++ working-2.6.16-rc4-PARAM/Documentation/sound/oss/cs46xx 2006-02-21 13:12:30.000000000 +1100
@@ -88,7 +88,7 @@ parameters. for a copy email: twoller@c
MODULE_PARMS definitions
------------------------
-MODULE_PARM(defaultorder, "i");
+module_param(defaultorder, ulong, 0);
defaultorder=N
where N is a value from 1 to 12
The buffer order determines the size of the dma buffer for the driver.
@@ -98,18 +98,18 @@ to not underrun the dma buffer as easily
rather than 64k as some of the games work more responsively.
(2^N) * PAGE_SIZE = allocated buffer size
-MODULE_PARM(cs_debuglevel, "i");
-MODULE_PARM(cs_debugmask, "i");
+module_param(cs_debuglevel, ulong, 0644);
+module_param(cs_debugmask, ulong, 0644);
cs_debuglevel=N
cs_debugmask=0xMMMMMMMM
where N is a value from 0 (no debug printfs), to 9 (maximum)
0xMMMMMMMM is a debug mask corresponding to the CS_xxx bits (see driver source).
-MODULE_PARM(hercules_egpio_disable, "i");
+module_param(hercules_egpio_disable, ulong, 0);
hercules_egpio_disable=N
where N is a 0 (enable egpio), or a 1 (disable egpio support)
-MODULE_PARM(initdelay, "i");
+module_param(initdelay, ulong, 0);
initdelay=N
This value is used to determine the millescond delay during the initialization
code prior to powering up the PLL. On laptops this value can be used to
@@ -118,19 +118,19 @@ system is booted under battery power the
properly delay the required time. Also, if the system is booted under AC power
and then the power removed, the mdelay()/udelay() functions will not delay properly.
-MODULE_PARM(powerdown, "i");
+module_param(powerdown, ulong, 0);
powerdown=N
where N is 0 (disable any powerdown of the internal blocks) or 1 (enable powerdown)
-MODULE_PARM(external_amp, "i");
+module_param(external_amp, bool, 0);
external_amp=1
if N is set to 1, then force enabling the EAPD support in the primary AC97 codec.
override the detection logic and force the external amp bit in the AC97 0x26 register
to be reset (0). EAPD should be 0 for powerup, and 1 for powerdown. The VTB Santa Cruz
card has inverted logic, so there is a special function for these cards.
-MODULE_PARM(thinkpad, "i");
+module_param(thinkpad, bool, 0);
thinkpad=1
if N is set to 1, then force enabling the clkrun functionality.
Currently, when the part is being used, then clkrun is disabled for the entire system,
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/arch/ppc/8xx_io/cs4218_tdm.c working-2.6.16-rc4-PARAM/arch/ppc/8xx_io/cs4218_tdm.c
--- linux-2.6.16-rc4/arch/ppc/8xx_io/cs4218_tdm.c 2006-01-10 15:18:17.000000000 +1100
+++ working-2.6.16-rc4-PARAM/arch/ppc/8xx_io/cs4218_tdm.c 2006-02-21 13:13:06.000000000 +1100
@@ -126,11 +126,11 @@ static int numReadBufs = 4, readbufSize
*/
static volatile cbd_t *rx_base, *rx_cur, *tx_base, *tx_cur;
-MODULE_PARM(catchRadius, "i");
-MODULE_PARM(numBufs, "i");
-MODULE_PARM(bufSize, "i");
-MODULE_PARM(numreadBufs, "i");
-MODULE_PARM(readbufSize, "i");
+module_param(catchRadius, int, 0);
+module_param(numBufs, int, 0);
+module_param(bufSize, int, 0);
+module_param(numreadBufs, int, 0);
+module_param(readbufSize, int, 0);
#define arraysize(x) (sizeof(x)/sizeof(*(x)))
#define le2be16(x) (((x)<<8 & 0xff00) | ((x)>>8 & 0x00ff))
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/block/ataflop.c working-2.6.16-rc4-PARAM/drivers/block/ataflop.c
--- linux-2.6.16-rc4/drivers/block/ataflop.c 2006-02-21 12:58:59.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/block/ataflop.c 2006-02-21 13:15:32.000000000 +1100
@@ -271,7 +271,7 @@ unsigned char *DMABuffer; /* buffer
static unsigned long PhysDMABuffer; /* physical address */
static int UseTrackbuffer = -1; /* Do track buffering? */
-MODULE_PARM(UseTrackbuffer, "i");
+module_param(UseTrackbuffer, int, 0);
unsigned char *TrackBuffer; /* buffer for reads */
static unsigned long PhysTrackBuffer; /* physical address */
@@ -296,7 +296,7 @@ static int MotorOn = 0, MotorOffTrys;
static int IsFormatting = 0, FormatError;
static int UserSteprate[FD_MAX_UNITS] = { -1, -1 };
-MODULE_PARM(UserSteprate, "1-" __MODULE_STRING(FD_MAX_UNITS) "i");
+module_param_array(UserSteprate, int, NULL, 0);
/* Synchronization of FDC access. */
static volatile int fdc_busy = 0;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/cdrom/cm206.c working-2.6.16-rc4-PARAM/drivers/cdrom/cm206.c
--- linux-2.6.16-rc4/drivers/cdrom/cm206.c 2006-02-21 12:59:01.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/cdrom/cm206.c 2006-02-21 13:15:25.000000000 +1100
@@ -218,12 +218,12 @@ static int cm206_base = CM206_BASE;
static int cm206_irq = CM206_IRQ;
#ifdef MODULE
static int cm206[2] = { 0, 0 }; /* for compatible `insmod' parameter passing */
+module_param_array(cm206, int, NULL, 0); /* base,irq or irq,base */
#endif
-MODULE_PARM(cm206_base, "i"); /* base */
-MODULE_PARM(cm206_irq, "i"); /* irq */
-MODULE_PARM(cm206, "1-2i"); /* base,irq or irq,base */
-MODULE_PARM(auto_probe, "i"); /* auto probe base and irq */
+module_param(cm206_base, int, 0); /* base */
+module_param(cm206_irq, int, 0); /* irq */
+module_param(auto_probe, bool, 0); /* auto probe base and irq */
MODULE_LICENSE("GPL");
#define POLLOOP 100 /* milliseconds */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/cdrom/sbpcd.c working-2.6.16-rc4-PARAM/drivers/cdrom/sbpcd.c
--- linux-2.6.16-rc4/drivers/cdrom/sbpcd.c 2005-10-31 12:20:38.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/cdrom/sbpcd.c 2006-02-21 13:18:51.000000000 +1100
@@ -464,8 +464,13 @@ static int sbpcd[] =
static __cacheline_aligned DEFINE_SPINLOCK(sbpcd_lock);
static struct request_queue *sbpcd_queue;
-MODULE_PARM(sbpcd, "2i");
-MODULE_PARM(max_drives, "i");
+/* You can only set the first pair, from old MODULE_PARM code. */
+static int sbpcd_set(const char *val, struct kernel_param *kp)
+{
+ get_options((char *)val, 2, (int *)sbpcd);
+ return 0;
+}
+module_param_call(sbpcd, sbpcd_set, NULL, NULL, 0);
#define NUM_PROBE (sizeof(sbpcd) / sizeof(int))
@@ -553,6 +558,7 @@ static unsigned char msgnum;
static char msgbuf[80];
static int max_drives = MAX_DRIVES;
+module_param(max_drives, int, 0);
#ifndef MODULE
static unsigned char setup_done;
static const char *str_sb_l = "soundblaster";
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/char/istallion.c working-2.6.16-rc4-PARAM/drivers/char/istallion.c
--- linux-2.6.16-rc4/drivers/char/istallion.c 2006-02-21 12:59:08.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/char/istallion.c 2006-02-21 13:20:37.000000000 +1100
@@ -379,13 +379,13 @@ MODULE_DESCRIPTION("Stallion Intelligent
MODULE_LICENSE("GPL");
-MODULE_PARM(board0, "1-3s");
+module_parm_array(board0, charp, NULL, 0);
MODULE_PARM_DESC(board0, "Board 0 config -> name[,ioaddr[,memaddr]");
-MODULE_PARM(board1, "1-3s");
+module_parm_array(board1, charp, NULL, 0);
MODULE_PARM_DESC(board1, "Board 1 config -> name[,ioaddr[,memaddr]");
-MODULE_PARM(board2, "1-3s");
+module_parm_array(board2, charp, NULL, 0);
MODULE_PARM_DESC(board2, "Board 2 config -> name[,ioaddr[,memaddr]");
-MODULE_PARM(board3, "1-3s");
+module_parm_array(board3, charp, NULL, 0);
MODULE_PARM_DESC(board3, "Board 3 config -> name[,ioaddr[,memaddr]");
#endif
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/char/mxser.c working-2.6.16-rc4-PARAM/drivers/char/mxser.c
--- linux-2.6.16-rc4/drivers/char/mxser.c 2006-02-21 12:59:08.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/char/mxser.c 2006-02-21 13:21:32.000000000 +1100
@@ -243,10 +243,10 @@ static int verbose = 0;
MODULE_AUTHOR("Casper Yang");
MODULE_DESCRIPTION("MOXA Smartio/Industio Family Multiport Board Device Driver");
-MODULE_PARM(ioaddr, "1-4i");
-MODULE_PARM(ttymajor, "i");
-MODULE_PARM(calloutmajor, "i");
-MODULE_PARM(verbose, "i");
+module_param_array(ioaddr, int, NULL, 0);
+module_param(ttymajor, int, 0);
+module_param(calloutmajor, int, 0);
+module_param(verbose, bool, 0);
MODULE_LICENSE("GPL");
struct mxser_log {
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/char/riscom8.c working-2.6.16-rc4-PARAM/drivers/char/riscom8.c
--- linux-2.6.16-rc4/drivers/char/riscom8.c 2006-02-21 12:59:09.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/char/riscom8.c 2006-02-21 13:21:58.000000000 +1100
@@ -1743,10 +1743,10 @@ static int iobase;
static int iobase1;
static int iobase2;
static int iobase3;
-MODULE_PARM(iobase, "i");
-MODULE_PARM(iobase1, "i");
-MODULE_PARM(iobase2, "i");
-MODULE_PARM(iobase3, "i");
+module_param(iobase, int, 0);
+module_param(iobase1, int, 0);
+module_param(iobase2, int, 0);
+module_param(iobase3, int, 0);
MODULE_LICENSE("GPL");
#endif /* MODULE */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hardware/avm/b1dma.c working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/b1dma.c
--- linux-2.6.16-rc4/drivers/isdn/hardware/avm/b1dma.c 2005-08-29 14:39:35.000000000 +1000
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/b1dma.c 2006-02-21 13:22:14.000000000 +1100
@@ -39,7 +39,7 @@ MODULE_AUTHOR("Carsten Paeth");
MODULE_LICENSE("GPL");
static int suppress_pollack = 0;
-MODULE_PARM(suppress_pollack, "0-1i");
+module_param(suppress_pollack, bool, 0);
/* ------------------------------------------------------------- */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hardware/avm/b1isa.c working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/b1isa.c
--- linux-2.6.16-rc4/drivers/isdn/hardware/avm/b1isa.c 2005-02-04 18:45:29.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/b1isa.c 2006-02-21 13:22:42.000000000 +1100
@@ -169,8 +169,8 @@ static struct pci_dev isa_dev[MAX_CARDS]
static int io[MAX_CARDS];
static int irq[MAX_CARDS];
-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i");
-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_CARDS) "i");
+module_param_array(io, int, NULL, 0);
+module_param_array(irq, int, NULL, 0);
MODULE_PARM_DESC(io, "I/O base address(es)");
MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hardware/avm/c4.c working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/c4.c
--- linux-2.6.16-rc4/drivers/isdn/hardware/avm/c4.c 2005-08-29 14:39:35.000000000 +1000
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/c4.c 2006-02-21 13:24:39.000000000 +1100
@@ -50,7 +50,7 @@ MODULE_DEVICE_TABLE(pci, c4_pci_tbl);
MODULE_DESCRIPTION("CAPI4Linux: Driver for AVM C2/C4 cards");
MODULE_AUTHOR("Carsten Paeth");
MODULE_LICENSE("GPL");
-MODULE_PARM(suppress_pollack, "0-1i");
+module_param(suppress_pollack, bool, 0);
/* ------------------------------------------------------------- */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hardware/avm/t1isa.c working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/t1isa.c
--- linux-2.6.16-rc4/drivers/isdn/hardware/avm/t1isa.c 2005-08-29 14:39:35.000000000 +1000
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hardware/avm/t1isa.c 2006-02-21 13:23:13.000000000 +1100
@@ -519,9 +519,9 @@ static int io[MAX_CARDS];
static int irq[MAX_CARDS];
static int cardnr[MAX_CARDS];
-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_CARDS) "i");
-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_CARDS) "i");
-MODULE_PARM(cardnr, "1-" __MODULE_STRING(MAX_CARDS) "i");
+module_param_array(io, int, NULL, 0);
+module_param_array(irq, int, NULL, 0);
+module_param_array(cardnr, int, NULL, 0);
MODULE_PARM_DESC(io, "I/O base address(es)");
MODULE_PARM_DESC(irq, "IRQ number(s) (assigned)");
MODULE_PARM_DESC(cardnr, "Card number(s) (as jumpered)");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hysdn/hycapi.c working-2.6.16-rc4-PARAM/drivers/isdn/hysdn/hycapi.c
--- linux-2.6.16-rc4/drivers/isdn/hysdn/hycapi.c 2006-01-10 15:18:43.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hysdn/hycapi.c 2006-02-21 13:24:57.000000000 +1100
@@ -31,7 +31,7 @@
static char hycapi_revision[]="$Revision: 1.8.6.4 $";
unsigned int hycapi_enable = 0xffffffff;
-MODULE_PARM(hycapi_enable, "i");
+module_param(hycapi_enable, uint, 0);
typedef struct _hycapi_appl {
unsigned int ctrl_mask;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/hysdn/hysdn_net.c working-2.6.16-rc4-PARAM/drivers/isdn/hysdn/hysdn_net.c
--- linux-2.6.16-rc4/drivers/isdn/hysdn/hysdn_net.c 2006-01-10 15:18:43.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/isdn/hysdn/hysdn_net.c 2006-02-21 13:25:06.000000000 +1100
@@ -24,7 +24,7 @@
#include "hysdn_defs.h"
unsigned int hynet_enable = 0xffffffff;
-MODULE_PARM(hynet_enable, "i");
+module_param(hynet_enable, uint, 0);
/* store the actual version for log reporting */
char *hysdn_net_revision = "$Revision: 1.8.6.4 $";
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/isdn/isdnloop/isdnloop.c working-2.6.16-rc4-PARAM/drivers/isdn/isdnloop/isdnloop.c
--- linux-2.6.16-rc4/drivers/isdn/isdnloop/isdnloop.c 2006-01-10 15:18:44.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/isdn/isdnloop/isdnloop.c 2006-02-21 13:25:26.000000000 +1100
@@ -22,7 +22,7 @@ static char *isdnloop_id = "loop0";
MODULE_DESCRIPTION("ISDN4Linux: Pseudo Driver that simulates an ISDN card");
MODULE_AUTHOR("Fritz Elfert");
MODULE_LICENSE("GPL");
-MODULE_PARM(isdnloop_id, "s");
+module_param(isdnloop_id, charp, 0);
MODULE_PARM_DESC(isdnloop_id, "ID-String of first card");
static int isdnloop_addcard(char *);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/media/video/zr36120.c working-2.6.16-rc4-PARAM/drivers/media/video/zr36120.c
--- linux-2.6.16-rc4/drivers/media/video/zr36120.c 2006-02-21 12:59:34.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/media/video/zr36120.c 2006-02-21 13:26:11.000000000 +1100
@@ -70,10 +70,10 @@ MODULE_AUTHOR("Pauline Middelink <middel
MODULE_DESCRIPTION("Zoran ZR36120 based framegrabber");
MODULE_LICENSE("GPL");
-MODULE_PARM(triton1,"i");
-MODULE_PARM(cardtype,"1-" __MODULE_STRING(ZORAN_MAX) "i");
-MODULE_PARM(video_nr,"i");
-MODULE_PARM(vbi_nr,"i");
+module_param(triton1, uint, 0);
+module_param_array(cardtype, uint, NULL, 0);
+module_param(video_nr, int, 0);
+module_param(vbi_nr, int, 0);
static int zoran_cards;
static struct zoran zorans[ZORAN_MAX];
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/mmc/au1xmmc.c working-2.6.16-rc4-PARAM/drivers/mmc/au1xmmc.c
--- linux-2.6.16-rc4/drivers/mmc/au1xmmc.c 2006-02-21 12:59:36.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/mmc/au1xmmc.c 2006-02-21 13:41:36.000000000 +1100
@@ -87,7 +87,7 @@ struct au1xmmc_host *au1xmmc_hosts[AU1XM
static int dma = 1;
#ifdef MODULE
-MODULE_PARM(dma, "i");
+module_param(dma, bool, 0);
MODULE_PARM_DESC(dma, "Use DMA engine for data transfers (0 = disabled)");
#endif
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/mtd/maps/pcmciamtd.c working-2.6.16-rc4-PARAM/drivers/mtd/maps/pcmciamtd.c
--- linux-2.6.16-rc4/drivers/mtd/maps/pcmciamtd.c 2006-02-21 12:59:36.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/mtd/maps/pcmciamtd.c 2006-02-21 13:27:18.000000000 +1100
@@ -28,7 +28,7 @@
#ifdef CONFIG_MTD_DEBUG
static int debug = CONFIG_MTD_DEBUG_VERBOSE;
-MODULE_PARM(debug, "i");
+module_param(debug, int, 0);
MODULE_PARM_DESC(debug, "Set Debug Level 0=quiet, 5=noisy");
#undef DEBUG
#define DEBUG(n, format, arg...) \
@@ -89,17 +89,17 @@ static int mem_type;
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Simon Evans <[email protected]>");
MODULE_DESCRIPTION(DRIVER_DESC);
-MODULE_PARM(bankwidth, "i");
+module_param(bankwidth, int, 0);
MODULE_PARM_DESC(bankwidth, "Set bankwidth (1=8 bit, 2=16 bit, default=2)");
-MODULE_PARM(mem_speed, "i");
+module_param(mem_speed, int, 0);
MODULE_PARM_DESC(mem_speed, "Set memory access speed in ns");
-MODULE_PARM(force_size, "i");
+module_param(force_size, int, 0);
MODULE_PARM_DESC(force_size, "Force size of card in MiB (1-64)");
-MODULE_PARM(setvpp, "i");
+module_param(setvpp, int, 0);
MODULE_PARM_DESC(setvpp, "Set Vpp (0=Never, 1=On writes, 2=Always on, default=0)");
-MODULE_PARM(vpp, "i");
+module_param(vpp, int, 0);
MODULE_PARM_DESC(vpp, "Vpp value in 1/10ths eg 33=3.3V 120=12V (Dangerous)");
-MODULE_PARM(mem_type, "i");
+module_param(mem_type, int, 0);
MODULE_PARM_DESC(mem_type, "Set Memory type (0=Flash, 1=RAM, 2=ROM, default=0)");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/atari_bionet.c working-2.6.16-rc4-PARAM/drivers/net/atari_bionet.c
--- linux-2.6.16-rc4/drivers/net/atari_bionet.c 2005-10-31 12:20:51.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/atari_bionet.c 2006-02-21 13:28:36.000000000 +1100
@@ -123,7 +123,7 @@ static char version[] =
* Global variable 'bionet_debug'. Can be set at load time by 'insmod'
*/
unsigned int bionet_debug = NET_DEBUG;
-MODULE_PARM(bionet_debug, "i");
+module_param(bionet_debug, int, 0);
MODULE_PARM_DESC(bionet_debug, "bionet debug level (0-2)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/atari_pamsnet.c working-2.6.16-rc4-PARAM/drivers/net/atari_pamsnet.c
--- linux-2.6.16-rc4/drivers/net/atari_pamsnet.c 2005-10-31 12:20:51.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/atari_pamsnet.c 2006-02-21 13:28:42.000000000 +1100
@@ -119,7 +119,7 @@ static char *version =
* Global variable 'pamsnet_debug'. Can be set at load time by 'insmod'
*/
unsigned int pamsnet_debug = NET_DEBUG;
-MODULE_PARM(pamsnet_debug, "i");
+module_param(pamsnet_debug, int, 0);
MODULE_PARM_DESC(pamsnet_debug, "pamsnet debug enable (0-1)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/atarilance.c working-2.6.16-rc4-PARAM/drivers/net/atarilance.c
--- linux-2.6.16-rc4/drivers/net/atarilance.c 2005-10-31 12:20:51.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/atarilance.c 2006-02-21 13:28:50.000000000 +1100
@@ -78,7 +78,7 @@ static int lance_debug = LANCE_DEBUG;
#else
static int lance_debug = 1;
#endif
-MODULE_PARM(lance_debug, "i");
+module_param(lance_debug, int, 0);
MODULE_PARM_DESC(lance_debug, "atarilance debug level (0-3)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/cassini.c working-2.6.16-rc4-PARAM/drivers/net/cassini.c
--- linux-2.6.16-rc4/drivers/net/cassini.c 2006-02-21 12:59:38.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/cassini.c 2006-02-21 13:32:49.000000000 +1100
@@ -191,12 +191,15 @@
static char version[] __devinitdata =
DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
+static int cassini_debug = -1; /* -1 == use CAS_DEF_MSG_ENABLE as value */
+static int link_mode;
+
MODULE_AUTHOR("Adrian Sun ([email protected])");
MODULE_DESCRIPTION("Sun Cassini(+) ethernet driver");
MODULE_LICENSE("GPL");
-MODULE_PARM(cassini_debug, "i");
+module_param(cassini_debug, int, 0);
MODULE_PARM_DESC(cassini_debug, "Cassini bitmapped debugging message enable value");
-MODULE_PARM(link_mode, "i");
+module_param(link_mode, int, 0);
MODULE_PARM_DESC(link_mode, "default link mode");
/*
@@ -208,7 +211,7 @@ MODULE_PARM_DESC(link_mode, "default lin
* Value in seconds, for user input.
*/
static int linkdown_timeout = DEFAULT_LINKDOWN_TIMEOUT;
-MODULE_PARM(linkdown_timeout, "i");
+module_param(linkdown_timeout, int, 0);
MODULE_PARM_DESC(linkdown_timeout,
"min reset interval in sec. for PCS linkdown issue; disabled if not positive");
@@ -220,8 +223,6 @@ MODULE_PARM_DESC(linkdown_timeout,
static int link_transition_timeout;
-static int cassini_debug = -1; /* -1 == use CAS_DEF_MSG_ENABLE as value */
-static int link_mode;
static u16 link_modes[] __devinitdata = {
BMCR_ANENABLE, /* 0 : autoneg */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/chelsio/cxgb2.c working-2.6.16-rc4-PARAM/drivers/net/chelsio/cxgb2.c
--- linux-2.6.16-rc4/drivers/net/chelsio/cxgb2.c 2005-10-31 12:20:51.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/chelsio/cxgb2.c 2006-02-21 13:32:55.000000000 +1100
@@ -124,7 +124,7 @@ MODULE_LICENSE("GPL");
static int dflt_msg_enable = DFLT_MSG_ENABLE;
-MODULE_PARM(dflt_msg_enable, "i");
+module_param(dflt_msg_enable, int, 0);
MODULE_PARM_DESC(dflt_msg_enable, "Chelsio T1 message enable bitmap");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/fec_8xx/fec_main.c working-2.6.16-rc4-PARAM/drivers/net/fec_8xx/fec_main.c
--- linux-2.6.16-rc4/drivers/net/fec_8xx/fec_main.c 2005-02-04 18:50:06.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/fec_8xx/fec_main.c 2006-02-21 13:32:04.000000000 +1100
@@ -55,11 +55,11 @@ MODULE_AUTHOR("Pantelis Antoniou <panto@
MODULE_DESCRIPTION("Motorola 8xx FEC ethernet driver");
MODULE_LICENSE("GPL");
-MODULE_PARM(fec_8xx_debug, "i");
+int fec_8xx_debug = -1; /* -1 == use FEC_8XX_DEF_MSG_ENABLE as value */
+module_param(fec_8xx_debug, int, 0);
MODULE_PARM_DESC(fec_8xx_debug,
"FEC 8xx bitmapped debugging message enable value");
-int fec_8xx_debug = -1; /* -1 == use FEC_8XX_DEF_MSG_ENABLE as value */
/*************************************************/
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/fs_enet/fs_enet-main.c working-2.6.16-rc4-PARAM/drivers/net/fs_enet/fs_enet-main.c
--- linux-2.6.16-rc4/drivers/net/fs_enet/fs_enet-main.c 2006-01-10 15:18:53.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/fs_enet/fs_enet-main.c 2006-02-21 13:33:07.000000000 +1100
@@ -58,11 +58,11 @@ MODULE_DESCRIPTION("Freescale Ethernet D
MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_MODULE_VERSION);
-MODULE_PARM(fs_enet_debug, "i");
+int fs_enet_debug = -1; /* -1 == use FS_ENET_DEF_MSG_ENABLE as value */
+module_param(fs_enet_debug, int, 0);
MODULE_PARM_DESC(fs_enet_debug,
"Freescale bitmapped debugging message enable value");
-int fs_enet_debug = -1; /* -1 == use FS_ENET_DEF_MSG_ENABLE as value */
static void fs_set_multicast_list(struct net_device *dev)
{
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/gt96100eth.c working-2.6.16-rc4-PARAM/drivers/net/gt96100eth.c
--- linux-2.6.16-rc4/drivers/net/gt96100eth.c 2006-01-10 15:18:53.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/gt96100eth.c 2006-02-21 13:30:04.000000000 +1100
@@ -114,8 +114,8 @@ static int max_interrupt_work = 32;
static char mac0[18] = "00.02.03.04.05.06";
static char mac1[18] = "00.01.02.03.04.05";
-MODULE_PARM(mac0, "c18");
-MODULE_PARM(mac1, "c18");
+module_param_string(mac0, mac0, 18, 0);
+module_param_string(mac1, mac0, 18, 0);
MODULE_PARM_DESC(mac0, "MAC address for GT96100 ethernet port 0");
MODULE_PARM_DESC(mac1, "MAC address for GT96100 ethernet port 1");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/hamradio/dmascc.c working-2.6.16-rc4-PARAM/drivers/net/hamradio/dmascc.c
--- linux-2.6.16-rc4/drivers/net/hamradio/dmascc.c 2006-01-10 15:18:53.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/hamradio/dmascc.c 2006-02-21 13:27:39.000000000 +1100
@@ -280,7 +280,7 @@ static unsigned long rand;
MODULE_AUTHOR("Klaus Kudielka");
MODULE_DESCRIPTION("Driver for high-speed SCC boards");
-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NUM_DEVS) "i");
+module_param_array(io, int, NULL, 0);
MODULE_LICENSE("GPL");
static void __exit dmascc_exit(void)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/hamradio/mkiss.c working-2.6.16-rc4-PARAM/drivers/net/hamradio/mkiss.c
--- linux-2.6.16-rc4/drivers/net/hamradio/mkiss.c 2006-02-21 12:59:39.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/hamradio/mkiss.c 2006-02-21 13:27:47.000000000 +1100
@@ -1012,7 +1012,7 @@ static void __exit mkiss_exit_driver(voi
MODULE_AUTHOR("Ralf Baechle DL5RB <[email protected]>");
MODULE_DESCRIPTION("KISS driver for AX.25 over TTYs");
-MODULE_PARM(crc_force, "i");
+module_param(crc_force, int, 0);
MODULE_PARM_DESC(crc_force, "crc [0 = auto | 1 = none | 2 = flexnet | 3 = smack]");
MODULE_LICENSE("GPL");
MODULE_ALIAS_LDISC(N_AX25);
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/irda/irport.c working-2.6.16-rc4-PARAM/drivers/net/irda/irport.c
--- linux-2.6.16-rc4/drivers/net/irda/irport.c 2006-02-21 12:59:40.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/irda/irport.c 2006-02-21 13:28:28.000000000 +1100
@@ -1118,9 +1118,9 @@ static void __exit irport_cleanup(void)
}
}
-MODULE_PARM(io, "1-4i");
+module_param_array(io, int, NULL, 0);
MODULE_PARM_DESC(io, "Base I/O addresses");
-MODULE_PARM(irq, "1-4i");
+module_param_array(irq, int, NULL, 0);
MODULE_PARM_DESC(irq, "IRQ lines");
MODULE_AUTHOR("Dag Brattli <[email protected]>");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/lasi_82596.c working-2.6.16-rc4-PARAM/drivers/net/lasi_82596.c
--- linux-2.6.16-rc4/drivers/net/lasi_82596.c 2006-01-10 15:18:54.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/lasi_82596.c 2006-02-21 13:30:43.000000000 +1100
@@ -177,7 +177,7 @@ static int i596_debug = (DEB_SERIOUS|DEB
MODULE_AUTHOR("Richard Hirst");
MODULE_DESCRIPTION("i82596 driver");
MODULE_LICENSE("GPL");
-MODULE_PARM(i596_debug, "i");
+module_param(i596_debug, int, 0);
MODULE_PARM_DESC(i596_debug, "lasi_82596 debug mask");
/* Copy frames shorter than rx_copybreak, otherwise pass on up in
@@ -1520,9 +1520,9 @@ static void set_multicast_list(struct ne
}
}
-MODULE_PARM(debug, "i");
-MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
static int debug = -1;
+module_param(debug, int, 0);
+MODULE_PARM_DESC(debug, "lasi_82596 debug mask");
static int num_drivers;
static struct net_device *netdevs[MAX_DRIVERS];
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/mac89x0.c working-2.6.16-rc4-PARAM/drivers/net/mac89x0.c
--- linux-2.6.16-rc4/drivers/net/mac89x0.c 2005-02-04 18:50:07.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/mac89x0.c 2006-02-21 13:31:09.000000000 +1100
@@ -629,7 +629,7 @@ static int set_mac_address(struct net_de
static struct net_device *dev_cs89x0;
static int debug;
-MODULE_PARM(debug, "i");
+module_param(debug, int, 0);
MODULE_PARM_DESC(debug, "CS89[02]0 debug level (0-5)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/mace.c working-2.6.16-rc4-PARAM/drivers/net/mace.c
--- linux-2.6.16-rc4/drivers/net/mace.c 2006-01-10 15:18:54.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/mace.c 2006-02-21 13:30:56.000000000 +1100
@@ -1042,7 +1042,7 @@ static void __exit mace_cleanup(void)
MODULE_AUTHOR("Paul Mackerras");
MODULE_DESCRIPTION("PowerMac MACE driver.");
-MODULE_PARM(port_aaui, "i");
+module_param(port_aaui, int, 0);
MODULE_PARM_DESC(port_aaui, "MACE uses AAUI port (0-1)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/meth.c working-2.6.16-rc4-PARAM/drivers/net/meth.c
--- linux-2.6.16-rc4/drivers/net/meth.c 2005-07-15 04:39:09.000000000 +1000
+++ working-2.6.16-rc4-PARAM/drivers/net/meth.c 2006-02-21 13:31:01.000000000 +1100
@@ -62,7 +62,7 @@ MODULE_DESCRIPTION("SGI O2 Builtin Fast
#ifdef HAVE_TX_TIMEOUT
static int timeout = TX_TIMEOUT;
-MODULE_PARM(timeout, "i");
+module_param(timeout, int, 0);
#endif
/*
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/ne-h8300.c working-2.6.16-rc4-PARAM/drivers/net/ne-h8300.c
--- linux-2.6.16-rc4/drivers/net/ne-h8300.c 2005-08-29 14:39:43.000000000 +1000
+++ working-2.6.16-rc4-PARAM/drivers/net/ne-h8300.c 2006-02-21 13:31:30.000000000 +1100
@@ -600,9 +600,9 @@ static int io[MAX_NE_CARDS];
static int irq[MAX_NE_CARDS];
static int bad[MAX_NE_CARDS]; /* 0xbad = bad sig or no reset ack */
-MODULE_PARM(io, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
-MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
-MODULE_PARM(bad, "1-" __MODULE_STRING(MAX_NE_CARDS) "i");
+module_param_array(io, int, NULL, 0);
+module_param_array(irq, int, NULL, 0);
+module_param_array(bad, int, NULL, 0);
MODULE_PARM_DESC(io, "I/O base address(es)");
MODULE_PARM_DESC(irq, "IRQ number(s)");
MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/ni5010.c working-2.6.16-rc4-PARAM/drivers/net/ni5010.c
--- linux-2.6.16-rc4/drivers/net/ni5010.c 2005-02-04 18:50:07.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/ni5010.c 2006-02-21 13:31:42.000000000 +1100
@@ -766,8 +766,8 @@ static void ni5010_show_registers(struct
#ifdef MODULE
static struct net_device *dev_ni5010;
-MODULE_PARM(io, "i");
-MODULE_PARM(irq, "i");
+module_param(io, int, 0);
+module_param(irq, int, 0);
MODULE_PARM_DESC(io, "ni5010 I/O base address");
MODULE_PARM_DESC(irq, "ni5010 IRQ number");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/net/sun3lance.c working-2.6.16-rc4-PARAM/drivers/net/sun3lance.c
--- linux-2.6.16-rc4/drivers/net/sun3lance.c 2006-02-21 12:59:44.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/net/sun3lance.c 2006-02-21 13:31:51.000000000 +1100
@@ -71,7 +71,7 @@ static int lance_debug = LANCE_DEBUG;
#else
static int lance_debug = 1;
#endif
-MODULE_PARM(lance_debug, "i");
+module_param(lance_debug, int, 0);
MODULE_PARM_DESC(lance_debug, "SUN3 Lance debug level (0-3)");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/s390/block/dasd.c working-2.6.16-rc4-PARAM/drivers/s390/block/dasd.c
--- linux-2.6.16-rc4/drivers/s390/block/dasd.c 2006-02-21 12:59:54.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/s390/block/dasd.c 2006-02-21 13:35:13.000000000 +1100
@@ -44,7 +44,6 @@ MODULE_AUTHOR("Holger Smolinski <Holger.
MODULE_DESCRIPTION("Linux on S/390 DASD device driver,"
" Copyright 2000 IBM Corporation");
MODULE_SUPPORTED_DEVICE("dasd");
-MODULE_PARM(dasd, "1-" __MODULE_STRING(256) "s");
MODULE_LICENSE("GPL");
/*
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/s390/block/dasd_devmap.c working-2.6.16-rc4-PARAM/drivers/s390/block/dasd_devmap.c
--- linux-2.6.16-rc4/drivers/s390/block/dasd_devmap.c 2006-02-21 12:59:54.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/s390/block/dasd_devmap.c 2006-02-21 13:36:06.000000000 +1100
@@ -16,6 +16,7 @@
#include <linux/config.h>
#include <linux/ctype.h>
#include <linux/init.h>
+#include <linux/module.h>
#include <asm/debug.h>
#include <asm/uaccess.h>
@@ -69,6 +70,8 @@ int dasd_autodetect = 0; /* is true, whe
* strings when running as a module.
*/
static char *dasd[256];
+module_param_array(dasd, charp, NULL, 0);
+
/*
* Single spinlock to protect devmap structures and lists.
*/
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/scsi/arm/cumana_2.c working-2.6.16-rc4-PARAM/drivers/scsi/arm/cumana_2.c
--- linux-2.6.16-rc4/drivers/scsi/arm/cumana_2.c 2006-02-21 13:00:03.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/scsi/arm/cumana_2.c 2006-02-21 13:36:31.000000000 +1100
@@ -550,6 +550,6 @@ module_exit(cumanascsi2_exit);
MODULE_AUTHOR("Russell King");
MODULE_DESCRIPTION("Cumana SCSI-2 driver for Acorn machines");
-MODULE_PARM(term, "1-8i");
+module_param_array(term, int, NULL, 0);
MODULE_PARM_DESC(term, "SCSI bus termination");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/scsi/arm/eesox.c working-2.6.16-rc4-PARAM/drivers/scsi/arm/eesox.c
--- linux-2.6.16-rc4/drivers/scsi/arm/eesox.c 2006-02-21 13:00:03.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/scsi/arm/eesox.c 2006-02-21 13:36:56.000000000 +1100
@@ -674,6 +674,6 @@ module_exit(eesox_exit);
MODULE_AUTHOR("Russell King");
MODULE_DESCRIPTION("EESOX 'Fast' SCSI driver for Acorn machines");
-MODULE_PARM(term, "1-8i");
+module_param_array(term, int, NULL, 0);
MODULE_PARM_DESC(term, "SCSI bus termination");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/scsi/arm/powertec.c working-2.6.16-rc4-PARAM/drivers/scsi/arm/powertec.c
--- linux-2.6.16-rc4/drivers/scsi/arm/powertec.c 2006-02-21 13:00:03.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/scsi/arm/powertec.c 2006-02-21 13:36:59.000000000 +1100
@@ -466,6 +466,6 @@ module_exit(powertecscsi_exit);
MODULE_AUTHOR("Russell King");
MODULE_DESCRIPTION("Powertec SCSI driver");
-MODULE_PARM(term, "1-8i");
+module_param_array(term, int, NULL, 0);
MODULE_PARM_DESC(term, "SCSI bus termination");
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/scsi/atari_scsi.c working-2.6.16-rc4-PARAM/drivers/scsi/atari_scsi.c
--- linux-2.6.16-rc4/drivers/scsi/atari_scsi.c 2006-01-10 15:19:04.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/scsi/atari_scsi.c 2006-02-21 13:37:26.000000000 +1100
@@ -239,17 +239,17 @@ static int atari_read_overruns = 0;
#endif
static int setup_can_queue = -1;
-MODULE_PARM(setup_can_queue, "i");
+module_param(setup_can_queue, int, 0);
static int setup_cmd_per_lun = -1;
-MODULE_PARM(setup_cmd_per_lun, "i");
+module_param(setup_cmd_per_lun, int, 0);
static int setup_sg_tablesize = -1;
-MODULE_PARM(setup_sg_tablesize, "i");
+module_param(setup_sg_tablesize, int, 0);
#ifdef SUPPORT_TAGS
static int setup_use_tagged_queuing = -1;
-MODULE_PARM(setup_use_tagged_queuing, "i");
+module_param(setup_use_tagged_queuing, int, 0);
#endif
static int setup_hostid = -1;
-MODULE_PARM(setup_hostid, "i");
+module_param(setup_hostid, int, 0);
#if defined(CONFIG_TT_DMA_EMUL)
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/drivers/video/pm3fb.c working-2.6.16-rc4-PARAM/drivers/video/pm3fb.c
--- linux-2.6.16-rc4/drivers/video/pm3fb.c 2006-02-21 13:00:23.000000000 +1100
+++ working-2.6.16-rc4-PARAM/drivers/video/pm3fb.c 2006-02-21 13:40:55.000000000 +1100
@@ -3532,26 +3532,26 @@ int __init pm3fb_init(void)
MODULE_AUTHOR("Romain Dolbeau");
MODULE_DESCRIPTION("Permedia3 framebuffer device driver");
static char *mode[PM3_MAX_BOARD];
-MODULE_PARM(mode,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
+module_param_array(mode, charp, NULL, 0);
MODULE_PARM_DESC(mode,"video mode");
-MODULE_PARM(disable,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
+module_param_array(disable, short, NULL, 0);
MODULE_PARM_DESC(disable,"disable board");
static short off[PM3_MAX_BOARD];
-MODULE_PARM(off,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
+module_param_array(off, short, NULL, 0);
MODULE_PARM_DESC(off,"disable board");
static char *pciid[PM3_MAX_BOARD];
-MODULE_PARM(pciid,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
+module_param_array(pciid, charp, NULL, 0);
MODULE_PARM_DESC(pciid,"board PCI Id");
-MODULE_PARM(noaccel,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
+module_param_array(noaccel, short, NULL, 0);
MODULE_PARM_DESC(noaccel,"disable accel");
static char *font[PM3_MAX_BOARD];
-MODULE_PARM(font,PM3_MAX_BOARD_MODULE_ARRAY_STRING);
+module_param_array(font, charp, NULL, 0);
MODULE_PARM_DESC(font,"choose font");
-MODULE_PARM(depth,PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
+module_param(depth, short, NULL, 0);
MODULE_PARM_DESC(depth,"boot-time depth");
-MODULE_PARM(printtimings, "h");
+module_param(printtimings, short, NULL, 0);
MODULE_PARM_DESC(printtimings, "print the memory timings of the card(s)");
-MODULE_PARM(forcesize, PM3_MAX_BOARD_MODULE_ARRAY_SHORT);
+module_param(forcesize, short, NULL, 0);
MODULE_PARM_DESC(forcesize, "force specified memory size");
/*
MODULE_SUPPORTED_DEVICE("Permedia3 PCI boards")
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/include/linux/module.h working-2.6.16-rc4-PARAM/include/linux/module.h
--- linux-2.6.16-rc4/include/linux/module.h 2006-01-10 15:19:50.000000000 +1100
+++ working-2.6.16-rc4-PARAM/include/linux/module.h 2006-02-21 13:42:08.000000000 +1100
@@ -544,25 +544,6 @@ static inline void module_remove_driver(
/* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
-struct obsolete_modparm {
- char name[64];
- char type[64-sizeof(void *)];
- void *addr;
-};
-
-static inline void MODULE_PARM_(void) { }
-#ifdef MODULE
-/* DEPRECATED: Do not use. */
-#define MODULE_PARM(var,type) \
-extern struct obsolete_modparm __parm_##var \
-__attribute__((section("__obsparm"))); \
-struct obsolete_modparm __parm_##var = \
-{ __stringify(var), type, &MODULE_PARM_ }; \
-__MODULE_PARM_TYPE(var, type);
-#else
-#define MODULE_PARM(var,type) static void __attribute__((__unused__)) *__parm_##var = &MODULE_PARM_;
-#endif
-
#define __MODULE_STRING(x) __stringify(x)
/* Use symbol_get and symbol_put instead. You'll thank me. */
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/include/video/pm3fb.h working-2.6.16-rc4-PARAM/include/video/pm3fb.h
--- linux-2.6.16-rc4/include/video/pm3fb.h 2005-10-31 12:21:21.000000000 +1100
+++ working-2.6.16-rc4-PARAM/include/video/pm3fb.h 2006-02-21 13:39:39.000000000 +1100
@@ -1128,10 +1128,7 @@
#endif
/* max number of simultaneous board */
-/* warning : make sure module array def's are coherent with PM3_MAX_BOARD */
#define PM3_MAX_BOARD 4
-#define PM3_MAX_BOARD_MODULE_ARRAY_SHORT "1-4h"
-#define PM3_MAX_BOARD_MODULE_ARRAY_STRING "1-4s"
/* max size of options */
#define PM3_OPTIONS_SIZE 256
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/init/Kconfig working-2.6.16-rc4-PARAM/init/Kconfig
--- linux-2.6.16-rc4/init/Kconfig 2006-02-21 13:01:38.000000000 +1100
+++ working-2.6.16-rc4-PARAM/init/Kconfig 2006-02-21 13:54:54.000000000 +1100
@@ -459,15 +459,6 @@ config MODULE_FORCE_UNLOAD
rmmod). This is mainly for kernel developers and desperate users.
If unsure, say N.
-config OBSOLETE_MODPARM
- bool
- default y
- depends on MODULES
- help
- You need this option to use module parameters on modules which
- have not been converted to the new module parameter system yet.
- If unsure, say Y.
-
config MODVERSIONS
bool "Module versioning support"
depends on MODULES
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/kernel/module.c working-2.6.16-rc4-PARAM/kernel/module.c
--- linux-2.6.16-rc4/kernel/module.c 2006-02-21 13:01:41.000000000 +1100
+++ working-2.6.16-rc4-PARAM/kernel/module.c 2006-02-21 14:05:04.000000000 +1100
@@ -182,24 +182,6 @@ static unsigned long __find_symbol(const
return 0;
}
-/* Find a symbol in this elf symbol table */
-static unsigned long find_local_symbol(Elf_Shdr *sechdrs,
- unsigned int symindex,
- const char *strtab,
- const char *name)
-{
- unsigned int i;
- Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
-
- /* Search (defined) internal symbols first. */
- for (i = 1; i < sechdrs[symindex].sh_size/sizeof(*sym); i++) {
- if (sym[i].st_shndx != SHN_UNDEF
- && strcmp(name, strtab + sym[i].st_name) == 0)
- return sym[i].st_value;
- }
- return 0;
-}
-
/* Search for module by name: must hold module_mutex. */
static struct module *find_module(const char *name)
{
@@ -731,139 +713,6 @@ static inline void module_unload_init(st
}
#endif /* CONFIG_MODULE_UNLOAD */
-#ifdef CONFIG_OBSOLETE_MODPARM
-/* Bounds checking done below */
-static int obsparm_copy_string(const char *val, struct kernel_param *kp)
-{
- strcpy(kp->arg, val);
- return 0;
-}
-
-static int set_obsolete(const char *val, struct kernel_param *kp)
-{
- unsigned int min, max;
- unsigned int size, maxsize;
- int dummy;
- char *endp;
- const char *p;
- struct obsolete_modparm *obsparm = kp->arg;
-
- if (!val) {
- printk(KERN_ERR "Parameter %s needs an argument\n", kp->name);
- return -EINVAL;
- }
-
- /* type is: [min[-max]]{b,h,i,l,s} */
- p = obsparm->type;
- min = simple_strtol(p, &endp, 10);
- if (endp == obsparm->type)
- min = max = 1;
- else if (*endp == '-') {
- p = endp+1;
- max = simple_strtol(p, &endp, 10);
- } else
- max = min;
- switch (*endp) {
- case 'b':
- return param_array(kp->name, val, min, max, obsparm->addr,
- 1, param_set_byte, &dummy);
- case 'h':
- return param_array(kp->name, val, min, max, obsparm->addr,
- sizeof(short), param_set_short, &dummy);
- case 'i':
- return param_array(kp->name, val, min, max, obsparm->addr,
- sizeof(int), param_set_int, &dummy);
- case 'l':
- return param_array(kp->name, val, min, max, obsparm->addr,
- sizeof(long), param_set_long, &dummy);
- case 's':
- return param_array(kp->name, val, min, max, obsparm->addr,
- sizeof(char *), param_set_charp, &dummy);
-
- case 'c':
- /* Undocumented: 1-5c50 means 1-5 strings of up to 49 chars,
- and the decl is "char xxx[5][50];" */
- p = endp+1;
- maxsize = simple_strtol(p, &endp, 10);
- /* We check lengths here (yes, this is a hack). */
- p = val;
- while (p[size = strcspn(p, ",")]) {
- if (size >= maxsize)
- goto oversize;
- p += size+1;
- }
- if (size >= maxsize)
- goto oversize;
- return param_array(kp->name, val, min, max, obsparm->addr,
- maxsize, obsparm_copy_string, &dummy);
- }
- printk(KERN_ERR "Unknown obsolete parameter type %s\n", obsparm->type);
- return -EINVAL;
- oversize:
- printk(KERN_ERR
- "Parameter %s doesn't fit in %u chars.\n", kp->name, maxsize);
- return -EINVAL;
-}
-
-static int obsolete_params(const char *name,
- char *args,
- struct obsolete_modparm obsparm[],
- unsigned int num,
- Elf_Shdr *sechdrs,
- unsigned int symindex,
- const char *strtab)
-{
- struct kernel_param *kp;
- unsigned int i;
- int ret;
-
- kp = kmalloc(sizeof(kp[0]) * num, GFP_KERNEL);
- if (!kp)
- return -ENOMEM;
-
- for (i = 0; i < num; i++) {
- char sym_name[128 + sizeof(MODULE_SYMBOL_PREFIX)];
-
- snprintf(sym_name, sizeof(sym_name), "%s%s",
- MODULE_SYMBOL_PREFIX, obsparm[i].name);
-
- kp[i].name = obsparm[i].name;
- kp[i].perm = 000;
- kp[i].set = set_obsolete;
- kp[i].get = NULL;
- obsparm[i].addr
- = (void *)find_local_symbol(sechdrs, symindex, strtab,
- sym_name);
- if (!obsparm[i].addr) {
- printk("%s: falsely claims to have parameter %s\n",
- name, obsparm[i].name);
- ret = -EINVAL;
- goto out;
- }
- kp[i].arg = &obsparm[i];
- }
-
- ret = parse_args(name, args, kp, num, NULL);
- out:
- kfree(kp);
- return ret;
-}
-#else
-static int obsolete_params(const char *name,
- char *args,
- struct obsolete_modparm obsparm[],
- unsigned int num,
- Elf_Shdr *sechdrs,
- unsigned int symindex,
- const char *strtab)
-{
- if (num != 0)
- printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
- name);
- return 0;
-}
-#endif /* CONFIG_OBSOLETE_MODPARM */
-
static const char vermagic[] = VERMAGIC_STRING;
#ifdef CONFIG_MODVERSIONS
@@ -1847,27 +1696,17 @@ static struct module *load_module(void _
set_fs(old_fs);
mod->args = args;
- if (obsparmindex) {
- err = obsolete_params(mod->name, mod->args,
- (struct obsolete_modparm *)
- sechdrs[obsparmindex].sh_addr,
- sechdrs[obsparmindex].sh_size
- / sizeof(struct obsolete_modparm),
- sechdrs, symindex,
- (char *)sechdrs[strindex].sh_addr);
- if (setupindex)
- printk(KERN_WARNING "%s: Ignoring new-style "
- "parameters in presence of obsolete ones\n",
- mod->name);
- } else {
- /* Size of section 0 is 0, so this works well if no params */
- err = parse_args(mod->name, mod->args,
- (struct kernel_param *)
- sechdrs[setupindex].sh_addr,
- sechdrs[setupindex].sh_size
- / sizeof(struct kernel_param),
- NULL);
- }
+ if (obsparmindex)
+ printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
+ mod->name);
+
+ /* Size of section 0 is 0, so this works well if no params */
+ err = parse_args(mod->name, mod->args,
+ (struct kernel_param *)
+ sechdrs[setupindex].sh_addr,
+ sechdrs[setupindex].sh_size
+ / sizeof(struct kernel_param),
+ NULL);
if (err < 0)
goto arch_cleanup;
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/kernel/rcutorture.c working-2.6.16-rc4-PARAM/kernel/rcutorture.c
--- linux-2.6.16-rc4/kernel/rcutorture.c 2006-02-21 13:01:41.000000000 +1100
+++ working-2.6.16-rc4-PARAM/kernel/rcutorture.c 2006-02-21 13:43:13.000000000 +1100
@@ -54,15 +54,15 @@ static int verbose; /* Print more debug
static int test_no_idle_hz; /* Test RCU's support for tickless idle CPUs. */
static int shuffle_interval = 5; /* Interval between shuffles (in sec)*/
-MODULE_PARM(nreaders, "i");
+module_param(nreaders, int, 0);
MODULE_PARM_DESC(nreaders, "Number of RCU reader threads");
-MODULE_PARM(stat_interval, "i");
+module_param(stat_interval, int, 0);
MODULE_PARM_DESC(stat_interval, "Number of seconds between stats printk()s");
-MODULE_PARM(verbose, "i");
+module_param(verbose, bool, 0);
MODULE_PARM_DESC(verbose, "Enable verbose debugging printk()s");
-MODULE_PARM(test_no_idle_hz, "i");
+module_param(test_no_idle_hz, bool, 0);
MODULE_PARM_DESC(test_no_idle_hz, "Test support for tickless idle CPUs");
-MODULE_PARM(shuffle_interval, "i");
+module_param(shuffle_interval, int, 0);
MODULE_PARM_DESC(shuffle_interval, "Number of seconds between shuffles");
#define TORTURE_FLAG "rcutorture: "
#define PRINTK_STRING(s) \
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/au1000.c working-2.6.16-rc4-PARAM/sound/oss/au1000.c
--- linux-2.6.16-rc4/sound/oss/au1000.c 2006-01-10 15:20:11.000000000 +1100
+++ working-2.6.16-rc4-PARAM/sound/oss/au1000.c 2006-02-21 13:43:52.000000000 +1100
@@ -98,7 +98,7 @@
/* Boot options */
static int vra = 0; // 0 = no VRA, 1 = use VRA if codec supports it
-MODULE_PARM(vra, "i");
+module_param(vra, bool, 0);
MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/au1550_ac97.c working-2.6.16-rc4-PARAM/sound/oss/au1550_ac97.c
--- linux-2.6.16-rc4/sound/oss/au1550_ac97.c 2006-02-21 13:02:29.000000000 +1100
+++ working-2.6.16-rc4-PARAM/sound/oss/au1550_ac97.c 2006-02-21 13:46:07.000000000 +1100
@@ -77,7 +77,7 @@
* 0 = no VRA, 1 = use VRA if codec supports it
*/
static int vra = 1;
-MODULE_PARM(vra, "i");
+module_param(vra, bool, 0);
MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
static struct au1550_state {
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/dmasound/dmasound_core.c working-2.6.16-rc4-PARAM/sound/oss/dmasound/dmasound_core.c
--- linux-2.6.16-rc4/sound/oss/dmasound/dmasound_core.c 2005-02-04 18:48:27.000000000 +1100
+++ working-2.6.16-rc4-PARAM/sound/oss/dmasound/dmasound_core.c 2006-02-21 13:43:42.000000000 +1100
@@ -195,18 +195,18 @@
*/
int dmasound_catchRadius = 0;
-MODULE_PARM(dmasound_catchRadius, "i");
+module_param(dmasound_catchRadius, int, 0);
static unsigned int numWriteBufs = DEFAULT_N_BUFFERS;
-MODULE_PARM(numWriteBufs, "i");
+module_param(numWriteBufs, int, 0);
static unsigned int writeBufSize = DEFAULT_BUFF_SIZE ; /* in bytes */
-MODULE_PARM(writeBufSize, "i");
+module_param(writeBufSize, int, 0);
#ifdef HAS_RECORD
static unsigned int numReadBufs = DEFAULT_N_BUFFERS;
-MODULE_PARM(numReadBufs, "i");
+module_param(numReadBufs, int, 0);
static unsigned int readBufSize = DEFAULT_BUFF_SIZE; /* in bytes */
-MODULE_PARM(readBufSize, "i");
+module_param(readBufSize, int, 0);
#endif
MODULE_LICENSE("GPL");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/ite8172.c working-2.6.16-rc4-PARAM/sound/oss/ite8172.c
--- linux-2.6.16-rc4/sound/oss/ite8172.c 2006-02-21 13:02:32.000000000 +1100
+++ working-2.6.16-rc4-PARAM/sound/oss/ite8172.c 2006-02-21 13:44:31.000000000 +1100
@@ -1966,9 +1966,9 @@ static int i2s_fmt[NR_DEVICE];
static unsigned int devindex;
-MODULE_PARM(spdif, "1-" __MODULE_STRING(NR_DEVICE) "i");
+module_param_array(spdif, int, NULL, 0);
MODULE_PARM_DESC(spdif, "if 1 the S/PDIF digital output is enabled");
-MODULE_PARM(i2s_fmt, "1-" __MODULE_STRING(NR_DEVICE) "i");
+module_param_array(i2s_fmt, int, NULL, 0);
MODULE_PARM_DESC(i2s_fmt, "the format of I2S");
MODULE_AUTHOR("Monta Vista Software, [email protected]");
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/swarm_cs4297a.c working-2.6.16-rc4-PARAM/sound/oss/swarm_cs4297a.c
--- linux-2.6.16-rc4/sound/oss/swarm_cs4297a.c 2005-05-25 13:49:32.000000000 +1000
+++ working-2.6.16-rc4-PARAM/sound/oss/swarm_cs4297a.c 2006-02-21 13:45:16.000000000 +1100
@@ -153,8 +153,8 @@ static void start_adc(struct cs4297a_sta
#if CSDEBUG
static unsigned long cs_debuglevel = 4; // levels range from 1-9
static unsigned long cs_debugmask = CS_INIT /*| CS_IOCTL*/;
-MODULE_PARM(cs_debuglevel, "i");
-MODULE_PARM(cs_debugmask, "i");
+module_param(cs_debuglevel, int, 0);
+module_param(cs_debugmask, int, 0);
#endif
#define CS_TRUE 1
#define CS_FALSE 0
diff -urpN --exclude TAGS -X /home/rusty/devel/kernel/kernel-patches/current-dontdiff --minimal linux-2.6.16-rc4/sound/oss/waveartist.c working-2.6.16-rc4-PARAM/sound/oss/waveartist.c
--- linux-2.6.16-rc4/sound/oss/waveartist.c 2005-05-25 13:49:32.000000000 +1000
+++ working-2.6.16-rc4-PARAM/sound/oss/waveartist.c 2006-02-21 13:46:00.000000000 +1100
@@ -2028,8 +2028,8 @@ __setup("waveartist=", setup_waveartist)
#endif
MODULE_DESCRIPTION("Rockwell WaveArtist RWA-010 sound driver");
-MODULE_PARM(io, "i"); /* IO base */
-MODULE_PARM(irq, "i"); /* IRQ */
-MODULE_PARM(dma, "i"); /* DMA */
-MODULE_PARM(dma2, "i"); /* DMA2 */
+module_param(io, int, 0); /* IO base */
+module_param(irq, int, 0); /* IRQ */
+module_param(dma, int, 0); /* DMA */
+module_param(dma2, int, 0); /* DMA2 */
MODULE_LICENSE("GPL");
--
ccontrol: http://ozlabs.org/~rusty/ccontrol
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]