linux/drivers/tty/serial/serial_core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 *  Driver core for serial ports
   4 *
   5 *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
   6 *
   7 *  Copyright 1999 ARM Limited
   8 *  Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
   9 */
  10#include <linux/module.h>
  11#include <linux/tty.h>
  12#include <linux/tty_flip.h>
  13#include <linux/slab.h>
  14#include <linux/sched/signal.h>
  15#include <linux/init.h>
  16#include <linux/console.h>
  17#include <linux/gpio/consumer.h>
  18#include <linux/of.h>
  19#include <linux/proc_fs.h>
  20#include <linux/seq_file.h>
  21#include <linux/device.h>
  22#include <linux/serial.h> /* for serial_state and serial_icounter_struct */
  23#include <linux/serial_core.h>
  24#include <linux/sysrq.h>
  25#include <linux/delay.h>
  26#include <linux/mutex.h>
  27#include <linux/security.h>
  28
  29#include <linux/irq.h>
  30#include <linux/uaccess.h>
  31
  32/*
  33 * This is used to lock changes in serial line configuration.
  34 */
  35static DEFINE_MUTEX(port_mutex);
  36
  37/*
  38 * lockdep: port->lock is initialized in two places, but we
  39 *          want only one lock-class:
  40 */
  41static struct lock_class_key port_lock_key;
  42
  43#define HIGH_BITS_OFFSET        ((sizeof(long)-sizeof(int))*8)
  44
  45static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
  46                                        struct ktermios *old_termios);
  47static void uart_wait_until_sent(struct tty_struct *tty, int timeout);
  48static void uart_change_pm(struct uart_state *state,
  49                           enum uart_pm_state pm_state);
  50
  51static void uart_port_shutdown(struct tty_port *port);
  52
  53static int uart_dcd_enabled(struct uart_port *uport)
  54{
  55        return !!(uport->status & UPSTAT_DCD_ENABLE);
  56}
  57
  58static inline struct uart_port *uart_port_ref(struct uart_state *state)
  59{
  60        if (atomic_add_unless(&state->refcount, 1, 0))
  61                return state->uart_port;
  62        return NULL;
  63}
  64
  65static inline void uart_port_deref(struct uart_port *uport)
  66{
  67        if (atomic_dec_and_test(&uport->state->refcount))
  68                wake_up(&uport->state->remove_wait);
  69}
  70
  71#define uart_port_lock(state, flags)                                    \
  72        ({                                                              \
  73                struct uart_port *__uport = uart_port_ref(state);       \
  74                if (__uport)                                            \
  75                        spin_lock_irqsave(&__uport->lock, flags);       \
  76                __uport;                                                \
  77        })
  78
  79#define uart_port_unlock(uport, flags)                                  \
  80        ({                                                              \
  81                struct uart_port *__uport = uport;                      \
  82                if (__uport) {                                          \
  83                        spin_unlock_irqrestore(&__uport->lock, flags);  \
  84                        uart_port_deref(__uport);                       \
  85                }                                                       \
  86        })
  87
  88static inline struct uart_port *uart_port_check(struct uart_state *state)
  89{
  90        lockdep_assert_held(&state->port.mutex);
  91        return state->uart_port;
  92}
  93
  94/*
  95 * This routine is used by the interrupt handler to schedule processing in
  96 * the software interrupt portion of the driver.
  97 */
  98void uart_write_wakeup(struct uart_port *port)
  99{
 100        struct uart_state *state = port->state;
 101        /*
 102         * This means you called this function _after_ the port was
 103         * closed.  No cookie for you.
 104         */
 105        BUG_ON(!state);
 106        tty_port_tty_wakeup(&state->port);
 107}
 108
 109static void uart_stop(struct tty_struct *tty)
 110{
 111        struct uart_state *state = tty->driver_data;
 112        struct uart_port *port;
 113        unsigned long flags;
 114
 115        port = uart_port_lock(state, flags);
 116        if (port)
 117                port->ops->stop_tx(port);
 118        uart_port_unlock(port, flags);
 119}
 120
 121static void __uart_start(struct tty_struct *tty)
 122{
 123        struct uart_state *state = tty->driver_data;
 124        struct uart_port *port = state->uart_port;
 125
 126        if (port && !uart_tx_stopped(port))
 127                port->ops->start_tx(port);
 128}
 129
 130static void uart_start(struct tty_struct *tty)
 131{
 132        struct uart_state *state = tty->driver_data;
 133        struct uart_port *port;
 134        unsigned long flags;
 135
 136        port = uart_port_lock(state, flags);
 137        __uart_start(tty);
 138        uart_port_unlock(port, flags);
 139}
 140
 141static void
 142uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)
 143{
 144        unsigned long flags;
 145        unsigned int old;
 146
 147        spin_lock_irqsave(&port->lock, flags);
 148        old = port->mctrl;
 149        port->mctrl = (old & ~clear) | set;
 150        if (old != port->mctrl)
 151                port->ops->set_mctrl(port, port->mctrl);
 152        spin_unlock_irqrestore(&port->lock, flags);
 153}
 154
 155#define uart_set_mctrl(port, set)       uart_update_mctrl(port, set, 0)
 156#define uart_clear_mctrl(port, clear)   uart_update_mctrl(port, 0, clear)
 157
 158static void uart_port_dtr_rts(struct uart_port *uport, int raise)
 159{
 160        int rs485_on = uport->rs485_config &&
 161                (uport->rs485.flags & SER_RS485_ENABLED);
 162        int RTS_after_send = !!(uport->rs485.flags & SER_RS485_RTS_AFTER_SEND);
 163
 164        if (raise) {
 165                if (rs485_on && !RTS_after_send) {
 166                        uart_set_mctrl(uport, TIOCM_DTR);
 167                        uart_clear_mctrl(uport, TIOCM_RTS);
 168                } else {
 169                        uart_set_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
 170                }
 171        } else {
 172                unsigned int clear = TIOCM_DTR;
 173
 174                clear |= (!rs485_on || !RTS_after_send) ? TIOCM_RTS : 0;
 175                uart_clear_mctrl(uport, clear);
 176        }
 177}
 178
 179/*
 180 * Startup the port.  This will be called once per open.  All calls
 181 * will be serialised by the per-port mutex.
 182 */
 183static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
 184                int init_hw)
 185{
 186        struct uart_port *uport = uart_port_check(state);
 187        unsigned long flags;
 188        unsigned long page;
 189        int retval = 0;
 190
 191        if (uport->type == PORT_UNKNOWN)
 192                return 1;
 193
 194        /*
 195         * Make sure the device is in D0 state.
 196         */
 197        uart_change_pm(state, UART_PM_STATE_ON);
 198
 199        /*
 200         * Initialise and allocate the transmit and temporary
 201         * buffer.
 202         */
 203        page = get_zeroed_page(GFP_KERNEL);
 204        if (!page)
 205                return -ENOMEM;
 206
 207        uart_port_lock(state, flags);
 208        if (!state->xmit.buf) {
 209                state->xmit.buf = (unsigned char *) page;
 210                uart_circ_clear(&state->xmit);
 211                uart_port_unlock(uport, flags);
 212        } else {
 213                uart_port_unlock(uport, flags);
 214                /*
 215                 * Do not free() the page under the port lock, see
 216                 * uart_shutdown().
 217                 */
 218                free_page(page);
 219        }
 220
 221        retval = uport->ops->startup(uport);
 222        if (retval == 0) {
 223                if (uart_console(uport) && uport->cons->cflag) {
 224                        tty->termios.c_cflag = uport->cons->cflag;
 225                        uport->cons->cflag = 0;
 226                }
 227                /*
 228                 * Initialise the hardware port settings.
 229                 */
 230                uart_change_speed(tty, state, NULL);
 231
 232                /*
 233                 * Setup the RTS and DTR signals once the
 234                 * port is open and ready to respond.
 235                 */
 236                if (init_hw && C_BAUD(tty))
 237                        uart_port_dtr_rts(uport, 1);
 238        }
 239
 240        /*
 241         * This is to allow setserial on this port. People may want to set
 242         * port/irq/type and then reconfigure the port properly if it failed
 243         * now.
 244         */
 245        if (retval && capable(CAP_SYS_ADMIN))
 246                return 1;
 247
 248        return retval;
 249}
 250
 251static int uart_startup(struct tty_struct *tty, struct uart_state *state,
 252                int init_hw)
 253{
 254        struct tty_port *port = &state->port;
 255        int retval;
 256
 257        if (tty_port_initialized(port))
 258                return 0;
 259
 260        retval = uart_port_startup(tty, state, init_hw);
 261        if (retval)
 262                set_bit(TTY_IO_ERROR, &tty->flags);
 263
 264        return retval;
 265}
 266
 267/*
 268 * This routine will shutdown a serial port; interrupts are disabled, and
 269 * DTR is dropped if the hangup on close termio flag is on.  Calls to
 270 * uart_shutdown are serialised by the per-port semaphore.
 271 *
 272 * uport == NULL if uart_port has already been removed
 273 */
 274static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
 275{
 276        struct uart_port *uport = uart_port_check(state);
 277        struct tty_port *port = &state->port;
 278        unsigned long flags;
 279        char *xmit_buf = NULL;
 280
 281        /*
 282         * Set the TTY IO error marker
 283         */
 284        if (tty)
 285                set_bit(TTY_IO_ERROR, &tty->flags);
 286
 287        if (tty_port_initialized(port)) {
 288                tty_port_set_initialized(port, 0);
 289
 290                /*
 291                 * Turn off DTR and RTS early.
 292                 */
 293                if (uport && uart_console(uport) && tty)
 294                        uport->cons->cflag = tty->termios.c_cflag;
 295
 296                if (!tty || C_HUPCL(tty))
 297                        uart_port_dtr_rts(uport, 0);
 298
 299                uart_port_shutdown(port);
 300        }
 301
 302        /*
 303         * It's possible for shutdown to be called after suspend if we get
 304         * a DCD drop (hangup) at just the right time.  Clear suspended bit so
 305         * we don't try to resume a port that has been shutdown.
 306         */
 307        tty_port_set_suspended(port, 0);
 308
 309        /*
 310         * Do not free() the transmit buffer page under the port lock since
 311         * this can create various circular locking scenarios. For instance,
 312         * console driver may need to allocate/free a debug object, which
 313         * can endup in printk() recursion.
 314         */
 315        uart_port_lock(state, flags);
 316        xmit_buf = state->xmit.buf;
 317        state->xmit.buf = NULL;
 318        uart_port_unlock(uport, flags);
 319
 320        if (xmit_buf)
 321                free_page((unsigned long)xmit_buf);
 322}
 323
 324/**
 325 *      uart_update_timeout - update per-port FIFO timeout.
 326 *      @port:  uart_port structure describing the port
 327 *      @cflag: termios cflag value
 328 *      @baud:  speed of the port
 329 *
 330 *      Set the port FIFO timeout value.  The @cflag value should
 331 *      reflect the actual hardware settings.
 332 */
 333void
 334uart_update_timeout(struct uart_port *port, unsigned int cflag,
 335                    unsigned int baud)
 336{
 337        unsigned int size;
 338
 339        size = tty_get_frame_size(cflag) * port->fifosize;
 340
 341        /*
 342         * Figure the timeout to send the above number of bits.
 343         * Add .02 seconds of slop
 344         */
 345        port->timeout = (HZ * size) / baud + HZ/50;
 346}
 347
 348EXPORT_SYMBOL(uart_update_timeout);
 349
 350/**
 351 *      uart_get_baud_rate - return baud rate for a particular port
 352 *      @port: uart_port structure describing the port in question.
 353 *      @termios: desired termios settings.
 354 *      @old: old termios (or NULL)
 355 *      @min: minimum acceptable baud rate
 356 *      @max: maximum acceptable baud rate
 357 *
 358 *      Decode the termios structure into a numeric baud rate,
 359 *      taking account of the magic 38400 baud rate (with spd_*
 360 *      flags), and mapping the %B0 rate to 9600 baud.
 361 *
 362 *      If the new baud rate is invalid, try the old termios setting.
 363 *      If it's still invalid, we try 9600 baud.
 364 *
 365 *      Update the @termios structure to reflect the baud rate
 366 *      we're actually going to be using. Don't do this for the case
 367 *      where B0 is requested ("hang up").
 368 */
 369unsigned int
 370uart_get_baud_rate(struct uart_port *port, struct ktermios *termios,
 371                   struct ktermios *old, unsigned int min, unsigned int max)
 372{
 373        unsigned int try;
 374        unsigned int baud;
 375        unsigned int altbaud;
 376        int hung_up = 0;
 377        upf_t flags = port->flags & UPF_SPD_MASK;
 378
 379        switch (flags) {
 380        case UPF_SPD_HI:
 381                altbaud = 57600;
 382                break;
 383        case UPF_SPD_VHI:
 384                altbaud = 115200;
 385                break;
 386        case UPF_SPD_SHI:
 387                altbaud = 230400;
 388                break;
 389        case UPF_SPD_WARP:
 390                altbaud = 460800;
 391                break;
 392        default:
 393                altbaud = 38400;
 394                break;
 395        }
 396
 397        for (try = 0; try < 2; try++) {
 398                baud = tty_termios_baud_rate(termios);
 399
 400                /*
 401                 * The spd_hi, spd_vhi, spd_shi, spd_warp kludge...
 402                 * Die! Die! Die!
 403                 */
 404                if (try == 0 && baud == 38400)
 405                        baud = altbaud;
 406
 407                /*
 408                 * Special case: B0 rate.
 409                 */
 410                if (baud == 0) {
 411                        hung_up = 1;
 412                        baud = 9600;
 413                }
 414
 415                if (baud >= min && baud <= max)
 416                        return baud;
 417
 418                /*
 419                 * Oops, the quotient was zero.  Try again with
 420                 * the old baud rate if possible.
 421                 */
 422                termios->c_cflag &= ~CBAUD;
 423                if (old) {
 424                        baud = tty_termios_baud_rate(old);
 425                        if (!hung_up)
 426                                tty_termios_encode_baud_rate(termios,
 427                                                                baud, baud);
 428                        old = NULL;
 429                        continue;
 430                }
 431
 432                /*
 433                 * As a last resort, if the range cannot be met then clip to
 434                 * the nearest chip supported rate.
 435                 */
 436                if (!hung_up) {
 437                        if (baud <= min)
 438                                tty_termios_encode_baud_rate(termios,
 439                                                        min + 1, min + 1);
 440                        else
 441                                tty_termios_encode_baud_rate(termios,
 442                                                        max - 1, max - 1);
 443                }
 444        }
 445        /* Should never happen */
 446        WARN_ON(1);
 447        return 0;
 448}
 449
 450EXPORT_SYMBOL(uart_get_baud_rate);
 451
 452/**
 453 *      uart_get_divisor - return uart clock divisor
 454 *      @port: uart_port structure describing the port.
 455 *      @baud: desired baud rate
 456 *
 457 *      Calculate the uart clock divisor for the port.
 458 */
 459unsigned int
 460uart_get_divisor(struct uart_port *port, unsigned int baud)
 461{
 462        unsigned int quot;
 463
 464        /*
 465         * Old custom speed handling.
 466         */
 467        if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
 468                quot = port->custom_divisor;
 469        else
 470                quot = DIV_ROUND_CLOSEST(port->uartclk, 16 * baud);
 471
 472        return quot;
 473}
 474
 475EXPORT_SYMBOL(uart_get_divisor);
 476
 477/* Caller holds port mutex */
 478static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
 479                                        struct ktermios *old_termios)
 480{
 481        struct uart_port *uport = uart_port_check(state);
 482        struct ktermios *termios;
 483        int hw_stopped;
 484
 485        /*
 486         * If we have no tty, termios, or the port does not exist,
 487         * then we can't set the parameters for this port.
 488         */
 489        if (!tty || uport->type == PORT_UNKNOWN)
 490                return;
 491
 492        termios = &tty->termios;
 493        uport->ops->set_termios(uport, termios, old_termios);
 494
 495        /*
 496         * Set modem status enables based on termios cflag
 497         */
 498        spin_lock_irq(&uport->lock);
 499        if (termios->c_cflag & CRTSCTS)
 500                uport->status |= UPSTAT_CTS_ENABLE;
 501        else
 502                uport->status &= ~UPSTAT_CTS_ENABLE;
 503
 504        if (termios->c_cflag & CLOCAL)
 505                uport->status &= ~UPSTAT_DCD_ENABLE;
 506        else
 507                uport->status |= UPSTAT_DCD_ENABLE;
 508
 509        /* reset sw-assisted CTS flow control based on (possibly) new mode */
 510        hw_stopped = uport->hw_stopped;
 511        uport->hw_stopped = uart_softcts_mode(uport) &&
 512                                !(uport->ops->get_mctrl(uport) & TIOCM_CTS);
 513        if (uport->hw_stopped) {
 514                if (!hw_stopped)
 515                        uport->ops->stop_tx(uport);
 516        } else {
 517                if (hw_stopped)
 518                        __uart_start(tty);
 519        }
 520        spin_unlock_irq(&uport->lock);
 521}
 522
 523static int uart_put_char(struct tty_struct *tty, unsigned char c)
 524{
 525        struct uart_state *state = tty->driver_data;
 526        struct uart_port *port;
 527        struct circ_buf *circ;
 528        unsigned long flags;
 529        int ret = 0;
 530
 531        circ = &state->xmit;
 532        port = uart_port_lock(state, flags);
 533        if (!circ->buf) {
 534                uart_port_unlock(port, flags);
 535                return 0;
 536        }
 537
 538        if (port && uart_circ_chars_free(circ) != 0) {
 539                circ->buf[circ->head] = c;
 540                circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1);
 541                ret = 1;
 542        }
 543        uart_port_unlock(port, flags);
 544        return ret;
 545}
 546
 547static void uart_flush_chars(struct tty_struct *tty)
 548{
 549        uart_start(tty);
 550}
 551
 552static int uart_write(struct tty_struct *tty,
 553                                        const unsigned char *buf, int count)
 554{
 555        struct uart_state *state = tty->driver_data;
 556        struct uart_port *port;
 557        struct circ_buf *circ;
 558        unsigned long flags;
 559        int c, ret = 0;
 560
 561        /*
 562         * This means you called this function _after_ the port was
 563         * closed.  No cookie for you.
 564         */
 565        if (!state) {
 566                WARN_ON(1);
 567                return -EL3HLT;
 568        }
 569
 570        port = uart_port_lock(state, flags);
 571        circ = &state->xmit;
 572        if (!circ->buf) {
 573                uart_port_unlock(port, flags);
 574                return 0;
 575        }
 576
 577        while (port) {
 578                c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
 579                if (count < c)
 580                        c = count;
 581                if (c <= 0)
 582                        break;
 583                memcpy(circ->buf + circ->head, buf, c);
 584                circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
 585                buf += c;
 586                count -= c;
 587                ret += c;
 588        }
 589
 590        __uart_start(tty);
 591        uart_port_unlock(port, flags);
 592        return ret;
 593}
 594
 595static unsigned int uart_write_room(struct tty_struct *tty)
 596{
 597        struct uart_state *state = tty->driver_data;
 598        struct uart_port *port;
 599        unsigned long flags;
 600        unsigned int ret;
 601
 602        port = uart_port_lock(state, flags);
 603        ret = uart_circ_chars_free(&state->xmit);
 604        uart_port_unlock(port, flags);
 605        return ret;
 606}
 607
 608static unsigned int uart_chars_in_buffer(struct tty_struct *tty)
 609{
 610        struct uart_state *state = tty->driver_data;
 611        struct uart_port *port;
 612        unsigned long flags;
 613        unsigned int ret;
 614
 615        port = uart_port_lock(state, flags);
 616        ret = uart_circ_chars_pending(&state->xmit);
 617        uart_port_unlock(port, flags);
 618        return ret;
 619}
 620
 621static void uart_flush_buffer(struct tty_struct *tty)
 622{
 623        struct uart_state *state = tty->driver_data;
 624        struct uart_port *port;
 625        unsigned long flags;
 626
 627        /*
 628         * This means you called this function _after_ the port was
 629         * closed.  No cookie for you.
 630         */
 631        if (!state) {
 632                WARN_ON(1);
 633                return;
 634        }
 635
 636        pr_debug("uart_flush_buffer(%d) called\n", tty->index);
 637
 638        port = uart_port_lock(state, flags);
 639        if (!port)
 640                return;
 641        uart_circ_clear(&state->xmit);
 642        if (port->ops->flush_buffer)
 643                port->ops->flush_buffer(port);
 644        uart_port_unlock(port, flags);
 645        tty_port_tty_wakeup(&state->port);
 646}
 647
 648/*
 649 * This function is used to send a high-priority XON/XOFF character to
 650 * the device
 651 */
 652static void uart_send_xchar(struct tty_struct *tty, char ch)
 653{
 654        struct uart_state *state = tty->driver_data;
 655        struct uart_port *port;
 656        unsigned long flags;
 657
 658        port = uart_port_ref(state);
 659        if (!port)
 660                return;
 661
 662        if (port->ops->send_xchar)
 663                port->ops->send_xchar(port, ch);
 664        else {
 665                spin_lock_irqsave(&port->lock, flags);
 666                port->x_char = ch;
 667                if (ch)
 668                        port->ops->start_tx(port);
 669                spin_unlock_irqrestore(&port->lock, flags);
 670        }
 671        uart_port_deref(port);
 672}
 673
 674static void uart_throttle(struct tty_struct *tty)
 675{
 676        struct uart_state *state = tty->driver_data;
 677        upstat_t mask = UPSTAT_SYNC_FIFO;
 678        struct uart_port *port;
 679
 680        port = uart_port_ref(state);
 681        if (!port)
 682                return;
 683
 684        if (I_IXOFF(tty))
 685                mask |= UPSTAT_AUTOXOFF;
 686        if (C_CRTSCTS(tty))
 687                mask |= UPSTAT_AUTORTS;
 688
 689        if (port->status & mask) {
 690                port->ops->throttle(port);
 691                mask &= ~port->status;
 692        }
 693
 694        if (mask & UPSTAT_AUTORTS)
 695                uart_clear_mctrl(port, TIOCM_RTS);
 696
 697        if (mask & UPSTAT_AUTOXOFF)
 698                uart_send_xchar(tty, STOP_CHAR(tty));
 699
 700        uart_port_deref(port);
 701}
 702
 703static void uart_unthrottle(struct tty_struct *tty)
 704{
 705        struct uart_state *state = tty->driver_data;
 706        upstat_t mask = UPSTAT_SYNC_FIFO;
 707        struct uart_port *port;
 708
 709        port = uart_port_ref(state);
 710        if (!port)
 711                return;
 712
 713        if (I_IXOFF(tty))
 714                mask |= UPSTAT_AUTOXOFF;
 715        if (C_CRTSCTS(tty))
 716                mask |= UPSTAT_AUTORTS;
 717
 718        if (port->status & mask) {
 719                port->ops->unthrottle(port);
 720                mask &= ~port->status;
 721        }
 722
 723        if (mask & UPSTAT_AUTORTS)
 724                uart_set_mctrl(port, TIOCM_RTS);
 725
 726        if (mask & UPSTAT_AUTOXOFF)
 727                uart_send_xchar(tty, START_CHAR(tty));
 728
 729        uart_port_deref(port);
 730}
 731
 732static int uart_get_info(struct tty_port *port, struct serial_struct *retinfo)
 733{
 734        struct uart_state *state = container_of(port, struct uart_state, port);
 735        struct uart_port *uport;
 736        int ret = -ENODEV;
 737
 738        /*
 739         * Ensure the state we copy is consistent and no hardware changes
 740         * occur as we go
 741         */
 742        mutex_lock(&port->mutex);
 743        uport = uart_port_check(state);
 744        if (!uport)
 745                goto out;
 746
 747        retinfo->type       = uport->type;
 748        retinfo->line       = uport->line;
 749        retinfo->port       = uport->iobase;
 750        if (HIGH_BITS_OFFSET)
 751                retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET;
 752        retinfo->irq                = uport->irq;
 753        retinfo->flags      = (__force int)uport->flags;
 754        retinfo->xmit_fifo_size  = uport->fifosize;
 755        retinfo->baud_base          = uport->uartclk / 16;
 756        retinfo->close_delay        = jiffies_to_msecs(port->close_delay) / 10;
 757        retinfo->closing_wait    = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 758                                ASYNC_CLOSING_WAIT_NONE :
 759                                jiffies_to_msecs(port->closing_wait) / 10;
 760        retinfo->custom_divisor  = uport->custom_divisor;
 761        retinfo->hub6       = uport->hub6;
 762        retinfo->io_type         = uport->iotype;
 763        retinfo->iomem_reg_shift = uport->regshift;
 764        retinfo->iomem_base      = (void *)(unsigned long)uport->mapbase;
 765
 766        ret = 0;
 767out:
 768        mutex_unlock(&port->mutex);
 769        return ret;
 770}
 771
 772static int uart_get_info_user(struct tty_struct *tty,
 773                         struct serial_struct *ss)
 774{
 775        struct uart_state *state = tty->driver_data;
 776        struct tty_port *port = &state->port;
 777
 778        return uart_get_info(port, ss) < 0 ? -EIO : 0;
 779}
 780
 781static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
 782                         struct uart_state *state,
 783                         struct serial_struct *new_info)
 784{
 785        struct uart_port *uport = uart_port_check(state);
 786        unsigned long new_port;
 787        unsigned int change_irq, change_port, closing_wait;
 788        unsigned int old_custom_divisor, close_delay;
 789        upf_t old_flags, new_flags;
 790        int retval = 0;
 791
 792        if (!uport)
 793                return -EIO;
 794
 795        new_port = new_info->port;
 796        if (HIGH_BITS_OFFSET)
 797                new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET;
 798
 799        new_info->irq = irq_canonicalize(new_info->irq);
 800        close_delay = msecs_to_jiffies(new_info->close_delay * 10);
 801        closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 802                        ASYNC_CLOSING_WAIT_NONE :
 803                        msecs_to_jiffies(new_info->closing_wait * 10);
 804
 805
 806        change_irq  = !(uport->flags & UPF_FIXED_PORT)
 807                && new_info->irq != uport->irq;
 808
 809        /*
 810         * Since changing the 'type' of the port changes its resource
 811         * allocations, we should treat type changes the same as
 812         * IO port changes.
 813         */
 814        change_port = !(uport->flags & UPF_FIXED_PORT)
 815                && (new_port != uport->iobase ||
 816                    (unsigned long)new_info->iomem_base != uport->mapbase ||
 817                    new_info->hub6 != uport->hub6 ||
 818                    new_info->io_type != uport->iotype ||
 819                    new_info->iomem_reg_shift != uport->regshift ||
 820                    new_info->type != uport->type);
 821
 822        old_flags = uport->flags;
 823        new_flags = (__force upf_t)new_info->flags;
 824        old_custom_divisor = uport->custom_divisor;
 825
 826        if (!capable(CAP_SYS_ADMIN)) {
 827                retval = -EPERM;
 828                if (change_irq || change_port ||
 829                    (new_info->baud_base != uport->uartclk / 16) ||
 830                    (close_delay != port->close_delay) ||
 831                    (closing_wait != port->closing_wait) ||
 832                    (new_info->xmit_fifo_size &&
 833                     new_info->xmit_fifo_size != uport->fifosize) ||
 834                    (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
 835                        goto exit;
 836                uport->flags = ((uport->flags & ~UPF_USR_MASK) |
 837                               (new_flags & UPF_USR_MASK));
 838                uport->custom_divisor = new_info->custom_divisor;
 839                goto check_and_exit;
 840        }
 841
 842        if (change_irq || change_port) {
 843                retval = security_locked_down(LOCKDOWN_TIOCSSERIAL);
 844                if (retval)
 845                        goto exit;
 846        }
 847
 848        /*
 849         * Ask the low level driver to verify the settings.
 850         */
 851        if (uport->ops->verify_port)
 852                retval = uport->ops->verify_port(uport, new_info);
 853
 854        if ((new_info->irq >= nr_irqs) || (new_info->irq < 0) ||
 855            (new_info->baud_base < 9600))
 856                retval = -EINVAL;
 857
 858        if (retval)
 859                goto exit;
 860
 861        if (change_port || change_irq) {
 862                retval = -EBUSY;
 863
 864                /*
 865                 * Make sure that we are the sole user of this port.
 866                 */
 867                if (tty_port_users(port) > 1)
 868                        goto exit;
 869
 870                /*
 871                 * We need to shutdown the serial port at the old
 872                 * port/type/irq combination.
 873                 */
 874                uart_shutdown(tty, state);
 875        }
 876
 877        if (change_port) {
 878                unsigned long old_iobase, old_mapbase;
 879                unsigned int old_type, old_iotype, old_hub6, old_shift;
 880
 881                old_iobase = uport->iobase;
 882                old_mapbase = uport->mapbase;
 883                old_type = uport->type;
 884                old_hub6 = uport->hub6;
 885                old_iotype = uport->iotype;
 886                old_shift = uport->regshift;
 887
 888                /*
 889                 * Free and release old regions
 890                 */
 891                if (old_type != PORT_UNKNOWN && uport->ops->release_port)
 892                        uport->ops->release_port(uport);
 893
 894                uport->iobase = new_port;
 895                uport->type = new_info->type;
 896                uport->hub6 = new_info->hub6;
 897                uport->iotype = new_info->io_type;
 898                uport->regshift = new_info->iomem_reg_shift;
 899                uport->mapbase = (unsigned long)new_info->iomem_base;
 900
 901                /*
 902                 * Claim and map the new regions
 903                 */
 904                if (uport->type != PORT_UNKNOWN && uport->ops->request_port) {
 905                        retval = uport->ops->request_port(uport);
 906                } else {
 907                        /* Always success - Jean II */
 908                        retval = 0;
 909                }
 910
 911                /*
 912                 * If we fail to request resources for the
 913                 * new port, try to restore the old settings.
 914                 */
 915                if (retval) {
 916                        uport->iobase = old_iobase;
 917                        uport->type = old_type;
 918                        uport->hub6 = old_hub6;
 919                        uport->iotype = old_iotype;
 920                        uport->regshift = old_shift;
 921                        uport->mapbase = old_mapbase;
 922
 923                        if (old_type != PORT_UNKNOWN) {
 924                                retval = uport->ops->request_port(uport);
 925                                /*
 926                                 * If we failed to restore the old settings,
 927                                 * we fail like this.
 928                                 */
 929                                if (retval)
 930                                        uport->type = PORT_UNKNOWN;
 931
 932                                /*
 933                                 * We failed anyway.
 934                                 */
 935                                retval = -EBUSY;
 936                        }
 937
 938                        /* Added to return the correct error -Ram Gupta */
 939                        goto exit;
 940                }
 941        }
 942
 943        if (change_irq)
 944                uport->irq      = new_info->irq;
 945        if (!(uport->flags & UPF_FIXED_PORT))
 946                uport->uartclk  = new_info->baud_base * 16;
 947        uport->flags            = (uport->flags & ~UPF_CHANGE_MASK) |
 948                                 (new_flags & UPF_CHANGE_MASK);
 949        uport->custom_divisor   = new_info->custom_divisor;
 950        port->close_delay     = close_delay;
 951        port->closing_wait    = closing_wait;
 952        if (new_info->xmit_fifo_size)
 953                uport->fifosize = new_info->xmit_fifo_size;
 954
 955 check_and_exit:
 956        retval = 0;
 957        if (uport->type == PORT_UNKNOWN)
 958                goto exit;
 959        if (tty_port_initialized(port)) {
 960                if (((old_flags ^ uport->flags) & UPF_SPD_MASK) ||
 961                    old_custom_divisor != uport->custom_divisor) {
 962                        /*
 963                         * If they're setting up a custom divisor or speed,
 964                         * instead of clearing it, then bitch about it.
 965                         */
 966                        if (uport->flags & UPF_SPD_MASK) {
 967                                dev_notice_ratelimited(uport->dev,
 968                                       "%s sets custom speed on %s. This is deprecated.\n",
 969                                      current->comm,
 970                                      tty_name(port->tty));
 971                        }
 972                        uart_change_speed(tty, state, NULL);
 973                }
 974        } else {
 975                retval = uart_startup(tty, state, 1);
 976                if (retval == 0)
 977                        tty_port_set_initialized(port, true);
 978                if (retval > 0)
 979                        retval = 0;
 980        }
 981 exit:
 982        return retval;
 983}
 984
 985static int uart_set_info_user(struct tty_struct *tty, struct serial_struct *ss)
 986{
 987        struct uart_state *state = tty->driver_data;
 988        struct tty_port *port = &state->port;
 989        int retval;
 990
 991        down_write(&tty->termios_rwsem);
 992        /*
 993         * This semaphore protects port->count.  It is also
 994         * very useful to prevent opens.  Also, take the
 995         * port configuration semaphore to make sure that a
 996         * module insertion/removal doesn't change anything
 997         * under us.
 998         */
 999        mutex_lock(&port->mutex);
1000        retval = uart_set_info(tty, port, state, ss);
1001        mutex_unlock(&port->mutex);
1002        up_write(&tty->termios_rwsem);
1003        return retval;
1004}
1005
1006/**
1007 *      uart_get_lsr_info       -       get line status register info
1008 *      @tty: tty associated with the UART
1009 *      @state: UART being queried
1010 *      @value: returned modem value
1011 */
1012static int uart_get_lsr_info(struct tty_struct *tty,
1013                        struct uart_state *state, unsigned int __user *value)
1014{
1015        struct uart_port *uport = uart_port_check(state);
1016        unsigned int result;
1017
1018        result = uport->ops->tx_empty(uport);
1019
1020        /*
1021         * If we're about to load something into the transmit
1022         * register, we'll pretend the transmitter isn't empty to
1023         * avoid a race condition (depending on when the transmit
1024         * interrupt happens).
1025         */
1026        if (uport->x_char ||
1027            ((uart_circ_chars_pending(&state->xmit) > 0) &&
1028             !uart_tx_stopped(uport)))
1029                result &= ~TIOCSER_TEMT;
1030
1031        return put_user(result, value);
1032}
1033
1034static int uart_tiocmget(struct tty_struct *tty)
1035{
1036        struct uart_state *state = tty->driver_data;
1037        struct tty_port *port = &state->port;
1038        struct uart_port *uport;
1039        int result = -EIO;
1040
1041        mutex_lock(&port->mutex);
1042        uport = uart_port_check(state);
1043        if (!uport)
1044                goto out;
1045
1046        if (!tty_io_error(tty)) {
1047                result = uport->mctrl;
1048                spin_lock_irq(&uport->lock);
1049                result |= uport->ops->get_mctrl(uport);
1050                spin_unlock_irq(&uport->lock);
1051        }
1052out:
1053        mutex_unlock(&port->mutex);
1054        return result;
1055}
1056
1057static int
1058uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
1059{
1060        struct uart_state *state = tty->driver_data;
1061        struct tty_port *port = &state->port;
1062        struct uart_port *uport;
1063        int ret = -EIO;
1064
1065        mutex_lock(&port->mutex);
1066        uport = uart_port_check(state);
1067        if (!uport)
1068                goto out;
1069
1070        if (!tty_io_error(tty)) {
1071                uart_update_mctrl(uport, set, clear);
1072                ret = 0;
1073        }
1074out:
1075        mutex_unlock(&port->mutex);
1076        return ret;
1077}
1078
1079static int uart_break_ctl(struct tty_struct *tty, int break_state)
1080{
1081        struct uart_state *state = tty->driver_data;
1082        struct tty_port *port = &state->port;
1083        struct uart_port *uport;
1084        int ret = -EIO;
1085
1086        mutex_lock(&port->mutex);
1087        uport = uart_port_check(state);
1088        if (!uport)
1089                goto out;
1090
1091        if (uport->type != PORT_UNKNOWN && uport->ops->break_ctl)
1092                uport->ops->break_ctl(uport, break_state);
1093        ret = 0;
1094out:
1095        mutex_unlock(&port->mutex);
1096        return ret;
1097}
1098
1099static int uart_do_autoconfig(struct tty_struct *tty, struct uart_state *state)
1100{
1101        struct tty_port *port = &state->port;
1102        struct uart_port *uport;
1103        int flags, ret;
1104
1105        if (!capable(CAP_SYS_ADMIN))
1106                return -EPERM;
1107
1108        /*
1109         * Take the per-port semaphore.  This prevents count from
1110         * changing, and hence any extra opens of the port while
1111         * we're auto-configuring.
1112         */
1113        if (mutex_lock_interruptible(&port->mutex))
1114                return -ERESTARTSYS;
1115
1116        uport = uart_port_check(state);
1117        if (!uport) {
1118                ret = -EIO;
1119                goto out;
1120        }
1121
1122        ret = -EBUSY;
1123        if (tty_port_users(port) == 1) {
1124                uart_shutdown(tty, state);
1125
1126                /*
1127                 * If we already have a port type configured,
1128                 * we must release its resources.
1129                 */
1130                if (uport->type != PORT_UNKNOWN && uport->ops->release_port)
1131                        uport->ops->release_port(uport);
1132
1133                flags = UART_CONFIG_TYPE;
1134                if (uport->flags & UPF_AUTO_IRQ)
1135                        flags |= UART_CONFIG_IRQ;
1136
1137                /*
1138                 * This will claim the ports resources if
1139                 * a port is found.
1140                 */
1141                uport->ops->config_port(uport, flags);
1142
1143                ret = uart_startup(tty, state, 1);
1144                if (ret == 0)
1145                        tty_port_set_initialized(port, true);
1146                if (ret > 0)
1147                        ret = 0;
1148        }
1149out:
1150        mutex_unlock(&port->mutex);
1151        return ret;
1152}
1153
1154static void uart_enable_ms(struct uart_port *uport)
1155{
1156        /*
1157         * Force modem status interrupts on
1158         */
1159        if (uport->ops->enable_ms)
1160                uport->ops->enable_ms(uport);
1161}
1162
1163/*
1164 * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
1165 * - mask passed in arg for lines of interest
1166 *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
1167 * Caller should use TIOCGICOUNT to see which one it was
1168 *
1169 * FIXME: This wants extracting into a common all driver implementation
1170 * of TIOCMWAIT using tty_port.
1171 */
1172static int uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1173{
1174        struct uart_port *uport;
1175        struct tty_port *port = &state->port;
1176        DECLARE_WAITQUEUE(wait, current);
1177        struct uart_icount cprev, cnow;
1178        int ret;
1179
1180        /*
1181         * note the counters on entry
1182         */
1183        uport = uart_port_ref(state);
1184        if (!uport)
1185                return -EIO;
1186        spin_lock_irq(&uport->lock);
1187        memcpy(&cprev, &uport->icount, sizeof(struct uart_icount));
1188        uart_enable_ms(uport);
1189        spin_unlock_irq(&uport->lock);
1190
1191        add_wait_queue(&port->delta_msr_wait, &wait);
1192        for (;;) {
1193                spin_lock_irq(&uport->lock);
1194                memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1195                spin_unlock_irq(&uport->lock);
1196
1197                set_current_state(TASK_INTERRUPTIBLE);
1198
1199                if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1200                    ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1201                    ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
1202                    ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
1203                        ret = 0;
1204                        break;
1205                }
1206
1207                schedule();
1208
1209                /* see if a signal did it */
1210                if (signal_pending(current)) {
1211                        ret = -ERESTARTSYS;
1212                        break;
1213                }
1214
1215                cprev = cnow;
1216        }
1217        __set_current_state(TASK_RUNNING);
1218        remove_wait_queue(&port->delta_msr_wait, &wait);
1219        uart_port_deref(uport);
1220
1221        return ret;
1222}
1223
1224/*
1225 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
1226 * Return: write counters to the user passed counter struct
1227 * NB: both 1->0 and 0->1 transitions are counted except for
1228 *     RI where only 0->1 is counted.
1229 */
1230static int uart_get_icount(struct tty_struct *tty,
1231                          struct serial_icounter_struct *icount)
1232{
1233        struct uart_state *state = tty->driver_data;
1234        struct uart_icount cnow;
1235        struct uart_port *uport;
1236
1237        uport = uart_port_ref(state);
1238        if (!uport)
1239                return -EIO;
1240        spin_lock_irq(&uport->lock);
1241        memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1242        spin_unlock_irq(&uport->lock);
1243        uart_port_deref(uport);
1244
1245        icount->cts         = cnow.cts;
1246        icount->dsr         = cnow.dsr;
1247        icount->rng         = cnow.rng;
1248        icount->dcd         = cnow.dcd;
1249        icount->rx          = cnow.rx;
1250        icount->tx          = cnow.tx;
1251        icount->frame       = cnow.frame;
1252        icount->overrun     = cnow.overrun;
1253        icount->parity      = cnow.parity;
1254        icount->brk         = cnow.brk;
1255        icount->buf_overrun = cnow.buf_overrun;
1256
1257        return 0;
1258}
1259
1260static int uart_get_rs485_config(struct uart_port *port,
1261                         struct serial_rs485 __user *rs485)
1262{
1263        unsigned long flags;
1264        struct serial_rs485 aux;
1265
1266        spin_lock_irqsave(&port->lock, flags);
1267        aux = port->rs485;
1268        spin_unlock_irqrestore(&port->lock, flags);
1269
1270        if (copy_to_user(rs485, &aux, sizeof(aux)))
1271                return -EFAULT;
1272
1273        return 0;
1274}
1275
1276static int uart_set_rs485_config(struct uart_port *port,
1277                         struct serial_rs485 __user *rs485_user)
1278{
1279        struct serial_rs485 rs485;
1280        int ret;
1281        unsigned long flags;
1282
1283        if (!port->rs485_config)
1284                return -ENOTTY;
1285
1286        if (copy_from_user(&rs485, rs485_user, sizeof(*rs485_user)))
1287                return -EFAULT;
1288
1289        spin_lock_irqsave(&port->lock, flags);
1290        ret = port->rs485_config(port, &rs485);
1291        spin_unlock_irqrestore(&port->lock, flags);
1292        if (ret)
1293                return ret;
1294
1295        if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485)))
1296                return -EFAULT;
1297
1298        return 0;
1299}
1300
1301static int uart_get_iso7816_config(struct uart_port *port,
1302                                   struct serial_iso7816 __user *iso7816)
1303{
1304        unsigned long flags;
1305        struct serial_iso7816 aux;
1306
1307        if (!port->iso7816_config)
1308                return -ENOTTY;
1309
1310        spin_lock_irqsave(&port->lock, flags);
1311        aux = port->iso7816;
1312        spin_unlock_irqrestore(&port->lock, flags);
1313
1314        if (copy_to_user(iso7816, &aux, sizeof(aux)))
1315                return -EFAULT;
1316
1317        return 0;
1318}
1319
1320static int uart_set_iso7816_config(struct uart_port *port,
1321                                   struct serial_iso7816 __user *iso7816_user)
1322{
1323        struct serial_iso7816 iso7816;
1324        int i, ret;
1325        unsigned long flags;
1326
1327        if (!port->iso7816_config)
1328                return -ENOTTY;
1329
1330        if (copy_from_user(&iso7816, iso7816_user, sizeof(*iso7816_user)))
1331                return -EFAULT;
1332
1333        /*
1334         * There are 5 words reserved for future use. Check that userspace
1335         * doesn't put stuff in there to prevent breakages in the future.
1336         */
1337        for (i = 0; i < 5; i++)
1338                if (iso7816.reserved[i])
1339                        return -EINVAL;
1340
1341        spin_lock_irqsave(&port->lock, flags);
1342        ret = port->iso7816_config(port, &iso7816);
1343        spin_unlock_irqrestore(&port->lock, flags);
1344        if (ret)
1345                return ret;
1346
1347        if (copy_to_user(iso7816_user, &port->iso7816, sizeof(port->iso7816)))
1348                return -EFAULT;
1349
1350        return 0;
1351}
1352
1353/*
1354 * Called via sys_ioctl.  We can use spin_lock_irq() here.
1355 */
1356static int
1357uart_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
1358{
1359        struct uart_state *state = tty->driver_data;
1360        struct tty_port *port = &state->port;
1361        struct uart_port *uport;
1362        void __user *uarg = (void __user *)arg;
1363        int ret = -ENOIOCTLCMD;
1364
1365
1366        /*
1367         * These ioctls don't rely on the hardware to be present.
1368         */
1369        switch (cmd) {
1370        case TIOCSERCONFIG:
1371                down_write(&tty->termios_rwsem);
1372                ret = uart_do_autoconfig(tty, state);
1373                up_write(&tty->termios_rwsem);
1374                break;
1375        }
1376
1377        if (ret != -ENOIOCTLCMD)
1378                goto out;
1379
1380        if (tty_io_error(tty)) {
1381                ret = -EIO;
1382                goto out;
1383        }
1384
1385        /*
1386         * The following should only be used when hardware is present.
1387         */
1388        switch (cmd) {
1389        case TIOCMIWAIT:
1390                ret = uart_wait_modem_status(state, arg);
1391                break;
1392        }
1393
1394        if (ret != -ENOIOCTLCMD)
1395                goto out;
1396
1397        mutex_lock(&port->mutex);
1398        uport = uart_port_check(state);
1399
1400        if (!uport || tty_io_error(tty)) {
1401                ret = -EIO;
1402                goto out_up;
1403        }
1404
1405        /*
1406         * All these rely on hardware being present and need to be
1407         * protected against the tty being hung up.
1408         */
1409
1410        switch (cmd) {
1411        case TIOCSERGETLSR: /* Get line status register */
1412                ret = uart_get_lsr_info(tty, state, uarg);
1413                break;
1414
1415        case TIOCGRS485:
1416                ret = uart_get_rs485_config(uport, uarg);
1417                break;
1418
1419        case TIOCSRS485:
1420                ret = uart_set_rs485_config(uport, uarg);
1421                break;
1422
1423        case TIOCSISO7816:
1424                ret = uart_set_iso7816_config(state->uart_port, uarg);
1425                break;
1426
1427        case TIOCGISO7816:
1428                ret = uart_get_iso7816_config(state->uart_port, uarg);
1429                break;
1430        default:
1431                if (uport->ops->ioctl)
1432                        ret = uport->ops->ioctl(uport, cmd, arg);
1433                break;
1434        }
1435out_up:
1436        mutex_unlock(&port->mutex);
1437out:
1438        return ret;
1439}
1440
1441static void uart_set_ldisc(struct tty_struct *tty)
1442{
1443        struct uart_state *state = tty->driver_data;
1444        struct uart_port *uport;
1445        struct tty_port *port = &state->port;
1446
1447        if (!tty_port_initialized(port))
1448                return;
1449
1450        mutex_lock(&state->port.mutex);
1451        uport = uart_port_check(state);
1452        if (uport && uport->ops->set_ldisc)
1453                uport->ops->set_ldisc(uport, &tty->termios);
1454        mutex_unlock(&state->port.mutex);
1455}
1456
1457static void uart_set_termios(struct tty_struct *tty,
1458                                                struct ktermios *old_termios)
1459{
1460        struct uart_state *state = tty->driver_data;
1461        struct uart_port *uport;
1462        unsigned int cflag = tty->termios.c_cflag;
1463        unsigned int iflag_mask = IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK;
1464        bool sw_changed = false;
1465
1466        mutex_lock(&state->port.mutex);
1467        uport = uart_port_check(state);
1468        if (!uport)
1469                goto out;
1470
1471        /*
1472         * Drivers doing software flow control also need to know
1473         * about changes to these input settings.
1474         */
1475        if (uport->flags & UPF_SOFT_FLOW) {
1476                iflag_mask |= IXANY|IXON|IXOFF;
1477                sw_changed =
1478                   tty->termios.c_cc[VSTART] != old_termios->c_cc[VSTART] ||
1479                   tty->termios.c_cc[VSTOP] != old_termios->c_cc[VSTOP];
1480        }
1481
1482        /*
1483         * These are the bits that are used to setup various
1484         * flags in the low level driver. We can ignore the Bfoo
1485         * bits in c_cflag; c_[io]speed will always be set
1486         * appropriately by set_termios() in tty_ioctl.c
1487         */
1488        if ((cflag ^ old_termios->c_cflag) == 0 &&
1489            tty->termios.c_ospeed == old_termios->c_ospeed &&
1490            tty->termios.c_ispeed == old_termios->c_ispeed &&
1491            ((tty->termios.c_iflag ^ old_termios->c_iflag) & iflag_mask) == 0 &&
1492            !sw_changed) {
1493                goto out;
1494        }
1495
1496        uart_change_speed(tty, state, old_termios);
1497        /* reload cflag from termios; port driver may have overridden flags */
1498        cflag = tty->termios.c_cflag;
1499
1500        /* Handle transition to B0 status */
1501        if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
1502                uart_clear_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
1503        /* Handle transition away from B0 status */
1504        else if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
1505                unsigned int mask = TIOCM_DTR;
1506
1507                if (!(cflag & CRTSCTS) || !tty_throttled(tty))
1508                        mask |= TIOCM_RTS;
1509                uart_set_mctrl(uport, mask);
1510        }
1511out:
1512        mutex_unlock(&state->port.mutex);
1513}
1514
1515/*
1516 * Calls to uart_close() are serialised via the tty_lock in
1517 *   drivers/tty/tty_io.c:tty_release()
1518 *   drivers/tty/tty_io.c:do_tty_hangup()
1519 */
1520static void uart_close(struct tty_struct *tty, struct file *filp)
1521{
1522        struct uart_state *state = tty->driver_data;
1523
1524        if (!state) {
1525                struct uart_driver *drv = tty->driver->driver_state;
1526                struct tty_port *port;
1527
1528                state = drv->state + tty->index;
1529                port = &state->port;
1530                spin_lock_irq(&port->lock);
1531                --port->count;
1532                spin_unlock_irq(&port->lock);
1533                return;
1534        }
1535
1536        pr_debug("uart_close(%d) called\n", tty->index);
1537
1538        tty_port_close(tty->port, tty, filp);
1539}
1540
1541static void uart_tty_port_shutdown(struct tty_port *port)
1542{
1543        struct uart_state *state = container_of(port, struct uart_state, port);
1544        struct uart_port *uport = uart_port_check(state);
1545
1546        /*
1547         * At this point, we stop accepting input.  To do this, we
1548         * disable the receive line status interrupts.
1549         */
1550        if (WARN(!uport, "detached port still initialized!\n"))
1551                return;
1552
1553        spin_lock_irq(&uport->lock);
1554        uport->ops->stop_rx(uport);
1555        spin_unlock_irq(&uport->lock);
1556
1557        uart_port_shutdown(port);
1558
1559        /*
1560         * It's possible for shutdown to be called after suspend if we get
1561         * a DCD drop (hangup) at just the right time.  Clear suspended bit so
1562         * we don't try to resume a port that has been shutdown.
1563         */
1564        tty_port_set_suspended(port, 0);
1565
1566        uart_change_pm(state, UART_PM_STATE_OFF);
1567
1568}
1569
1570static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
1571{
1572        struct uart_state *state = tty->driver_data;
1573        struct uart_port *port;
1574        unsigned long char_time, expire;
1575
1576        port = uart_port_ref(state);
1577        if (!port)
1578                return;
1579
1580        if (port->type == PORT_UNKNOWN || port->fifosize == 0) {
1581                uart_port_deref(port);
1582                return;
1583        }
1584
1585        /*
1586         * Set the check interval to be 1/5 of the estimated time to
1587         * send a single character, and make it at least 1.  The check
1588         * interval should also be less than the timeout.
1589         *
1590         * Note: we have to use pretty tight timings here to satisfy
1591         * the NIST-PCTS.
1592         */
1593        char_time = (port->timeout - HZ/50) / port->fifosize;
1594        char_time = char_time / 5;
1595        if (char_time == 0)
1596                char_time = 1;
1597        if (timeout && timeout < char_time)
1598                char_time = timeout;
1599
1600        /*
1601         * If the transmitter hasn't cleared in twice the approximate
1602         * amount of time to send the entire FIFO, it probably won't
1603         * ever clear.  This assumes the UART isn't doing flow
1604         * control, which is currently the case.  Hence, if it ever
1605         * takes longer than port->timeout, this is probably due to a
1606         * UART bug of some kind.  So, we clamp the timeout parameter at
1607         * 2*port->timeout.
1608         */
1609        if (timeout == 0 || timeout > 2 * port->timeout)
1610                timeout = 2 * port->timeout;
1611
1612        expire = jiffies + timeout;
1613
1614        pr_debug("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n",
1615                port->line, jiffies, expire);
1616
1617        /*
1618         * Check whether the transmitter is empty every 'char_time'.
1619         * 'timeout' / 'expire' give us the maximum amount of time
1620         * we wait.
1621         */
1622        while (!port->ops->tx_empty(port)) {
1623                msleep_interruptible(jiffies_to_msecs(char_time));
1624                if (signal_pending(current))
1625                        break;
1626                if (time_after(jiffies, expire))
1627                        break;
1628        }
1629        uart_port_deref(port);
1630}
1631
1632/*
1633 * Calls to uart_hangup() are serialised by the tty_lock in
1634 *   drivers/tty/tty_io.c:do_tty_hangup()
1635 * This runs from a workqueue and can sleep for a _short_ time only.
1636 */
1637static void uart_hangup(struct tty_struct *tty)
1638{
1639        struct uart_state *state = tty->driver_data;
1640        struct tty_port *port = &state->port;
1641        struct uart_port *uport;
1642        unsigned long flags;
1643
1644        pr_debug("uart_hangup(%d)\n", tty->index);
1645
1646        mutex_lock(&port->mutex);
1647        uport = uart_port_check(state);
1648        WARN(!uport, "hangup of detached port!\n");
1649
1650        if (tty_port_active(port)) {
1651                uart_flush_buffer(tty);
1652                uart_shutdown(tty, state);
1653                spin_lock_irqsave(&port->lock, flags);
1654                port->count = 0;
1655                spin_unlock_irqrestore(&port->lock, flags);
1656                tty_port_set_active(port, 0);
1657                tty_port_tty_set(port, NULL);
1658                if (uport && !uart_console(uport))
1659                        uart_change_pm(state, UART_PM_STATE_OFF);
1660                wake_up_interruptible(&port->open_wait);
1661                wake_up_interruptible(&port->delta_msr_wait);
1662        }
1663        mutex_unlock(&port->mutex);
1664}
1665
1666/* uport == NULL if uart_port has already been removed */
1667static void uart_port_shutdown(struct tty_port *port)
1668{
1669        struct uart_state *state = container_of(port, struct uart_state, port);
1670        struct uart_port *uport = uart_port_check(state);
1671
1672        /*
1673         * clear delta_msr_wait queue to avoid mem leaks: we may free
1674         * the irq here so the queue might never be woken up.  Note
1675         * that we won't end up waiting on delta_msr_wait again since
1676         * any outstanding file descriptors should be pointing at
1677         * hung_up_tty_fops now.
1678         */
1679        wake_up_interruptible(&port->delta_msr_wait);
1680
1681        /*
1682         * Free the IRQ and disable the port.
1683         */
1684        if (uport)
1685                uport->ops->shutdown(uport);
1686
1687        /*
1688         * Ensure that the IRQ handler isn't running on another CPU.
1689         */
1690        if (uport)
1691                synchronize_irq(uport->irq);
1692}
1693
1694static int uart_carrier_raised(struct tty_port *port)
1695{
1696        struct uart_state *state = container_of(port, struct uart_state, port);
1697        struct uart_port *uport;
1698        int mctrl;
1699
1700        uport = uart_port_ref(state);
1701        /*
1702         * Should never observe uport == NULL since checks for hangup should
1703         * abort the tty_port_block_til_ready() loop before checking for carrier
1704         * raised -- but report carrier raised if it does anyway so open will
1705         * continue and not sleep
1706         */
1707        if (WARN_ON(!uport))
1708                return 1;
1709        spin_lock_irq(&uport->lock);
1710        uart_enable_ms(uport);
1711        mctrl = uport->ops->get_mctrl(uport);
1712        spin_unlock_irq(&uport->lock);
1713        uart_port_deref(uport);
1714        if (mctrl & TIOCM_CAR)
1715                return 1;
1716        return 0;
1717}
1718
1719static void uart_dtr_rts(struct tty_port *port, int raise)
1720{
1721        struct uart_state *state = container_of(port, struct uart_state, port);
1722        struct uart_port *uport;
1723
1724        uport = uart_port_ref(state);
1725        if (!uport)
1726                return;
1727        uart_port_dtr_rts(uport, raise);
1728        uart_port_deref(uport);
1729}
1730
1731static int uart_install(struct tty_driver *driver, struct tty_struct *tty)
1732{
1733        struct uart_driver *drv = driver->driver_state;
1734        struct uart_state *state = drv->state + tty->index;
1735
1736        tty->driver_data = state;
1737
1738        return tty_standard_install(driver, tty);
1739}
1740
1741/*
1742 * Calls to uart_open are serialised by the tty_lock in
1743 *   drivers/tty/tty_io.c:tty_open()
1744 * Note that if this fails, then uart_close() _will_ be called.
1745 *
1746 * In time, we want to scrap the "opening nonpresent ports"
1747 * behaviour and implement an alternative way for setserial
1748 * to set base addresses/ports/types.  This will allow us to
1749 * get rid of a certain amount of extra tests.
1750 */
1751static int uart_open(struct tty_struct *tty, struct file *filp)
1752{
1753        struct uart_state *state = tty->driver_data;
1754        int retval;
1755
1756        retval = tty_port_open(&state->port, tty, filp);
1757        if (retval > 0)
1758                retval = 0;
1759
1760        return retval;
1761}
1762
1763static int uart_port_activate(struct tty_port *port, struct tty_struct *tty)
1764{
1765        struct uart_state *state = container_of(port, struct uart_state, port);
1766        struct uart_port *uport;
1767        int ret;
1768
1769        uport = uart_port_check(state);
1770        if (!uport || uport->flags & UPF_DEAD)
1771                return -ENXIO;
1772
1773        /*
1774         * Start up the serial port.
1775         */
1776        ret = uart_startup(tty, state, 0);
1777        if (ret > 0)
1778                tty_port_set_active(port, 1);
1779
1780        return ret;
1781}
1782
1783static const char *uart_type(struct uart_port *port)
1784{
1785        const char *str = NULL;
1786
1787        if (port->ops->type)
1788                str = port->ops->type(port);
1789
1790        if (!str)
1791                str = "unknown";
1792
1793        return str;
1794}
1795
1796#ifdef CONFIG_PROC_FS
1797
1798static void uart_line_info(struct seq_file *m, struct uart_driver *drv, int i)
1799{
1800        struct uart_state *state = drv->state + i;
1801        struct tty_port *port = &state->port;
1802        enum uart_pm_state pm_state;
1803        struct uart_port *uport;
1804        char stat_buf[32];
1805        unsigned int status;
1806        int mmio;
1807
1808        mutex_lock(&port->mutex);
1809        uport = uart_port_check(state);
1810        if (!uport)
1811                goto out;
1812
1813        mmio = uport->iotype >= UPIO_MEM;
1814        seq_printf(m, "%d: uart:%s %s%08llX irq:%d",
1815                        uport->line, uart_type(uport),
1816                        mmio ? "mmio:0x" : "port:",
1817                        mmio ? (unsigned long long)uport->mapbase
1818                             : (unsigned long long)uport->iobase,
1819                        uport->irq);
1820
1821        if (uport->type == PORT_UNKNOWN) {
1822                seq_putc(m, '\n');
1823                goto out;
1824        }
1825
1826        if (capable(CAP_SYS_ADMIN)) {
1827                pm_state = state->pm_state;
1828                if (pm_state != UART_PM_STATE_ON)
1829                        uart_change_pm(state, UART_PM_STATE_ON);
1830                spin_lock_irq(&uport->lock);
1831                status = uport->ops->get_mctrl(uport);
1832                spin_unlock_irq(&uport->lock);
1833                if (pm_state != UART_PM_STATE_ON)
1834                        uart_change_pm(state, pm_state);
1835
1836                seq_printf(m, " tx:%d rx:%d",
1837                                uport->icount.tx, uport->icount.rx);
1838                if (uport->icount.frame)
1839                        seq_printf(m, " fe:%d", uport->icount.frame);
1840                if (uport->icount.parity)
1841                        seq_printf(m, " pe:%d", uport->icount.parity);
1842                if (uport->icount.brk)
1843                        seq_printf(m, " brk:%d", uport->icount.brk);
1844                if (uport->icount.overrun)
1845                        seq_printf(m, " oe:%d", uport->icount.overrun);
1846                if (uport->icount.buf_overrun)
1847                        seq_printf(m, " bo:%d", uport->icount.buf_overrun);
1848
1849#define INFOBIT(bit, str) \
1850        if (uport->mctrl & (bit)) \
1851                strncat(stat_buf, (str), sizeof(stat_buf) - \
1852                        strlen(stat_buf) - 2)
1853#define STATBIT(bit, str) \
1854        if (status & (bit)) \
1855                strncat(stat_buf, (str), sizeof(stat_buf) - \
1856                       strlen(stat_buf) - 2)
1857
1858                stat_buf[0] = '\0';
1859                stat_buf[1] = '\0';
1860                INFOBIT(TIOCM_RTS, "|RTS");
1861                STATBIT(TIOCM_CTS, "|CTS");
1862                INFOBIT(TIOCM_DTR, "|DTR");
1863                STATBIT(TIOCM_DSR, "|DSR");
1864                STATBIT(TIOCM_CAR, "|CD");
1865                STATBIT(TIOCM_RNG, "|RI");
1866                if (stat_buf[0])
1867                        stat_buf[0] = ' ';
1868
1869                seq_puts(m, stat_buf);
1870        }
1871        seq_putc(m, '\n');
1872#undef STATBIT
1873#undef INFOBIT
1874out:
1875        mutex_unlock(&port->mutex);
1876}
1877
1878static int uart_proc_show(struct seq_file *m, void *v)
1879{
1880        struct tty_driver *ttydrv = m->private;
1881        struct uart_driver *drv = ttydrv->driver_state;
1882        int i;
1883
1884        seq_printf(m, "serinfo:1.0 driver%s%s revision:%s\n", "", "", "");
1885        for (i = 0; i < drv->nr; i++)
1886                uart_line_info(m, drv, i);
1887        return 0;
1888}
1889#endif
1890
1891static inline bool uart_console_enabled(struct uart_port *port)
1892{
1893        return uart_console(port) && (port->cons->flags & CON_ENABLED);
1894}
1895
1896static void uart_port_spin_lock_init(struct uart_port *port)
1897{
1898        spin_lock_init(&port->lock);
1899        lockdep_set_class(&port->lock, &port_lock_key);
1900}
1901
1902#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
1903/**
1904 *      uart_console_write - write a console message to a serial port
1905 *      @port: the port to write the message
1906 *      @s: array of characters
1907 *      @count: number of characters in string to write
1908 *      @putchar: function to write character to port
1909 */
1910void uart_console_write(struct uart_port *port, const char *s,
1911                        unsigned int count,
1912                        void (*putchar)(struct uart_port *, int))
1913{
1914        unsigned int i;
1915
1916        for (i = 0; i < count; i++, s++) {
1917                if (*s == '\n')
1918                        putchar(port, '\r');
1919                putchar(port, *s);
1920        }
1921}
1922EXPORT_SYMBOL_GPL(uart_console_write);
1923
1924/*
1925 *      Check whether an invalid uart number has been specified, and
1926 *      if so, search for the first available port that does have
1927 *      console support.
1928 */
1929struct uart_port * __init
1930uart_get_console(struct uart_port *ports, int nr, struct console *co)
1931{
1932        int idx = co->index;
1933
1934        if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
1935                                     ports[idx].membase == NULL))
1936                for (idx = 0; idx < nr; idx++)
1937                        if (ports[idx].iobase != 0 ||
1938                            ports[idx].membase != NULL)
1939                                break;
1940
1941        co->index = idx;
1942
1943        return ports + idx;
1944}
1945
1946/**
1947 *      uart_parse_earlycon - Parse earlycon options
1948 *      @p:       ptr to 2nd field (ie., just beyond '<name>,')
1949 *      @iotype:  ptr for decoded iotype (out)
1950 *      @addr:    ptr for decoded mapbase/iobase (out)
1951 *      @options: ptr for <options> field; NULL if not present (out)
1952 *
1953 *      Decodes earlycon kernel command line parameters of the form
1954 *         earlycon=<name>,io|mmio|mmio16|mmio32|mmio32be|mmio32native,<addr>,<options>
1955 *         console=<name>,io|mmio|mmio16|mmio32|mmio32be|mmio32native,<addr>,<options>
1956 *
1957 *      The optional form
1958 *
1959 *         earlycon=<name>,0x<addr>,<options>
1960 *         console=<name>,0x<addr>,<options>
1961 *
1962 *      is also accepted; the returned @iotype will be UPIO_MEM.
1963 *
1964 *      Returns 0 on success or -EINVAL on failure
1965 */
1966int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *addr,
1967                        char **options)
1968{
1969        if (strncmp(p, "mmio,", 5) == 0) {
1970                *iotype = UPIO_MEM;
1971                p += 5;
1972        } else if (strncmp(p, "mmio16,", 7) == 0) {
1973                *iotype = UPIO_MEM16;
1974                p += 7;
1975        } else if (strncmp(p, "mmio32,", 7) == 0) {
1976                *iotype = UPIO_MEM32;
1977                p += 7;
1978        } else if (strncmp(p, "mmio32be,", 9) == 0) {
1979                *iotype = UPIO_MEM32BE;
1980                p += 9;
1981        } else if (strncmp(p, "mmio32native,", 13) == 0) {
1982                *iotype = IS_ENABLED(CONFIG_CPU_BIG_ENDIAN) ?
1983                        UPIO_MEM32BE : UPIO_MEM32;
1984                p += 13;
1985        } else if (strncmp(p, "io,", 3) == 0) {
1986                *iotype = UPIO_PORT;
1987                p += 3;
1988        } else if (strncmp(p, "0x", 2) == 0) {
1989                *iotype = UPIO_MEM;
1990        } else {
1991                return -EINVAL;
1992        }
1993
1994        /*
1995         * Before you replace it with kstrtoull(), think about options separator
1996         * (',') it will not tolerate
1997         */
1998        *addr = simple_strtoull(p, NULL, 0);
1999        p = strchr(p, ',');
2000        if (p)
2001                p++;
2002
2003        *options = p;
2004        return 0;
2005}
2006EXPORT_SYMBOL_GPL(uart_parse_earlycon);
2007
2008/**
2009 *      uart_parse_options - Parse serial port baud/parity/bits/flow control.
2010 *      @options: pointer to option string
2011 *      @baud: pointer to an 'int' variable for the baud rate.
2012 *      @parity: pointer to an 'int' variable for the parity.
2013 *      @bits: pointer to an 'int' variable for the number of data bits.
2014 *      @flow: pointer to an 'int' variable for the flow control character.
2015 *
2016 *      uart_parse_options decodes a string containing the serial console
2017 *      options.  The format of the string is <baud><parity><bits><flow>,
2018 *      eg: 115200n8r
2019 */
2020void
2021uart_parse_options(const char *options, int *baud, int *parity,
2022                   int *bits, int *flow)
2023{
2024        const char *s = options;
2025
2026        *baud = simple_strtoul(s, NULL, 10);
2027        while (*s >= '0' && *s <= '9')
2028                s++;
2029        if (*s)
2030                *parity = *s++;
2031        if (*s)
2032                *bits = *s++ - '0';
2033        if (*s)
2034                *flow = *s;
2035}
2036EXPORT_SYMBOL_GPL(uart_parse_options);
2037
2038/**
2039 *      uart_set_options - setup the serial console parameters
2040 *      @port: pointer to the serial ports uart_port structure
2041 *      @co: console pointer
2042 *      @baud: baud rate
2043 *      @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
2044 *      @bits: number of data bits
2045 *      @flow: flow control character - 'r' (rts)
2046 */
2047int
2048uart_set_options(struct uart_port *port, struct console *co,
2049                 int baud, int parity, int bits, int flow)
2050{
2051        struct ktermios termios;
2052        static struct ktermios dummy;
2053
2054        /*
2055         * Ensure that the serial-console lock is initialised early.
2056         *
2057         * Note that the console-enabled check is needed because of kgdboc,
2058         * which can end up calling uart_set_options() for an already enabled
2059         * console via tty_find_polling_driver() and uart_poll_init().
2060         */
2061        if (!uart_console_enabled(port) && !port->console_reinit)
2062                uart_port_spin_lock_init(port);
2063
2064        memset(&termios, 0, sizeof(struct ktermios));
2065
2066        termios.c_cflag |= CREAD | HUPCL | CLOCAL;
2067        tty_termios_encode_baud_rate(&termios, baud, baud);
2068
2069        if (bits == 7)
2070                termios.c_cflag |= CS7;
2071        else
2072                termios.c_cflag |= CS8;
2073
2074        switch (parity) {
2075        case 'o': case 'O':
2076                termios.c_cflag |= PARODD;
2077                fallthrough;
2078        case 'e': case 'E':
2079                termios.c_cflag |= PARENB;
2080                break;
2081        }
2082
2083        if (flow == 'r')
2084                termios.c_cflag |= CRTSCTS;
2085
2086        /*
2087         * some uarts on other side don't support no flow control.
2088         * So we set * DTR in host uart to make them happy
2089         */
2090        port->mctrl |= TIOCM_DTR;
2091
2092        port->ops->set_termios(port, &termios, &dummy);
2093        /*
2094         * Allow the setting of the UART parameters with a NULL console
2095         * too:
2096         */
2097        if (co)
2098                co->cflag = termios.c_cflag;
2099
2100        return 0;
2101}
2102EXPORT_SYMBOL_GPL(uart_set_options);
2103#endif /* CONFIG_SERIAL_CORE_CONSOLE */
2104
2105/**
2106 * uart_change_pm - set power state of the port
2107 *
2108 * @state: port descriptor
2109 * @pm_state: new state
2110 *
2111 * Locking: port->mutex has to be held
2112 */
2113static void uart_change_pm(struct uart_state *state,
2114                           enum uart_pm_state pm_state)
2115{
2116        struct uart_port *port = uart_port_check(state);
2117
2118        if (state->pm_state != pm_state) {
2119                if (port && port->ops->pm)
2120                        port->ops->pm(port, pm_state, state->pm_state);
2121                state->pm_state = pm_state;
2122        }
2123}
2124
2125struct uart_match {
2126        struct uart_port *port;
2127        struct uart_driver *driver;
2128};
2129
2130static int serial_match_port(struct device *dev, void *data)
2131{
2132        struct uart_match *match = data;
2133        struct tty_driver *tty_drv = match->driver->tty_driver;
2134        dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
2135                match->port->line;
2136
2137        return dev->devt == devt; /* Actually, only one tty per port */
2138}
2139
2140int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
2141{
2142        struct uart_state *state = drv->state + uport->line;
2143        struct tty_port *port = &state->port;
2144        struct device *tty_dev;
2145        struct uart_match match = {uport, drv};
2146
2147        mutex_lock(&port->mutex);
2148
2149        tty_dev = device_find_child(uport->dev, &match, serial_match_port);
2150        if (tty_dev && device_may_wakeup(tty_dev)) {
2151                enable_irq_wake(uport->irq);
2152                put_device(tty_dev);
2153                mutex_unlock(&port->mutex);
2154                return 0;
2155        }
2156        put_device(tty_dev);
2157
2158        /* Nothing to do if the console is not suspending */
2159        if (!console_suspend_enabled && uart_console(uport))
2160                goto unlock;
2161
2162        uport->suspended = 1;
2163
2164        if (tty_port_initialized(port)) {
2165                const struct uart_ops *ops = uport->ops;
2166                int tries;
2167
2168                tty_port_set_suspended(port, 1);
2169                tty_port_set_initialized(port, 0);
2170
2171                spin_lock_irq(&uport->lock);
2172                ops->stop_tx(uport);
2173                ops->set_mctrl(uport, 0);
2174                ops->stop_rx(uport);
2175                spin_unlock_irq(&uport->lock);
2176
2177                /*
2178                 * Wait for the transmitter to empty.
2179                 */
2180                for (tries = 3; !ops->tx_empty(uport) && tries; tries--)
2181                        msleep(10);
2182                if (!tries)
2183                        dev_err(uport->dev, "%s: Unable to drain transmitter\n",
2184                                uport->name);
2185
2186                ops->shutdown(uport);
2187        }
2188
2189        /*
2190         * Disable the console device before suspending.
2191         */
2192        if (uart_console(uport))
2193                console_stop(uport->cons);
2194
2195        uart_change_pm(state, UART_PM_STATE_OFF);
2196unlock:
2197        mutex_unlock(&port->mutex);
2198
2199        return 0;
2200}
2201
2202int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
2203{
2204        struct uart_state *state = drv->state + uport->line;
2205        struct tty_port *port = &state->port;
2206        struct device *tty_dev;
2207        struct uart_match match = {uport, drv};
2208        struct ktermios termios;
2209
2210        mutex_lock(&port->mutex);
2211
2212        tty_dev = device_find_child(uport->dev, &match, serial_match_port);
2213        if (!uport->suspended && device_may_wakeup(tty_dev)) {
2214                if (irqd_is_wakeup_set(irq_get_irq_data((uport->irq))))
2215                        disable_irq_wake(uport->irq);
2216                put_device(tty_dev);
2217                mutex_unlock(&port->mutex);
2218                return 0;
2219        }
2220        put_device(tty_dev);
2221        uport->suspended = 0;
2222
2223        /*
2224         * Re-enable the console device after suspending.
2225         */
2226        if (uart_console(uport)) {
2227                /*
2228                 * First try to use the console cflag setting.
2229                 */
2230                memset(&termios, 0, sizeof(struct ktermios));
2231                termios.c_cflag = uport->cons->cflag;
2232
2233                /*
2234                 * If that's unset, use the tty termios setting.
2235                 */
2236                if (port->tty && termios.c_cflag == 0)
2237                        termios = port->tty->termios;
2238
2239                if (console_suspend_enabled)
2240                        uart_change_pm(state, UART_PM_STATE_ON);
2241                uport->ops->set_termios(uport, &termios, NULL);
2242                if (console_suspend_enabled)
2243                        console_start(uport->cons);
2244        }
2245
2246        if (tty_port_suspended(port)) {
2247                const struct uart_ops *ops = uport->ops;
2248                int ret;
2249
2250                uart_change_pm(state, UART_PM_STATE_ON);
2251                spin_lock_irq(&uport->lock);
2252                ops->set_mctrl(uport, 0);
2253                spin_unlock_irq(&uport->lock);
2254                if (console_suspend_enabled || !uart_console(uport)) {
2255                        /* Protected by port mutex for now */
2256                        struct tty_struct *tty = port->tty;
2257
2258                        ret = ops->startup(uport);
2259                        if (ret == 0) {
2260                                if (tty)
2261                                        uart_change_speed(tty, state, NULL);
2262                                spin_lock_irq(&uport->lock);
2263                                ops->set_mctrl(uport, uport->mctrl);
2264                                ops->start_tx(uport);
2265                                spin_unlock_irq(&uport->lock);
2266                                tty_port_set_initialized(port, 1);
2267                        } else {
2268                                /*
2269                                 * Failed to resume - maybe hardware went away?
2270                                 * Clear the "initialized" flag so we won't try
2271                                 * to call the low level drivers shutdown method.
2272                                 */
2273                                uart_shutdown(tty, state);
2274                        }
2275                }
2276
2277                tty_port_set_suspended(port, 0);
2278        }
2279
2280        mutex_unlock(&port->mutex);
2281
2282        return 0;
2283}
2284
2285static inline void
2286uart_report_port(struct uart_driver *drv, struct uart_port *port)
2287{
2288        char address[64];
2289
2290        switch (port->iotype) {
2291        case UPIO_PORT:
2292                snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase);
2293                break;
2294        case UPIO_HUB6:
2295                snprintf(address, sizeof(address),
2296                         "I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
2297                break;
2298        case UPIO_MEM:
2299        case UPIO_MEM16:
2300        case UPIO_MEM32:
2301        case UPIO_MEM32BE:
2302        case UPIO_AU:
2303        case UPIO_TSI:
2304                snprintf(address, sizeof(address),
2305                         "MMIO 0x%llx", (unsigned long long)port->mapbase);
2306                break;
2307        default:
2308                strlcpy(address, "*unknown*", sizeof(address));
2309                break;
2310        }
2311
2312        pr_info("%s%s%s at %s (irq = %d, base_baud = %d) is a %s\n",
2313               port->dev ? dev_name(port->dev) : "",
2314               port->dev ? ": " : "",
2315               port->name,
2316               address, port->irq, port->uartclk / 16, uart_type(port));
2317
2318        /* The magic multiplier feature is a bit obscure, so report it too.  */
2319        if (port->flags & UPF_MAGIC_MULTIPLIER)
2320                pr_info("%s%s%s extra baud rates supported: %d, %d",
2321                        port->dev ? dev_name(port->dev) : "",
2322                        port->dev ? ": " : "",
2323                        port->name,
2324                        port->uartclk / 8, port->uartclk / 4);
2325}
2326
2327static void
2328uart_configure_port(struct uart_driver *drv, struct uart_state *state,
2329                    struct uart_port *port)
2330{
2331        unsigned int flags;
2332
2333        /*
2334         * If there isn't a port here, don't do anything further.
2335         */
2336        if (!port->iobase && !port->mapbase && !port->membase)
2337                return;
2338
2339        /*
2340         * Now do the auto configuration stuff.  Note that config_port
2341         * is expected to claim the resources and map the port for us.
2342         */
2343        flags = 0;
2344        if (port->flags & UPF_AUTO_IRQ)
2345                flags |= UART_CONFIG_IRQ;
2346        if (port->flags & UPF_BOOT_AUTOCONF) {
2347                if (!(port->flags & UPF_FIXED_TYPE)) {
2348                        port->type = PORT_UNKNOWN;
2349                        flags |= UART_CONFIG_TYPE;
2350                }
2351                port->ops->config_port(port, flags);
2352        }
2353
2354        if (port->type != PORT_UNKNOWN) {
2355                unsigned long flags;
2356
2357                uart_report_port(drv, port);
2358
2359                /* Power up port for set_mctrl() */
2360                uart_change_pm(state, UART_PM_STATE_ON);
2361
2362                /*
2363                 * Ensure that the modem control lines are de-activated.
2364                 * keep the DTR setting that is set in uart_set_options()
2365                 * We probably don't need a spinlock around this, but
2366                 */
2367                spin_lock_irqsave(&port->lock, flags);
2368                port->ops->set_mctrl(port, port->mctrl & TIOCM_DTR);
2369                spin_unlock_irqrestore(&port->lock, flags);
2370
2371                /*
2372                 * If this driver supports console, and it hasn't been
2373                 * successfully registered yet, try to re-register it.
2374                 * It may be that the port was not available.
2375                 */
2376                if (port->cons && !(port->cons->flags & CON_ENABLED))
2377                        register_console(port->cons);
2378
2379                /*
2380                 * Power down all ports by default, except the
2381                 * console if we have one.
2382                 */
2383                if (!uart_console(port))
2384                        uart_change_pm(state, UART_PM_STATE_OFF);
2385        }
2386}
2387
2388#ifdef CONFIG_CONSOLE_POLL
2389
2390static int uart_poll_init(struct tty_driver *driver, int line, char *options)
2391{
2392        struct uart_driver *drv = driver->driver_state;
2393        struct uart_state *state = drv->state + line;
2394        struct tty_port *tport;
2395        struct uart_port *port;
2396        int baud = 9600;
2397        int bits = 8;
2398        int parity = 'n';
2399        int flow = 'n';
2400        int ret = 0;
2401
2402        tport = &state->port;
2403        mutex_lock(&tport->mutex);
2404
2405        port = uart_port_check(state);
2406        if (!port || !(port->ops->poll_get_char && port->ops->poll_put_char)) {
2407                ret = -1;
2408                goto out;
2409        }
2410
2411        if (port->ops->poll_init) {
2412                /*
2413                 * We don't set initialized as we only initialized the hw,
2414                 * e.g. state->xmit is still uninitialized.
2415                 */
2416                if (!tty_port_initialized(tport))
2417                        ret = port->ops->poll_init(port);
2418        }
2419
2420        if (!ret && options) {
2421                uart_parse_options(options, &baud, &parity, &bits, &flow);
2422                ret = uart_set_options(port, NULL, baud, parity, bits, flow);
2423        }
2424out:
2425        mutex_unlock(&tport->mutex);
2426        return ret;
2427}
2428
2429static int uart_poll_get_char(struct tty_driver *driver, int line)
2430{
2431        struct uart_driver *drv = driver->driver_state;
2432        struct uart_state *state = drv->state + line;
2433        struct uart_port *port;
2434        int ret = -1;
2435
2436        port = uart_port_ref(state);
2437        if (port) {
2438                ret = port->ops->poll_get_char(port);
2439                uart_port_deref(port);
2440        }
2441
2442        return ret;
2443}
2444
2445static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
2446{
2447        struct uart_driver *drv = driver->driver_state;
2448        struct uart_state *state = drv->state + line;
2449        struct uart_port *port;
2450
2451        port = uart_port_ref(state);
2452        if (!port)
2453                return;
2454
2455        if (ch == '\n')
2456                port->ops->poll_put_char(port, '\r');
2457        port->ops->poll_put_char(port, ch);
2458        uart_port_deref(port);
2459}
2460#endif
2461
2462static const struct tty_operations uart_ops = {
2463        .install        = uart_install,
2464        .open           = uart_open,
2465        .close          = uart_close,
2466        .write          = uart_write,
2467        .put_char       = uart_put_char,
2468        .flush_chars    = uart_flush_chars,
2469        .write_room     = uart_write_room,
2470        .chars_in_buffer= uart_chars_in_buffer,
2471        .flush_buffer   = uart_flush_buffer,
2472        .ioctl          = uart_ioctl,
2473        .throttle       = uart_throttle,
2474        .unthrottle     = uart_unthrottle,
2475        .send_xchar     = uart_send_xchar,
2476        .set_termios    = uart_set_termios,
2477        .set_ldisc      = uart_set_ldisc,
2478        .stop           = uart_stop,
2479        .start          = uart_start,
2480        .hangup         = uart_hangup,
2481        .break_ctl      = uart_break_ctl,
2482        .wait_until_sent= uart_wait_until_sent,
2483#ifdef CONFIG_PROC_FS
2484        .proc_show      = uart_proc_show,
2485#endif
2486        .tiocmget       = uart_tiocmget,
2487        .tiocmset       = uart_tiocmset,
2488        .set_serial     = uart_set_info_user,
2489        .get_serial     = uart_get_info_user,
2490        .get_icount     = uart_get_icount,
2491#ifdef CONFIG_CONSOLE_POLL
2492        .poll_init      = uart_poll_init,
2493        .poll_get_char  = uart_poll_get_char,
2494        .poll_put_char  = uart_poll_put_char,
2495#endif
2496};
2497
2498static const struct tty_port_operations uart_port_ops = {
2499        .carrier_raised = uart_carrier_raised,
2500        .dtr_rts        = uart_dtr_rts,
2501        .activate       = uart_port_activate,
2502        .shutdown       = uart_tty_port_shutdown,
2503};
2504
2505/**
2506 *      uart_register_driver - register a driver with the uart core layer
2507 *      @drv: low level driver structure
2508 *
2509 *      Register a uart driver with the core driver.  We in turn register
2510 *      with the tty layer, and initialise the core driver per-port state.
2511 *
2512 *      We have a proc file in /proc/tty/driver which is named after the
2513 *      normal driver.
2514 *
2515 *      drv->port should be NULL, and the per-port structures should be
2516 *      registered using uart_add_one_port after this call has succeeded.
2517 */
2518int uart_register_driver(struct uart_driver *drv)
2519{
2520        struct tty_driver *normal;
2521        int i, retval = -ENOMEM;
2522
2523        BUG_ON(drv->state);
2524
2525        /*
2526         * Maybe we should be using a slab cache for this, especially if
2527         * we have a large number of ports to handle.
2528         */
2529        drv->state = kcalloc(drv->nr, sizeof(struct uart_state), GFP_KERNEL);
2530        if (!drv->state)
2531                goto out;
2532
2533        normal = tty_alloc_driver(drv->nr, TTY_DRIVER_REAL_RAW |
2534                        TTY_DRIVER_DYNAMIC_DEV);
2535        if (IS_ERR(normal)) {
2536                retval = PTR_ERR(normal);
2537                goto out_kfree;
2538        }
2539
2540        drv->tty_driver = normal;
2541
2542        normal->driver_name     = drv->driver_name;
2543        normal->name            = drv->dev_name;
2544        normal->major           = drv->major;
2545        normal->minor_start     = drv->minor;
2546        normal->type            = TTY_DRIVER_TYPE_SERIAL;
2547        normal->subtype         = SERIAL_TYPE_NORMAL;
2548        normal->init_termios    = tty_std_termios;
2549        normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2550        normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
2551        normal->driver_state    = drv;
2552        tty_set_operations(normal, &uart_ops);
2553
2554        /*
2555         * Initialise the UART state(s).
2556         */
2557        for (i = 0; i < drv->nr; i++) {
2558                struct uart_state *state = drv->state + i;
2559                struct tty_port *port = &state->port;
2560
2561                tty_port_init(port);
2562                port->ops = &uart_port_ops;
2563        }
2564
2565        retval = tty_register_driver(normal);
2566        if (retval >= 0)
2567                return retval;
2568
2569        for (i = 0; i < drv->nr; i++)
2570                tty_port_destroy(&drv->state[i].port);
2571        tty_driver_kref_put(normal);
2572out_kfree:
2573        kfree(drv->state);
2574out:
2575        return retval;
2576}
2577
2578/**
2579 *      uart_unregister_driver - remove a driver from the uart core layer
2580 *      @drv: low level driver structure
2581 *
2582 *      Remove all references to a driver from the core driver.  The low
2583 *      level driver must have removed all its ports via the
2584 *      uart_remove_one_port() if it registered them with uart_add_one_port().
2585 *      (ie, drv->port == NULL)
2586 */
2587void uart_unregister_driver(struct uart_driver *drv)
2588{
2589        struct tty_driver *p = drv->tty_driver;
2590        unsigned int i;
2591
2592        tty_unregister_driver(p);
2593        tty_driver_kref_put(p);
2594        for (i = 0; i < drv->nr; i++)
2595                tty_port_destroy(&drv->state[i].port);
2596        kfree(drv->state);
2597        drv->state = NULL;
2598        drv->tty_driver = NULL;
2599}
2600
2601struct tty_driver *uart_console_device(struct console *co, int *index)
2602{
2603        struct uart_driver *p = co->data;
2604        *index = co->index;
2605        return p->tty_driver;
2606}
2607EXPORT_SYMBOL_GPL(uart_console_device);
2608
2609static ssize_t uartclk_show(struct device *dev,
2610        struct device_attribute *attr, char *buf)
2611{
2612        struct serial_struct tmp;
2613        struct tty_port *port = dev_get_drvdata(dev);
2614
2615        uart_get_info(port, &tmp);
2616        return sprintf(buf, "%d\n", tmp.baud_base * 16);
2617}
2618
2619static ssize_t type_show(struct device *dev,
2620        struct device_attribute *attr, char *buf)
2621{
2622        struct serial_struct tmp;
2623        struct tty_port *port = dev_get_drvdata(dev);
2624
2625        uart_get_info(port, &tmp);
2626        return sprintf(buf, "%d\n", tmp.type);
2627}
2628
2629static ssize_t line_show(struct device *dev,
2630        struct device_attribute *attr, char *buf)
2631{
2632        struct serial_struct tmp;
2633        struct tty_port *port = dev_get_drvdata(dev);
2634
2635        uart_get_info(port, &tmp);
2636        return sprintf(buf, "%d\n", tmp.line);
2637}
2638
2639static ssize_t port_show(struct device *dev,
2640        struct device_attribute *attr, char *buf)
2641{
2642        struct serial_struct tmp;
2643        struct tty_port *port = dev_get_drvdata(dev);
2644        unsigned long ioaddr;
2645
2646        uart_get_info(port, &tmp);
2647        ioaddr = tmp.port;
2648        if (HIGH_BITS_OFFSET)
2649                ioaddr |= (unsigned long)tmp.port_high << HIGH_BITS_OFFSET;
2650        return sprintf(buf, "0x%lX\n", ioaddr);
2651}
2652
2653static ssize_t irq_show(struct device *dev,
2654        struct device_attribute *attr, char *buf)
2655{
2656        struct serial_struct tmp;
2657        struct tty_port *port = dev_get_drvdata(dev);
2658
2659        uart_get_info(port, &tmp);
2660        return sprintf(buf, "%d\n", tmp.irq);
2661}
2662
2663static ssize_t flags_show(struct device *dev,
2664        struct device_attribute *attr, char *buf)
2665{
2666        struct serial_struct tmp;
2667        struct tty_port *port = dev_get_drvdata(dev);
2668
2669        uart_get_info(port, &tmp);
2670        return sprintf(buf, "0x%X\n", tmp.flags);
2671}
2672
2673static ssize_t xmit_fifo_size_show(struct device *dev,
2674        struct device_attribute *attr, char *buf)
2675{
2676        struct serial_struct tmp;
2677        struct tty_port *port = dev_get_drvdata(dev);
2678
2679        uart_get_info(port, &tmp);
2680        return sprintf(buf, "%d\n", tmp.xmit_fifo_size);
2681}
2682
2683static ssize_t close_delay_show(struct device *dev,
2684        struct device_attribute *attr, char *buf)
2685{
2686        struct serial_struct tmp;
2687        struct tty_port *port = dev_get_drvdata(dev);
2688
2689        uart_get_info(port, &tmp);
2690        return sprintf(buf, "%d\n", tmp.close_delay);
2691}
2692
2693static ssize_t closing_wait_show(struct device *dev,
2694        struct device_attribute *attr, char *buf)
2695{
2696        struct serial_struct tmp;
2697        struct tty_port *port = dev_get_drvdata(dev);
2698
2699        uart_get_info(port, &tmp);
2700        return sprintf(buf, "%d\n", tmp.closing_wait);
2701}
2702
2703static ssize_t custom_divisor_show(struct device *dev,
2704        struct device_attribute *attr, char *buf)
2705{
2706        struct serial_struct tmp;
2707        struct tty_port *port = dev_get_drvdata(dev);
2708
2709        uart_get_info(port, &tmp);
2710        return sprintf(buf, "%d\n", tmp.custom_divisor);
2711}
2712
2713static ssize_t io_type_show(struct device *dev,
2714        struct device_attribute *attr, char *buf)
2715{
2716        struct serial_struct tmp;
2717        struct tty_port *port = dev_get_drvdata(dev);
2718
2719        uart_get_info(port, &tmp);
2720        return sprintf(buf, "%d\n", tmp.io_type);
2721}
2722
2723static ssize_t iomem_base_show(struct device *dev,
2724        struct device_attribute *attr, char *buf)
2725{
2726        struct serial_struct tmp;
2727        struct tty_port *port = dev_get_drvdata(dev);
2728
2729        uart_get_info(port, &tmp);
2730        return sprintf(buf, "0x%lX\n", (unsigned long)tmp.iomem_base);
2731}
2732
2733static ssize_t iomem_reg_shift_show(struct device *dev,
2734        struct device_attribute *attr, char *buf)
2735{
2736        struct serial_struct tmp;
2737        struct tty_port *port = dev_get_drvdata(dev);
2738
2739        uart_get_info(port, &tmp);
2740        return sprintf(buf, "%d\n", tmp.iomem_reg_shift);
2741}
2742
2743static ssize_t console_show(struct device *dev,
2744        struct device_attribute *attr, char *buf)
2745{
2746        struct tty_port *port = dev_get_drvdata(dev);
2747        struct uart_state *state = container_of(port, struct uart_state, port);
2748        struct uart_port *uport;
2749        bool console = false;
2750
2751        mutex_lock(&port->mutex);
2752        uport = uart_port_check(state);
2753        if (uport)
2754                console = uart_console_enabled(uport);
2755        mutex_unlock(&port->mutex);
2756
2757        return sprintf(buf, "%c\n", console ? 'Y' : 'N');
2758}
2759
2760static ssize_t console_store(struct device *dev,
2761        struct device_attribute *attr, const char *buf, size_t count)
2762{
2763        struct tty_port *port = dev_get_drvdata(dev);
2764        struct uart_state *state = container_of(port, struct uart_state, port);
2765        struct uart_port *uport;
2766        bool oldconsole, newconsole;
2767        int ret;
2768
2769        ret = kstrtobool(buf, &newconsole);
2770        if (ret)
2771                return ret;
2772
2773        mutex_lock(&port->mutex);
2774        uport = uart_port_check(state);
2775        if (uport) {
2776                oldconsole = uart_console_enabled(uport);
2777                if (oldconsole && !newconsole) {
2778                        ret = unregister_console(uport->cons);
2779                } else if (!oldconsole && newconsole) {
2780                        if (uart_console(uport)) {
2781                                uport->console_reinit = 1;
2782                                register_console(uport->cons);
2783                        } else {
2784                                ret = -ENOENT;
2785                        }
2786                }
2787        } else {
2788                ret = -ENXIO;
2789        }
2790        mutex_unlock(&port->mutex);
2791
2792        return ret < 0 ? ret : count;
2793}
2794
2795static DEVICE_ATTR_RO(uartclk);
2796static DEVICE_ATTR_RO(type);
2797static DEVICE_ATTR_RO(line);
2798static DEVICE_ATTR_RO(port);
2799static DEVICE_ATTR_RO(irq);
2800static DEVICE_ATTR_RO(flags);
2801static DEVICE_ATTR_RO(xmit_fifo_size);
2802static DEVICE_ATTR_RO(close_delay);
2803static DEVICE_ATTR_RO(closing_wait);
2804static DEVICE_ATTR_RO(custom_divisor);
2805static DEVICE_ATTR_RO(io_type);
2806static DEVICE_ATTR_RO(iomem_base);
2807static DEVICE_ATTR_RO(iomem_reg_shift);
2808static DEVICE_ATTR_RW(console);
2809
2810static struct attribute *tty_dev_attrs[] = {
2811        &dev_attr_uartclk.attr,
2812        &dev_attr_type.attr,
2813        &dev_attr_line.attr,
2814        &dev_attr_port.attr,
2815        &dev_attr_irq.attr,
2816        &dev_attr_flags.attr,
2817        &dev_attr_xmit_fifo_size.attr,
2818        &dev_attr_close_delay.attr,
2819        &dev_attr_closing_wait.attr,
2820        &dev_attr_custom_divisor.attr,
2821        &dev_attr_io_type.attr,
2822        &dev_attr_iomem_base.attr,
2823        &dev_attr_iomem_reg_shift.attr,
2824        &dev_attr_console.attr,
2825        NULL
2826};
2827
2828static const struct attribute_group tty_dev_attr_group = {
2829        .attrs = tty_dev_attrs,
2830};
2831
2832/**
2833 *      uart_add_one_port - attach a driver-defined port structure
2834 *      @drv: pointer to the uart low level driver structure for this port
2835 *      @uport: uart port structure to use for this port.
2836 *
2837 *      Context: task context, might sleep
2838 *
2839 *      This allows the driver to register its own uart_port structure
2840 *      with the core driver.  The main purpose is to allow the low
2841 *      level uart drivers to expand uart_port, rather than having yet
2842 *      more levels of structures.
2843 */
2844int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
2845{
2846        struct uart_state *state;
2847        struct tty_port *port;
2848        int ret = 0;
2849        struct device *tty_dev;
2850        int num_groups;
2851
2852        if (uport->line >= drv->nr)
2853                return -EINVAL;
2854
2855        state = drv->state + uport->line;
2856        port = &state->port;
2857
2858        mutex_lock(&port_mutex);
2859        mutex_lock(&port->mutex);
2860        if (state->uart_port) {
2861                ret = -EINVAL;
2862                goto out;
2863        }
2864
2865        /* Link the port to the driver state table and vice versa */
2866        atomic_set(&state->refcount, 1);
2867        init_waitqueue_head(&state->remove_wait);
2868        state->uart_port = uport;
2869        uport->state = state;
2870
2871        state->pm_state = UART_PM_STATE_UNDEFINED;
2872        uport->cons = drv->cons;
2873        uport->minor = drv->tty_driver->minor_start + uport->line;
2874        uport->name = kasprintf(GFP_KERNEL, "%s%d", drv->dev_name,
2875                                drv->tty_driver->name_base + uport->line);
2876        if (!uport->name) {
2877                ret = -ENOMEM;
2878                goto out;
2879        }
2880
2881        /*
2882         * If this port is in use as a console then the spinlock is already
2883         * initialised.
2884         */
2885        if (!uart_console_enabled(uport))
2886                uart_port_spin_lock_init(uport);
2887
2888        if (uport->cons && uport->dev)
2889                of_console_check(uport->dev->of_node, uport->cons->name, uport->line);
2890
2891        tty_port_link_device(port, drv->tty_driver, uport->line);
2892        uart_configure_port(drv, state, uport);
2893
2894        port->console = uart_console(uport);
2895
2896        num_groups = 2;
2897        if (uport->attr_group)
2898                num_groups++;
2899
2900        uport->tty_groups = kcalloc(num_groups, sizeof(*uport->tty_groups),
2901                                    GFP_KERNEL);
2902        if (!uport->tty_groups) {
2903                ret = -ENOMEM;
2904                goto out;
2905        }
2906        uport->tty_groups[0] = &tty_dev_attr_group;
2907        if (uport->attr_group)
2908                uport->tty_groups[1] = uport->attr_group;
2909
2910        /*
2911         * Register the port whether it's detected or not.  This allows
2912         * setserial to be used to alter this port's parameters.
2913         */
2914        tty_dev = tty_port_register_device_attr_serdev(port, drv->tty_driver,
2915                        uport->line, uport->dev, port, uport->tty_groups);
2916        if (!IS_ERR(tty_dev)) {
2917                device_set_wakeup_capable(tty_dev, 1);
2918        } else {
2919                dev_err(uport->dev, "Cannot register tty device on line %d\n",
2920                       uport->line);
2921        }
2922
2923        /*
2924         * Ensure UPF_DEAD is not set.
2925         */
2926        uport->flags &= ~UPF_DEAD;
2927
2928 out:
2929        mutex_unlock(&port->mutex);
2930        mutex_unlock(&port_mutex);
2931
2932        return ret;
2933}
2934
2935/**
2936 *      uart_remove_one_port - detach a driver defined port structure
2937 *      @drv: pointer to the uart low level driver structure for this port
2938 *      @uport: uart port structure for this port
2939 *
2940 *      Context: task context, might sleep
2941 *
2942 *      This unhooks (and hangs up) the specified port structure from the
2943 *      core driver.  No further calls will be made to the low-level code
2944 *      for this port.
2945 */
2946int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
2947{
2948        struct uart_state *state = drv->state + uport->line;
2949        struct tty_port *port = &state->port;
2950        struct uart_port *uart_port;
2951        struct tty_struct *tty;
2952        int ret = 0;
2953
2954        mutex_lock(&port_mutex);
2955
2956        /*
2957         * Mark the port "dead" - this prevents any opens from
2958         * succeeding while we shut down the port.
2959         */
2960        mutex_lock(&port->mutex);
2961        uart_port = uart_port_check(state);
2962        if (uart_port != uport)
2963                dev_alert(uport->dev, "Removing wrong port: %p != %p\n",
2964                          uart_port, uport);
2965
2966        if (!uart_port) {
2967                mutex_unlock(&port->mutex);
2968                ret = -EINVAL;
2969                goto out;
2970        }
2971        uport->flags |= UPF_DEAD;
2972        mutex_unlock(&port->mutex);
2973
2974        /*
2975         * Remove the devices from the tty layer
2976         */
2977        tty_port_unregister_device(port, drv->tty_driver, uport->line);
2978
2979        tty = tty_port_tty_get(port);
2980        if (tty) {
2981                tty_vhangup(port->tty);
2982                tty_kref_put(tty);
2983        }
2984
2985        /*
2986         * If the port is used as a console, unregister it
2987         */
2988        if (uart_console(uport))
2989                unregister_console(uport->cons);
2990
2991        /*
2992         * Free the port IO and memory resources, if any.
2993         */
2994        if (uport->type != PORT_UNKNOWN && uport->ops->release_port)
2995                uport->ops->release_port(uport);
2996        kfree(uport->tty_groups);
2997        kfree(uport->name);
2998
2999        /*
3000         * Indicate that there isn't a port here anymore.
3001         */
3002        uport->type = PORT_UNKNOWN;
3003
3004        mutex_lock(&port->mutex);
3005        WARN_ON(atomic_dec_return(&state->refcount) < 0);
3006        wait_event(state->remove_wait, !atomic_read(&state->refcount));
3007        state->uart_port = NULL;
3008        mutex_unlock(&port->mutex);
3009out:
3010        mutex_unlock(&port_mutex);
3011
3012        return ret;
3013}
3014
3015/*
3016 *      Are the two ports equivalent?
3017 */
3018bool uart_match_port(const struct uart_port *port1,
3019                const struct uart_port *port2)
3020{
3021        if (port1->iotype != port2->iotype)
3022                return false;
3023
3024        switch (port1->iotype) {
3025        case UPIO_PORT:
3026                return port1->iobase == port2->iobase;
3027        case UPIO_HUB6:
3028                return port1->iobase == port2->iobase &&
3029                       port1->hub6   == port2->hub6;
3030        case UPIO_MEM:
3031        case UPIO_MEM16:
3032        case UPIO_MEM32:
3033        case UPIO_MEM32BE:
3034        case UPIO_AU:
3035        case UPIO_TSI:
3036                return port1->mapbase == port2->mapbase;
3037        }
3038
3039        return false;
3040}
3041EXPORT_SYMBOL(uart_match_port);
3042
3043/**
3044 *      uart_handle_dcd_change - handle a change of carrier detect state
3045 *      @uport: uart_port structure for the open port
3046 *      @status: new carrier detect status, nonzero if active
3047 *
3048 *      Caller must hold uport->lock
3049 */
3050void uart_handle_dcd_change(struct uart_port *uport, unsigned int status)
3051{
3052        struct tty_port *port = &uport->state->port;
3053        struct tty_struct *tty = port->tty;
3054        struct tty_ldisc *ld;
3055
3056        lockdep_assert_held_once(&uport->lock);
3057
3058        if (tty) {
3059                ld = tty_ldisc_ref(tty);
3060                if (ld) {
3061                        if (ld->ops->dcd_change)
3062                                ld->ops->dcd_change(tty, status);
3063                        tty_ldisc_deref(ld);
3064                }
3065        }
3066
3067        uport->icount.dcd++;
3068
3069        if (uart_dcd_enabled(uport)) {
3070                if (status)
3071                        wake_up_interruptible(&port->open_wait);
3072                else if (tty)
3073                        tty_hangup(tty);
3074        }
3075}
3076EXPORT_SYMBOL_GPL(uart_handle_dcd_change);
3077
3078/**
3079 *      uart_handle_cts_change - handle a change of clear-to-send state
3080 *      @uport: uart_port structure for the open port
3081 *      @status: new clear to send status, nonzero if active
3082 *
3083 *      Caller must hold uport->lock
3084 */
3085void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
3086{
3087        lockdep_assert_held_once(&uport->lock);
3088
3089        uport->icount.cts++;
3090
3091        if (uart_softcts_mode(uport)) {
3092                if (uport->hw_stopped) {
3093                        if (status) {
3094                                uport->hw_stopped = 0;
3095                                uport->ops->start_tx(uport);
3096                                uart_write_wakeup(uport);
3097                        }
3098                } else {
3099                        if (!status) {
3100                                uport->hw_stopped = 1;
3101                                uport->ops->stop_tx(uport);
3102                        }
3103                }
3104
3105        }
3106}
3107EXPORT_SYMBOL_GPL(uart_handle_cts_change);
3108
3109/**
3110 * uart_insert_char - push a char to the uart layer
3111 *
3112 * User is responsible to call tty_flip_buffer_push when they are done with
3113 * insertion.
3114 *
3115 * @port: corresponding port
3116 * @status: state of the serial port RX buffer (LSR for 8250)
3117 * @overrun: mask of overrun bits in @status
3118 * @ch: character to push
3119 * @flag: flag for the character (see TTY_NORMAL and friends)
3120 */
3121void uart_insert_char(struct uart_port *port, unsigned int status,
3122                 unsigned int overrun, unsigned int ch, unsigned int flag)
3123{
3124        struct tty_port *tport = &port->state->port;
3125
3126        if ((status & port->ignore_status_mask & ~overrun) == 0)
3127                if (tty_insert_flip_char(tport, ch, flag) == 0)
3128                        ++port->icount.buf_overrun;
3129
3130        /*
3131         * Overrun is special.  Since it's reported immediately,
3132         * it doesn't affect the current character.
3133         */
3134        if (status & ~port->ignore_status_mask & overrun)
3135                if (tty_insert_flip_char(tport, 0, TTY_OVERRUN) == 0)
3136                        ++port->icount.buf_overrun;
3137}
3138EXPORT_SYMBOL_GPL(uart_insert_char);
3139
3140#ifdef CONFIG_MAGIC_SYSRQ_SERIAL
3141static const char sysrq_toggle_seq[] = CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE;
3142
3143static void uart_sysrq_on(struct work_struct *w)
3144{
3145        int sysrq_toggle_seq_len = strlen(sysrq_toggle_seq);
3146
3147        sysrq_toggle_support(1);
3148        pr_info("SysRq is enabled by magic sequence '%*pE' on serial\n",
3149                sysrq_toggle_seq_len, sysrq_toggle_seq);
3150}
3151static DECLARE_WORK(sysrq_enable_work, uart_sysrq_on);
3152
3153/**
3154 *      uart_try_toggle_sysrq - Enables SysRq from serial line
3155 *      @port: uart_port structure where char(s) after BREAK met
3156 *      @ch: new character in the sequence after received BREAK
3157 *
3158 *      Enables magic SysRq when the required sequence is met on port
3159 *      (see CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE).
3160 *
3161 *      Returns false if @ch is out of enabling sequence and should be
3162 *      handled some other way, true if @ch was consumed.
3163 */
3164bool uart_try_toggle_sysrq(struct uart_port *port, unsigned int ch)
3165{
3166        int sysrq_toggle_seq_len = strlen(sysrq_toggle_seq);
3167
3168        if (!sysrq_toggle_seq_len)
3169                return false;
3170
3171        BUILD_BUG_ON(ARRAY_SIZE(sysrq_toggle_seq) >= U8_MAX);
3172        if (sysrq_toggle_seq[port->sysrq_seq] != ch) {
3173                port->sysrq_seq = 0;
3174                return false;
3175        }
3176
3177        if (++port->sysrq_seq < sysrq_toggle_seq_len) {
3178                port->sysrq = jiffies + SYSRQ_TIMEOUT;
3179                return true;
3180        }
3181
3182        schedule_work(&sysrq_enable_work);
3183
3184        port->sysrq = 0;
3185        return true;
3186}
3187EXPORT_SYMBOL_GPL(uart_try_toggle_sysrq);
3188#endif
3189
3190EXPORT_SYMBOL(uart_write_wakeup);
3191EXPORT_SYMBOL(uart_register_driver);
3192EXPORT_SYMBOL(uart_unregister_driver);
3193EXPORT_SYMBOL(uart_suspend_port);
3194EXPORT_SYMBOL(uart_resume_port);
3195EXPORT_SYMBOL(uart_add_one_port);
3196EXPORT_SYMBOL(uart_remove_one_port);
3197
3198/**
3199 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3200 * @port: uart device's target port
3201 *
3202 * This function implements the device tree binding described in
3203 * Documentation/devicetree/bindings/serial/rs485.txt.
3204 */
3205int uart_get_rs485_mode(struct uart_port *port)
3206{
3207        struct serial_rs485 *rs485conf = &port->rs485;
3208        struct device *dev = port->dev;
3209        u32 rs485_delay[2];
3210        int ret;
3211
3212        ret = device_property_read_u32_array(dev, "rs485-rts-delay",
3213                                             rs485_delay, 2);
3214        if (!ret) {
3215                rs485conf->delay_rts_before_send = rs485_delay[0];
3216                rs485conf->delay_rts_after_send = rs485_delay[1];
3217        } else {
3218                rs485conf->delay_rts_before_send = 0;
3219                rs485conf->delay_rts_after_send = 0;
3220        }
3221
3222        /*
3223         * Clear full-duplex and enabled flags, set RTS polarity to active high
3224         * to get to a defined state with the following properties:
3225         */
3226        rs485conf->flags &= ~(SER_RS485_RX_DURING_TX | SER_RS485_ENABLED |
3227                              SER_RS485_TERMINATE_BUS |
3228                              SER_RS485_RTS_AFTER_SEND);
3229        rs485conf->flags |= SER_RS485_RTS_ON_SEND;
3230
3231        if (device_property_read_bool(dev, "rs485-rx-during-tx"))
3232                rs485conf->flags |= SER_RS485_RX_DURING_TX;
3233
3234        if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time"))
3235                rs485conf->flags |= SER_RS485_ENABLED;
3236
3237        if (device_property_read_bool(dev, "rs485-rts-active-low")) {
3238                rs485conf->flags &= ~SER_RS485_RTS_ON_SEND;
3239                rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
3240        }
3241
3242        /*
3243         * Disabling termination by default is the safe choice:  Else if many
3244         * bus participants enable it, no communication is possible at all.
3245         * Works fine for short cables and users may enable for longer cables.
3246         */
3247        port->rs485_term_gpio = devm_gpiod_get_optional(dev, "rs485-term",
3248                                                        GPIOD_OUT_LOW);
3249        if (IS_ERR(port->rs485_term_gpio)) {
3250                ret = PTR_ERR(port->rs485_term_gpio);
3251                port->rs485_term_gpio = NULL;
3252                return dev_err_probe(dev, ret, "Cannot get rs485-term-gpios\n");
3253        }
3254
3255        return 0;
3256}
3257EXPORT_SYMBOL_GPL(uart_get_rs485_mode);
3258
3259MODULE_DESCRIPTION("Serial driver core");
3260MODULE_LICENSE("GPL");
3261