sharkcz / rpms / kernel

Forked from rpms/kernel 6 years ago
Clone
Kyle McMartin ebd7718
From f815dfecf23bfd19d4b5e9f1a660b1f5dbe70472 Mon Sep 17 00:00:00 2001
Kyle McMartin ebd7718
From: Alan Cox <alan@linux.intel.com>
Kyle McMartin ebd7718
Date: Thu, 16 Sep 2010 18:21:52 +0100
Kyle McMartin ebd7718
Subject: [PATCH 2/2] tty: icount changeover for other main devices
Kyle McMartin ebd7718
Kyle McMartin ebd7718
Again basically cut and paste
Kyle McMartin ebd7718
Kyle McMartin ebd7718
Convert the main driver set to use the hooks for GICOUNT
Kyle McMartin ebd7718
Kyle McMartin ebd7718
Signed-off-by: Alan Cox <alan@linux.intel.com>
Kyle McMartin ebd7718
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Kyle McMartin ebd7718
---
Kyle McMartin ebd7718
 arch/ia64/hp/sim/simserial.c      |   12 +------
Kyle McMartin ebd7718
 drivers/char/amiserial.c          |   56 ++++++++++++++++-------------
Kyle McMartin ebd7718
 drivers/char/cyclades.c           |   49 +++++++++++++------------
Kyle McMartin ebd7718
 drivers/char/ip2/ip2main.c        |   72 ++++++++++++++++++++++---------------
Kyle McMartin ebd7718
 drivers/char/mxser.c              |   62 ++++++++++++++++++--------------
Kyle McMartin ebd7718
 drivers/char/nozomi.c             |   37 +++++++++----------
Kyle McMartin ebd7718
 drivers/char/pcmcia/synclink_cs.c |   60 ++++++++++++++-----------------
Kyle McMartin ebd7718
 drivers/char/synclink.c           |   73 +++++++++++++++++--------------------
Kyle McMartin ebd7718
 drivers/char/synclink_gt.c        |   56 +++++++++++++++--------------
Kyle McMartin ebd7718
 drivers/char/synclinkmp.c         |   61 ++++++++++++++-----------------
Kyle McMartin ebd7718
 drivers/serial/68360serial.c      |   51 +++++++++++++-------------
Kyle McMartin ebd7718
 net/bluetooth/rfcomm/tty.c        |    4 --
Kyle McMartin ebd7718
 12 files changed, 297 insertions(+), 296 deletions(-)
Kyle McMartin ebd7718
Kyle McMartin ebd7718
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
Kyle McMartin ebd7718
index 2bef526..204f650 100644
Kyle McMartin ebd7718
--- a/arch/ia64/hp/sim/simserial.c
Kyle McMartin ebd7718
+++ b/arch/ia64/hp/sim/simserial.c
Kyle McMartin ebd7718
@@ -395,7 +395,7 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
Kyle McMartin ebd7718
 	    (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) &&
Kyle McMartin ebd7718
-	    (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	    (cmd != TIOCMIWAIT)) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -433,16 +433,6 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		case TIOCMIWAIT:
Kyle McMartin ebd7718
 			printk(KERN_INFO "rs_ioctl: TIOCMIWAIT: called\n");
Kyle McMartin ebd7718
 			return 0;
Kyle McMartin ebd7718
-		/*
Kyle McMartin ebd7718
-		 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-		 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
-		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
-		 */
Kyle McMartin ebd7718
-		case TIOCGICOUNT:
Kyle McMartin ebd7718
-			printk(KERN_INFO "rs_ioctl: TIOCGICOUNT called\n");
Kyle McMartin ebd7718
-			return 0;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
 		case TIOCSERGWILD:
Kyle McMartin ebd7718
 		case TIOCSERSWILD:
Kyle McMartin ebd7718
 			/* "setserial -W" is called in Debian boot */
Kyle McMartin ebd7718
diff --git a/drivers/char/amiserial.c b/drivers/char/amiserial.c
Kyle McMartin ebd7718
index 4f8d60c..2918d5d 100644
Kyle McMartin ebd7718
--- a/drivers/char/amiserial.c
Kyle McMartin ebd7718
+++ b/drivers/char/amiserial.c
Kyle McMartin ebd7718
@@ -1263,6 +1263,36 @@ static int rs_break(struct tty_struct *tty, int break_state)
Kyle McMartin ebd7718
 	return 0;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+/*
Kyle McMartin ebd7718
+ * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
+ * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
+ * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
+ *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
+ */
Kyle McMartin ebd7718
+static int rs_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	struct async_struct *info = tty->driver_data;
Kyle McMartin ebd7718
+	struct async_icount cnow;
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	local_irq_save(flags);
Kyle McMartin ebd7718
+	cnow = info->state->icount;
Kyle McMartin ebd7718
+	local_irq_restore(flags);
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 static int rs_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		    unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
@@ -1332,31 +1362,6 @@ static int rs_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 			}
Kyle McMartin ebd7718
 			/* NOTREACHED */
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-		/* 
Kyle McMartin ebd7718
-		 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-		 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
-		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
-		 */
Kyle McMartin ebd7718
-		case TIOCGICOUNT:
Kyle McMartin ebd7718
-			local_irq_save(flags);
Kyle McMartin ebd7718
-			cnow = info->state->icount;
Kyle McMartin ebd7718
-			local_irq_restore(flags);
Kyle McMartin ebd7718
-			icount.cts = cnow.cts;
Kyle McMartin ebd7718
-			icount.dsr = cnow.dsr;
Kyle McMartin ebd7718
-			icount.rng = cnow.rng;
Kyle McMartin ebd7718
-			icount.dcd = cnow.dcd;
Kyle McMartin ebd7718
-			icount.rx = cnow.rx;
Kyle McMartin ebd7718
-			icount.tx = cnow.tx;
Kyle McMartin ebd7718
-			icount.frame = cnow.frame;
Kyle McMartin ebd7718
-			icount.overrun = cnow.overrun;
Kyle McMartin ebd7718
-			icount.parity = cnow.parity;
Kyle McMartin ebd7718
-			icount.brk = cnow.brk;
Kyle McMartin ebd7718
-			icount.buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-			if (copy_to_user(argp, &icount, sizeof(icount)))
Kyle McMartin ebd7718
-				return -EFAULT;
Kyle McMartin ebd7718
-			return 0;
Kyle McMartin ebd7718
 		case TIOCSERGWILD:
