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