Merge tag 'mips_6.7' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[linux-2.6-microblaze.git] / drivers / tty / serial / 8250 / 8250_port.c
index 0e3a9ec..8ca061d 100644 (file)
@@ -682,7 +682,7 @@ static void serial8250_set_sleep(struct uart_8250_port *p, int sleep)
 
        if (p->capabilities & UART_CAP_SLEEP) {
                /* Synchronize UART_IER access against the console. */
-               spin_lock_irq(&p->port.lock);
+               uart_port_lock_irq(&p->port);
                if (p->capabilities & UART_CAP_EFR) {
                        lcr = serial_in(p, UART_LCR);
                        efr = serial_in(p, UART_EFR);
@@ -696,7 +696,7 @@ static void serial8250_set_sleep(struct uart_8250_port *p, int sleep)
                        serial_out(p, UART_EFR, efr);
                        serial_out(p, UART_LCR, lcr);
                }
-               spin_unlock_irq(&p->port.lock);
+               uart_port_unlock_irq(&p->port);
        }
 
        serial8250_rpm_put(p);
@@ -739,9 +739,9 @@ static void enable_rsa(struct uart_8250_port *up)
 {
        if (up->port.type == PORT_RSA) {
                if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
-                       spin_lock_irq(&up->port.lock);
+                       uart_port_lock_irq(&up->port);
                        __enable_rsa(up);
-                       spin_unlock_irq(&up->port.lock);
+                       uart_port_unlock_irq(&up->port);
                }
                if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
                        serial_out(up, UART_RSA_FRR, 0);
@@ -761,7 +761,7 @@ static void disable_rsa(struct uart_8250_port *up)
 
        if (up->port.type == PORT_RSA &&
            up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
-               spin_lock_irq(&up->port.lock);
+               uart_port_lock_irq(&up->port);
 
                mode = serial_in(up, UART_RSA_MSR);
                result = !(mode & UART_RSA_MSR_FIFO);
@@ -774,7 +774,7 @@ static void disable_rsa(struct uart_8250_port *up)
 
                if (result)
                        up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
-               spin_unlock_irq(&up->port.lock);
+               uart_port_unlock_irq(&up->port);
        }
 }
 #endif /* CONFIG_SERIAL_8250_RSA */
@@ -1001,12 +1001,11 @@ static void autoconfig_16550a(struct uart_8250_port *up)
                        serial_out(up, UART_LCR, 0);
                        serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
                                   UART_FCR7_64BYTE);
-                       status1 = serial_in(up, UART_IIR) & (UART_IIR_64BYTE_FIFO |
-                                                            UART_IIR_FIFO_ENABLED);
+                       status1 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750;
                        serial_out(up, UART_FCR, 0);
                        serial_out(up, UART_LCR, 0);
 
-                       if (status1 == (UART_IIR_64BYTE_FIFO | UART_IIR_FIFO_ENABLED))
+                       if (status1 == UART_IIR_FIFO_ENABLED_16750)
                                up->port.type = PORT_16550A_FSL64;
                        else
                                DEBUG_AUTOCONF("Motorola 8xxx DUART ");
@@ -1074,12 +1073,12 @@ static void autoconfig_16550a(struct uart_8250_port *up)
         */
        serial_out(up, UART_LCR, 0);
        serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
-       status1 = serial_in(up, UART_IIR) & (UART_IIR_64BYTE_FIFO | UART_IIR_FIFO_ENABLED);
+       status1 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750;
        serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
 
        serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
        serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
-       status2 = serial_in(up, UART_IIR) & (UART_IIR_64BYTE_FIFO | UART_IIR_FIFO_ENABLED);
+       status2 = serial_in(up, UART_IIR) & UART_IIR_FIFO_ENABLED_16750;
        serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
 
        serial_out(up, UART_LCR, 0);
