Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6
[linux-3.10.git] / drivers / char / pcmcia / synclink_cs.c
index be18100..bfc10f8 100644 (file)
@@ -2191,6 +2191,32 @@ static int mgslpc_break(struct tty_struct *tty, int break_state)
        return 0;
 }
 
+static int mgslpc_get_icount(struct tty_struct *tty,
+                               struct serial_icounter_struct *icount)
+{
+       MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data;
+       struct mgsl_icount cnow;        /* kernel counter temps */
+       unsigned long flags;
+
+       spin_lock_irqsave(&info->lock,flags);
+       cnow = info->icount;
+       spin_unlock_irqrestore(&info->lock,flags);
+
+       icount->cts = cnow.cts;
+       icount->dsr = cnow.dsr;
+       icount->rng = cnow.rng;
+       icount->dcd = cnow.dcd;
+       icount->rx = cnow.rx;
+       icount->tx = cnow.tx;
+       icount->frame = cnow.frame;
+       icount->overrun = cnow.overrun;
+       icount->parity = cnow.parity;
+       icount->brk = cnow.brk;
+       icount->buf_overrun = cnow.buf_overrun;
+
+       return 0;
+}
+
 /* Service an IOCTL request
  *
  * Arguments:
@@ -2206,11 +2232,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
                        unsigned int cmd, unsigned long arg)
 {
        MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data;
-       int error;
-       struct mgsl_icount cnow;        /* kernel counter temps */
-       struct serial_icounter_struct __user *p_cuser;  /* user space */
        void __user *argp = (void __user *)arg;
-       unsigned long flags;
 
        if (debug_level >= DEBUG_LEVEL_INFO)
                printk("%s(%d):mgslpc_ioctl %s cmd=%08X\n", __FILE__,__LINE__,
@@ -2220,7 +2242,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
                return -ENODEV;
 
        if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
-           (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
+           (cmd != TIOCMIWAIT)) {
                if (tty->flags & (1 << TTY_IO_ERROR))
                    return -EIO;
        }
@@ -2250,34 +2272,6 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
                return wait_events(info, argp);
        case TIOCMIWAIT:
                return modem_input_wait(info,(int)arg);
-       case TIOCGICOUNT:
-               spin_lock_irqsave(&info->lock,flags);
-               cnow = info->icount;
-               spin_unlock_irqrestore(&info->lock,flags);
-               p_cuser = argp;
-               PUT_USER(error,cnow.cts, &p_cuser->cts);
-               if (error) return error;
-               PUT_USER(error,cnow.dsr, &p_cuser->dsr);
-               if (error) return error;
-               PUT_USER(error,cnow.rng, &p_cuser->rng);
-               if (error) return error;
-               PUT_USER(error,cnow.dcd, &p_cuser->dcd);
-               if (error) return error;
-               PUT_USER(error,cnow.rx, &p_cuser->rx);
-               if (error) return error;
-               PUT_USER(error,cnow.tx, &p_cuser->tx);
-               if (error) return error;
-               PUT_USER(error,cnow.frame, &p_cuser->frame);
-               if (error) return error;
-               PUT_USER(error,cnow.overrun, &p_cuser->overrun);
-               if (error) return error;
-               PUT_USER(error,cnow.parity, &p_cuser->parity);
-               if (error) return error;
-               PUT_USER(error,cnow.brk, &p_cuser->brk);
-               if (error) return error;
-               PUT_USER(error,cnow.buf_overrun, &p_cuser->buf_overrun);
-               if (error) return error;
-               return 0;
        default:
                return -ENOIOCTLCMD;
        }