Kyle McMartin ebd7718
 		case TIOCSERSWILD:
Kyle McMartin ebd7718
 			/* "setserial -W" is called in Debian boot */
Kyle McMartin ebd7718
@@ -1949,6 +1954,7 @@ static const struct tty_operations serial_ops = {
Kyle McMartin ebd7718
 	.wait_until_sent = rs_wait_until_sent,
Kyle McMartin ebd7718
 	.tiocmget = rs_tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = rs_tiocmset,
Kyle McMartin ebd7718
+	.get_icount = rs_get_icount,
Kyle McMartin ebd7718
 	.proc_fops = &rs_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
Kyle McMartin ebd7718
index 9824b41..2364df8 100644
Kyle McMartin ebd7718
--- a/drivers/char/cyclades.c
Kyle McMartin ebd7718
+++ b/drivers/char/cyclades.c
Kyle McMartin ebd7718
@@ -2791,29 +2791,6 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
 		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
 		 */
Kyle McMartin ebd7718
-	case TIOCGICOUNT: {
Kyle McMartin ebd7718
-		struct serial_icounter_struct sic = { };
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		spin_lock_irqsave(&info->card->card_lock, flags);
Kyle McMartin ebd7718
-		cnow = info->icount;
Kyle McMartin ebd7718
-		spin_unlock_irqrestore(&info->card->card_lock, flags);
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		sic.cts = cnow.cts;
Kyle McMartin ebd7718
-		sic.dsr = cnow.dsr;
Kyle McMartin ebd7718
-		sic.rng = cnow.rng;
Kyle McMartin ebd7718
-		sic.dcd = cnow.dcd;
Kyle McMartin ebd7718
-		sic.rx = cnow.rx;
Kyle McMartin ebd7718
-		sic.tx = cnow.tx;
Kyle McMartin ebd7718
-		sic.frame = cnow.frame;
Kyle McMartin ebd7718
-		sic.overrun = cnow.overrun;
Kyle McMartin ebd7718
-		sic.parity = cnow.parity;
Kyle McMartin ebd7718
-		sic.brk = cnow.brk;
Kyle McMartin ebd7718
-		sic.buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		if (copy_to_user(argp, &sic, sizeof(sic)))
Kyle McMartin ebd7718
-			ret_val = -EFAULT;
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
-	}
Kyle McMartin ebd7718
 	default:
Kyle McMartin ebd7718
 		ret_val = -ENOIOCTLCMD;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -2825,6 +2802,31 @@ cy_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	return ret_val;
Kyle McMartin ebd7718
 }				/* cy_ioctl */
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+static int cy_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *sic)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	struct cyclades_port *info = tty->driver_data;
Kyle McMartin ebd7718
+	struct cyclades_icount cnow;	/* Used to snapshot */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->card->card_lock, flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->card->card_lock, flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	sic->cts = cnow.cts;
Kyle McMartin ebd7718
+	sic->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	sic->rng = cnow.rng;
Kyle McMartin ebd7718
+	sic->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	sic->rx = cnow.rx;
Kyle McMartin ebd7718
+	sic->tx = cnow.tx;
Kyle McMartin ebd7718
+	sic->frame = cnow.frame;
Kyle McMartin ebd7718
+	sic->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	sic->parity = cnow.parity;
Kyle McMartin ebd7718
+	sic->brk = cnow.brk;
Kyle McMartin ebd7718
+	sic->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /*
Kyle McMartin ebd7718
  * This routine allows the tty driver to be notified when
Kyle McMartin ebd7718
  * device's termios settings have changed.  Note that a
Kyle McMartin ebd7718
@@ -4086,6 +4088,7 @@ static const struct tty_operations cy_ops = {
Kyle McMartin ebd7718
 	.wait_until_sent = cy_wait_until_sent,
Kyle McMartin ebd7718
 	.tiocmget = cy_tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = cy_tiocmset,
Kyle McMartin ebd7718
+	.get_icount = cy_get_icount,
Kyle McMartin ebd7718
 	.proc_fops = &cyclades_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c
Kyle McMartin ebd7718
index 911e1da..c0f864c 100644
Kyle McMartin ebd7718
--- a/drivers/char/ip2/ip2main.c
Kyle McMartin ebd7718
+++ b/drivers/char/ip2/ip2main.c
Kyle McMartin ebd7718
@@ -183,6 +183,8 @@ static void ip2_hangup(PTTY);
Kyle McMartin ebd7718
 static int  ip2_tiocmget(struct tty_struct *tty, struct file *file);
Kyle McMartin ebd7718
 static int  ip2_tiocmset(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 			 unsigned int set, unsigned int clear);
Kyle McMartin ebd7718
+static int ip2_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+		struct serial_icounter_struct *icount);
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 static void set_irq(int, int);
Kyle McMartin ebd7718
 static void ip2_interrupt_bh(struct work_struct *work);
Kyle McMartin ebd7718
@@ -454,6 +456,7 @@ static const struct tty_operations ip2_ops = {
Kyle McMartin ebd7718
 	.hangup          = ip2_hangup,
Kyle McMartin ebd7718
 	.tiocmget	 = ip2_tiocmget,
Kyle McMartin ebd7718
 	.tiocmset	 = ip2_tiocmset,
Kyle McMartin ebd7718
+	.get_icount	 = ip2_get_icount,
Kyle McMartin ebd7718
 	.proc_fops	 = &ip2_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
@@ -2124,7 +2127,6 @@ ip2_ioctl ( PTTY tty, struct file *pFile, UINT cmd, ULONG arg )
Kyle McMartin ebd7718
 	i2ChanStrPtr pCh = DevTable[tty->index];
Kyle McMartin ebd7718
 	i2eBordStrPtr pB;
Kyle McMartin ebd7718
 	struct async_icount cprev, cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
-	struct serial_icounter_struct __user *p_cuser;
Kyle McMartin ebd7718
 	int rc = 0;
Kyle McMartin ebd7718
 	unsigned long flags;
Kyle McMartin ebd7718
 	void __user *argp = (void __user *)arg;
Kyle McMartin ebd7718
@@ -2293,34 +2295,6 @@ ip2_ioctl ( PTTY tty, struct file *pFile, UINT cmd, ULONG arg )
Kyle McMartin ebd7718
 		break;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	/*
Kyle McMartin ebd7718
-	 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-	 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-	 * NB: both 1->0 and 0->1 transitions are counted except for RI where
Kyle McMartin ebd7718
-	 * only 0->1 is counted. The controller is quite capable of counting
Kyle McMartin ebd7718
-	 * both, but this done to preserve compatibility with the standard
Kyle McMartin ebd7718
-	 * serial driver.
Kyle McMartin ebd7718
-	 */
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		ip2trace (CHANN, ITRC_IOCTL, 11, 1, rc );
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		write_lock_irqsave(&pB->read_fifo_spinlock, flags);
Kyle McMartin ebd7718
-		cnow = pCh->icount;
Kyle McMartin ebd7718
-		write_unlock_irqrestore(&pB->read_fifo_spinlock, flags);
Kyle McMartin ebd7718
-		p_cuser = argp;
Kyle McMartin ebd7718
-		rc = put_user(cnow.cts, &p_cuser->cts);
Kyle McMartin ebd7718
-		rc = put_user(cnow.dsr, &p_cuser->dsr);
Kyle McMartin ebd7718
-		rc = put_user(cnow.rng, &p_cuser->rng);
Kyle McMartin ebd7718
-		rc = put_user(cnow.dcd, &p_cuser->dcd);
Kyle McMartin ebd7718
-		rc = put_user(cnow.rx, &p_cuser->rx);
Kyle McMartin ebd7718
-		rc = put_user(cnow.tx, &p_cuser->tx);
Kyle McMartin ebd7718
-		rc = put_user(cnow.frame, &p_cuser->frame);
Kyle McMartin ebd7718
-		rc = put_user(cnow.overrun, &p_cuser->overrun);
Kyle McMartin ebd7718
-		rc = put_user(cnow.parity, &p_cuser->parity);
Kyle McMartin ebd7718
-		rc = put_user(cnow.brk, &p_cuser->brk);
Kyle McMartin ebd7718
-		rc = put_user(cnow.buf_overrun, &p_cuser->buf_overrun);
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-	/*
Kyle McMartin ebd7718
 	 * The rest are not supported by this driver. By returning -ENOIOCTLCMD they
Kyle McMartin ebd7718
 	 * will be passed to the line discipline for it to handle.
Kyle McMartin ebd7718
 	 */
