n_tty: Factor flagged char handling into separate fn
authorPeter Hurley <peter@hurleysoftware.com>
Sat, 15 Jun 2013 14:21:24 +0000 (10:21 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Jul 2013 00:10:17 +0000 (17:10 -0700)
Prepare for modal receive_buf() handling; factor handling for
TTY_BREAK, TTY_PARITY, TTY_FRAME and TTY_OVERRUN into
n_tty_receive_char_flagged().

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/n_tty.c

index 68fc4c347970ac38bac6c32ab77521a6c6dc56b1..6aa90332dd3e14e8722dec8329bcf90d1b09437b 100644 (file)
@@ -1468,6 +1468,29 @@ handle_newline:
        put_tty_queue(c, ldata);
 }
 
+static void
+n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
+{
+       char buf[64];
+
+       switch (flag) {
+       case TTY_BREAK:
+               n_tty_receive_break(tty);
+               break;
+       case TTY_PARITY:
+       case TTY_FRAME:
+               n_tty_receive_parity_error(tty, c);
+               break;
+       case TTY_OVERRUN:
+               n_tty_receive_overrun(tty);
+               break;
+       default:
+               printk(KERN_ERR "%s: unknown flag %d\n",
+                      tty_name(tty, buf), flag);
+               break;
+       }
+}
+
 /**
  *     n_tty_receive_buf       -       data receive
  *     @tty: terminal device
@@ -1511,34 +1534,19 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
                          char *fp, int count)
 {
        struct n_tty_data *ldata = tty->disc_data;
-       char    flags = TTY_NORMAL;
-       char    buf[64];
 
        if (ldata->real_raw)
                n_tty_receive_buf_real_raw(tty, cp, fp, count);
        else {
+               char flag = TTY_NORMAL;
+
                while (count--) {
                        if (fp)
-                               flags = *fp++;
-                       switch (flags) {
-                       case TTY_NORMAL:
+                               flag = *fp++;
+                       if (likely(flag == TTY_NORMAL))
                                n_tty_receive_char(tty, *cp++);
-                               break;
-                       case TTY_BREAK:
-                               n_tty_receive_break(tty);
-                               break;
-                       case TTY_PARITY:
-                       case TTY_FRAME:
-                               n_tty_receive_parity_error(tty, *cp++);
-                               break;
-                       case TTY_OVERRUN:
-                               n_tty_receive_overrun(tty);
-                               break;
-                       default:
-                               printk(KERN_ERR "%s: unknown flag %d\n",
-                                      tty_name(tty, buf), flags);
-                               break;
-                       }
+                       else
+                               n_tty_receive_char_flagged(tty, *cp++, flag);
                }
 
                flush_echoes(tty);