vserver 2.0 rc7
[linux-2.6.git] / drivers / serial / 21285.c
index 759addd..0b10169 100644 (file)
@@ -110,7 +110,7 @@ static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *r
                port->icount.rx++;
 
                rxs = *CSR_RXSTAT | RXSTAT_DUMMY_READ;
-               if (rxs & RXSTAT_ANYERR) {
+               if (unlikely(rxs & RXSTAT_ANYERR)) {
                        if (rxs & RXSTAT_PARITY)
                                port->icount.parity++;
                        else if (rxs & RXSTAT_FRAME)
@@ -126,23 +126,12 @@ static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *r
                                flag = TTY_FRAME;
                }
 
-               if ((rxs & port->ignore_status_mask) == 0) {
-                       tty_insert_flip_char(tty, ch, flag);
-               }
-               if ((rxs & RXSTAT_OVERRUN) &&
-                   tty->flip.count < TTY_FLIPBUF_SIZE) {
-                       /*
-                        * Overrun is special, since it's reported
-                        * immediately, and doesn't affect the current
-                        * character.
-                        */
-                       tty_insert_flip_char(tty, 0, TTY_OVERRUN);
-               }
+               uart_insert_char(port, rxs, RXSTAT_OVERRUN, ch, flag);
+
                status = *CSR_UARTFLG;
        }
        tty_flip_buffer_push(tty);
 
- out:
        return IRQ_HANDLED;
 }
 
@@ -383,11 +372,9 @@ static struct uart_ops serial21285_ops = {
 };
 
 static struct uart_port serial21285_port = {
-       .membase        = 0,
        .mapbase        = 0x42000160,
        .iotype         = SERIAL_IO_MEM,
        .irq            = NO_IRQ,
-       .uartclk        = 0,
        .fifosize       = 16,
        .ops            = &serial21285_ops,
        .flags          = ASYNC_BOOT_AUTOCONF,