linux/drivers/tty/serial/serial_core.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/char/core.c
   3 *
   4 *  Driver core for serial ports
   5 *
   6 *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
   7 *
   8 *  Copyright 1999 ARM Limited
   9 *  Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2 of the License, or
  14 * (at your option) any later version.
  15 *
  16 * This program is distributed in the hope that it will be useful,
  17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19 * GNU General Public License for more details.
  20 *
  21 * You should have received a copy of the GNU General Public License
  22 * along with this program; if not, write to the Free Software
  23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24 */
  25#include <linux/module.h>
  26#include <linux/tty.h>
  27#include <linux/slab.h>
  28#include <linux/init.h>
  29#include <linux/console.h>
  30#include <linux/proc_fs.h>
  31#include <linux/seq_file.h>
  32#include <linux/device.h>
  33#include <linux/serial.h> /* for serial_state and serial_icounter_struct */
  34#include <linux/serial_core.h>
  35#include <linux/delay.h>
  36#include <linux/mutex.h>
  37
  38#include <asm/irq.h>
  39#include <asm/uaccess.h>
  40
  41/*
  42 * This is used to lock changes in serial line configuration.
  43 */
  44static DEFINE_MUTEX(port_mutex);
  45
  46/*
  47 * lockdep: port->lock is initialized in two places, but we
  48 *          want only one lock-class:
  49 */
  50static struct lock_class_key port_lock_key;
  51
  52#define HIGH_BITS_OFFSET        ((sizeof(long)-sizeof(int))*8)
  53
  54#ifdef CONFIG_SERIAL_CORE_CONSOLE
  55#define uart_console(port)      ((port)->cons && (port)->cons->index == (port)->line)
  56#else
  57#define uart_console(port)      (0)
  58#endif
  59
  60static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
  61                                        struct ktermios *old_termios);
  62static void __uart_wait_until_sent(struct uart_port *port, int timeout);
  63static void uart_change_pm(struct uart_state *state, int pm_state);
  64
  65/*
  66 * This routine is used by the interrupt handler to schedule processing in
  67 * the software interrupt portion of the driver.
  68 */
  69void uart_write_wakeup(struct uart_port *port)
  70{
  71        struct uart_state *state = port->state;
  72        /*
  73         * This means you called this function _after_ the port was
  74         * closed.  No cookie for you.
  75         */
  76        BUG_ON(!state);
  77        tasklet_schedule(&state->tlet);
  78}
  79
  80static void uart_stop(struct tty_struct *tty)
  81{
  82        struct uart_state *state = tty->driver_data;
  83        struct uart_port *port = state->uart_port;
  84        unsigned long flags;
  85
  86        spin_lock_irqsave(&port->lock, flags);
  87        port->ops->stop_tx(port);
  88        spin_unlock_irqrestore(&port->lock, flags);
  89}
  90
  91static void __uart_start(struct tty_struct *tty)
  92{
  93        struct uart_state *state = tty->driver_data;
  94        struct uart_port *port = state->uart_port;
  95
  96        if (!uart_circ_empty(&state->xmit) && state->xmit.buf &&
  97            !tty->stopped && !tty->hw_stopped)
  98                port->ops->start_tx(port);
  99}
 100
 101static void uart_start(struct tty_struct *tty)
 102{
 103        struct uart_state *state = tty->driver_data;
 104        struct uart_port *port = state->uart_port;
 105        unsigned long flags;
 106
 107        spin_lock_irqsave(&port->lock, flags);
 108        __uart_start(tty);
 109        spin_unlock_irqrestore(&port->lock, flags);
 110}
 111
 112static void uart_tasklet_action(unsigned long data)
 113{
 114        struct uart_state *state = (struct uart_state *)data;
 115        tty_wakeup(state->port.tty);
 116}
 117
 118static inline void
 119uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)
 120{
 121        unsigned long flags;
 122        unsigned int old;
 123
 124        spin_lock_irqsave(&port->lock, flags);
 125        old = port->mctrl;
 126        port->mctrl = (old & ~clear) | set;
 127        if (old != port->mctrl)
 128                port->ops->set_mctrl(port, port->mctrl);
 129        spin_unlock_irqrestore(&port->lock, flags);
 130}
 131
 132#define uart_set_mctrl(port, set)       uart_update_mctrl(port, set, 0)
 133#define uart_clear_mctrl(port, clear)   uart_update_mctrl(port, 0, clear)
 134
 135/*
 136 * Startup the port.  This will be called once per open.  All calls
 137 * will be serialised by the per-port mutex.
 138 */
 139static int uart_startup(struct tty_struct *tty, struct uart_state *state, int init_hw)
 140{
 141        struct uart_port *uport = state->uart_port;
 142        struct tty_port *port = &state->port;
 143        unsigned long page;
 144        int retval = 0;
 145
 146        if (port->flags & ASYNC_INITIALIZED)
 147                return 0;
 148
 149        /*
 150         * Set the TTY IO error marker - we will only clear this
 151         * once we have successfully opened the port.  Also set
 152         * up the tty->alt_speed kludge
 153         */
 154        set_bit(TTY_IO_ERROR, &tty->flags);
 155
 156        if (uport->type == PORT_UNKNOWN)
 157                return 0;
 158
 159        /*
 160         * Initialise and allocate the transmit and temporary
 161         * buffer.
 162         */
 163        if (!state->xmit.buf) {
 164                /* This is protected by the per port mutex */
 165                page = get_zeroed_page(GFP_KERNEL);
 166                if (!page)
 167                        return -ENOMEM;
 168
 169                state->xmit.buf = (unsigned char *) page;
 170                uart_circ_clear(&state->xmit);
 171        }
 172
 173        retval = uport->ops->startup(uport);
 174        if (retval == 0) {
 175                if (init_hw) {
 176                        /*
 177                         * Initialise the hardware port settings.
 178                         */
 179                        uart_change_speed(tty, state, NULL);
 180
 181                        /*
 182                         * Setup the RTS and DTR signals once the
 183                         * port is open and ready to respond.
 184                         */
 185                        if (tty->termios->c_cflag & CBAUD)
 186                                uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
 187                }
 188
 189                if (port->flags & ASYNC_CTS_FLOW) {
 190                        spin_lock_irq(&uport->lock);
 191                        if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
 192                                tty->hw_stopped = 1;
 193                        spin_unlock_irq(&uport->lock);
 194                }
 195
 196                set_bit(ASYNCB_INITIALIZED, &port->flags);
 197
 198                clear_bit(TTY_IO_ERROR, &tty->flags);
 199        }
 200
 201        if (retval && capable(CAP_SYS_ADMIN))
 202                retval = 0;
 203
 204        return retval;
 205}
 206
 207/*
 208 * This routine will shutdown a serial port; interrupts are disabled, and
 209 * DTR is dropped if the hangup on close termio flag is on.  Calls to
 210 * uart_shutdown are serialised by the per-port semaphore.
 211 */
 212static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)
 213{
 214        struct uart_port *uport = state->uart_port;
 215        struct tty_port *port = &state->port;
 216
 217        /*
 218         * Set the TTY IO error marker
 219         */
 220        if (tty)
 221                set_bit(TTY_IO_ERROR, &tty->flags);
 222
 223        if (test_and_clear_bit(ASYNCB_INITIALIZED, &port->flags)) {
 224                /*
 225                 * Turn off DTR and RTS early.
 226                 */
 227                if (!tty || (tty->termios->c_cflag & HUPCL))
 228                        uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
 229
 230                /*
 231                 * clear delta_msr_wait queue to avoid mem leaks: we may free
 232                 * the irq here so the queue might never be woken up.  Note
 233                 * that we won't end up waiting on delta_msr_wait again since
 234                 * any outstanding file descriptors should be pointing at
 235                 * hung_up_tty_fops now.
 236                 */
 237                wake_up_interruptible(&port->delta_msr_wait);
 238
 239                /*
 240                 * Free the IRQ and disable the port.
 241                 */
 242                uport->ops->shutdown(uport);
 243
 244                /*
 245                 * Ensure that the IRQ handler isn't running on another CPU.
 246                 */
 247                synchronize_irq(uport->irq);
 248        }
 249
 250        /*
 251         * kill off our tasklet
 252         */
 253        tasklet_kill(&state->tlet);
 254
 255        /*
 256         * Free the transmit buffer page.
 257         */
 258        if (state->xmit.buf) {
 259                free_page((unsigned long)state->xmit.buf);
 260                state->xmit.buf = NULL;
 261        }
 262}
 263
 264/**
 265 *      uart_update_timeout - update per-port FIFO timeout.
 266 *      @port:  uart_port structure describing the port
 267 *      @cflag: termios cflag value
 268 *      @baud:  speed of the port
 269 *
 270 *      Set the port FIFO timeout value.  The @cflag value should
 271 *      reflect the actual hardware settings.
 272 */
 273void
 274uart_update_timeout(struct uart_port *port, unsigned int cflag,
 275                    unsigned int baud)
 276{
 277        unsigned int bits;
 278
 279        /* byte size and parity */
 280        switch (cflag & CSIZE) {
 281        case CS5:
 282                bits = 7;
 283                break;
 284        case CS6:
 285                bits = 8;
 286                break;
 287        case CS7:
 288                bits = 9;
 289                break;
 290        default:
 291                bits = 10;
 292                break; /* CS8 */
 293        }
 294
 295        if (cflag & CSTOPB)
 296                bits++;
 297        if (cflag & PARENB)
 298                bits++;
 299
 300        /*
 301         * The total number of bits to be transmitted in the fifo.
 302         */
 303        bits = bits * port->fifosize;
 304
 305        /*
 306         * Figure the timeout to send the above number of bits.
 307         * Add .02 seconds of slop
 308         */
 309        port->timeout = (HZ * bits) / baud + HZ/50;
 310}
 311
 312EXPORT_SYMBOL(uart_update_timeout);
 313
 314/**
 315 *      uart_get_baud_rate - return baud rate for a particular port
 316 *      @port: uart_port structure describing the port in question.
 317 *      @termios: desired termios settings.
 318 *      @old: old termios (or NULL)
 319 *      @min: minimum acceptable baud rate
 320 *      @max: maximum acceptable baud rate
 321 *
 322 *      Decode the termios structure into a numeric baud rate,
 323 *      taking account of the magic 38400 baud rate (with spd_*
 324 *      flags), and mapping the %B0 rate to 9600 baud.
 325 *
 326 *      If the new baud rate is invalid, try the old termios setting.
 327 *      If it's still invalid, we try 9600 baud.
 328 *
 329 *      Update the @termios structure to reflect the baud rate
 330 *      we're actually going to be using. Don't do this for the case
 331 *      where B0 is requested ("hang up").
 332 */
 333unsigned int
 334uart_get_baud_rate(struct uart_port *port, struct ktermios *termios,
 335                   struct ktermios *old, unsigned int min, unsigned int max)
 336{
 337        unsigned int try, baud, altbaud = 38400;
 338        int hung_up = 0;
 339        upf_t flags = port->flags & UPF_SPD_MASK;
 340
 341        if (flags == UPF_SPD_HI)
 342                altbaud = 57600;
 343        else if (flags == UPF_SPD_VHI)
 344                altbaud = 115200;
 345        else if (flags == UPF_SPD_SHI)
 346                altbaud = 230400;
 347        else if (flags == UPF_SPD_WARP)
 348                altbaud = 460800;
 349
 350        for (try = 0; try < 2; try++) {
 351                baud = tty_termios_baud_rate(termios);
 352
 353                /*
 354                 * The spd_hi, spd_vhi, spd_shi, spd_warp kludge...
 355                 * Die! Die! Die!
 356                 */
 357                if (baud == 38400)
 358                        baud = altbaud;
 359
 360                /*
 361                 * Special case: B0 rate.
 362                 */
 363                if (baud == 0) {
 364                        hung_up = 1;
 365                        baud = 9600;
 366                }
 367
 368                if (baud >= min && baud <= max)
 369                        return baud;
 370
 371                /*
 372                 * Oops, the quotient was zero.  Try again with
 373                 * the old baud rate if possible.
 374                 */
 375                termios->c_cflag &= ~CBAUD;
 376                if (old) {
 377                        baud = tty_termios_baud_rate(old);
 378                        if (!hung_up)
 379                                tty_termios_encode_baud_rate(termios,
 380                                                                baud, baud);
 381                        old = NULL;
 382                        continue;
 383                }
 384
 385                /*
 386                 * As a last resort, if the range cannot be met then clip to
 387                 * the nearest chip supported rate.
 388                 */
 389                if (!hung_up) {
 390                        if (baud <= min)
 391                                tty_termios_encode_baud_rate(termios,
 392                                                        min + 1, min + 1);
 393                        else
 394                                tty_termios_encode_baud_rate(termios,
 395                                                        max - 1, max - 1);
 396                }
 397        }
 398        /* Should never happen */
 399        WARN_ON(1);
 400        return 0;
 401}
 402
 403EXPORT_SYMBOL(uart_get_baud_rate);
 404
 405/**
 406 *      uart_get_divisor - return uart clock divisor
 407 *      @port: uart_port structure describing the port.
 408 *      @baud: desired baud rate
 409 *
 410 *      Calculate the uart clock divisor for the port.
 411 */
 412unsigned int
 413uart_get_divisor(struct uart_port *port, unsigned int baud)
 414{
 415        unsigned int quot;
 416
 417        /*
 418         * Old custom speed handling.
 419         */
 420        if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
 421                quot = port->custom_divisor;
 422        else
 423                quot = (port->uartclk + (8 * baud)) / (16 * baud);
 424
 425        return quot;
 426}
 427
 428EXPORT_SYMBOL(uart_get_divisor);
 429
 430/* FIXME: Consistent locking policy */
 431static void uart_change_speed(struct tty_struct *tty, struct uart_state *state,
 432                                        struct ktermios *old_termios)
 433{
 434        struct tty_port *port = &state->port;
 435        struct uart_port *uport = state->uart_port;
 436        struct ktermios *termios;
 437
 438        /*
 439         * If we have no tty, termios, or the port does not exist,
 440         * then we can't set the parameters for this port.
 441         */
 442        if (!tty || !tty->termios || uport->type == PORT_UNKNOWN)
 443                return;
 444
 445        termios = tty->termios;
 446
 447        /*
 448         * Set flags based on termios cflag
 449         */
 450        if (termios->c_cflag & CRTSCTS)
 451                set_bit(ASYNCB_CTS_FLOW, &port->flags);
 452        else
 453                clear_bit(ASYNCB_CTS_FLOW, &port->flags);
 454
 455        if (termios->c_cflag & CLOCAL)
 456                clear_bit(ASYNCB_CHECK_CD, &port->flags);
 457        else
 458                set_bit(ASYNCB_CHECK_CD, &port->flags);
 459
 460        uport->ops->set_termios(uport, termios, old_termios);
 461}
 462
 463static inline int __uart_put_char(struct uart_port *port,
 464                                struct circ_buf *circ, unsigned char c)
 465{
 466        unsigned long flags;
 467        int ret = 0;
 468
 469        if (!circ->buf)
 470                return 0;
 471
 472        spin_lock_irqsave(&port->lock, flags);
 473        if (uart_circ_chars_free(circ) != 0) {
 474                circ->buf[circ->head] = c;
 475                circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1);
 476                ret = 1;
 477        }
 478        spin_unlock_irqrestore(&port->lock, flags);
 479        return ret;
 480}
 481
 482static int uart_put_char(struct tty_struct *tty, unsigned char ch)
 483{
 484        struct uart_state *state = tty->driver_data;
 485
 486        return __uart_put_char(state->uart_port, &state->xmit, ch);
 487}
 488
 489static void uart_flush_chars(struct tty_struct *tty)
 490{
 491        uart_start(tty);
 492}
 493
 494static int uart_write(struct tty_struct *tty,
 495                                        const unsigned char *buf, int count)
 496{
 497        struct uart_state *state = tty->driver_data;
 498        struct uart_port *port;
 499        struct circ_buf *circ;
 500        unsigned long flags;
 501        int c, ret = 0;
 502
 503        /*
 504         * This means you called this function _after_ the port was
 505         * closed.  No cookie for you.
 506         */
 507        if (!state) {
 508                WARN_ON(1);
 509                return -EL3HLT;
 510        }
 511
 512        port = state->uart_port;
 513        circ = &state->xmit;
 514
 515        if (!circ->buf)
 516                return 0;
 517
 518        spin_lock_irqsave(&port->lock, flags);
 519        while (1) {
 520                c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
 521                if (count < c)
 522                        c = count;
 523                if (c <= 0)
 524                        break;
 525                memcpy(circ->buf + circ->head, buf, c);
 526                circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
 527                buf += c;
 528                count -= c;
 529                ret += c;
 530        }
 531        spin_unlock_irqrestore(&port->lock, flags);
 532
 533        uart_start(tty);
 534        return ret;
 535}
 536
 537static int uart_write_room(struct tty_struct *tty)
 538{
 539        struct uart_state *state = tty->driver_data;
 540        unsigned long flags;
 541        int ret;
 542
 543        spin_lock_irqsave(&state->uart_port->lock, flags);
 544        ret = uart_circ_chars_free(&state->xmit);
 545        spin_unlock_irqrestore(&state->uart_port->lock, flags);
 546        return ret;
 547}
 548
 549static int uart_chars_in_buffer(struct tty_struct *tty)
 550{
 551        struct uart_state *state = tty->driver_data;
 552        unsigned long flags;
 553        int ret;
 554
 555        spin_lock_irqsave(&state->uart_port->lock, flags);
 556        ret = uart_circ_chars_pending(&state->xmit);
 557        spin_unlock_irqrestore(&state->uart_port->lock, flags);
 558        return ret;
 559}
 560
 561static void uart_flush_buffer(struct tty_struct *tty)
 562{
 563        struct uart_state *state = tty->driver_data;
 564        struct uart_port *port;
 565        unsigned long flags;
 566
 567        /*
 568         * This means you called this function _after_ the port was
 569         * closed.  No cookie for you.
 570         */
 571        if (!state) {
 572                WARN_ON(1);
 573                return;
 574        }
 575
 576        port = state->uart_port;
 577        pr_debug("uart_flush_buffer(%d) called\n", tty->index);
 578
 579        spin_lock_irqsave(&port->lock, flags);
 580        uart_circ_clear(&state->xmit);
 581        if (port->ops->flush_buffer)
 582                port->ops->flush_buffer(port);
 583        spin_unlock_irqrestore(&port->lock, flags);
 584        tty_wakeup(tty);
 585}
 586
 587/*
 588 * This function is used to send a high-priority XON/XOFF character to
 589 * the device
 590 */
 591static void uart_send_xchar(struct tty_struct *tty, char ch)
 592{
 593        struct uart_state *state = tty->driver_data;
 594        struct uart_port *port = state->uart_port;
 595        unsigned long flags;
 596
 597        if (port->ops->send_xchar)
 598                port->ops->send_xchar(port, ch);
 599        else {
 600                port->x_char = ch;
 601                if (ch) {
 602                        spin_lock_irqsave(&port->lock, flags);
 603                        port->ops->start_tx(port);
 604                        spin_unlock_irqrestore(&port->lock, flags);
 605                }
 606        }
 607}
 608
 609static void uart_throttle(struct tty_struct *tty)
 610{
 611        struct uart_state *state = tty->driver_data;
 612
 613        if (I_IXOFF(tty))
 614                uart_send_xchar(tty, STOP_CHAR(tty));
 615
 616        if (tty->termios->c_cflag & CRTSCTS)
 617                uart_clear_mctrl(state->uart_port, TIOCM_RTS);
 618}
 619
 620static void uart_unthrottle(struct tty_struct *tty)
 621{
 622        struct uart_state *state = tty->driver_data;
 623        struct uart_port *port = state->uart_port;
 624
 625        if (I_IXOFF(tty)) {
 626                if (port->x_char)
 627                        port->x_char = 0;
 628                else
 629                        uart_send_xchar(tty, START_CHAR(tty));
 630        }
 631
 632        if (tty->termios->c_cflag & CRTSCTS)
 633                uart_set_mctrl(port, TIOCM_RTS);
 634}
 635
 636static int uart_get_info(struct uart_state *state,
 637                         struct serial_struct __user *retinfo)
 638{
 639        struct uart_port *uport = state->uart_port;
 640        struct tty_port *port = &state->port;
 641        struct serial_struct tmp;
 642
 643        memset(&tmp, 0, sizeof(tmp));
 644
 645        /* Ensure the state we copy is consistent and no hardware changes
 646           occur as we go */
 647        mutex_lock(&port->mutex);
 648
 649        tmp.type            = uport->type;
 650        tmp.line            = uport->line;
 651        tmp.port            = uport->iobase;
 652        if (HIGH_BITS_OFFSET)
 653                tmp.port_high = (long) uport->iobase >> HIGH_BITS_OFFSET;
 654        tmp.irq             = uport->irq;
 655        tmp.flags           = uport->flags;
 656        tmp.xmit_fifo_size  = uport->fifosize;
 657        tmp.baud_base       = uport->uartclk / 16;
 658        tmp.close_delay     = port->close_delay / 10;
 659        tmp.closing_wait    = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 660                                ASYNC_CLOSING_WAIT_NONE :
 661                                port->closing_wait / 10;
 662        tmp.custom_divisor  = uport->custom_divisor;
 663        tmp.hub6            = uport->hub6;
 664        tmp.io_type         = uport->iotype;
 665        tmp.iomem_reg_shift = uport->regshift;
 666        tmp.iomem_base      = (void *)(unsigned long)uport->mapbase;
 667
 668        mutex_unlock(&port->mutex);
 669
 670        if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
 671                return -EFAULT;
 672        return 0;
 673}
 674
 675static int uart_set_info(struct tty_struct *tty, struct uart_state *state,
 676                         struct serial_struct __user *newinfo)
 677{
 678        struct serial_struct new_serial;
 679        struct uart_port *uport = state->uart_port;
 680        struct tty_port *port = &state->port;
 681        unsigned long new_port;
 682        unsigned int change_irq, change_port, closing_wait;
 683        unsigned int old_custom_divisor, close_delay;
 684        upf_t old_flags, new_flags;
 685        int retval = 0;
 686
 687        if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
 688                return -EFAULT;
 689
 690        new_port = new_serial.port;
 691        if (HIGH_BITS_OFFSET)
 692                new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;
 693
 694        new_serial.irq = irq_canonicalize(new_serial.irq);
 695        close_delay = new_serial.close_delay * 10;
 696        closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 697                        ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
 698
 699        /*
 700         * This semaphore protects port->count.  It is also
 701         * very useful to prevent opens.  Also, take the
 702         * port configuration semaphore to make sure that a
 703         * module insertion/removal doesn't change anything
 704         * under us.
 705         */
 706        mutex_lock(&port->mutex);
 707
 708        change_irq  = !(uport->flags & UPF_FIXED_PORT)
 709                && new_serial.irq != uport->irq;
 710
 711        /*
 712         * Since changing the 'type' of the port changes its resource
 713         * allocations, we should treat type changes the same as
 714         * IO port changes.
 715         */
 716        change_port = !(uport->flags & UPF_FIXED_PORT)
 717                && (new_port != uport->iobase ||
 718                    (unsigned long)new_serial.iomem_base != uport->mapbase ||
 719                    new_serial.hub6 != uport->hub6 ||
 720                    new_serial.io_type != uport->iotype ||
 721                    new_serial.iomem_reg_shift != uport->regshift ||
 722                    new_serial.type != uport->type);
 723
 724        old_flags = uport->flags;
 725        new_flags = new_serial.flags;
 726        old_custom_divisor = uport->custom_divisor;
 727
 728        if (!capable(CAP_SYS_ADMIN)) {
 729                retval = -EPERM;
 730                if (change_irq || change_port ||
 731                    (new_serial.baud_base != uport->uartclk / 16) ||
 732                    (close_delay != port->close_delay) ||
 733                    (closing_wait != port->closing_wait) ||
 734                    (new_serial.xmit_fifo_size &&
 735                     new_serial.xmit_fifo_size != uport->fifosize) ||
 736                    (((new_flags ^ old_flags) & ~UPF_USR_MASK) != 0))
 737                        goto exit;
 738                uport->flags = ((uport->flags & ~UPF_USR_MASK) |
 739                               (new_flags & UPF_USR_MASK));
 740                uport->custom_divisor = new_serial.custom_divisor;
 741                goto check_and_exit;
 742        }
 743
 744        /*
 745         * Ask the low level driver to verify the settings.
 746         */
 747        if (uport->ops->verify_port)
 748                retval = uport->ops->verify_port(uport, &new_serial);
 749
 750        if ((new_serial.irq >= nr_irqs) || (new_serial.irq < 0) ||
 751            (new_serial.baud_base < 9600))
 752                retval = -EINVAL;
 753
 754        if (retval)
 755                goto exit;
 756
 757        if (change_port || change_irq) {
 758                retval = -EBUSY;
 759
 760                /*
 761                 * Make sure that we are the sole user of this port.
 762                 */
 763                if (tty_port_users(port) > 1)
 764                        goto exit;
 765
 766                /*
 767                 * We need to shutdown the serial port at the old
 768                 * port/type/irq combination.
 769                 */
 770                uart_shutdown(tty, state);
 771        }
 772
 773        if (change_port) {
 774                unsigned long old_iobase, old_mapbase;
 775                unsigned int old_type, old_iotype, old_hub6, old_shift;
 776
 777                old_iobase = uport->iobase;
 778                old_mapbase = uport->mapbase;
 779                old_type = uport->type;
 780                old_hub6 = uport->hub6;
 781                old_iotype = uport->iotype;
 782                old_shift = uport->regshift;
 783
 784                /*
 785                 * Free and release old regions
 786                 */
 787                if (old_type != PORT_UNKNOWN)
 788                        uport->ops->release_port(uport);
 789
 790                uport->iobase = new_port;
 791                uport->type = new_serial.type;
 792                uport->hub6 = new_serial.hub6;
 793                uport->iotype = new_serial.io_type;
 794                uport->regshift = new_serial.iomem_reg_shift;
 795                uport->mapbase = (unsigned long)new_serial.iomem_base;
 796
 797                /*
 798                 * Claim and map the new regions
 799                 */
 800                if (uport->type != PORT_UNKNOWN) {
 801                        retval = uport->ops->request_port(uport);
 802                } else {
 803                        /* Always success - Jean II */
 804                        retval = 0;
 805                }
 806
 807                /*
 808                 * If we fail to request resources for the
 809                 * new port, try to restore the old settings.
 810                 */
 811                if (retval && old_type != PORT_UNKNOWN) {
 812                        uport->iobase = old_iobase;
 813                        uport->type = old_type;
 814                        uport->hub6 = old_hub6;
 815                        uport->iotype = old_iotype;
 816                        uport->regshift = old_shift;
 817                        uport->mapbase = old_mapbase;
 818                        retval = uport->ops->request_port(uport);
 819                        /*
 820                         * If we failed to restore the old settings,
 821                         * we fail like this.
 822                         */
 823                        if (retval)
 824                                uport->type = PORT_UNKNOWN;
 825
 826                        /*
 827                         * We failed anyway.
 828                         */
 829                        retval = -EBUSY;
 830                        /* Added to return the correct error -Ram Gupta */
 831                        goto exit;
 832                }
 833        }
 834
 835        if (change_irq)
 836                uport->irq      = new_serial.irq;
 837        if (!(uport->flags & UPF_FIXED_PORT))
 838                uport->uartclk  = new_serial.baud_base * 16;
 839        uport->flags            = (uport->flags & ~UPF_CHANGE_MASK) |
 840                                 (new_flags & UPF_CHANGE_MASK);
 841        uport->custom_divisor   = new_serial.custom_divisor;
 842        port->close_delay     = close_delay;
 843        port->closing_wait    = closing_wait;
 844        if (new_serial.xmit_fifo_size)
 845                uport->fifosize = new_serial.xmit_fifo_size;
 846        if (port->tty)
 847                port->tty->low_latency =
 848                        (uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
 849
 850 check_and_exit:
 851        retval = 0;
 852        if (uport->type == PORT_UNKNOWN)
 853                goto exit;
 854        if (port->flags & ASYNC_INITIALIZED) {
 855                if (((old_flags ^ uport->flags) & UPF_SPD_MASK) ||
 856                    old_custom_divisor != uport->custom_divisor) {
 857                        /*
 858                         * If they're setting up a custom divisor or speed,
 859                         * instead of clearing it, then bitch about it. No
 860                         * need to rate-limit; it's CAP_SYS_ADMIN only.
 861                         */
 862                        if (uport->flags & UPF_SPD_MASK) {
 863                                char buf[64];
 864                                printk(KERN_NOTICE
 865                                       "%s sets custom speed on %s. This "
 866                                       "is deprecated.\n", current->comm,
 867                                       tty_name(port->tty, buf));
 868                        }
 869                        uart_change_speed(tty, state, NULL);
 870                }
 871        } else
 872                retval = uart_startup(tty, state, 1);
 873 exit:
 874        mutex_unlock(&port->mutex);
 875        return retval;
 876}
 877
 878/**
 879 *      uart_get_lsr_info       -       get line status register info
 880 *      @tty: tty associated with the UART
 881 *      @state: UART being queried
 882 *      @value: returned modem value
 883 *
 884 *      Note: uart_ioctl protects us against hangups.
 885 */
 886static int uart_get_lsr_info(struct tty_struct *tty,
 887                        struct uart_state *state, unsigned int __user *value)
 888{
 889        struct uart_port *uport = state->uart_port;
 890        unsigned int result;
 891
 892        result = uport->ops->tx_empty(uport);
 893
 894        /*
 895         * If we're about to load something into the transmit
 896         * register, we'll pretend the transmitter isn't empty to
 897         * avoid a race condition (depending on when the transmit
 898         * interrupt happens).
 899         */
 900        if (uport->x_char ||
 901            ((uart_circ_chars_pending(&state->xmit) > 0) &&
 902             !tty->stopped && !tty->hw_stopped))
 903                result &= ~TIOCSER_TEMT;
 904
 905        return put_user(result, value);
 906}
 907
 908static int uart_tiocmget(struct tty_struct *tty, struct file *file)
 909{
 910        struct uart_state *state = tty->driver_data;
 911        struct tty_port *port = &state->port;
 912        struct uart_port *uport = state->uart_port;
 913        int result = -EIO;
 914
 915        mutex_lock(&port->mutex);
 916        if ((!file || !tty_hung_up_p(file)) &&
 917            !(tty->flags & (1 << TTY_IO_ERROR))) {
 918                result = uport->mctrl;
 919
 920                spin_lock_irq(&uport->lock);
 921                result |= uport->ops->get_mctrl(uport);
 922                spin_unlock_irq(&uport->lock);
 923        }
 924        mutex_unlock(&port->mutex);
 925
 926        return result;
 927}
 928
 929static int
 930uart_tiocmset(struct tty_struct *tty, struct file *file,
 931              unsigned int set, unsigned int clear)
 932{
 933        struct uart_state *state = tty->driver_data;
 934        struct uart_port *uport = state->uart_port;
 935        struct tty_port *port = &state->port;
 936        int ret = -EIO;
 937
 938        mutex_lock(&port->mutex);
 939        if ((!file || !tty_hung_up_p(file)) &&
 940            !(tty->flags & (1 << TTY_IO_ERROR))) {
 941                uart_update_mctrl(uport, set, clear);
 942                ret = 0;
 943        }
 944        mutex_unlock(&port->mutex);
 945        return ret;
 946}
 947
 948static int uart_break_ctl(struct tty_struct *tty, int break_state)
 949{
 950        struct uart_state *state = tty->driver_data;
 951        struct tty_port *port = &state->port;
 952        struct uart_port *uport = state->uart_port;
 953
 954        mutex_lock(&port->mutex);
 955
 956        if (uport->type != PORT_UNKNOWN)
 957                uport->ops->break_ctl(uport, break_state);
 958
 959        mutex_unlock(&port->mutex);
 960        return 0;
 961}
 962
 963static int uart_do_autoconfig(struct tty_struct *tty,struct uart_state *state)
 964{
 965        struct uart_port *uport = state->uart_port;
 966        struct tty_port *port = &state->port;
 967        int flags, ret;
 968
 969        if (!capable(CAP_SYS_ADMIN))
 970                return -EPERM;
 971
 972        /*
 973         * Take the per-port semaphore.  This prevents count from
 974         * changing, and hence any extra opens of the port while
 975         * we're auto-configuring.
 976         */
 977        if (mutex_lock_interruptible(&port->mutex))
 978                return -ERESTARTSYS;
 979
 980        ret = -EBUSY;
 981        if (tty_port_users(port) == 1) {
 982                uart_shutdown(tty, state);
 983
 984                /*
 985                 * If we already have a port type configured,
 986                 * we must release its resources.
 987                 */
 988                if (uport->type != PORT_UNKNOWN)
 989                        uport->ops->release_port(uport);
 990
 991                flags = UART_CONFIG_TYPE;
 992                if (uport->flags & UPF_AUTO_IRQ)
 993                        flags |= UART_CONFIG_IRQ;
 994
 995                /*
 996                 * This will claim the ports resources if
 997                 * a port is found.
 998                 */
 999                uport->ops->config_port(uport, flags);
1000
1001                ret = uart_startup(tty, state, 1);
1002        }
1003        mutex_unlock(&port->mutex);
1004        return ret;
1005}
1006
1007/*
1008 * Wait for any of the 4 modem inputs (DCD,RI,DSR,CTS) to change
1009 * - mask passed in arg for lines of interest
1010 *   (use |'ed TIOCM_RNG/DSR/CD/CTS for masking)
1011 * Caller should use TIOCGICOUNT to see which one it was
1012 *
1013 * FIXME: This wants extracting into a common all driver implementation
1014 * of TIOCMWAIT using tty_port.
1015 */
1016static int
1017uart_wait_modem_status(struct uart_state *state, unsigned long arg)
1018{
1019        struct uart_port *uport = state->uart_port;
1020        struct tty_port *port = &state->port;
1021        DECLARE_WAITQUEUE(wait, current);
1022        struct uart_icount cprev, cnow;
1023        int ret;
1024
1025        /*
1026         * note the counters on entry
1027         */
1028        spin_lock_irq(&uport->lock);
1029        memcpy(&cprev, &uport->icount, sizeof(struct uart_icount));
1030
1031        /*
1032         * Force modem status interrupts on
1033         */
1034        uport->ops->enable_ms(uport);
1035        spin_unlock_irq(&uport->lock);
1036
1037        add_wait_queue(&port->delta_msr_wait, &wait);
1038        for (;;) {
1039                spin_lock_irq(&uport->lock);
1040                memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1041                spin_unlock_irq(&uport->lock);
1042
1043                set_current_state(TASK_INTERRUPTIBLE);
1044
1045                if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
1046                    ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
1047                    ((arg & TIOCM_CD)  && (cnow.dcd != cprev.dcd)) ||
1048                    ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
1049                        ret = 0;
1050                        break;
1051                }
1052
1053                schedule();
1054
1055                /* see if a signal did it */
1056                if (signal_pending(current)) {
1057                        ret = -ERESTARTSYS;
1058                        break;
1059                }
1060
1061                cprev = cnow;
1062        }
1063
1064        current->state = TASK_RUNNING;
1065        remove_wait_queue(&port->delta_msr_wait, &wait);
1066
1067        return ret;
1068}
1069
1070/*
1071 * Get counter of input serial line interrupts (DCD,RI,DSR,CTS)
1072 * Return: write counters to the user passed counter struct
1073 * NB: both 1->0 and 0->1 transitions are counted except for
1074 *     RI where only 0->1 is counted.
1075 */
1076static int uart_get_icount(struct tty_struct *tty,
1077                          struct serial_icounter_struct *icount)
1078{
1079        struct uart_state *state = tty->driver_data;
1080        struct uart_icount cnow;
1081        struct uart_port *uport = state->uart_port;
1082
1083        spin_lock_irq(&uport->lock);
1084        memcpy(&cnow, &uport->icount, sizeof(struct uart_icount));
1085        spin_unlock_irq(&uport->lock);
1086
1087        icount->cts         = cnow.cts;
1088        icount->dsr         = cnow.dsr;
1089        icount->rng         = cnow.rng;
1090        icount->dcd         = cnow.dcd;
1091        icount->rx          = cnow.rx;
1092        icount->tx          = cnow.tx;
1093        icount->frame       = cnow.frame;
1094        icount->overrun     = cnow.overrun;
1095        icount->parity      = cnow.parity;
1096        icount->brk         = cnow.brk;
1097        icount->buf_overrun = cnow.buf_overrun;
1098
1099        return 0;
1100}
1101
1102/*
1103 * Called via sys_ioctl.  We can use spin_lock_irq() here.
1104 */
1105static int
1106uart_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd,
1107           unsigned long arg)
1108{
1109        struct uart_state *state = tty->driver_data;
1110        struct tty_port *port = &state->port;
1111        void __user *uarg = (void __user *)arg;
1112        int ret = -ENOIOCTLCMD;
1113
1114
1115        /*
1116         * These ioctls don't rely on the hardware to be present.
1117         */
1118        switch (cmd) {
1119        case TIOCGSERIAL:
1120                ret = uart_get_info(state, uarg);
1121                break;
1122
1123        case TIOCSSERIAL:
1124                ret = uart_set_info(tty, state, uarg);
1125                break;
1126
1127        case TIOCSERCONFIG:
1128                ret = uart_do_autoconfig(tty, state);
1129                break;
1130
1131        case TIOCSERGWILD: /* obsolete */
1132        case TIOCSERSWILD: /* obsolete */
1133                ret = 0;
1134                break;
1135        }
1136
1137        if (ret != -ENOIOCTLCMD)
1138                goto out;
1139
1140        if (tty->flags & (1 << TTY_IO_ERROR)) {
1141                ret = -EIO;
1142                goto out;
1143        }
1144
1145        /*
1146         * The following should only be used when hardware is present.
1147         */
1148        switch (cmd) {
1149        case TIOCMIWAIT:
1150                ret = uart_wait_modem_status(state, arg);
1151                break;
1152        }
1153
1154        if (ret != -ENOIOCTLCMD)
1155                goto out;
1156
1157        mutex_lock(&port->mutex);
1158
1159        if (tty_hung_up_p(filp)) {
1160                ret = -EIO;
1161                goto out_up;
1162        }
1163
1164        /*
1165         * All these rely on hardware being present and need to be
1166         * protected against the tty being hung up.
1167         */
1168        switch (cmd) {
1169        case TIOCSERGETLSR: /* Get line status register */
1170                ret = uart_get_lsr_info(tty, state, uarg);
1171                break;
1172
1173        default: {
1174                struct uart_port *uport = state->uart_port;
1175                if (uport->ops->ioctl)
1176                        ret = uport->ops->ioctl(uport, cmd, arg);
1177                break;
1178        }
1179        }
1180out_up:
1181        mutex_unlock(&port->mutex);
1182out:
1183        return ret;
1184}
1185
1186static void uart_set_ldisc(struct tty_struct *tty)
1187{
1188        struct uart_state *state = tty->driver_data;
1189        struct uart_port *uport = state->uart_port;
1190
1191        if (uport->ops->set_ldisc)
1192                uport->ops->set_ldisc(uport, tty->termios->c_line);
1193}
1194
1195static void uart_set_termios(struct tty_struct *tty,
1196                                                struct ktermios *old_termios)
1197{
1198        struct uart_state *state = tty->driver_data;
1199        unsigned long flags;
1200        unsigned int cflag = tty->termios->c_cflag;
1201
1202
1203        /*
1204         * These are the bits that are used to setup various
1205         * flags in the low level driver. We can ignore the Bfoo
1206         * bits in c_cflag; c_[io]speed will always be set
1207         * appropriately by set_termios() in tty_ioctl.c
1208         */
1209#define RELEVANT_IFLAG(iflag)   ((iflag) & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
1210        if ((cflag ^ old_termios->c_cflag) == 0 &&
1211            tty->termios->c_ospeed == old_termios->c_ospeed &&
1212            tty->termios->c_ispeed == old_termios->c_ispeed &&
1213            RELEVANT_IFLAG(tty->termios->c_iflag ^ old_termios->c_iflag) == 0) {
1214                return;
1215        }
1216
1217        uart_change_speed(tty, state, old_termios);
1218
1219        /* Handle transition to B0 status */
1220        if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD))
1221                uart_clear_mctrl(state->uart_port, TIOCM_RTS | TIOCM_DTR);
1222        /* Handle transition away from B0 status */
1223        else if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) {
1224                unsigned int mask = TIOCM_DTR;
1225                if (!(cflag & CRTSCTS) ||
1226                    !test_bit(TTY_THROTTLED, &tty->flags))
1227                        mask |= TIOCM_RTS;
1228                uart_set_mctrl(state->uart_port, mask);
1229        }
1230
1231        /* Handle turning off CRTSCTS */
1232        if ((old_termios->c_cflag & CRTSCTS) && !(cflag & CRTSCTS)) {
1233                spin_lock_irqsave(&state->uart_port->lock, flags);
1234                tty->hw_stopped = 0;
1235                __uart_start(tty);
1236                spin_unlock_irqrestore(&state->uart_port->lock, flags);
1237        }
1238        /* Handle turning on CRTSCTS */
1239        else if (!(old_termios->c_cflag & CRTSCTS) && (cflag & CRTSCTS)) {
1240                spin_lock_irqsave(&state->uart_port->lock, flags);
1241                if (!(state->uart_port->ops->get_mctrl(state->uart_port) & TIOCM_CTS)) {
1242                        tty->hw_stopped = 1;
1243                        state->uart_port->ops->stop_tx(state->uart_port);
1244                }
1245                spin_unlock_irqrestore(&state->uart_port->lock, flags);
1246        }
1247#if 0
1248        /*
1249         * No need to wake up processes in open wait, since they
1250         * sample the CLOCAL flag once, and don't recheck it.
1251         * XXX  It's not clear whether the current behavior is correct
1252         * or not.  Hence, this may change.....
1253         */
1254        if (!(old_termios->c_cflag & CLOCAL) &&
1255            (tty->termios->c_cflag & CLOCAL))
1256                wake_up_interruptible(&state->uart_port.open_wait);
1257#endif
1258}
1259
1260/*
1261 * In 2.4.5, calls to this will be serialized via the BKL in
1262 *  linux/drivers/char/tty_io.c:tty_release()
1263 *  linux/drivers/char/tty_io.c:do_tty_handup()
1264 */
1265static void uart_close(struct tty_struct *tty, struct file *filp)
1266{
1267        struct uart_state *state = tty->driver_data;
1268        struct tty_port *port;
1269        struct uart_port *uport;
1270        unsigned long flags;
1271
1272        BUG_ON(!tty_locked());
1273
1274        if (!state)
1275                return;
1276
1277        uport = state->uart_port;
1278        port = &state->port;
1279
1280        pr_debug("uart_close(%d) called\n", uport->line);
1281
1282        mutex_lock(&port->mutex);
1283        spin_lock_irqsave(&port->lock, flags);
1284
1285        if (tty_hung_up_p(filp)) {
1286                spin_unlock_irqrestore(&port->lock, flags);
1287                goto done;
1288        }
1289
1290        if ((tty->count == 1) && (port->count != 1)) {
1291                /*
1292                 * Uh, oh.  tty->count is 1, which means that the tty
1293                 * structure will be freed.  port->count should always
1294                 * be one in these conditions.  If it's greater than
1295                 * one, we've got real problems, since it means the
1296                 * serial port won't be shutdown.
1297                 */
1298                printk(KERN_ERR "uart_close: bad serial port count; tty->count is 1, "
1299                       "port->count is %d\n", port->count);
1300                port->count = 1;
1301        }
1302        if (--port->count < 0) {
1303                printk(KERN_ERR "uart_close: bad serial port count for %s: %d\n",
1304                       tty->name, port->count);
1305                port->count = 0;
1306        }
1307        if (port->count) {
1308                spin_unlock_irqrestore(&port->lock, flags);
1309                goto done;
1310        }
1311
1312        /*
1313         * Now we wait for the transmit buffer to clear; and we notify
1314         * the line discipline to only process XON/XOFF characters by
1315         * setting tty->closing.
1316         */
1317        tty->closing = 1;
1318        spin_unlock_irqrestore(&port->lock, flags);
1319
1320        if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE) {
1321                /*
1322                 * hack: open-coded tty_wait_until_sent to avoid
1323                 * recursive tty_lock
1324                 */
1325                long timeout = msecs_to_jiffies(port->closing_wait);
1326                if (wait_event_interruptible_timeout(tty->write_wait,
1327                                !tty_chars_in_buffer(tty), timeout) >= 0)
1328                        __uart_wait_until_sent(uport, timeout);
1329        }
1330
1331        /*
1332         * At this point, we stop accepting input.  To do this, we
1333         * disable the receive line status interrupts.
1334         */
1335        if (port->flags & ASYNC_INITIALIZED) {
1336                unsigned long flags;
1337                spin_lock_irqsave(&uport->lock, flags);
1338                uport->ops->stop_rx(uport);
1339                spin_unlock_irqrestore(&uport->lock, flags);
1340                /*
1341                 * Before we drop DTR, make sure the UART transmitter
1342                 * has completely drained; this is especially
1343                 * important if there is a transmit FIFO!
1344                 */
1345                __uart_wait_until_sent(uport, uport->timeout);
1346        }
1347
1348        uart_shutdown(tty, state);
1349        uart_flush_buffer(tty);
1350
1351        tty_ldisc_flush(tty);
1352
1353        tty_port_tty_set(port, NULL);
1354        spin_lock_irqsave(&port->lock, flags);
1355        tty->closing = 0;
1356
1357        if (port->blocked_open) {
1358                spin_unlock_irqrestore(&port->lock, flags);
1359                if (port->close_delay)
1360                        msleep_interruptible(port->close_delay);
1361                spin_lock_irqsave(&port->lock, flags);
1362        } else if (!uart_console(uport)) {
1363                spin_unlock_irqrestore(&port->lock, flags);
1364                uart_change_pm(state, 3);
1365                spin_lock_irqsave(&port->lock, flags);
1366        }
1367
1368        /*
1369         * Wake up anyone trying to open this port.
1370         */
1371        clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
1372        spin_unlock_irqrestore(&port->lock, flags);
1373        wake_up_interruptible(&port->open_wait);
1374
1375done:
1376        mutex_unlock(&port->mutex);
1377}
1378
1379static void __uart_wait_until_sent(struct uart_port *port, int timeout)
1380{
1381        unsigned long char_time, expire;
1382
1383        if (port->type == PORT_UNKNOWN || port->fifosize == 0)
1384                return;
1385
1386        /*
1387         * Set the check interval to be 1/5 of the estimated time to
1388         * send a single character, and make it at least 1.  The check
1389         * interval should also be less than the timeout.
1390         *
1391         * Note: we have to use pretty tight timings here to satisfy
1392         * the NIST-PCTS.
1393         */
1394        char_time = (port->timeout - HZ/50) / port->fifosize;
1395        char_time = char_time / 5;
1396        if (char_time == 0)
1397                char_time = 1;
1398        if (timeout && timeout < char_time)
1399                char_time = timeout;
1400
1401        /*
1402         * If the transmitter hasn't cleared in twice the approximate
1403         * amount of time to send the entire FIFO, it probably won't
1404         * ever clear.  This assumes the UART isn't doing flow
1405         * control, which is currently the case.  Hence, if it ever
1406         * takes longer than port->timeout, this is probably due to a
1407         * UART bug of some kind.  So, we clamp the timeout parameter at
1408         * 2*port->timeout.
1409         */
1410        if (timeout == 0 || timeout > 2 * port->timeout)
1411                timeout = 2 * port->timeout;
1412
1413        expire = jiffies + timeout;
1414
1415        pr_debug("uart_wait_until_sent(%d), jiffies=%lu, expire=%lu...\n",
1416                port->line, jiffies, expire);
1417
1418        /*
1419         * Check whether the transmitter is empty every 'char_time'.
1420         * 'timeout' / 'expire' give us the maximum amount of time
1421         * we wait.
1422         */
1423        while (!port->ops->tx_empty(port)) {
1424                msleep_interruptible(jiffies_to_msecs(char_time));
1425                if (signal_pending(current))
1426                        break;
1427                if (time_after(jiffies, expire))
1428                        break;
1429        }
1430        set_current_state(TASK_RUNNING); /* might not be needed */
1431}
1432
1433static void uart_wait_until_sent(struct tty_struct *tty, int timeout)
1434{
1435        struct uart_state *state = tty->driver_data;
1436        struct uart_port *port = state->uart_port;
1437
1438        tty_lock();
1439        __uart_wait_until_sent(port, timeout);
1440        tty_unlock();
1441}
1442
1443/*
1444 * This is called with the BKL held in
1445 *  linux/drivers/char/tty_io.c:do_tty_hangup()
1446 * We're called from the eventd thread, so we can sleep for
1447 * a _short_ time only.
1448 */
1449static void uart_hangup(struct tty_struct *tty)
1450{
1451        struct uart_state *state = tty->driver_data;
1452        struct tty_port *port = &state->port;
1453        unsigned long flags;
1454
1455        BUG_ON(!tty_locked());
1456        pr_debug("uart_hangup(%d)\n", state->uart_port->line);
1457
1458        mutex_lock(&port->mutex);
1459        if (port->flags & ASYNC_NORMAL_ACTIVE) {
1460                uart_flush_buffer(tty);
1461                uart_shutdown(tty, state);
1462                spin_lock_irqsave(&port->lock, flags);
1463                port->count = 0;
1464                clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
1465                spin_unlock_irqrestore(&port->lock, flags);
1466                tty_port_tty_set(port, NULL);
1467                wake_up_interruptible(&port->open_wait);
1468                wake_up_interruptible(&port->delta_msr_wait);
1469        }
1470        mutex_unlock(&port->mutex);
1471}
1472
1473/**
1474 *      uart_update_termios     -       update the terminal hw settings
1475 *      @tty: tty associated with UART
1476 *      @state: UART to update
1477 *
1478 *      Copy across the serial console cflag setting into the termios settings
1479 *      for the initial open of the port.  This allows continuity between the
1480 *      kernel settings, and the settings init adopts when it opens the port
1481 *      for the first time.
1482 */
1483static void uart_update_termios(struct tty_struct *tty,
1484                                                struct uart_state *state)
1485{
1486        struct uart_port *port = state->uart_port;
1487
1488        if (uart_console(port) && port->cons->cflag) {
1489                tty->termios->c_cflag = port->cons->cflag;
1490                port->cons->cflag = 0;
1491        }
1492
1493        /*
1494         * If the device failed to grab its irq resources,
1495         * or some other error occurred, don't try to talk
1496         * to the port hardware.
1497         */
1498        if (!(tty->flags & (1 << TTY_IO_ERROR))) {
1499                /*
1500                 * Make termios settings take effect.
1501                 */
1502                uart_change_speed(tty, state, NULL);
1503
1504                /*
1505                 * And finally enable the RTS and DTR signals.
1506                 */
1507                if (tty->termios->c_cflag & CBAUD)
1508                        uart_set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1509        }
1510}
1511
1512static int uart_carrier_raised(struct tty_port *port)
1513{
1514        struct uart_state *state = container_of(port, struct uart_state, port);
1515        struct uart_port *uport = state->uart_port;
1516        int mctrl;
1517        spin_lock_irq(&uport->lock);
1518        uport->ops->enable_ms(uport);
1519        mctrl = uport->ops->get_mctrl(uport);
1520        spin_unlock_irq(&uport->lock);
1521        if (mctrl & TIOCM_CAR)
1522                return 1;
1523        return 0;
1524}
1525
1526static void uart_dtr_rts(struct tty_port *port, int onoff)
1527{
1528        struct uart_state *state = container_of(port, struct uart_state, port);
1529        struct uart_port *uport = state->uart_port;
1530
1531        if (onoff) {
1532                uart_set_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
1533
1534                /*
1535                 * If this is the first open to succeed,
1536                 * adjust things to suit.
1537                 */
1538                if (!test_and_set_bit(ASYNCB_NORMAL_ACTIVE, &port->flags))
1539                        uart_update_termios(port->tty, state);
1540        }
1541        else
1542                uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS);
1543}
1544
1545static struct uart_state *uart_get(struct uart_driver *drv, int line)
1546{
1547        struct uart_state *state;
1548        struct tty_port *port;
1549        int ret = 0;
1550
1551        state = drv->state + line;
1552        port = &state->port;
1553        if (mutex_lock_interruptible(&port->mutex)) {
1554                ret = -ERESTARTSYS;
1555                goto err;
1556        }
1557
1558        port->count++;
1559        if (!state->uart_port || state->uart_port->flags & UPF_DEAD) {
1560                ret = -ENXIO;
1561                goto err_unlock;
1562        }
1563        return state;
1564
1565 err_unlock:
1566        port->count--;
1567        mutex_unlock(&port->mutex);
1568 err:
1569        return ERR_PTR(ret);
1570}
1571
1572/*
1573 * calls to uart_open are serialised by the BKL in
1574 *   fs/char_dev.c:chrdev_open()
1575 * Note that if this fails, then uart_close() _will_ be called.
1576 *
1577 * In time, we want to scrap the "opening nonpresent ports"
1578 * behaviour and implement an alternative way for setserial
1579 * to set base addresses/ports/types.  This will allow us to
1580 * get rid of a certain amount of extra tests.
1581 */
1582static int uart_open(struct tty_struct *tty, struct file *filp)
1583{
1584        struct uart_driver *drv = (struct uart_driver *)tty->driver->driver_state;
1585        struct uart_state *state;
1586        struct tty_port *port;
1587        int retval, line = tty->index;
1588
1589        BUG_ON(!tty_locked());
1590        pr_debug("uart_open(%d) called\n", line);
1591
1592        /*
1593         * tty->driver->num won't change, so we won't fail here with
1594         * tty->driver_data set to something non-NULL (and therefore
1595         * we won't get caught by uart_close()).
1596         */
1597        retval = -ENODEV;
1598        if (line >= tty->driver->num)
1599                goto fail;
1600
1601        /*
1602         * We take the semaphore inside uart_get to guarantee that we won't
1603         * be re-entered while allocating the state structure, or while we
1604         * request any IRQs that the driver may need.  This also has the nice
1605         * side-effect that it delays the action of uart_hangup, so we can
1606         * guarantee that state->port.tty will always contain something
1607         * reasonable.
1608         */
1609        state = uart_get(drv, line);
1610        if (IS_ERR(state)) {
1611                retval = PTR_ERR(state);
1612                goto fail;
1613        }
1614        port = &state->port;
1615
1616        /*
1617         * Once we set tty->driver_data here, we are guaranteed that
1618         * uart_close() will decrement the driver module use count.
1619         * Any failures from here onwards should not touch the count.
1620         */
1621        tty->driver_data = state;
1622        state->uart_port->state = state;
1623        tty->low_latency = (state->uart_port->flags & UPF_LOW_LATENCY) ? 1 : 0;
1624        tty->alt_speed = 0;
1625        tty_port_tty_set(port, tty);
1626
1627        /*
1628         * If the port is in the middle of closing, bail out now.
1629         */
1630        if (tty_hung_up_p(filp)) {
1631                retval = -EAGAIN;
1632                port->count--;
1633                mutex_unlock(&port->mutex);
1634                goto fail;
1635        }
1636
1637        /*
1638         * Make sure the device is in D0 state.
1639         */
1640        if (port->count == 1)
1641                uart_change_pm(state, 0);
1642
1643        /*
1644         * Start up the serial port.
1645         */
1646        retval = uart_startup(tty, state, 0);
1647
1648        /*
1649         * If we succeeded, wait until the port is ready.
1650         */
1651        mutex_unlock(&port->mutex);
1652        if (retval == 0)
1653                retval = tty_port_block_til_ready(port, tty, filp);
1654
1655fail:
1656        return retval;
1657}
1658
1659static const char *uart_type(struct uart_port *port)
1660{
1661        const char *str = NULL;
1662
1663        if (port->ops->type)
1664                str = port->ops->type(port);
1665
1666        if (!str)
1667                str = "unknown";
1668
1669        return str;
1670}
1671
1672#ifdef CONFIG_PROC_FS
1673
1674static void uart_line_info(struct seq_file *m, struct uart_driver *drv, int i)
1675{
1676        struct uart_state *state = drv->state + i;
1677        struct tty_port *port = &state->port;
1678        int pm_state;
1679        struct uart_port *uport = state->uart_port;
1680        char stat_buf[32];
1681        unsigned int status;
1682        int mmio;
1683
1684        if (!uport)
1685                return;
1686
1687        mmio = uport->iotype >= UPIO_MEM;
1688        seq_printf(m, "%d: uart:%s %s%08llX irq:%d",
1689                        uport->line, uart_type(uport),
1690                        mmio ? "mmio:0x" : "port:",
1691                        mmio ? (unsigned long long)uport->mapbase
1692                             : (unsigned long long)uport->iobase,
1693                        uport->irq);
1694
1695        if (uport->type == PORT_UNKNOWN) {
1696                seq_putc(m, '\n');
1697                return;
1698        }
1699
1700        if (capable(CAP_SYS_ADMIN)) {
1701                mutex_lock(&port->mutex);
1702                pm_state = state->pm_state;
1703                if (pm_state)
1704                        uart_change_pm(state, 0);
1705                spin_lock_irq(&uport->lock);
1706                status = uport->ops->get_mctrl(uport);
1707                spin_unlock_irq(&uport->lock);
1708                if (pm_state)
1709                        uart_change_pm(state, pm_state);
1710                mutex_unlock(&port->mutex);
1711
1712                seq_printf(m, " tx:%d rx:%d",
1713                                uport->icount.tx, uport->icount.rx);
1714                if (uport->icount.frame)
1715                        seq_printf(m, " fe:%d",
1716                                uport->icount.frame);
1717                if (uport->icount.parity)
1718                        seq_printf(m, " pe:%d",
1719                                uport->icount.parity);
1720                if (uport->icount.brk)
1721                        seq_printf(m, " brk:%d",
1722                                uport->icount.brk);
1723                if (uport->icount.overrun)
1724                        seq_printf(m, " oe:%d",
1725                                uport->icount.overrun);
1726
1727#define INFOBIT(bit, str) \
1728        if (uport->mctrl & (bit)) \
1729                strncat(stat_buf, (str), sizeof(stat_buf) - \
1730                        strlen(stat_buf) - 2)
1731#define STATBIT(bit, str) \
1732        if (status & (bit)) \
1733                strncat(stat_buf, (str), sizeof(stat_buf) - \
1734                       strlen(stat_buf) - 2)
1735
1736                stat_buf[0] = '\0';
1737                stat_buf[1] = '\0';
1738                INFOBIT(TIOCM_RTS, "|RTS");
1739                STATBIT(TIOCM_CTS, "|CTS");
1740                INFOBIT(TIOCM_DTR, "|DTR");
1741                STATBIT(TIOCM_DSR, "|DSR");
1742                STATBIT(TIOCM_CAR, "|CD");
1743                STATBIT(TIOCM_RNG, "|RI");
1744                if (stat_buf[0])
1745                        stat_buf[0] = ' ';
1746
1747                seq_puts(m, stat_buf);
1748        }
1749        seq_putc(m, '\n');
1750#undef STATBIT
1751#undef INFOBIT
1752}
1753
1754static int uart_proc_show(struct seq_file *m, void *v)
1755{
1756        struct tty_driver *ttydrv = m->private;
1757        struct uart_driver *drv = ttydrv->driver_state;
1758        int i;
1759
1760        seq_printf(m, "serinfo:1.0 driver%s%s revision:%s\n",
1761                        "", "", "");
1762        for (i = 0; i < drv->nr; i++)
1763                uart_line_info(m, drv, i);
1764        return 0;
1765}
1766
1767static int uart_proc_open(struct inode *inode, struct file *file)
1768{
1769        return single_open(file, uart_proc_show, PDE(inode)->data);
1770}
1771
1772static const struct file_operations uart_proc_fops = {
1773        .owner          = THIS_MODULE,
1774        .open           = uart_proc_open,
1775        .read           = seq_read,
1776        .llseek         = seq_lseek,
1777        .release        = single_release,
1778};
1779#endif
1780
1781#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
1782/*
1783 *      uart_console_write - write a console message to a serial port
1784 *      @port: the port to write the message
1785 *      @s: array of characters
1786 *      @count: number of characters in string to write
1787 *      @write: function to write character to port
1788 */
1789void uart_console_write(struct uart_port *port, const char *s,
1790                        unsigned int count,
1791                        void (*putchar)(struct uart_port *, int))
1792{
1793        unsigned int i;
1794
1795        for (i = 0; i < count; i++, s++) {
1796                if (*s == '\n')
1797                        putchar(port, '\r');
1798                putchar(port, *s);
1799        }
1800}
1801EXPORT_SYMBOL_GPL(uart_console_write);
1802
1803/*
1804 *      Check whether an invalid uart number has been specified, and
1805 *      if so, search for the first available port that does have
1806 *      console support.
1807 */
1808struct uart_port * __init
1809uart_get_console(struct uart_port *ports, int nr, struct console *co)
1810{
1811        int idx = co->index;
1812
1813        if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
1814                                     ports[idx].membase == NULL))
1815                for (idx = 0; idx < nr; idx++)
1816                        if (ports[idx].iobase != 0 ||
1817                            ports[idx].membase != NULL)
1818                                break;
1819
1820        co->index = idx;
1821
1822        return ports + idx;
1823}
1824
1825/**
1826 *      uart_parse_options - Parse serial port baud/parity/bits/flow contro.
1827 *      @options: pointer to option string
1828 *      @baud: pointer to an 'int' variable for the baud rate.
1829 *      @parity: pointer to an 'int' variable for the parity.
1830 *      @bits: pointer to an 'int' variable for the number of data bits.
1831 *      @flow: pointer to an 'int' variable for the flow control character.
1832 *
1833 *      uart_parse_options decodes a string containing the serial console
1834 *      options.  The format of the string is <baud><parity><bits><flow>,
1835 *      eg: 115200n8r
1836 */
1837void
1838uart_parse_options(char *options, int *baud, int *parity, int *bits, int *flow)
1839{
1840        char *s = options;
1841
1842        *baud = simple_strtoul(s, NULL, 10);
1843        while (*s >= '0' && *s <= '9')
1844                s++;
1845        if (*s)
1846                *parity = *s++;
1847        if (*s)
1848                *bits = *s++ - '0';
1849        if (*s)
1850                *flow = *s;
1851}
1852EXPORT_SYMBOL_GPL(uart_parse_options);
1853
1854struct baud_rates {
1855        unsigned int rate;
1856        unsigned int cflag;
1857};
1858
1859static const struct baud_rates baud_rates[] = {
1860        { 921600, B921600 },
1861        { 460800, B460800 },
1862        { 230400, B230400 },
1863        { 115200, B115200 },
1864        {  57600, B57600  },
1865        {  38400, B38400  },
1866        {  19200, B19200  },
1867        {   9600, B9600   },
1868        {   4800, B4800   },
1869        {   2400, B2400   },
1870        {   1200, B1200   },
1871        {      0, B38400  }
1872};
1873
1874/**
1875 *      uart_set_options - setup the serial console parameters
1876 *      @port: pointer to the serial ports uart_port structure
1877 *      @co: console pointer
1878 *      @baud: baud rate
1879 *      @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
1880 *      @bits: number of data bits
1881 *      @flow: flow control character - 'r' (rts)
1882 */
1883int
1884uart_set_options(struct uart_port *port, struct console *co,
1885                 int baud, int parity, int bits, int flow)
1886{
1887        struct ktermios termios;
1888        static struct ktermios dummy;
1889        int i;
1890
1891        /*
1892         * Ensure that the serial console lock is initialised
1893         * early.
1894         */
1895        spin_lock_init(&port->lock);
1896        lockdep_set_class(&port->lock, &port_lock_key);
1897
1898        memset(&termios, 0, sizeof(struct ktermios));
1899
1900        termios.c_cflag = CREAD | HUPCL | CLOCAL;
1901
1902        /*
1903         * Construct a cflag setting.
1904         */
1905        for (i = 0; baud_rates[i].rate; i++)
1906                if (baud_rates[i].rate <= baud)
1907                        break;
1908
1909        termios.c_cflag |= baud_rates[i].cflag;
1910
1911        if (bits == 7)
1912                termios.c_cflag |= CS7;
1913        else
1914                termios.c_cflag |= CS8;
1915
1916        switch (parity) {
1917        case 'o': case 'O':
1918                termios.c_cflag |= PARODD;
1919                /*fall through*/
1920        case 'e': case 'E':
1921                termios.c_cflag |= PARENB;
1922                break;
1923        }
1924
1925        if (flow == 'r')
1926                termios.c_cflag |= CRTSCTS;
1927
1928        /*
1929         * some uarts on other side don't support no flow control.
1930         * So we set * DTR in host uart to make them happy
1931         */
1932        port->mctrl |= TIOCM_DTR;
1933
1934        port->ops->set_termios(port, &termios, &dummy);
1935        /*
1936         * Allow the setting of the UART parameters with a NULL console
1937         * too:
1938         */
1939        if (co)
1940                co->cflag = termios.c_cflag;
1941
1942        return 0;
1943}
1944EXPORT_SYMBOL_GPL(uart_set_options);
1945#endif /* CONFIG_SERIAL_CORE_CONSOLE */
1946
1947static void uart_change_pm(struct uart_state *state, int pm_state)
1948{
1949        struct uart_port *port = state->uart_port;
1950
1951        if (state->pm_state != pm_state) {
1952                if (port->ops->pm)
1953                        port->ops->pm(port, pm_state, state->pm_state);
1954                state->pm_state = pm_state;
1955        }
1956}
1957
1958struct uart_match {
1959        struct uart_port *port;
1960        struct uart_driver *driver;
1961};
1962
1963static int serial_match_port(struct device *dev, void *data)
1964{
1965        struct uart_match *match = data;
1966        struct tty_driver *tty_drv = match->driver->tty_driver;
1967        dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
1968                match->port->line;
1969
1970        return dev->devt == devt; /* Actually, only one tty per port */
1971}
1972
1973int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
1974{
1975        struct uart_state *state = drv->state + uport->line;
1976        struct tty_port *port = &state->port;
1977        struct device *tty_dev;
1978        struct uart_match match = {uport, drv};
1979        struct tty_struct *tty;
1980
1981        mutex_lock(&port->mutex);
1982
1983        /* Must be inside the mutex lock until we convert to tty_port */
1984        tty = port->tty;
1985
1986        tty_dev = device_find_child(uport->dev, &match, serial_match_port);
1987        if (device_may_wakeup(tty_dev)) {
1988                if (!enable_irq_wake(uport->irq))
1989                        uport->irq_wake = 1;
1990                put_device(tty_dev);
1991                mutex_unlock(&port->mutex);
1992                return 0;
1993        }
1994        if (console_suspend_enabled || !uart_console(uport))
1995                uport->suspended = 1;
1996
1997        if (port->flags & ASYNC_INITIALIZED) {
1998                const struct uart_ops *ops = uport->ops;
1999                int tries;
2000
2001                if (console_suspend_enabled || !uart_console(uport)) {
2002                        set_bit(ASYNCB_SUSPENDED, &port->flags);
2003                        clear_bit(ASYNCB_INITIALIZED, &port->flags);
2004
2005                        spin_lock_irq(&uport->lock);
2006                        ops->stop_tx(uport);
2007                        ops->set_mctrl(uport, 0);
2008                        ops->stop_rx(uport);
2009                        spin_unlock_irq(&uport->lock);
2010                }
2011
2012                /*
2013                 * Wait for the transmitter to empty.
2014                 */
2015                for (tries = 3; !ops->tx_empty(uport) && tries; tries--)
2016                        msleep(10);
2017                if (!tries)
2018                        printk(KERN_ERR "%s%s%s%d: Unable to drain "
2019                                        "transmitter\n",
2020                               uport->dev ? dev_name(uport->dev) : "",
2021                               uport->dev ? ": " : "",
2022                               drv->dev_name,
2023                               drv->tty_driver->name_base + uport->line);
2024
2025                if (console_suspend_enabled || !uart_console(uport))
2026                        ops->shutdown(uport);
2027        }
2028
2029        /*
2030         * Disable the console device before suspending.
2031         */
2032        if (console_suspend_enabled && uart_console(uport))
2033                console_stop(uport->cons);
2034
2035        if (console_suspend_enabled || !uart_console(uport))
2036                uart_change_pm(state, 3);
2037
2038        mutex_unlock(&port->mutex);
2039
2040        return 0;
2041}
2042
2043int uart_resume_port(struct uart_driver *drv, struct uart_port *uport)
2044{
2045        struct uart_state *state = drv->state + uport->line;
2046        struct tty_port *port = &state->port;
2047        struct device *tty_dev;
2048        struct uart_match match = {uport, drv};
2049        struct ktermios termios;
2050
2051        mutex_lock(&port->mutex);
2052
2053        tty_dev = device_find_child(uport->dev, &match, serial_match_port);
2054        if (!uport->suspended && device_may_wakeup(tty_dev)) {
2055                if (uport->irq_wake) {
2056                        disable_irq_wake(uport->irq);
2057                        uport->irq_wake = 0;
2058                }
2059                mutex_unlock(&port->mutex);
2060                return 0;
2061        }
2062        uport->suspended = 0;
2063
2064        /*
2065         * Re-enable the console device after suspending.
2066         */
2067        if (console_suspend_enabled && uart_console(uport)) {
2068                /*
2069                 * First try to use the console cflag setting.
2070                 */
2071                memset(&termios, 0, sizeof(struct ktermios));
2072                termios.c_cflag = uport->cons->cflag;
2073
2074                /*
2075                 * If that's unset, use the tty termios setting.
2076                 */
2077                if (port->tty && port->tty->termios && termios.c_cflag == 0)
2078                        termios = *(port->tty->termios);
2079
2080                uart_change_pm(state, 0);
2081                uport->ops->set_termios(uport, &termios, NULL);
2082                console_start(uport->cons);
2083        }
2084
2085        if (port->flags & ASYNC_SUSPENDED) {
2086                const struct uart_ops *ops = uport->ops;
2087                int ret;
2088
2089                uart_change_pm(state, 0);
2090                spin_lock_irq(&uport->lock);
2091                ops->set_mctrl(uport, 0);
2092                spin_unlock_irq(&uport->lock);
2093                if (console_suspend_enabled || !uart_console(uport)) {
2094                        /* Protected by port mutex for now */
2095                        struct tty_struct *tty = port->tty;
2096                        ret = ops->startup(uport);
2097                        if (ret == 0) {
2098                                if (tty)
2099                                        uart_change_speed(tty, state, NULL);
2100                                spin_lock_irq(&uport->lock);
2101                                ops->set_mctrl(uport, uport->mctrl);
2102                                ops->start_tx(uport);
2103                                spin_unlock_irq(&uport->lock);
2104                                set_bit(ASYNCB_INITIALIZED, &port->flags);
2105                        } else {
2106                                /*
2107                                 * Failed to resume - maybe hardware went away?
2108                                 * Clear the "initialized" flag so we won't try
2109                                 * to call the low level drivers shutdown method.
2110                                 */
2111                                uart_shutdown(tty, state);
2112                        }
2113                }
2114
2115                clear_bit(ASYNCB_SUSPENDED, &port->flags);
2116        }
2117
2118        mutex_unlock(&port->mutex);
2119
2120        return 0;
2121}
2122
2123static inline void
2124uart_report_port(struct uart_driver *drv, struct uart_port *port)
2125{
2126        char address[64];
2127
2128        switch (port->iotype) {
2129        case UPIO_PORT:
2130                snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase);
2131                break;
2132        case UPIO_HUB6:
2133                snprintf(address, sizeof(address),
2134                         "I/O 0x%lx offset 0x%x", port->iobase, port->hub6);
2135                break;
2136        case UPIO_MEM:
2137        case UPIO_MEM32:
2138        case UPIO_AU:
2139        case UPIO_TSI:
2140        case UPIO_DWAPB:
2141        case UPIO_DWAPB32:
2142                snprintf(address, sizeof(address),
2143                         "MMIO 0x%llx", (unsigned long long)port->mapbase);
2144                break;
2145        default:
2146                strlcpy(address, "*unknown*", sizeof(address));
2147                break;
2148        }
2149
2150        printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
2151               port->dev ? dev_name(port->dev) : "",
2152               port->dev ? ": " : "",
2153               drv->dev_name,
2154               drv->tty_driver->name_base + port->line,
2155               address, port->irq, uart_type(port));
2156}
2157
2158static void
2159uart_configure_port(struct uart_driver *drv, struct uart_state *state,
2160                    struct uart_port *port)
2161{
2162        unsigned int flags;
2163
2164        /*
2165         * If there isn't a port here, don't do anything further.
2166         */
2167        if (!port->iobase && !port->mapbase && !port->membase)
2168                return;
2169
2170        /*
2171         * Now do the auto configuration stuff.  Note that config_port
2172         * is expected to claim the resources and map the port for us.
2173         */
2174        flags = 0;
2175        if (port->flags & UPF_AUTO_IRQ)
2176                flags |= UART_CONFIG_IRQ;
2177        if (port->flags & UPF_BOOT_AUTOCONF) {
2178                if (!(port->flags & UPF_FIXED_TYPE)) {
2179                        port->type = PORT_UNKNOWN;
2180                        flags |= UART_CONFIG_TYPE;
2181                }
2182                port->ops->config_port(port, flags);
2183        }
2184
2185        if (port->type != PORT_UNKNOWN) {
2186                unsigned long flags;
2187
2188                uart_report_port(drv, port);
2189
2190                /* Power up port for set_mctrl() */
2191                uart_change_pm(state, 0);
2192
2193                /*
2194                 * Ensure that the modem control lines are de-activated.
2195                 * keep the DTR setting that is set in uart_set_options()
2196                 * We probably don't need a spinlock around this, but
2197                 */
2198                spin_lock_irqsave(&port->lock, flags);
2199                port->ops->set_mctrl(port, port->mctrl & TIOCM_DTR);
2200                spin_unlock_irqrestore(&port->lock, flags);
2201
2202                /*
2203                 * If this driver supports console, and it hasn't been
2204                 * successfully registered yet, try to re-register it.
2205                 * It may be that the port was not available.
2206                 */
2207                if (port->cons && !(port->cons->flags & CON_ENABLED))
2208                        register_console(port->cons);
2209
2210                /*
2211                 * Power down all ports by default, except the
2212                 * console if we have one.
2213                 */
2214                if (!uart_console(port))
2215                        uart_change_pm(state, 3);
2216        }
2217}
2218
2219#ifdef CONFIG_CONSOLE_POLL
2220
2221static int uart_poll_init(struct tty_driver *driver, int line, char *options)
2222{
2223        struct uart_driver *drv = driver->driver_state;
2224        struct uart_state *state = drv->state + line;
2225        struct uart_port *port;
2226        int baud = 9600;
2227        int bits = 8;
2228        int parity = 'n';
2229        int flow = 'n';
2230
2231        if (!state || !state->uart_port)
2232                return -1;
2233
2234        port = state->uart_port;
2235        if (!(port->ops->poll_get_char && port->ops->poll_put_char))
2236                return -1;
2237
2238        if (options) {
2239                uart_parse_options(options, &baud, &parity, &bits, &flow);
2240                return uart_set_options(port, NULL, baud, parity, bits, flow);
2241        }
2242
2243        return 0;
2244}
2245
2246static int uart_poll_get_char(struct tty_driver *driver, int line)
2247{
2248        struct uart_driver *drv = driver->driver_state;
2249        struct uart_state *state = drv->state + line;
2250        struct uart_port *port;
2251
2252        if (!state || !state->uart_port)
2253                return -1;
2254
2255        port = state->uart_port;
2256        return port->ops->poll_get_char(port);
2257}
2258
2259static void uart_poll_put_char(struct tty_driver *driver, int line, char ch)
2260{
2261        struct uart_driver *drv = driver->driver_state;
2262        struct uart_state *state = drv->state + line;
2263        struct uart_port *port;
2264
2265        if (!state || !state->uart_port)
2266                return;
2267
2268        port = state->uart_port;
2269        port->ops->poll_put_char(port, ch);
2270}
2271#endif
2272
2273static const struct tty_operations uart_ops = {
2274        .open           = uart_open,
2275        .close          = uart_close,
2276        .write          = uart_write,
2277        .put_char       = uart_put_char,
2278        .flush_chars    = uart_flush_chars,
2279        .write_room     = uart_write_room,
2280        .chars_in_buffer= uart_chars_in_buffer,
2281        .flush_buffer   = uart_flush_buffer,
2282        .ioctl          = uart_ioctl,
2283        .throttle       = uart_throttle,
2284        .unthrottle     = uart_unthrottle,
2285        .send_xchar     = uart_send_xchar,
2286        .set_termios    = uart_set_termios,
2287        .set_ldisc      = uart_set_ldisc,
2288        .stop           = uart_stop,
2289        .start          = uart_start,
2290        .hangup         = uart_hangup,
2291        .break_ctl      = uart_break_ctl,
2292        .wait_until_sent= uart_wait_until_sent,
2293#ifdef CONFIG_PROC_FS
2294        .proc_fops      = &uart_proc_fops,
2295#endif
2296        .tiocmget       = uart_tiocmget,
2297        .tiocmset       = uart_tiocmset,
2298        .get_icount     = uart_get_icount,
2299#ifdef CONFIG_CONSOLE_POLL
2300        .poll_init      = uart_poll_init,
2301        .poll_get_char  = uart_poll_get_char,
2302        .poll_put_char  = uart_poll_put_char,
2303#endif
2304};
2305
2306static const struct tty_port_operations uart_port_ops = {
2307        .carrier_raised = uart_carrier_raised,
2308        .dtr_rts        = uart_dtr_rts,
2309};
2310
2311/**
2312 *      uart_register_driver - register a driver with the uart core layer
2313 *      @drv: low level driver structure
2314 *
2315 *      Register a uart driver with the core driver.  We in turn register
2316 *      with the tty layer, and initialise the core driver per-port state.
2317 *
2318 *      We have a proc file in /proc/tty/driver which is named after the
2319 *      normal driver.
2320 *
2321 *      drv->port should be NULL, and the per-port structures should be
2322 *      registered using uart_add_one_port after this call has succeeded.
2323 */
2324int uart_register_driver(struct uart_driver *drv)
2325{
2326        struct tty_driver *normal;
2327        int i, retval;
2328
2329        BUG_ON(drv->state);
2330
2331        /*
2332         * Maybe we should be using a slab cache for this, especially if
2333         * we have a large number of ports to handle.
2334         */
2335        drv->state = kzalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL);
2336        if (!drv->state)
2337                goto out;
2338
2339        normal = alloc_tty_driver(drv->nr);
2340        if (!normal)
2341                goto out_kfree;
2342
2343        drv->tty_driver = normal;
2344
2345        normal->owner           = drv->owner;
2346        normal->driver_name     = drv->driver_name;
2347        normal->name            = drv->dev_name;
2348        normal->major           = drv->major;
2349        normal->minor_start     = drv->minor;
2350        normal->type            = TTY_DRIVER_TYPE_SERIAL;
2351        normal->subtype         = SERIAL_TYPE_NORMAL;
2352        normal->init_termios    = tty_std_termios;
2353        normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
2354        normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
2355        normal->flags           = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
2356        normal->driver_state    = drv;
2357        tty_set_operations(normal, &uart_ops);
2358
2359        /*
2360         * Initialise the UART state(s).
2361         */
2362        for (i = 0; i < drv->nr; i++) {
2363                struct uart_state *state = drv->state + i;
2364                struct tty_port *port = &state->port;
2365
2366                tty_port_init(port);
2367                port->ops = &uart_port_ops;
2368                port->close_delay     = 500;    /* .5 seconds */
2369                port->closing_wait    = 30000;  /* 30 seconds */
2370                tasklet_init(&state->tlet, uart_tasklet_action,
2371                             (unsigned long)state);
2372        }
2373
2374        retval = tty_register_driver(normal);
2375        if (retval >= 0)
2376                return retval;
2377
2378        put_tty_driver(normal);
2379out_kfree:
2380        kfree(drv->state);
2381out:
2382        return -ENOMEM;
2383}
2384
2385/**
2386 *      uart_unregister_driver - remove a driver from the uart core layer
2387 *      @drv: low level driver structure
2388 *
2389 *      Remove all references to a driver from the core driver.  The low
2390 *      level driver must have removed all its ports via the
2391 *      uart_remove_one_port() if it registered them with uart_add_one_port().
2392 *      (ie, drv->port == NULL)
2393 */
2394void uart_unregister_driver(struct uart_driver *drv)
2395{
2396        struct tty_driver *p = drv->tty_driver;
2397        tty_unregister_driver(p);
2398        put_tty_driver(p);
2399        kfree(drv->state);
2400        drv->tty_driver = NULL;
2401}
2402
2403struct tty_driver *uart_console_device(struct console *co, int *index)
2404{
2405        struct uart_driver *p = co->data;
2406        *index = co->index;
2407        return p->tty_driver;
2408}
2409
2410/**
2411 *      uart_add_one_port - attach a driver-defined port structure
2412 *      @drv: pointer to the uart low level driver structure for this port
2413 *      @uport: uart port structure to use for this port.
2414 *
2415 *      This allows the driver to register its own uart_port structure
2416 *      with the core driver.  The main purpose is to allow the low
2417 *      level uart drivers to expand uart_port, rather than having yet
2418 *      more levels of structures.
2419 */
2420int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
2421{
2422        struct uart_state *state;
2423        struct tty_port *port;
2424        int ret = 0;
2425        struct device *tty_dev;
2426
2427        BUG_ON(in_interrupt());
2428
2429        if (uport->line >= drv->nr)
2430                return -EINVAL;
2431
2432        state = drv->state + uport->line;
2433        port = &state->port;
2434
2435        mutex_lock(&port_mutex);
2436        mutex_lock(&port->mutex);
2437        if (state->uart_port) {
2438                ret = -EINVAL;
2439                goto out;
2440        }
2441
2442        state->uart_port = uport;
2443        state->pm_state = -1;
2444
2445        uport->cons = drv->cons;
2446        uport->state = state;
2447
2448        /*
2449         * If this port is a console, then the spinlock is already
2450         * initialised.
2451         */
2452        if (!(uart_console(uport) && (uport->cons->flags & CON_ENABLED))) {
2453                spin_lock_init(&uport->lock);
2454                lockdep_set_class(&uport->lock, &port_lock_key);
2455        }
2456
2457        uart_configure_port(drv, state, uport);
2458
2459        /*
2460         * Register the port whether it's detected or not.  This allows
2461         * setserial to be used to alter this ports parameters.
2462         */
2463        tty_dev = tty_register_device(drv->tty_driver, uport->line, uport->dev);
2464        if (likely(!IS_ERR(tty_dev))) {
2465                device_init_wakeup(tty_dev, 1);
2466                device_set_wakeup_enable(tty_dev, 0);
2467        } else
2468                printk(KERN_ERR "Cannot register tty device on line %d\n",
2469                       uport->line);
2470
2471        /*
2472         * Ensure UPF_DEAD is not set.
2473         */
2474        uport->flags &= ~UPF_DEAD;
2475
2476 out:
2477        mutex_unlock(&port->mutex);
2478        mutex_unlock(&port_mutex);
2479
2480        return ret;
2481}
2482
2483/**
2484 *      uart_remove_one_port - detach a driver defined port structure
2485 *      @drv: pointer to the uart low level driver structure for this port
2486 *      @uport: uart port structure for this port
2487 *
2488 *      This unhooks (and hangs up) the specified port structure from the
2489 *      core driver.  No further calls will be made to the low-level code
2490 *      for this port.
2491 */
2492int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
2493{
2494        struct uart_state *state = drv->state + uport->line;
2495        struct tty_port *port = &state->port;
2496
2497        BUG_ON(in_interrupt());
2498
2499        if (state->uart_port != uport)
2500                printk(KERN_ALERT "Removing wrong port: %p != %p\n",
2501                        state->uart_port, uport);
2502
2503        mutex_lock(&port_mutex);
2504
2505        /*
2506         * Mark the port "dead" - this prevents any opens from
2507         * succeeding while we shut down the port.
2508         */
2509        mutex_lock(&port->mutex);
2510        uport->flags |= UPF_DEAD;
2511        mutex_unlock(&port->mutex);
2512
2513        /*
2514         * Remove the devices from the tty layer
2515         */
2516        tty_unregister_device(drv->tty_driver, uport->line);
2517
2518        if (port->tty)
2519                tty_vhangup(port->tty);
2520
2521        /*
2522         * Free the port IO and memory resources, if any.
2523         */
2524        if (uport->type != PORT_UNKNOWN)
2525                uport->ops->release_port(uport);
2526
2527        /*
2528         * Indicate that there isn't a port here anymore.
2529         */
2530        uport->type = PORT_UNKNOWN;
2531
2532        /*
2533         * Kill the tasklet, and free resources.
2534         */
2535        tasklet_kill(&state->tlet);
2536
2537        state->uart_port = NULL;
2538        mutex_unlock(&port_mutex);
2539
2540        return 0;
2541}
2542
2543/*
2544 *      Are the two ports equivalent?
2545 */
2546int uart_match_port(struct uart_port *port1, struct uart_port *port2)
2547{
2548        if (port1->iotype != port2->iotype)
2549                return 0;
2550
2551        switch (port1->iotype) {
2552        case UPIO_PORT:
2553                return (port1->iobase == port2->iobase);
2554        case UPIO_HUB6:
2555                return (port1->iobase == port2->iobase) &&
2556                       (port1->hub6   == port2->hub6);
2557        case UPIO_MEM:
2558        case UPIO_MEM32:
2559        case UPIO_AU:
2560        case UPIO_TSI:
2561        case UPIO_DWAPB:
2562        case UPIO_DWAPB32:
2563                return (port1->mapbase == port2->mapbase);
2564        }
2565        return 0;
2566}
2567EXPORT_SYMBOL(uart_match_port);
2568
2569EXPORT_SYMBOL(uart_write_wakeup);
2570EXPORT_SYMBOL(uart_register_driver);
2571EXPORT_SYMBOL(uart_unregister_driver);
2572EXPORT_SYMBOL(uart_suspend_port);
2573EXPORT_SYMBOL(uart_resume_port);
2574EXPORT_SYMBOL(uart_add_one_port);
2575EXPORT_SYMBOL(uart_remove_one_port);
2576
2577MODULE_DESCRIPTION("Serial driver core");
2578MODULE_LICENSE("GPL");
2579