1 /*
2  *  Driver for 8250/16550-type serial ports
3  *
4  *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
5  *
6  *  Copyright (C) 2001 Russell King.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * A note about mapbase / membase
14  *
15  *  mapbase is the physical address of the IO port.
16  *  membase is an 'ioremapped' cookie.
17  */
18 
19 #if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
20 #define SUPPORT_SYSRQ
21 #endif
22 
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/ioport.h>
26 #include <linux/init.h>
27 #include <linux/console.h>
28 #include <linux/sysrq.h>
29 #include <linux/delay.h>
30 #include <linux/platform_device.h>
31 #include <linux/tty.h>
32 #include <linux/ratelimit.h>
33 #include <linux/tty_flip.h>
34 #include <linux/serial.h>
35 #include <linux/serial_8250.h>
36 #include <linux/nmi.h>
37 #include <linux/mutex.h>
38 #include <linux/slab.h>
39 #include <linux/uaccess.h>
40 #include <linux/pm_runtime.h>
41 #ifdef CONFIG_SPARC
42 #include <linux/sunserialcore.h>
43 #endif
44 
45 #include <asm/io.h>
46 #include <asm/irq.h>
47 
48 #include "8250.h"
49 
50 /*
51  * Configuration:
52  *   share_irqs - whether we pass IRQF_SHARED to request_irq().  This option
53  *                is unsafe when used on edge-triggered interrupts.
54  */
55 static unsigned int share_irqs = SERIAL8250_SHARE_IRQS;
56 
57 static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS;
58 
59 static struct uart_driver serial8250_reg;
60 
61 static int serial_index(struct uart_port *port)
62 {
63 	return port->minor - 64;
64 }
65 
66 static unsigned int skip_txen_test; /* force skip of txen test at init time */
67 
68 /*
69  * Debugging.
70  */
71 #if 0
72 #define DEBUG_AUTOCONF(fmt...)	printk(fmt)
73 #else
74 #define DEBUG_AUTOCONF(fmt...)	do { } while (0)
75 #endif
76 
77 #if 0
78 #define DEBUG_INTR(fmt...)	printk(fmt)
79 #else
80 #define DEBUG_INTR(fmt...)	do { } while (0)
81 #endif
82 
83 #define PASS_LIMIT	512
84 
85 #define BOTH_EMPTY 	(UART_LSR_TEMT | UART_LSR_THRE)
86 
87 
88 #include <asm/serial.h>
89 /*
90  * SERIAL_PORT_DFNS tells us about built-in ports that have no
91  * standard enumeration mechanism.   Platforms that can find all
92  * serial ports via mechanisms like ACPI or PCI need not supply it.
93  */
94 #ifndef SERIAL_PORT_DFNS
95 #define SERIAL_PORT_DFNS
96 #endif
97 
98 static const struct old_serial_port old_serial_port[] = {
99 	SERIAL_PORT_DFNS /* defined in asm/serial.h */
100 };
101 
102 #define UART_NR	CONFIG_SERIAL_8250_NR_UARTS
103 
104 #ifdef CONFIG_SERIAL_8250_RSA
105 
106 #define PORT_RSA_MAX 4
107 static unsigned long probe_rsa[PORT_RSA_MAX];
108 static unsigned int probe_rsa_count;
109 #endif /* CONFIG_SERIAL_8250_RSA  */
110 
111 struct irq_info {
112 	struct			hlist_node node;
113 	int			irq;
114 	spinlock_t		lock;	/* Protects list not the hash */
115 	struct list_head	*head;
116 };
117 
118 #define NR_IRQ_HASH		32	/* Can be adjusted later */
119 static struct hlist_head irq_lists[NR_IRQ_HASH];
120 static DEFINE_MUTEX(hash_mutex);	/* Used to walk the hash */
121 
122 /*
123  * Here we define the default xmit fifo size used for each type of UART.
124  */
125 static const struct serial8250_config uart_config[] = {
126 	[PORT_UNKNOWN] = {
127 		.name		= "unknown",
128 		.fifo_size	= 1,
129 		.tx_loadsz	= 1,
130 	},
131 	[PORT_8250] = {
132 		.name		= "8250",
133 		.fifo_size	= 1,
134 		.tx_loadsz	= 1,
135 	},
136 	[PORT_16450] = {
137 		.name		= "16450",
138 		.fifo_size	= 1,
139 		.tx_loadsz	= 1,
140 	},
141 	[PORT_16550] = {
142 		.name		= "16550",
143 		.fifo_size	= 1,
144 		.tx_loadsz	= 1,
145 	},
146 	[PORT_16550A] = {
147 		.name		= "16550A",
148 		.fifo_size	= 16,
149 		.tx_loadsz	= 16,
150 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
151 		.rxtrig_bytes	= {1, 4, 8, 14},
152 		.flags		= UART_CAP_FIFO,
153 	},
154 	[PORT_CIRRUS] = {
155 		.name		= "Cirrus",
156 		.fifo_size	= 1,
157 		.tx_loadsz	= 1,
158 	},
159 	[PORT_16650] = {
160 		.name		= "ST16650",
161 		.fifo_size	= 1,
162 		.tx_loadsz	= 1,
163 		.flags		= UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
164 	},
165 	[PORT_16650V2] = {
166 		.name		= "ST16650V2",
167 		.fifo_size	= 32,
168 		.tx_loadsz	= 16,
169 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
170 				  UART_FCR_T_TRIG_00,
171 		.rxtrig_bytes	= {8, 16, 24, 28},
172 		.flags		= UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
173 	},
174 	[PORT_16750] = {
175 		.name		= "TI16750",
176 		.fifo_size	= 64,
177 		.tx_loadsz	= 64,
178 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
179 				  UART_FCR7_64BYTE,
180 		.rxtrig_bytes	= {1, 16, 32, 56},
181 		.flags		= UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE,
182 	},
183 	[PORT_STARTECH] = {
184 		.name		= "Startech",
185 		.fifo_size	= 1,
186 		.tx_loadsz	= 1,
187 	},
188 	[PORT_16C950] = {
189 		.name		= "16C950/954",
190 		.fifo_size	= 128,
191 		.tx_loadsz	= 128,
192 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
193 		/* UART_CAP_EFR breaks billionon CF bluetooth card. */
194 		.flags		= UART_CAP_FIFO | UART_CAP_SLEEP,
195 	},
196 	[PORT_16654] = {
197 		.name		= "ST16654",
198 		.fifo_size	= 64,
199 		.tx_loadsz	= 32,
200 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
201 				  UART_FCR_T_TRIG_10,
202 		.rxtrig_bytes	= {8, 16, 56, 60},
203 		.flags		= UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
204 	},
205 	[PORT_16850] = {
206 		.name		= "XR16850",
207 		.fifo_size	= 128,
208 		.tx_loadsz	= 128,
209 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
210 		.flags		= UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
211 	},
212 	[PORT_RSA] = {
213 		.name		= "RSA",
214 		.fifo_size	= 2048,
215 		.tx_loadsz	= 2048,
216 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11,
217 		.flags		= UART_CAP_FIFO,
218 	},
219 	[PORT_NS16550A] = {
220 		.name		= "NS16550A",
221 		.fifo_size	= 16,
222 		.tx_loadsz	= 16,
223 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
224 		.flags		= UART_CAP_FIFO | UART_NATSEMI,
225 	},
226 	[PORT_XSCALE] = {
227 		.name		= "XScale",
228 		.fifo_size	= 32,
229 		.tx_loadsz	= 32,
230 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
231 		.flags		= UART_CAP_FIFO | UART_CAP_UUE | UART_CAP_RTOIE,
232 	},
233 	[PORT_OCTEON] = {
234 		.name		= "OCTEON",
235 		.fifo_size	= 64,
236 		.tx_loadsz	= 64,
237 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
238 		.flags		= UART_CAP_FIFO,
239 	},
240 	[PORT_AR7] = {
241 		.name		= "AR7",
242 		.fifo_size	= 16,
243 		.tx_loadsz	= 16,
244 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00,
245 		.flags		= UART_CAP_FIFO | UART_CAP_AFE,
246 	},
247 	[PORT_U6_16550A] = {
248 		.name		= "U6_16550A",
249 		.fifo_size	= 64,
250 		.tx_loadsz	= 64,
251 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
252 		.flags		= UART_CAP_FIFO | UART_CAP_AFE,
253 	},
254 	[PORT_TEGRA] = {
255 		.name		= "Tegra",
256 		.fifo_size	= 32,
257 		.tx_loadsz	= 8,
258 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
259 				  UART_FCR_T_TRIG_01,
260 		.rxtrig_bytes	= {1, 4, 8, 14},
261 		.flags		= UART_CAP_FIFO | UART_CAP_RTOIE,
262 	},
263 	[PORT_XR17D15X] = {
264 		.name		= "XR17D15X",
265 		.fifo_size	= 64,
266 		.tx_loadsz	= 64,
267 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
268 		.flags		= UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR |
269 				  UART_CAP_SLEEP,
270 	},
271 	[PORT_XR17V35X] = {
272 		.name		= "XR17V35X",
273 		.fifo_size	= 256,
274 		.tx_loadsz	= 256,
275 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11 |
276 				  UART_FCR_T_TRIG_11,
277 		.flags		= UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR |
278 				  UART_CAP_SLEEP,
279 	},
280 	[PORT_LPC3220] = {
281 		.name		= "LPC3220",
282 		.fifo_size	= 64,
283 		.tx_loadsz	= 32,
284 		.fcr		= UART_FCR_DMA_SELECT | UART_FCR_ENABLE_FIFO |
285 				  UART_FCR_R_TRIG_00 | UART_FCR_T_TRIG_00,
286 		.flags		= UART_CAP_FIFO,
287 	},
288 	[PORT_BRCM_TRUMANAGE] = {
289 		.name		= "TruManage",
290 		.fifo_size	= 1,
291 		.tx_loadsz	= 1024,
292 		.flags		= UART_CAP_HFIFO,
293 	},
294 	[PORT_8250_CIR] = {
295 		.name		= "CIR port"
296 	},
297 	[PORT_ALTR_16550_F32] = {
298 		.name		= "Altera 16550 FIFO32",
299 		.fifo_size	= 32,
300 		.tx_loadsz	= 32,
301 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
302 		.flags		= UART_CAP_FIFO | UART_CAP_AFE,
303 	},
304 	[PORT_ALTR_16550_F64] = {
305 		.name		= "Altera 16550 FIFO64",
306 		.fifo_size	= 64,
307 		.tx_loadsz	= 64,
308 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
309 		.flags		= UART_CAP_FIFO | UART_CAP_AFE,
310 	},
311 	[PORT_ALTR_16550_F128] = {
312 		.name		= "Altera 16550 FIFO128",
313 		.fifo_size	= 128,
314 		.tx_loadsz	= 128,
315 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
316 		.flags		= UART_CAP_FIFO | UART_CAP_AFE,
317 	},
318 /* tx_loadsz is set to 63-bytes instead of 64-bytes to implement
319 workaround of errata A-008006 which states that tx_loadsz should  be
320 configured less than Maximum supported fifo bytes */
321 	[PORT_16550A_FSL64] = {
322 		.name		= "16550A_FSL64",
323 		.fifo_size	= 64,
324 		.tx_loadsz	= 63,
325 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
326 				  UART_FCR7_64BYTE,
327 		.flags		= UART_CAP_FIFO,
328 	},
329 };
330 
331 /* Uart divisor latch read */
332 static int default_serial_dl_read(struct uart_8250_port *up)
333 {
334 	return serial_in(up, UART_DLL) | serial_in(up, UART_DLM) << 8;
335 }
336 
337 /* Uart divisor latch write */
338 static void default_serial_dl_write(struct uart_8250_port *up, int value)
339 {
340 	serial_out(up, UART_DLL, value & 0xff);
341 	serial_out(up, UART_DLM, value >> 8 & 0xff);
342 }
343 
344 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
345 
346 /* Au1x00/RT288x UART hardware has a weird register layout */
347 static const s8 au_io_in_map[8] = {
348 	 0,	/* UART_RX  */
349 	 2,	/* UART_IER */
350 	 3,	/* UART_IIR */
351 	 5,	/* UART_LCR */
352 	 6,	/* UART_MCR */
353 	 7,	/* UART_LSR */
354 	 8,	/* UART_MSR */
355 	-1,	/* UART_SCR (unmapped) */
356 };
357 
358 static const s8 au_io_out_map[8] = {
359 	 1,	/* UART_TX  */
360 	 2,	/* UART_IER */
361 	 4,	/* UART_FCR */
362 	 5,	/* UART_LCR */
363 	 6,	/* UART_MCR */
364 	-1,	/* UART_LSR (unmapped) */
365 	-1,	/* UART_MSR (unmapped) */
366 	-1,	/* UART_SCR (unmapped) */
367 };
368 
369 static unsigned int au_serial_in(struct uart_port *p, int offset)
370 {
371 	if (offset >= ARRAY_SIZE(au_io_in_map))
372 		return UINT_MAX;
373 	offset = au_io_in_map[offset];
374 	if (offset < 0)
375 		return UINT_MAX;
376 	return __raw_readl(p->membase + (offset << p->regshift));
377 }
378 
379 static void au_serial_out(struct uart_port *p, int offset, int value)
380 {
381 	if (offset >= ARRAY_SIZE(au_io_out_map))
382 		return;
383 	offset = au_io_out_map[offset];
384 	if (offset < 0)
385 		return;
386 	__raw_writel(value, p->membase + (offset << p->regshift));
387 }
388 
389 /* Au1x00 haven't got a standard divisor latch */
390 static int au_serial_dl_read(struct uart_8250_port *up)
391 {
392 	return __raw_readl(up->port.membase + 0x28);
393 }
394 
395 static void au_serial_dl_write(struct uart_8250_port *up, int value)
396 {
397 	__raw_writel(value, up->port.membase + 0x28);
398 }
399 
400 #endif
401 
402 static unsigned int hub6_serial_in(struct uart_port *p, int offset)
403 {
404 	offset = offset << p->regshift;
405 	outb(p->hub6 - 1 + offset, p->iobase);
406 	return inb(p->iobase + 1);
407 }
408 
409 static void hub6_serial_out(struct uart_port *p, int offset, int value)
410 {
411 	offset = offset << p->regshift;
412 	outb(p->hub6 - 1 + offset, p->iobase);
413 	outb(value, p->iobase + 1);
414 }
415 
416 static unsigned int mem_serial_in(struct uart_port *p, int offset)
417 {
418 	offset = offset << p->regshift;
419 	return readb(p->membase + offset);
420 }
421 
422 static void mem_serial_out(struct uart_port *p, int offset, int value)
423 {
424 	offset = offset << p->regshift;
425 	writeb(value, p->membase + offset);
426 }
427 
428 static void mem32_serial_out(struct uart_port *p, int offset, int value)
429 {
430 	offset = offset << p->regshift;
431 	writel(value, p->membase + offset);
432 }
433 
434 static unsigned int mem32_serial_in(struct uart_port *p, int offset)
435 {
436 	offset = offset << p->regshift;
437 	return readl(p->membase + offset);
438 }
439 
440 static void mem32be_serial_out(struct uart_port *p, int offset, int value)
441 {
442 	offset = offset << p->regshift;
443 	iowrite32be(value, p->membase + offset);
444 }
445 
446 static unsigned int mem32be_serial_in(struct uart_port *p, int offset)
447 {
448 	offset = offset << p->regshift;
449 	return ioread32be(p->membase + offset);
450 }
451 
452 static unsigned int io_serial_in(struct uart_port *p, int offset)
453 {
454 	offset = offset << p->regshift;
455 	return inb(p->iobase + offset);
456 }
457 
458 static void io_serial_out(struct uart_port *p, int offset, int value)
459 {
460 	offset = offset << p->regshift;
461 	outb(value, p->iobase + offset);
462 }
463 
464 static int serial8250_default_handle_irq(struct uart_port *port);
465 static int exar_handle_irq(struct uart_port *port);
466 
467 static void set_io_from_upio(struct uart_port *p)
468 {
469 	struct uart_8250_port *up = up_to_u8250p(p);
470 
471 	up->dl_read = default_serial_dl_read;
472 	up->dl_write = default_serial_dl_write;
473 
474 	switch (p->iotype) {
475 	case UPIO_HUB6:
476 		p->serial_in = hub6_serial_in;
477 		p->serial_out = hub6_serial_out;
478 		break;
479 
480 	case UPIO_MEM:
481 		p->serial_in = mem_serial_in;
482 		p->serial_out = mem_serial_out;
483 		break;
484 
485 	case UPIO_MEM32:
486 		p->serial_in = mem32_serial_in;
487 		p->serial_out = mem32_serial_out;
488 		break;
489 
490 	case UPIO_MEM32BE:
491 		p->serial_in = mem32be_serial_in;
492 		p->serial_out = mem32be_serial_out;
493 		break;
494 
495 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
496 	case UPIO_AU:
497 		p->serial_in = au_serial_in;
498 		p->serial_out = au_serial_out;
499 		up->dl_read = au_serial_dl_read;
500 		up->dl_write = au_serial_dl_write;
501 		break;
502 #endif
503 
504 	default:
505 		p->serial_in = io_serial_in;
506 		p->serial_out = io_serial_out;
507 		break;
508 	}
509 	/* Remember loaded iotype */
510 	up->cur_iotype = p->iotype;
511 	p->handle_irq = serial8250_default_handle_irq;
512 }
513 
514 static void
515 serial_port_out_sync(struct uart_port *p, int offset, int value)
516 {
517 	switch (p->iotype) {
518 	case UPIO_MEM:
519 	case UPIO_MEM32:
520 	case UPIO_MEM32BE:
521 	case UPIO_AU:
522 		p->serial_out(p, offset, value);
523 		p->serial_in(p, UART_LCR);	/* safe, no side-effects */
524 		break;
525 	default:
526 		p->serial_out(p, offset, value);
527 	}
528 }
529 
530 /*
531  * For the 16C950
532  */
533 static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
534 {
535 	serial_out(up, UART_SCR, offset);
536 	serial_out(up, UART_ICR, value);
537 }
538 
539 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset)
540 {
541 	unsigned int value;
542 
543 	serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
544 	serial_out(up, UART_SCR, offset);
545 	value = serial_in(up, UART_ICR);
546 	serial_icr_write(up, UART_ACR, up->acr);
547 
548 	return value;
549 }
550 
551 /*
552  * FIFO support.
553  */
554 static void serial8250_clear_fifos(struct uart_8250_port *p)
555 {
556 	if (p->capabilities & UART_CAP_FIFO) {
557 		serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO);
558 		serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO |
559 			       UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
560 		serial_out(p, UART_FCR, 0);
561 	}
562 }
563 
564 void serial8250_clear_and_reinit_fifos(struct uart_8250_port *p)
565 {
566 	serial8250_clear_fifos(p);
567 	serial_out(p, UART_FCR, p->fcr);
568 }
569 EXPORT_SYMBOL_GPL(serial8250_clear_and_reinit_fifos);
570 
571 void serial8250_rpm_get(struct uart_8250_port *p)
572 {
573 	if (!(p->capabilities & UART_CAP_RPM))
574 		return;
575 	pm_runtime_get_sync(p->port.dev);
576 }
577 EXPORT_SYMBOL_GPL(serial8250_rpm_get);
578 
579 void serial8250_rpm_put(struct uart_8250_port *p)
580 {
581 	if (!(p->capabilities & UART_CAP_RPM))
582 		return;
583 	pm_runtime_mark_last_busy(p->port.dev);
584 	pm_runtime_put_autosuspend(p->port.dev);
585 }
586 EXPORT_SYMBOL_GPL(serial8250_rpm_put);
587 
588 /*
589  * These two wrappers ensure that enable_runtime_pm_tx() can be called more than
590  * once and disable_runtime_pm_tx() will still disable RPM because the fifo is
591  * empty and the HW can idle again.
592  */
593 static void serial8250_rpm_get_tx(struct uart_8250_port *p)
594 {
595 	unsigned char rpm_active;
596 
597 	if (!(p->capabilities & UART_CAP_RPM))
598 		return;
599 
600 	rpm_active = xchg(&p->rpm_tx_active, 1);
601 	if (rpm_active)
602 		return;
603 	pm_runtime_get_sync(p->port.dev);
604 }
605 
606 static void serial8250_rpm_put_tx(struct uart_8250_port *p)
607 {
608 	unsigned char rpm_active;
609 
610 	if (!(p->capabilities & UART_CAP_RPM))
611 		return;
612 
613 	rpm_active = xchg(&p->rpm_tx_active, 0);
614 	if (!rpm_active)
615 		return;
616 	pm_runtime_mark_last_busy(p->port.dev);
617 	pm_runtime_put_autosuspend(p->port.dev);
618 }
619 
620 /*
621  * IER sleep support.  UARTs which have EFRs need the "extended
622  * capability" bit enabled.  Note that on XR16C850s, we need to
623  * reset LCR to write to IER.
624  */
625 static void serial8250_set_sleep(struct uart_8250_port *p, int sleep)
626 {
627 	unsigned char lcr = 0, efr = 0;
628 	/*
629 	 * Exar UARTs have a SLEEP register that enables or disables
630 	 * each UART to enter sleep mode separately.  On the XR17V35x the
631 	 * register is accessible to each UART at the UART_EXAR_SLEEP
632 	 * offset but the UART channel may only write to the corresponding
633 	 * bit.
634 	 */
635 	serial8250_rpm_get(p);
636 	if ((p->port.type == PORT_XR17V35X) ||
637 	   (p->port.type == PORT_XR17D15X)) {
638 		serial_out(p, UART_EXAR_SLEEP, sleep ? 0xff : 0);
639 		goto out;
640 	}
641 
642 	if (p->capabilities & UART_CAP_SLEEP) {
643 		if (p->capabilities & UART_CAP_EFR) {
644 			lcr = serial_in(p, UART_LCR);
645 			efr = serial_in(p, UART_EFR);
646 			serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B);
647 			serial_out(p, UART_EFR, UART_EFR_ECB);
648 			serial_out(p, UART_LCR, 0);
649 		}
650 		serial_out(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
651 		if (p->capabilities & UART_CAP_EFR) {
652 			serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B);
653 			serial_out(p, UART_EFR, efr);
654 			serial_out(p, UART_LCR, lcr);
655 		}
656 	}
657 out:
658 	serial8250_rpm_put(p);
659 }
660 
661 #ifdef CONFIG_SERIAL_8250_RSA
662 /*
663  * Attempts to turn on the RSA FIFO.  Returns zero on failure.
664  * We set the port uart clock rate if we succeed.
665  */
666 static int __enable_rsa(struct uart_8250_port *up)
667 {
668 	unsigned char mode;
669 	int result;
670 
671 	mode = serial_in(up, UART_RSA_MSR);
672 	result = mode & UART_RSA_MSR_FIFO;
673 
674 	if (!result) {
675 		serial_out(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
676 		mode = serial_in(up, UART_RSA_MSR);
677 		result = mode & UART_RSA_MSR_FIFO;
678 	}
679 
680 	if (result)
681 		up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16;
682 
683 	return result;
684 }
685 
686 static void enable_rsa(struct uart_8250_port *up)
687 {
688 	if (up->port.type == PORT_RSA) {
689 		if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
690 			spin_lock_irq(&up->port.lock);
691 			__enable_rsa(up);
692 			spin_unlock_irq(&up->port.lock);
693 		}
694 		if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
695 			serial_out(up, UART_RSA_FRR, 0);
696 	}
697 }
698 
699 /*
700  * Attempts to turn off the RSA FIFO.  Returns zero on failure.
701  * It is unknown why interrupts were disabled in here.  However,
702  * the caller is expected to preserve this behaviour by grabbing
703  * the spinlock before calling this function.
704  */
705 static void disable_rsa(struct uart_8250_port *up)
706 {
707 	unsigned char mode;
708 	int result;
709 
710 	if (up->port.type == PORT_RSA &&
711 	    up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
712 		spin_lock_irq(&up->port.lock);
713 
714 		mode = serial_in(up, UART_RSA_MSR);
715 		result = !(mode & UART_RSA_MSR_FIFO);
716 
717 		if (!result) {
718 			serial_out(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
719 			mode = serial_in(up, UART_RSA_MSR);
720 			result = !(mode & UART_RSA_MSR_FIFO);
721 		}
722 
723 		if (result)
724 			up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
725 		spin_unlock_irq(&up->port.lock);
726 	}
727 }
728 #endif /* CONFIG_SERIAL_8250_RSA */
729 
730 /*
731  * This is a quickie test to see how big the FIFO is.
732  * It doesn't work at all the time, more's the pity.
733  */
734 static int size_fifo(struct uart_8250_port *up)
735 {
736 	unsigned char old_fcr, old_mcr, old_lcr;
737 	unsigned short old_dl;
738 	int count;
739 
740 	old_lcr = serial_in(up, UART_LCR);
741 	serial_out(up, UART_LCR, 0);
742 	old_fcr = serial_in(up, UART_FCR);
743 	old_mcr = serial_in(up, UART_MCR);
744 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
745 		    UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
746 	serial_out(up, UART_MCR, UART_MCR_LOOP);
747 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
748 	old_dl = serial_dl_read(up);
749 	serial_dl_write(up, 0x0001);
750 	serial_out(up, UART_LCR, 0x03);
751 	for (count = 0; count < 256; count++)
752 		serial_out(up, UART_TX, count);
753 	mdelay(20);/* FIXME - schedule_timeout */
754 	for (count = 0; (serial_in(up, UART_LSR) & UART_LSR_DR) &&
755 	     (count < 256); count++)
756 		serial_in(up, UART_RX);
757 	serial_out(up, UART_FCR, old_fcr);
758 	serial_out(up, UART_MCR, old_mcr);
759 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
760 	serial_dl_write(up, old_dl);
761 	serial_out(up, UART_LCR, old_lcr);
762 
763 	return count;
764 }
765 
766 /*
767  * Read UART ID using the divisor method - set DLL and DLM to zero
768  * and the revision will be in DLL and device type in DLM.  We
769  * preserve the device state across this.
770  */
771 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
772 {
773 	unsigned char old_dll, old_dlm, old_lcr;
774 	unsigned int id;
775 
776 	old_lcr = serial_in(p, UART_LCR);
777 	serial_out(p, UART_LCR, UART_LCR_CONF_MODE_A);
778 
779 	old_dll = serial_in(p, UART_DLL);
780 	old_dlm = serial_in(p, UART_DLM);
781 
782 	serial_out(p, UART_DLL, 0);
783 	serial_out(p, UART_DLM, 0);
784 
785 	id = serial_in(p, UART_DLL) | serial_in(p, UART_DLM) << 8;
786 
787 	serial_out(p, UART_DLL, old_dll);
788 	serial_out(p, UART_DLM, old_dlm);
789 	serial_out(p, UART_LCR, old_lcr);
790 
791 	return id;
792 }
793 
794 /*
795  * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
796  * When this function is called we know it is at least a StarTech
797  * 16650 V2, but it might be one of several StarTech UARTs, or one of
798  * its clones.  (We treat the broken original StarTech 16650 V1 as a
799  * 16550, and why not?  Startech doesn't seem to even acknowledge its
800  * existence.)
801  *
802  * What evil have men's minds wrought...
803  */
804 static void autoconfig_has_efr(struct uart_8250_port *up)
805 {
806 	unsigned int id1, id2, id3, rev;
807 
808 	/*
809 	 * Everything with an EFR has SLEEP
810 	 */
811 	up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
812 
813 	/*
814 	 * First we check to see if it's an Oxford Semiconductor UART.
815 	 *
816 	 * If we have to do this here because some non-National
817 	 * Semiconductor clone chips lock up if you try writing to the
818 	 * LSR register (which serial_icr_read does)
819 	 */
820 
821 	/*
822 	 * Check for Oxford Semiconductor 16C950.
823 	 *
824 	 * EFR [4] must be set else this test fails.
825 	 *
826 	 * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca)
827 	 * claims that it's needed for 952 dual UART's (which are not
828 	 * recommended for new designs).
829 	 */
830 	up->acr = 0;
831 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
832 	serial_out(up, UART_EFR, UART_EFR_ECB);
833 	serial_out(up, UART_LCR, 0x00);
834 	id1 = serial_icr_read(up, UART_ID1);
835 	id2 = serial_icr_read(up, UART_ID2);
836 	id3 = serial_icr_read(up, UART_ID3);
837 	rev = serial_icr_read(up, UART_REV);
838 
839 	DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1, id2, id3, rev);
840 
841 	if (id1 == 0x16 && id2 == 0xC9 &&
842 	    (id3 == 0x50 || id3 == 0x52 || id3 == 0x54)) {
843 		up->port.type = PORT_16C950;
844 
845 		/*
846 		 * Enable work around for the Oxford Semiconductor 952 rev B
847 		 * chip which causes it to seriously miscalculate baud rates
848 		 * when DLL is 0.
849 		 */
850 		if (id3 == 0x52 && rev == 0x01)
851 			up->bugs |= UART_BUG_QUOT;
852 		return;
853 	}
854 
855 	/*
856 	 * We check for a XR16C850 by setting DLL and DLM to 0, and then
857 	 * reading back DLL and DLM.  The chip type depends on the DLM
858 	 * value read back:
859 	 *  0x10 - XR16C850 and the DLL contains the chip revision.
860 	 *  0x12 - XR16C2850.
861 	 *  0x14 - XR16C854.
862 	 */
863 	id1 = autoconfig_read_divisor_id(up);
864 	DEBUG_AUTOCONF("850id=%04x ", id1);
865 
866 	id2 = id1 >> 8;
867 	if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) {
868 		up->port.type = PORT_16850;
869 		return;
870 	}
871 
872 	/*
873 	 * It wasn't an XR16C850.
874 	 *
875 	 * We distinguish between the '654 and the '650 by counting
876 	 * how many bytes are in the FIFO.  I'm using this for now,
877 	 * since that's the technique that was sent to me in the
878 	 * serial driver update, but I'm not convinced this works.
879 	 * I've had problems doing this in the past.  -TYT
880 	 */
881 	if (size_fifo(up) == 64)
882 		up->port.type = PORT_16654;
883 	else
884 		up->port.type = PORT_16650V2;
885 }
886 
887 /*
888  * We detected a chip without a FIFO.  Only two fall into
889  * this category - the original 8250 and the 16450.  The
890  * 16450 has a scratch register (accessible with LCR=0)
891  */
892 static void autoconfig_8250(struct uart_8250_port *up)
893 {
894 	unsigned char scratch, status1, status2;
895 
896 	up->port.type = PORT_8250;
897 
898 	scratch = serial_in(up, UART_SCR);
899 	serial_out(up, UART_SCR, 0xa5);
900 	status1 = serial_in(up, UART_SCR);
901 	serial_out(up, UART_SCR, 0x5a);
902 	status2 = serial_in(up, UART_SCR);
903 	serial_out(up, UART_SCR, scratch);
904 
905 	if (status1 == 0xa5 && status2 == 0x5a)
906 		up->port.type = PORT_16450;
907 }
908 
909 static int broken_efr(struct uart_8250_port *up)
910 {
911 	/*
912 	 * Exar ST16C2550 "A2" devices incorrectly detect as
913 	 * having an EFR, and report an ID of 0x0201.  See
914 	 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html
915 	 */
916 	if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
917 		return 1;
918 
919 	return 0;
920 }
921 
922 /*
923  * We know that the chip has FIFOs.  Does it have an EFR?  The
924  * EFR is located in the same register position as the IIR and
925  * we know the top two bits of the IIR are currently set.  The
926  * EFR should contain zero.  Try to read the EFR.
927  */
928 static void autoconfig_16550a(struct uart_8250_port *up)
929 {
930 	unsigned char status1, status2;
931 	unsigned int iersave;
932 
933 	up->port.type = PORT_16550A;
934 	up->capabilities |= UART_CAP_FIFO;
935 
936 	/*
937 	 * XR17V35x UARTs have an extra divisor register, DLD
938 	 * that gets enabled with when DLAB is set which will
939 	 * cause the device to incorrectly match and assign
940 	 * port type to PORT_16650.  The EFR for this UART is
941 	 * found at offset 0x09. Instead check the Deice ID (DVID)
942 	 * register for a 2, 4 or 8 port UART.
943 	 */
944 	if (up->port.flags & UPF_EXAR_EFR) {
945 		status1 = serial_in(up, UART_EXAR_DVID);
946 		if (status1 == 0x82 || status1 == 0x84 || status1 == 0x88) {
947 			DEBUG_AUTOCONF("Exar XR17V35x ");
948 			up->port.type = PORT_XR17V35X;
949 			up->capabilities |= UART_CAP_AFE | UART_CAP_EFR |
950 						UART_CAP_SLEEP;
951 
952 			return;
953 		}
954 
955 	}
956 
957 	/*
958 	 * Check for presence of the EFR when DLAB is set.
959 	 * Only ST16C650V1 UARTs pass this test.
960 	 */
961 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
962 	if (serial_in(up, UART_EFR) == 0) {
963 		serial_out(up, UART_EFR, 0xA8);
964 		if (serial_in(up, UART_EFR) != 0) {
965 			DEBUG_AUTOCONF("EFRv1 ");
966 			up->port.type = PORT_16650;
967 			up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
968 		} else {
969 			serial_out(up, UART_LCR, 0);
970 			serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
971 				   UART_FCR7_64BYTE);
972 			status1 = serial_in(up, UART_IIR) >> 5;
973 			serial_out(up, UART_FCR, 0);
974 			serial_out(up, UART_LCR, 0);
975 
976 			if (status1 == 7)
977 				up->port.type = PORT_16550A_FSL64;
978 			else
979 				DEBUG_AUTOCONF("Motorola 8xxx DUART ");
980 		}
981 		serial_out(up, UART_EFR, 0);
982 		return;
983 	}
984 
985 	/*
986 	 * Maybe it requires 0xbf to be written to the LCR.
987 	 * (other ST16C650V2 UARTs, TI16C752A, etc)
988 	 */
989 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
990 	if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) {
991 		DEBUG_AUTOCONF("EFRv2 ");
992 		autoconfig_has_efr(up);
993 		return;
994 	}
995 
996 	/*
997 	 * Check for a National Semiconductor SuperIO chip.
998 	 * Attempt to switch to bank 2, read the value of the LOOP bit
999 	 * from EXCR1. Switch back to bank 0, change it in MCR. Then
1000 	 * switch back to bank 2, read it from EXCR1 again and check
1001 	 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
1002 	 */
1003 	serial_out(up, UART_LCR, 0);
1004 	status1 = serial_in(up, UART_MCR);
1005 	serial_out(up, UART_LCR, 0xE0);
1006 	status2 = serial_in(up, 0x02); /* EXCR1 */
1007 
1008 	if (!((status2 ^ status1) & UART_MCR_LOOP)) {
1009 		serial_out(up, UART_LCR, 0);
1010 		serial_out(up, UART_MCR, status1 ^ UART_MCR_LOOP);
1011 		serial_out(up, UART_LCR, 0xE0);
1012 		status2 = serial_in(up, 0x02); /* EXCR1 */
1013 		serial_out(up, UART_LCR, 0);
1014 		serial_out(up, UART_MCR, status1);
1015 
1016 		if ((status2 ^ status1) & UART_MCR_LOOP) {
1017 			unsigned short quot;
1018 
1019 			serial_out(up, UART_LCR, 0xE0);
1020 
1021 			quot = serial_dl_read(up);
1022 			quot <<= 3;
1023 
1024 			if (ns16550a_goto_highspeed(up))
1025 				serial_dl_write(up, quot);
1026 
1027 			serial_out(up, UART_LCR, 0);
1028 
1029 			up->port.uartclk = 921600*16;
1030 			up->port.type = PORT_NS16550A;
1031 			up->capabilities |= UART_NATSEMI;
1032 			return;
1033 		}
1034 	}
1035 
1036 	/*
1037 	 * No EFR.  Try to detect a TI16750, which only sets bit 5 of
1038 	 * the IIR when 64 byte FIFO mode is enabled when DLAB is set.
1039 	 * Try setting it with and without DLAB set.  Cheap clones
1040 	 * set bit 5 without DLAB set.
1041 	 */
1042 	serial_out(up, UART_LCR, 0);
1043 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
1044 	status1 = serial_in(up, UART_IIR) >> 5;
1045 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1046 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
1047 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
1048 	status2 = serial_in(up, UART_IIR) >> 5;
1049 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1050 	serial_out(up, UART_LCR, 0);
1051 
1052 	DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2);
1053 
1054 	if (status1 == 6 && status2 == 7) {
1055 		up->port.type = PORT_16750;
1056 		up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
1057 		return;
1058 	}
1059 
1060 	/*
1061 	 * Try writing and reading the UART_IER_UUE bit (b6).
1062 	 * If it works, this is probably one of the Xscale platform's
1063 	 * internal UARTs.
1064 	 * We're going to explicitly set the UUE bit to 0 before
1065 	 * trying to write and read a 1 just to make sure it's not
1066 	 * already a 1 and maybe locked there before we even start start.
1067 	 */
1068 	iersave = serial_in(up, UART_IER);
1069 	serial_out(up, UART_IER, iersave & ~UART_IER_UUE);
1070 	if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
1071 		/*
1072 		 * OK it's in a known zero state, try writing and reading
1073 		 * without disturbing the current state of the other bits.
1074 		 */
1075 		serial_out(up, UART_IER, iersave | UART_IER_UUE);
1076 		if (serial_in(up, UART_IER) & UART_IER_UUE) {
1077 			/*
1078 			 * It's an Xscale.
1079 			 * We'll leave the UART_IER_UUE bit set to 1 (enabled).
1080 			 */
1081 			DEBUG_AUTOCONF("Xscale ");
1082 			up->port.type = PORT_XSCALE;
1083 			up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE;
1084 			return;
1085 		}
1086 	} else {
1087 		/*
1088 		 * If we got here we couldn't force the IER_UUE bit to 0.
1089 		 * Log it and continue.
1090 		 */
1091 		DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
1092 	}
1093 	serial_out(up, UART_IER, iersave);
1094 
1095 	/*
1096 	 * Exar uarts have EFR in a weird location
1097 	 */
1098 	if (up->port.flags & UPF_EXAR_EFR) {
1099 		DEBUG_AUTOCONF("Exar XR17D15x ");
1100 		up->port.type = PORT_XR17D15X;
1101 		up->capabilities |= UART_CAP_AFE | UART_CAP_EFR |
1102 				    UART_CAP_SLEEP;
1103 
1104 		return;
1105 	}
1106 
1107 	/*
1108 	 * We distinguish between 16550A and U6 16550A by counting
1109 	 * how many bytes are in the FIFO.
1110 	 */
1111 	if (up->port.type == PORT_16550A && size_fifo(up) == 64) {
1112 		up->port.type = PORT_U6_16550A;
1113 		up->capabilities |= UART_CAP_AFE;
1114 	}
1115 }
1116 
1117 /*
1118  * This routine is called by rs_init() to initialize a specific serial
1119  * port.  It determines what type of UART chip this serial port is
1120  * using: 8250, 16450, 16550, 16550A.  The important question is
1121  * whether or not this UART is a 16550A or not, since this will
1122  * determine whether or not we can use its FIFO features or not.
1123  */
1124 static void autoconfig(struct uart_8250_port *up)
1125 {
1126 	unsigned char status1, scratch, scratch2, scratch3;
1127 	unsigned char save_lcr, save_mcr;
1128 	struct uart_port *port = &up->port;
1129 	unsigned long flags;
1130 	unsigned int old_capabilities;
1131 
1132 	if (!port->iobase && !port->mapbase && !port->membase)
1133 		return;
1134 
1135 	DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04lx, 0x%p): ",
1136 		       serial_index(port), port->iobase, port->membase);
1137 
1138 	/*
1139 	 * We really do need global IRQs disabled here - we're going to
1140 	 * be frobbing the chips IRQ enable register to see if it exists.
1141 	 */
1142 	spin_lock_irqsave(&port->lock, flags);
1143 
1144 	up->capabilities = 0;
1145 	up->bugs = 0;
1146 
1147 	if (!(port->flags & UPF_BUGGY_UART)) {
1148 		/*
1149 		 * Do a simple existence test first; if we fail this,
1150 		 * there's no point trying anything else.
1151 		 *
1152 		 * 0x80 is used as a nonsense port to prevent against
1153 		 * false positives due to ISA bus float.  The
1154 		 * assumption is that 0x80 is a non-existent port;
1155 		 * which should be safe since include/asm/io.h also
1156 		 * makes this assumption.
1157 		 *
1158 		 * Note: this is safe as long as MCR bit 4 is clear
1159 		 * and the device is in "PC" mode.
1160 		 */
1161 		scratch = serial_in(up, UART_IER);
1162 		serial_out(up, UART_IER, 0);
1163 #ifdef __i386__
1164 		outb(0xff, 0x080);
1165 #endif
1166 		/*
1167 		 * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
1168 		 * 16C754B) allow only to modify them if an EFR bit is set.
1169 		 */
1170 		scratch2 = serial_in(up, UART_IER) & 0x0f;
1171 		serial_out(up, UART_IER, 0x0F);
1172 #ifdef __i386__
1173 		outb(0, 0x080);
1174 #endif
1175 		scratch3 = serial_in(up, UART_IER) & 0x0f;
1176 		serial_out(up, UART_IER, scratch);
1177 		if (scratch2 != 0 || scratch3 != 0x0F) {
1178 			/*
1179 			 * We failed; there's nothing here
1180 			 */
1181 			spin_unlock_irqrestore(&port->lock, flags);
1182 			DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
1183 				       scratch2, scratch3);
1184 			goto out;
1185 		}
1186 	}
1187 
1188 	save_mcr = serial_in(up, UART_MCR);
1189 	save_lcr = serial_in(up, UART_LCR);
1190 
1191 	/*
1192 	 * Check to see if a UART is really there.  Certain broken
1193 	 * internal modems based on the Rockwell chipset fail this
1194 	 * test, because they apparently don't implement the loopback
1195 	 * test mode.  So this test is skipped on the COM 1 through
1196 	 * COM 4 ports.  This *should* be safe, since no board
1197 	 * manufacturer would be stupid enough to design a board
1198 	 * that conflicts with COM 1-4 --- we hope!
1199 	 */
1200 	if (!(port->flags & UPF_SKIP_TEST)) {
1201 		serial_out(up, UART_MCR, UART_MCR_LOOP | 0x0A);
1202 		status1 = serial_in(up, UART_MSR) & 0xF0;
1203 		serial_out(up, UART_MCR, save_mcr);
1204 		if (status1 != 0x90) {
1205 			spin_unlock_irqrestore(&port->lock, flags);
1206 			DEBUG_AUTOCONF("LOOP test failed (%02x) ",
1207 				       status1);
1208 			goto out;
1209 		}
1210 	}
1211 
1212 	/*
1213 	 * We're pretty sure there's a port here.  Lets find out what
1214 	 * type of port it is.  The IIR top two bits allows us to find
1215 	 * out if it's 8250 or 16450, 16550, 16550A or later.  This
1216 	 * determines what we test for next.
1217 	 *
1218 	 * We also initialise the EFR (if any) to zero for later.  The
1219 	 * EFR occupies the same register location as the FCR and IIR.
1220 	 */
1221 	serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
1222 	serial_out(up, UART_EFR, 0);
1223 	serial_out(up, UART_LCR, 0);
1224 
1225 	serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1226 	scratch = serial_in(up, UART_IIR) >> 6;
1227 
1228 	switch (scratch) {
1229 	case 0:
1230 		autoconfig_8250(up);
1231 		break;
1232 	case 1:
1233 		port->type = PORT_UNKNOWN;
1234 		break;
1235 	case 2:
1236 		port->type = PORT_16550;
1237 		break;
1238 	case 3:
1239 		autoconfig_16550a(up);
1240 		break;
1241 	}
1242 
1243 #ifdef CONFIG_SERIAL_8250_RSA
1244 	/*
1245 	 * Only probe for RSA ports if we got the region.
1246 	 */
1247 	if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA &&
1248 	    __enable_rsa(up))
1249 		port->type = PORT_RSA;
1250 #endif
1251 
1252 	serial_out(up, UART_LCR, save_lcr);
1253 
1254 	port->fifosize = uart_config[up->port.type].fifo_size;
1255 	old_capabilities = up->capabilities;
1256 	up->capabilities = uart_config[port->type].flags;
1257 	up->tx_loadsz = uart_config[port->type].tx_loadsz;
1258 
1259 	if (port->type == PORT_UNKNOWN)
1260 		goto out_lock;
1261 
1262 	/*
1263 	 * Reset the UART.
1264 	 */
1265 #ifdef CONFIG_SERIAL_8250_RSA
1266 	if (port->type == PORT_RSA)
1267 		serial_out(up, UART_RSA_FRR, 0);
1268 #endif
1269 	serial_out(up, UART_MCR, save_mcr);
1270 	serial8250_clear_fifos(up);
1271 	serial_in(up, UART_RX);
1272 	if (up->capabilities & UART_CAP_UUE)
1273 		serial_out(up, UART_IER, UART_IER_UUE);
1274 	else
1275 		serial_out(up, UART_IER, 0);
1276 
1277 out_lock:
1278 	spin_unlock_irqrestore(&port->lock, flags);
1279 	if (up->capabilities != old_capabilities) {
1280 		printk(KERN_WARNING
1281 		       "ttyS%d: detected caps %08x should be %08x\n",
1282 		       serial_index(port), old_capabilities,
1283 		       up->capabilities);
1284 	}
1285 out:
1286 	DEBUG_AUTOCONF("iir=%d ", scratch);
1287 	DEBUG_AUTOCONF("type=%s\n", uart_config[port->type].name);
1288 }
1289 
1290 static void autoconfig_irq(struct uart_8250_port *up)
1291 {
1292 	struct uart_port *port = &up->port;
1293 	unsigned char save_mcr, save_ier;
1294 	unsigned char save_ICP = 0;
1295 	unsigned int ICP = 0;
1296 	unsigned long irqs;
1297 	int irq;
1298 
1299 	if (port->flags & UPF_FOURPORT) {
1300 		ICP = (port->iobase & 0xfe0) | 0x1f;
1301 		save_ICP = inb_p(ICP);
1302 		outb_p(0x80, ICP);
1303 		inb_p(ICP);
1304 	}
1305 
1306 	/* forget possible initially masked and pending IRQ */
1307 	probe_irq_off(probe_irq_on());
1308 	save_mcr = serial_in(up, UART_MCR);
1309 	save_ier = serial_in(up, UART_IER);
1310 	serial_out(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2);
1311 
1312 	irqs = probe_irq_on();
1313 	serial_out(up, UART_MCR, 0);
1314 	udelay(10);
1315 	if (port->flags & UPF_FOURPORT) {
1316 		serial_out(up, UART_MCR,
1317 			    UART_MCR_DTR | UART_MCR_RTS);
1318 	} else {
1319 		serial_out(up, UART_MCR,
1320 			    UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
1321 	}
1322 	serial_out(up, UART_IER, 0x0f);	/* enable all intrs */
1323 	serial_in(up, UART_LSR);
1324 	serial_in(up, UART_RX);
1325 	serial_in(up, UART_IIR);
1326 	serial_in(up, UART_MSR);
1327 	serial_out(up, UART_TX, 0xFF);
1328 	udelay(20);
1329 	irq = probe_irq_off(irqs);
1330 
1331 	serial_out(up, UART_MCR, save_mcr);
1332 	serial_out(up, UART_IER, save_ier);
1333 
1334 	if (port->flags & UPF_FOURPORT)
1335 		outb_p(save_ICP, ICP);
1336 
1337 	port->irq = (irq > 0) ? irq : 0;
1338 }
1339 
1340 static inline void __stop_tx(struct uart_8250_port *p)
1341 {
1342 	if (p->ier & UART_IER_THRI) {
1343 		p->ier &= ~UART_IER_THRI;
1344 		serial_out(p, UART_IER, p->ier);
1345 		serial8250_rpm_put_tx(p);
1346 	}
1347 }
1348 
1349 static void serial8250_stop_tx(struct uart_port *port)
1350 {
1351 	struct uart_8250_port *up = up_to_u8250p(port);
1352 
1353 	serial8250_rpm_get(up);
1354 	__stop_tx(up);
1355 
1356 	/*
1357 	 * We really want to stop the transmitter from sending.
1358 	 */
1359 	if (port->type == PORT_16C950) {
1360 		up->acr |= UART_ACR_TXDIS;
1361 		serial_icr_write(up, UART_ACR, up->acr);
1362 	}
1363 	serial8250_rpm_put(up);
1364 }
1365 
1366 static void serial8250_start_tx(struct uart_port *port)
1367 {
1368 	struct uart_8250_port *up = up_to_u8250p(port);
1369 
1370 	serial8250_rpm_get_tx(up);
1371 
1372 	if (up->dma && !up->dma->tx_dma(up))
1373 		return;
1374 
1375 	if (!(up->ier & UART_IER_THRI)) {
1376 		up->ier |= UART_IER_THRI;
1377 		serial_port_out(port, UART_IER, up->ier);
1378 
1379 		if (up->bugs & UART_BUG_TXEN) {
1380 			unsigned char lsr;
1381 			lsr = serial_in(up, UART_LSR);
1382 			up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1383 			if (lsr & UART_LSR_THRE)
1384 				serial8250_tx_chars(up);
1385 		}
1386 	}
1387 
1388 	/*
1389 	 * Re-enable the transmitter if we disabled it.
1390 	 */
1391 	if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
1392 		up->acr &= ~UART_ACR_TXDIS;
1393 		serial_icr_write(up, UART_ACR, up->acr);
1394 	}
1395 }
1396 
1397 static void serial8250_throttle(struct uart_port *port)
1398 {
1399 	port->throttle(port);
1400 }
1401 
1402 static void serial8250_unthrottle(struct uart_port *port)
1403 {
1404 	port->unthrottle(port);
1405 }
1406 
1407 static void serial8250_stop_rx(struct uart_port *port)
1408 {
1409 	struct uart_8250_port *up = up_to_u8250p(port);
1410 
1411 	serial8250_rpm_get(up);
1412 
1413 	up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
1414 	up->port.read_status_mask &= ~UART_LSR_DR;
1415 	serial_port_out(port, UART_IER, up->ier);
1416 
1417 	serial8250_rpm_put(up);
1418 }
1419 
1420 static void serial8250_disable_ms(struct uart_port *port)
1421 {
1422 	struct uart_8250_port *up =
1423 		container_of(port, struct uart_8250_port, port);
1424 
1425 	/* no MSR capabilities */
1426 	if (up->bugs & UART_BUG_NOMSR)
1427 		return;
1428 
1429 	up->ier &= ~UART_IER_MSI;
1430 	serial_port_out(port, UART_IER, up->ier);
1431 }
1432 
1433 static void serial8250_enable_ms(struct uart_port *port)
1434 {
1435 	struct uart_8250_port *up = up_to_u8250p(port);
1436 
1437 	/* no MSR capabilities */
1438 	if (up->bugs & UART_BUG_NOMSR)
1439 		return;
1440 
1441 	up->ier |= UART_IER_MSI;
1442 
1443 	serial8250_rpm_get(up);
1444 	serial_port_out(port, UART_IER, up->ier);
1445 	serial8250_rpm_put(up);
1446 }
1447 
1448 /*
1449  * serial8250_rx_chars: processes according to the passed in LSR
1450  * value, and returns the remaining LSR bits not handled
1451  * by this Rx routine.
1452  */
1453 unsigned char
1454 serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
1455 {
1456 	struct uart_port *port = &up->port;
1457 	unsigned char ch;
1458 	int max_count = 256;
1459 	char flag;
1460 
1461 	do {
1462 		if (likely(lsr & UART_LSR_DR))
1463 			ch = serial_in(up, UART_RX);
1464 		else
1465 			/*
1466 			 * Intel 82571 has a Serial Over Lan device that will
1467 			 * set UART_LSR_BI without setting UART_LSR_DR when
1468 			 * it receives a break. To avoid reading from the
1469 			 * receive buffer without UART_LSR_DR bit set, we
1470 			 * just force the read character to be 0
1471 			 */
1472 			ch = 0;
1473 
1474 		flag = TTY_NORMAL;
1475 		port->icount.rx++;
1476 
1477 		lsr |= up->lsr_saved_flags;
1478 		up->lsr_saved_flags = 0;
1479 
1480 		if (unlikely(lsr & UART_LSR_BRK_ERROR_BITS)) {
1481 			if (lsr & UART_LSR_BI) {
1482 				lsr &= ~(UART_LSR_FE | UART_LSR_PE);
1483 				port->icount.brk++;
1484 				/*
1485 				 * We do the SysRQ and SAK checking
1486 				 * here because otherwise the break
1487 				 * may get masked by ignore_status_mask
1488 				 * or read_status_mask.
1489 				 */
1490 				if (uart_handle_break(port))
1491 					goto ignore_char;
1492 			} else if (lsr & UART_LSR_PE)
1493 				port->icount.parity++;
1494 			else if (lsr & UART_LSR_FE)
1495 				port->icount.frame++;
1496 			if (lsr & UART_LSR_OE)
1497 				port->icount.overrun++;
1498 
1499 			/*
1500 			 * Mask off conditions which should be ignored.
1501 			 */
1502 			lsr &= port->read_status_mask;
1503 
1504 			if (lsr & UART_LSR_BI) {
1505 				DEBUG_INTR("handling break....");
1506 				flag = TTY_BREAK;
1507 			} else if (lsr & UART_LSR_PE)
1508 				flag = TTY_PARITY;
1509 			else if (lsr & UART_LSR_FE)
1510 				flag = TTY_FRAME;
1511 		}
1512 		if (uart_handle_sysrq_char(port, ch))
1513 			goto ignore_char;
1514 
1515 		uart_insert_char(port, lsr, UART_LSR_OE, ch, flag);
1516 
1517 ignore_char:
1518 		lsr = serial_in(up, UART_LSR);
1519 	} while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (--max_count > 0));
1520 	spin_unlock(&port->lock);
1521 	tty_flip_buffer_push(&port->state->port);
1522 	spin_lock(&port->lock);
1523 	return lsr;
1524 }
1525 EXPORT_SYMBOL_GPL(serial8250_rx_chars);
1526 
1527 void serial8250_tx_chars(struct uart_8250_port *up)
1528 {
1529 	struct uart_port *port = &up->port;
1530 	struct circ_buf *xmit = &port->state->xmit;
1531 	int count;
1532 
1533 	if (port->x_char) {
1534 		serial_out(up, UART_TX, port->x_char);
1535 		port->icount.tx++;
1536 		port->x_char = 0;
1537 		return;
1538 	}
1539 	if (uart_tx_stopped(port)) {
1540 		serial8250_stop_tx(port);
1541 		return;
1542 	}
1543 	if (uart_circ_empty(xmit)) {
1544 		__stop_tx(up);
1545 		return;
1546 	}
1547 
1548 	count = up->tx_loadsz;
1549 	do {
1550 		serial_out(up, UART_TX, xmit->buf[xmit->tail]);
1551 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
1552 		port->icount.tx++;
1553 		if (uart_circ_empty(xmit))
1554 			break;
1555 		if (up->capabilities & UART_CAP_HFIFO) {
1556 			if ((serial_port_in(port, UART_LSR) & BOTH_EMPTY) !=
1557 			    BOTH_EMPTY)
1558 				break;
1559 		}
1560 	} while (--count > 0);
1561 
1562 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
1563 		uart_write_wakeup(port);
1564 
1565 	DEBUG_INTR("THRE...");
1566 
1567 	/*
1568 	 * With RPM enabled, we have to wait until the FIFO is empty before the
1569 	 * HW can go idle. So we get here once again with empty FIFO and disable
1570 	 * the interrupt and RPM in __stop_tx()
1571 	 */
1572 	if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM))
1573 		__stop_tx(up);
1574 }
1575 EXPORT_SYMBOL_GPL(serial8250_tx_chars);
1576 
1577 /* Caller holds uart port lock */
1578 unsigned int serial8250_modem_status(struct uart_8250_port *up)
1579 {
1580 	struct uart_port *port = &up->port;
1581 	unsigned int status = serial_in(up, UART_MSR);
1582 
1583 	status |= up->msr_saved_flags;
1584 	up->msr_saved_flags = 0;
1585 	if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI &&
1586 	    port->state != NULL) {
1587 		if (status & UART_MSR_TERI)
1588 			port->icount.rng++;
1589 		if (status & UART_MSR_DDSR)
1590 			port->icount.dsr++;
1591 		if (status & UART_MSR_DDCD)
1592 			uart_handle_dcd_change(port, status & UART_MSR_DCD);
1593 		if (status & UART_MSR_DCTS)
1594 			uart_handle_cts_change(port, status & UART_MSR_CTS);
1595 
1596 		wake_up_interruptible(&port->state->port.delta_msr_wait);
1597 	}
1598 
1599 	return status;
1600 }
1601 EXPORT_SYMBOL_GPL(serial8250_modem_status);
1602 
1603 /*
1604  * This handles the interrupt from one port.
1605  */
1606 int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
1607 {
1608 	unsigned char status;
1609 	unsigned long flags;
1610 	struct uart_8250_port *up = up_to_u8250p(port);
1611 	int dma_err = 0;
1612 
1613 	if (iir & UART_IIR_NO_INT)
1614 		return 0;
1615 
1616 	spin_lock_irqsave(&port->lock, flags);
1617 
1618 	status = serial_port_in(port, UART_LSR);
1619 
1620 	DEBUG_INTR("status = %x...", status);
1621 
1622 	if (status & (UART_LSR_DR | UART_LSR_BI)) {
1623 		if (up->dma)
1624 			dma_err = up->dma->rx_dma(up, iir);
1625 
1626 		if (!up->dma || dma_err)
1627 			status = serial8250_rx_chars(up, status);
1628 	}
1629 	serial8250_modem_status(up);
1630 	if ((!up->dma || (up->dma && up->dma->tx_err)) &&
1631 	    (status & UART_LSR_THRE))
1632 		serial8250_tx_chars(up);
1633 
1634 	spin_unlock_irqrestore(&port->lock, flags);
1635 	return 1;
1636 }
1637 EXPORT_SYMBOL_GPL(serial8250_handle_irq);
1638 
1639 static int serial8250_default_handle_irq(struct uart_port *port)
1640 {
1641 	struct uart_8250_port *up = up_to_u8250p(port);
1642 	unsigned int iir;
1643 	int ret;
1644 
1645 	serial8250_rpm_get(up);
1646 
1647 	iir = serial_port_in(port, UART_IIR);
1648 	ret = serial8250_handle_irq(port, iir);
1649 
1650 	serial8250_rpm_put(up);
1651 	return ret;
1652 }
1653 
1654 /*
1655  * These Exar UARTs have an extra interrupt indicator that could
1656  * fire for a few unimplemented interrupts.  One of which is a
1657  * wakeup event when coming out of sleep.  Put this here just
1658  * to be on the safe side that these interrupts don't go unhandled.
1659  */
1660 static int exar_handle_irq(struct uart_port *port)
1661 {
1662 	unsigned char int0, int1, int2, int3;
1663 	unsigned int iir = serial_port_in(port, UART_IIR);
1664 	int ret;
1665 
1666 	ret = serial8250_handle_irq(port, iir);
1667 
1668 	if ((port->type == PORT_XR17V35X) ||
1669 	   (port->type == PORT_XR17D15X)) {
1670 		int0 = serial_port_in(port, 0x80);
1671 		int1 = serial_port_in(port, 0x81);
1672 		int2 = serial_port_in(port, 0x82);
1673 		int3 = serial_port_in(port, 0x83);
1674 	}
1675 
1676 	return ret;
1677 }
1678 
1679 /*
1680  * This is the serial driver's interrupt routine.
1681  *
1682  * Arjan thinks the old way was overly complex, so it got simplified.
1683  * Alan disagrees, saying that need the complexity to handle the weird
1684  * nature of ISA shared interrupts.  (This is a special exception.)
1685  *
1686  * In order to handle ISA shared interrupts properly, we need to check
1687  * that all ports have been serviced, and therefore the ISA interrupt
1688  * line has been de-asserted.
1689  *
1690  * This means we need to loop through all ports. checking that they
1691  * don't have an interrupt pending.
1692  */
1693 static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
1694 {
1695 	struct irq_info *i = dev_id;
1696 	struct list_head *l, *end = NULL;
1697 	int pass_counter = 0, handled = 0;
1698 
1699 	DEBUG_INTR("serial8250_interrupt(%d)...", irq);
1700 
1701 	spin_lock(&i->lock);
1702 
1703 	l = i->head;
1704 	do {
1705 		struct uart_8250_port *up;
1706 		struct uart_port *port;
1707 
1708 		up = list_entry(l, struct uart_8250_port, list);
1709 		port = &up->port;
1710 
1711 		if (port->handle_irq(port)) {
1712 			handled = 1;
1713 			end = NULL;
1714 		} else if (end == NULL)
1715 			end = l;
1716 
1717 		l = l->next;
1718 
1719 		if (l == i->head && pass_counter++ > PASS_LIMIT) {
1720 			/* If we hit this, we're dead. */
1721 			printk_ratelimited(KERN_ERR
1722 				"serial8250: too much work for irq%d\n", irq);
1723 			break;
1724 		}
1725 	} while (l != end);
1726 
1727 	spin_unlock(&i->lock);
1728 
1729 	DEBUG_INTR("end.\n");
1730 
1731 	return IRQ_RETVAL(handled);
1732 }
1733 
1734 /*
1735  * To support ISA shared interrupts, we need to have one interrupt
1736  * handler that ensures that the IRQ line has been deasserted
1737  * before returning.  Failing to do this will result in the IRQ
1738  * line being stuck active, and, since ISA irqs are edge triggered,
1739  * no more IRQs will be seen.
1740  */
1741 static void serial_do_unlink(struct irq_info *i, struct uart_8250_port *up)
1742 {
1743 	spin_lock_irq(&i->lock);
1744 
1745 	if (!list_empty(i->head)) {
1746 		if (i->head == &up->list)
1747 			i->head = i->head->next;
1748 		list_del(&up->list);
1749 	} else {
1750 		BUG_ON(i->head != &up->list);
1751 		i->head = NULL;
1752 	}
1753 	spin_unlock_irq(&i->lock);
1754 	/* List empty so throw away the hash node */
1755 	if (i->head == NULL) {
1756 		hlist_del(&i->node);
1757 		kfree(i);
1758 	}
1759 }
1760 
1761 static int serial_link_irq_chain(struct uart_8250_port *up)
1762 {
1763 	struct hlist_head *h;
1764 	struct hlist_node *n;
1765 	struct irq_info *i;
1766 	int ret, irq_flags = up->port.flags & UPF_SHARE_IRQ ? IRQF_SHARED : 0;
1767 
1768 	mutex_lock(&hash_mutex);
1769 
1770 	h = &irq_lists[up->port.irq % NR_IRQ_HASH];
1771 
1772 	hlist_for_each(n, h) {
1773 		i = hlist_entry(n, struct irq_info, node);
1774 		if (i->irq == up->port.irq)
1775 			break;
1776 	}
1777 
1778 	if (n == NULL) {
1779 		i = kzalloc(sizeof(struct irq_info), GFP_KERNEL);
1780 		if (i == NULL) {
1781 			mutex_unlock(&hash_mutex);
1782 			return -ENOMEM;
1783 		}
1784 		spin_lock_init(&i->lock);
1785 		i->irq = up->port.irq;
1786 		hlist_add_head(&i->node, h);
1787 	}
1788 	mutex_unlock(&hash_mutex);
1789 
1790 	spin_lock_irq(&i->lock);
1791 
1792 	if (i->head) {
1793 		list_add(&up->list, i->head);
1794 		spin_unlock_irq(&i->lock);
1795 
1796 		ret = 0;
1797 	} else {
1798 		INIT_LIST_HEAD(&up->list);
1799 		i->head = &up->list;
1800 		spin_unlock_irq(&i->lock);
1801 		irq_flags |= up->port.irqflags;
1802 		ret = request_irq(up->port.irq, serial8250_interrupt,
1803 				  irq_flags, "serial", i);
1804 		if (ret < 0)
1805 			serial_do_unlink(i, up);
1806 	}
1807 
1808 	return ret;
1809 }
1810 
1811 static void serial_unlink_irq_chain(struct uart_8250_port *up)
1812 {
1813 	/*
1814 	 * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
1815 	 * but no, we are not going to take a patch that assigns NULL below.
1816 	 */
1817 	struct irq_info *i;
1818 	struct hlist_node *n;
1819 	struct hlist_head *h;
1820 
1821 	mutex_lock(&hash_mutex);
1822 
1823 	h = &irq_lists[up->port.irq % NR_IRQ_HASH];
1824 
1825 	hlist_for_each(n, h) {
1826 		i = hlist_entry(n, struct irq_info, node);
1827 		if (i->irq == up->port.irq)
1828 			break;
1829 	}
1830 
1831 	BUG_ON(n == NULL);
1832 	BUG_ON(i->head == NULL);
1833 
1834 	if (list_empty(i->head))
1835 		free_irq(up->port.irq, i);
1836 
1837 	serial_do_unlink(i, up);
1838 	mutex_unlock(&hash_mutex);
1839 }
1840 
1841 /*
1842  * This function is used to handle ports that do not have an
1843  * interrupt.  This doesn't work very well for 16450's, but gives
1844  * barely passable results for a 16550A.  (Although at the expense
1845  * of much CPU overhead).
1846  */
1847 static void serial8250_timeout(unsigned long data)
1848 {
1849 	struct uart_8250_port *up = (struct uart_8250_port *)data;
1850 
1851 	up->port.handle_irq(&up->port);
1852 	mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port));
1853 }
1854 
1855 static void serial8250_backup_timeout(unsigned long data)
1856 {
1857 	struct uart_8250_port *up = (struct uart_8250_port *)data;
1858 	unsigned int iir, ier = 0, lsr;
1859 	unsigned long flags;
1860 
1861 	spin_lock_irqsave(&up->port.lock, flags);
1862 
1863 	/*
1864 	 * Must disable interrupts or else we risk racing with the interrupt
1865 	 * based handler.
1866 	 */
1867 	if (up->port.irq) {
1868 		ier = serial_in(up, UART_IER);
1869 		serial_out(up, UART_IER, 0);
1870 	}
1871 
1872 	iir = serial_in(up, UART_IIR);
1873 
1874 	/*
1875 	 * This should be a safe test for anyone who doesn't trust the
1876 	 * IIR bits on their UART, but it's specifically designed for
1877 	 * the "Diva" UART used on the management processor on many HP
1878 	 * ia64 and parisc boxes.
1879 	 */
1880 	lsr = serial_in(up, UART_LSR);
1881 	up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1882 	if ((iir & UART_IIR_NO_INT) && (up->ier & UART_IER_THRI) &&
1883 	    (!uart_circ_empty(&up->port.state->xmit) || up->port.x_char) &&
1884 	    (lsr & UART_LSR_THRE)) {
1885 		iir &= ~(UART_IIR_ID | UART_IIR_NO_INT);
1886 		iir |= UART_IIR_THRI;
1887 	}
1888 
1889 	if (!(iir & UART_IIR_NO_INT))
1890 		serial8250_tx_chars(up);
1891 
1892 	if (up->port.irq)
1893 		serial_out(up, UART_IER, ier);
1894 
1895 	spin_unlock_irqrestore(&up->port.lock, flags);
1896 
1897 	/* Standard timer interval plus 0.2s to keep the port running */
1898 	mod_timer(&up->timer,
1899 		jiffies + uart_poll_timeout(&up->port) + HZ / 5);
1900 }
1901 
1902 static int univ8250_setup_irq(struct uart_8250_port *up)
1903 {
1904 	struct uart_port *port = &up->port;
1905 	int retval = 0;
1906 
1907 	/*
1908 	 * The above check will only give an accurate result the first time
1909 	 * the port is opened so this value needs to be preserved.
1910 	 */
1911 	if (up->bugs & UART_BUG_THRE) {
1912 		pr_debug("ttyS%d - using backup timer\n", serial_index(port));
1913 
1914 		up->timer.function = serial8250_backup_timeout;
1915 		up->timer.data = (unsigned long)up;
1916 		mod_timer(&up->timer, jiffies +
1917 			  uart_poll_timeout(port) + HZ / 5);
1918 	}
1919 
1920 	/*
1921 	 * If the "interrupt" for this port doesn't correspond with any
1922 	 * hardware interrupt, we use a timer-based system.  The original
1923 	 * driver used to do this with IRQ0.
1924 	 */
1925 	if (!port->irq) {
1926 		up->timer.data = (unsigned long)up;
1927 		mod_timer(&up->timer, jiffies + uart_poll_timeout(port));
1928 	} else
1929 		retval = serial_link_irq_chain(up);
1930 
1931 	return retval;
1932 }
1933 
1934 static void univ8250_release_irq(struct uart_8250_port *up)
1935 {
1936 	struct uart_port *port = &up->port;
1937 
1938 	del_timer_sync(&up->timer);
1939 	up->timer.function = serial8250_timeout;
1940 	if (port->irq)
1941 		serial_unlink_irq_chain(up);
1942 }
1943 
1944 static unsigned int serial8250_tx_empty(struct uart_port *port)
1945 {
1946 	struct uart_8250_port *up = up_to_u8250p(port);
1947 	unsigned long flags;
1948 	unsigned int lsr;
1949 
1950 	serial8250_rpm_get(up);
1951 
1952 	spin_lock_irqsave(&port->lock, flags);
1953 	lsr = serial_port_in(port, UART_LSR);
1954 	up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1955 	spin_unlock_irqrestore(&port->lock, flags);
1956 
1957 	serial8250_rpm_put(up);
1958 
1959 	return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0;
1960 }
1961 
1962 static unsigned int serial8250_get_mctrl(struct uart_port *port)
1963 {
1964 	struct uart_8250_port *up = up_to_u8250p(port);
1965 	unsigned int status;
1966 	unsigned int ret;
1967 
1968 	serial8250_rpm_get(up);
1969 	status = serial8250_modem_status(up);
1970 	serial8250_rpm_put(up);
1971 
1972 	ret = 0;
1973 	if (status & UART_MSR_DCD)
1974 		ret |= TIOCM_CAR;
1975 	if (status & UART_MSR_RI)
1976 		ret |= TIOCM_RNG;
1977 	if (status & UART_MSR_DSR)
1978 		ret |= TIOCM_DSR;
1979 	if (status & UART_MSR_CTS)
1980 		ret |= TIOCM_CTS;
1981 	return ret;
1982 }
1983 
1984 void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl)
1985 {
1986 	struct uart_8250_port *up = up_to_u8250p(port);
1987 	unsigned char mcr = 0;
1988 
1989 	if (mctrl & TIOCM_RTS)
1990 		mcr |= UART_MCR_RTS;
1991 	if (mctrl & TIOCM_DTR)
1992 		mcr |= UART_MCR_DTR;
1993 	if (mctrl & TIOCM_OUT1)
1994 		mcr |= UART_MCR_OUT1;
1995 	if (mctrl & TIOCM_OUT2)
1996 		mcr |= UART_MCR_OUT2;
1997 	if (mctrl & TIOCM_LOOP)
1998 		mcr |= UART_MCR_LOOP;
1999 
2000 	mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr;
2001 
2002 	serial_port_out(port, UART_MCR, mcr);
2003 }
2004 EXPORT_SYMBOL_GPL(serial8250_do_set_mctrl);
2005 
2006 static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl)
2007 {
2008 	if (port->set_mctrl)
2009 		port->set_mctrl(port, mctrl);
2010 	else
2011 		serial8250_do_set_mctrl(port, mctrl);
2012 }
2013 
2014 static void serial8250_break_ctl(struct uart_port *port, int break_state)
2015 {
2016 	struct uart_8250_port *up = up_to_u8250p(port);
2017 	unsigned long flags;
2018 
2019 	serial8250_rpm_get(up);
2020 	spin_lock_irqsave(&port->lock, flags);
2021 	if (break_state == -1)
2022 		up->lcr |= UART_LCR_SBC;
2023 	else
2024 		up->lcr &= ~UART_LCR_SBC;
2025 	serial_port_out(port, UART_LCR, up->lcr);
2026 	spin_unlock_irqrestore(&port->lock, flags);
2027 	serial8250_rpm_put(up);
2028 }
2029 
2030 /*
2031  *	Wait for transmitter & holding register to empty
2032  */
2033 static void wait_for_xmitr(struct uart_8250_port *up, int bits)
2034 {
2035 	unsigned int status, tmout = 10000;
2036 
2037 	/* Wait up to 10ms for the character(s) to be sent. */
2038 	for (;;) {
2039 		status = serial_in(up, UART_LSR);
2040 
2041 		up->lsr_saved_flags |= status & LSR_SAVE_FLAGS;
2042 
2043 		if ((status & bits) == bits)
2044 			break;
2045 		if (--tmout == 0)
2046 			break;
2047 		udelay(1);
2048 	}
2049 
2050 	/* Wait up to 1s for flow control if necessary */
2051 	if (up->port.flags & UPF_CONS_FLOW) {
2052 		unsigned int tmout;
2053 		for (tmout = 1000000; tmout; tmout--) {
2054 			unsigned int msr = serial_in(up, UART_MSR);
2055 			up->msr_saved_flags |= msr & MSR_SAVE_FLAGS;
2056 			if (msr & UART_MSR_CTS)
2057 				break;
2058 			udelay(1);
2059 			touch_nmi_watchdog();
2060 		}
2061 	}
2062 }
2063 
2064 #ifdef CONFIG_CONSOLE_POLL
2065 /*
2066  * Console polling routines for writing and reading from the uart while
2067  * in an interrupt or debug context.
2068  */
2069 
2070 static int serial8250_get_poll_char(struct uart_port *port)
2071 {
2072 	struct uart_8250_port *up = up_to_u8250p(port);
2073 	unsigned char lsr;
2074 	int status;
2075 
2076 	serial8250_rpm_get(up);
2077 
2078 	lsr = serial_port_in(port, UART_LSR);
2079 
2080 	if (!(lsr & UART_LSR_DR)) {
2081 		status = NO_POLL_CHAR;
2082 		goto out;
2083 	}
2084 
2085 	status = serial_port_in(port, UART_RX);
2086 out:
2087 	serial8250_rpm_put(up);
2088 	return status;
2089 }
2090 
2091 
2092 static void serial8250_put_poll_char(struct uart_port *port,
2093 			 unsigned char c)
2094 {
2095 	unsigned int ier;
2096 	struct uart_8250_port *up = up_to_u8250p(port);
2097 
2098 	serial8250_rpm_get(up);
2099 	/*
2100 	 *	First save the IER then disable the interrupts
2101 	 */
2102 	ier = serial_port_in(port, UART_IER);
2103 	if (up->capabilities & UART_CAP_UUE)
2104 		serial_port_out(port, UART_IER, UART_IER_UUE);
2105 	else
2106 		serial_port_out(port, UART_IER, 0);
2107 
2108 	wait_for_xmitr(up, BOTH_EMPTY);
2109 	/*
2110 	 *	Send the character out.
2111 	 */
2112 	serial_port_out(port, UART_TX, c);
2113 
2114 	/*
2115 	 *	Finally, wait for transmitter to become empty
2116 	 *	and restore the IER
2117 	 */
2118 	wait_for_xmitr(up, BOTH_EMPTY);
2119 	serial_port_out(port, UART_IER, ier);
2120 	serial8250_rpm_put(up);
2121 }
2122 
2123 #endif /* CONFIG_CONSOLE_POLL */
2124 
2125 int serial8250_do_startup(struct uart_port *port)
2126 {
2127 	struct uart_8250_port *up = up_to_u8250p(port);
2128 	unsigned long flags;
2129 	unsigned char lsr, iir;
2130 	int retval;
2131 
2132 	if (port->type == PORT_8250_CIR)
2133 		return -ENODEV;
2134 
2135 	if (!port->fifosize)
2136 		port->fifosize = uart_config[port->type].fifo_size;
2137 	if (!up->tx_loadsz)
2138 		up->tx_loadsz = uart_config[port->type].tx_loadsz;
2139 	if (!up->capabilities)
2140 		up->capabilities = uart_config[port->type].flags;
2141 	up->mcr = 0;
2142 
2143 	if (port->iotype != up->cur_iotype)
2144 		set_io_from_upio(port);
2145 
2146 	serial8250_rpm_get(up);
2147 	if (port->type == PORT_16C950) {
2148 		/* Wake up and initialize UART */
2149 		up->acr = 0;
2150 		serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
2151 		serial_port_out(port, UART_EFR, UART_EFR_ECB);
2152 		serial_port_out(port, UART_IER, 0);
2153 		serial_port_out(port, UART_LCR, 0);
2154 		serial_icr_write(up, UART_CSR, 0); /* Reset the UART */
2155 		serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
2156 		serial_port_out(port, UART_EFR, UART_EFR_ECB);
2157 		serial_port_out(port, UART_LCR, 0);
2158 	}
2159 
2160 #ifdef CONFIG_SERIAL_8250_RSA
2161 	/*
2162 	 * If this is an RSA port, see if we can kick it up to the
2163 	 * higher speed clock.
2164 	 */
2165 	enable_rsa(up);
2166 #endif
2167 	/*
2168 	 * Clear the FIFO buffers and disable them.
2169 	 * (they will be reenabled in set_termios())
2170 	 */
2171 	serial8250_clear_fifos(up);
2172 
2173 	/*
2174 	 * Clear the interrupt registers.
2175 	 */
2176 	serial_port_in(port, UART_LSR);
2177 	serial_port_in(port, UART_RX);
2178 	serial_port_in(port, UART_IIR);
2179 	serial_port_in(port, UART_MSR);
2180 
2181 	/*
2182 	 * At this point, there's no way the LSR could still be 0xff;
2183 	 * if it is, then bail out, because there's likely no UART
2184 	 * here.
2185 	 */
2186 	if (!(port->flags & UPF_BUGGY_UART) &&
2187 	    (serial_port_in(port, UART_LSR) == 0xff)) {
2188 		printk_ratelimited(KERN_INFO "ttyS%d: LSR safety check engaged!\n",
2189 				   serial_index(port));
2190 		retval = -ENODEV;
2191 		goto out;
2192 	}
2193 
2194 	/*
2195 	 * For a XR16C850, we need to set the trigger levels
2196 	 */
2197 	if (port->type == PORT_16850) {
2198 		unsigned char fctr;
2199 
2200 		serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
2201 
2202 		fctr = serial_in(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX);
2203 		serial_port_out(port, UART_FCTR,
2204 				fctr | UART_FCTR_TRGD | UART_FCTR_RX);
2205 		serial_port_out(port, UART_TRG, UART_TRG_96);
2206 		serial_port_out(port, UART_FCTR,
2207 				fctr | UART_FCTR_TRGD | UART_FCTR_TX);
2208 		serial_port_out(port, UART_TRG, UART_TRG_96);
2209 
2210 		serial_port_out(port, UART_LCR, 0);
2211 	}
2212 
2213 	if (port->irq) {
2214 		unsigned char iir1;
2215 		/*
2216 		 * Test for UARTs that do not reassert THRE when the
2217 		 * transmitter is idle and the interrupt has already
2218 		 * been cleared.  Real 16550s should always reassert
2219 		 * this interrupt whenever the transmitter is idle and
2220 		 * the interrupt is enabled.  Delays are necessary to
2221 		 * allow register changes to become visible.
2222 		 */
2223 		spin_lock_irqsave(&port->lock, flags);
2224 		if (up->port.irqflags & IRQF_SHARED)
2225 			disable_irq_nosync(port->irq);
2226 
2227 		wait_for_xmitr(up, UART_LSR_THRE);
2228 		serial_port_out_sync(port, UART_IER, UART_IER_THRI);
2229 		udelay(1); /* allow THRE to set */
2230 		iir1 = serial_port_in(port, UART_IIR);
2231 		serial_port_out(port, UART_IER, 0);
2232 		serial_port_out_sync(port, UART_IER, UART_IER_THRI);
2233 		udelay(1); /* allow a working UART time to re-assert THRE */
2234 		iir = serial_port_in(port, UART_IIR);
2235 		serial_port_out(port, UART_IER, 0);
2236 
2237 		if (port->irqflags & IRQF_SHARED)
2238 			enable_irq(port->irq);
2239 		spin_unlock_irqrestore(&port->lock, flags);
2240 
2241 		/*
2242 		 * If the interrupt is not reasserted, or we otherwise
2243 		 * don't trust the iir, setup a timer to kick the UART
2244 		 * on a regular basis.
2245 		 */
2246 		if ((!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) ||
2247 		    up->port.flags & UPF_BUG_THRE) {
2248 			up->bugs |= UART_BUG_THRE;
2249 		}
2250 	}
2251 
2252 	retval = up->ops->setup_irq(up);
2253 	if (retval)
2254 		goto out;
2255 
2256 	/*
2257 	 * Now, initialize the UART
2258 	 */
2259 	serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
2260 
2261 	spin_lock_irqsave(&port->lock, flags);
2262 	if (up->port.flags & UPF_FOURPORT) {
2263 		if (!up->port.irq)
2264 			up->port.mctrl |= TIOCM_OUT1;
2265 	} else
2266 		/*
2267 		 * Most PC uarts need OUT2 raised to enable interrupts.
2268 		 */
2269 		if (port->irq)
2270 			up->port.mctrl |= TIOCM_OUT2;
2271 
2272 	serial8250_set_mctrl(port, port->mctrl);
2273 
2274 	/* Serial over Lan (SoL) hack:
2275 	   Intel 8257x Gigabit ethernet chips have a
2276 	   16550 emulation, to be used for Serial Over Lan.
2277 	   Those chips take a longer time than a normal
2278 	   serial device to signalize that a transmission
2279 	   data was queued. Due to that, the above test generally
2280 	   fails. One solution would be to delay the reading of
2281 	   iir. However, this is not reliable, since the timeout
2282 	   is variable. So, let's just don't test if we receive
2283 	   TX irq. This way, we'll never enable UART_BUG_TXEN.
2284 	 */
2285 	if (up->port.flags & UPF_NO_TXEN_TEST)
2286 		goto dont_test_tx_en;
2287 
2288 	/*
2289 	 * Do a quick test to see if we receive an
2290 	 * interrupt when we enable the TX irq.
2291 	 */
2292 	serial_port_out(port, UART_IER, UART_IER_THRI);
2293 	lsr = serial_port_in(port, UART_LSR);
2294 	iir = serial_port_in(port, UART_IIR);
2295 	serial_port_out(port, UART_IER, 0);
2296 
2297 	if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
2298 		if (!(up->bugs & UART_BUG_TXEN)) {
2299 			up->bugs |= UART_BUG_TXEN;
2300 			pr_debug("ttyS%d - enabling bad tx status workarounds\n",
2301 				 serial_index(port));
2302 		}
2303 	} else {
2304 		up->bugs &= ~UART_BUG_TXEN;
2305 	}
2306 
2307 dont_test_tx_en:
2308 	spin_unlock_irqrestore(&port->lock, flags);
2309 
2310 	/*
2311 	 * Clear the interrupt registers again for luck, and clear the
2312 	 * saved flags to avoid getting false values from polling
2313 	 * routines or the previous session.
2314 	 */
2315 	serial_port_in(port, UART_LSR);
2316 	serial_port_in(port, UART_RX);
2317 	serial_port_in(port, UART_IIR);
2318 	serial_port_in(port, UART_MSR);
2319 	up->lsr_saved_flags = 0;
2320 	up->msr_saved_flags = 0;
2321 
2322 	/*
2323 	 * Request DMA channels for both RX and TX.
2324 	 */
2325 	if (up->dma) {
2326 		retval = serial8250_request_dma(up);
2327 		if (retval) {
2328 			pr_warn_ratelimited("ttyS%d - failed to request DMA\n",
2329 					    serial_index(port));
2330 			up->dma = NULL;
2331 		}
2332 	}
2333 
2334 	/*
2335 	 * Finally, enable interrupts.  Note: Modem status interrupts
2336 	 * are set via set_termios(), which will be occurring imminently
2337 	 * anyway, so we don't enable them here.
2338 	 */
2339 	up->ier = UART_IER_RLSI | UART_IER_RDI;
2340 	serial_port_out(port, UART_IER, up->ier);
2341 
2342 	if (port->flags & UPF_FOURPORT) {
2343 		unsigned int icp;
2344 		/*
2345 		 * Enable interrupts on the AST Fourport board
2346 		 */
2347 		icp = (port->iobase & 0xfe0) | 0x01f;
2348 		outb_p(0x80, icp);
2349 		inb_p(icp);
2350 	}
2351 	retval = 0;
2352 out:
2353 	serial8250_rpm_put(up);
2354 	return retval;
2355 }
2356 EXPORT_SYMBOL_GPL(serial8250_do_startup);
2357 
2358 static int serial8250_startup(struct uart_port *port)
2359 {
2360 	if (port->startup)
2361 		return port->startup(port);
2362 	return serial8250_do_startup(port);
2363 }
2364 
2365 void serial8250_do_shutdown(struct uart_port *port)
2366 {
2367 	struct uart_8250_port *up = up_to_u8250p(port);
2368 	unsigned long flags;
2369 
2370 	serial8250_rpm_get(up);
2371 	/*
2372 	 * Disable interrupts from this port
2373 	 */
2374 	up->ier = 0;
2375 	serial_port_out(port, UART_IER, 0);
2376 
2377 	if (up->dma)
2378 		serial8250_release_dma(up);
2379 
2380 	spin_lock_irqsave(&port->lock, flags);
2381 	if (port->flags & UPF_FOURPORT) {
2382 		/* reset interrupts on the AST Fourport board */
2383 		inb((port->iobase & 0xfe0) | 0x1f);
2384 		port->mctrl |= TIOCM_OUT1;
2385 	} else
2386 		port->mctrl &= ~TIOCM_OUT2;
2387 
2388 	serial8250_set_mctrl(port, port->mctrl);
2389 	spin_unlock_irqrestore(&port->lock, flags);
2390 
2391 	/*
2392 	 * Disable break condition and FIFOs
2393 	 */
2394 	serial_port_out(port, UART_LCR,
2395 			serial_port_in(port, UART_LCR) & ~UART_LCR_SBC);
2396 	serial8250_clear_fifos(up);
2397 
2398 #ifdef CONFIG_SERIAL_8250_RSA
2399 	/*
2400 	 * Reset the RSA board back to 115kbps compat mode.
2401 	 */
2402 	disable_rsa(up);
2403 #endif
2404 
2405 	/*
2406 	 * Read data port to reset things, and then unlink from
2407 	 * the IRQ chain.
2408 	 */
2409 	serial_port_in(port, UART_RX);
2410 	serial8250_rpm_put(up);
2411 
2412 	up->ops->release_irq(up);
2413 }
2414 EXPORT_SYMBOL_GPL(serial8250_do_shutdown);
2415 
2416 static void serial8250_shutdown(struct uart_port *port)
2417 {
2418 	if (port->shutdown)
2419 		port->shutdown(port);
2420 	else
2421 		serial8250_do_shutdown(port);
2422 }
2423 
2424 /*
2425  * XR17V35x UARTs have an extra fractional divisor register (DLD)
2426  * Calculate divisor with extra 4-bit fractional portion
2427  */
2428 static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up,
2429 					 unsigned int baud,
2430 					 unsigned int *frac)
2431 {
2432 	struct uart_port *port = &up->port;
2433 	unsigned int quot_16;
2434 
2435 	quot_16 = DIV_ROUND_CLOSEST(port->uartclk, baud);
2436 	*frac = quot_16 & 0x0f;
2437 
2438 	return quot_16 >> 4;
2439 }
2440 
2441 static unsigned int serial8250_get_divisor(struct uart_8250_port *up,
2442 					   unsigned int baud,
2443 					   unsigned int *frac)
2444 {
2445 	struct uart_port *port = &up->port;
2446 	unsigned int quot;
2447 
2448 	/*
2449 	 * Handle magic divisors for baud rates above baud_base on
2450 	 * SMSC SuperIO chips.
2451 	 *
2452 	 */
2453 	if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2454 	    baud == (port->uartclk/4))
2455 		quot = 0x8001;
2456 	else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2457 		 baud == (port->uartclk/8))
2458 		quot = 0x8002;
2459 	else if (up->port.type == PORT_XR17V35X)
2460 		quot = xr17v35x_get_divisor(up, baud, frac);
2461 	else
2462 		quot = uart_get_divisor(port, baud);
2463 
2464 	/*
2465 	 * Oxford Semi 952 rev B workaround
2466 	 */
2467 	if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0)
2468 		quot++;
2469 
2470 	return quot;
2471 }
2472 
2473 static unsigned char serial8250_compute_lcr(struct uart_8250_port *up,
2474 					    tcflag_t c_cflag)
2475 {
2476 	unsigned char cval;
2477 
2478 	switch (c_cflag & CSIZE) {
2479 	case CS5:
2480 		cval = UART_LCR_WLEN5;
2481 		break;
2482 	case CS6:
2483 		cval = UART_LCR_WLEN6;
2484 		break;
2485 	case CS7:
2486 		cval = UART_LCR_WLEN7;
2487 		break;
2488 	default:
2489 	case CS8:
2490 		cval = UART_LCR_WLEN8;
2491 		break;
2492 	}
2493 
2494 	if (c_cflag & CSTOPB)
2495 		cval |= UART_LCR_STOP;
2496 	if (c_cflag & PARENB) {
2497 		cval |= UART_LCR_PARITY;
2498 		if (up->bugs & UART_BUG_PARITY)
2499 			up->fifo_bug = true;
2500 	}
2501 	if (!(c_cflag & PARODD))
2502 		cval |= UART_LCR_EPAR;
2503 #ifdef CMSPAR
2504 	if (c_cflag & CMSPAR)
2505 		cval |= UART_LCR_SPAR;
2506 #endif
2507 
2508 	return cval;
2509 }
2510 
2511 static void serial8250_set_divisor(struct uart_port *port, unsigned int baud,
2512 			    unsigned int quot, unsigned int quot_frac)
2513 {
2514 	struct uart_8250_port *up = up_to_u8250p(port);
2515 
2516 	/* Workaround to enable 115200 baud on OMAP1510 internal ports */
2517 	if (is_omap1510_8250(up)) {
2518 		if (baud == 115200) {
2519 			quot = 1;
2520 			serial_port_out(port, UART_OMAP_OSC_12M_SEL, 1);
2521 		} else
2522 			serial_port_out(port, UART_OMAP_OSC_12M_SEL, 0);
2523 	}
2524 
2525 	/*
2526 	 * For NatSemi, switch to bank 2 not bank 1, to avoid resetting EXCR2,
2527 	 * otherwise just set DLAB
2528 	 */
2529 	if (up->capabilities & UART_NATSEMI)
2530 		serial_port_out(port, UART_LCR, 0xe0);
2531 	else
2532 		serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB);
2533 
2534 	serial_dl_write(up, quot);
2535 
2536 	/* XR17V35x UARTs have an extra fractional divisor register (DLD) */
2537 	if (up->port.type == PORT_XR17V35X)
2538 		serial_port_out(port, 0x2, quot_frac);
2539 }
2540 
2541 void
2542 serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
2543 		          struct ktermios *old)
2544 {
2545 	struct uart_8250_port *up = up_to_u8250p(port);
2546 	unsigned char cval;
2547 	unsigned long flags;
2548 	unsigned int baud, quot, frac = 0;
2549 
2550 	cval = serial8250_compute_lcr(up, termios->c_cflag);
2551 
2552 	/*
2553 	 * Ask the core to calculate the divisor for us.
2554 	 */
2555 	baud = uart_get_baud_rate(port, termios, old,
2556 				  port->uartclk / 16 / 0xffff,
2557 				  port->uartclk / 16);
2558 	quot = serial8250_get_divisor(up, baud, &frac);
2559 
2560 	/*
2561 	 * Ok, we're now changing the port state.  Do it with
2562 	 * interrupts disabled.
2563 	 */
2564 	serial8250_rpm_get(up);
2565 	spin_lock_irqsave(&port->lock, flags);
2566 
2567 	up->lcr = cval;					/* Save computed LCR */
2568 
2569 	if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) {
2570 		/* NOTE: If fifo_bug is not set, a user can set RX_trigger. */
2571 		if ((baud < 2400 && !up->dma) || up->fifo_bug) {
2572 			up->fcr &= ~UART_FCR_TRIGGER_MASK;
2573 			up->fcr |= UART_FCR_TRIGGER_1;
2574 		}
2575 	}
2576 
2577 	/*
2578 	 * MCR-based auto flow control.  When AFE is enabled, RTS will be
2579 	 * deasserted when the receive FIFO contains more characters than
2580 	 * the trigger, or the MCR RTS bit is cleared.  In the case where
2581 	 * the remote UART is not using CTS auto flow control, we must
2582 	 * have sufficient FIFO entries for the latency of the remote
2583 	 * UART to respond.  IOW, at least 32 bytes of FIFO.
2584 	 */
2585 	if (up->capabilities & UART_CAP_AFE && port->fifosize >= 32) {
2586 		up->mcr &= ~UART_MCR_AFE;
2587 		if (termios->c_cflag & CRTSCTS)
2588 			up->mcr |= UART_MCR_AFE;
2589 	}
2590 
2591 	/*
2592 	 * Update the per-port timeout.
2593 	 */
2594 	uart_update_timeout(port, termios->c_cflag, baud);
2595 
2596 	port->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
2597 	if (termios->c_iflag & INPCK)
2598 		port->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
2599 	if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
2600 		port->read_status_mask |= UART_LSR_BI;
2601 
2602 	/*
2603 	 * Characteres to ignore
2604 	 */
2605 	port->ignore_status_mask = 0;
2606 	if (termios->c_iflag & IGNPAR)
2607 		port->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
2608 	if (termios->c_iflag & IGNBRK) {
2609 		port->ignore_status_mask |= UART_LSR_BI;
2610 		/*
2611 		 * If we're ignoring parity and break indicators,
2612 		 * ignore overruns too (for real raw support).
2613 		 */
2614 		if (termios->c_iflag & IGNPAR)
2615 			port->ignore_status_mask |= UART_LSR_OE;
2616 	}
2617 
2618 	/*
2619 	 * ignore all characters if CREAD is not set
2620 	 */
2621 	if ((termios->c_cflag & CREAD) == 0)
2622 		port->ignore_status_mask |= UART_LSR_DR;
2623 
2624 	/*
2625 	 * CTS flow control flag and modem status interrupts
2626 	 */
2627 	up->ier &= ~UART_IER_MSI;
2628 	if (!(up->bugs & UART_BUG_NOMSR) &&
2629 			UART_ENABLE_MS(&up->port, termios->c_cflag))
2630 		up->ier |= UART_IER_MSI;
2631 	if (up->capabilities & UART_CAP_UUE)
2632 		up->ier |= UART_IER_UUE;
2633 	if (up->capabilities & UART_CAP_RTOIE)
2634 		up->ier |= UART_IER_RTOIE;
2635 
2636 	serial_port_out(port, UART_IER, up->ier);
2637 
2638 	if (up->capabilities & UART_CAP_EFR) {
2639 		unsigned char efr = 0;
2640 		/*
2641 		 * TI16C752/Startech hardware flow control.  FIXME:
2642 		 * - TI16C752 requires control thresholds to be set.
2643 		 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled.
2644 		 */
2645 		if (termios->c_cflag & CRTSCTS)
2646 			efr |= UART_EFR_CTS;
2647 
2648 		serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
2649 		if (port->flags & UPF_EXAR_EFR)
2650 			serial_port_out(port, UART_XR_EFR, efr);
2651 		else
2652 			serial_port_out(port, UART_EFR, efr);
2653 	}
2654 
2655 	serial8250_set_divisor(port, baud, quot, frac);
2656 
2657 	/*
2658 	 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
2659 	 * is written without DLAB set, this mode will be disabled.
2660 	 */
2661 	if (port->type == PORT_16750)
2662 		serial_port_out(port, UART_FCR, up->fcr);
2663 
2664 	serial_port_out(port, UART_LCR, up->lcr);	/* reset DLAB */
2665 	if (port->type != PORT_16750) {
2666 		/* emulated UARTs (Lucent Venus 167x) need two steps */
2667 		if (up->fcr & UART_FCR_ENABLE_FIFO)
2668 			serial_port_out(port, UART_FCR, UART_FCR_ENABLE_FIFO);
2669 		serial_port_out(port, UART_FCR, up->fcr);	/* set fcr */
2670 	}
2671 	serial8250_set_mctrl(port, port->mctrl);
2672 	spin_unlock_irqrestore(&port->lock, flags);
2673 	serial8250_rpm_put(up);
2674 
2675 	/* Don't rewrite B0 */
2676 	if (tty_termios_baud_rate(termios))
2677 		tty_termios_encode_baud_rate(termios, baud, baud);
2678 }
2679 EXPORT_SYMBOL(serial8250_do_set_termios);
2680 
2681 static void
2682 serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
2683 		       struct ktermios *old)
2684 {
2685 	if (port->set_termios)
2686 		port->set_termios(port, termios, old);
2687 	else
2688 		serial8250_do_set_termios(port, termios, old);
2689 }
2690 
2691 static void
2692 serial8250_set_ldisc(struct uart_port *port, struct ktermios *termios)
2693 {
2694 	if (termios->c_line == N_PPS) {
2695 		port->flags |= UPF_HARDPPS_CD;
2696 		spin_lock_irq(&port->lock);
2697 		serial8250_enable_ms(port);
2698 		spin_unlock_irq(&port->lock);
2699 	} else {
2700 		port->flags &= ~UPF_HARDPPS_CD;
2701 		if (!UART_ENABLE_MS(port, termios->c_cflag)) {
2702 			spin_lock_irq(&port->lock);
2703 			serial8250_disable_ms(port);
2704 			spin_unlock_irq(&port->lock);
2705 		}
2706 	}
2707 }
2708 
2709 
2710 void serial8250_do_pm(struct uart_port *port, unsigned int state,
2711 		      unsigned int oldstate)
2712 {
2713 	struct uart_8250_port *p = up_to_u8250p(port);
2714 
2715 	serial8250_set_sleep(p, state != 0);
2716 }
2717 EXPORT_SYMBOL(serial8250_do_pm);
2718 
2719 static void
2720 serial8250_pm(struct uart_port *port, unsigned int state,
2721 	      unsigned int oldstate)
2722 {
2723 	if (port->pm)
2724 		port->pm(port, state, oldstate);
2725 	else
2726 		serial8250_do_pm(port, state, oldstate);
2727 }
2728 
2729 static unsigned int serial8250_port_size(struct uart_8250_port *pt)
2730 {
2731 	if (pt->port.mapsize)
2732 		return pt->port.mapsize;
2733 	if (pt->port.iotype == UPIO_AU) {
2734 		if (pt->port.type == PORT_RT2880)
2735 			return 0x100;
2736 		return 0x1000;
2737 	}
2738 	if (is_omap1_8250(pt))
2739 		return 0x16 << pt->port.regshift;
2740 
2741 	return 8 << pt->port.regshift;
2742 }
2743 
2744 /*
2745  * Resource handling.
2746  */
2747 static int serial8250_request_std_resource(struct uart_8250_port *up)
2748 {
2749 	unsigned int size = serial8250_port_size(up);
2750 	struct uart_port *port = &up->port;
2751 	int ret = 0;
2752 
2753 	switch (port->iotype) {
2754 	case UPIO_AU:
2755 	case UPIO_TSI:
2756 	case UPIO_MEM32:
2757 	case UPIO_MEM32BE:
2758 	case UPIO_MEM:
2759 		if (!port->mapbase)
2760 			break;
2761 
2762 		if (!request_mem_region(port->mapbase, size, "serial")) {
2763 			ret = -EBUSY;
2764 			break;
2765 		}
2766 
2767 		if (port->flags & UPF_IOREMAP) {
2768 			port->membase = ioremap_nocache(port->mapbase, size);
2769 			if (!port->membase) {
2770 				release_mem_region(port->mapbase, size);
2771 				ret = -ENOMEM;
2772 			}
2773 		}
2774 		break;
2775 
2776 	case UPIO_HUB6:
2777 	case UPIO_PORT:
2778 		if (!request_region(port->iobase, size, "serial"))
2779 			ret = -EBUSY;
2780 		break;
2781 	}
2782 	return ret;
2783 }
2784 
2785 static void serial8250_release_std_resource(struct uart_8250_port *up)
2786 {
2787 	unsigned int size = serial8250_port_size(up);
2788 	struct uart_port *port = &up->port;
2789 
2790 	switch (port->iotype) {
2791 	case UPIO_AU:
2792 	case UPIO_TSI:
2793 	case UPIO_MEM32:
2794 	case UPIO_MEM32BE:
2795 	case UPIO_MEM:
2796 		if (!port->mapbase)
2797 			break;
2798 
2799 		if (port->flags & UPF_IOREMAP) {
2800 			iounmap(port->membase);
2801 			port->membase = NULL;
2802 		}
2803 
2804 		release_mem_region(port->mapbase, size);
2805 		break;
2806 
2807 	case UPIO_HUB6:
2808 	case UPIO_PORT:
2809 		release_region(port->iobase, size);
2810 		break;
2811 	}
2812 }
2813 
2814 #ifdef CONFIG_SERIAL_8250_RSA
2815 static int serial8250_request_rsa_resource(struct uart_8250_port *up)
2816 {
2817 	unsigned long start = UART_RSA_BASE << up->port.regshift;
2818 	unsigned int size = 8 << up->port.regshift;
2819 	struct uart_port *port = &up->port;
2820 	int ret = -EINVAL;
2821 
2822 	switch (port->iotype) {
2823 	case UPIO_HUB6:
2824 	case UPIO_PORT:
2825 		start += port->iobase;
2826 		if (request_region(start, size, "serial-rsa"))
2827 			ret = 0;
2828 		else
2829 			ret = -EBUSY;
2830 		break;
2831 	}
2832 
2833 	return ret;
2834 }
2835 
2836 static void serial8250_release_rsa_resource(struct uart_8250_port *up)
2837 {
2838 	unsigned long offset = UART_RSA_BASE << up->port.regshift;
2839 	unsigned int size = 8 << up->port.regshift;
2840 	struct uart_port *port = &up->port;
2841 
2842 	switch (port->iotype) {
2843 	case UPIO_HUB6:
2844 	case UPIO_PORT:
2845 		release_region(port->iobase + offset, size);
2846 		break;
2847 	}
2848 }
2849 #endif
2850 
2851 static void serial8250_release_port(struct uart_port *port)
2852 {
2853 	struct uart_8250_port *up = up_to_u8250p(port);
2854 
2855 	serial8250_release_std_resource(up);
2856 }
2857 
2858 static int serial8250_request_port(struct uart_port *port)
2859 {
2860 	struct uart_8250_port *up = up_to_u8250p(port);
2861 	int ret;
2862 
2863 	if (port->type == PORT_8250_CIR)
2864 		return -ENODEV;
2865 
2866 	ret = serial8250_request_std_resource(up);
2867 
2868 	return ret;
2869 }
2870 
2871 static int fcr_get_rxtrig_bytes(struct uart_8250_port *up)
2872 {
2873 	const struct serial8250_config *conf_type = &uart_config[up->port.type];
2874 	unsigned char bytes;
2875 
2876 	bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)];
2877 
2878 	return bytes ? bytes : -EOPNOTSUPP;
2879 }
2880 
2881 static int bytes_to_fcr_rxtrig(struct uart_8250_port *up, unsigned char bytes)
2882 {
2883 	const struct serial8250_config *conf_type = &uart_config[up->port.type];
2884 	int i;
2885 
2886 	if (!conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(UART_FCR_R_TRIG_00)])
2887 		return -EOPNOTSUPP;
2888 
2889 	for (i = 1; i < UART_FCR_R_TRIG_MAX_STATE; i++) {
2890 		if (bytes < conf_type->rxtrig_bytes[i])
2891 			/* Use the nearest lower value */
2892 			return (--i) << UART_FCR_R_TRIG_SHIFT;
2893 	}
2894 
2895 	return UART_FCR_R_TRIG_11;
2896 }
2897 
2898 static int do_get_rxtrig(struct tty_port *port)
2899 {
2900 	struct uart_state *state = container_of(port, struct uart_state, port);
2901 	struct uart_port *uport = state->uart_port;
2902 	struct uart_8250_port *up =
2903 		container_of(uport, struct uart_8250_port, port);
2904 
2905 	if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1)
2906 		return -EINVAL;
2907 
2908 	return fcr_get_rxtrig_bytes(up);
2909 }
2910 
2911 static int do_serial8250_get_rxtrig(struct tty_port *port)
2912 {
2913 	int rxtrig_bytes;
2914 
2915 	mutex_lock(&port->mutex);
2916 	rxtrig_bytes = do_get_rxtrig(port);
2917 	mutex_unlock(&port->mutex);
2918 
2919 	return rxtrig_bytes;
2920 }
2921 
2922 static ssize_t serial8250_get_attr_rx_trig_bytes(struct device *dev,
2923 	struct device_attribute *attr, char *buf)
2924 {
2925 	struct tty_port *port = dev_get_drvdata(dev);
2926 	int rxtrig_bytes;
2927 
2928 	rxtrig_bytes = do_serial8250_get_rxtrig(port);
2929 	if (rxtrig_bytes < 0)
2930 		return rxtrig_bytes;
2931 
2932 	return snprintf(buf, PAGE_SIZE, "%d\n", rxtrig_bytes);
2933 }
2934 
2935 static int do_set_rxtrig(struct tty_port *port, unsigned char bytes)
2936 {
2937 	struct uart_state *state = container_of(port, struct uart_state, port);
2938 	struct uart_port *uport = state->uart_port;
2939 	struct uart_8250_port *up =
2940 		container_of(uport, struct uart_8250_port, port);
2941 	int rxtrig;
2942 
2943 	if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1 ||
2944 	    up->fifo_bug)
2945 		return -EINVAL;
2946 
2947 	rxtrig = bytes_to_fcr_rxtrig(up, bytes);
2948 	if (rxtrig < 0)
2949 		return rxtrig;
2950 
2951 	serial8250_clear_fifos(up);
2952 	up->fcr &= ~UART_FCR_TRIGGER_MASK;
2953 	up->fcr |= (unsigned char)rxtrig;
2954 	serial_out(up, UART_FCR, up->fcr);
2955 	return 0;
2956 }
2957 
2958 static int do_serial8250_set_rxtrig(struct tty_port *port, unsigned char bytes)
2959 {
2960 	int ret;
2961 
2962 	mutex_lock(&port->mutex);
2963 	ret = do_set_rxtrig(port, bytes);
2964 	mutex_unlock(&port->mutex);
2965 
2966 	return ret;
2967 }
2968 
2969 static ssize_t serial8250_set_attr_rx_trig_bytes(struct device *dev,
2970 	struct device_attribute *attr, const char *buf, size_t count)
2971 {
2972 	struct tty_port *port = dev_get_drvdata(dev);
2973 	unsigned char bytes;
2974 	int ret;
2975 
2976 	if (!count)
2977 		return -EINVAL;
2978 
2979 	ret = kstrtou8(buf, 10, &bytes);
2980 	if (ret < 0)
2981 		return ret;
2982 
2983 	ret = do_serial8250_set_rxtrig(port, bytes);
2984 	if (ret < 0)
2985 		return ret;
2986 
2987 	return count;
2988 }
2989 
2990 static DEVICE_ATTR(rx_trig_bytes, S_IRUSR | S_IWUSR | S_IRGRP,
2991 		   serial8250_get_attr_rx_trig_bytes,
2992 		   serial8250_set_attr_rx_trig_bytes);
2993 
2994 static struct attribute *serial8250_dev_attrs[] = {
2995 	&dev_attr_rx_trig_bytes.attr,
2996 	NULL,
2997 	};
2998 
2999 static struct attribute_group serial8250_dev_attr_group = {
3000 	.attrs = serial8250_dev_attrs,
3001 	};
3002 
3003 static void register_dev_spec_attr_grp(struct uart_8250_port *up)
3004 {
3005 	const struct serial8250_config *conf_type = &uart_config[up->port.type];
3006 
3007 	if (conf_type->rxtrig_bytes[0])
3008 		up->port.attr_group = &serial8250_dev_attr_group;
3009 }
3010 
3011 static void serial8250_config_port(struct uart_port *port, int flags)
3012 {
3013 	struct uart_8250_port *up = up_to_u8250p(port);
3014 	int ret;
3015 
3016 	if (port->type == PORT_8250_CIR)
3017 		return;
3018 
3019 	/*
3020 	 * Find the region that we can probe for.  This in turn
3021 	 * tells us whether we can probe for the type of port.
3022 	 */
3023 	ret = serial8250_request_std_resource(up);
3024 	if (ret < 0)
3025 		return;
3026 
3027 	if (port->iotype != up->cur_iotype)
3028 		set_io_from_upio(port);
3029 
3030 	if (flags & UART_CONFIG_TYPE)
3031 		autoconfig(up);
3032 
3033 	/* if access method is AU, it is a 16550 with a quirk */
3034 	if (port->type == PORT_16550A && port->iotype == UPIO_AU)
3035 		up->bugs |= UART_BUG_NOMSR;
3036 
3037 	/* HW bugs may trigger IRQ while IIR == NO_INT */
3038 	if (port->type == PORT_TEGRA)
3039 		up->bugs |= UART_BUG_NOMSR;
3040 
3041 	if (port->type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
3042 		autoconfig_irq(up);
3043 
3044 	if (port->type == PORT_UNKNOWN)
3045 		serial8250_release_std_resource(up);
3046 
3047 	/* Fixme: probably not the best place for this */
3048 	if ((port->type == PORT_XR17V35X) ||
3049 	   (port->type == PORT_XR17D15X))
3050 		port->handle_irq = exar_handle_irq;
3051 
3052 	register_dev_spec_attr_grp(up);
3053 	up->fcr = uart_config[up->port.type].fcr;
3054 }
3055 
3056 static int
3057 serial8250_verify_port(struct uart_port *port, struct serial_struct *ser)
3058 {
3059 	if (ser->irq >= nr_irqs || ser->irq < 0 ||
3060 	    ser->baud_base < 9600 || ser->type < PORT_UNKNOWN ||
3061 	    ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS ||
3062 	    ser->type == PORT_STARTECH)
3063 		return -EINVAL;
3064 	return 0;
3065 }
3066 
3067 static const char *
3068 serial8250_type(struct uart_port *port)
3069 {
3070 	int type = port->type;
3071 
3072 	if (type >= ARRAY_SIZE(uart_config))
3073 		type = 0;
3074 	return uart_config[type].name;
3075 }
3076 
3077 static const struct uart_ops serial8250_pops = {
3078 	.tx_empty	= serial8250_tx_empty,
3079 	.set_mctrl	= serial8250_set_mctrl,
3080 	.get_mctrl	= serial8250_get_mctrl,
3081 	.stop_tx	= serial8250_stop_tx,
3082 	.start_tx	= serial8250_start_tx,
3083 	.throttle	= serial8250_throttle,
3084 	.unthrottle	= serial8250_unthrottle,
3085 	.stop_rx	= serial8250_stop_rx,
3086 	.enable_ms	= serial8250_enable_ms,
3087 	.break_ctl	= serial8250_break_ctl,
3088 	.startup	= serial8250_startup,
3089 	.shutdown	= serial8250_shutdown,
3090 	.set_termios	= serial8250_set_termios,
3091 	.set_ldisc	= serial8250_set_ldisc,
3092 	.pm		= serial8250_pm,
3093 	.type		= serial8250_type,
3094 	.release_port	= serial8250_release_port,
3095 	.request_port	= serial8250_request_port,
3096 	.config_port	= serial8250_config_port,
3097 	.verify_port	= serial8250_verify_port,
3098 #ifdef CONFIG_CONSOLE_POLL
3099 	.poll_get_char = serial8250_get_poll_char,
3100 	.poll_put_char = serial8250_put_poll_char,
3101 #endif
3102 };
3103 
3104 static const struct uart_ops *base_ops;
3105 static struct uart_ops univ8250_port_ops;
3106 
3107 static const struct uart_8250_ops univ8250_driver_ops = {
3108 	.setup_irq	= univ8250_setup_irq,
3109 	.release_irq	= univ8250_release_irq,
3110 };
3111 
3112 static struct uart_8250_port serial8250_ports[UART_NR];
3113 
3114 /**
3115  * serial8250_get_port - retrieve struct uart_8250_port
3116  * @line: serial line number
3117  *
3118  * This function retrieves struct uart_8250_port for the specific line.
3119  * This struct *must* *not* be used to perform a 8250 or serial core operation
3120  * which is not accessible otherwise. Its only purpose is to make the struct
3121  * accessible to the runtime-pm callbacks for context suspend/restore.
3122  * The lock assumption made here is none because runtime-pm suspend/resume
3123  * callbacks should not be invoked if there is any operation performed on the
3124  * port.
3125  */
3126 struct uart_8250_port *serial8250_get_port(int line)
3127 {
3128 	return &serial8250_ports[line];
3129 }
3130 EXPORT_SYMBOL_GPL(serial8250_get_port);
3131 
3132 static void (*serial8250_isa_config)(int port, struct uart_port *up,
3133 	unsigned short *capabilities);
3134 
3135 void serial8250_set_isa_configurator(
3136 	void (*v)(int port, struct uart_port *up, unsigned short *capabilities))
3137 {
3138 	serial8250_isa_config = v;
3139 }
3140 EXPORT_SYMBOL(serial8250_set_isa_configurator);
3141 
3142 static void serial8250_init_port(struct uart_8250_port *up)
3143 {
3144 	struct uart_port *port = &up->port;
3145 
3146 	spin_lock_init(&port->lock);
3147 	port->ops = &serial8250_pops;
3148 
3149 	up->cur_iotype = 0xFF;
3150 }
3151 
3152 static void serial8250_set_defaults(struct uart_8250_port *up)
3153 {
3154 	struct uart_port *port = &up->port;
3155 
3156 	if (up->port.flags & UPF_FIXED_TYPE) {
3157 		unsigned int type = up->port.type;
3158 
3159 		if (!up->port.fifosize)
3160 			up->port.fifosize = uart_config[type].fifo_size;
3161 		if (!up->tx_loadsz)
3162 			up->tx_loadsz = uart_config[type].tx_loadsz;
3163 		if (!up->capabilities)
3164 			up->capabilities = uart_config[type].flags;
3165 	}
3166 
3167 	set_io_from_upio(port);
3168 
3169 	/* default dma handlers */
3170 	if (up->dma) {
3171 		if (!up->dma->tx_dma)
3172 			up->dma->tx_dma = serial8250_tx_dma;
3173 		if (!up->dma->rx_dma)
3174 			up->dma->rx_dma = serial8250_rx_dma;
3175 	}
3176 }
3177 
3178 #ifdef CONFIG_SERIAL_8250_RSA
3179 
3180 static void univ8250_config_port(struct uart_port *port, int flags)
3181 {
3182 	struct uart_8250_port *up = up_to_u8250p(port);
3183 
3184 	up->probe &= ~UART_PROBE_RSA;
3185 	if (port->type == PORT_RSA) {
3186 		if (serial8250_request_rsa_resource(up) == 0)
3187 			up->probe |= UART_PROBE_RSA;
3188 	} else if (flags & UART_CONFIG_TYPE) {
3189 		int i;
3190 
3191 		for (i = 0; i < probe_rsa_count; i++) {
3192 			if (probe_rsa[i] == up->port.iobase) {
3193 				if (serial8250_request_rsa_resource(up) == 0)
3194 					up->probe |= UART_PROBE_RSA;
3195 				break;
3196 			}
3197 		}
3198 	}
3199 
3200 	base_ops->config_port(port, flags);
3201 
3202 	if (port->type != PORT_RSA && up->probe & UART_PROBE_RSA)
3203 		serial8250_release_rsa_resource(up);
3204 }
3205 
3206 static int univ8250_request_port(struct uart_port *port)
3207 {
3208 	struct uart_8250_port *up = up_to_u8250p(port);
3209 	int ret;
3210 
3211 	ret = base_ops->request_port(port);
3212 	if (ret == 0 && port->type == PORT_RSA) {
3213 		ret = serial8250_request_rsa_resource(up);
3214 		if (ret < 0)
3215 			base_ops->release_port(port);
3216 	}
3217 
3218 	return ret;
3219 }
3220 
3221 static void univ8250_release_port(struct uart_port *port)
3222 {
3223 	struct uart_8250_port *up = up_to_u8250p(port);
3224 
3225 	if (port->type == PORT_RSA)
3226 		serial8250_release_rsa_resource(up);
3227 	base_ops->release_port(port);
3228 }
3229 
3230 static void univ8250_rsa_support(struct uart_ops *ops)
3231 {
3232 	ops->config_port  = univ8250_config_port;
3233 	ops->request_port = univ8250_request_port;
3234 	ops->release_port = univ8250_release_port;
3235 }
3236 
3237 #else
3238 #define univ8250_rsa_support(x)		do { } while (0)
3239 #endif /* CONFIG_SERIAL_8250_RSA */
3240 
3241 static void __init serial8250_isa_init_ports(void)
3242 {
3243 	struct uart_8250_port *up;
3244 	static int first = 1;
3245 	int i, irqflag = 0;
3246 
3247 	if (!first)
3248 		return;
3249 	first = 0;
3250 
3251 	if (nr_uarts > UART_NR)
3252 		nr_uarts = UART_NR;
3253 
3254 	for (i = 0; i < nr_uarts; i++) {
3255 		struct uart_8250_port *up = &serial8250_ports[i];
3256 		struct uart_port *port = &up->port;
3257 
3258 		port->line = i;
3259 		serial8250_init_port(up);
3260 		if (!base_ops)
3261 			base_ops = port->ops;
3262 		port->ops = &univ8250_port_ops;
3263 
3264 		init_timer(&up->timer);
3265 		up->timer.function = serial8250_timeout;
3266 
3267 		up->ops = &univ8250_driver_ops;
3268 
3269 		/*
3270 		 * ALPHA_KLUDGE_MCR needs to be killed.
3271 		 */
3272 		up->mcr_mask = ~ALPHA_KLUDGE_MCR;
3273 		up->mcr_force = ALPHA_KLUDGE_MCR;
3274 	}
3275 
3276 	/* chain base port ops to support Remote Supervisor Adapter */
3277 	univ8250_port_ops = *base_ops;
3278 	univ8250_rsa_support(&univ8250_port_ops);
3279 
3280 	if (share_irqs)
3281 		irqflag = IRQF_SHARED;
3282 
3283 	for (i = 0, up = serial8250_ports;
3284 	     i < ARRAY_SIZE(old_serial_port) && i < nr_uarts;
3285 	     i++, up++) {
3286 		struct uart_port *port = &up->port;
3287 
3288 		port->iobase   = old_serial_port[i].port;
3289 		port->irq      = irq_canonicalize(old_serial_port[i].irq);
3290 		port->irqflags = old_serial_port[i].irqflags;
3291 		port->uartclk  = old_serial_port[i].baud_base * 16;
3292 		port->flags    = old_serial_port[i].flags;
3293 		port->hub6     = old_serial_port[i].hub6;
3294 		port->membase  = old_serial_port[i].iomem_base;
3295 		port->iotype   = old_serial_port[i].io_type;
3296 		port->regshift = old_serial_port[i].iomem_reg_shift;
3297 		serial8250_set_defaults(up);
3298 
3299 		port->irqflags |= irqflag;
3300 		if (serial8250_isa_config != NULL)
3301 			serial8250_isa_config(i, &up->port, &up->capabilities);
3302 	}
3303 }
3304 
3305 static void __init
3306 serial8250_register_ports(struct uart_driver *drv, struct device *dev)
3307 {
3308 	int i;
3309 
3310 	for (i = 0; i < nr_uarts; i++) {
3311 		struct uart_8250_port *up = &serial8250_ports[i];
3312 
3313 		if (up->port.dev)
3314 			continue;
3315 
3316 		up->port.dev = dev;
3317 
3318 		if (skip_txen_test)
3319 			up->port.flags |= UPF_NO_TXEN_TEST;
3320 
3321 		uart_add_one_port(drv, &up->port);
3322 	}
3323 }
3324 
3325 #ifdef CONFIG_SERIAL_8250_CONSOLE
3326 
3327 static void serial8250_console_putchar(struct uart_port *port, int ch)
3328 {
3329 	struct uart_8250_port *up = up_to_u8250p(port);
3330 
3331 	wait_for_xmitr(up, UART_LSR_THRE);
3332 	serial_port_out(port, UART_TX, ch);
3333 }
3334 
3335 /*
3336  *	Print a string to the serial port trying not to disturb
3337  *	any possible real use of the port...
3338  *
3339  *	The console_lock must be held when we get here.
3340  */
3341 static void serial8250_console_write(struct uart_8250_port *up, const char *s,
3342 				     unsigned int count)
3343 {
3344 	struct uart_port *port = &up->port;
3345 	unsigned long flags;
3346 	unsigned int ier;
3347 	int locked = 1;
3348 
3349 	touch_nmi_watchdog();
3350 
3351 	serial8250_rpm_get(up);
3352 
3353 	if (port->sysrq)
3354 		locked = 0;
3355 	else if (oops_in_progress)
3356 		locked = spin_trylock_irqsave(&port->lock, flags);
3357 	else
3358 		spin_lock_irqsave(&port->lock, flags);
3359 
3360 	/*
3361 	 *	First save the IER then disable the interrupts
3362 	 */
3363 	ier = serial_port_in(port, UART_IER);
3364 
3365 	if (up->capabilities & UART_CAP_UUE)
3366 		serial_port_out(port, UART_IER, UART_IER_UUE);
3367 	else
3368 		serial_port_out(port, UART_IER, 0);
3369 
3370 	/* check scratch reg to see if port powered off during system sleep */
3371 	if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) {
3372 		struct ktermios termios;
3373 		unsigned int baud, quot, frac = 0;
3374 
3375 		termios.c_cflag = port->cons->cflag;
3376 		if (port->state->port.tty && termios.c_cflag == 0)
3377 			termios.c_cflag = port->state->port.tty->termios.c_cflag;
3378 
3379 		baud = uart_get_baud_rate(port, &termios, NULL,
3380 					  port->uartclk / 16 / 0xffff,
3381 					  port->uartclk / 16);
3382 		quot = serial8250_get_divisor(up, baud, &frac);
3383 
3384 		serial8250_set_divisor(port, baud, quot, frac);
3385 		serial_port_out(port, UART_LCR, up->lcr);
3386 		serial_port_out(port, UART_MCR, UART_MCR_DTR | UART_MCR_RTS);
3387 
3388 		up->canary = 0;
3389 	}
3390 
3391 	uart_console_write(port, s, count, serial8250_console_putchar);
3392 
3393 	/*
3394 	 *	Finally, wait for transmitter to become empty
3395 	 *	and restore the IER
3396 	 */
3397 	wait_for_xmitr(up, BOTH_EMPTY);
3398 	serial_port_out(port, UART_IER, ier);
3399 
3400 	/*
3401 	 *	The receive handling will happen properly because the
3402 	 *	receive ready bit will still be set; it is not cleared
3403 	 *	on read.  However, modem control will not, we must
3404 	 *	call it if we have saved something in the saved flags
3405 	 *	while processing with interrupts off.
3406 	 */
3407 	if (up->msr_saved_flags)
3408 		serial8250_modem_status(up);
3409 
3410 	if (locked)
3411 		spin_unlock_irqrestore(&port->lock, flags);
3412 	serial8250_rpm_put(up);
3413 }
3414 
3415 static void univ8250_console_write(struct console *co, const char *s,
3416 				   unsigned int count)
3417 {
3418 	struct uart_8250_port *up = &serial8250_ports[co->index];
3419 
3420 	serial8250_console_write(up, s, count);
3421 }
3422 
3423 static unsigned int probe_baud(struct uart_port *port)
3424 {
3425 	unsigned char lcr, dll, dlm;
3426 	unsigned int quot;
3427 
3428 	lcr = serial_port_in(port, UART_LCR);
3429 	serial_port_out(port, UART_LCR, lcr | UART_LCR_DLAB);
3430 	dll = serial_port_in(port, UART_DLL);
3431 	dlm = serial_port_in(port, UART_DLM);
3432 	serial_port_out(port, UART_LCR, lcr);
3433 
3434 	quot = (dlm << 8) | dll;
3435 	return (port->uartclk / 16) / quot;
3436 }
3437 
3438 static int serial8250_console_setup(struct uart_port *port, char *options, bool probe)
3439 {
3440 	int baud = 9600;
3441 	int bits = 8;
3442 	int parity = 'n';
3443 	int flow = 'n';
3444 
3445 	if (!port->iobase && !port->membase)
3446 		return -ENODEV;
3447 
3448 	if (options)
3449 		uart_parse_options(options, &baud, &parity, &bits, &flow);
3450 	else if (probe)
3451 		baud = probe_baud(port);
3452 
3453 	return uart_set_options(port, port->cons, baud, parity, bits, flow);
3454 }
3455 
3456 static int univ8250_console_setup(struct console *co, char *options)
3457 {
3458 	struct uart_port *port;
3459 
3460 	/*
3461 	 * Check whether an invalid uart number has been specified, and
3462 	 * if so, search for the first available port that does have
3463 	 * console support.
3464 	 */
3465 	if (co->index >= nr_uarts)
3466 		co->index = 0;
3467 	port = &serial8250_ports[co->index].port;
3468 	/* link port to console */
3469 	port->cons = co;
3470 
3471 	return serial8250_console_setup(port, options, false);
3472 }
3473 
3474 /**
3475  *	univ8250_console_match - non-standard console matching
3476  *	@co:	  registering console
3477  *	@name:	  name from console command line
3478  *	@idx:	  index from console command line
3479  *	@options: ptr to option string from console command line
3480  *
3481  *	Only attempts to match console command lines of the form:
3482  *	    console=uart[8250],io|mmio|mmio32,<addr>[,<options>]
3483  *	    console=uart[8250],0x<addr>[,<options>]
3484  *	This form is used to register an initial earlycon boot console and
3485  *	replace it with the serial8250_console at 8250 driver init.
3486  *
3487  *	Performs console setup for a match (as required by interface)
3488  *	If no <options> are specified, then assume the h/w is already setup.
3489  *
3490  *	Returns 0 if console matches; otherwise non-zero to use default matching
3491  */
3492 static int univ8250_console_match(struct console *co, char *name, int idx,
3493 				  char *options)
3494 {
3495 	char match[] = "uart";	/* 8250-specific earlycon name */
3496 	unsigned char iotype;
3497 	unsigned long addr;
3498 	int i;
3499 
3500 	if (strncmp(name, match, 4) != 0)
3501 		return -ENODEV;
3502 
3503 	if (uart_parse_earlycon(options, &iotype, &addr, &options))
3504 		return -ENODEV;
3505 
3506 	/* try to match the port specified on the command line */
3507 	for (i = 0; i < nr_uarts; i++) {
3508 		struct uart_port *port = &serial8250_ports[i].port;
3509 
3510 		if (port->iotype != iotype)
3511 			continue;
3512 		if ((iotype == UPIO_MEM || iotype == UPIO_MEM32) &&
3513 		    (port->mapbase != addr))
3514 			continue;
3515 		if (iotype == UPIO_PORT && port->iobase != addr)
3516 			continue;
3517 
3518 		co->index = i;
3519 		port->cons = co;
3520 		return serial8250_console_setup(port, options, true);
3521 	}
3522 
3523 	return -ENODEV;
3524 }
3525 
3526 static struct console univ8250_console = {
3527 	.name		= "ttyS",
3528 	.write		= univ8250_console_write,
3529 	.device		= uart_console_device,
3530 	.setup		= univ8250_console_setup,
3531 	.match		= univ8250_console_match,
3532 	.flags		= CON_PRINTBUFFER | CON_ANYTIME,
3533 	.index		= -1,
3534 	.data		= &serial8250_reg,
3535 };
3536 
3537 static int __init univ8250_console_init(void)
3538 {
3539 	if (nr_uarts == 0)
3540 		return -ENODEV;
3541 
3542 	serial8250_isa_init_ports();
3543 	register_console(&univ8250_console);
3544 	return 0;
3545 }
3546 console_initcall(univ8250_console_init);
3547 
3548 #define SERIAL8250_CONSOLE	&univ8250_console
3549 #else
3550 #define SERIAL8250_CONSOLE	NULL
3551 #endif
3552 
3553 static struct uart_driver serial8250_reg = {
3554 	.owner			= THIS_MODULE,
3555 	.driver_name		= "serial",
3556 	.dev_name		= "ttyS",
3557 	.major			= TTY_MAJOR,
3558 	.minor			= 64,
3559 	.cons			= SERIAL8250_CONSOLE,
3560 };
3561 
3562 /*
3563  * early_serial_setup - early registration for 8250 ports
3564  *
3565  * Setup an 8250 port structure prior to console initialisation.  Use
3566  * after console initialisation will cause undefined behaviour.
3567  */
3568 int __init early_serial_setup(struct uart_port *port)
3569 {
3570 	struct uart_port *p;
3571 
3572 	if (port->line >= ARRAY_SIZE(serial8250_ports) || nr_uarts == 0)
3573 		return -ENODEV;
3574 
3575 	serial8250_isa_init_ports();
3576 	p = &serial8250_ports[port->line].port;
3577 	p->iobase       = port->iobase;
3578 	p->membase      = port->membase;
3579 	p->irq          = port->irq;
3580 	p->irqflags     = port->irqflags;
3581 	p->uartclk      = port->uartclk;
3582 	p->fifosize     = port->fifosize;
3583 	p->regshift     = port->regshift;
3584 	p->iotype       = port->iotype;
3585 	p->flags        = port->flags;
3586 	p->mapbase      = port->mapbase;
3587 	p->mapsize      = port->mapsize;
3588 	p->private_data = port->private_data;
3589 	p->type		= port->type;
3590 	p->line		= port->line;
3591 
3592 	serial8250_set_defaults(up_to_u8250p(p));
3593 
3594 	if (port->serial_in)
3595 		p->serial_in = port->serial_in;
3596 	if (port->serial_out)
3597 		p->serial_out = port->serial_out;
3598 	if (port->handle_irq)
3599 		p->handle_irq = port->handle_irq;
3600 
3601 	return 0;
3602 }
3603 
3604 /**
3605  *	serial8250_suspend_port - suspend one serial port
3606  *	@line:  serial line number
3607  *
3608  *	Suspend one serial port.
3609  */
3610 void serial8250_suspend_port(int line)
3611 {
3612 	struct uart_8250_port *up = &serial8250_ports[line];
3613 	struct uart_port *port = &up->port;
3614 
3615 	if (!console_suspend_enabled && uart_console(port) &&
3616 	    port->type != PORT_8250) {
3617 		unsigned char canary = 0xa5;
3618 		serial_out(up, UART_SCR, canary);
3619 		if (serial_in(up, UART_SCR) == canary)
3620 			up->canary = canary;
3621 	}
3622 
3623 	uart_suspend_port(&serial8250_reg, port);
3624 }
3625 
3626 /**
3627  *	serial8250_resume_port - resume one serial port
3628  *	@line:  serial line number
3629  *
3630  *	Resume one serial port.
3631  */
3632 void serial8250_resume_port(int line)
3633 {
3634 	struct uart_8250_port *up = &serial8250_ports[line];
3635 	struct uart_port *port = &up->port;
3636 
3637 	up->canary = 0;
3638 
3639 	if (up->capabilities & UART_NATSEMI) {
3640 		/* Ensure it's still in high speed mode */
3641 		serial_port_out(port, UART_LCR, 0xE0);
3642 
3643 		ns16550a_goto_highspeed(up);
3644 
3645 		serial_port_out(port, UART_LCR, 0);
3646 		port->uartclk = 921600*16;
3647 	}
3648 	uart_resume_port(&serial8250_reg, port);
3649 }
3650 
3651 /*
3652  * Register a set of serial devices attached to a platform device.  The
3653  * list is terminated with a zero flags entry, which means we expect
3654  * all entries to have at least UPF_BOOT_AUTOCONF set.
3655  */
3656 static int serial8250_probe(struct platform_device *dev)
3657 {
3658 	struct plat_serial8250_port *p = dev_get_platdata(&dev->dev);
3659 	struct uart_8250_port uart;
3660 	int ret, i, irqflag = 0;
3661 
3662 	memset(&uart, 0, sizeof(uart));
3663 
3664 	if (share_irqs)
3665 		irqflag = IRQF_SHARED;
3666 
3667 	for (i = 0; p && p->flags != 0; p++, i++) {
3668 		uart.port.iobase	= p->iobase;
3669 		uart.port.membase	= p->membase;
3670 		uart.port.irq		= p->irq;
3671 		uart.port.irqflags	= p->irqflags;
3672 		uart.port.uartclk	= p->uartclk;
3673 		uart.port.regshift	= p->regshift;
3674 		uart.port.iotype	= p->iotype;
3675 		uart.port.flags		= p->flags;
3676 		uart.port.mapbase	= p->mapbase;
3677 		uart.port.hub6		= p->hub6;
3678 		uart.port.private_data	= p->private_data;
3679 		uart.port.type		= p->type;
3680 		uart.port.serial_in	= p->serial_in;
3681 		uart.port.serial_out	= p->serial_out;
3682 		uart.port.handle_irq	= p->handle_irq;
3683 		uart.port.handle_break	= p->handle_break;
3684 		uart.port.set_termios	= p->set_termios;
3685 		uart.port.pm		= p->pm;
3686 		uart.port.dev		= &dev->dev;
3687 		uart.port.irqflags	|= irqflag;
3688 		ret = serial8250_register_8250_port(&uart);
3689 		if (ret < 0) {
3690 			dev_err(&dev->dev, "unable to register port at index %d "
3691 				"(IO%lx MEM%llx IRQ%d): %d\n", i,
3692 				p->iobase, (unsigned long long)p->mapbase,
3693 				p->irq, ret);
3694 		}
3695 	}
3696 	return 0;
3697 }
3698 
3699 /*
3700  * Remove serial ports registered against a platform device.
3701  */
3702 static int serial8250_remove(struct platform_device *dev)
3703 {
3704 	int i;
3705 
3706 	for (i = 0; i < nr_uarts; i++) {
3707 		struct uart_8250_port *up = &serial8250_ports[i];
3708 
3709 		if (up->port.dev == &dev->dev)
3710 			serial8250_unregister_port(i);
3711 	}
3712 	return 0;
3713 }
3714 
3715 static int serial8250_suspend(struct platform_device *dev, pm_message_t state)
3716 {
3717 	int i;
3718 
3719 	for (i = 0; i < UART_NR; i++) {
3720 		struct uart_8250_port *up = &serial8250_ports[i];
3721 
3722 		if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
3723 			uart_suspend_port(&serial8250_reg, &up->port);
3724 	}
3725 
3726 	return 0;
3727 }
3728 
3729 static int serial8250_resume(struct platform_device *dev)
3730 {
3731 	int i;
3732 
3733 	for (i = 0; i < UART_NR; i++) {
3734 		struct uart_8250_port *up = &serial8250_ports[i];
3735 
3736 		if (up->port.type != PORT_UNKNOWN && up->port.dev == &dev->dev)
3737 			serial8250_resume_port(i);
3738 	}
3739 
3740 	return 0;
3741 }
3742 
3743 static struct platform_driver serial8250_isa_driver = {
3744 	.probe		= serial8250_probe,
3745 	.remove		= serial8250_remove,
3746 	.suspend	= serial8250_suspend,
3747 	.resume		= serial8250_resume,
3748 	.driver		= {
3749 		.name	= "serial8250",
3750 	},
3751 };
3752 
3753 /*
3754  * This "device" covers _all_ ISA 8250-compatible serial devices listed
3755  * in the table in include/asm/serial.h
3756  */
3757 static struct platform_device *serial8250_isa_devs;
3758 
3759 /*
3760  * serial8250_register_8250_port and serial8250_unregister_port allows for
3761  * 16x50 serial ports to be configured at run-time, to support PCMCIA
3762  * modems and PCI multiport cards.
3763  */
3764 static DEFINE_MUTEX(serial_mutex);
3765 
3766 static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *port)
3767 {
3768 	int i;
3769 
3770 	/*
3771 	 * First, find a port entry which matches.
3772 	 */
3773 	for (i = 0; i < nr_uarts; i++)
3774 		if (uart_match_port(&serial8250_ports[i].port, port))
3775 			return &serial8250_ports[i];
3776 
3777 	/* try line number first if still available */
3778 	i = port->line;
3779 	if (i < nr_uarts && serial8250_ports[i].port.type == PORT_UNKNOWN &&
3780 			serial8250_ports[i].port.iobase == 0)
3781 		return &serial8250_ports[i];
3782 	/*
3783 	 * We didn't find a matching entry, so look for the first
3784 	 * free entry.  We look for one which hasn't been previously
3785 	 * used (indicated by zero iobase).
3786 	 */
3787 	for (i = 0; i < nr_uarts; i++)
3788 		if (serial8250_ports[i].port.type == PORT_UNKNOWN &&
3789 		    serial8250_ports[i].port.iobase == 0)
3790 			return &serial8250_ports[i];
3791 
3792 	/*
3793 	 * That also failed.  Last resort is to find any entry which
3794 	 * doesn't have a real port associated with it.
3795 	 */
3796 	for (i = 0; i < nr_uarts; i++)
3797 		if (serial8250_ports[i].port.type == PORT_UNKNOWN)
3798 			return &serial8250_ports[i];
3799 
3800 	return NULL;
3801 }
3802 
3803 /**
3804  *	serial8250_register_8250_port - register a serial port
3805  *	@up: serial port template
3806  *
3807  *	Configure the serial port specified by the request. If the
3808  *	port exists and is in use, it is hung up and unregistered
3809  *	first.
3810  *
3811  *	The port is then probed and if necessary the IRQ is autodetected
3812  *	If this fails an error is returned.
3813  *
3814  *	On success the port is ready to use and the line number is returned.
3815  */
3816 int serial8250_register_8250_port(struct uart_8250_port *up)
3817 {
3818 	struct uart_8250_port *uart;
3819 	int ret = -ENOSPC;
3820 
3821 	if (up->port.uartclk == 0)
3822 		return -EINVAL;
3823 
3824 	mutex_lock(&serial_mutex);
3825 
3826 	uart = serial8250_find_match_or_unused(&up->port);
3827 	if (uart && uart->port.type != PORT_8250_CIR) {
3828 		if (uart->port.dev)
3829 			uart_remove_one_port(&serial8250_reg, &uart->port);
3830 
3831 		uart->port.iobase       = up->port.iobase;
3832 		uart->port.membase      = up->port.membase;
3833 		uart->port.irq          = up->port.irq;
3834 		uart->port.irqflags     = up->port.irqflags;
3835 		uart->port.uartclk      = up->port.uartclk;
3836 		uart->port.fifosize     = up->port.fifosize;
3837 		uart->port.regshift     = up->port.regshift;
3838 		uart->port.iotype       = up->port.iotype;
3839 		uart->port.flags        = up->port.flags | UPF_BOOT_AUTOCONF;
3840 		uart->bugs		= up->bugs;
3841 		uart->port.mapbase      = up->port.mapbase;
3842 		uart->port.mapsize      = up->port.mapsize;
3843 		uart->port.private_data = up->port.private_data;
3844 		uart->tx_loadsz		= up->tx_loadsz;
3845 		uart->capabilities	= up->capabilities;
3846 		uart->port.throttle	= up->port.throttle;
3847 		uart->port.unthrottle	= up->port.unthrottle;
3848 		uart->port.rs485_config	= up->port.rs485_config;
3849 		uart->port.rs485	= up->port.rs485;
3850 		uart->dma		= up->dma;
3851 
3852 		/* Take tx_loadsz from fifosize if it wasn't set separately */
3853 		if (uart->port.fifosize && !uart->tx_loadsz)
3854 			uart->tx_loadsz = uart->port.fifosize;
3855 
3856 		if (up->port.dev)
3857 			uart->port.dev = up->port.dev;
3858 
3859 		if (skip_txen_test)
3860 			uart->port.flags |= UPF_NO_TXEN_TEST;
3861 
3862 		if (up->port.flags & UPF_FIXED_TYPE)
3863 			uart->port.type = up->port.type;
3864 
3865 		serial8250_set_defaults(uart);
3866 
3867 		/* Possibly override default I/O functions.  */
3868 		if (up->port.serial_in)
3869 			uart->port.serial_in = up->port.serial_in;
3870 		if (up->port.serial_out)
3871 			uart->port.serial_out = up->port.serial_out;
3872 		if (up->port.handle_irq)
3873 			uart->port.handle_irq = up->port.handle_irq;
3874 		/*  Possibly override set_termios call */
3875 		if (up->port.set_termios)
3876 			uart->port.set_termios = up->port.set_termios;
3877 		if (up->port.set_mctrl)
3878 			uart->port.set_mctrl = up->port.set_mctrl;
3879 		if (up->port.startup)
3880 			uart->port.startup = up->port.startup;
3881 		if (up->port.shutdown)
3882 			uart->port.shutdown = up->port.shutdown;
3883 		if (up->port.pm)
3884 			uart->port.pm = up->port.pm;
3885 		if (up->port.handle_break)
3886 			uart->port.handle_break = up->port.handle_break;
3887 		if (up->dl_read)
3888 			uart->dl_read = up->dl_read;
3889 		if (up->dl_write)
3890 			uart->dl_write = up->dl_write;
3891 
3892 		if (serial8250_isa_config != NULL)
3893 			serial8250_isa_config(0, &uart->port,
3894 					&uart->capabilities);
3895 
3896 		ret = uart_add_one_port(&serial8250_reg, &uart->port);
3897 		if (ret == 0)
3898 			ret = uart->port.line;
3899 	}
3900 	mutex_unlock(&serial_mutex);
3901 
3902 	return ret;
3903 }
3904 EXPORT_SYMBOL(serial8250_register_8250_port);
3905 
3906 /**
3907  *	serial8250_unregister_port - remove a 16x50 serial port at runtime
3908  *	@line: serial line number
3909  *
3910  *	Remove one serial port.  This may not be called from interrupt
3911  *	context.  We hand the port back to the our control.
3912  */
3913 void serial8250_unregister_port(int line)
3914 {
3915 	struct uart_8250_port *uart = &serial8250_ports[line];
3916 
3917 	mutex_lock(&serial_mutex);
3918 	uart_remove_one_port(&serial8250_reg, &uart->port);
3919 	if (serial8250_isa_devs) {
3920 		uart->port.flags &= ~UPF_BOOT_AUTOCONF;
3921 		if (skip_txen_test)
3922 			uart->port.flags |= UPF_NO_TXEN_TEST;
3923 		uart->port.type = PORT_UNKNOWN;
3924 		uart->port.dev = &serial8250_isa_devs->dev;
3925 		uart->capabilities = 0;
3926 		uart_add_one_port(&serial8250_reg, &uart->port);
3927 	} else {
3928 		uart->port.dev = NULL;
3929 	}
3930 	mutex_unlock(&serial_mutex);
3931 }
3932 EXPORT_SYMBOL(serial8250_unregister_port);
3933 
3934 static int __init serial8250_init(void)
3935 {
3936 	int ret;
3937 
3938 	if (nr_uarts == 0)
3939 		return -ENODEV;
3940 
3941 	serial8250_isa_init_ports();
3942 
3943 	printk(KERN_INFO "Serial: 8250/16550 driver, "
3944 		"%d ports, IRQ sharing %sabled\n", nr_uarts,
3945 		share_irqs ? "en" : "dis");
3946 
3947 #ifdef CONFIG_SPARC
3948 	ret = sunserial_register_minors(&serial8250_reg, UART_NR);
3949 #else
3950 	serial8250_reg.nr = UART_NR;
3951 	ret = uart_register_driver(&serial8250_reg);
3952 #endif
3953 	if (ret)
3954 		goto out;
3955 
3956 	ret = serial8250_pnp_init();
3957 	if (ret)
3958 		goto unreg_uart_drv;
3959 
3960 	serial8250_isa_devs = platform_device_alloc("serial8250",
3961 						    PLAT8250_DEV_LEGACY);
3962 	if (!serial8250_isa_devs) {
3963 		ret = -ENOMEM;
3964 		goto unreg_pnp;
3965 	}
3966 
3967 	ret = platform_device_add(serial8250_isa_devs);
3968 	if (ret)
3969 		goto put_dev;
3970 
3971 	serial8250_register_ports(&serial8250_reg, &serial8250_isa_devs->dev);
3972 
3973 	ret = platform_driver_register(&serial8250_isa_driver);
3974 	if (ret == 0)
3975 		goto out;
3976 
3977 	platform_device_del(serial8250_isa_devs);
3978 put_dev:
3979 	platform_device_put(serial8250_isa_devs);
3980 unreg_pnp:
3981 	serial8250_pnp_exit();
3982 unreg_uart_drv:
3983 #ifdef CONFIG_SPARC
3984 	sunserial_unregister_minors(&serial8250_reg, UART_NR);
3985 #else
3986 	uart_unregister_driver(&serial8250_reg);
3987 #endif
3988 out:
3989 	return ret;
3990 }
3991 
3992 static void __exit serial8250_exit(void)
3993 {
3994 	struct platform_device *isa_dev = serial8250_isa_devs;
3995 
3996 	/*
3997 	 * This tells serial8250_unregister_port() not to re-register
3998 	 * the ports (thereby making serial8250_isa_driver permanently
3999 	 * in use.)
4000 	 */
4001 	serial8250_isa_devs = NULL;
4002 
4003 	platform_driver_unregister(&serial8250_isa_driver);
4004 	platform_device_unregister(isa_dev);
4005 
4006 	serial8250_pnp_exit();
4007 
4008 #ifdef CONFIG_SPARC
4009 	sunserial_unregister_minors(&serial8250_reg, UART_NR);
4010 #else
4011 	uart_unregister_driver(&serial8250_reg);
4012 #endif
4013 }
4014 
4015 module_init(serial8250_init);
4016 module_exit(serial8250_exit);
4017 
4018 EXPORT_SYMBOL(serial8250_suspend_port);
4019 EXPORT_SYMBOL(serial8250_resume_port);
4020 
4021 MODULE_LICENSE("GPL");
4022 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
4023 
4024 module_param(share_irqs, uint, 0644);
4025 MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices"
4026 	" (unsafe)");
4027 
4028 module_param(nr_uarts, uint, 0644);
4029 MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")");
4030 
4031 module_param(skip_txen_test, uint, 0644);
4032 MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time");
4033 
4034 #ifdef CONFIG_SERIAL_8250_RSA
4035 module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444);
4036 MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
4037 #endif
4038 MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
4039 
4040 #ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
4041 #ifndef MODULE
4042 /* This module was renamed to 8250_core in 3.7.  Keep the old "8250" name
4043  * working as well for the module options so we don't break people.  We
4044  * need to keep the names identical and the convenient macros will happily
4045  * refuse to let us do that by failing the build with redefinition errors
4046  * of global variables.  So we stick them inside a dummy function to avoid
4047  * those conflicts.  The options still get parsed, and the redefined
4048  * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
4049  *
4050  * This is hacky.  I'm sorry.
4051  */
4052 static void __used s8250_options(void)
4053 {
4054 #undef MODULE_PARAM_PREFIX
4055 #define MODULE_PARAM_PREFIX "8250_core."
4056 
4057 	module_param_cb(share_irqs, &param_ops_uint, &share_irqs, 0644);
4058 	module_param_cb(nr_uarts, &param_ops_uint, &nr_uarts, 0644);
4059 	module_param_cb(skip_txen_test, &param_ops_uint, &skip_txen_test, 0644);
4060 #ifdef CONFIG_SERIAL_8250_RSA
4061 	__module_param_call(MODULE_PARAM_PREFIX, probe_rsa,
4062 		&param_array_ops, .arr = &__param_arr_probe_rsa,
4063 		0444, -1, 0);
4064 #endif
4065 }
4066 #else
4067 MODULE_ALIAS("8250_core");
4068 #endif
4069 #endif
4070