--- serial.c.orig Sun Jan 28 21:18:47 2001 +++ serial.c Sun Jan 28 21:16:31 2001 @@ -1860,6 +1860,21 @@ return put_user(result,value); } +static int get_serial_stats(struct async_struct * info, struct serial_stats_struct *retinfo) +{ + struct serial_stats_struct k_stats; + struct async_icount *icount = &info->state->icount; + + cli(); + do_gettimeofday(&k_stats.ts); + k_stats.count = info->tty->count; + k_stats.rx = icount->rx; + k_stats.tx = icount->tx; + sti(); + if (copy_to_user(retinfo,&k_stats,sizeof(*retinfo))) + return -EFAULT; + return 0; +} static int get_modem_info(struct async_struct * info, unsigned int *value) { @@ -2117,6 +2132,7 @@ if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGSTRUCT) && + (cmd != TIOCSERGSTATS) && (cmd != TIOCMIWAIT) && (cmd != TIOCGICOUNT)) { if (tty->flags & (1 << TTY_IO_ERROR)) return -EIO; @@ -2147,6 +2163,9 @@ return -EFAULT; return 0; + case TIOCSERGSTATS: + return get_serial_stats(info, + (struct serial_stats_struct *) arg); #ifdef CONFIG_SERIAL_MULTIPORT case TIOCSERGETMULTI: return get_multiport_struct(info,