]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/tty/serial/8250/8250_port.c
Merge tag 'mfd-fixes-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
[karo-tx-linux.git] / drivers / tty / serial / 8250 / 8250_port.c
1 /*
2  *  Base port operations for 8250/16550-type serial ports
3  *
4  *  Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
5  *  Split from 8250_core.c, Copyright (C) 2001 Russell King.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * A note about mapbase / membase
13  *
14  *  mapbase is the physical address of the IO port.
15  *  membase is an 'ioremapped' cookie.
16  */
17
18 #if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
19 #define SUPPORT_SYSRQ
20 #endif
21
22 #include <linux/module.h>
23 #include <linux/moduleparam.h>
24 #include <linux/ioport.h>
25 #include <linux/init.h>
26 #include <linux/console.h>
27 #include <linux/sysrq.h>
28 #include <linux/delay.h>
29 #include <linux/platform_device.h>
30 #include <linux/tty.h>
31 #include <linux/ratelimit.h>
32 #include <linux/tty_flip.h>
33 #include <linux/serial.h>
34 #include <linux/serial_8250.h>
35 #include <linux/nmi.h>
36 #include <linux/mutex.h>
37 #include <linux/slab.h>
38 #include <linux/uaccess.h>
39 #include <linux/pm_runtime.h>
40
41 #include <asm/io.h>
42 #include <asm/irq.h>
43
44 #include "8250.h"
45
46 /*
47  * Debugging.
48  */
49 #if 0
50 #define DEBUG_AUTOCONF(fmt...)  printk(fmt)
51 #else
52 #define DEBUG_AUTOCONF(fmt...)  do { } while (0)
53 #endif
54
55 #define BOTH_EMPTY      (UART_LSR_TEMT | UART_LSR_THRE)
56
57 /*
58  * Here we define the default xmit fifo size used for each type of UART.
59  */
60 static const struct serial8250_config uart_config[] = {
61         [PORT_UNKNOWN] = {
62                 .name           = "unknown",
63                 .fifo_size      = 1,
64                 .tx_loadsz      = 1,
65         },
66         [PORT_8250] = {
67                 .name           = "8250",
68                 .fifo_size      = 1,
69                 .tx_loadsz      = 1,
70         },
71         [PORT_16450] = {
72                 .name           = "16450",
73                 .fifo_size      = 1,
74                 .tx_loadsz      = 1,
75         },
76         [PORT_16550] = {
77                 .name           = "16550",
78                 .fifo_size      = 1,
79                 .tx_loadsz      = 1,
80         },
81         [PORT_16550A] = {
82                 .name           = "16550A",
83                 .fifo_size      = 16,
84                 .tx_loadsz      = 16,
85                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
86                 .rxtrig_bytes   = {1, 4, 8, 14},
87                 .flags          = UART_CAP_FIFO,
88         },
89         [PORT_CIRRUS] = {
90                 .name           = "Cirrus",
91                 .fifo_size      = 1,
92                 .tx_loadsz      = 1,
93         },
94         [PORT_16650] = {
95                 .name           = "ST16650",
96                 .fifo_size      = 1,
97                 .tx_loadsz      = 1,
98                 .flags          = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
99         },
100         [PORT_16650V2] = {
101                 .name           = "ST16650V2",
102                 .fifo_size      = 32,
103                 .tx_loadsz      = 16,
104                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
105                                   UART_FCR_T_TRIG_00,
106                 .rxtrig_bytes   = {8, 16, 24, 28},
107                 .flags          = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
108         },
109         [PORT_16750] = {
110                 .name           = "TI16750",
111                 .fifo_size      = 64,
112                 .tx_loadsz      = 64,
113                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
114                                   UART_FCR7_64BYTE,
115                 .rxtrig_bytes   = {1, 16, 32, 56},
116                 .flags          = UART_CAP_FIFO | UART_CAP_SLEEP | UART_CAP_AFE,
117         },
118         [PORT_STARTECH] = {
119                 .name           = "Startech",
120                 .fifo_size      = 1,
121                 .tx_loadsz      = 1,
122         },
123         [PORT_16C950] = {
124                 .name           = "16C950/954",
125                 .fifo_size      = 128,
126                 .tx_loadsz      = 128,
127                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
128                 /* UART_CAP_EFR breaks billionon CF bluetooth card. */
129                 .flags          = UART_CAP_FIFO | UART_CAP_SLEEP,
130         },
131         [PORT_16654] = {
132                 .name           = "ST16654",
133                 .fifo_size      = 64,
134                 .tx_loadsz      = 32,
135                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
136                                   UART_FCR_T_TRIG_10,
137                 .rxtrig_bytes   = {8, 16, 56, 60},
138                 .flags          = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
139         },
140         [PORT_16850] = {
141                 .name           = "XR16850",
142                 .fifo_size      = 128,
143                 .tx_loadsz      = 128,
144                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
145                 .flags          = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
146         },
147         [PORT_RSA] = {
148                 .name           = "RSA",
149                 .fifo_size      = 2048,
150                 .tx_loadsz      = 2048,
151                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11,
152                 .flags          = UART_CAP_FIFO,
153         },
154         [PORT_NS16550A] = {
155                 .name           = "NS16550A",
156                 .fifo_size      = 16,
157                 .tx_loadsz      = 16,
158                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
159                 .flags          = UART_CAP_FIFO | UART_NATSEMI,
160         },
161         [PORT_XSCALE] = {
162                 .name           = "XScale",
163                 .fifo_size      = 32,
164                 .tx_loadsz      = 32,
165                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
166                 .flags          = UART_CAP_FIFO | UART_CAP_UUE | UART_CAP_RTOIE,
167         },
168         [PORT_OCTEON] = {
169                 .name           = "OCTEON",
170                 .fifo_size      = 64,
171                 .tx_loadsz      = 64,
172                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
173                 .flags          = UART_CAP_FIFO,
174         },
175         [PORT_AR7] = {
176                 .name           = "AR7",
177                 .fifo_size      = 16,
178                 .tx_loadsz      = 16,
179                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_00,
180                 .flags          = UART_CAP_FIFO | UART_CAP_AFE,
181         },
182         [PORT_U6_16550A] = {
183                 .name           = "U6_16550A",
184                 .fifo_size      = 64,
185                 .tx_loadsz      = 64,
186                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
187                 .flags          = UART_CAP_FIFO | UART_CAP_AFE,
188         },
189         [PORT_TEGRA] = {
190                 .name           = "Tegra",
191                 .fifo_size      = 32,
192                 .tx_loadsz      = 8,
193                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
194                                   UART_FCR_T_TRIG_01,
195                 .rxtrig_bytes   = {1, 4, 8, 14},
196                 .flags          = UART_CAP_FIFO | UART_CAP_RTOIE,
197         },
198         [PORT_XR17D15X] = {
199                 .name           = "XR17D15X",
200                 .fifo_size      = 64,
201                 .tx_loadsz      = 64,
202                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
203                 .flags          = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR |
204                                   UART_CAP_SLEEP,
205         },
206         [PORT_XR17V35X] = {
207                 .name           = "XR17V35X",
208                 .fifo_size      = 256,
209                 .tx_loadsz      = 256,
210                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_11 |
211                                   UART_FCR_T_TRIG_11,
212                 .flags          = UART_CAP_FIFO | UART_CAP_AFE | UART_CAP_EFR |
213                                   UART_CAP_SLEEP,
214         },
215         [PORT_LPC3220] = {
216                 .name           = "LPC3220",
217                 .fifo_size      = 64,
218                 .tx_loadsz      = 32,
219                 .fcr            = UART_FCR_DMA_SELECT | UART_FCR_ENABLE_FIFO |
220                                   UART_FCR_R_TRIG_00 | UART_FCR_T_TRIG_00,
221                 .flags          = UART_CAP_FIFO,
222         },
223         [PORT_BRCM_TRUMANAGE] = {
224                 .name           = "TruManage",
225                 .fifo_size      = 1,
226                 .tx_loadsz      = 1024,
227                 .flags          = UART_CAP_HFIFO,
228         },
229         [PORT_8250_CIR] = {
230                 .name           = "CIR port"
231         },
232         [PORT_ALTR_16550_F32] = {
233                 .name           = "Altera 16550 FIFO32",
234                 .fifo_size      = 32,
235                 .tx_loadsz      = 32,
236                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
237                 .flags          = UART_CAP_FIFO | UART_CAP_AFE,
238         },
239         [PORT_ALTR_16550_F64] = {
240                 .name           = "Altera 16550 FIFO64",
241                 .fifo_size      = 64,
242                 .tx_loadsz      = 64,
243                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
244                 .flags          = UART_CAP_FIFO | UART_CAP_AFE,
245         },
246         [PORT_ALTR_16550_F128] = {
247                 .name           = "Altera 16550 FIFO128",
248                 .fifo_size      = 128,
249                 .tx_loadsz      = 128,
250                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
251                 .flags          = UART_CAP_FIFO | UART_CAP_AFE,
252         },
253 /* tx_loadsz is set to 63-bytes instead of 64-bytes to implement
254 workaround of errata A-008006 which states that tx_loadsz should  be
255 configured less than Maximum supported fifo bytes */
256         [PORT_16550A_FSL64] = {
257                 .name           = "16550A_FSL64",
258                 .fifo_size      = 64,
259                 .tx_loadsz      = 63,
260                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10 |
261                                   UART_FCR7_64BYTE,
262                 .flags          = UART_CAP_FIFO,
263         },
264         [PORT_RT2880] = {
265                 .name           = "Palmchip BK-3103",
266                 .fifo_size      = 16,
267                 .tx_loadsz      = 16,
268                 .fcr            = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
269                 .rxtrig_bytes   = {1, 4, 8, 14},
270                 .flags          = UART_CAP_FIFO,
271         },
272 };
273
274 /* Uart divisor latch read */
275 static int default_serial_dl_read(struct uart_8250_port *up)
276 {
277         return serial_in(up, UART_DLL) | serial_in(up, UART_DLM) << 8;
278 }
279
280 /* Uart divisor latch write */
281 static void default_serial_dl_write(struct uart_8250_port *up, int value)
282 {
283         serial_out(up, UART_DLL, value & 0xff);
284         serial_out(up, UART_DLM, value >> 8 & 0xff);
285 }
286
287 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
288
289 /* Au1x00/RT288x UART hardware has a weird register layout */
290 static const s8 au_io_in_map[8] = {
291          0,     /* UART_RX  */
292          2,     /* UART_IER */
293          3,     /* UART_IIR */
294          5,     /* UART_LCR */
295          6,     /* UART_MCR */
296          7,     /* UART_LSR */
297          8,     /* UART_MSR */
298         -1,     /* UART_SCR (unmapped) */
299 };
300
301 static const s8 au_io_out_map[8] = {
302          1,     /* UART_TX  */
303          2,     /* UART_IER */
304          4,     /* UART_FCR */
305          5,     /* UART_LCR */
306          6,     /* UART_MCR */
307         -1,     /* UART_LSR (unmapped) */
308         -1,     /* UART_MSR (unmapped) */
309         -1,     /* UART_SCR (unmapped) */
310 };
311
312 static unsigned int au_serial_in(struct uart_port *p, int offset)
313 {
314         if (offset >= ARRAY_SIZE(au_io_in_map))
315                 return UINT_MAX;
316         offset = au_io_in_map[offset];
317         if (offset < 0)
318                 return UINT_MAX;
319         return __raw_readl(p->membase + (offset << p->regshift));
320 }
321
322 static void au_serial_out(struct uart_port *p, int offset, int value)
323 {
324         if (offset >= ARRAY_SIZE(au_io_out_map))
325                 return;
326         offset = au_io_out_map[offset];
327         if (offset < 0)
328                 return;
329         __raw_writel(value, p->membase + (offset << p->regshift));
330 }
331
332 /* Au1x00 haven't got a standard divisor latch */
333 static int au_serial_dl_read(struct uart_8250_port *up)
334 {
335         return __raw_readl(up->port.membase + 0x28);
336 }
337
338 static void au_serial_dl_write(struct uart_8250_port *up, int value)
339 {
340         __raw_writel(value, up->port.membase + 0x28);
341 }
342
343 #endif
344
345 static unsigned int hub6_serial_in(struct uart_port *p, int offset)
346 {
347         offset = offset << p->regshift;
348         outb(p->hub6 - 1 + offset, p->iobase);
349         return inb(p->iobase + 1);
350 }
351
352 static void hub6_serial_out(struct uart_port *p, int offset, int value)
353 {
354         offset = offset << p->regshift;
355         outb(p->hub6 - 1 + offset, p->iobase);
356         outb(value, p->iobase + 1);
357 }
358
359 static unsigned int mem_serial_in(struct uart_port *p, int offset)
360 {
361         offset = offset << p->regshift;
362         return readb(p->membase + offset);
363 }
364
365 static void mem_serial_out(struct uart_port *p, int offset, int value)
366 {
367         offset = offset << p->regshift;
368         writeb(value, p->membase + offset);
369 }
370
371 static void mem32_serial_out(struct uart_port *p, int offset, int value)
372 {
373         offset = offset << p->regshift;
374         writel(value, p->membase + offset);
375 }
376
377 static unsigned int mem32_serial_in(struct uart_port *p, int offset)
378 {
379         offset = offset << p->regshift;
380         return readl(p->membase + offset);
381 }
382
383 static void mem32be_serial_out(struct uart_port *p, int offset, int value)
384 {
385         offset = offset << p->regshift;
386         iowrite32be(value, p->membase + offset);
387 }
388
389 static unsigned int mem32be_serial_in(struct uart_port *p, int offset)
390 {
391         offset = offset << p->regshift;
392         return ioread32be(p->membase + offset);
393 }
394
395 static unsigned int io_serial_in(struct uart_port *p, int offset)
396 {
397         offset = offset << p->regshift;
398         return inb(p->iobase + offset);
399 }
400
401 static void io_serial_out(struct uart_port *p, int offset, int value)
402 {
403         offset = offset << p->regshift;
404         outb(value, p->iobase + offset);
405 }
406
407 static int serial8250_default_handle_irq(struct uart_port *port);
408 static int exar_handle_irq(struct uart_port *port);
409
410 static void set_io_from_upio(struct uart_port *p)
411 {
412         struct uart_8250_port *up = up_to_u8250p(p);
413
414         up->dl_read = default_serial_dl_read;
415         up->dl_write = default_serial_dl_write;
416
417         switch (p->iotype) {
418         case UPIO_HUB6:
419                 p->serial_in = hub6_serial_in;
420                 p->serial_out = hub6_serial_out;
421                 break;
422
423         case UPIO_MEM:
424                 p->serial_in = mem_serial_in;
425                 p->serial_out = mem_serial_out;
426                 break;
427
428         case UPIO_MEM32:
429                 p->serial_in = mem32_serial_in;
430                 p->serial_out = mem32_serial_out;
431                 break;
432
433         case UPIO_MEM32BE:
434                 p->serial_in = mem32be_serial_in;
435                 p->serial_out = mem32be_serial_out;
436                 break;
437
438 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
439         case UPIO_AU:
440                 p->serial_in = au_serial_in;
441                 p->serial_out = au_serial_out;
442                 up->dl_read = au_serial_dl_read;
443                 up->dl_write = au_serial_dl_write;
444                 break;
445 #endif
446
447         default:
448                 p->serial_in = io_serial_in;
449                 p->serial_out = io_serial_out;
450                 break;
451         }
452         /* Remember loaded iotype */
453         up->cur_iotype = p->iotype;
454         p->handle_irq = serial8250_default_handle_irq;
455 }
456
457 static void
458 serial_port_out_sync(struct uart_port *p, int offset, int value)
459 {
460         switch (p->iotype) {
461         case UPIO_MEM:
462         case UPIO_MEM32:
463         case UPIO_MEM32BE:
464         case UPIO_AU:
465                 p->serial_out(p, offset, value);
466                 p->serial_in(p, UART_LCR);      /* safe, no side-effects */
467                 break;
468         default:
469                 p->serial_out(p, offset, value);
470         }
471 }
472
473 /*
474  * For the 16C950
475  */
476 static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
477 {
478         serial_out(up, UART_SCR, offset);
479         serial_out(up, UART_ICR, value);
480 }
481
482 static unsigned int serial_icr_read(struct uart_8250_port *up, int offset)
483 {
484         unsigned int value;
485
486         serial_icr_write(up, UART_ACR, up->acr | UART_ACR_ICRRD);
487         serial_out(up, UART_SCR, offset);
488         value = serial_in(up, UART_ICR);
489         serial_icr_write(up, UART_ACR, up->acr);
490
491         return value;
492 }
493
494 /*
495  * FIFO support.
496  */
497 static void serial8250_clear_fifos(struct uart_8250_port *p)
498 {
499         if (p->capabilities & UART_CAP_FIFO) {
500                 serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO);
501                 serial_out(p, UART_FCR, UART_FCR_ENABLE_FIFO |
502                                UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
503                 serial_out(p, UART_FCR, 0);
504         }
505 }
506
507 void serial8250_clear_and_reinit_fifos(struct uart_8250_port *p)
508 {
509         serial8250_clear_fifos(p);
510         serial_out(p, UART_FCR, p->fcr);
511 }
512 EXPORT_SYMBOL_GPL(serial8250_clear_and_reinit_fifos);
513
514 void serial8250_rpm_get(struct uart_8250_port *p)
515 {
516         if (!(p->capabilities & UART_CAP_RPM))
517                 return;
518         pm_runtime_get_sync(p->port.dev);
519 }
520 EXPORT_SYMBOL_GPL(serial8250_rpm_get);
521
522 void serial8250_rpm_put(struct uart_8250_port *p)
523 {
524         if (!(p->capabilities & UART_CAP_RPM))
525                 return;
526         pm_runtime_mark_last_busy(p->port.dev);
527         pm_runtime_put_autosuspend(p->port.dev);
528 }
529 EXPORT_SYMBOL_GPL(serial8250_rpm_put);
530
531 /*
532  * These two wrappers ensure that enable_runtime_pm_tx() can be called more than
533  * once and disable_runtime_pm_tx() will still disable RPM because the fifo is
534  * empty and the HW can idle again.
535  */
536 static void serial8250_rpm_get_tx(struct uart_8250_port *p)
537 {
538         unsigned char rpm_active;
539
540         if (!(p->capabilities & UART_CAP_RPM))
541                 return;
542
543         rpm_active = xchg(&p->rpm_tx_active, 1);
544         if (rpm_active)
545                 return;
546         pm_runtime_get_sync(p->port.dev);
547 }
548
549 static void serial8250_rpm_put_tx(struct uart_8250_port *p)
550 {
551         unsigned char rpm_active;
552
553         if (!(p->capabilities & UART_CAP_RPM))
554                 return;
555
556         rpm_active = xchg(&p->rpm_tx_active, 0);
557         if (!rpm_active)
558                 return;
559         pm_runtime_mark_last_busy(p->port.dev);
560         pm_runtime_put_autosuspend(p->port.dev);
561 }
562
563 /*
564  * IER sleep support.  UARTs which have EFRs need the "extended
565  * capability" bit enabled.  Note that on XR16C850s, we need to
566  * reset LCR to write to IER.
567  */
568 static void serial8250_set_sleep(struct uart_8250_port *p, int sleep)
569 {
570         unsigned char lcr = 0, efr = 0;
571         /*
572          * Exar UARTs have a SLEEP register that enables or disables
573          * each UART to enter sleep mode separately.  On the XR17V35x the
574          * register is accessible to each UART at the UART_EXAR_SLEEP
575          * offset but the UART channel may only write to the corresponding
576          * bit.
577          */
578         serial8250_rpm_get(p);
579         if ((p->port.type == PORT_XR17V35X) ||
580            (p->port.type == PORT_XR17D15X)) {
581                 serial_out(p, UART_EXAR_SLEEP, sleep ? 0xff : 0);
582                 goto out;
583         }
584
585         if (p->capabilities & UART_CAP_SLEEP) {
586                 if (p->capabilities & UART_CAP_EFR) {
587                         lcr = serial_in(p, UART_LCR);
588                         efr = serial_in(p, UART_EFR);
589                         serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B);
590                         serial_out(p, UART_EFR, UART_EFR_ECB);
591                         serial_out(p, UART_LCR, 0);
592                 }
593                 serial_out(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
594                 if (p->capabilities & UART_CAP_EFR) {
595                         serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B);
596                         serial_out(p, UART_EFR, efr);
597                         serial_out(p, UART_LCR, lcr);
598                 }
599         }
600 out:
601         serial8250_rpm_put(p);
602 }
603
604 #ifdef CONFIG_SERIAL_8250_RSA
605 /*
606  * Attempts to turn on the RSA FIFO.  Returns zero on failure.
607  * We set the port uart clock rate if we succeed.
608  */
609 static int __enable_rsa(struct uart_8250_port *up)
610 {
611         unsigned char mode;
612         int result;
613
614         mode = serial_in(up, UART_RSA_MSR);
615         result = mode & UART_RSA_MSR_FIFO;
616
617         if (!result) {
618                 serial_out(up, UART_RSA_MSR, mode | UART_RSA_MSR_FIFO);
619                 mode = serial_in(up, UART_RSA_MSR);
620                 result = mode & UART_RSA_MSR_FIFO;
621         }
622
623         if (result)
624                 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16;
625
626         return result;
627 }
628
629 static void enable_rsa(struct uart_8250_port *up)
630 {
631         if (up->port.type == PORT_RSA) {
632                 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) {
633                         spin_lock_irq(&up->port.lock);
634                         __enable_rsa(up);
635                         spin_unlock_irq(&up->port.lock);
636                 }
637                 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16)
638                         serial_out(up, UART_RSA_FRR, 0);
639         }
640 }
641
642 /*
643  * Attempts to turn off the RSA FIFO.  Returns zero on failure.
644  * It is unknown why interrupts were disabled in here.  However,
645  * the caller is expected to preserve this behaviour by grabbing
646  * the spinlock before calling this function.
647  */
648 static void disable_rsa(struct uart_8250_port *up)
649 {
650         unsigned char mode;
651         int result;
652
653         if (up->port.type == PORT_RSA &&
654             up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) {
655                 spin_lock_irq(&up->port.lock);
656
657                 mode = serial_in(up, UART_RSA_MSR);
658                 result = !(mode & UART_RSA_MSR_FIFO);
659
660                 if (!result) {
661                         serial_out(up, UART_RSA_MSR, mode & ~UART_RSA_MSR_FIFO);
662                         mode = serial_in(up, UART_RSA_MSR);
663                         result = !(mode & UART_RSA_MSR_FIFO);
664                 }
665
666                 if (result)
667                         up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16;
668                 spin_unlock_irq(&up->port.lock);
669         }
670 }
671 #endif /* CONFIG_SERIAL_8250_RSA */
672
673 /*
674  * This is a quickie test to see how big the FIFO is.
675  * It doesn't work at all the time, more's the pity.
676  */
677 static int size_fifo(struct uart_8250_port *up)
678 {
679         unsigned char old_fcr, old_mcr, old_lcr;
680         unsigned short old_dl;
681         int count;
682
683         old_lcr = serial_in(up, UART_LCR);
684         serial_out(up, UART_LCR, 0);
685         old_fcr = serial_in(up, UART_FCR);
686         old_mcr = serial_in(up, UART_MCR);
687         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
688                     UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
689         serial_out(up, UART_MCR, UART_MCR_LOOP);
690         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
691         old_dl = serial_dl_read(up);
692         serial_dl_write(up, 0x0001);
693         serial_out(up, UART_LCR, 0x03);
694         for (count = 0; count < 256; count++)
695                 serial_out(up, UART_TX, count);
696         mdelay(20);/* FIXME - schedule_timeout */
697         for (count = 0; (serial_in(up, UART_LSR) & UART_LSR_DR) &&
698              (count < 256); count++)
699                 serial_in(up, UART_RX);
700         serial_out(up, UART_FCR, old_fcr);
701         serial_out(up, UART_MCR, old_mcr);
702         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
703         serial_dl_write(up, old_dl);
704         serial_out(up, UART_LCR, old_lcr);
705
706         return count;
707 }
708
709 /*
710  * Read UART ID using the divisor method - set DLL and DLM to zero
711  * and the revision will be in DLL and device type in DLM.  We
712  * preserve the device state across this.
713  */
714 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port *p)
715 {
716         unsigned char old_dll, old_dlm, old_lcr;
717         unsigned int id;
718
719         old_lcr = serial_in(p, UART_LCR);
720         serial_out(p, UART_LCR, UART_LCR_CONF_MODE_A);
721
722         old_dll = serial_in(p, UART_DLL);
723         old_dlm = serial_in(p, UART_DLM);
724
725         serial_out(p, UART_DLL, 0);
726         serial_out(p, UART_DLM, 0);
727
728         id = serial_in(p, UART_DLL) | serial_in(p, UART_DLM) << 8;
729
730         serial_out(p, UART_DLL, old_dll);
731         serial_out(p, UART_DLM, old_dlm);
732         serial_out(p, UART_LCR, old_lcr);
733
734         return id;
735 }
736
737 /*
738  * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
739  * When this function is called we know it is at least a StarTech
740  * 16650 V2, but it might be one of several StarTech UARTs, or one of
741  * its clones.  (We treat the broken original StarTech 16650 V1 as a
742  * 16550, and why not?  Startech doesn't seem to even acknowledge its
743  * existence.)
744  *
745  * What evil have men's minds wrought...
746  */
747 static void autoconfig_has_efr(struct uart_8250_port *up)
748 {
749         unsigned int id1, id2, id3, rev;
750
751         /*
752          * Everything with an EFR has SLEEP
753          */
754         up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
755
756         /*
757          * First we check to see if it's an Oxford Semiconductor UART.
758          *
759          * If we have to do this here because some non-National
760          * Semiconductor clone chips lock up if you try writing to the
761          * LSR register (which serial_icr_read does)
762          */
763
764         /*
765          * Check for Oxford Semiconductor 16C950.
766          *
767          * EFR [4] must be set else this test fails.
768          *
769          * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca)
770          * claims that it's needed for 952 dual UART's (which are not
771          * recommended for new designs).
772          */
773         up->acr = 0;
774         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
775         serial_out(up, UART_EFR, UART_EFR_ECB);
776         serial_out(up, UART_LCR, 0x00);
777         id1 = serial_icr_read(up, UART_ID1);
778         id2 = serial_icr_read(up, UART_ID2);
779         id3 = serial_icr_read(up, UART_ID3);
780         rev = serial_icr_read(up, UART_REV);
781
782         DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1, id2, id3, rev);
783
784         if (id1 == 0x16 && id2 == 0xC9 &&
785             (id3 == 0x50 || id3 == 0x52 || id3 == 0x54)) {
786                 up->port.type = PORT_16C950;
787
788                 /*
789                  * Enable work around for the Oxford Semiconductor 952 rev B
790                  * chip which causes it to seriously miscalculate baud rates
791                  * when DLL is 0.
792                  */
793                 if (id3 == 0x52 && rev == 0x01)
794                         up->bugs |= UART_BUG_QUOT;
795                 return;
796         }
797
798         /*
799          * We check for a XR16C850 by setting DLL and DLM to 0, and then
800          * reading back DLL and DLM.  The chip type depends on the DLM
801          * value read back:
802          *  0x10 - XR16C850 and the DLL contains the chip revision.
803          *  0x12 - XR16C2850.
804          *  0x14 - XR16C854.
805          */
806         id1 = autoconfig_read_divisor_id(up);
807         DEBUG_AUTOCONF("850id=%04x ", id1);
808
809         id2 = id1 >> 8;
810         if (id2 == 0x10 || id2 == 0x12 || id2 == 0x14) {
811                 up->port.type = PORT_16850;
812                 return;
813         }
814
815         /*
816          * It wasn't an XR16C850.
817          *
818          * We distinguish between the '654 and the '650 by counting
819          * how many bytes are in the FIFO.  I'm using this for now,
820          * since that's the technique that was sent to me in the
821          * serial driver update, but I'm not convinced this works.
822          * I've had problems doing this in the past.  -TYT
823          */
824         if (size_fifo(up) == 64)
825                 up->port.type = PORT_16654;
826         else
827                 up->port.type = PORT_16650V2;
828 }
829
830 /*
831  * We detected a chip without a FIFO.  Only two fall into
832  * this category - the original 8250 and the 16450.  The
833  * 16450 has a scratch register (accessible with LCR=0)
834  */
835 static void autoconfig_8250(struct uart_8250_port *up)
836 {
837         unsigned char scratch, status1, status2;
838
839         up->port.type = PORT_8250;
840
841         scratch = serial_in(up, UART_SCR);
842         serial_out(up, UART_SCR, 0xa5);
843         status1 = serial_in(up, UART_SCR);
844         serial_out(up, UART_SCR, 0x5a);
845         status2 = serial_in(up, UART_SCR);
846         serial_out(up, UART_SCR, scratch);
847
848         if (status1 == 0xa5 && status2 == 0x5a)
849                 up->port.type = PORT_16450;
850 }
851
852 static int broken_efr(struct uart_8250_port *up)
853 {
854         /*
855          * Exar ST16C2550 "A2" devices incorrectly detect as
856          * having an EFR, and report an ID of 0x0201.  See
857          * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html
858          */
859         if (autoconfig_read_divisor_id(up) == 0x0201 && size_fifo(up) == 16)
860                 return 1;
861
862         return 0;
863 }
864
865 /*
866  * We know that the chip has FIFOs.  Does it have an EFR?  The
867  * EFR is located in the same register position as the IIR and
868  * we know the top two bits of the IIR are currently set.  The
869  * EFR should contain zero.  Try to read the EFR.
870  */
871 static void autoconfig_16550a(struct uart_8250_port *up)
872 {
873         unsigned char status1, status2;
874         unsigned int iersave;
875
876         up->port.type = PORT_16550A;
877         up->capabilities |= UART_CAP_FIFO;
878
879         /*
880          * XR17V35x UARTs have an extra divisor register, DLD
881          * that gets enabled with when DLAB is set which will
882          * cause the device to incorrectly match and assign
883          * port type to PORT_16650.  The EFR for this UART is
884          * found at offset 0x09. Instead check the Deice ID (DVID)
885          * register for a 2, 4 or 8 port UART.
886          */
887         if (up->port.flags & UPF_EXAR_EFR) {
888                 status1 = serial_in(up, UART_EXAR_DVID);
889                 if (status1 == 0x82 || status1 == 0x84 || status1 == 0x88) {
890                         DEBUG_AUTOCONF("Exar XR17V35x ");
891                         up->port.type = PORT_XR17V35X;
892                         up->capabilities |= UART_CAP_AFE | UART_CAP_EFR |
893                                                 UART_CAP_SLEEP;
894
895                         return;
896                 }
897
898         }
899
900         /*
901          * Check for presence of the EFR when DLAB is set.
902          * Only ST16C650V1 UARTs pass this test.
903          */
904         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
905         if (serial_in(up, UART_EFR) == 0) {
906                 serial_out(up, UART_EFR, 0xA8);
907                 if (serial_in(up, UART_EFR) != 0) {
908                         DEBUG_AUTOCONF("EFRv1 ");
909                         up->port.type = PORT_16650;
910                         up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
911                 } else {
912                         serial_out(up, UART_LCR, 0);
913                         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO |
914                                    UART_FCR7_64BYTE);
915                         status1 = serial_in(up, UART_IIR) >> 5;
916                         serial_out(up, UART_FCR, 0);
917                         serial_out(up, UART_LCR, 0);
918
919                         if (status1 == 7)
920                                 up->port.type = PORT_16550A_FSL64;
921                         else
922                                 DEBUG_AUTOCONF("Motorola 8xxx DUART ");
923                 }
924                 serial_out(up, UART_EFR, 0);
925                 return;
926         }
927
928         /*
929          * Maybe it requires 0xbf to be written to the LCR.
930          * (other ST16C650V2 UARTs, TI16C752A, etc)
931          */
932         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
933         if (serial_in(up, UART_EFR) == 0 && !broken_efr(up)) {
934                 DEBUG_AUTOCONF("EFRv2 ");
935                 autoconfig_has_efr(up);
936                 return;
937         }
938
939         /*
940          * Check for a National Semiconductor SuperIO chip.
941          * Attempt to switch to bank 2, read the value of the LOOP bit
942          * from EXCR1. Switch back to bank 0, change it in MCR. Then
943          * switch back to bank 2, read it from EXCR1 again and check
944          * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
945          */
946         serial_out(up, UART_LCR, 0);
947         status1 = serial_in(up, UART_MCR);
948         serial_out(up, UART_LCR, 0xE0);
949         status2 = serial_in(up, 0x02); /* EXCR1 */
950
951         if (!((status2 ^ status1) & UART_MCR_LOOP)) {
952                 serial_out(up, UART_LCR, 0);
953                 serial_out(up, UART_MCR, status1 ^ UART_MCR_LOOP);
954                 serial_out(up, UART_LCR, 0xE0);
955                 status2 = serial_in(up, 0x02); /* EXCR1 */
956                 serial_out(up, UART_LCR, 0);
957                 serial_out(up, UART_MCR, status1);
958
959                 if ((status2 ^ status1) & UART_MCR_LOOP) {
960                         unsigned short quot;
961
962                         serial_out(up, UART_LCR, 0xE0);
963
964                         quot = serial_dl_read(up);
965                         quot <<= 3;
966
967                         if (ns16550a_goto_highspeed(up))
968                                 serial_dl_write(up, quot);
969
970                         serial_out(up, UART_LCR, 0);
971
972                         up->port.uartclk = 921600*16;
973                         up->port.type = PORT_NS16550A;
974                         up->capabilities |= UART_NATSEMI;
975                         return;
976                 }
977         }
978
979         /*
980          * No EFR.  Try to detect a TI16750, which only sets bit 5 of
981          * the IIR when 64 byte FIFO mode is enabled when DLAB is set.
982          * Try setting it with and without DLAB set.  Cheap clones
983          * set bit 5 without DLAB set.
984          */
985         serial_out(up, UART_LCR, 0);
986         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
987         status1 = serial_in(up, UART_IIR) >> 5;
988         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
989         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
990         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR7_64BYTE);
991         status2 = serial_in(up, UART_IIR) >> 5;
992         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
993         serial_out(up, UART_LCR, 0);
994
995         DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1, status2);
996
997         if (status1 == 6 && status2 == 7) {
998                 up->port.type = PORT_16750;
999                 up->capabilities |= UART_CAP_AFE | UART_CAP_SLEEP;
1000                 return;
1001         }
1002
1003         /*
1004          * Try writing and reading the UART_IER_UUE bit (b6).
1005          * If it works, this is probably one of the Xscale platform's
1006          * internal UARTs.
1007          * We're going to explicitly set the UUE bit to 0 before
1008          * trying to write and read a 1 just to make sure it's not
1009          * already a 1 and maybe locked there before we even start start.
1010          */
1011         iersave = serial_in(up, UART_IER);
1012         serial_out(up, UART_IER, iersave & ~UART_IER_UUE);
1013         if (!(serial_in(up, UART_IER) & UART_IER_UUE)) {
1014                 /*
1015                  * OK it's in a known zero state, try writing and reading
1016                  * without disturbing the current state of the other bits.
1017                  */
1018                 serial_out(up, UART_IER, iersave | UART_IER_UUE);
1019                 if (serial_in(up, UART_IER) & UART_IER_UUE) {
1020                         /*
1021                          * It's an Xscale.
1022                          * We'll leave the UART_IER_UUE bit set to 1 (enabled).
1023                          */
1024                         DEBUG_AUTOCONF("Xscale ");
1025                         up->port.type = PORT_XSCALE;
1026                         up->capabilities |= UART_CAP_UUE | UART_CAP_RTOIE;
1027                         return;
1028                 }
1029         } else {
1030                 /*
1031                  * If we got here we couldn't force the IER_UUE bit to 0.
1032                  * Log it and continue.
1033                  */
1034                 DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
1035         }
1036         serial_out(up, UART_IER, iersave);
1037
1038         /*
1039          * Exar uarts have EFR in a weird location
1040          */
1041         if (up->port.flags & UPF_EXAR_EFR) {
1042                 DEBUG_AUTOCONF("Exar XR17D15x ");
1043                 up->port.type = PORT_XR17D15X;
1044                 up->capabilities |= UART_CAP_AFE | UART_CAP_EFR |
1045                                     UART_CAP_SLEEP;
1046
1047                 return;
1048         }
1049
1050         /*
1051          * We distinguish between 16550A and U6 16550A by counting
1052          * how many bytes are in the FIFO.
1053          */
1054         if (up->port.type == PORT_16550A && size_fifo(up) == 64) {
1055                 up->port.type = PORT_U6_16550A;
1056                 up->capabilities |= UART_CAP_AFE;
1057         }
1058 }
1059
1060 /*
1061  * This routine is called by rs_init() to initialize a specific serial
1062  * port.  It determines what type of UART chip this serial port is
1063  * using: 8250, 16450, 16550, 16550A.  The important question is
1064  * whether or not this UART is a 16550A or not, since this will
1065  * determine whether or not we can use its FIFO features or not.
1066  */
1067 static void autoconfig(struct uart_8250_port *up)
1068 {
1069         unsigned char status1, scratch, scratch2, scratch3;
1070         unsigned char save_lcr, save_mcr;
1071         struct uart_port *port = &up->port;
1072         unsigned long flags;
1073         unsigned int old_capabilities;
1074
1075         if (!port->iobase && !port->mapbase && !port->membase)
1076                 return;
1077
1078         DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04lx, 0x%p): ",
1079                        serial_index(port), port->iobase, port->membase);
1080
1081         /*
1082          * We really do need global IRQs disabled here - we're going to
1083          * be frobbing the chips IRQ enable register to see if it exists.
1084          */
1085         spin_lock_irqsave(&port->lock, flags);
1086
1087         up->capabilities = 0;
1088         up->bugs = 0;
1089
1090         if (!(port->flags & UPF_BUGGY_UART)) {
1091                 /*
1092                  * Do a simple existence test first; if we fail this,
1093                  * there's no point trying anything else.
1094                  *
1095                  * 0x80 is used as a nonsense port to prevent against
1096                  * false positives due to ISA bus float.  The
1097                  * assumption is that 0x80 is a non-existent port;
1098                  * which should be safe since include/asm/io.h also
1099                  * makes this assumption.
1100                  *
1101                  * Note: this is safe as long as MCR bit 4 is clear
1102                  * and the device is in "PC" mode.
1103                  */
1104                 scratch = serial_in(up, UART_IER);
1105                 serial_out(up, UART_IER, 0);
1106 #ifdef __i386__
1107                 outb(0xff, 0x080);
1108 #endif
1109                 /*
1110                  * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
1111                  * 16C754B) allow only to modify them if an EFR bit is set.
1112                  */
1113                 scratch2 = serial_in(up, UART_IER) & 0x0f;
1114                 serial_out(up, UART_IER, 0x0F);
1115 #ifdef __i386__
1116                 outb(0, 0x080);
1117 #endif
1118                 scratch3 = serial_in(up, UART_IER) & 0x0f;
1119                 serial_out(up, UART_IER, scratch);
1120                 if (scratch2 != 0 || scratch3 != 0x0F) {
1121                         /*
1122                          * We failed; there's nothing here
1123                          */
1124                         spin_unlock_irqrestore(&port->lock, flags);
1125                         DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
1126                                        scratch2, scratch3);
1127                         goto out;
1128                 }
1129         }
1130
1131         save_mcr = serial_in(up, UART_MCR);
1132         save_lcr = serial_in(up, UART_LCR);
1133
1134         /*
1135          * Check to see if a UART is really there.  Certain broken
1136          * internal modems based on the Rockwell chipset fail this
1137          * test, because they apparently don't implement the loopback
1138          * test mode.  So this test is skipped on the COM 1 through
1139          * COM 4 ports.  This *should* be safe, since no board
1140          * manufacturer would be stupid enough to design a board
1141          * that conflicts with COM 1-4 --- we hope!
1142          */
1143         if (!(port->flags & UPF_SKIP_TEST)) {
1144                 serial_out(up, UART_MCR, UART_MCR_LOOP | 0x0A);
1145                 status1 = serial_in(up, UART_MSR) & 0xF0;
1146                 serial_out(up, UART_MCR, save_mcr);
1147                 if (status1 != 0x90) {
1148                         spin_unlock_irqrestore(&port->lock, flags);
1149                         DEBUG_AUTOCONF("LOOP test failed (%02x) ",
1150                                        status1);
1151                         goto out;
1152                 }
1153         }
1154
1155         /*
1156          * We're pretty sure there's a port here.  Lets find out what
1157          * type of port it is.  The IIR top two bits allows us to find
1158          * out if it's 8250 or 16450, 16550, 16550A or later.  This
1159          * determines what we test for next.
1160          *
1161          * We also initialise the EFR (if any) to zero for later.  The
1162          * EFR occupies the same register location as the FCR and IIR.
1163          */
1164         serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
1165         serial_out(up, UART_EFR, 0);
1166         serial_out(up, UART_LCR, 0);
1167
1168         serial_out(up, UART_FCR, UART_FCR_ENABLE_FIFO);
1169         scratch = serial_in(up, UART_IIR) >> 6;
1170
1171         switch (scratch) {
1172         case 0:
1173                 autoconfig_8250(up);
1174                 break;
1175         case 1:
1176                 port->type = PORT_UNKNOWN;
1177                 break;
1178         case 2:
1179                 port->type = PORT_16550;
1180                 break;
1181         case 3:
1182                 autoconfig_16550a(up);
1183                 break;
1184         }
1185
1186 #ifdef CONFIG_SERIAL_8250_RSA
1187         /*
1188          * Only probe for RSA ports if we got the region.
1189          */
1190         if (port->type == PORT_16550A && up->probe & UART_PROBE_RSA &&
1191             __enable_rsa(up))
1192                 port->type = PORT_RSA;
1193 #endif
1194
1195         serial_out(up, UART_LCR, save_lcr);
1196
1197         port->fifosize = uart_config[up->port.type].fifo_size;
1198         old_capabilities = up->capabilities;
1199         up->capabilities = uart_config[port->type].flags;
1200         up->tx_loadsz = uart_config[port->type].tx_loadsz;
1201
1202         if (port->type == PORT_UNKNOWN)
1203                 goto out_lock;
1204
1205         /*
1206          * Reset the UART.
1207          */
1208 #ifdef CONFIG_SERIAL_8250_RSA
1209         if (port->type == PORT_RSA)
1210                 serial_out(up, UART_RSA_FRR, 0);
1211 #endif
1212         serial_out(up, UART_MCR, save_mcr);
1213         serial8250_clear_fifos(up);
1214         serial_in(up, UART_RX);
1215         if (up->capabilities & UART_CAP_UUE)
1216                 serial_out(up, UART_IER, UART_IER_UUE);
1217         else
1218                 serial_out(up, UART_IER, 0);
1219
1220 out_lock:
1221         spin_unlock_irqrestore(&port->lock, flags);
1222         if (up->capabilities != old_capabilities) {
1223                 printk(KERN_WARNING
1224                        "ttyS%d: detected caps %08x should be %08x\n",
1225                        serial_index(port), old_capabilities,
1226                        up->capabilities);
1227         }
1228 out:
1229         DEBUG_AUTOCONF("iir=%d ", scratch);
1230         DEBUG_AUTOCONF("type=%s\n", uart_config[port->type].name);
1231 }
1232
1233 static void autoconfig_irq(struct uart_8250_port *up)
1234 {
1235         struct uart_port *port = &up->port;
1236         unsigned char save_mcr, save_ier;
1237         unsigned char save_ICP = 0;
1238         unsigned int ICP = 0;
1239         unsigned long irqs;
1240         int irq;
1241
1242         if (port->flags & UPF_FOURPORT) {
1243                 ICP = (port->iobase & 0xfe0) | 0x1f;
1244                 save_ICP = inb_p(ICP);
1245                 outb_p(0x80, ICP);
1246                 inb_p(ICP);
1247         }
1248
1249         /* forget possible initially masked and pending IRQ */
1250         probe_irq_off(probe_irq_on());
1251         save_mcr = serial_in(up, UART_MCR);
1252         save_ier = serial_in(up, UART_IER);
1253         serial_out(up, UART_MCR, UART_MCR_OUT1 | UART_MCR_OUT2);
1254
1255         irqs = probe_irq_on();
1256         serial_out(up, UART_MCR, 0);
1257         udelay(10);
1258         if (port->flags & UPF_FOURPORT) {
1259                 serial_out(up, UART_MCR,
1260                             UART_MCR_DTR | UART_MCR_RTS);
1261         } else {
1262                 serial_out(up, UART_MCR,
1263                             UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2);
1264         }
1265         serial_out(up, UART_IER, 0x0f); /* enable all intrs */
1266         serial_in(up, UART_LSR);
1267         serial_in(up, UART_RX);
1268         serial_in(up, UART_IIR);
1269         serial_in(up, UART_MSR);
1270         serial_out(up, UART_TX, 0xFF);
1271         udelay(20);
1272         irq = probe_irq_off(irqs);
1273
1274         serial_out(up, UART_MCR, save_mcr);
1275         serial_out(up, UART_IER, save_ier);
1276
1277         if (port->flags & UPF_FOURPORT)
1278                 outb_p(save_ICP, ICP);
1279
1280         port->irq = (irq > 0) ? irq : 0;
1281 }
1282
1283 static inline void __stop_tx(struct uart_8250_port *p)
1284 {
1285         if (p->ier & UART_IER_THRI) {
1286                 p->ier &= ~UART_IER_THRI;
1287                 serial_out(p, UART_IER, p->ier);
1288                 serial8250_rpm_put_tx(p);
1289         }
1290 }
1291
1292 static void serial8250_stop_tx(struct uart_port *port)
1293 {
1294         struct uart_8250_port *up = up_to_u8250p(port);
1295
1296         serial8250_rpm_get(up);
1297         __stop_tx(up);
1298
1299         /*
1300          * We really want to stop the transmitter from sending.
1301          */
1302         if (port->type == PORT_16C950) {
1303                 up->acr |= UART_ACR_TXDIS;
1304                 serial_icr_write(up, UART_ACR, up->acr);
1305         }
1306         serial8250_rpm_put(up);
1307 }
1308
1309 static void serial8250_start_tx(struct uart_port *port)
1310 {
1311         struct uart_8250_port *up = up_to_u8250p(port);
1312
1313         serial8250_rpm_get_tx(up);
1314
1315         if (up->dma && !up->dma->tx_dma(up))
1316                 return;
1317
1318         if (!(up->ier & UART_IER_THRI)) {
1319                 up->ier |= UART_IER_THRI;
1320                 serial_port_out(port, UART_IER, up->ier);
1321
1322                 if (up->bugs & UART_BUG_TXEN) {
1323                         unsigned char lsr;
1324                         lsr = serial_in(up, UART_LSR);
1325                         up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1326                         if (lsr & UART_LSR_THRE)
1327                                 serial8250_tx_chars(up);
1328                 }
1329         }
1330
1331         /*
1332          * Re-enable the transmitter if we disabled it.
1333          */
1334         if (port->type == PORT_16C950 && up->acr & UART_ACR_TXDIS) {
1335                 up->acr &= ~UART_ACR_TXDIS;
1336                 serial_icr_write(up, UART_ACR, up->acr);
1337         }
1338 }
1339
1340 static void serial8250_throttle(struct uart_port *port)
1341 {
1342         port->throttle(port);
1343 }
1344
1345 static void serial8250_unthrottle(struct uart_port *port)
1346 {
1347         port->unthrottle(port);
1348 }
1349
1350 static void serial8250_stop_rx(struct uart_port *port)
1351 {
1352         struct uart_8250_port *up = up_to_u8250p(port);
1353
1354         serial8250_rpm_get(up);
1355
1356         up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
1357         up->port.read_status_mask &= ~UART_LSR_DR;
1358         serial_port_out(port, UART_IER, up->ier);
1359
1360         serial8250_rpm_put(up);
1361 }
1362
1363 static void serial8250_disable_ms(struct uart_port *port)
1364 {
1365         struct uart_8250_port *up =
1366                 container_of(port, struct uart_8250_port, port);
1367
1368         /* no MSR capabilities */
1369         if (up->bugs & UART_BUG_NOMSR)
1370                 return;
1371
1372         up->ier &= ~UART_IER_MSI;
1373         serial_port_out(port, UART_IER, up->ier);
1374 }
1375
1376 static void serial8250_enable_ms(struct uart_port *port)
1377 {
1378         struct uart_8250_port *up = up_to_u8250p(port);
1379
1380         /* no MSR capabilities */
1381         if (up->bugs & UART_BUG_NOMSR)
1382                 return;
1383
1384         up->ier |= UART_IER_MSI;
1385
1386         serial8250_rpm_get(up);
1387         serial_port_out(port, UART_IER, up->ier);
1388         serial8250_rpm_put(up);
1389 }
1390
1391 /*
1392  * serial8250_rx_chars: processes according to the passed in LSR
1393  * value, and returns the remaining LSR bits not handled
1394  * by this Rx routine.
1395  */
1396 unsigned char
1397 serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr)
1398 {
1399         struct uart_port *port = &up->port;
1400         unsigned char ch;
1401         int max_count = 256;
1402         char flag;
1403
1404         do {
1405                 if (likely(lsr & UART_LSR_DR))
1406                         ch = serial_in(up, UART_RX);
1407                 else
1408                         /*
1409                          * Intel 82571 has a Serial Over Lan device that will
1410                          * set UART_LSR_BI without setting UART_LSR_DR when
1411                          * it receives a break. To avoid reading from the
1412                          * receive buffer without UART_LSR_DR bit set, we
1413                          * just force the read character to be 0
1414                          */
1415                         ch = 0;
1416
1417                 flag = TTY_NORMAL;
1418                 port->icount.rx++;
1419
1420                 lsr |= up->lsr_saved_flags;
1421                 up->lsr_saved_flags = 0;
1422
1423                 if (unlikely(lsr & UART_LSR_BRK_ERROR_BITS)) {
1424                         if (lsr & UART_LSR_BI) {
1425                                 lsr &= ~(UART_LSR_FE | UART_LSR_PE);
1426                                 port->icount.brk++;
1427                                 /*
1428                                  * We do the SysRQ and SAK checking
1429                                  * here because otherwise the break
1430                                  * may get masked by ignore_status_mask
1431                                  * or read_status_mask.
1432                                  */
1433                                 if (uart_handle_break(port))
1434                                         goto ignore_char;
1435                         } else if (lsr & UART_LSR_PE)
1436                                 port->icount.parity++;
1437                         else if (lsr & UART_LSR_FE)
1438                                 port->icount.frame++;
1439                         if (lsr & UART_LSR_OE)
1440                                 port->icount.overrun++;
1441
1442                         /*
1443                          * Mask off conditions which should be ignored.
1444                          */
1445                         lsr &= port->read_status_mask;
1446
1447                         if (lsr & UART_LSR_BI) {
1448                                 DEBUG_INTR("handling break....");
1449                                 flag = TTY_BREAK;
1450                         } else if (lsr & UART_LSR_PE)
1451                                 flag = TTY_PARITY;
1452                         else if (lsr & UART_LSR_FE)
1453                                 flag = TTY_FRAME;
1454                 }
1455                 if (uart_handle_sysrq_char(port, ch))
1456                         goto ignore_char;
1457
1458                 uart_insert_char(port, lsr, UART_LSR_OE, ch, flag);
1459
1460 ignore_char:
1461                 lsr = serial_in(up, UART_LSR);
1462         } while ((lsr & (UART_LSR_DR | UART_LSR_BI)) && (--max_count > 0));
1463         spin_unlock(&port->lock);
1464         tty_flip_buffer_push(&port->state->port);
1465         spin_lock(&port->lock);
1466         return lsr;
1467 }
1468 EXPORT_SYMBOL_GPL(serial8250_rx_chars);
1469
1470 void serial8250_tx_chars(struct uart_8250_port *up)
1471 {
1472         struct uart_port *port = &up->port;
1473         struct circ_buf *xmit = &port->state->xmit;
1474         int count;
1475
1476         if (port->x_char) {
1477                 serial_out(up, UART_TX, port->x_char);
1478                 port->icount.tx++;
1479                 port->x_char = 0;
1480                 return;
1481         }
1482         if (uart_tx_stopped(port)) {
1483                 serial8250_stop_tx(port);
1484                 return;
1485         }
1486         if (uart_circ_empty(xmit)) {
1487                 __stop_tx(up);
1488                 return;
1489         }
1490
1491         count = up->tx_loadsz;
1492         do {
1493                 serial_out(up, UART_TX, xmit->buf[xmit->tail]);
1494                 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
1495                 port->icount.tx++;
1496                 if (uart_circ_empty(xmit))
1497                         break;
1498                 if (up->capabilities & UART_CAP_HFIFO) {
1499                         if ((serial_port_in(port, UART_LSR) & BOTH_EMPTY) !=
1500                             BOTH_EMPTY)
1501                                 break;
1502                 }
1503         } while (--count > 0);
1504
1505         if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
1506                 uart_write_wakeup(port);
1507
1508         DEBUG_INTR("THRE...");
1509
1510         /*
1511          * With RPM enabled, we have to wait until the FIFO is empty before the
1512          * HW can go idle. So we get here once again with empty FIFO and disable
1513          * the interrupt and RPM in __stop_tx()
1514          */
1515         if (uart_circ_empty(xmit) && !(up->capabilities & UART_CAP_RPM))
1516                 __stop_tx(up);
1517 }
1518 EXPORT_SYMBOL_GPL(serial8250_tx_chars);
1519
1520 /* Caller holds uart port lock */
1521 unsigned int serial8250_modem_status(struct uart_8250_port *up)
1522 {
1523         struct uart_port *port = &up->port;
1524         unsigned int status = serial_in(up, UART_MSR);
1525
1526         status |= up->msr_saved_flags;
1527         up->msr_saved_flags = 0;
1528         if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI &&
1529             port->state != NULL) {
1530                 if (status & UART_MSR_TERI)
1531                         port->icount.rng++;
1532                 if (status & UART_MSR_DDSR)
1533                         port->icount.dsr++;
1534                 if (status & UART_MSR_DDCD)
1535                         uart_handle_dcd_change(port, status & UART_MSR_DCD);
1536                 if (status & UART_MSR_DCTS)
1537                         uart_handle_cts_change(port, status & UART_MSR_CTS);
1538
1539                 wake_up_interruptible(&port->state->port.delta_msr_wait);
1540         }
1541
1542         return status;
1543 }
1544 EXPORT_SYMBOL_GPL(serial8250_modem_status);
1545
1546 /*
1547  * This handles the interrupt from one port.
1548  */
1549 int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
1550 {
1551         unsigned char status;
1552         unsigned long flags;
1553         struct uart_8250_port *up = up_to_u8250p(port);
1554         int dma_err = 0;
1555
1556         if (iir & UART_IIR_NO_INT)
1557                 return 0;
1558
1559         spin_lock_irqsave(&port->lock, flags);
1560
1561         status = serial_port_in(port, UART_LSR);
1562
1563         DEBUG_INTR("status = %x...", status);
1564
1565         if (status & (UART_LSR_DR | UART_LSR_BI)) {
1566                 if (up->dma)
1567                         dma_err = up->dma->rx_dma(up, iir);
1568
1569                 if (!up->dma || dma_err)
1570                         status = serial8250_rx_chars(up, status);
1571         }
1572         serial8250_modem_status(up);
1573         if ((!up->dma || (up->dma && up->dma->tx_err)) &&
1574             (status & UART_LSR_THRE))
1575                 serial8250_tx_chars(up);
1576
1577         spin_unlock_irqrestore(&port->lock, flags);
1578         return 1;
1579 }
1580 EXPORT_SYMBOL_GPL(serial8250_handle_irq);
1581
1582 static int serial8250_default_handle_irq(struct uart_port *port)
1583 {
1584         struct uart_8250_port *up = up_to_u8250p(port);
1585         unsigned int iir;
1586         int ret;
1587
1588         serial8250_rpm_get(up);
1589
1590         iir = serial_port_in(port, UART_IIR);
1591         ret = serial8250_handle_irq(port, iir);
1592
1593         serial8250_rpm_put(up);
1594         return ret;
1595 }
1596
1597 /*
1598  * These Exar UARTs have an extra interrupt indicator that could
1599  * fire for a few unimplemented interrupts.  One of which is a
1600  * wakeup event when coming out of sleep.  Put this here just
1601  * to be on the safe side that these interrupts don't go unhandled.
1602  */
1603 static int exar_handle_irq(struct uart_port *port)
1604 {
1605         unsigned char int0, int1, int2, int3;
1606         unsigned int iir = serial_port_in(port, UART_IIR);
1607         int ret;
1608
1609         ret = serial8250_handle_irq(port, iir);
1610
1611         if ((port->type == PORT_XR17V35X) ||
1612            (port->type == PORT_XR17D15X)) {
1613                 int0 = serial_port_in(port, 0x80);
1614                 int1 = serial_port_in(port, 0x81);
1615                 int2 = serial_port_in(port, 0x82);
1616                 int3 = serial_port_in(port, 0x83);
1617         }
1618
1619         return ret;
1620 }
1621
1622 static unsigned int serial8250_tx_empty(struct uart_port *port)
1623 {
1624         struct uart_8250_port *up = up_to_u8250p(port);
1625         unsigned long flags;
1626         unsigned int lsr;
1627
1628         serial8250_rpm_get(up);
1629
1630         spin_lock_irqsave(&port->lock, flags);
1631         lsr = serial_port_in(port, UART_LSR);
1632         up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS;
1633         spin_unlock_irqrestore(&port->lock, flags);
1634
1635         serial8250_rpm_put(up);
1636
1637         return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0;
1638 }
1639
1640 static unsigned int serial8250_get_mctrl(struct uart_port *port)
1641 {
1642         struct uart_8250_port *up = up_to_u8250p(port);
1643         unsigned int status;
1644         unsigned int ret;
1645
1646         serial8250_rpm_get(up);
1647         status = serial8250_modem_status(up);
1648         serial8250_rpm_put(up);
1649
1650         ret = 0;
1651         if (status & UART_MSR_DCD)
1652                 ret |= TIOCM_CAR;
1653         if (status & UART_MSR_RI)
1654                 ret |= TIOCM_RNG;
1655         if (status & UART_MSR_DSR)
1656                 ret |= TIOCM_DSR;
1657         if (status & UART_MSR_CTS)
1658                 ret |= TIOCM_CTS;
1659         return ret;
1660 }
1661
1662 void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl)
1663 {
1664         struct uart_8250_port *up = up_to_u8250p(port);
1665         unsigned char mcr = 0;
1666
1667         if (mctrl & TIOCM_RTS)
1668                 mcr |= UART_MCR_RTS;
1669         if (mctrl & TIOCM_DTR)
1670                 mcr |= UART_MCR_DTR;
1671         if (mctrl & TIOCM_OUT1)
1672                 mcr |= UART_MCR_OUT1;
1673         if (mctrl & TIOCM_OUT2)
1674                 mcr |= UART_MCR_OUT2;
1675         if (mctrl & TIOCM_LOOP)
1676                 mcr |= UART_MCR_LOOP;
1677
1678         mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr;
1679
1680         serial_port_out(port, UART_MCR, mcr);
1681 }
1682 EXPORT_SYMBOL_GPL(serial8250_do_set_mctrl);
1683
1684 static void serial8250_set_mctrl(struct uart_port *port, unsigned int mctrl)
1685 {
1686         if (port->set_mctrl)
1687                 port->set_mctrl(port, mctrl);
1688         else
1689                 serial8250_do_set_mctrl(port, mctrl);
1690 }
1691
1692 static void serial8250_break_ctl(struct uart_port *port, int break_state)
1693 {
1694         struct uart_8250_port *up = up_to_u8250p(port);
1695         unsigned long flags;
1696
1697         serial8250_rpm_get(up);
1698         spin_lock_irqsave(&port->lock, flags);
1699         if (break_state == -1)
1700                 up->lcr |= UART_LCR_SBC;
1701         else
1702                 up->lcr &= ~UART_LCR_SBC;
1703         serial_port_out(port, UART_LCR, up->lcr);
1704         spin_unlock_irqrestore(&port->lock, flags);
1705         serial8250_rpm_put(up);
1706 }
1707
1708 /*
1709  *      Wait for transmitter & holding register to empty
1710  */
1711 static void wait_for_xmitr(struct uart_8250_port *up, int bits)
1712 {
1713         unsigned int status, tmout = 10000;
1714
1715         /* Wait up to 10ms for the character(s) to be sent. */
1716         for (;;) {
1717                 status = serial_in(up, UART_LSR);
1718
1719                 up->lsr_saved_flags |= status & LSR_SAVE_FLAGS;
1720
1721                 if ((status & bits) == bits)
1722                         break;
1723                 if (--tmout == 0)
1724                         break;
1725                 udelay(1);
1726         }
1727
1728         /* Wait up to 1s for flow control if necessary */
1729         if (up->port.flags & UPF_CONS_FLOW) {
1730                 unsigned int tmout;
1731                 for (tmout = 1000000; tmout; tmout--) {
1732                         unsigned int msr = serial_in(up, UART_MSR);
1733                         up->msr_saved_flags |= msr & MSR_SAVE_FLAGS;
1734                         if (msr & UART_MSR_CTS)
1735                                 break;
1736                         udelay(1);
1737                         touch_nmi_watchdog();
1738                 }
1739         }
1740 }
1741
1742 #ifdef CONFIG_CONSOLE_POLL
1743 /*
1744  * Console polling routines for writing and reading from the uart while
1745  * in an interrupt or debug context.
1746  */
1747
1748 static int serial8250_get_poll_char(struct uart_port *port)
1749 {
1750         struct uart_8250_port *up = up_to_u8250p(port);
1751         unsigned char lsr;
1752         int status;
1753
1754         serial8250_rpm_get(up);
1755
1756         lsr = serial_port_in(port, UART_LSR);
1757
1758         if (!(lsr & UART_LSR_DR)) {
1759                 status = NO_POLL_CHAR;
1760                 goto out;
1761         }
1762
1763         status = serial_port_in(port, UART_RX);
1764 out:
1765         serial8250_rpm_put(up);
1766         return status;
1767 }
1768
1769
1770 static void serial8250_put_poll_char(struct uart_port *port,
1771                          unsigned char c)
1772 {
1773         unsigned int ier;
1774         struct uart_8250_port *up = up_to_u8250p(port);
1775
1776         serial8250_rpm_get(up);
1777         /*
1778          *      First save the IER then disable the interrupts
1779          */
1780         ier = serial_port_in(port, UART_IER);
1781         if (up->capabilities & UART_CAP_UUE)
1782                 serial_port_out(port, UART_IER, UART_IER_UUE);
1783         else
1784                 serial_port_out(port, UART_IER, 0);
1785
1786         wait_for_xmitr(up, BOTH_EMPTY);
1787         /*
1788          *      Send the character out.
1789          */
1790         serial_port_out(port, UART_TX, c);
1791
1792         /*
1793          *      Finally, wait for transmitter to become empty
1794          *      and restore the IER
1795          */
1796         wait_for_xmitr(up, BOTH_EMPTY);
1797         serial_port_out(port, UART_IER, ier);
1798         serial8250_rpm_put(up);
1799 }
1800
1801 #endif /* CONFIG_CONSOLE_POLL */
1802
1803 int serial8250_do_startup(struct uart_port *port)
1804 {
1805         struct uart_8250_port *up = up_to_u8250p(port);
1806         unsigned long flags;
1807         unsigned char lsr, iir;
1808         int retval;
1809
1810         if (port->type == PORT_8250_CIR)
1811                 return -ENODEV;
1812
1813         if (!port->fifosize)
1814                 port->fifosize = uart_config[port->type].fifo_size;
1815         if (!up->tx_loadsz)
1816                 up->tx_loadsz = uart_config[port->type].tx_loadsz;
1817         if (!up->capabilities)
1818                 up->capabilities = uart_config[port->type].flags;
1819         up->mcr = 0;
1820
1821         if (port->iotype != up->cur_iotype)
1822                 set_io_from_upio(port);
1823
1824         serial8250_rpm_get(up);
1825         if (port->type == PORT_16C950) {
1826                 /* Wake up and initialize UART */
1827                 up->acr = 0;
1828                 serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
1829                 serial_port_out(port, UART_EFR, UART_EFR_ECB);
1830                 serial_port_out(port, UART_IER, 0);
1831                 serial_port_out(port, UART_LCR, 0);
1832                 serial_icr_write(up, UART_CSR, 0); /* Reset the UART */
1833                 serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
1834                 serial_port_out(port, UART_EFR, UART_EFR_ECB);
1835                 serial_port_out(port, UART_LCR, 0);
1836         }
1837
1838 #ifdef CONFIG_SERIAL_8250_RSA
1839         /*
1840          * If this is an RSA port, see if we can kick it up to the
1841          * higher speed clock.
1842          */
1843         enable_rsa(up);
1844 #endif
1845
1846         if (port->type == PORT_XR17V35X) {
1847                 /*
1848                  * First enable access to IER [7:5], ISR [5:4], FCR [5:4],
1849                  * MCR [7:5] and MSR [7:0]
1850                  */
1851                 serial_port_out(port, UART_XR_EFR, UART_EFR_ECB);
1852
1853                 /*
1854                  * Make sure all interrups are masked until initialization is
1855                  * complete and the FIFOs are cleared
1856                  */
1857                 serial_port_out(port, UART_IER, 0);
1858         }
1859
1860         /*
1861          * Clear the FIFO buffers and disable them.
1862          * (they will be reenabled in set_termios())
1863          */
1864         serial8250_clear_fifos(up);
1865
1866         /*
1867          * Clear the interrupt registers.
1868          */
1869         serial_port_in(port, UART_LSR);
1870         serial_port_in(port, UART_RX);
1871         serial_port_in(port, UART_IIR);
1872         serial_port_in(port, UART_MSR);
1873
1874         /*
1875          * At this point, there's no way the LSR could still be 0xff;
1876          * if it is, then bail out, because there's likely no UART
1877          * here.
1878          */
1879         if (!(port->flags & UPF_BUGGY_UART) &&
1880             (serial_port_in(port, UART_LSR) == 0xff)) {
1881                 printk_ratelimited(KERN_INFO "ttyS%d: LSR safety check engaged!\n",
1882                                    serial_index(port));
1883                 retval = -ENODEV;
1884                 goto out;
1885         }
1886
1887         /*
1888          * For a XR16C850, we need to set the trigger levels
1889          */
1890         if (port->type == PORT_16850) {
1891                 unsigned char fctr;
1892
1893                 serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
1894
1895                 fctr = serial_in(up, UART_FCTR) & ~(UART_FCTR_RX|UART_FCTR_TX);
1896                 serial_port_out(port, UART_FCTR,
1897                                 fctr | UART_FCTR_TRGD | UART_FCTR_RX);
1898                 serial_port_out(port, UART_TRG, UART_TRG_96);
1899                 serial_port_out(port, UART_FCTR,
1900                                 fctr | UART_FCTR_TRGD | UART_FCTR_TX);
1901                 serial_port_out(port, UART_TRG, UART_TRG_96);
1902
1903                 serial_port_out(port, UART_LCR, 0);
1904         }
1905
1906         if (port->irq) {
1907                 unsigned char iir1;
1908                 /*
1909                  * Test for UARTs that do not reassert THRE when the
1910                  * transmitter is idle and the interrupt has already
1911                  * been cleared.  Real 16550s should always reassert
1912                  * this interrupt whenever the transmitter is idle and
1913                  * the interrupt is enabled.  Delays are necessary to
1914                  * allow register changes to become visible.
1915                  */
1916                 spin_lock_irqsave(&port->lock, flags);
1917                 if (up->port.irqflags & IRQF_SHARED)
1918                         disable_irq_nosync(port->irq);
1919
1920                 wait_for_xmitr(up, UART_LSR_THRE);
1921                 serial_port_out_sync(port, UART_IER, UART_IER_THRI);
1922                 udelay(1); /* allow THRE to set */
1923                 iir1 = serial_port_in(port, UART_IIR);
1924                 serial_port_out(port, UART_IER, 0);
1925                 serial_port_out_sync(port, UART_IER, UART_IER_THRI);
1926                 udelay(1); /* allow a working UART time to re-assert THRE */
1927                 iir = serial_port_in(port, UART_IIR);
1928                 serial_port_out(port, UART_IER, 0);
1929
1930                 if (port->irqflags & IRQF_SHARED)
1931                         enable_irq(port->irq);
1932                 spin_unlock_irqrestore(&port->lock, flags);
1933
1934                 /*
1935                  * If the interrupt is not reasserted, or we otherwise
1936                  * don't trust the iir, setup a timer to kick the UART
1937                  * on a regular basis.
1938                  */
1939                 if ((!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) ||
1940                     up->port.flags & UPF_BUG_THRE) {
1941                         up->bugs |= UART_BUG_THRE;
1942                 }
1943         }
1944
1945         retval = up->ops->setup_irq(up);
1946         if (retval)
1947                 goto out;
1948
1949         /*
1950          * Now, initialize the UART
1951          */
1952         serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
1953
1954         spin_lock_irqsave(&port->lock, flags);
1955         if (up->port.flags & UPF_FOURPORT) {
1956                 if (!up->port.irq)
1957                         up->port.mctrl |= TIOCM_OUT1;
1958         } else
1959                 /*
1960                  * Most PC uarts need OUT2 raised to enable interrupts.
1961                  */
1962                 if (port->irq)
1963                         up->port.mctrl |= TIOCM_OUT2;
1964
1965         serial8250_set_mctrl(port, port->mctrl);
1966
1967         /* Serial over Lan (SoL) hack:
1968            Intel 8257x Gigabit ethernet chips have a
1969            16550 emulation, to be used for Serial Over Lan.
1970            Those chips take a longer time than a normal
1971            serial device to signalize that a transmission
1972            data was queued. Due to that, the above test generally
1973            fails. One solution would be to delay the reading of
1974            iir. However, this is not reliable, since the timeout
1975            is variable. So, let's just don't test if we receive
1976            TX irq. This way, we'll never enable UART_BUG_TXEN.
1977          */
1978         if (up->port.flags & UPF_NO_TXEN_TEST)
1979                 goto dont_test_tx_en;
1980
1981         /*
1982          * Do a quick test to see if we receive an
1983          * interrupt when we enable the TX irq.
1984          */
1985         serial_port_out(port, UART_IER, UART_IER_THRI);
1986         lsr = serial_port_in(port, UART_LSR);
1987         iir = serial_port_in(port, UART_IIR);
1988         serial_port_out(port, UART_IER, 0);
1989
1990         if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
1991                 if (!(up->bugs & UART_BUG_TXEN)) {
1992                         up->bugs |= UART_BUG_TXEN;
1993                         pr_debug("ttyS%d - enabling bad tx status workarounds\n",
1994                                  serial_index(port));
1995                 }
1996         } else {
1997                 up->bugs &= ~UART_BUG_TXEN;
1998         }
1999
2000 dont_test_tx_en:
2001         spin_unlock_irqrestore(&port->lock, flags);
2002
2003         /*
2004          * Clear the interrupt registers again for luck, and clear the
2005          * saved flags to avoid getting false values from polling
2006          * routines or the previous session.
2007          */
2008         serial_port_in(port, UART_LSR);
2009         serial_port_in(port, UART_RX);
2010         serial_port_in(port, UART_IIR);
2011         serial_port_in(port, UART_MSR);
2012         up->lsr_saved_flags = 0;
2013         up->msr_saved_flags = 0;
2014
2015         /*
2016          * Request DMA channels for both RX and TX.
2017          */
2018         if (up->dma) {
2019                 retval = serial8250_request_dma(up);
2020                 if (retval) {
2021                         pr_warn_ratelimited("ttyS%d - failed to request DMA\n",
2022                                             serial_index(port));
2023                         up->dma = NULL;
2024                 }
2025         }
2026
2027         /*
2028          * Set the IER shadow for rx interrupts but defer actual interrupt
2029          * enable until after the FIFOs are enabled; otherwise, an already-
2030          * active sender can swamp the interrupt handler with "too much work".
2031          */
2032         up->ier = UART_IER_RLSI | UART_IER_RDI;
2033
2034         if (port->flags & UPF_FOURPORT) {
2035                 unsigned int icp;
2036                 /*
2037                  * Enable interrupts on the AST Fourport board
2038                  */
2039                 icp = (port->iobase & 0xfe0) | 0x01f;
2040                 outb_p(0x80, icp);
2041                 inb_p(icp);
2042         }
2043         retval = 0;
2044 out:
2045         serial8250_rpm_put(up);
2046         return retval;
2047 }
2048 EXPORT_SYMBOL_GPL(serial8250_do_startup);
2049
2050 static int serial8250_startup(struct uart_port *port)
2051 {
2052         if (port->startup)
2053                 return port->startup(port);
2054         return serial8250_do_startup(port);
2055 }
2056
2057 void serial8250_do_shutdown(struct uart_port *port)
2058 {
2059         struct uart_8250_port *up = up_to_u8250p(port);
2060         unsigned long flags;
2061
2062         serial8250_rpm_get(up);
2063         /*
2064          * Disable interrupts from this port
2065          */
2066         up->ier = 0;
2067         serial_port_out(port, UART_IER, 0);
2068
2069         if (up->dma)
2070                 serial8250_release_dma(up);
2071
2072         spin_lock_irqsave(&port->lock, flags);
2073         if (port->flags & UPF_FOURPORT) {
2074                 /* reset interrupts on the AST Fourport board */
2075                 inb((port->iobase & 0xfe0) | 0x1f);
2076                 port->mctrl |= TIOCM_OUT1;
2077         } else
2078                 port->mctrl &= ~TIOCM_OUT2;
2079
2080         serial8250_set_mctrl(port, port->mctrl);
2081         spin_unlock_irqrestore(&port->lock, flags);
2082
2083         /*
2084          * Disable break condition and FIFOs
2085          */
2086         serial_port_out(port, UART_LCR,
2087                         serial_port_in(port, UART_LCR) & ~UART_LCR_SBC);
2088         serial8250_clear_fifos(up);
2089
2090 #ifdef CONFIG_SERIAL_8250_RSA
2091         /*
2092          * Reset the RSA board back to 115kbps compat mode.
2093          */
2094         disable_rsa(up);
2095 #endif
2096
2097         /*
2098          * Read data port to reset things, and then unlink from
2099          * the IRQ chain.
2100          */
2101         serial_port_in(port, UART_RX);
2102         serial8250_rpm_put(up);
2103
2104         up->ops->release_irq(up);
2105 }
2106 EXPORT_SYMBOL_GPL(serial8250_do_shutdown);
2107
2108 static void serial8250_shutdown(struct uart_port *port)
2109 {
2110         if (port->shutdown)
2111                 port->shutdown(port);
2112         else
2113                 serial8250_do_shutdown(port);
2114 }
2115
2116 /*
2117  * XR17V35x UARTs have an extra fractional divisor register (DLD)
2118  * Calculate divisor with extra 4-bit fractional portion
2119  */
2120 static unsigned int xr17v35x_get_divisor(struct uart_8250_port *up,
2121                                          unsigned int baud,
2122                                          unsigned int *frac)
2123 {
2124         struct uart_port *port = &up->port;
2125         unsigned int quot_16;
2126
2127         quot_16 = DIV_ROUND_CLOSEST(port->uartclk, baud);
2128         *frac = quot_16 & 0x0f;
2129
2130         return quot_16 >> 4;
2131 }
2132
2133 static unsigned int serial8250_get_divisor(struct uart_8250_port *up,
2134                                            unsigned int baud,
2135                                            unsigned int *frac)
2136 {
2137         struct uart_port *port = &up->port;
2138         unsigned int quot;
2139
2140         /*
2141          * Handle magic divisors for baud rates above baud_base on
2142          * SMSC SuperIO chips.
2143          *
2144          */
2145         if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2146             baud == (port->uartclk/4))
2147                 quot = 0x8001;
2148         else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
2149                  baud == (port->uartclk/8))
2150                 quot = 0x8002;
2151         else if (up->port.type == PORT_XR17V35X)
2152                 quot = xr17v35x_get_divisor(up, baud, frac);
2153         else
2154                 quot = uart_get_divisor(port, baud);
2155
2156         /*
2157          * Oxford Semi 952 rev B workaround
2158          */
2159         if (up->bugs & UART_BUG_QUOT && (quot & 0xff) == 0)
2160                 quot++;
2161
2162         return quot;
2163 }
2164
2165 static unsigned char serial8250_compute_lcr(struct uart_8250_port *up,
2166                                             tcflag_t c_cflag)
2167 {
2168         unsigned char cval;
2169
2170         switch (c_cflag & CSIZE) {
2171         case CS5:
2172                 cval = UART_LCR_WLEN5;
2173                 break;
2174         case CS6:
2175                 cval = UART_LCR_WLEN6;
2176                 break;
2177         case CS7:
2178                 cval = UART_LCR_WLEN7;
2179                 break;
2180         default:
2181         case CS8:
2182                 cval = UART_LCR_WLEN8;
2183                 break;
2184         }
2185
2186         if (c_cflag & CSTOPB)
2187                 cval |= UART_LCR_STOP;
2188         if (c_cflag & PARENB) {
2189                 cval |= UART_LCR_PARITY;
2190                 if (up->bugs & UART_BUG_PARITY)
2191                         up->fifo_bug = true;
2192         }
2193         if (!(c_cflag & PARODD))
2194                 cval |= UART_LCR_EPAR;
2195 #ifdef CMSPAR
2196         if (c_cflag & CMSPAR)
2197                 cval |= UART_LCR_SPAR;
2198 #endif
2199
2200         return cval;
2201 }
2202
2203 static void serial8250_set_divisor(struct uart_port *port, unsigned int baud,
2204                             unsigned int quot, unsigned int quot_frac)
2205 {
2206         struct uart_8250_port *up = up_to_u8250p(port);
2207
2208         /* Workaround to enable 115200 baud on OMAP1510 internal ports */
2209         if (is_omap1510_8250(up)) {
2210                 if (baud == 115200) {
2211                         quot = 1;
2212                         serial_port_out(port, UART_OMAP_OSC_12M_SEL, 1);
2213                 } else
2214                         serial_port_out(port, UART_OMAP_OSC_12M_SEL, 0);
2215         }
2216
2217         /*
2218          * For NatSemi, switch to bank 2 not bank 1, to avoid resetting EXCR2,
2219          * otherwise just set DLAB
2220          */
2221         if (up->capabilities & UART_NATSEMI)
2222                 serial_port_out(port, UART_LCR, 0xe0);
2223         else
2224                 serial_port_out(port, UART_LCR, up->lcr | UART_LCR_DLAB);
2225
2226         serial_dl_write(up, quot);
2227
2228         /* XR17V35x UARTs have an extra fractional divisor register (DLD) */
2229         if (up->port.type == PORT_XR17V35X)
2230                 serial_port_out(port, 0x2, quot_frac);
2231 }
2232
2233 void
2234 serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
2235                           struct ktermios *old)
2236 {
2237         struct uart_8250_port *up = up_to_u8250p(port);
2238         unsigned char cval;
2239         unsigned long flags;
2240         unsigned int baud, quot, frac = 0;
2241
2242         cval = serial8250_compute_lcr(up, termios->c_cflag);
2243
2244         /*
2245          * Ask the core to calculate the divisor for us.
2246          */
2247         baud = uart_get_baud_rate(port, termios, old,
2248                                   port->uartclk / 16 / 0xffff,
2249                                   port->uartclk / 16);
2250         quot = serial8250_get_divisor(up, baud, &frac);
2251
2252         /*
2253          * Ok, we're now changing the port state.  Do it with
2254          * interrupts disabled.
2255          */
2256         serial8250_rpm_get(up);
2257         spin_lock_irqsave(&port->lock, flags);
2258
2259         up->lcr = cval;                                 /* Save computed LCR */
2260
2261         if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) {
2262                 /* NOTE: If fifo_bug is not set, a user can set RX_trigger. */
2263                 if ((baud < 2400 && !up->dma) || up->fifo_bug) {
2264                         up->fcr &= ~UART_FCR_TRIGGER_MASK;
2265                         up->fcr |= UART_FCR_TRIGGER_1;
2266                 }
2267         }
2268
2269         /*
2270          * MCR-based auto flow control.  When AFE is enabled, RTS will be
2271          * deasserted when the receive FIFO contains more characters than
2272          * the trigger, or the MCR RTS bit is cleared.  In the case where
2273          * the remote UART is not using CTS auto flow control, we must
2274          * have sufficient FIFO entries for the latency of the remote
2275          * UART to respond.  IOW, at least 32 bytes of FIFO.
2276          */
2277         if (up->capabilities & UART_CAP_AFE && port->fifosize >= 32) {
2278                 up->mcr &= ~UART_MCR_AFE;
2279                 if (termios->c_cflag & CRTSCTS)
2280                         up->mcr |= UART_MCR_AFE;
2281         }
2282
2283         /*
2284          * Update the per-port timeout.
2285          */
2286         uart_update_timeout(port, termios->c_cflag, baud);
2287
2288         port->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
2289         if (termios->c_iflag & INPCK)
2290                 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
2291         if (termios->c_iflag & (IGNBRK | BRKINT | PARMRK))
2292                 port->read_status_mask |= UART_LSR_BI;
2293
2294         /*
2295          * Characteres to ignore
2296          */
2297         port->ignore_status_mask = 0;
2298         if (termios->c_iflag & IGNPAR)
2299                 port->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
2300         if (termios->c_iflag & IGNBRK) {
2301                 port->ignore_status_mask |= UART_LSR_BI;
2302                 /*
2303                  * If we're ignoring parity and break indicators,
2304                  * ignore overruns too (for real raw support).
2305                  */
2306                 if (termios->c_iflag & IGNPAR)
2307                         port->ignore_status_mask |= UART_LSR_OE;
2308         }
2309
2310         /*
2311          * ignore all characters if CREAD is not set
2312          */
2313         if ((termios->c_cflag & CREAD) == 0)
2314                 port->ignore_status_mask |= UART_LSR_DR;
2315
2316         /*
2317          * CTS flow control flag and modem status interrupts
2318          */
2319         up->ier &= ~UART_IER_MSI;
2320         if (!(up->bugs & UART_BUG_NOMSR) &&
2321                         UART_ENABLE_MS(&up->port, termios->c_cflag))
2322                 up->ier |= UART_IER_MSI;
2323         if (up->capabilities & UART_CAP_UUE)
2324                 up->ier |= UART_IER_UUE;
2325         if (up->capabilities & UART_CAP_RTOIE)
2326                 up->ier |= UART_IER_RTOIE;
2327
2328         serial_port_out(port, UART_IER, up->ier);
2329
2330         if (up->capabilities & UART_CAP_EFR) {
2331                 unsigned char efr = 0;
2332                 /*
2333                  * TI16C752/Startech hardware flow control.  FIXME:
2334                  * - TI16C752 requires control thresholds to be set.
2335                  * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled.
2336                  */
2337                 if (termios->c_cflag & CRTSCTS)
2338                         efr |= UART_EFR_CTS;
2339
2340                 serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B);
2341                 if (port->flags & UPF_EXAR_EFR)
2342                         serial_port_out(port, UART_XR_EFR, efr);
2343                 else
2344                         serial_port_out(port, UART_EFR, efr);
2345         }
2346
2347         serial8250_set_divisor(port, baud, quot, frac);
2348
2349         /*
2350          * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
2351          * is written without DLAB set, this mode will be disabled.
2352          */
2353         if (port->type == PORT_16750)
2354                 serial_port_out(port, UART_FCR, up->fcr);
2355
2356         serial_port_out(port, UART_LCR, up->lcr);       /* reset DLAB */
2357         if (port->type != PORT_16750) {
2358                 /* emulated UARTs (Lucent Venus 167x) need two steps */
2359                 if (up->fcr & UART_FCR_ENABLE_FIFO)
2360                         serial_port_out(port, UART_FCR, UART_FCR_ENABLE_FIFO);
2361                 serial_port_out(port, UART_FCR, up->fcr);       /* set fcr */
2362         }
2363         serial8250_set_mctrl(port, port->mctrl);
2364         spin_unlock_irqrestore(&port->lock, flags);
2365         serial8250_rpm_put(up);
2366
2367         /* Don't rewrite B0 */
2368         if (tty_termios_baud_rate(termios))
2369                 tty_termios_encode_baud_rate(termios, baud, baud);
2370 }
2371 EXPORT_SYMBOL(serial8250_do_set_termios);
2372
2373 static void
2374 serial8250_set_termios(struct uart_port *port, struct ktermios *termios,
2375                        struct ktermios *old)
2376 {
2377         if (port->set_termios)
2378                 port->set_termios(port, termios, old);
2379         else
2380                 serial8250_do_set_termios(port, termios, old);
2381 }
2382
2383 static void
2384 serial8250_set_ldisc(struct uart_port *port, struct ktermios *termios)
2385 {
2386         if (termios->c_line == N_PPS) {
2387                 port->flags |= UPF_HARDPPS_CD;
2388                 spin_lock_irq(&port->lock);
2389                 serial8250_enable_ms(port);
2390                 spin_unlock_irq(&port->lock);
2391         } else {
2392                 port->flags &= ~UPF_HARDPPS_CD;
2393                 if (!UART_ENABLE_MS(port, termios->c_cflag)) {
2394                         spin_lock_irq(&port->lock);
2395                         serial8250_disable_ms(port);
2396                         spin_unlock_irq(&port->lock);
2397                 }
2398         }
2399 }
2400
2401
2402 void serial8250_do_pm(struct uart_port *port, unsigned int state,
2403                       unsigned int oldstate)
2404 {
2405         struct uart_8250_port *p = up_to_u8250p(port);
2406
2407         serial8250_set_sleep(p, state != 0);
2408 }
2409 EXPORT_SYMBOL(serial8250_do_pm);
2410
2411 static void
2412 serial8250_pm(struct uart_port *port, unsigned int state,
2413               unsigned int oldstate)
2414 {
2415         if (port->pm)
2416                 port->pm(port, state, oldstate);
2417         else
2418                 serial8250_do_pm(port, state, oldstate);
2419 }
2420
2421 static unsigned int serial8250_port_size(struct uart_8250_port *pt)
2422 {
2423         if (pt->port.mapsize)
2424                 return pt->port.mapsize;
2425         if (pt->port.iotype == UPIO_AU) {
2426                 if (pt->port.type == PORT_RT2880)
2427                         return 0x100;
2428                 return 0x1000;
2429         }
2430         if (is_omap1_8250(pt))
2431                 return 0x16 << pt->port.regshift;
2432
2433         return 8 << pt->port.regshift;
2434 }
2435
2436 /*
2437  * Resource handling.
2438  */
2439 static int serial8250_request_std_resource(struct uart_8250_port *up)
2440 {
2441         unsigned int size = serial8250_port_size(up);
2442         struct uart_port *port = &up->port;
2443         int ret = 0;
2444
2445         switch (port->iotype) {
2446         case UPIO_AU:
2447         case UPIO_TSI:
2448         case UPIO_MEM32:
2449         case UPIO_MEM32BE:
2450         case UPIO_MEM:
2451                 if (!port->mapbase)
2452                         break;
2453
2454                 if (!request_mem_region(port->mapbase, size, "serial")) {
2455                         ret = -EBUSY;
2456                         break;
2457                 }
2458
2459                 if (port->flags & UPF_IOREMAP) {
2460                         port->membase = ioremap_nocache(port->mapbase, size);
2461                         if (!port->membase) {
2462                                 release_mem_region(port->mapbase, size);
2463                                 ret = -ENOMEM;
2464                         }
2465                 }
2466                 break;
2467
2468         case UPIO_HUB6:
2469         case UPIO_PORT:
2470                 if (!request_region(port->iobase, size, "serial"))
2471                         ret = -EBUSY;
2472                 break;
2473         }
2474         return ret;
2475 }
2476
2477 static void serial8250_release_std_resource(struct uart_8250_port *up)
2478 {
2479         unsigned int size = serial8250_port_size(up);
2480         struct uart_port *port = &up->port;
2481
2482         switch (port->iotype) {
2483         case UPIO_AU:
2484         case UPIO_TSI:
2485         case UPIO_MEM32:
2486         case UPIO_MEM32BE:
2487         case UPIO_MEM:
2488                 if (!port->mapbase)
2489                         break;
2490
2491                 if (port->flags & UPF_IOREMAP) {
2492                         iounmap(port->membase);
2493                         port->membase = NULL;
2494                 }
2495
2496                 release_mem_region(port->mapbase, size);
2497                 break;
2498
2499         case UPIO_HUB6:
2500         case UPIO_PORT:
2501                 release_region(port->iobase, size);
2502                 break;
2503         }
2504 }
2505
2506 static void serial8250_release_port(struct uart_port *port)
2507 {
2508         struct uart_8250_port *up = up_to_u8250p(port);
2509
2510         serial8250_release_std_resource(up);
2511 }
2512
2513 static int serial8250_request_port(struct uart_port *port)
2514 {
2515         struct uart_8250_port *up = up_to_u8250p(port);
2516         int ret;
2517
2518         if (port->type == PORT_8250_CIR)
2519                 return -ENODEV;
2520
2521         ret = serial8250_request_std_resource(up);
2522
2523         return ret;
2524 }
2525
2526 static int fcr_get_rxtrig_bytes(struct uart_8250_port *up)
2527 {
2528         const struct serial8250_config *conf_type = &uart_config[up->port.type];
2529         unsigned char bytes;
2530
2531         bytes = conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(up->fcr)];
2532
2533         return bytes ? bytes : -EOPNOTSUPP;
2534 }
2535
2536 static int bytes_to_fcr_rxtrig(struct uart_8250_port *up, unsigned char bytes)
2537 {
2538         const struct serial8250_config *conf_type = &uart_config[up->port.type];
2539         int i;
2540
2541         if (!conf_type->rxtrig_bytes[UART_FCR_R_TRIG_BITS(UART_FCR_R_TRIG_00)])
2542                 return -EOPNOTSUPP;
2543
2544         for (i = 1; i < UART_FCR_R_TRIG_MAX_STATE; i++) {
2545                 if (bytes < conf_type->rxtrig_bytes[i])
2546                         /* Use the nearest lower value */
2547                         return (--i) << UART_FCR_R_TRIG_SHIFT;
2548         }
2549
2550         return UART_FCR_R_TRIG_11;
2551 }
2552
2553 static int do_get_rxtrig(struct tty_port *port)
2554 {
2555         struct uart_state *state = container_of(port, struct uart_state, port);
2556         struct uart_port *uport = state->uart_port;
2557         struct uart_8250_port *up =
2558                 container_of(uport, struct uart_8250_port, port);
2559
2560         if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1)
2561                 return -EINVAL;
2562
2563         return fcr_get_rxtrig_bytes(up);
2564 }
2565
2566 static int do_serial8250_get_rxtrig(struct tty_port *port)
2567 {
2568         int rxtrig_bytes;
2569
2570         mutex_lock(&port->mutex);
2571         rxtrig_bytes = do_get_rxtrig(port);
2572         mutex_unlock(&port->mutex);
2573
2574         return rxtrig_bytes;
2575 }
2576
2577 static ssize_t serial8250_get_attr_rx_trig_bytes(struct device *dev,
2578         struct device_attribute *attr, char *buf)
2579 {
2580         struct tty_port *port = dev_get_drvdata(dev);
2581         int rxtrig_bytes;
2582
2583         rxtrig_bytes = do_serial8250_get_rxtrig(port);
2584         if (rxtrig_bytes < 0)
2585                 return rxtrig_bytes;
2586
2587         return snprintf(buf, PAGE_SIZE, "%d\n", rxtrig_bytes);
2588 }
2589
2590 static int do_set_rxtrig(struct tty_port *port, unsigned char bytes)
2591 {
2592         struct uart_state *state = container_of(port, struct uart_state, port);
2593         struct uart_port *uport = state->uart_port;
2594         struct uart_8250_port *up =
2595                 container_of(uport, struct uart_8250_port, port);
2596         int rxtrig;
2597
2598         if (!(up->capabilities & UART_CAP_FIFO) || uport->fifosize <= 1 ||
2599             up->fifo_bug)
2600                 return -EINVAL;
2601
2602         rxtrig = bytes_to_fcr_rxtrig(up, bytes);
2603         if (rxtrig < 0)
2604                 return rxtrig;
2605
2606         serial8250_clear_fifos(up);
2607         up->fcr &= ~UART_FCR_TRIGGER_MASK;
2608         up->fcr |= (unsigned char)rxtrig;
2609         serial_out(up, UART_FCR, up->fcr);
2610         return 0;
2611 }
2612
2613 static int do_serial8250_set_rxtrig(struct tty_port *port, unsigned char bytes)
2614 {
2615         int ret;
2616
2617         mutex_lock(&port->mutex);
2618         ret = do_set_rxtrig(port, bytes);
2619         mutex_unlock(&port->mutex);
2620
2621         return ret;
2622 }
2623
2624 static ssize_t serial8250_set_attr_rx_trig_bytes(struct device *dev,
2625         struct device_attribute *attr, const char *buf, size_t count)
2626 {
2627         struct tty_port *port = dev_get_drvdata(dev);
2628         unsigned char bytes;
2629         int ret;
2630
2631         if (!count)
2632                 return -EINVAL;
2633
2634         ret = kstrtou8(buf, 10, &bytes);
2635         if (ret < 0)
2636                 return ret;
2637
2638         ret = do_serial8250_set_rxtrig(port, bytes);
2639         if (ret < 0)
2640                 return ret;
2641
2642         return count;
2643 }
2644
2645 static DEVICE_ATTR(rx_trig_bytes, S_IRUSR | S_IWUSR | S_IRGRP,
2646                    serial8250_get_attr_rx_trig_bytes,
2647                    serial8250_set_attr_rx_trig_bytes);
2648
2649 static struct attribute *serial8250_dev_attrs[] = {
2650         &dev_attr_rx_trig_bytes.attr,
2651         NULL,
2652         };
2653
2654 static struct attribute_group serial8250_dev_attr_group = {
2655         .attrs = serial8250_dev_attrs,
2656         };
2657
2658 static void register_dev_spec_attr_grp(struct uart_8250_port *up)
2659 {
2660         const struct serial8250_config *conf_type = &uart_config[up->port.type];
2661
2662         if (conf_type->rxtrig_bytes[0])
2663                 up->port.attr_group = &serial8250_dev_attr_group;
2664 }
2665
2666 static void serial8250_config_port(struct uart_port *port, int flags)
2667 {
2668         struct uart_8250_port *up = up_to_u8250p(port);
2669         int ret;
2670
2671         if (port->type == PORT_8250_CIR)
2672                 return;
2673
2674         /*
2675          * Find the region that we can probe for.  This in turn
2676          * tells us whether we can probe for the type of port.
2677          */
2678         ret = serial8250_request_std_resource(up);
2679         if (ret < 0)
2680                 return;
2681
2682         if (port->iotype != up->cur_iotype)
2683                 set_io_from_upio(port);
2684
2685         if (flags & UART_CONFIG_TYPE)
2686                 autoconfig(up);
2687
2688         /* if access method is AU, it is a 16550 with a quirk */
2689         if (port->type == PORT_16550A && port->iotype == UPIO_AU)
2690                 up->bugs |= UART_BUG_NOMSR;
2691
2692         /* HW bugs may trigger IRQ while IIR == NO_INT */
2693         if (port->type == PORT_TEGRA)
2694                 up->bugs |= UART_BUG_NOMSR;
2695
2696         if (port->type != PORT_UNKNOWN && flags & UART_CONFIG_IRQ)
2697                 autoconfig_irq(up);
2698
2699         if (port->type == PORT_UNKNOWN)
2700                 serial8250_release_std_resource(up);
2701
2702         /* Fixme: probably not the best place for this */
2703         if ((port->type == PORT_XR17V35X) ||
2704            (port->type == PORT_XR17D15X))
2705                 port->handle_irq = exar_handle_irq;
2706
2707         register_dev_spec_attr_grp(up);
2708         up->fcr = uart_config[up->port.type].fcr;
2709 }
2710
2711 static int
2712 serial8250_verify_port(struct uart_port *port, struct serial_struct *ser)
2713 {
2714         if (ser->irq >= nr_irqs || ser->irq < 0 ||
2715             ser->baud_base < 9600 || ser->type < PORT_UNKNOWN ||
2716             ser->type >= ARRAY_SIZE(uart_config) || ser->type == PORT_CIRRUS ||
2717             ser->type == PORT_STARTECH)
2718                 return -EINVAL;
2719         return 0;
2720 }
2721
2722 static const char *
2723 serial8250_type(struct uart_port *port)
2724 {
2725         int type = port->type;
2726
2727         if (type >= ARRAY_SIZE(uart_config))
2728                 type = 0;
2729         return uart_config[type].name;
2730 }
2731
2732 static const struct uart_ops serial8250_pops = {
2733         .tx_empty       = serial8250_tx_empty,
2734         .set_mctrl      = serial8250_set_mctrl,
2735         .get_mctrl      = serial8250_get_mctrl,
2736         .stop_tx        = serial8250_stop_tx,
2737         .start_tx       = serial8250_start_tx,
2738         .throttle       = serial8250_throttle,
2739         .unthrottle     = serial8250_unthrottle,
2740         .stop_rx        = serial8250_stop_rx,
2741         .enable_ms      = serial8250_enable_ms,
2742         .break_ctl      = serial8250_break_ctl,
2743         .startup        = serial8250_startup,
2744         .shutdown       = serial8250_shutdown,
2745         .set_termios    = serial8250_set_termios,
2746         .set_ldisc      = serial8250_set_ldisc,
2747         .pm             = serial8250_pm,
2748         .type           = serial8250_type,
2749         .release_port   = serial8250_release_port,
2750         .request_port   = serial8250_request_port,
2751         .config_port    = serial8250_config_port,
2752         .verify_port    = serial8250_verify_port,
2753 #ifdef CONFIG_CONSOLE_POLL
2754         .poll_get_char = serial8250_get_poll_char,
2755         .poll_put_char = serial8250_put_poll_char,
2756 #endif
2757 };
2758
2759 void serial8250_init_port(struct uart_8250_port *up)
2760 {
2761         struct uart_port *port = &up->port;
2762
2763         spin_lock_init(&port->lock);
2764         port->ops = &serial8250_pops;
2765
2766         up->cur_iotype = 0xFF;
2767 }
2768 EXPORT_SYMBOL_GPL(serial8250_init_port);
2769
2770 void serial8250_set_defaults(struct uart_8250_port *up)
2771 {
2772         struct uart_port *port = &up->port;
2773
2774         if (up->port.flags & UPF_FIXED_TYPE) {
2775                 unsigned int type = up->port.type;
2776
2777                 if (!up->port.fifosize)
2778                         up->port.fifosize = uart_config[type].fifo_size;
2779                 if (!up->tx_loadsz)
2780                         up->tx_loadsz = uart_config[type].tx_loadsz;
2781                 if (!up->capabilities)
2782                         up->capabilities = uart_config[type].flags;
2783         }
2784
2785         set_io_from_upio(port);
2786
2787         /* default dma handlers */
2788         if (up->dma) {
2789                 if (!up->dma->tx_dma)
2790                         up->dma->tx_dma = serial8250_tx_dma;
2791                 if (!up->dma->rx_dma)
2792                         up->dma->rx_dma = serial8250_rx_dma;
2793         }
2794 }
2795 EXPORT_SYMBOL_GPL(serial8250_set_defaults);
2796
2797 #ifdef CONFIG_SERIAL_8250_CONSOLE
2798
2799 static void serial8250_console_putchar(struct uart_port *port, int ch)
2800 {
2801         struct uart_8250_port *up = up_to_u8250p(port);
2802
2803         wait_for_xmitr(up, UART_LSR_THRE);
2804         serial_port_out(port, UART_TX, ch);
2805 }
2806
2807 /*
2808  *      Print a string to the serial port trying not to disturb
2809  *      any possible real use of the port...
2810  *
2811  *      The console_lock must be held when we get here.
2812  */
2813 void serial8250_console_write(struct uart_8250_port *up, const char *s,
2814                               unsigned int count)
2815 {
2816         struct uart_port *port = &up->port;
2817         unsigned long flags;
2818         unsigned int ier;
2819         int locked = 1;
2820
2821         touch_nmi_watchdog();
2822
2823         serial8250_rpm_get(up);
2824
2825         if (port->sysrq)
2826                 locked = 0;
2827         else if (oops_in_progress)
2828                 locked = spin_trylock_irqsave(&port->lock, flags);
2829         else
2830                 spin_lock_irqsave(&port->lock, flags);
2831
2832         /*
2833          *      First save the IER then disable the interrupts
2834          */
2835         ier = serial_port_in(port, UART_IER);
2836
2837         if (up->capabilities & UART_CAP_UUE)
2838                 serial_port_out(port, UART_IER, UART_IER_UUE);
2839         else
2840                 serial_port_out(port, UART_IER, 0);
2841
2842         /* check scratch reg to see if port powered off during system sleep */
2843         if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) {
2844                 struct ktermios termios;
2845                 unsigned int baud, quot, frac = 0;
2846
2847                 termios.c_cflag = port->cons->cflag;
2848                 if (port->state->port.tty && termios.c_cflag == 0)
2849                         termios.c_cflag = port->state->port.tty->termios.c_cflag;
2850
2851                 baud = uart_get_baud_rate(port, &termios, NULL,
2852                                           port->uartclk / 16 / 0xffff,
2853                                           port->uartclk / 16);
2854                 quot = serial8250_get_divisor(up, baud, &frac);
2855
2856                 serial8250_set_divisor(port, baud, quot, frac);
2857                 serial_port_out(port, UART_LCR, up->lcr);
2858                 serial_port_out(port, UART_MCR, UART_MCR_DTR | UART_MCR_RTS);
2859
2860                 up->canary = 0;
2861         }
2862
2863         uart_console_write(port, s, count, serial8250_console_putchar);
2864
2865         /*
2866          *      Finally, wait for transmitter to become empty
2867          *      and restore the IER
2868          */
2869         wait_for_xmitr(up, BOTH_EMPTY);
2870         serial_port_out(port, UART_IER, ier);
2871
2872         /*
2873          *      The receive handling will happen properly because the
2874          *      receive ready bit will still be set; it is not cleared
2875          *      on read.  However, modem control will not, we must
2876          *      call it if we have saved something in the saved flags
2877          *      while processing with interrupts off.
2878          */
2879         if (up->msr_saved_flags)
2880                 serial8250_modem_status(up);
2881
2882         if (locked)
2883                 spin_unlock_irqrestore(&port->lock, flags);
2884         serial8250_rpm_put(up);
2885 }
2886
2887 static unsigned int probe_baud(struct uart_port *port)
2888 {
2889         unsigned char lcr, dll, dlm;
2890         unsigned int quot;
2891
2892         lcr = serial_port_in(port, UART_LCR);
2893         serial_port_out(port, UART_LCR, lcr | UART_LCR_DLAB);
2894         dll = serial_port_in(port, UART_DLL);
2895         dlm = serial_port_in(port, UART_DLM);
2896         serial_port_out(port, UART_LCR, lcr);
2897
2898         quot = (dlm << 8) | dll;
2899         return (port->uartclk / 16) / quot;
2900 }
2901
2902 int serial8250_console_setup(struct uart_port *port, char *options, bool probe)
2903 {
2904         int baud = 9600;
2905         int bits = 8;
2906         int parity = 'n';
2907         int flow = 'n';
2908
2909         if (!port->iobase && !port->membase)
2910                 return -ENODEV;
2911
2912         if (options)
2913                 uart_parse_options(options, &baud, &parity, &bits, &flow);
2914         else if (probe)
2915                 baud = probe_baud(port);
2916
2917         return uart_set_options(port, port->cons, baud, parity, bits, flow);
2918 }
2919
2920 #endif /* CONFIG_SERIAL_8250_CONSOLE */
2921
2922 MODULE_LICENSE("GPL");