|
@@ -222,6 +222,8 @@ static void edge_break(struct tty_struct *tty, int break_state);
|
|
|
static int edge_tiocmget(struct tty_struct *tty, struct file *file);
|
|
|
static int edge_tiocmset(struct tty_struct *tty, struct file *file,
|
|
|
unsigned int set, unsigned int clear);
|
|
|
+static int edge_get_icount(struct tty_struct *tty,
|
|
|
+ struct serial_icounter_struct *icount);
|
|
|
static int edge_startup(struct usb_serial *serial);
|
|
|
static void edge_disconnect(struct usb_serial *serial);
|
|
|
static void edge_release(struct usb_serial *serial);
|
|
@@ -1624,6 +1626,31 @@ static int edge_tiocmget(struct tty_struct *tty, struct file *file)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+static int edge_get_icount(struct tty_struct *tty,
|
|
|
+ struct serial_icounter_struct *icount)
|
|
|
+{
|
|
|
+ struct usb_serial_port *port = tty->driver_data;
|
|
|
+ struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
|
|
+ struct async_icount cnow;
|
|
|
+ cnow = edge_port->icount;
|
|
|
+
|
|
|
+ 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;
|
|
|
+
|
|
|
+ dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d",
|
|
|
+ __func__, port->number, icount->rx, icount->tx);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int get_serial_info(struct edgeport_port *edge_port,
|
|
|
struct serial_struct __user *retinfo)
|
|
|
{
|
|
@@ -1650,7 +1677,6 @@ static int get_serial_info(struct edgeport_port *edge_port,
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/*****************************************************************************
|
|
|
* SerialIoctl
|
|
|
* this function handles any ioctl calls to the driver
|
|
@@ -1663,7 +1689,6 @@ static int edge_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
|
|
struct async_icount cnow;
|
|
|
struct async_icount cprev;
|
|
|
- struct serial_icounter_struct icount;
|
|
|
|
|
|
dbg("%s - port %d, cmd = 0x%x", __func__, port->number, cmd);
|
|
|
|
|
@@ -1702,26 +1727,6 @@ static int edge_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
/* NOTREACHED */
|
|
|
break;
|
|
|
|
|
|
- case TIOCGICOUNT:
|
|
|
- cnow = edge_port->icount;
|
|
|
- memset(&icount, 0, sizeof(icount));
|
|
|
- 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;
|
|
|
-
|
|
|
- dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d",
|
|
|
- __func__, port->number, icount.rx, icount.tx);
|
|
|
- if (copy_to_user((void __user *)arg, &icount, sizeof(icount)))
|
|
|
- return -EFAULT;
|
|
|
- return 0;
|
|
|
}
|
|
|
return -ENOIOCTLCMD;
|
|
|
}
|