VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / drivers / usb / serial / kobil_sct.c
index 79cb22e..b479916 100644 (file)
 #include <asm/uaccess.h>
 #include <linux/usb.h>
 #include <linux/ioctl.h>
-
-
+#include "usb-serial.h"
 #include "kobil_sct.h"
-//#include "../core/usb-debug.c"
 
-#ifdef CONFIG_USB_SERIAL_DEBUG
-       static int debug = 1;
-#else
-       static int debug;
-#endif
-
-#include "usb-serial.h"
+static int debug;
 
 /* Version Information */
 #define DRIVER_VERSION "21/05/2004"
@@ -361,7 +353,7 @@ static void kobil_close (struct usb_serial_port *port, struct file *filp)
        if (port->write_urb){
                usb_unlink_urb( port->write_urb );
                usb_free_urb( port->write_urb );
-               port->write_urb = 0;
+               port->write_urb = NULL;
        }
        if (port->interrupt_in_urb){
                usb_unlink_urb (port->interrupt_in_urb);
@@ -456,7 +448,7 @@ static int kobil_write (struct usb_serial_port *port, int from_user,
                memcpy (priv->buf + priv->filled, buf, count);
        }
 
-       usb_serial_debug_data (__FILE__, __FUNCTION__, count, priv->buf + priv->filled);
+       usb_serial_debug_data(debug, &port->dev, __FUNCTION__, count, priv->buf + priv->filled);
 
        priv->filled = priv->filled + count;
 
@@ -643,6 +635,7 @@ static int  kobil_ioctl(struct usb_serial_port *port, struct file *file,
        unsigned char *transfer_buffer;
        int transfer_buffer_length = 8;
        char *settings;
+       void __user *user_arg = (void __user *)arg;
 
        priv = usb_get_serial_port_data(port);
        if ((priv->device_type == KOBIL_USBTWIN_PRODUCT_ID) || (priv->device_type == KOBIL_KAAN_SIM_PRODUCT_ID)) {
@@ -652,12 +645,12 @@ static int  kobil_ioctl(struct usb_serial_port *port, struct file *file,
 
        switch (cmd) {
        case TCGETS:   // 0x5401
-               result = verify_area(VERIFY_WRITE, (void *)arg, sizeof(struct termios));
+               result = verify_area(VERIFY_WRITE, user_arg, sizeof(struct termios));
                if (result) {
                        dbg("%s - port %d Error in verify_area", __FUNCTION__, port->number);
                        return(result);
                }
-               if (kernel_termios_to_user_termios((struct termios *)arg,
+               if (kernel_termios_to_user_termios((struct termios __user *)arg,
                                                   &priv->internal_termios))
                        return -EFAULT;
                return 0;
@@ -667,13 +660,13 @@ static int  kobil_ioctl(struct usb_serial_port *port, struct file *file,
                        dbg("%s - port %d Error: port->tty->termios is NULL", __FUNCTION__, port->number);
                        return -ENOTTY;
                }
-               result = verify_area(VERIFY_READ, (void *)arg, sizeof(struct termios));
+               result = verify_area(VERIFY_READ, user_arg, sizeof(struct termios));
                if (result) {
                        dbg("%s - port %d Error in verify_area", __FUNCTION__, port->number);
                        return result;
                }
                if (user_termios_to_kernel_termios(&priv->internal_termios,
-                                                  (struct termios *)arg))
+                                                  (struct termios __user *)arg))
                        return -EFAULT;
                
                settings = (unsigned char *) kmalloc(50, GFP_KERNEL);  
@@ -787,5 +780,5 @@ MODULE_AUTHOR( DRIVER_AUTHOR );
 MODULE_DESCRIPTION( DRIVER_DESC );
 MODULE_LICENSE( "GPL" );
 
-MODULE_PARM(debug, "i");
+module_param(debug, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug enabled or not");