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