Kyle McMartin ebd7718
@@ -2344,6 +2318,46 @@ ip2_ioctl ( PTTY tty, struct file *pFile, UINT cmd, ULONG arg )
Kyle McMartin ebd7718
 	return rc;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+static int ip2_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+		struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	i2ChanStrPtr pCh = DevTable[tty->index];
Kyle McMartin ebd7718
+	i2eBordStrPtr pB;
Kyle McMartin ebd7718
+	struct async_icount cnow;	/* kernel counter temp */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	if ( pCh == NULL )
Kyle McMartin ebd7718
+		return -ENODEV;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	pB = pCh->pMyBord;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	/*
Kyle McMartin ebd7718
+	 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
+	 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
+	 * NB: both 1->0 and 0->1 transitions are counted except for RI where
Kyle McMartin ebd7718
+	 * only 0->1 is counted. The controller is quite capable of counting
Kyle McMartin ebd7718
+	 * both, but this done to preserve compatibility with the standard
Kyle McMartin ebd7718
+	 * serial driver.
Kyle McMartin ebd7718
+	 */
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	write_lock_irqsave(&pB->read_fifo_spinlock, flags);
Kyle McMartin ebd7718
+	cnow = pCh->icount;
Kyle McMartin ebd7718
+	write_unlock_irqrestore(&pB->read_fifo_spinlock, flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /******************************************************************************/
Kyle McMartin ebd7718
 /* Function:   GetSerialInfo()                                                */
Kyle McMartin ebd7718
 /* Parameters: Pointer to channel structure                                   */
Kyle McMartin ebd7718
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c
Kyle McMartin ebd7718
index d2692d4..65aeae8 100644
Kyle McMartin ebd7718
--- a/drivers/char/mxser.c
Kyle McMartin ebd7718
+++ b/drivers/char/mxser.c
Kyle McMartin ebd7718
@@ -1700,7 +1700,7 @@ static int mxser_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		return 0;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-	if (cmd != TIOCGSERIAL && cmd != TIOCMIWAIT && cmd != TIOCGICOUNT &&
Kyle McMartin ebd7718
+	if (cmd != TIOCGSERIAL && cmd != TIOCMIWAIT &&
Kyle McMartin ebd7718
 			test_bit(TTY_IO_ERROR, &tty->flags))
Kyle McMartin ebd7718
 		return -EIO;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
@@ -1730,32 +1730,6 @@ static int mxser_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 		return wait_event_interruptible(info->port.delta_msr_wait,
Kyle McMartin ebd7718
 				mxser_cflags_changed(info, arg, &cnow));
Kyle McMartin ebd7718
-	/*
Kyle McMartin ebd7718
-	 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-	 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-	 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
-	 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
-	 */
Kyle McMartin ebd7718
-	case TIOCGICOUNT: {
Kyle McMartin ebd7718
-		struct serial_icounter_struct icnt = { 0 };
Kyle McMartin ebd7718
-		spin_lock_irqsave(&info->slock, flags);
Kyle McMartin ebd7718
-		cnow = info->icount;
Kyle McMartin ebd7718
-		spin_unlock_irqrestore(&info->slock, flags);
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		icnt.frame = cnow.frame;
Kyle McMartin ebd7718
-		icnt.brk = cnow.brk;
Kyle McMartin ebd7718
-		icnt.overrun = cnow.overrun;
Kyle McMartin ebd7718
-		icnt.buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
-		icnt.parity = cnow.parity;
Kyle McMartin ebd7718
-		icnt.rx = cnow.rx;
Kyle McMartin ebd7718
-		icnt.tx = cnow.tx;
Kyle McMartin ebd7718
-		icnt.cts = cnow.cts;
Kyle McMartin ebd7718
-		icnt.dsr = cnow.dsr;
Kyle McMartin ebd7718
-		icnt.rng = cnow.rng;
Kyle McMartin ebd7718
-		icnt.dcd = cnow.dcd;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-		return copy_to_user(argp, &icnt, sizeof(icnt)) ? -EFAULT : 0;
Kyle McMartin ebd7718
-	}
Kyle McMartin ebd7718
 	case MOXA_HighSpeedOn:
Kyle McMartin ebd7718
 		return put_user(info->baud_base != 115200 ? 1 : 0, (int __user *)argp);
Kyle McMartin ebd7718
 	case MOXA_SDS_RSTICOUNTER:
Kyle McMartin ebd7718
@@ -1828,6 +1802,39 @@ static int mxser_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	return 0;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+	/*
Kyle McMartin ebd7718
+	 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
+	 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
+	 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
+	 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
+	 */
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+static int mxser_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+		struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	struct mxser_port *info = tty->driver_data;
Kyle McMartin ebd7718
+	struct async_icount cnow;
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->slock, flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->slock, flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 static void mxser_stoprx(struct tty_struct *tty)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
 	struct mxser_port *info = tty->driver_data;
Kyle McMartin ebd7718
@@ -2326,6 +2333,7 @@ static const struct tty_operations mxser_ops = {
Kyle McMartin ebd7718
 	.wait_until_sent = mxser_wait_until_sent,
Kyle McMartin ebd7718
 	.tiocmget = mxser_tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = mxser_tiocmset,
Kyle McMartin ebd7718
+	.get_icount = mxser_get_icount,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 struct tty_port_operations mxser_port_ops = {
Kyle McMartin ebd7718
diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c
Kyle McMartin ebd7718
index 18af923..0924435 100644
Kyle McMartin ebd7718
--- a/drivers/char/nozomi.c
Kyle McMartin ebd7718
+++ b/drivers/char/nozomi.c
Kyle McMartin ebd7718
@@ -1805,24 +1805,24 @@ static int ntty_cflags_changed(struct port *port, unsigned long flags,
Kyle McMartin ebd7718
 	return ret;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-static int ntty_ioctl_tiocgicount(struct port *port, void __user *argp)
Kyle McMartin ebd7718
+static int ntty_tiocgicount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
+	struct port *port = tty->driver_data;
Kyle McMartin ebd7718
 	const struct async_icount cnow = port->tty_icount;
Kyle McMartin ebd7718
-	struct serial_icounter_struct icount;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-	icount.cts = cnow.cts;
Kyle McMartin ebd7718
-	icount.dsr = cnow.dsr;
Kyle McMartin ebd7718
-	icount.rng = cnow.rng;
Kyle McMartin ebd7718
-	icount.dcd = cnow.dcd;
Kyle McMartin ebd7718
-	icount.rx = cnow.rx;
Kyle McMartin ebd7718
-	icount.tx = cnow.tx;
Kyle McMartin ebd7718
-	icount.frame = cnow.frame;
Kyle McMartin ebd7718
-	icount.overrun = cnow.overrun;
Kyle McMartin ebd7718
-	icount.parity = cnow.parity;
Kyle McMartin ebd7718
-	icount.brk = cnow.brk;
Kyle McMartin ebd7718
-	icount.buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-	return copy_to_user(argp, &icount, sizeof(icount)) ? -EFAULT : 0;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 static int ntty_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
@@ -1841,9 +1841,7 @@ static int ntty_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		rval = wait_event_interruptible(port->tty_wait,
Kyle McMartin ebd7718
 				ntty_cflags_changed(port, arg, &cprev));
Kyle McMartin ebd7718
 		break;
Kyle McMartin ebd7718
-	} case TIOCGICOUNT:
Kyle McMartin ebd7718
-		rval = ntty_ioctl_tiocgicount(port, argp);
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
+	}
Kyle McMartin ebd7718
 	default:
Kyle McMartin ebd7718
 		DBG1("ERR: 0x%08X, %d", cmd, cmd);
Kyle McMartin ebd7718
 		break;
Kyle McMartin ebd7718
@@ -1923,6 +1921,7 @@ static const struct tty_operations tty_ops = {
Kyle McMartin ebd7718
 	.chars_in_buffer = ntty_chars_in_buffer,
Kyle McMartin ebd7718
 	.tiocmget = ntty_tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = ntty_tiocmset,
Kyle McMartin ebd7718
+	.get_icount = ntty_tiocgicount,
Kyle McMartin ebd7718
 	.install = ntty_install,
Kyle McMartin ebd7718
 	.cleanup = ntty_cleanup,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
Kyle McMartin ebd7718
index 824d67c..1dc493f 100644
Kyle McMartin ebd7718
--- a/drivers/char/pcmcia/synclink_cs.c
Kyle McMartin ebd7718
+++ b/drivers/char/pcmcia/synclink_cs.c
Kyle McMartin ebd7718
@@ -2220,6 +2220,32 @@ static int mgslpc_break(struct tty_struct *tty, int break_state)
Kyle McMartin ebd7718
 	return 0;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+static int mgslpc_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data;
Kyle McMartin ebd7718
+	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /* Service an IOCTL request
Kyle McMartin ebd7718
  *
Kyle McMartin ebd7718
  * Arguments:
Kyle McMartin ebd7718
@@ -2235,11 +2261,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 			unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
 	MGSLPC_INFO * info = (MGSLPC_INFO *)tty->driver_data;
Kyle McMartin ebd7718
-	int error;
Kyle McMartin ebd7718
-	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
-	struct serial_icounter_struct __user *p_cuser;	/* user space */
Kyle McMartin ebd7718
 	void __user *argp = (void __user *)arg;
Kyle McMartin ebd7718
-	unsigned long flags;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if (debug_level >= DEBUG_LEVEL_INFO)
Kyle McMartin ebd7718
 		printk("%s(%d):mgslpc_ioctl %s cmd=%08X\n", __FILE__,__LINE__,
Kyle McMartin ebd7718
@@ -2249,7 +2271,7 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		return -ENODEV;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
Kyle McMartin ebd7718
-	    (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	    (cmd != TIOCMIWAIT)) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -2279,34 +2301,6 @@ static int mgslpc_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		return wait_events(info, argp);
Kyle McMartin ebd7718
 	case TIOCMIWAIT:
Kyle McMartin ebd7718
 		return modem_input_wait(info,(int)arg);
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
-		cnow = info->icount;
Kyle McMartin ebd7718
-		spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
-		p_cuser = argp;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.cts, &p_cuser->cts);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.dsr, &p_cuser->dsr);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.rng, &p_cuser->rng);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.dcd, &p_cuser->dcd);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.rx, &p_cuser->rx);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.tx, &p_cuser->tx);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.frame, &p_cuser->frame);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.overrun, &p_cuser->overrun);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.parity, &p_cuser->parity);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.brk, &p_cuser->brk);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.buf_overrun, &p_cuser->buf_overrun);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		return 0;
Kyle McMartin ebd7718
 	default:
