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