@@ -1087,7 +1086,7 @@ static void autoconfig_16550a(struct uart_8250_port *up)
        DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2);
 
        if (status1 == UART_IIR_FIFO_ENABLED_16550A &&
-           status2 == (UART_IIR_64BYTE_FIFO | UART_IIR_FIFO_ENABLED_16550A)) {
+           status2 == UART_IIR_FIFO_ENABLED_16750) {
                up->port.type = PORT_16750;
                up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
                return;
@@ -1165,7 +1164,7 @@ static void autoconfig(struct uart_8250_port *up)
         *
         * Synchronize UART_IER access against the console.
         */
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
 
        up->capabilities = 0;
        up->bugs = 0;
@@ -1204,7 +1203,7 @@ static void autoconfig(struct uart_8250_port *up)
                        /*
                         * We failed; there's nothing here
                         */
-                       spin_unlock_irqrestore(&port->lock, flags);
+                       uart_port_unlock_irqrestore(port, flags);
                        DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
                                       scratch2, scratch3);
                        goto out;
@@ -1228,7 +1227,7 @@ static void autoconfig(struct uart_8250_port *up)
                status1 = serial_in(up, UART_MSR) & UART_MSR_STATUS_BITS;
                serial8250_out_MCR(up, save_mcr);
                if (status1 != (UART_MSR_DCD | UART_MSR_CTS)) {
-                       spin_unlock_irqrestore(&port->lock, flags);
+                       uart_port_unlock_irqrestore(port, flags);
                        DEBUG_AUTOCONF("LOOP test failed (%02x) ",
                                       status1);
                        goto out;
@@ -1297,7 +1296,7 @@ static void autoconfig(struct uart_8250_port *up)
        serial8250_clear_IER(up);
 
 out_unlock:
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
 
        /*
         * Check if the device is a Fintek F81216A
@@ -1337,9 +1336,9 @@ static void autoconfig_irq(struct uart_8250_port *up)
        probe_irq_off(probe_irq_on());
        save_mcr = serial8250_in_MCR(up);
        /* Synchronize UART_IER access against the console. */
-       spin_lock_irq(&port->lock);
+       uart_port_lock_irq(port);
        save_ier = serial_in(up, UART_IER);
-       spin_unlock_irq(&port->lock);
+       uart_port_unlock_irq(port);
        serial8250_out_MCR(up, UART_MCR_OUT1 | UART_MCR_OUT2);
 
        irqs = probe_irq_on();
@@ -1352,9 +1351,9 @@ static void autoconfig_irq(struct uart_8250_port *up)
                        UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
        }
        /* Synchronize UART_IER access against the console. */
-       spin_lock_irq(&port->lock);
+       uart_port_lock_irq(port);
        serial_out(up, UART_IER, UART_IER_ALL_INTR);
-       spin_unlock_irq(&port->lock);
+       uart_port_unlock_irq(port);
        serial_in(up, UART_LSR);
        serial_in(up, UART_RX);
        serial_in(up, UART_IIR);
@@ -1365,9 +1364,9 @@ static void autoconfig_irq(struct uart_8250_port *up)
 
        serial8250_out_MCR(up, save_mcr);
        /* Synchronize UART_IER access against the console. */
-       spin_lock_irq(&port->lock);
+       uart_port_lock_irq(port);
        serial_out(up, UART_IER, save_ier);
-       spin_unlock_irq(&port->lock);
+       uart_port_unlock_irq(port);
 
        if (port->flags & UPF_FOURPORT)
                outb_p(save_ICP, ICP);
@@ -1435,13 +1434,13 @@ static enum hrtimer_restart serial8250_em485_handle_stop_tx(struct hrtimer *t)
        unsigned long flags;
 
        serial8250_rpm_get(p);
-       spin_lock_irqsave(&p->port.lock, flags);
+       uart_port_lock_irqsave(&p->port, &flags);
        if (em485->active_timer == &em485->stop_tx_timer) {
                p->rs485_stop_tx(p);
                em485->active_timer = NULL;
                em485->tx_stopped = true;
        }
-       spin_unlock_irqrestore(&p->port.lock, flags);
+       uart_port_unlock_irqrestore(&p->port, flags);
        serial8250_rpm_put(p);
 
        return HRTIMER_NORESTART;