Kyle McMartin ebd7718
 		return -ENOIOCTLCMD;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c
Kyle McMartin ebd7718
index 0658fc5..9970aca 100644
Kyle McMartin ebd7718
--- a/drivers/char/synclink.c
Kyle McMartin ebd7718
+++ b/drivers/char/synclink.c
Kyle McMartin ebd7718
@@ -2920,6 +2920,38 @@ static int mgsl_break(struct tty_struct *tty, int break_state)
Kyle McMartin ebd7718
 	
Kyle McMartin ebd7718
 }	/* end of mgsl_break() */
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+/*
Kyle McMartin ebd7718
+ * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
+ * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
+ * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
+ *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
+ */
Kyle McMartin ebd7718
+static int msgl_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	struct mgsl_struct * info = tty->driver_data;
Kyle McMartin ebd7718
+	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->irq_spinlock,flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->irq_spinlock,flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /* mgsl_ioctl()	Service an IOCTL request
Kyle McMartin ebd7718
  * 	
Kyle McMartin ebd7718
  * Arguments:
Kyle McMartin ebd7718
@@ -2945,7 +2977,7 @@ static int mgsl_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		return -ENODEV;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
Kyle McMartin ebd7718
-	    (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	    (cmd != TIOCMIWAIT)) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -2958,11 +2990,7 @@ static int mgsl_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 static int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
-	int error;
Kyle McMartin ebd7718
-	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
 	void __user *argp = (void __user *)arg;
Kyle McMartin ebd7718
-	struct serial_icounter_struct __user *p_cuser;	/* user space */
Kyle McMartin ebd7718
-	unsigned long flags;
Kyle McMartin ebd7718
 	
