diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2013-06-15 10:21:24 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-23 20:10:17 -0400 |
commit | d2f8d7abd1e7ac04a0b42df36b53fef00d5d73aa (patch) | |
tree | 5d1bcd616e7ff4d630e270e5e77f547e4315e0ec /drivers/tty/n_tty.c | |
parent | b0ac50be1f398ae1daedcf1ce71ac6b6409c88d2 (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.c | 50 |
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 | ||
1471 | static void | ||
1472 | n_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); |