@@ -1623,12 +1622,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t)
        struct uart_8250_port *p = em485->port;
        unsigned long flags;
 
-       spin_lock_irqsave(&p->port.lock, flags);
+       uart_port_lock_irqsave(&p->port, &flags);
        if (em485->active_timer == &em485->start_tx_timer) {
                __start_tx(&p->port);
                em485->active_timer = NULL;
        }
-       spin_unlock_irqrestore(&p->port.lock, flags);
+       uart_port_unlock_irqrestore(&p->port, flags);
 
        return HRTIMER_NORESTART;
 }
@@ -1911,7 +1910,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
        if (iir & UART_IIR_NO_INT)
                return 0;
 
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
 
        status = serial_lsr_in(up);
 
@@ -1981,9 +1980,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port)
        if ((iir & UART_IIR_ID) == UART_IIR_THRI) {
                struct uart_8250_port *up = up_to_u8250p(port);
 
-               spin_lock_irqsave(&port->lock, flags);
+               uart_port_lock_irqsave(port, &flags);
                serial8250_tx_chars(up);
-               spin_unlock_irqrestore(&port->lock, flags);
+               uart_port_unlock_irqrestore(port, flags);
        }
 
        iir = serial_port_in(port, UART_IIR);
@@ -1998,10 +1997,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
 
        serial8250_rpm_get(up);
 
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
        if (!serial8250_tx_dma_running(up) && uart_lsr_tx_empty(serial_lsr_in(up)))
                result = TIOCSER_TEMT;
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
 
        serial8250_rpm_put(up);
 
@@ -2063,13 +2062,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state)
        unsigned long flags;
 
        serial8250_rpm_get(up);
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
        if (break_state == -1)
                up->lcr |= UART_LCR_SBC;
        else
                up->lcr &= ~UART_LCR_SBC;
        serial_port_out(port, UART_LCR, up->lcr);
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
        serial8250_rpm_put(up);
 }
 
@@ -2204,7 +2203,7 @@ int serial8250_do_startup(struct uart_port *port)
                 *
                 * Synchronize UART_IER access against the console.
                 */
-               spin_lock_irqsave(&port->lock, flags);
+               uart_port_lock_irqsave(port, &flags);
                up->acr = 0;
                serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
                serial_port_out(port, UART_EFR, UART_EFR_ECB);
@@ -2214,7 +2213,7 @@ int serial8250_do_startup(struct uart_port *port)
                serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
                serial_port_out(port, UART_EFR, UART_EFR_ECB);
                serial_port_out(port, UART_LCR, 0);