Kyle McMartin ebd7718
 	switch (cmd) {
Kyle McMartin ebd7718
 		case MGSL_IOCGPARAMS:
Kyle McMartin ebd7718
@@ -2991,40 +3019,6 @@ static int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigne
Kyle McMartin ebd7718
 		case TIOCMIWAIT:
Kyle McMartin ebd7718
 			return modem_input_wait(info,(int)arg);
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-		/* 
Kyle McMartin ebd7718
-		 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-		 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
-		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
-		 */
Kyle McMartin ebd7718
-		case TIOCGICOUNT:
Kyle McMartin ebd7718
-			spin_lock_irqsave(&info->irq_spinlock,flags);
Kyle McMartin ebd7718
-			cnow = info->icount;
Kyle McMartin ebd7718
-			spin_unlock_irqrestore(&info->irq_spinlock,flags);
Kyle McMartin ebd7718
-			p_cuser = argp;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.cts, &p_cuser->cts);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.dsr, &p_cuser->dsr);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.rng, &p_cuser->rng);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.dcd, &p_cuser->dcd);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.rx, &p_cuser->rx);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.tx, &p_cuser->tx);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.frame, &p_cuser->frame);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.overrun, &p_cuser->overrun);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.parity, &p_cuser->parity);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.brk, &p_cuser->brk);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			PUT_USER(error,cnow.buf_overrun, &p_cuser->buf_overrun);
Kyle McMartin ebd7718
-			if (error) return error;
Kyle McMartin ebd7718
-			return 0;
Kyle McMartin ebd7718
 		default:
