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