-               spin_unlock_irqrestore(&port->lock, flags);
+               uart_port_unlock_irqrestore(port, flags);
        }
 
        if (port->type == PORT_DA830) {
@@ -2223,10 +2222,10 @@ int serial8250_do_startup(struct uart_port *port)
                 *
                 * Synchronize UART_IER access against the console.
                 */
-               spin_lock_irqsave(&port->lock, flags);
+               uart_port_lock_irqsave(port, &flags);
                serial_port_out(port, UART_IER, 0);
                serial_port_out(port, UART_DA830_PWREMU_MGMT, 0);
-               spin_unlock_irqrestore(&port->lock, flags);
+               uart_port_unlock_irqrestore(port, flags);
                mdelay(10);
 
                /* Enable Tx, Rx and free run mode */
@@ -2340,7 +2339,7 @@ int serial8250_do_startup(struct uart_port *port)
                 *
                 * Synchronize UART_IER access against the console.
                 */
-               spin_lock_irqsave(&port->lock, flags);
+               uart_port_lock_irqsave(port, &flags);
 
                wait_for_xmitr(up, UART_LSR_THRE);
                serial_port_out_sync(port, UART_IER, UART_IER_THRI);
@@ -2352,7 +2351,7 @@ int serial8250_do_startup(struct uart_port *port)
                iir = serial_port_in(port, UART_IIR);
                serial_port_out(port, UART_IER, 0);
 
-               spin_unlock_irqrestore(&port->lock, flags);
+               uart_port_unlock_irqrestore(port, flags);
 
                if (port->irqflags & IRQF_SHARED)
                        enable_irq(port->irq);
@@ -2375,7 +2374,7 @@ int serial8250_do_startup(struct uart_port *port)
         */
        serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
 
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
        if (up->port.flags & UPF_FOURPORT) {
                if (!up->port.irq)
                        up->port.mctrl |= TIOCM_OUT1;
@@ -2421,7 +2420,7 @@ int serial8250_do_startup(struct uart_port *port)
        }
 
 dont_test_tx_en:
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
 
        /*
         * Clear the interrupt registers again for luck, and clear the
@@ -2492,17 +2491,17 @@ void serial8250_do_shutdown(struct uart_port *port)
         *
         * Synchronize UART_IER access against the console.
         */
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
        up->ier = 0;
        serial_port_out(port, UART_IER, 0);
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
 
        synchronize_irq(port->irq);
 
        if (up->dma)
                serial8250_release_dma(up);
 
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
        if (port->flags & UPF_FOURPORT) {
                /* reset interrupts on the AST Fourport board */
                inb((port->iobase & 0xfe0) | 0x1f);
@@ -2511,7 +2510,7 @@ void serial8250_do_shutdown(struct uart_port *port)
                port->mctrl &= ~TIOCM_OUT2;
 
        serial8250_set_mctrl(port, port->mctrl);
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
 
        /*
         * Disable break condition and FIFOs
@@ -2747,14 +2746,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk)
        quot = serial8250_get_divisor(port, baud, &frac);
 
        serial8250_rpm_get(up);
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
 
        uart_update_timeout(port, termios->c_cflag, baud);
 
        serial8250_set_divisor(port, baud, quot, frac);
        serial_port_out(port, UART_LCR, up->lcr);
 
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
        serial8250_rpm_put(up);
 
 out_unlock:
@@ -2791,7 +2790,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
         * Synchronize UART_IER access against the console.
         */
        serial8250_rpm_get(up);
-       spin_lock_irqsave(&port->lock, flags);
+       uart_port_lock_irqsave(port, &flags);
 
        up->lcr = cval;                                 /* Save computed LCR */
 
@@ -2894,7 +2893,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
                serial_port_out(port, UART_FCR, up->fcr);       /* set fcr */
        }
        serial8250_set_mctrl(port, port->mctrl);
-       spin_unlock_irqrestore(&port->lock, flags);
+       uart_port_unlock_irqrestore(port, flags);
        serial8250_rpm_put(up);
 
        /* Don't rewrite B0 */
@@ -2917,15 +2916,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios)
 {
        if (termios->c_line == N_PPS) {
                port->flags |= UPF_HARDPPS_CD;
-               spin_lock_irq(&port->lock);
+               uart_port_lock_irq(port);
                serial8250_enable_ms(port);
-               spin_unlock_irq(&port->lock);
+               uart_port_unlock_irq(port);
        } else {
                port->flags &= ~UPF_HARDPPS_CD;
                if (!UART_ENABLE_MS(port, termios->c_cflag)) {
-                       spin_lock_irq(&port->lock);
+                       uart_port_lock_irq(port);
                        serial8250_disable_ms(port);
-                       spin_unlock_irq(&port->lock);
+                       uart_port_unlock_irq(port);
                }
        }
 }
@@ -3399,9 +3398,9 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
        touch_nmi_watchdog();
 
        if (oops_in_progress)
-               locked = spin_trylock_irqsave(&port->lock, flags);
+               locked = uart_port_trylock_irqsave(port, &flags);
        else
-               spin_lock_irqsave(&port->lock, flags);
+               uart_port_lock_irqsave(port, &flags);
 
        /*
         *      First save the IER then disable the interrupts
@@ -3471,7 +3470,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
                serial8250_modem_status(up);
 
        if (locked)
-               spin_unlock_irqrestore(&port->lock, flags);
+               uart_port_unlock_irqrestore(port, flags);
 }
 
 static unsigned int probe_baud(struct uart_port *port)