Kyle McMartin ebd7718
 			return -ENOIOCTLCMD;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -4325,6 +4319,7 @@ static const struct tty_operations mgsl_ops = {
Kyle McMartin ebd7718
 	.hangup = mgsl_hangup,
Kyle McMartin ebd7718
 	.tiocmget = tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = tiocmset,
Kyle McMartin ebd7718
+	.get_icount = msgl_get_icount,
Kyle McMartin ebd7718
 	.proc_fops = &mgsl_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
diff --git a/drivers/char/synclink_gt.c b/drivers/char/synclink_gt.c
Kyle McMartin ebd7718
index 4561ce2..54fa0ee4 100644
Kyle McMartin ebd7718
--- a/drivers/char/synclink_gt.c
Kyle McMartin ebd7718
+++ b/drivers/char/synclink_gt.c
Kyle McMartin ebd7718
@@ -1025,9 +1025,6 @@ static int ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		 unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
 	struct slgt_info *info = tty->driver_data;
Kyle McMartin ebd7718
-	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
-	struct serial_icounter_struct __user *p_cuser;	/* user space */
Kyle McMartin ebd7718
-	unsigned long flags;
Kyle McMartin ebd7718
 	void __user *argp = (void __user *)arg;
Kyle McMartin ebd7718
 	int ret;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
@@ -1036,7 +1033,7 @@ static int ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	DBGINFO(("%s ioctl() cmd=%08X\n", info->device_name, cmd));
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
Kyle McMartin ebd7718
-	    (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	    (cmd != TIOCMIWAIT)) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -1089,25 +1086,6 @@ static int ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	case MGSL_IOCWAITGPIO:
Kyle McMartin ebd7718
 		ret = wait_gpio(info, argp);
Kyle McMartin ebd7718
 		break;
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
-		cnow = info->icount;
Kyle McMartin ebd7718
-		spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
-		p_cuser = argp;
Kyle McMartin ebd7718
-		if (put_user(cnow.cts, &p_cuser->cts) ||
Kyle McMartin ebd7718
-		    put_user(cnow.dsr, &p_cuser->dsr) ||
Kyle McMartin ebd7718
-		    put_user(cnow.rng, &p_cuser->rng) ||
Kyle McMartin ebd7718
-		    put_user(cnow.dcd, &p_cuser->dcd) ||
Kyle McMartin ebd7718
-		    put_user(cnow.rx, &p_cuser->rx) ||
Kyle McMartin ebd7718
-		    put_user(cnow.tx, &p_cuser->tx) ||
Kyle McMartin ebd7718
-		    put_user(cnow.frame, &p_cuser->frame) ||
Kyle McMartin ebd7718
-		    put_user(cnow.overrun, &p_cuser->overrun) ||
Kyle McMartin ebd7718
-		    put_user(cnow.parity, &p_cuser->parity) ||
Kyle McMartin ebd7718
-		    put_user(cnow.brk, &p_cuser->brk) ||
Kyle McMartin ebd7718
-		    put_user(cnow.buf_overrun, &p_cuser->buf_overrun))
Kyle McMartin ebd7718
-			ret = -EFAULT;
Kyle McMartin ebd7718
-		ret = 0;
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
 	default:
Kyle McMartin ebd7718
 		ret = -ENOIOCTLCMD;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -1115,6 +1093,33 @@ static int ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	return ret;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+static int get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	struct slgt_info *info = tty->driver_data;
Kyle McMartin ebd7718
+	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /*
Kyle McMartin ebd7718
  * support for 32 bit ioctl calls on 64 bit systems
Kyle McMartin ebd7718
  */
Kyle McMartin ebd7718
@@ -1204,10 +1209,6 @@ static long slgt_compat_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	case MGSL_IOCSGPIO:
Kyle McMartin ebd7718
 	case MGSL_IOCGGPIO:
Kyle McMartin ebd7718
 	case MGSL_IOCWAITGPIO:
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		rc = ioctl(tty, file, cmd, (unsigned long)(compat_ptr(arg)));
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
 	case MGSL_IOCSTXIDLE:
Kyle McMartin ebd7718
 	case MGSL_IOCTXENABLE:
Kyle McMartin ebd7718
 	case MGSL_IOCRXENABLE:
Kyle McMartin ebd7718
@@ -3638,6 +3639,7 @@ static const struct tty_operations ops = {
Kyle McMartin ebd7718
 	.hangup = hangup,
Kyle McMartin ebd7718
 	.tiocmget = tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = tiocmset,
Kyle McMartin ebd7718
+	.get_icount = get_icount,
Kyle McMartin ebd7718
 	.proc_fops = &synclink_gt_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c
Kyle McMartin ebd7718
index 2b18adc..beffc24 100644
Kyle McMartin ebd7718
--- a/drivers/char/synclinkmp.c
Kyle McMartin ebd7718
+++ b/drivers/char/synclinkmp.c
Kyle McMartin ebd7718
@@ -1255,10 +1255,6 @@ static int do_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		 unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
 	SLMP_INFO *info = tty->driver_data;
Kyle McMartin ebd7718
-	int error;
Kyle McMartin ebd7718
-	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
-	struct serial_icounter_struct __user *p_cuser;	/* user space */
Kyle McMartin ebd7718
-	unsigned long flags;
Kyle McMartin ebd7718
 	void __user *argp = (void __user *)arg;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if (debug_level >= DEBUG_LEVEL_INFO)
Kyle McMartin ebd7718
@@ -1269,7 +1265,7 @@ static int do_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		return -ENODEV;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
Kyle McMartin ebd7718
-	    (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	    (cmd != TIOCMIWAIT)) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -1307,34 +1303,6 @@ static int do_ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
 		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
 		 */
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
-		cnow = info->icount;
Kyle McMartin ebd7718
-		spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
-		p_cuser = argp;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.cts, &p_cuser->cts);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.dsr, &p_cuser->dsr);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.rng, &p_cuser->rng);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.dcd, &p_cuser->dcd);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.rx, &p_cuser->rx);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.tx, &p_cuser->tx);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.frame, &p_cuser->frame);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.overrun, &p_cuser->overrun);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.parity, &p_cuser->parity);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.brk, &p_cuser->brk);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		PUT_USER(error,cnow.buf_overrun, &p_cuser->buf_overrun);
Kyle McMartin ebd7718
-		if (error) return error;
Kyle McMartin ebd7718
-		return 0;
Kyle McMartin ebd7718
 	default:
