linux/drivers/tty/serial/8250/8250_core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 *  Universal/legacy driver for 8250/16550-type serial ports
   4 *
   5 *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
   6 *
   7 *  Copyright (C) 2001 Russell King.
   8 *
   9 *  Supports: ISA-compatible 8250/16550 ports
  10 *            PNP 8250/16550 ports
  11 *            early_serial_setup() ports
  12 *            userspace-configurable "phantom" ports
  13 *            "serial8250" platform devices
  14 *            serial8250_register_8250_port() ports
  15 */
  16
  17#include <linux/module.h>
  18#include <linux/moduleparam.h>
  19#include <linux/ioport.h>
  20#include <linux/init.h>
  21#include <linux/console.h>
  22#include <linux/sysrq.h>
  23#include <linux/delay.h>
  24#include <linux/platform_device.h>
  25#include <linux/tty.h>
  26#include <linux/ratelimit.h>
  27#include <linux/tty_flip.h>
  28#include <linux/serial.h>
  29#include <linux/serial_8250.h>
  30#include <linux/nmi.h>
  31#include <linux/mutex.h>
  32#include <linux/slab.h>
  33#include <linux/uaccess.h>
  34#include <linux/pm_runtime.h>
  35#include <linux/io.h>
  36#ifdef CONFIG_SPARC
  37#include <linux/sunserialcore.h>
  38#endif
  39
  40#include <asm/irq.h>
  41
  42#include "8250.h"
  43
  44/*
  45 * Configuration:
  46 *   share_irqs - whether we pass IRQF_SHARED to request_irq().  This option
  47 *                is unsafe when used on edge-triggered interrupts.
  48 */
  49static unsigned int share_irqs = SERIAL8250_SHARE_IRQS;
  50
  51static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS;
  52
  53static struct uart_driver serial8250_reg;
  54
  55static unsigned int skip_txen_test; /* force skip of txen test at init time */
  56
  57#define PASS_LIMIT      512
  58
  59#include <asm/serial.h>
  60/*
  61 * SERIAL_PORT_DFNS tells us about built-in ports that have no
  62 * standard enumeration mechanism.   Platforms that can find all
  63 * serial ports via mechanisms like ACPI or PCI need not supply it.
  64 */
  65#ifndef SERIAL_PORT_DFNS
  66#define SERIAL_PORT_DFNS
  67#endif
  68
  69static const struct old_serial_port old_serial_port[] = {
  70        SERIAL_PORT_DFNS /* defined in asm/serial.h */
  71};
  72
  73#define UART_NR CONFIG_SERIAL_8250_NR_UARTS
  74
  75#ifdef CONFIG_SERIAL_8250_RSA
  76
  77#define PORT_RSA_MAX 4
  78static unsigned long probe_rsa[PORT_RSA_MAX];
  79static unsigned int probe_rsa_count;
  80#endif /* CONFIG_SERIAL_8250_RSA  */
  81
  82struct irq_info {
  83        struct                  hlist_node node;
  84        int                     irq;
  85        spinlock_t              lock;   /* Protects list not the hash */
  86        struct list_head        *head;
  87};
  88
  89#define NR_IRQ_HASH             32      /* Can be adjusted later */
  90static struct hlist_head irq_lists[NR_IRQ_HASH];
  91static DEFINE_MUTEX(hash_mutex);        /* Used to walk the hash */
  92
  93/*
  94 * This is the serial driver's interrupt routine.
  95 *
  96 * Arjan thinks the old way was overly complex, so it got simplified.
  97 * Alan disagrees, saying that need the complexity to handle the weird
  98 * nature of ISA shared interrupts.  (This is a special exception.)
  99 *
 100 * In order to handle ISA shared interrupts properly, we need to check
 101 * that all ports have been serviced, and therefore the ISA interrupt
 102 * line has been de-asserted.
 103 *
 104 * This means we need to loop through all ports. checking that they
 105 * don't have an interrupt pending.
 106 */
 107static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
 108{
 109        struct irq_info *i = dev_id;
 110        struct list_head *l, *end = NULL;
 111        int pass_counter = 0, handled = 0;
 112
 113        pr_debug("%s(%d): start\n", __func__, irq);
 114
 115        spin_lock(&i->lock);
 116
 117        l = i->head;
 118        do {
 119                struct uart_8250_port *up;
 120                struct uart_port *port;
 121
 122                up = list_entry(l, struct uart_8250_port, list);
 123                port = &up->port;
 124
 125                if (port->handle_irq(port)) {
 126                        handled = 1;
 127                        end = NULL;
 128                } else if (end == NULL)
 129                        end = l;
 130
 131                l = l->next;
 132
 133                if (l == i->head && pass_counter++ > PASS_LIMIT)
 134                        break;
 135        } while (l != end);
 136
 137        spin_unlock(&i->lock);
 138
 139        pr_debug("%s(%d): end\n", __func__, irq);
 140
 141        return IRQ_RETVAL(handled);
 142}
 143
 144/*
 145 * To support ISA shared interrupts, we need to have one interrupt
 146 * handler that ensures that the IRQ line has been deasserted
 147 * before returning.  Failing to do this will result in the IRQ
 148 * line being stuck active, and, since ISA irqs are edge triggered,
 149 * no more IRQs will be seen.
 150 */
 151static void serial_do_unlink(struct irq_info *i, struct uart_8250_port *up)
 152{
 153        spin_lock_irq(&i->lock);
 154
 155        if (!list_empty(i->head)) {
 156                if (i->head == &up->list)
 157                        i->head = i->head->next;
 158                list_del(&up->list);
 159        } else {
 160                BUG_ON(i->head != &up->list);
 161                i->head = NULL;
 162        }
 163        spin_unlock_irq(&i->lock);
 164        /* List empty so throw away the hash node */
 165        if (i->head == NULL) {
 166                hlist_del(&i->node);
 167                kfree(i);
 168        }
 169}
 170
 171static int serial_link_irq_chain(struct uart_8250_port *up)
 172{
 173        struct hlist_head *h;
 174        struct hlist_node *n;
 175        struct irq_info *i;
 176        int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
 177
 178        mutex_lock(&hash_mutex);
 179
 180        h = &irq_lists[up->port.irq % NR_IRQ_HASH];
 181
 182        hlist_for_each(n, h) {
 183                i = hlist_entry(n, struct irq_info, node);
 184                if (i->irq == up->port.irq)
 185                        break;
 186        }
 187
 188        if (n == NULL) {
 189                i = kzalloc(sizeof(struct irq_info), GFP_KERNEL);
 190                if (i == NULL) {
 191                        mutex_unlock(&hash_mutex);
 192                        return -ENOMEM;
 193                }
 194                spin_lock_init(&i->lock);
 195                i->irq = up->port.irq;
 196                hlist_add_head(&i->node, h);
 197        }
 198        mutex_unlock(&hash_mutex);
 199
 200        spin_lock_irq(&i->lock);
 201
 202        if (i->head) {
 203                list_add(&up->list, i->head);
 204                spin_unlock_irq(&i->lock);
 205
 206                ret = 0;
 207        } else {
 208                INIT_LIST_HEAD(&up->list);
 209                i->head = &up->list;
 210                spin_unlock_irq(&i->lock);
 211                irq_flags |= up->port.irqflags;
 212                ret = request_irq(up->port.irq, serial8250_interrupt,
 213                                  irq_flags, up->port.name, i);
 214                if (ret < 0)
 215                        serial_do_unlink(i, up);
 216        }
 217
 218        return ret;
 219}
 220
 221static void serial_unlink_irq_chain(struct uart_8250_port *up)
 222{
 223        /*
 224         * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
 225         * but no, we are not going to take a patch that assigns NULL below.
 226         */
 227        struct irq_info *i;
 228        struct hlist_node *n;
 229        struct hlist_head *h;
 230
 231        mutex_lock(&hash_mutex);
 232
 233        h = &irq_lists[up->port.irq % NR_IRQ_HASH];
 234
 235        hlist_for_each(n, h) {
 236                i = hlist_entry(n, struct irq_info, node);
 237                if (i->irq == up->port.irq)
 238                        break;
 239        }
 240
 241        BUG_ON(n == NULL);
 242        BUG_ON(i->head == NULL);
 243
 244        if (list_empty(i->head))
 245                free_irq(up->port.irq, i);
 246
 247        serial_do_unlink(i, up);
 248        mutex_unlock(&hash_mutex);
 249}
 250
 251/*
 252 * This function is used to handle ports that do not have an
 253 * interrupt.  This doesn't work very well for 16450's, but gives
 254 * barely passable results for a 16550A.  (Although at the expense
 255 * of much CPU overhead).
 256 */
 257static void serial8250_timeout(struct timer_list *t)
 258{
 259        struct uart_8250_port *up = from_timer(up, t, timer);
 260
 261        up->port.handle_irq(&up->port);
 262        mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port));
 263}
 264
 265static void serial8250_backup_timeout(struct timer_list *t)
 266{
 267        struct uart_8250_port *up = from_timer(up, t, timer);
 268        unsigned int iir, ier = 0, lsr;
 269        unsigned long flags;
 270
 271        spin_lock_irqsave(&up->port.lock, flags);
 272
 273        /*
 274         * Must disable interrupts or else we risk racing with the interrupt
 275         * based handler.
 276         */
 277        if (up->port.irq) {
 278                ier = serial_in(up, UART_IER);
 279                serial_out(up, UART_IER, 0);
 280        }
 281
 282        iir = serial_in(up, UART_IIR);
 283
 284        /*
 285         * This should be a safe test for anyone who doesn't trust the
 286         * IIR bits on their UART, but it's specifically designed for
 287         * the "Diva" UART used on the management processor on many HP
 288         * ia64 and parisc boxes.
 289         */
 290        lsr = serial_in(up, UART_LSR);
 291        up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
 292        if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) &&
 293            (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) &&
 294            (lsr & UART_LSR_THRE)) {
 295                iir &= ~(UART_IIR_ID | UART_IIR_NO_INT);
 296                iir |= UART_IIR_THRI;
 297        }
 298
 299        if (!(iir & UART_IIR_NO_INT))
 300                serial8250_tx_chars(up);
 301
 302        if (up->port.irq)
 303                serial_out(up, UART_IER, ier);
 304
 305        spin_unlock_irqrestore(&up->port.lock, flags);
 306
 307        /* Standard timer interval plus 0.2s to keep the port running */
 308        mod_timer(&up->timer,
 309                jiffies + uart_poll_timeout(&up->port) + HZ / 5);
 310}
 311
 312static int univ8250_setup_irq(struct uart_8250_port *up)
 313{
 314        struct uart_port *port = &up->port;
 315        int retval = 0;
 316
 317        /*
 318         * The above check will only give an accurate result the first time
 319         * the port is opened so this value needs to be preserved.
 320         */
 321        if (up->bugs & UART_BUG_THRE) {
 322                pr_debug("%s - using backup timer\n", port->name);
 323
 324                up->timer.function = serial8250_backup_timeout;
 325                mod_timer(&up->timer, jiffies +
 326                          uart_poll_timeout(port) + HZ / 5);
 327        }
 328
 329        /*
 330         * If the "interrupt" for this port doesn't correspond with any
 331         * hardware interrupt, we use a timer-based system.  The original
 332         * driver used to do this with IRQ0.
 333         */
 334        if (!port->irq) {
 335                mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
 336        } else
 337                retval = serial_link_irq_chain(up);
 338
 339        return retval;
 340}
 341
 342static void univ8250_release_irq(struct uart_8250_port *up)
 343{
 344        struct uart_port *port = &up->port;
 345
 346        del_timer_sync(&up->timer);
 347        up->timer.function = serial8250_timeout;
 348        if (port->irq)
 349                serial_unlink_irq_chain(up);
 350}
 351
 352#ifdef CONFIG_SERIAL_8250_RSA
 353static int serial8250_request_rsa_resource(struct uart_8250_port *up)
 354{
 355        unsigned long start = UART_RSA_BASE << up->port.regshift;
 356        unsigned int size = 8 << up->port.regshift;
 357        struct uart_port *port = &up->port;
 358        int ret = -EINVAL;
 359
 360        switch (port->iotype) {
 361        case UPIO_HUB6:
 362        case UPIO_PORT:
 363                start += port->iobase;
 364                if (request_region(start, size, "serial-rsa"))
 365                        ret = 0;
 366                else
 367                        ret = -EBUSY;
 368                break;
 369        }
 370
 371        return ret;
 372}
 373
 374static void serial8250_release_rsa_resource(struct uart_8250_port *up)
 375{
 376        unsigned long offset = UART_RSA_BASE << up->port.regshift;
 377        unsigned int size = 8 << up->port.regshift;
 378        struct uart_port *port = &up->port;
 379
 380        switch (port->iotype) {
 381        case UPIO_HUB6:
 382        case UPIO_PORT:
 383                release_region(port->iobase + offset, size);
 384                break;
 385        }
 386}
 387#endif
 388
 389static const struct uart_ops *base_ops;
 390static struct uart_ops univ8250_port_ops;
 391
 392static const struct uart_8250_ops univ8250_driver_ops = {
 393        .setup_irq      = univ8250_setup_irq,
 394        .release_irq    = univ8250_release_irq,
 395};
 396
 397static struct uart_8250_port serial8250_ports[UART_NR];
 398
 399/**
 400 * serial8250_get_port - retrieve struct uart_8250_port
 401 * @line: serial line number
 402 *
 403 * This function retrieves struct uart_8250_port for the specific line.
 404 * This struct *must* *not* be used to perform a 8250 or serial core operation
 405 * which is not accessible otherwise. Its only purpose is to make the struct
 406 * accessible to the runtime-pm callbacks for context suspend/restore.
 407 * The lock assumption made here is none because runtime-pm suspend/resume
 408 * callbacks should not be invoked if there is any operation performed on the
 409 * port.
 410 */
 411struct uart_8250_port *serial8250_get_port(int line)
 412{
 413        return &serial8250_ports[line];
 414}
 415EXPORT_SYMBOL_GPL(serial8250_get_port);
 416
 417static void (*serial8250_isa_config)(int port, struct uart_port *up,
 418        u32 *capabilities);
 419
 420void serial8250_set_isa_configurator(
 421        void (*v)(int port, struct uart_port *up, u32 *capabilities))
 422{
 423        serial8250_isa_config = v;
 424}
 425EXPORT_SYMBOL(serial8250_set_isa_configurator);
 426
 427#ifdef CONFIG_SERIAL_8250_RSA
 428
 429static void univ8250_config_port(struct uart_port *port, int flags)
 430{
 431        struct uart_8250_port *up = up_to_u8250p(port);
 432
 433        up->probe &= ~UART_PROBE_RSA;
 434        if (port->type == PORT_RSA) {
 435                if (serial8250_request_rsa_resource(up) == 0)
 436                        up->probe |= UART_PROBE_RSA;
 437        } else if (flags & UART_CONFIG_TYPE) {
 438                int i;
 439
 440                for (i = 0; i < probe_rsa_count; i++) {
 441                        if (probe_rsa[i] == up->port.iobase) {
 442                                if (serial8250_request_rsa_resource(up) == 0)
 443                                        up->probe |= UART_PROBE_RSA;
 444                                break;
 445                        }
 446                }
 447        }
 448
 449        base_ops->config_port(port, flags);
 450
 451        if (port->type != PORT_RSA && up->probe & UART_PROBE_RSA)
 452                serial8250_release_rsa_resource(up);
 453}
 454
 455static int univ8250_request_port(struct uart_port *port)
 456{
 457        struct uart_8250_port *up = up_to_u8250p(port);
 458        int ret;
 459
 460        ret = base_ops->request_port(port);
 461        if (ret == 0 && port->type == PORT_RSA) {
 462                ret = serial8250_request_rsa_resource(up);
 463                if (ret < 0)
 464                        base_ops->release_port(port);
 465        }
 466
 467        return ret;
 468}
 469
 470static void univ8250_release_port(struct uart_port *port)
 471{
 472        struct uart_8250_port *up = up_to_u8250p(port);
 473
 474        if (port->type == PORT_RSA)
 475                serial8250_release_rsa_resource(up);
 476        base_ops->release_port(port);
 477}
 478
 479static void univ8250_rsa_support(struct uart_ops *ops)
 480{
 481        ops->config_port  = univ8250_config_port;
 482        ops->request_port = univ8250_request_port;
 483        ops->release_port = univ8250_release_port;
 484}
 485
 486#else
 487#define univ8250_rsa_support(x)         do { } while (0)
 488#endif /* CONFIG_SERIAL_8250_RSA */
 489
 490static inline void serial8250_apply_quirks(struct uart_8250_port *up)
 491{
 492        up->port.quirks |= skip_txen_test ? UPQ_NO_TXEN_TEST : 0;
 493}
 494
 495static void __init serial8250_isa_init_ports(void)
 496{
 497        struct uart_8250_port *up;
 498        static int first = 1;
 499        int i, irqflag = 0;
 500
 501        if (!first)
 502                return;
 503        first = 0;
 504
 505        if (nr_uarts > UART_NR)
 506                nr_uarts = UART_NR;
 507
 508        for (i = 0; i < nr_uarts; i++) {
 509                struct uart_8250_port *up = &serial8250_ports[i];
 510                struct uart_port *port = &up->port;
 511
 512                port->line = i;
 513                serial8250_init_port(up);
 514                if (!base_ops)
 515                        base_ops = port->ops;
 516                port->ops = &univ8250_port_ops;
 517
 518                timer_setup(&up->timer, serial8250_timeout, 0);
 519
 520                up->ops = &univ8250_driver_ops;
 521
 522                /*
 523                 * ALPHA_KLUDGE_MCR needs to be killed.
 524                 */
 525                up->mcr_mask = ~ALPHA_KLUDGE_MCR;
 526                up->mcr_force = ALPHA_KLUDGE_MCR;
 527        }
 528
 529        /* chain base port ops to support Remote Supervisor Adapter */
 530        univ8250_port_ops = *base_ops;
 531        univ8250_rsa_support(&univ8250_port_ops);
 532
 533        if (share_irqs)
 534                irqflag = IRQF_SHARED;
 535
 536        for (i = 0, up = serial8250_ports;
 537             i < ARRAY_SIZE(old_serial_port) && i < nr_uarts;
 538             i++, up++) {
 539                struct uart_port *port = &up->port;
 540
 541                port->iobase   = old_serial_port[i].port;
 542                port->irq      = irq_canonicalize(old_serial_port[i].irq);
 543                port->irqflags = 0;
 544                port->uartclk  = old_serial_port[i].baud_base * 16;
 545                port->flags    = old_serial_port[i].flags;
 546                port->hub6     = 0;
 547                port->membase  = old_serial_port[i].iomem_base;
 548                port->iotype   = old_serial_port[i].io_type;
 549                port->regshift = old_serial_port[i].iomem_reg_shift;
 550                serial8250_set_defaults(up);
 551
 552                port->irqflags |= irqflag;
 553                if (serial8250_isa_config != NULL)
 554                        serial8250_isa_config(i, &up->port, &up->capabilities);
 555        }
 556}
 557
 558static void __init
 559serial8250_register_ports(struct uart_driver *drv, struct device *dev)
 560{
 561        int i;
 562
 563        for (i = 0; i < nr_uarts; i++) {
 564                struct uart_8250_port *up = &serial8250_ports[i];
 565
 566                if (up->port.type == PORT_8250_CIR)
 567                        continue;
 568
 569                if (up->port.dev)
 570                        continue;
 571
 572                up->port.dev = dev;
 573
 574                serial8250_apply_quirks(up);
 575                uart_add_one_port(drv, &up->port);
 576        }
 577}
 578
 579#ifdef CONFIG_SERIAL_8250_CONSOLE
 580
 581static void univ8250_console_write(struct console *co, const char *s,
 582                                   unsigned int count)
 583{
 584        struct uart_8250_port *up = &serial8250_ports[co->index];
 585
 586        serial8250_console_write(up, s, count);
 587}
 588
 589static int univ8250_console_setup(struct console *co, char *options)
 590{
 591        struct uart_port *port;
 592        int retval;
 593
 594        /*
 595         * Check whether an invalid uart number has been specified, and
 596         * if so, search for the first available port that does have
 597         * console support.
 598         */
 599        if (co->index >= nr_uarts)
 600                co->index = 0;
 601        port = &serial8250_ports[co->index].port;
 602        /* link port to console */
 603        port->cons = co;
 604
 605        retval = serial8250_console_setup(port, options, false);
 606        if (retval != 0)
 607                port->cons = NULL;
 608        return retval;
 609}
 610
 611/**
 612 *      univ8250_console_match - non-standard console matching
 613 *      @co:      registering console
 614 *      @name:    name from console command line
 615 *      @idx:     index from console command line
 616 *      @options: ptr to option string from console command line
 617 *
 618 *      Only attempts to match console command lines of the form:
 619 *          console=uart[8250],io|mmio|mmio16|mmio32,<addr>[,<options>]
 620 *          console=uart[8250],0x<addr>[,<options>]
 621 *      This form is used to register an initial earlycon boot console and
 622 *      replace it with the serial8250_console at 8250 driver init.
 623 *
 624 *      Performs console setup for a match (as required by interface)
 625 *      If no <options> are specified, then assume the h/w is already setup.
 626 *
 627 *      Returns 0 if console matches; otherwise non-zero to use default matching
 628 */
 629static int univ8250_console_match(struct console *co, char *name, int idx,
 630                                  char *options)
 631{
 632        char match[] = "uart";  /* 8250-specific earlycon name */
 633        unsigned char iotype;
 634        resource_size_t addr;
 635        int i;
 636
 637        if (strncmp(name, match, 4) != 0)
 638                return -ENODEV;
 639
 640        if (uart_parse_earlycon(options, &iotype, &addr, &options))
 641                return -ENODEV;
 642
 643        /* try to match the port specified on the command line */
 644        for (i = 0; i < nr_uarts; i++) {
 645                struct uart_port *port = &serial8250_ports[i].port;
 646
 647                if (port->iotype != iotype)
 648                        continue;
 649                if ((iotype == UPIO_MEM || iotype == UPIO_MEM16 ||
 650                     iotype == UPIO_MEM32 || iotype == UPIO_MEM32BE)
 651                    && (port->mapbase != addr))
 652                        continue;
 653                if (iotype == UPIO_PORT && port->iobase != addr)
 654                        continue;
 655
 656                co->index = i;
 657                port->cons = co;
 658                return serial8250_console_setup(port, options, true);
 659        }
 660
 661        return -ENODEV;
 662}
 663
 664static struct console univ8250_console = {
 665        .name           = "ttyS",
 666        .write          = univ8250_console_write,
 667        .device         = uart_console_device,
 668        .setup          = univ8250_console_setup,
 669        .match          = univ8250_console_match,
 670        .flags          = CON_PRINTBUFFER | CON_ANYTIME,
 671        .index          = -1,
 672        .data           = &serial8250_reg,
 673};
 674
 675static int __init univ8250_console_init(void)
 676{
 677        if (nr_uarts == 0)
 678                return -ENODEV;
 679
 680        serial8250_isa_init_ports();
 681        register_console(&univ8250_console);
 682        return 0;
 683}
 684console_initcall(univ8250_console_init);
 685
 686#define SERIAL8250_CONSOLE      (&univ8250_console)
 687#else
 688#define SERIAL8250_CONSOLE      NULL
 689#endif
 690
 691static struct uart_driver serial8250_reg = {
 692        .owner                  = THIS_MODULE,
 693        .driver_name            = "serial",
 694        .dev_name               = "ttyS",
 695        .major                  = TTY_MAJOR,
 696        .minor                  = 64,
 697        .cons                   = SERIAL8250_CONSOLE,
 698};
 699
 700/*
 701 * early_serial_setup - early registration for 8250 ports
 702 *
 703 * Setup an 8250 port structure prior to console initialisation.  Use
 704 * after console initialisation will cause undefined behaviour.
 705 */
 706int __init early_serial_setup(struct uart_port *port)
 707{
 708        struct uart_port *p;
 709
 710        if (port->line >= ARRAY_SIZE(serial8250_ports) || nr_uarts == 0)
 711                return -ENODEV;
 712
 713        serial8250_isa_init_ports();
 714        p = &serial8250_ports[port->line].port;
 715        p->iobase       = port->iobase;
 716        p->membase      = port->membase;
 717        p->irq          = port->irq;
 718        p->irqflags     = port->irqflags;
 719        p->uartclk      = port->uartclk;
 720        p->fifosize     = port->fifosize;
 721        p->regshift     = port->regshift;
 722        p->iotype       = port->iotype;
 723        p->flags        = port->flags;
 724        p->mapbase      = port->mapbase;
 725        p->mapsize      = port->mapsize;
 726        p->private_data = port->private_data;
 727        p->type         = port->type;
 728        p->line         = port->line;
 729
 730        serial8250_set_defaults(up_to_u8250p(p));
 731
 732        if (port->serial_in)
 733                p->serial_in = port->serial_in;
 734        if (port->serial_out)
 735                p->serial_out = port->serial_out;
 736        if (port->handle_irq)
 737                p->handle_irq = port->handle_irq;
 738
 739        return 0;
 740}
 741
 742/**
 743 *      serial8250_suspend_port - suspend one serial port
 744 *      @line:  serial line number
 745 *
 746 *      Suspend one serial port.
 747 */
 748void serial8250_suspend_port(int line)
 749{
 750        struct uart_8250_port *up = &serial8250_ports[line];
 751        struct uart_port *port = &up->port;
 752
 753        if (!console_suspend_enabled && uart_console(port) &&
 754            port->type != PORT_8250) {
 755                unsigned char canary = 0xa5;
 756                serial_out(up, UART_SCR, canary);
 757                if (serial_in(up, UART_SCR) == canary)
 758                        up->canary = canary;
 759        }
 760
 761        uart_suspend_port(&serial8250_reg, port);
 762}
 763EXPORT_SYMBOL(serial8250_suspend_port);
 764
 765/**
 766 *      serial8250_resume_port - resume one serial port
 767 *      @line:  serial line number
 768 *
 769 *      Resume one serial port.
 770 */
 771void serial8250_resume_port(int line)
 772{
 773        struct uart_8250_port *up = &serial8250_ports[line];
 774        struct uart_port *port = &up->port;
 775
 776        up->canary = 0;
 777
 778        if (up->capabilities & UART_NATSEMI) {
 779                /* Ensure it's still in high speed mode */
 780                serial_port_out(port, UART_LCR, 0xE0);
 781
 782                ns16550a_goto_highspeed(up);
 783
 784                serial_port_out(port, UART_LCR, 0);
 785                port->uartclk = 921600*16;
 786        }
 787        uart_resume_port(&serial8250_reg, port);
 788}
 789EXPORT_SYMBOL(serial8250_resume_port);
 790
 791/*
 792 * Register a set of serial devices attached to a platform device.  The
 793 * list is terminated with a zero flags entry, which means we expect
 794 * all entries to have at least UPF_BOOT_AUTOCONF set.
 795 */
 796static int serial8250_probe(struct platform_device *dev)
 797{
 798        struct plat_serial8250_port *p = dev_get_platdata(&dev->dev);
 799        struct uart_8250_port uart;
 800        int ret, i, irqflag = 0;
 801
 802        memset(&uart, 0, sizeof(uart));
 803
 804        if (share_irqs)
 805                irqflag = IRQF_SHARED;
 806
 807        for (i = 0; p && p->flags != 0; p++, i++) {
 808                uart.port.iobase        = p->iobase;
 809                uart.port.membase       = p->membase;
 810                uart.port.irq           = p->irq;
 811                uart.port.irqflags      = p->irqflags;
 812                uart.port.uartclk       = p->uartclk;
 813                uart.port.regshift      = p->regshift;
 814                uart.port.iotype        = p->iotype;
 815                uart.port.flags         = p->flags;
 816                uart.port.mapbase       = p->mapbase;
 817                uart.port.hub6          = p->hub6;
 818                uart.port.private_data  = p->private_data;
 819                uart.port.type          = p->type;
 820                uart.port.serial_in     = p->serial_in;
 821                uart.port.serial_out    = p->serial_out;
 822                uart.port.handle_irq    = p->handle_irq;
 823                uart.port.handle_break  = p->handle_break;
 824                uart.port.set_termios   = p->set_termios;
 825                uart.port.set_ldisc     = p->set_ldisc;
 826                uart.port.get_mctrl     = p->get_mctrl;
 827                uart.port.pm            = p->pm;
 828                uart.port.dev           = &dev->dev;
 829                uart.port.irqflags      |= irqflag;
 830                ret = serial8250_register_8250_port(&uart);
 831                if (ret < 0) {
 832                        dev_err(&dev->dev, "unable to register port at index %d "
 833                                "(IO%lx MEM%llx IRQ%d): %d\n", i,
 834                                p->iobase, (unsigned long long)p->mapbase,
 835                                p->irq, ret);
 836                }
 837        }
 838        return 0;
 839}
 840
 841/*
 842 * Remove serial ports registered against a platform device.
 843 */
 844static int serial8250_remove(struct platform_device *dev)
 845{
 846        int i;
 847
 848        for (i = 0; i < nr_uarts; i++) {
 849                struct uart_8250_port *up = &serial8250_ports[i];
 850
 851                if (up->port.dev == &dev->dev)
 852                        serial8250_unregister_port(i);
 853        }
 854        return 0;
 855}
 856
 857static int serial8250_suspend(struct platform_device *dev, pm_message_t state)
 858{
 859        int i;
 860
 861        for (i = 0; i < UART_NR; i++) {
 862                struct uart_8250_port *up = &serial8250_ports[i];
 863
 864                if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
 865                        uart_suspend_port(&serial8250_reg, &up->port);
 866        }
 867
 868        return 0;
 869}
 870
 871static int serial8250_resume(struct platform_device *dev)
 872{
 873        int i;
 874
 875        for (i = 0; i < UART_NR; i++) {
 876                struct uart_8250_port *up = &serial8250_ports[i];
 877
 878                if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
 879                        serial8250_resume_port(i);
 880        }
 881
 882        return 0;
 883}
 884
 885static struct platform_driver serial8250_isa_driver = {
 886        .probe          = serial8250_probe,
 887        .remove         = serial8250_remove,
 888        .suspend        = serial8250_suspend,
 889        .resume         = serial8250_resume,
 890        .driver         = {
 891                .name   = "serial8250",
 892        },
 893};
 894
 895/*
 896 * This "device" covers _all_ ISA 8250-compatible serial devices listed
 897 * in the table in include/asm/serial.h
 898 */
 899static struct platform_device *serial8250_isa_devs;
 900
 901/*
 902 * serial8250_register_8250_port and serial8250_unregister_port allows for
 903 * 16x50 serial ports to be configured at run-time, to support PCMCIA
 904 * modems and PCI multiport cards.
 905 */
 906static DEFINE_MUTEX(serial_mutex);
 907
 908static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *port)
 909{
 910        int i;
 911
 912        /*
 913         * First, find a port entry which matches.
 914         */
 915        for (i = 0; i < nr_uarts; i++)
 916                if (uart_match_port(&serial8250_ports[i].port, port))
 917                        return &serial8250_ports[i];
 918
 919        /* try line number first if still available */
 920        i = port->line;
 921        if (i < nr_uarts && serial8250_ports[i].port.type == PORT_UNKNOWN &&
 922                        serial8250_ports[i].port.iobase == 0)
 923                return &serial8250_ports[i];
 924        /*
 925         * We didn't find a matching entry, so look for the first
 926         * free entry.  We look for one which hasn't been previously
 927         * used (indicated by zero iobase).
 928         */
 929        for (i = 0; i < nr_uarts; i++)
 930                if (serial8250_ports[i].port.type == PORT_UNKNOWN &&
 931                    serial8250_ports[i].port.iobase == 0)
 932                        return &serial8250_ports[i];
 933
 934        /*
 935         * That also failed.  Last resort is to find any entry which
 936         * doesn't have a real port associated with it.
 937         */
 938        for (i = 0; i < nr_uarts; i++)
 939                if (serial8250_ports[i].port.type == PORT_UNKNOWN)
 940                        return &serial8250_ports[i];
 941
 942        return NULL;
 943}
 944
 945/**
 946 *      serial8250_register_8250_port - register a serial port
 947 *      @up: serial port template
 948 *
 949 *      Configure the serial port specified by the request. If the
 950 *      port exists and is in use, it is hung up and unregistered
 951 *      first.
 952 *
 953 *      The port is then probed and if necessary the IRQ is autodetected
 954 *      If this fails an error is returned.
 955 *
 956 *      On success the port is ready to use and the line number is returned.
 957 */
 958int serial8250_register_8250_port(struct uart_8250_port *up)
 959{
 960        struct uart_8250_port *uart;
 961        int ret = -ENOSPC;
 962
 963        if (up->port.uartclk == 0)
 964                return -EINVAL;
 965
 966        mutex_lock(&serial_mutex);
 967
 968        uart = serial8250_find_match_or_unused(&up->port);
 969        if (uart && uart->port.type != PORT_8250_CIR) {
 970                if (uart->port.dev)
 971                        uart_remove_one_port(&serial8250_reg, &uart->port);
 972
 973                uart->port.iobase       = up->port.iobase;
 974                uart->port.membase      = up->port.membase;
 975                uart->port.irq          = up->port.irq;
 976                uart->port.irqflags     = up->port.irqflags;
 977                uart->port.uartclk      = up->port.uartclk;
 978                uart->port.fifosize     = up->port.fifosize;
 979                uart->port.regshift     = up->port.regshift;
 980                uart->port.iotype       = up->port.iotype;
 981                uart->port.flags        = up->port.flags | UPF_BOOT_AUTOCONF;
 982                uart->bugs              = up->bugs;
 983                uart->port.mapbase      = up->port.mapbase;
 984                uart->port.mapsize      = up->port.mapsize;
 985                uart->port.private_data = up->port.private_data;
 986                uart->tx_loadsz         = up->tx_loadsz;
 987                uart->capabilities      = up->capabilities;
 988                uart->port.throttle     = up->port.throttle;
 989                uart->port.unthrottle   = up->port.unthrottle;
 990                uart->port.rs485_config = up->port.rs485_config;
 991                uart->port.rs485        = up->port.rs485;
 992                uart->dma               = up->dma;
 993
 994                /* Take tx_loadsz from fifosize if it wasn't set separately */
 995                if (uart->port.fifosize && !uart->tx_loadsz)
 996                        uart->tx_loadsz = uart->port.fifosize;
 997
 998                if (up->port.dev)
 999                        uart->port.dev = up->port.dev;
1000
1001                if (up->port.flags & UPF_FIXED_TYPE)
1002                        uart->port.type = up->port.type;
1003
1004                serial8250_set_defaults(uart);
1005
1006                /* Possibly override default I/O functions.  */
1007                if (up->port.serial_in)
1008                        uart->port.serial_in = up->port.serial_in;
1009                if (up->port.serial_out)
1010                        uart->port.serial_out = up->port.serial_out;
1011                if (up->port.handle_irq)
1012                        uart->port.handle_irq = up->port.handle_irq;
1013                /*  Possibly override set_termios call */
1014                if (up->port.set_termios)
1015                        uart->port.set_termios = up->port.set_termios;
1016                if (up->port.set_ldisc)
1017                        uart->port.set_ldisc = up->port.set_ldisc;
1018                if (up->port.get_mctrl)
1019                        uart->port.get_mctrl = up->port.get_mctrl;
1020                if (up->port.set_mctrl)
1021                        uart->port.set_mctrl = up->port.set_mctrl;
1022                if (up->port.get_divisor)
1023                        uart->port.get_divisor = up->port.get_divisor;
1024                if (up->port.set_divisor)
1025                        uart->port.set_divisor = up->port.set_divisor;
1026                if (up->port.startup)
1027                        uart->port.startup = up->port.startup;
1028                if (up->port.shutdown)
1029                        uart->port.shutdown = up->port.shutdown;
1030                if (up->port.pm)
1031                        uart->port.pm = up->port.pm;
1032                if (up->port.handle_break)
1033                        uart->port.handle_break = up->port.handle_break;
1034                if (up->dl_read)
1035                        uart->dl_read = up->dl_read;
1036                if (up->dl_write)
1037                        uart->dl_write = up->dl_write;
1038
1039                if (uart->port.type != PORT_8250_CIR) {
1040                        if (serial8250_isa_config != NULL)
1041                                serial8250_isa_config(0, &uart->port,
1042                                                &uart->capabilities);
1043
1044                        serial8250_apply_quirks(uart);
1045                        ret = uart_add_one_port(&serial8250_reg,
1046                                                &uart->port);
1047                        if (ret == 0)
1048                                ret = uart->port.line;
1049                } else {
1050                        dev_info(uart->port.dev,
1051                                "skipping CIR port at 0x%lx / 0x%llx, IRQ %d\n",
1052                                uart->port.iobase,
1053                                (unsigned long long)uart->port.mapbase,
1054                                uart->port.irq);
1055
1056                        ret = 0;
1057                }
1058        }
1059        mutex_unlock(&serial_mutex);
1060
1061        return ret;
1062}
1063EXPORT_SYMBOL(serial8250_register_8250_port);
1064
1065/**
1066 *      serial8250_unregister_port - remove a 16x50 serial port at runtime
1067 *      @line: serial line number
1068 *
1069 *      Remove one serial port.  This may not be called from interrupt
1070 *      context.  We hand the port back to the our control.
1071 */
1072void serial8250_unregister_port(int line)
1073{
1074        struct uart_8250_port *uart = &serial8250_ports[line];
1075
1076        mutex_lock(&serial_mutex);
1077
1078        if (uart->em485) {
1079                unsigned long flags;
1080
1081                spin_lock_irqsave(&uart->port.lock, flags);
1082                serial8250_em485_destroy(uart);
1083                spin_unlock_irqrestore(&uart->port.lock, flags);
1084        }
1085
1086        uart_remove_one_port(&serial8250_reg, &uart->port);
1087        if (serial8250_isa_devs) {
1088                uart->port.flags &= ~UPF_BOOT_AUTOCONF;
1089                uart->port.type = PORT_UNKNOWN;
1090                uart->port.dev = &serial8250_isa_devs->dev;
1091                uart->capabilities = 0;
1092                serial8250_apply_quirks(uart);
1093                uart_add_one_port(&serial8250_reg, &uart->port);
1094        } else {
1095                uart->port.dev = NULL;
1096        }
1097        mutex_unlock(&serial_mutex);
1098}
1099EXPORT_SYMBOL(serial8250_unregister_port);
1100
1101static int __init serial8250_init(void)
1102{
1103        int ret;
1104
1105        if (nr_uarts == 0)
1106                return -ENODEV;
1107
1108        serial8250_isa_init_ports();
1109
1110        pr_info("Serial: 8250/16550 driver, %d ports, IRQ sharing %sabled\n",
1111                nr_uarts, share_irqs ? "en" : "dis");
1112
1113#ifdef CONFIG_SPARC
1114        ret = sunserial_register_minors(&serial8250_reg, UART_NR);
1115#else
1116        serial8250_reg.nr = UART_NR;
1117        ret = uart_register_driver(&serial8250_reg);
1118#endif
1119        if (ret)
1120                goto out;
1121
1122        ret = serial8250_pnp_init();
1123        if (ret)
1124                goto unreg_uart_drv;
1125
1126        serial8250_isa_devs = platform_device_alloc("serial8250",
1127                                                    PLAT8250_DEV_LEGACY);
1128        if (!serial8250_isa_devs) {
1129                ret = -ENOMEM;
1130                goto unreg_pnp;
1131        }
1132
1133        ret = platform_device_add(serial8250_isa_devs);
1134        if (ret)
1135                goto put_dev;
1136
1137        serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev);
1138
1139        ret = platform_driver_register(&serial8250_isa_driver);
1140        if (ret == 0)
1141                goto out;
1142
1143        platform_device_del(serial8250_isa_devs);
1144put_dev:
1145        platform_device_put(serial8250_isa_devs);
1146unreg_pnp:
1147        serial8250_pnp_exit();
1148unreg_uart_drv:
1149#ifdef CONFIG_SPARC
1150        sunserial_unregister_minors(&serial8250_reg, UART_NR);
1151#else
1152        uart_unregister_driver(&serial8250_reg);
1153#endif
1154out:
1155        return ret;
1156}
1157
1158static void __exit serial8250_exit(void)
1159{
1160        struct platform_device *isa_dev = serial8250_isa_devs;
1161
1162        /*
1163         * This tells serial8250_unregister_port() not to re-register
1164         * the ports (thereby making serial8250_isa_driver permanently
1165         * in use.)
1166         */
1167        serial8250_isa_devs = NULL;
1168
1169        platform_driver_unregister(&serial8250_isa_driver);
1170        platform_device_unregister(isa_dev);
1171
1172        serial8250_pnp_exit();
1173
1174#ifdef CONFIG_SPARC
1175        sunserial_unregister_minors(&serial8250_reg, UART_NR);
1176#else
1177        uart_unregister_driver(&serial8250_reg);
1178#endif
1179}
1180
1181module_init(serial8250_init);
1182module_exit(serial8250_exit);
1183
1184MODULE_LICENSE("GPL");
1185MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
1186
1187module_param_hw(share_irqs, uint, other, 0644);
1188MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices (unsafe)");
1189
1190module_param(nr_uarts, uint, 0644);
1191MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")");
1192
1193module_param(skip_txen_test, uint, 0644);
1194MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time");
1195
1196#ifdef CONFIG_SERIAL_8250_RSA
1197module_param_hw_array(probe_rsa, ulong, ioport, &probe_rsa_count, 0444);
1198MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
1199#endif
1200MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
1201
1202#ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
1203#ifndef MODULE
1204/* This module was renamed to 8250_core in 3.7.  Keep the old "8250" name
1205 * working as well for the module options so we don't break people.  We
1206 * need to keep the names identical and the convenient macros will happily
1207 * refuse to let us do that by failing the build with redefinition errors
1208 * of global variables.  So we stick them inside a dummy function to avoid
1209 * those conflicts.  The options still get parsed, and the redefined
1210 * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
1211 *
1212 * This is hacky.  I'm sorry.
1213 */
1214static void __used s8250_options(void)
1215{
1216#undef MODULE_PARAM_PREFIX
1217#define MODULE_PARAM_PREFIX "8250_core."
1218
1219        module_param_cb(share_irqs, &param_ops_uint, &share_irqs, 0644);
1220        module_param_cb(nr_uarts, &param_ops_uint, &nr_uarts, 0644);
1221        module_param_cb(skip_txen_test, &param_ops_uint, &skip_txen_test, 0644);
1222#ifdef CONFIG_SERIAL_8250_RSA
1223        __module_param_call(MODULE_PARAM_PREFIX, probe_rsa,
1224                &param_array_ops, .arr = &__param_arr_probe_rsa,
1225                0444, -1, 0);
1226#endif
1227}
1228#else
1229MODULE_ALIAS("8250_core");
1230#endif
1231#endif
1232