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