cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

8250_core.c (33417B)


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