patch-2.1.27 linux/drivers/net/baycom.c

Next file: linux/drivers/net/cs89x0.c
Previous file: linux/drivers/net/Makefile
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.26/linux/drivers/net/baycom.c linux/drivers/net/baycom.c
@@ -73,7 +73,6 @@
 /*****************************************************************************/
 
 #include <linux/module.h>
-
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <linux/types.h>
@@ -85,7 +84,6 @@
 #include <asm/system.h>
 #include <asm/bitops.h>
 #include <asm/io.h>
-#include <asm/uaccess.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
 #include <linux/netdevice.h>
@@ -94,6 +92,48 @@
 
 /* --------------------------------------------------------------------- */
 
+/*
+ * currently this module is supposed to support both module styles, i.e.
+ * the old one present up to about 2.1.9, and the new one functioning
+ * starting with 2.1.21. The reason is I have a kit allowing to compile
+ * this module also under 2.0.x which was requested by several people.
+ * This will go in 2.2
+ */
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE >= 0x20100
+#include <asm/uaccess.h>
+#else
+#include <asm/segment.h>
+#include <linux/mm.h>
+
+#undef put_user
+#undef get_user
+
+#define put_user(x,ptr) ({ __put_user((unsigned long)(x),(ptr),sizeof(*(ptr))); 0; })
+#define get_user(x,ptr) ({ x = ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr)))); 0; })
+
+extern inline int copy_from_user(void *to, const void *from, unsigned long n)
+{
+        int i = verify_area(VERIFY_READ, from, n);
+        if (i)
+                return i;
+        memcpy_fromfs(to, from, n);
+        return 0;
+}
+
+extern inline int copy_to_user(void *to, const void *from, unsigned long n)
+{
+        int i = verify_area(VERIFY_WRITE, to, n);
+        if (i)
+                return i;
+        memcpy_tofs(to, from, n);
+        return 0;
+}
+#endif
+
+/* --------------------------------------------------------------------- */
+
 #define BAYCOM_DEBUG
 
 /*
@@ -101,7 +141,6 @@
  */
 #define BAYCOM_OPTIONS_SOFTDCD  1
 
-
 /* --------------------------------------------------------------------- */
 
 static const char bc_drvname[] = "baycom";
@@ -897,9 +936,6 @@
 
 /* --------------------------------------------------------------------- */
 
-#ifdef MODULE
-static
-#endif /* MODULE */
 int baycom_init(void)
 {
 	int i, j, found = 0;
@@ -946,12 +982,23 @@
 /*
  * command line settable parameters
  */
-char *mode = NULL;
-int iobase = 0x3f8;
-int irq = 4;
+static char *mode = NULL;
+static int iobase = 0x3f8;
+static int irq = 4;
+
+#if LINUX_VERSION_CODE >= 0x20115
+
 MODULE_PARM(mode, "s");
+MODULE_PARM_DESC(mode, "baycom operating mode; eg. ser12* or par96");
 MODULE_PARM(iobase, "i");
+MODULE_PARM_DESC(iobase, "baycom io base address");
 MODULE_PARM(irq, "i");
+MODULE_PARM_DESC(irq, "baycom irq number");
+
+MODULE_AUTHOR("Thomas M. Sailer, [email protected], [email protected]");
+MODULE_DESCRIPTION("Baycom ser12, par96 and picpar amateur radio modem driver");
+
+#endif
 
 int init_module(void)
 {
@@ -996,7 +1043,7 @@
 	int i;
 
 	for (i = 0; (i < NR_PORTS) && (baycom_ports[i].mode); i++);
-	if ((i >= NR_PORTS) || (ints[0] < 3)) {
+	if ((i >= NR_PORTS) || (ints[0] < 2)) {
 		printk(KERN_INFO "%s: too many or invalid interface "
 		       "specifications\n", bc_drvname);
 		return;

FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]