Kyle McMartin ebd7718
 		return -ENOIOCTLCMD;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -1351,6 +1319,32 @@ static int ioctl(struct tty_struct *tty, struct file *file,
Kyle McMartin ebd7718
 	return ret;
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+static int get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	SLMP_INFO *info = tty->driver_data;
Kyle McMartin ebd7718
+	struct mgsl_icount cnow;	/* kernel counter temps */
Kyle McMartin ebd7718
+	unsigned long flags;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	spin_lock_irqsave(&info->lock,flags);
Kyle McMartin ebd7718
+	cnow = info->icount;
Kyle McMartin ebd7718
+	spin_unlock_irqrestore(&info->lock,flags);
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+	icount->rx = cnow.rx;
Kyle McMartin ebd7718
+	icount->tx = cnow.tx;
Kyle McMartin ebd7718
+	icount->frame = cnow.frame;
Kyle McMartin ebd7718
+	icount->overrun = cnow.overrun;
Kyle McMartin ebd7718
+	icount->parity = cnow.parity;
Kyle McMartin ebd7718
+	icount->brk = cnow.brk;
Kyle McMartin ebd7718
+	icount->buf_overrun = cnow.buf_overrun;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 /*
Kyle McMartin ebd7718
  * /proc fs routines....
Kyle McMartin ebd7718
  */
Kyle McMartin ebd7718
@@ -3908,6 +3902,7 @@ static const struct tty_operations ops = {
Kyle McMartin ebd7718
 	.hangup = hangup,
Kyle McMartin ebd7718
 	.tiocmget = tiocmget,
Kyle McMartin ebd7718
 	.tiocmset = tiocmset,
Kyle McMartin ebd7718
+	.get_icount = get_icount,
Kyle McMartin ebd7718
 	.proc_fops = &synclinkmp_proc_fops,
Kyle McMartin ebd7718
 };
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
diff --git a/drivers/serial/68360serial.c b/drivers/serial/68360serial.c
Kyle McMartin ebd7718
index 24661cd..1e4f831 100644
Kyle McMartin ebd7718
--- a/drivers/serial/68360serial.c
Kyle McMartin ebd7718
+++ b/drivers/serial/68360serial.c
Kyle McMartin ebd7718
@@ -1381,6 +1381,30 @@ static void send_break(ser_info_t *info, unsigned int duration)
Kyle McMartin ebd7718
 }
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
+/*
Kyle McMartin ebd7718
+ * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
+ * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
+ * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
+ *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
+ */
Kyle McMartin ebd7718
+static int rs_360_get_icount(struct tty_struct *tty,
Kyle McMartin ebd7718
+				struct serial_icounter_struct *icount)
Kyle McMartin ebd7718
+{
Kyle McMartin ebd7718
+	ser_info_t *info = (ser_info_t *)tty->driver_data;
Kyle McMartin ebd7718
+	struct async_icount cnow;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	local_irq_disable();
Kyle McMartin ebd7718
+	cnow = info->state->icount;
Kyle McMartin ebd7718
+	local_irq_enable();
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	icount->cts = cnow.cts;
Kyle McMartin ebd7718
+	icount->dsr = cnow.dsr;
Kyle McMartin ebd7718
+	icount->rng = cnow.rng;
Kyle McMartin ebd7718
+	icount->dcd = cnow.dcd;
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
+	return 0;
Kyle McMartin ebd7718
+}
Kyle McMartin ebd7718
+
Kyle McMartin ebd7718
 static int rs_360_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 		    unsigned int cmd, unsigned long arg)
