aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/n_tty.c
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2013-06-15 10:21:24 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-23 20:10:17 -0400
commitd2f8d7abd1e7ac04a0b42df36b53fef00d5d73aa (patch)
tree5d1bcd616e7ff4d630e270e5e77f547e4315e0ec /drivers/tty/n_tty.c
parentb0ac50be1f398ae1daedcf1ce71ac6b6409c88d2 (diff)
n_tty: Factor flagged char handling into separate fn
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>
Diffstat (limited to 'drivers/tty/n_tty.c')
-rw-r--r--drivers/tty/n_tty.c50
1 files changed, 29 insertions, 21 deletions
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index 68fc4c347970..6aa90332dd3e 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -1468,6 +1468,29 @@ handle_newline:
1468 put_tty_queue(c, ldata); 1468 put_tty_queue(c, ldata);
1469} 1469}
1470 1470
1471static void
1472n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
1473{
1474 char buf[64];
1475
1476 switch (flag) {
1477 case TTY_BREAK:
1478 n_tty_receive_break(tty);
1479 break;
1480 case TTY_PARITY:
1481 case TTY_FRAME:
1482 n_tty_receive_parity_error(tty, c);
1483 break;
1484 case TTY_OVERRUN:
1485 n_tty_receive_overrun(tty);
1486 break;
1487 default:
1488 printk(KERN_ERR "%s: unknown flag %d\n",
1489 tty_name(tty, buf), flag);
1490 break;
1491 }
1492}
1493
1471/** 1494/**
1472 * n_tty_receive_buf - data receive 1495 * n_tty_receive_buf - data receive
1473 * @tty: terminal device 1496 * @tty: terminal device
@@ -1511,34 +1534,19 @@ static void __receive_buf(struct tty_struct *tty, const unsigned char *cp,
1511 char *fp, int count) 1534 char *fp, int count)
1512{ 1535{
1513 struct n_tty_data *ldata = tty->disc_data; 1536 struct n_tty_data *ldata = tty->disc_data;
1514 char flags = TTY_NORMAL;
1515 char buf[64];
1516 1537
1517 if (ldata->real_raw) 1538 if (ldata->real_raw)
1518 n_tty_receive_buf_real_raw(tty, cp, fp, count); 1539 n_tty_receive_buf_real_raw(tty, cp, fp, count);
1519 else { 1540 else {
1541 char flag = TTY_NORMAL;
1542
1520 while (count--) { 1543 while (count--) {
1521 if (fp) 1544 if (fp)
1522 flags = *fp++; 1545 flag = *fp++;
1523 switch (flags) { 1546 if (likely(flag == TTY_NORMAL))
1524 case TTY_NORMAL:
1525 n_tty_receive_char(tty, *cp++); 1547 n_tty_receive_char(tty, *cp++);
1526 break; 1548 else
1527 case TTY_BREAK: 1549 n_tty_receive_char_flagged(tty, *cp++, flag);
1528 n_tty_receive_break(tty);
1529 break;
1530 case TTY_PARITY:
1531 case TTY_FRAME:
1532 n_tty_receive_parity_error(tty, *cp++);
1533 break;
1534 case TTY_OVERRUN:
1535 n_tty_receive_overrun(tty);
1536 break;
1537 default:
1538 printk(KERN_ERR "%s: unknown flag %d\n",
1539 tty_name(tty, buf), flags);
1540 break;
1541 }
1542 } 1550 }
1543 1551
1544 flush_echoes(tty); 1552 flush_echoes(tty);