lkml.org 
[lkml]   [2003]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] Add boot command line parsing for the e100 driver
Annoyed by the fact that I could set configuration parameters for a
compiled-in e100 driver, I've added boot-line parameter parsing. The
patch is attached. It would be very helpful if this could be applied.
This is relative to 2.5.68, but should be pretty portable.

-Corey
--- linux.orig/drivers/net/e100/e100_main.c Mon Apr 21 11:20:11 2003
+++ linux/drivers/net/e100/e100_main.c Mon May 19 10:57:33 2003
@@ -174,7 +174,7 @@
* over and over (plus this helps to avoid typo bugs).
*/
#define E100_PARAM(X, S) \
- static const int X[E100_MAX_NIC + 1] = E100_PARAM_INIT; \
+ static int X[E100_MAX_NIC + 1] = E100_PARAM_INIT; \
MODULE_PARM(X, "1-" __MODULE_STRING(E100_MAX_NIC) "i"); \
MODULE_PARM_DESC(X, S);

@@ -375,6 +375,77 @@
E100_PARAM(BundleSmallFr, "Disable or enable interrupt bundling of small frames");
E100_PARAM(BundleMax, "Maximum number for CPU saver's packet bundling");
E100_PARAM(IFS, "Disable or enable the adaptive IFS algorithm");
+
+#if !defined(MODULE)
+static int next_e100_setup = 0;
+
+#define E100_BOOT_PARAM(parm, strparm) \
+ if (strcmp(strparm, name) == 0) { \
+ int val; \
+ char *end; \
+ val = simple_strtoul(strval, &end, 0); \
+ if (*end != '\0') { \
+ printk("Invalid value for parm num %d, name" \
+ " %s, parm ignored\n", count, name); \
+ continue; \
+ } \
+ printk(" Setting %s to %d\n", strparm, val); \
+ parm[i] = val; \
+ continue; \
+ }
+
+static int __init
+e100_boot_setup(char *str)
+{
+ int i = next_e100_setup;
+ int count = -1;
+ char *p;
+ char *name;
+ char *strval;
+
+ if (i >= E100_MAX_NIC) {
+ printk("Attempted to configure too many e100 devices\n");
+ return -ENODEV;
+ }
+
+ printk("e100 boot setup for device %d\n", i);
+
+ next_e100_setup++;
+
+ for (p=strsep(&str, ":,"); p; p=strsep(&str, ":,")) {
+ count++;
+ name = p;
+ name = strsep(&p, "=");
+ if (!name) {
+ printk(" error: Empty parm %d, ignored\n", count);
+ continue;
+ }
+ strval = strsep(&p, "");
+ if (!strval) {
+ printk(" error: No value for parm %d, ignored\n",
+ count);
+ continue;
+ }
+
+ E100_BOOT_PARAM(TxDescriptors, "TxDescriptors");
+ E100_BOOT_PARAM(RxDescriptors, "RxDescriptors");
+ E100_BOOT_PARAM(XsumRX, "XsumRX");
+ E100_BOOT_PARAM(e100_speed_duplex, "e100_speed_duplex");
+ E100_BOOT_PARAM(ucode, "ucode");
+ E100_BOOT_PARAM(ber, "ber");
+ E100_BOOT_PARAM(flow_control, "flow_control");
+ E100_BOOT_PARAM(IntDelay, "IntDelay");
+ E100_BOOT_PARAM(BundleSmallFr, "BundleSmallFr");
+ E100_BOOT_PARAM(BundleMax, "BundleMax");
+ E100_BOOT_PARAM(IFS, "IFS");
+ printk(" Invalid parameter name %s, ignored\n", name);
+ }
+
+ return 0;
+}
+
+__setup("e100=", e100_boot_setup);
+#endif

/**
* e100_exec_cmd - issue a comand
--- linux.orig/Documentation/networking/e100.txt Wed Mar 26 08:00:53 2003
+++ linux/Documentation/networking/e100.txt Mon May 19 10:50:47 2003
@@ -110,6 +110,17 @@
resources for the second adapter. This configuration favors the second
adapter. The driver supports up to 16 network adapters concurrently.

+If the driver is compiled into the kernel, you may also specify these
+on the boot command line for linux using the 'e100' parameter,
+followed by the "option=val" separated by commas or colons. You may
+put the e100 parameter on the command line multiple times, each one
+configures the next device. For instance, you can say:
+
+ e100=ucode=0 e100=ucode=1,IntDelay=700
+
+to turn of the microcode download on the first device, and turn on the
+microcode download and set the delay to 700 on the second device.
+
The default value for each parameter is generally the recommended setting,
unless otherwise noted.
\
 
 \ /
  Last update: 2005-03-22 13:35    [W:0.047 / U:0.228 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site