]> err.no Git - linux-2.6/blobdiff - drivers/serial/sunhv.c
[PATCH] 8139cp: add ethtool eeprom support
[linux-2.6] / drivers / serial / sunhv.c
index 7f73907db7b6f581c8a6bc5d98087d1d306f1b47..f137804b31331e15b8df64d3ff88a3e7d74ee91d 100644 (file)
@@ -91,6 +91,8 @@ static struct tty_struct *receive_chars(struct uart_port *port, struct pt_regs *
                        break;
 
                if (c == CON_BREAK) {
+                       if (uart_handle_break(port))
+                               continue;
                        saw_console_brk = 1;
                        c = 0;
                }
@@ -208,9 +210,6 @@ static void sunhv_stop_tx(struct uart_port *port)
 static void sunhv_start_tx(struct uart_port *port)
 {
        struct circ_buf *xmit = &port->info->xmit;
-       unsigned long flags;
-
-       spin_lock_irqsave(&port->lock, flags);
 
        while (!uart_circ_empty(xmit)) {
                long status = hypervisor_con_putchar(xmit->buf[xmit->tail]);
@@ -221,8 +220,6 @@ static void sunhv_start_tx(struct uart_port *port)
                xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
                port->icount.tx++;
        }
-
-       spin_unlock_irqrestore(&port->lock, flags);
 }
 
 /* port->lock is not held.  */
@@ -257,7 +254,7 @@ static void sunhv_break_ctl(struct uart_port *port, int break_state)
 {
        if (break_state) {
                unsigned long flags;
-               int limit = 10000;
+               int limit = 1000000;
 
                spin_lock_irqsave(&port->lock, flags);
 
@@ -265,6 +262,7 @@ static void sunhv_break_ctl(struct uart_port *port, int break_state)
                        long status = hypervisor_con_putchar(CON_BREAK);
                        if (status == HV_EOK)
                                break;
+                       udelay(2);
                }
 
                spin_unlock_irqrestore(&port->lock, flags);
@@ -496,6 +494,7 @@ static int __init sunhv_init(void)
                return ret;
        }
 
+       sunhv_reg.tty_driver->name_base = sunhv_reg.minor - 64;
        sunserial_current_minor += 1;
 
        sunhv_reg.cons = SUNHV_CONSOLE();