Kyle McMartin ebd7718
 {
Kyle McMartin ebd7718
@@ -1394,7 +1418,7 @@ static int rs_360_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 	if (serial_paranoia_check(info, tty->name, "rs_ioctl"))
Kyle McMartin ebd7718
 		return -ENODEV;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-	if ((cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) {
Kyle McMartin ebd7718
+	if (cmd != TIOCMIWAIT) {
Kyle McMartin ebd7718
 		if (tty->flags & (1 << TTY_IO_ERROR))
Kyle McMartin ebd7718
 		    return -EIO;
Kyle McMartin ebd7718
 	}
Kyle McMartin ebd7718
@@ -1477,31 +1501,6 @@ static int rs_360_ioctl(struct tty_struct *tty, struct file * file,
Kyle McMartin ebd7718
 			return 0;
Kyle McMartin ebd7718
 #endif
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-		/* 
Kyle McMartin ebd7718
-		 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
Kyle McMartin ebd7718
-		 * Return: write counters to the user passed counter struct
Kyle McMartin ebd7718
-		 * NB: both 1->0 and 0->1 transitions are counted except for
Kyle McMartin ebd7718
-		 *     RI where only 0->1 is counted.
Kyle McMartin ebd7718
-		 */
Kyle McMartin ebd7718
-		case TIOCGICOUNT:
Kyle McMartin ebd7718
-			local_irq_disable();
Kyle McMartin ebd7718
-			cnow = info->state->icount;
Kyle McMartin ebd7718
-			local_irq_enable();
Kyle McMartin ebd7718
-			p_cuser = (struct serial_icounter_struct *) arg;
Kyle McMartin ebd7718
-/* 			error = put_user(cnow.cts, &p_cuser->cts); */
Kyle McMartin ebd7718
-/* 			if (error) return error; */
Kyle McMartin ebd7718
-/* 			error = put_user(cnow.dsr, &p_cuser->dsr); */
Kyle McMartin ebd7718
-/* 			if (error) return error; */
Kyle McMartin ebd7718
-/* 			error = put_user(cnow.rng, &p_cuser->rng); */
Kyle McMartin ebd7718
-/* 			if (error) return error; */
Kyle McMartin ebd7718
-/* 			error = put_user(cnow.dcd, &p_cuser->dcd); */
Kyle McMartin ebd7718
-/* 			if (error) return error; */
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
-			put_user(cnow.cts, &p_cuser->cts);
Kyle McMartin ebd7718
-			put_user(cnow.dsr, &p_cuser->dsr);
Kyle McMartin ebd7718
-			put_user(cnow.rng, &p_cuser->rng);
Kyle McMartin ebd7718
-			put_user(cnow.dcd, &p_cuser->dcd);
Kyle McMartin ebd7718
-			return 0;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
 		default:
Kyle McMartin ebd7718
 			return -ENOIOCTLCMD;
Kyle McMartin ebd7718
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c
Kyle McMartin ebd7718
index 309b6c2..8996006 100644
Kyle McMartin ebd7718
--- a/net/bluetooth/rfcomm/tty.c
Kyle McMartin ebd7718
+++ b/net/bluetooth/rfcomm/tty.c
Kyle McMartin ebd7718
@@ -844,10 +844,6 @@ static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned
Kyle McMartin ebd7718
 		BT_DBG("TIOCMIWAIT");
Kyle McMartin ebd7718
 		break;
Kyle McMartin ebd7718
 
Kyle McMartin ebd7718
-	case TIOCGICOUNT:
Kyle McMartin ebd7718
-		BT_DBG("TIOCGICOUNT");
Kyle McMartin ebd7718
-		break;
Kyle McMartin ebd7718
-
Kyle McMartin ebd7718
 	case TIOCGSERIAL:
Kyle McMartin ebd7718
 		BT_ERR("TIOCGSERIAL is not supported");
Kyle McMartin ebd7718
 		return -ENOIOCTLCMD;
Kyle McMartin ebd7718
-- 
Kyle McMartin ebd7718
1.7.3.2
Kyle McMartin ebd7718