2 * Driver for 8250/16550-type serial ports
4 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
6 * Copyright (C) 2001 Russell King.
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.
13 * A note about mapbase / membase
15 * mapbase is the physical address of the IO port.
16 * membase is an 'ioremapped' cookie.
19 #if defined(CONFIG_SERIAL_8250_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
23 #include <linux/module.h>
24 #include <linux/moduleparam.h>
25 #include <linux/ioport.h>
26 #include <linux/init.h>
27 #include <linux/console.h>
28 #include <linux/sysrq.h>
29 #include <linux/delay.h>
30 #include <linux/platform_device.h>
31 #include <linux/tty.h>
32 #include <linux/ratelimit.h>
33 #include <linux/tty_flip.h>
34 #include <linux/serial_core.h>
35 #include <linux/serial.h>
36 #include <linux/serial_8250.h>
37 #include <linux/nmi.h>
38 #include <linux/mutex.h>
39 #include <linux/slab.h>
40 #include <linux/uaccess.h>
42 #include <linux/sunserialcore.h>
52 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
53 * is unsafe when used on edge-triggered interrupts.
55 static unsigned int share_irqs
= SERIAL8250_SHARE_IRQS
;
57 static unsigned int nr_uarts
= CONFIG_SERIAL_8250_RUNTIME_UARTS
;
59 static struct uart_driver serial8250_reg
;
61 static int serial_index(struct uart_port
*port
)
63 return (serial8250_reg
.minor
- 64) + port
->line
;
66 static unsigned int skip_txen_test
; /* force skip of txen test at init time */
72 #define DEBUG_AUTOCONF(fmt...) printk(fmt)
74 #define DEBUG_AUTOCONF(fmt...) do { } while (0)
78 #define DEBUG_INTR(fmt...) printk(fmt)
80 #define DEBUG_INTR(fmt...) do { } while (0)
83 #define PASS_LIMIT 512
85 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
88 #ifdef CONFIG_SERIAL_8250_DETECT_IRQ
89 #define CONFIG_SERIAL_DETECT_IRQ 1
91 #ifdef CONFIG_SERIAL_8250_MANY_PORTS
92 #define CONFIG_SERIAL_MANY_PORTS 1
96 * HUB6 is always on. This will be removed once the header
97 * files have been cleaned.
101 #include <asm/serial.h>
103 * SERIAL_PORT_DFNS tells us about built-in ports that have no
104 * standard enumeration mechanism. Platforms that can find all
105 * serial ports via mechanisms like ACPI or PCI need not supply it.
107 #ifndef SERIAL_PORT_DFNS
108 #define SERIAL_PORT_DFNS
111 static const struct old_serial_port old_serial_port
[] = {
112 SERIAL_PORT_DFNS
/* defined in asm/serial.h */
115 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
117 #ifdef CONFIG_SERIAL_8250_RSA
119 #define PORT_RSA_MAX 4
120 static unsigned long probe_rsa
[PORT_RSA_MAX
];
121 static unsigned int probe_rsa_count
;
122 #endif /* CONFIG_SERIAL_8250_RSA */
125 struct hlist_node node
;
127 spinlock_t lock
; /* Protects list not the hash */
128 struct list_head
*head
;
131 #define NR_IRQ_HASH 32 /* Can be adjusted later */
132 static struct hlist_head irq_lists
[NR_IRQ_HASH
];
133 static DEFINE_MUTEX(hash_mutex
); /* Used to walk the hash */
136 * Here we define the default xmit fifo size used for each type of UART.
138 static const struct serial8250_config uart_config
[] = {
163 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
164 .rxtrig_bytes
= {1, 4, 8, 14},
165 .flags
= UART_CAP_FIFO
,
176 .flags
= UART_CAP_FIFO
| UART_CAP_EFR
| UART_CAP_SLEEP
,
182 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_01
|
184 .rxtrig_bytes
= {8, 16, 24, 28},
185 .flags
= UART_CAP_FIFO
| UART_CAP_EFR
| UART_CAP_SLEEP
,
191 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
|
193 .rxtrig_bytes
= {1, 16, 32, 56},
194 .flags
= UART_CAP_FIFO
| UART_CAP_SLEEP
| UART_CAP_AFE
,
202 .name
= "16C950/954",
205 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
206 /* UART_CAP_EFR breaks billionon CF bluetooth card. */
207 .flags
= UART_CAP_FIFO
| UART_CAP_SLEEP
,
213 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_01
|
215 .rxtrig_bytes
= {8, 16, 56, 60},
216 .flags
= UART_CAP_FIFO
| UART_CAP_EFR
| UART_CAP_SLEEP
,
222 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
223 .flags
= UART_CAP_FIFO
| UART_CAP_EFR
| UART_CAP_SLEEP
,
229 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_11
,
230 .flags
= UART_CAP_FIFO
,
236 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
237 .flags
= UART_CAP_FIFO
| UART_NATSEMI
,
243 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
244 .flags
= UART_CAP_FIFO
| UART_CAP_UUE
| UART_CAP_RTOIE
,
250 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
251 .flags
= UART_CAP_FIFO
,
257 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_00
,
258 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
,
264 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
265 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
,
271 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_01
|
273 .rxtrig_bytes
= {1, 4, 8, 14},
274 .flags
= UART_CAP_FIFO
| UART_CAP_RTOIE
,
280 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
281 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
| UART_CAP_EFR
|
288 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_11
|
290 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
| UART_CAP_EFR
|
297 .fcr
= UART_FCR_DMA_SELECT
| UART_FCR_ENABLE_FIFO
|
298 UART_FCR_R_TRIG_00
| UART_FCR_T_TRIG_00
,
299 .flags
= UART_CAP_FIFO
,
301 [PORT_BRCM_TRUMANAGE
] = {
305 .flags
= UART_CAP_HFIFO
,
310 [PORT_ALTR_16550_F32
] = {
311 .name
= "Altera 16550 FIFO32",
314 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
315 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
,
317 [PORT_ALTR_16550_F64
] = {
318 .name
= "Altera 16550 FIFO64",
321 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
322 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
,
324 [PORT_ALTR_16550_F128
] = {
325 .name
= "Altera 16550 FIFO128",
328 .fcr
= UART_FCR_ENABLE_FIFO
| UART_FCR_R_TRIG_10
,
329 .flags
= UART_CAP_FIFO
| UART_CAP_AFE
,
333 /* Uart divisor latch read */
334 static int default_serial_dl_read(struct uart_8250_port
*up
)
336 return serial_in(up
, UART_DLL
) | serial_in(up
, UART_DLM
) << 8;
339 /* Uart divisor latch write */
340 static void default_serial_dl_write(struct uart_8250_port
*up
, int value
)
342 serial_out(up
, UART_DLL
, value
& 0xff);
343 serial_out(up
, UART_DLM
, value
>> 8 & 0xff);
346 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
348 /* Au1x00/RT288x UART hardware has a weird register layout */
349 static const u8 au_io_in_map
[] = {
359 static const u8 au_io_out_map
[] = {
367 static unsigned int au_serial_in(struct uart_port
*p
, int offset
)
369 offset
= au_io_in_map
[offset
] << p
->regshift
;
370 return __raw_readl(p
->membase
+ offset
);
373 static void au_serial_out(struct uart_port
*p
, int offset
, int value
)
375 offset
= au_io_out_map
[offset
] << p
->regshift
;
376 __raw_writel(value
, p
->membase
+ offset
);
379 /* Au1x00 haven't got a standard divisor latch */
380 static int au_serial_dl_read(struct uart_8250_port
*up
)
382 return __raw_readl(up
->port
.membase
+ 0x28);
385 static void au_serial_dl_write(struct uart_8250_port
*up
, int value
)
387 __raw_writel(value
, up
->port
.membase
+ 0x28);
392 static unsigned int hub6_serial_in(struct uart_port
*p
, int offset
)
394 offset
= offset
<< p
->regshift
;
395 outb(p
->hub6
- 1 + offset
, p
->iobase
);
396 return inb(p
->iobase
+ 1);
399 static void hub6_serial_out(struct uart_port
*p
, int offset
, int value
)
401 offset
= offset
<< p
->regshift
;
402 outb(p
->hub6
- 1 + offset
, p
->iobase
);
403 outb(value
, p
->iobase
+ 1);
406 static unsigned int mem_serial_in(struct uart_port
*p
, int offset
)
408 offset
= offset
<< p
->regshift
;
409 return readb(p
->membase
+ offset
);
412 static void mem_serial_out(struct uart_port
*p
, int offset
, int value
)
414 offset
= offset
<< p
->regshift
;
415 writeb(value
, p
->membase
+ offset
);
418 static void mem32_serial_out(struct uart_port
*p
, int offset
, int value
)
420 offset
= offset
<< p
->regshift
;
421 writel(value
, p
->membase
+ offset
);
424 static unsigned int mem32_serial_in(struct uart_port
*p
, int offset
)
426 offset
= offset
<< p
->regshift
;
427 return readl(p
->membase
+ offset
);
430 static unsigned int io_serial_in(struct uart_port
*p
, int offset
)
432 offset
= offset
<< p
->regshift
;
433 return inb(p
->iobase
+ offset
);
436 static void io_serial_out(struct uart_port
*p
, int offset
, int value
)
438 offset
= offset
<< p
->regshift
;
439 outb(value
, p
->iobase
+ offset
);
442 static int serial8250_default_handle_irq(struct uart_port
*port
);
443 static int exar_handle_irq(struct uart_port
*port
);
445 static void set_io_from_upio(struct uart_port
*p
)
447 struct uart_8250_port
*up
= up_to_u8250p(p
);
449 up
->dl_read
= default_serial_dl_read
;
450 up
->dl_write
= default_serial_dl_write
;
454 p
->serial_in
= hub6_serial_in
;
455 p
->serial_out
= hub6_serial_out
;
459 p
->serial_in
= mem_serial_in
;
460 p
->serial_out
= mem_serial_out
;
464 p
->serial_in
= mem32_serial_in
;
465 p
->serial_out
= mem32_serial_out
;
468 #if defined(CONFIG_MIPS_ALCHEMY) || defined(CONFIG_SERIAL_8250_RT288X)
470 p
->serial_in
= au_serial_in
;
471 p
->serial_out
= au_serial_out
;
472 up
->dl_read
= au_serial_dl_read
;
473 up
->dl_write
= au_serial_dl_write
;
478 p
->serial_in
= io_serial_in
;
479 p
->serial_out
= io_serial_out
;
482 /* Remember loaded iotype */
483 up
->cur_iotype
= p
->iotype
;
484 p
->handle_irq
= serial8250_default_handle_irq
;
488 serial_port_out_sync(struct uart_port
*p
, int offset
, int value
)
494 p
->serial_out(p
, offset
, value
);
495 p
->serial_in(p
, UART_LCR
); /* safe, no side-effects */
498 p
->serial_out(p
, offset
, value
);
505 static void serial_icr_write(struct uart_8250_port
*up
, int offset
, int value
)
507 serial_out(up
, UART_SCR
, offset
);
508 serial_out(up
, UART_ICR
, value
);
511 static unsigned int serial_icr_read(struct uart_8250_port
*up
, int offset
)
515 serial_icr_write(up
, UART_ACR
, up
->acr
| UART_ACR_ICRRD
);
516 serial_out(up
, UART_SCR
, offset
);
517 value
= serial_in(up
, UART_ICR
);
518 serial_icr_write(up
, UART_ACR
, up
->acr
);
526 static void serial8250_clear_fifos(struct uart_8250_port
*p
)
528 if (p
->capabilities
& UART_CAP_FIFO
) {
529 serial_out(p
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
530 serial_out(p
, UART_FCR
, UART_FCR_ENABLE_FIFO
|
531 UART_FCR_CLEAR_RCVR
| UART_FCR_CLEAR_XMIT
);
532 serial_out(p
, UART_FCR
, 0);
536 void serial8250_clear_and_reinit_fifos(struct uart_8250_port
*p
)
538 serial8250_clear_fifos(p
);
539 serial_out(p
, UART_FCR
, p
->fcr
);
541 EXPORT_SYMBOL_GPL(serial8250_clear_and_reinit_fifos
);
544 * IER sleep support. UARTs which have EFRs need the "extended
545 * capability" bit enabled. Note that on XR16C850s, we need to
546 * reset LCR to write to IER.
548 static void serial8250_set_sleep(struct uart_8250_port
*p
, int sleep
)
551 * Exar UARTs have a SLEEP register that enables or disables
552 * each UART to enter sleep mode separately. On the XR17V35x the
553 * register is accessible to each UART at the UART_EXAR_SLEEP
554 * offset but the UART channel may only write to the corresponding
557 if ((p
->port
.type
== PORT_XR17V35X
) ||
558 (p
->port
.type
== PORT_XR17D15X
)) {
559 serial_out(p
, UART_EXAR_SLEEP
, sleep
? 0xff : 0);
563 if (p
->capabilities
& UART_CAP_SLEEP
) {
564 if (p
->capabilities
& UART_CAP_EFR
) {
565 serial_out(p
, UART_LCR
, UART_LCR_CONF_MODE_B
);
566 serial_out(p
, UART_EFR
, UART_EFR_ECB
);
567 serial_out(p
, UART_LCR
, 0);
569 serial_out(p
, UART_IER
, sleep
? UART_IERX_SLEEP
: 0);
570 if (p
->capabilities
& UART_CAP_EFR
) {
571 serial_out(p
, UART_LCR
, UART_LCR_CONF_MODE_B
);
572 serial_out(p
, UART_EFR
, 0);
573 serial_out(p
, UART_LCR
, 0);
578 #ifdef CONFIG_SERIAL_8250_RSA
580 * Attempts to turn on the RSA FIFO. Returns zero on failure.
581 * We set the port uart clock rate if we succeed.
583 static int __enable_rsa(struct uart_8250_port
*up
)
588 mode
= serial_in(up
, UART_RSA_MSR
);
589 result
= mode
& UART_RSA_MSR_FIFO
;
592 serial_out(up
, UART_RSA_MSR
, mode
| UART_RSA_MSR_FIFO
);
593 mode
= serial_in(up
, UART_RSA_MSR
);
594 result
= mode
& UART_RSA_MSR_FIFO
;
598 up
->port
.uartclk
= SERIAL_RSA_BAUD_BASE
* 16;
603 static void enable_rsa(struct uart_8250_port
*up
)
605 if (up
->port
.type
== PORT_RSA
) {
606 if (up
->port
.uartclk
!= SERIAL_RSA_BAUD_BASE
* 16) {
607 spin_lock_irq(&up
->port
.lock
);
609 spin_unlock_irq(&up
->port
.lock
);
611 if (up
->port
.uartclk
== SERIAL_RSA_BAUD_BASE
* 16)
612 serial_out(up
, UART_RSA_FRR
, 0);
617 * Attempts to turn off the RSA FIFO. Returns zero on failure.
618 * It is unknown why interrupts were disabled in here. However,
619 * the caller is expected to preserve this behaviour by grabbing
620 * the spinlock before calling this function.
622 static void disable_rsa(struct uart_8250_port
*up
)
627 if (up
->port
.type
== PORT_RSA
&&
628 up
->port
.uartclk
== SERIAL_RSA_BAUD_BASE
* 16) {
629 spin_lock_irq(&up
->port
.lock
);
631 mode
= serial_in(up
, UART_RSA_MSR
);
632 result
= !(mode
& UART_RSA_MSR_FIFO
);
635 serial_out(up
, UART_RSA_MSR
, mode
& ~UART_RSA_MSR_FIFO
);
636 mode
= serial_in(up
, UART_RSA_MSR
);
637 result
= !(mode
& UART_RSA_MSR_FIFO
);
641 up
->port
.uartclk
= SERIAL_RSA_BAUD_BASE_LO
* 16;
642 spin_unlock_irq(&up
->port
.lock
);
645 #endif /* CONFIG_SERIAL_8250_RSA */
648 * This is a quickie test to see how big the FIFO is.
649 * It doesn't work at all the time, more's the pity.
651 static int size_fifo(struct uart_8250_port
*up
)
653 unsigned char old_fcr
, old_mcr
, old_lcr
;
654 unsigned short old_dl
;
657 old_lcr
= serial_in(up
, UART_LCR
);
658 serial_out(up
, UART_LCR
, 0);
659 old_fcr
= serial_in(up
, UART_FCR
);
660 old_mcr
= serial_in(up
, UART_MCR
);
661 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
|
662 UART_FCR_CLEAR_RCVR
| UART_FCR_CLEAR_XMIT
);
663 serial_out(up
, UART_MCR
, UART_MCR_LOOP
);
664 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
665 old_dl
= serial_dl_read(up
);
666 serial_dl_write(up
, 0x0001);
667 serial_out(up
, UART_LCR
, 0x03);
668 for (count
= 0; count
< 256; count
++)
669 serial_out(up
, UART_TX
, count
);
670 mdelay(20);/* FIXME - schedule_timeout */
671 for (count
= 0; (serial_in(up
, UART_LSR
) & UART_LSR_DR
) &&
672 (count
< 256); count
++)
673 serial_in(up
, UART_RX
);
674 serial_out(up
, UART_FCR
, old_fcr
);
675 serial_out(up
, UART_MCR
, old_mcr
);
676 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
677 serial_dl_write(up
, old_dl
);
678 serial_out(up
, UART_LCR
, old_lcr
);
684 * Read UART ID using the divisor method - set DLL and DLM to zero
685 * and the revision will be in DLL and device type in DLM. We
686 * preserve the device state across this.
688 static unsigned int autoconfig_read_divisor_id(struct uart_8250_port
*p
)
690 unsigned char old_dll
, old_dlm
, old_lcr
;
693 old_lcr
= serial_in(p
, UART_LCR
);
694 serial_out(p
, UART_LCR
, UART_LCR_CONF_MODE_A
);
696 old_dll
= serial_in(p
, UART_DLL
);
697 old_dlm
= serial_in(p
, UART_DLM
);
699 serial_out(p
, UART_DLL
, 0);
700 serial_out(p
, UART_DLM
, 0);
702 id
= serial_in(p
, UART_DLL
) | serial_in(p
, UART_DLM
) << 8;
704 serial_out(p
, UART_DLL
, old_dll
);
705 serial_out(p
, UART_DLM
, old_dlm
);
706 serial_out(p
, UART_LCR
, old_lcr
);
712 * This is a helper routine to autodetect StarTech/Exar/Oxsemi UART's.
713 * When this function is called we know it is at least a StarTech
714 * 16650 V2, but it might be one of several StarTech UARTs, or one of
715 * its clones. (We treat the broken original StarTech 16650 V1 as a
716 * 16550, and why not? Startech doesn't seem to even acknowledge its
719 * What evil have men's minds wrought...
721 static void autoconfig_has_efr(struct uart_8250_port
*up
)
723 unsigned int id1
, id2
, id3
, rev
;
726 * Everything with an EFR has SLEEP
728 up
->capabilities
|= UART_CAP_EFR
| UART_CAP_SLEEP
;
731 * First we check to see if it's an Oxford Semiconductor UART.
733 * If we have to do this here because some non-National
734 * Semiconductor clone chips lock up if you try writing to the
735 * LSR register (which serial_icr_read does)
739 * Check for Oxford Semiconductor 16C950.
741 * EFR [4] must be set else this test fails.
743 * This shouldn't be necessary, but Mike Hudson (Exoray@isys.ca)
744 * claims that it's needed for 952 dual UART's (which are not
745 * recommended for new designs).
748 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
749 serial_out(up
, UART_EFR
, UART_EFR_ECB
);
750 serial_out(up
, UART_LCR
, 0x00);
751 id1
= serial_icr_read(up
, UART_ID1
);
752 id2
= serial_icr_read(up
, UART_ID2
);
753 id3
= serial_icr_read(up
, UART_ID3
);
754 rev
= serial_icr_read(up
, UART_REV
);
756 DEBUG_AUTOCONF("950id=%02x:%02x:%02x:%02x ", id1
, id2
, id3
, rev
);
758 if (id1
== 0x16 && id2
== 0xC9 &&
759 (id3
== 0x50 || id3
== 0x52 || id3
== 0x54)) {
760 up
->port
.type
= PORT_16C950
;
763 * Enable work around for the Oxford Semiconductor 952 rev B
764 * chip which causes it to seriously miscalculate baud rates
767 if (id3
== 0x52 && rev
== 0x01)
768 up
->bugs
|= UART_BUG_QUOT
;
773 * We check for a XR16C850 by setting DLL and DLM to 0, and then
774 * reading back DLL and DLM. The chip type depends on the DLM
776 * 0x10 - XR16C850 and the DLL contains the chip revision.
780 id1
= autoconfig_read_divisor_id(up
);
781 DEBUG_AUTOCONF("850id=%04x ", id1
);
784 if (id2
== 0x10 || id2
== 0x12 || id2
== 0x14) {
785 up
->port
.type
= PORT_16850
;
790 * It wasn't an XR16C850.
792 * We distinguish between the '654 and the '650 by counting
793 * how many bytes are in the FIFO. I'm using this for now,
794 * since that's the technique that was sent to me in the
795 * serial driver update, but I'm not convinced this works.
796 * I've had problems doing this in the past. -TYT
798 if (size_fifo(up
) == 64)
799 up
->port
.type
= PORT_16654
;
801 up
->port
.type
= PORT_16650V2
;
805 * We detected a chip without a FIFO. Only two fall into
806 * this category - the original 8250 and the 16450. The
807 * 16450 has a scratch register (accessible with LCR=0)
809 static void autoconfig_8250(struct uart_8250_port
*up
)
811 unsigned char scratch
, status1
, status2
;
813 up
->port
.type
= PORT_8250
;
815 scratch
= serial_in(up
, UART_SCR
);
816 serial_out(up
, UART_SCR
, 0xa5);
817 status1
= serial_in(up
, UART_SCR
);
818 serial_out(up
, UART_SCR
, 0x5a);
819 status2
= serial_in(up
, UART_SCR
);
820 serial_out(up
, UART_SCR
, scratch
);
822 if (status1
== 0xa5 && status2
== 0x5a)
823 up
->port
.type
= PORT_16450
;
826 static int broken_efr(struct uart_8250_port
*up
)
829 * Exar ST16C2550 "A2" devices incorrectly detect as
830 * having an EFR, and report an ID of 0x0201. See
831 * http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-11/4812.html
833 if (autoconfig_read_divisor_id(up
) == 0x0201 && size_fifo(up
) == 16)
839 static inline int ns16550a_goto_highspeed(struct uart_8250_port
*up
)
841 unsigned char status
;
843 status
= serial_in(up
, 0x04); /* EXCR2 */
844 #define PRESL(x) ((x) & 0x30)
845 if (PRESL(status
) == 0x10) {
846 /* already in high speed mode */
849 status
&= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
850 status
|= 0x10; /* 1.625 divisor for baud_base --> 921600 */
851 serial_out(up
, 0x04, status
);
857 * We know that the chip has FIFOs. Does it have an EFR? The
858 * EFR is located in the same register position as the IIR and
859 * we know the top two bits of the IIR are currently set. The
860 * EFR should contain zero. Try to read the EFR.
862 static void autoconfig_16550a(struct uart_8250_port
*up
)
864 unsigned char status1
, status2
;
865 unsigned int iersave
;
867 up
->port
.type
= PORT_16550A
;
868 up
->capabilities
|= UART_CAP_FIFO
;
871 * XR17V35x UARTs have an extra divisor register, DLD
872 * that gets enabled with when DLAB is set which will
873 * cause the device to incorrectly match and assign
874 * port type to PORT_16650. The EFR for this UART is
875 * found at offset 0x09. Instead check the Deice ID (DVID)
876 * register for a 2, 4 or 8 port UART.
878 if (up
->port
.flags
& UPF_EXAR_EFR
) {
879 status1
= serial_in(up
, UART_EXAR_DVID
);
880 if (status1
== 0x82 || status1
== 0x84 || status1
== 0x88) {
881 DEBUG_AUTOCONF("Exar XR17V35x ");
882 up
->port
.type
= PORT_XR17V35X
;
883 up
->capabilities
|= UART_CAP_AFE
| UART_CAP_EFR
|
892 * Check for presence of the EFR when DLAB is set.
893 * Only ST16C650V1 UARTs pass this test.
895 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
896 if (serial_in(up
, UART_EFR
) == 0) {
897 serial_out(up
, UART_EFR
, 0xA8);
898 if (serial_in(up
, UART_EFR
) != 0) {
899 DEBUG_AUTOCONF("EFRv1 ");
900 up
->port
.type
= PORT_16650
;
901 up
->capabilities
|= UART_CAP_EFR
| UART_CAP_SLEEP
;
903 DEBUG_AUTOCONF("Motorola 8xxx DUART ");
905 serial_out(up
, UART_EFR
, 0);
910 * Maybe it requires 0xbf to be written to the LCR.
911 * (other ST16C650V2 UARTs, TI16C752A, etc)
913 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
914 if (serial_in(up
, UART_EFR
) == 0 && !broken_efr(up
)) {
915 DEBUG_AUTOCONF("EFRv2 ");
916 autoconfig_has_efr(up
);
921 * Check for a National Semiconductor SuperIO chip.
922 * Attempt to switch to bank 2, read the value of the LOOP bit
923 * from EXCR1. Switch back to bank 0, change it in MCR. Then
924 * switch back to bank 2, read it from EXCR1 again and check
925 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
927 serial_out(up
, UART_LCR
, 0);
928 status1
= serial_in(up
, UART_MCR
);
929 serial_out(up
, UART_LCR
, 0xE0);
930 status2
= serial_in(up
, 0x02); /* EXCR1 */
932 if (!((status2
^ status1
) & UART_MCR_LOOP
)) {
933 serial_out(up
, UART_LCR
, 0);
934 serial_out(up
, UART_MCR
, status1
^ UART_MCR_LOOP
);
935 serial_out(up
, UART_LCR
, 0xE0);
936 status2
= serial_in(up
, 0x02); /* EXCR1 */
937 serial_out(up
, UART_LCR
, 0);
938 serial_out(up
, UART_MCR
, status1
);
940 if ((status2
^ status1
) & UART_MCR_LOOP
) {
943 serial_out(up
, UART_LCR
, 0xE0);
945 quot
= serial_dl_read(up
);
948 if (ns16550a_goto_highspeed(up
))
949 serial_dl_write(up
, quot
);
951 serial_out(up
, UART_LCR
, 0);
953 up
->port
.uartclk
= 921600*16;
954 up
->port
.type
= PORT_NS16550A
;
955 up
->capabilities
|= UART_NATSEMI
;
961 * No EFR. Try to detect a TI16750, which only sets bit 5 of
962 * the IIR when 64 byte FIFO mode is enabled when DLAB is set.
963 * Try setting it with and without DLAB set. Cheap clones
964 * set bit 5 without DLAB set.
966 serial_out(up
, UART_LCR
, 0);
967 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
| UART_FCR7_64BYTE
);
968 status1
= serial_in(up
, UART_IIR
) >> 5;
969 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
970 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_A
);
971 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
| UART_FCR7_64BYTE
);
972 status2
= serial_in(up
, UART_IIR
) >> 5;
973 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
974 serial_out(up
, UART_LCR
, 0);
976 DEBUG_AUTOCONF("iir1=%d iir2=%d ", status1
, status2
);
978 if (status1
== 6 && status2
== 7) {
979 up
->port
.type
= PORT_16750
;
980 up
->capabilities
|= UART_CAP_AFE
| UART_CAP_SLEEP
;
985 * Try writing and reading the UART_IER_UUE bit (b6).
986 * If it works, this is probably one of the Xscale platform's
988 * We're going to explicitly set the UUE bit to 0 before
989 * trying to write and read a 1 just to make sure it's not
990 * already a 1 and maybe locked there before we even start start.
992 iersave
= serial_in(up
, UART_IER
);
993 serial_out(up
, UART_IER
, iersave
& ~UART_IER_UUE
);
994 if (!(serial_in(up
, UART_IER
) & UART_IER_UUE
)) {
996 * OK it's in a known zero state, try writing and reading
997 * without disturbing the current state of the other bits.
999 serial_out(up
, UART_IER
, iersave
| UART_IER_UUE
);
1000 if (serial_in(up
, UART_IER
) & UART_IER_UUE
) {
1003 * We'll leave the UART_IER_UUE bit set to 1 (enabled).
1005 DEBUG_AUTOCONF("Xscale ");
1006 up
->port
.type
= PORT_XSCALE
;
1007 up
->capabilities
|= UART_CAP_UUE
| UART_CAP_RTOIE
;
1012 * If we got here we couldn't force the IER_UUE bit to 0.
1013 * Log it and continue.
1015 DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
1017 serial_out(up
, UART_IER
, iersave
);
1020 * Exar uarts have EFR in a weird location
1022 if (up
->port
.flags
& UPF_EXAR_EFR
) {
1023 DEBUG_AUTOCONF("Exar XR17D15x ");
1024 up
->port
.type
= PORT_XR17D15X
;
1025 up
->capabilities
|= UART_CAP_AFE
| UART_CAP_EFR
|
1032 * We distinguish between 16550A and U6 16550A by counting
1033 * how many bytes are in the FIFO.
1035 if (up
->port
.type
== PORT_16550A
&& size_fifo(up
) == 64) {
1036 up
->port
.type
= PORT_U6_16550A
;
1037 up
->capabilities
|= UART_CAP_AFE
;
1042 * This routine is called by rs_init() to initialize a specific serial
1043 * port. It determines what type of UART chip this serial port is
1044 * using: 8250, 16450, 16550, 16550A. The important question is
1045 * whether or not this UART is a 16550A or not, since this will
1046 * determine whether or not we can use its FIFO features or not.
1048 static void autoconfig(struct uart_8250_port
*up
, unsigned int probeflags
)
1050 unsigned char status1
, scratch
, scratch2
, scratch3
;
1051 unsigned char save_lcr
, save_mcr
;
1052 struct uart_port
*port
= &up
->port
;
1053 unsigned long flags
;
1054 unsigned int old_capabilities
;
1056 if (!port
->iobase
&& !port
->mapbase
&& !port
->membase
)
1059 DEBUG_AUTOCONF("ttyS%d: autoconf (0x%04lx, 0x%p): ",
1060 serial_index(port
), port
->iobase
, port
->membase
);
1063 * We really do need global IRQs disabled here - we're going to
1064 * be frobbing the chips IRQ enable register to see if it exists.
1066 spin_lock_irqsave(&port
->lock
, flags
);
1068 up
->capabilities
= 0;
1071 if (!(port
->flags
& UPF_BUGGY_UART
)) {
1073 * Do a simple existence test first; if we fail this,
1074 * there's no point trying anything else.
1076 * 0x80 is used as a nonsense port to prevent against
1077 * false positives due to ISA bus float. The
1078 * assumption is that 0x80 is a non-existent port;
1079 * which should be safe since include/asm/io.h also
1080 * makes this assumption.
1082 * Note: this is safe as long as MCR bit 4 is clear
1083 * and the device is in "PC" mode.
1085 scratch
= serial_in(up
, UART_IER
);
1086 serial_out(up
, UART_IER
, 0);
1091 * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
1092 * 16C754B) allow only to modify them if an EFR bit is set.
1094 scratch2
= serial_in(up
, UART_IER
) & 0x0f;
1095 serial_out(up
, UART_IER
, 0x0F);
1099 scratch3
= serial_in(up
, UART_IER
) & 0x0f;
1100 serial_out(up
, UART_IER
, scratch
);
1101 if (scratch2
!= 0 || scratch3
!= 0x0F) {
1103 * We failed; there's nothing here
1105 spin_unlock_irqrestore(&port
->lock
, flags
);
1106 DEBUG_AUTOCONF("IER test failed (%02x, %02x) ",
1107 scratch2
, scratch3
);
1112 save_mcr
= serial_in(up
, UART_MCR
);
1113 save_lcr
= serial_in(up
, UART_LCR
);
1116 * Check to see if a UART is really there. Certain broken
1117 * internal modems based on the Rockwell chipset fail this
1118 * test, because they apparently don't implement the loopback
1119 * test mode. So this test is skipped on the COM 1 through
1120 * COM 4 ports. This *should* be safe, since no board
1121 * manufacturer would be stupid enough to design a board
1122 * that conflicts with COM 1-4 --- we hope!
1124 if (!(port
->flags
& UPF_SKIP_TEST
)) {
1125 serial_out(up
, UART_MCR
, UART_MCR_LOOP
| 0x0A);
1126 status1
= serial_in(up
, UART_MSR
) & 0xF0;
1127 serial_out(up
, UART_MCR
, save_mcr
);
1128 if (status1
!= 0x90) {
1129 spin_unlock_irqrestore(&port
->lock
, flags
);
1130 DEBUG_AUTOCONF("LOOP test failed (%02x) ",
1137 * We're pretty sure there's a port here. Lets find out what
1138 * type of port it is. The IIR top two bits allows us to find
1139 * out if it's 8250 or 16450, 16550, 16550A or later. This
1140 * determines what we test for next.
1142 * We also initialise the EFR (if any) to zero for later. The
1143 * EFR occupies the same register location as the FCR and IIR.
1145 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
1146 serial_out(up
, UART_EFR
, 0);
1147 serial_out(up
, UART_LCR
, 0);
1149 serial_out(up
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
1150 scratch
= serial_in(up
, UART_IIR
) >> 6;
1154 autoconfig_8250(up
);
1157 port
->type
= PORT_UNKNOWN
;
1160 port
->type
= PORT_16550
;
1163 autoconfig_16550a(up
);
1167 #ifdef CONFIG_SERIAL_8250_RSA
1169 * Only probe for RSA ports if we got the region.
1171 if (port
->type
== PORT_16550A
&& probeflags
& PROBE_RSA
) {
1174 for (i
= 0 ; i
< probe_rsa_count
; ++i
) {
1175 if (probe_rsa
[i
] == port
->iobase
&& __enable_rsa(up
)) {
1176 port
->type
= PORT_RSA
;
1183 serial_out(up
, UART_LCR
, save_lcr
);
1185 port
->fifosize
= uart_config
[up
->port
.type
].fifo_size
;
1186 old_capabilities
= up
->capabilities
;
1187 up
->capabilities
= uart_config
[port
->type
].flags
;
1188 up
->tx_loadsz
= uart_config
[port
->type
].tx_loadsz
;
1190 if (port
->type
== PORT_UNKNOWN
)
1196 #ifdef CONFIG_SERIAL_8250_RSA
1197 if (port
->type
== PORT_RSA
)
1198 serial_out(up
, UART_RSA_FRR
, 0);
1200 serial_out(up
, UART_MCR
, save_mcr
);
1201 serial8250_clear_fifos(up
);
1202 serial_in(up
, UART_RX
);
1203 if (up
->capabilities
& UART_CAP_UUE
)
1204 serial_out(up
, UART_IER
, UART_IER_UUE
);
1206 serial_out(up
, UART_IER
, 0);
1209 spin_unlock_irqrestore(&port
->lock
, flags
);
1210 if (up
->capabilities
!= old_capabilities
) {
1212 "ttyS%d: detected caps %08x should be %08x\n",
1213 serial_index(port
), old_capabilities
,
1217 DEBUG_AUTOCONF("iir=%d ", scratch
);
1218 DEBUG_AUTOCONF("type=%s\n", uart_config
[port
->type
].name
);
1221 static void autoconfig_irq(struct uart_8250_port
*up
)
1223 struct uart_port
*port
= &up
->port
;
1224 unsigned char save_mcr
, save_ier
;
1225 unsigned char save_ICP
= 0;
1226 unsigned int ICP
= 0;
1230 if (port
->flags
& UPF_FOURPORT
) {
1231 ICP
= (port
->iobase
& 0xfe0) | 0x1f;
1232 save_ICP
= inb_p(ICP
);
1237 /* forget possible initially masked and pending IRQ */
1238 probe_irq_off(probe_irq_on());
1239 save_mcr
= serial_in(up
, UART_MCR
);
1240 save_ier
= serial_in(up
, UART_IER
);
1241 serial_out(up
, UART_MCR
, UART_MCR_OUT1
| UART_MCR_OUT2
);
1243 irqs
= probe_irq_on();
1244 serial_out(up
, UART_MCR
, 0);
1246 if (port
->flags
& UPF_FOURPORT
) {
1247 serial_out(up
, UART_MCR
,
1248 UART_MCR_DTR
| UART_MCR_RTS
);
1250 serial_out(up
, UART_MCR
,
1251 UART_MCR_DTR
| UART_MCR_RTS
| UART_MCR_OUT2
);
1253 serial_out(up
, UART_IER
, 0x0f); /* enable all intrs */
1254 serial_in(up
, UART_LSR
);
1255 serial_in(up
, UART_RX
);
1256 serial_in(up
, UART_IIR
);
1257 serial_in(up
, UART_MSR
);
1258 serial_out(up
, UART_TX
, 0xFF);
1260 irq
= probe_irq_off(irqs
);
1262 serial_out(up
, UART_MCR
, save_mcr
);
1263 serial_out(up
, UART_IER
, save_ier
);
1265 if (port
->flags
& UPF_FOURPORT
)
1266 outb_p(save_ICP
, ICP
);
1268 port
->irq
= (irq
> 0) ? irq
: 0;
1271 static inline void __stop_tx(struct uart_8250_port
*p
)
1273 if (p
->ier
& UART_IER_THRI
) {
1274 p
->ier
&= ~UART_IER_THRI
;
1275 serial_out(p
, UART_IER
, p
->ier
);
1279 static void serial8250_stop_tx(struct uart_port
*port
)
1281 struct uart_8250_port
*up
= up_to_u8250p(port
);
1286 * We really want to stop the transmitter from sending.
1288 if (port
->type
== PORT_16C950
) {
1289 up
->acr
|= UART_ACR_TXDIS
;
1290 serial_icr_write(up
, UART_ACR
, up
->acr
);
1294 static void serial8250_start_tx(struct uart_port
*port
)
1296 struct uart_8250_port
*up
= up_to_u8250p(port
);
1298 if (up
->dma
&& !serial8250_tx_dma(up
)) {
1300 } else if (!(up
->ier
& UART_IER_THRI
)) {
1301 up
->ier
|= UART_IER_THRI
;
1302 serial_port_out(port
, UART_IER
, up
->ier
);
1304 if (up
->bugs
& UART_BUG_TXEN
) {
1306 lsr
= serial_in(up
, UART_LSR
);
1307 up
->lsr_saved_flags
|= lsr
& LSR_SAVE_FLAGS
;
1308 if (lsr
& UART_LSR_TEMT
)
1309 serial8250_tx_chars(up
);
1314 * Re-enable the transmitter if we disabled it.
1316 if (port
->type
== PORT_16C950
&& up
->acr
& UART_ACR_TXDIS
) {
1317 up
->acr
&= ~UART_ACR_TXDIS
;
1318 serial_icr_write(up
, UART_ACR
, up
->acr
);
1322 static void serial8250_throttle(struct uart_port
*port
)
1324 port
->throttle(port
);
1327 static void serial8250_unthrottle(struct uart_port
*port
)
1329 port
->unthrottle(port
);
1332 static void serial8250_stop_rx(struct uart_port
*port
)
1334 struct uart_8250_port
*up
= up_to_u8250p(port
);
1336 up
->ier
&= ~UART_IER_RLSI
;
1337 up
->port
.read_status_mask
&= ~UART_LSR_DR
;
1338 serial_port_out(port
, UART_IER
, up
->ier
);
1341 static void serial8250_enable_ms(struct uart_port
*port
)
1343 struct uart_8250_port
*up
= up_to_u8250p(port
);
1345 /* no MSR capabilities */
1346 if (up
->bugs
& UART_BUG_NOMSR
)
1349 up
->ier
|= UART_IER_MSI
;
1350 serial_port_out(port
, UART_IER
, up
->ier
);
1354 * serial8250_rx_chars: processes according to the passed in LSR
1355 * value, and returns the remaining LSR bits not handled
1356 * by this Rx routine.
1359 serial8250_rx_chars(struct uart_8250_port
*up
, unsigned char lsr
)
1361 struct uart_port
*port
= &up
->port
;
1363 int max_count
= 256;
1367 if (likely(lsr
& UART_LSR_DR
))
1368 ch
= serial_in(up
, UART_RX
);
1371 * Intel 82571 has a Serial Over Lan device that will
1372 * set UART_LSR_BI without setting UART_LSR_DR when
1373 * it receives a break. To avoid reading from the
1374 * receive buffer without UART_LSR_DR bit set, we
1375 * just force the read character to be 0
1382 lsr
|= up
->lsr_saved_flags
;
1383 up
->lsr_saved_flags
= 0;
1385 if (unlikely(lsr
& UART_LSR_BRK_ERROR_BITS
)) {
1386 if (lsr
& UART_LSR_BI
) {
1387 lsr
&= ~(UART_LSR_FE
| UART_LSR_PE
);
1390 * We do the SysRQ and SAK checking
1391 * here because otherwise the break
1392 * may get masked by ignore_status_mask
1393 * or read_status_mask.
1395 if (uart_handle_break(port
))
1397 } else if (lsr
& UART_LSR_PE
)
1398 port
->icount
.parity
++;
1399 else if (lsr
& UART_LSR_FE
)
1400 port
->icount
.frame
++;
1401 if (lsr
& UART_LSR_OE
)
1402 port
->icount
.overrun
++;
1405 * Mask off conditions which should be ignored.
1407 lsr
&= port
->read_status_mask
;
1409 if (lsr
& UART_LSR_BI
) {
1410 DEBUG_INTR("handling break....");
1412 } else if (lsr
& UART_LSR_PE
)
1414 else if (lsr
& UART_LSR_FE
)
1417 if (uart_handle_sysrq_char(port
, ch
))
1420 uart_insert_char(port
, lsr
, UART_LSR_OE
, ch
, flag
);
1423 lsr
= serial_in(up
, UART_LSR
);
1424 } while ((lsr
& (UART_LSR_DR
| UART_LSR_BI
)) && (max_count
-- > 0));
1425 spin_unlock(&port
->lock
);
1426 tty_flip_buffer_push(&port
->state
->port
);
1427 spin_lock(&port
->lock
);
1430 EXPORT_SYMBOL_GPL(serial8250_rx_chars
);
1432 void serial8250_tx_chars(struct uart_8250_port
*up
)
1434 struct uart_port
*port
= &up
->port
;
1435 struct circ_buf
*xmit
= &port
->state
->xmit
;
1439 serial_out(up
, UART_TX
, port
->x_char
);
1444 if (uart_tx_stopped(port
)) {
1445 serial8250_stop_tx(port
);
1448 if (uart_circ_empty(xmit
)) {
1453 count
= up
->tx_loadsz
;
1455 serial_out(up
, UART_TX
, xmit
->buf
[xmit
->tail
]);
1456 xmit
->tail
= (xmit
->tail
+ 1) & (UART_XMIT_SIZE
- 1);
1458 if (uart_circ_empty(xmit
))
1460 if (up
->capabilities
& UART_CAP_HFIFO
) {
1461 if ((serial_port_in(port
, UART_LSR
) & BOTH_EMPTY
) !=
1465 } while (--count
> 0);
1467 if (uart_circ_chars_pending(xmit
) < WAKEUP_CHARS
)
1468 uart_write_wakeup(port
);
1470 DEBUG_INTR("THRE...");
1472 if (uart_circ_empty(xmit
))
1475 EXPORT_SYMBOL_GPL(serial8250_tx_chars
);
1477 /* Caller holds uart port lock */
1478 unsigned int serial8250_modem_status(struct uart_8250_port
*up
)
1480 struct uart_port
*port
= &up
->port
;
1481 unsigned int status
= serial_in(up
, UART_MSR
);
1483 status
|= up
->msr_saved_flags
;
1484 up
->msr_saved_flags
= 0;
1485 if (status
& UART_MSR_ANY_DELTA
&& up
->ier
& UART_IER_MSI
&&
1486 port
->state
!= NULL
) {
1487 if (status
& UART_MSR_TERI
)
1489 if (status
& UART_MSR_DDSR
)
1491 if (status
& UART_MSR_DDCD
)
1492 uart_handle_dcd_change(port
, status
& UART_MSR_DCD
);
1493 if (status
& UART_MSR_DCTS
)
1494 uart_handle_cts_change(port
, status
& UART_MSR_CTS
);
1496 wake_up_interruptible(&port
->state
->port
.delta_msr_wait
);
1501 EXPORT_SYMBOL_GPL(serial8250_modem_status
);
1504 * This handles the interrupt from one port.
1506 int serial8250_handle_irq(struct uart_port
*port
, unsigned int iir
)
1508 unsigned char status
;
1509 unsigned long flags
;
1510 struct uart_8250_port
*up
= up_to_u8250p(port
);
1513 if (iir
& UART_IIR_NO_INT
)
1516 spin_lock_irqsave(&port
->lock
, flags
);
1518 status
= serial_port_in(port
, UART_LSR
);
1520 DEBUG_INTR("status = %x...", status
);
1522 if (status
& (UART_LSR_DR
| UART_LSR_BI
)) {
1524 dma_err
= serial8250_rx_dma(up
, iir
);
1526 if (!up
->dma
|| dma_err
)
1527 status
= serial8250_rx_chars(up
, status
);
1529 serial8250_modem_status(up
);
1530 if (!up
->dma
&& (status
& UART_LSR_THRE
))
1531 serial8250_tx_chars(up
);
1533 spin_unlock_irqrestore(&port
->lock
, flags
);
1536 EXPORT_SYMBOL_GPL(serial8250_handle_irq
);
1538 static int serial8250_default_handle_irq(struct uart_port
*port
)
1540 unsigned int iir
= serial_port_in(port
, UART_IIR
);
1542 return serial8250_handle_irq(port
, iir
);
1546 * These Exar UARTs have an extra interrupt indicator that could
1547 * fire for a few unimplemented interrupts. One of which is a
1548 * wakeup event when coming out of sleep. Put this here just
1549 * to be on the safe side that these interrupts don't go unhandled.
1551 static int exar_handle_irq(struct uart_port
*port
)
1553 unsigned char int0
, int1
, int2
, int3
;
1554 unsigned int iir
= serial_port_in(port
, UART_IIR
);
1557 ret
= serial8250_handle_irq(port
, iir
);
1559 if ((port
->type
== PORT_XR17V35X
) ||
1560 (port
->type
== PORT_XR17D15X
)) {
1561 int0
= serial_port_in(port
, 0x80);
1562 int1
= serial_port_in(port
, 0x81);
1563 int2
= serial_port_in(port
, 0x82);
1564 int3
= serial_port_in(port
, 0x83);
1571 * This is the serial driver's interrupt routine.
1573 * Arjan thinks the old way was overly complex, so it got simplified.
1574 * Alan disagrees, saying that need the complexity to handle the weird
1575 * nature of ISA shared interrupts. (This is a special exception.)
1577 * In order to handle ISA shared interrupts properly, we need to check
1578 * that all ports have been serviced, and therefore the ISA interrupt
1579 * line has been de-asserted.
1581 * This means we need to loop through all ports. checking that they
1582 * don't have an interrupt pending.
1584 static irqreturn_t
serial8250_interrupt(int irq
, void *dev_id
)
1586 struct irq_info
*i
= dev_id
;
1587 struct list_head
*l
, *end
= NULL
;
1588 int pass_counter
= 0, handled
= 0;
1590 DEBUG_INTR("serial8250_interrupt(%d)...", irq
);
1592 spin_lock(&i
->lock
);
1596 struct uart_8250_port
*up
;
1597 struct uart_port
*port
;
1599 up
= list_entry(l
, struct uart_8250_port
, list
);
1602 if (port
->handle_irq(port
)) {
1605 } else if (end
== NULL
)
1610 if (l
== i
->head
&& pass_counter
++ > PASS_LIMIT
) {
1611 /* If we hit this, we're dead. */
1612 printk_ratelimited(KERN_ERR
1613 "serial8250: too much work for irq%d\n", irq
);
1618 spin_unlock(&i
->lock
);
1620 DEBUG_INTR("end.\n");
1622 return IRQ_RETVAL(handled
);
1626 * To support ISA shared interrupts, we need to have one interrupt
1627 * handler that ensures that the IRQ line has been deasserted
1628 * before returning. Failing to do this will result in the IRQ
1629 * line being stuck active, and, since ISA irqs are edge triggered,
1630 * no more IRQs will be seen.
1632 static void serial_do_unlink(struct irq_info
*i
, struct uart_8250_port
*up
)
1634 spin_lock_irq(&i
->lock
);
1636 if (!list_empty(i
->head
)) {
1637 if (i
->head
== &up
->list
)
1638 i
->head
= i
->head
->next
;
1639 list_del(&up
->list
);
1641 BUG_ON(i
->head
!= &up
->list
);
1644 spin_unlock_irq(&i
->lock
);
1645 /* List empty so throw away the hash node */
1646 if (i
->head
== NULL
) {
1647 hlist_del(&i
->node
);
1652 static int serial_link_irq_chain(struct uart_8250_port
*up
)
1654 struct hlist_head
*h
;
1655 struct hlist_node
*n
;
1657 int ret
, irq_flags
= up
->port
.flags
& UPF_SHARE_IRQ
? IRQF_SHARED
: 0;
1659 mutex_lock(&hash_mutex
);
1661 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
1663 hlist_for_each(n
, h
) {
1664 i
= hlist_entry(n
, struct irq_info
, node
);
1665 if (i
->irq
== up
->port
.irq
)
1670 i
= kzalloc(sizeof(struct irq_info
), GFP_KERNEL
);
1672 mutex_unlock(&hash_mutex
);
1675 spin_lock_init(&i
->lock
);
1676 i
->irq
= up
->port
.irq
;
1677 hlist_add_head(&i
->node
, h
);
1679 mutex_unlock(&hash_mutex
);
1681 spin_lock_irq(&i
->lock
);
1684 list_add(&up
->list
, i
->head
);
1685 spin_unlock_irq(&i
->lock
);
1689 INIT_LIST_HEAD(&up
->list
);
1690 i
->head
= &up
->list
;
1691 spin_unlock_irq(&i
->lock
);
1692 irq_flags
|= up
->port
.irqflags
;
1693 ret
= request_irq(up
->port
.irq
, serial8250_interrupt
,
1694 irq_flags
, "serial", i
);
1696 serial_do_unlink(i
, up
);
1702 static void serial_unlink_irq_chain(struct uart_8250_port
*up
)
1705 * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
1706 * but no, we are not going to take a patch that assigns NULL below.
1709 struct hlist_node
*n
;
1710 struct hlist_head
*h
;
1712 mutex_lock(&hash_mutex
);
1714 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
1716 hlist_for_each(n
, h
) {
1717 i
= hlist_entry(n
, struct irq_info
, node
);
1718 if (i
->irq
== up
->port
.irq
)
1723 BUG_ON(i
->head
== NULL
);
1725 if (list_empty(i
->head
))
1726 free_irq(up
->port
.irq
, i
);
1728 serial_do_unlink(i
, up
);
1729 mutex_unlock(&hash_mutex
);
1733 * This function is used to handle ports that do not have an
1734 * interrupt. This doesn't work very well for 16450's, but gives
1735 * barely passable results for a 16550A. (Although at the expense
1736 * of much CPU overhead).
1738 static void serial8250_timeout(unsigned long data
)
1740 struct uart_8250_port
*up
= (struct uart_8250_port
*)data
;
1742 up
->port
.handle_irq(&up
->port
);
1743 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(&up
->port
));
1746 static void serial8250_backup_timeout(unsigned long data
)
1748 struct uart_8250_port
*up
= (struct uart_8250_port
*)data
;
1749 unsigned int iir
, ier
= 0, lsr
;
1750 unsigned long flags
;
1752 spin_lock_irqsave(&up
->port
.lock
, flags
);
1755 * Must disable interrupts or else we risk racing with the interrupt
1759 ier
= serial_in(up
, UART_IER
);
1760 serial_out(up
, UART_IER
, 0);
1763 iir
= serial_in(up
, UART_IIR
);
1766 * This should be a safe test for anyone who doesn't trust the
1767 * IIR bits on their UART, but it's specifically designed for
1768 * the "Diva" UART used on the management processor on many HP
1769 * ia64 and parisc boxes.
1771 lsr
= serial_in(up
, UART_LSR
);
1772 up
->lsr_saved_flags
|= lsr
& LSR_SAVE_FLAGS
;
1773 if ((iir
& UART_IIR_NO_INT
) && (up
->ier
& UART_IER_THRI
) &&
1774 (!uart_circ_empty(&up
->port
.state
->xmit
) || up
->port
.x_char
) &&
1775 (lsr
& UART_LSR_THRE
)) {
1776 iir
&= ~(UART_IIR_ID
| UART_IIR_NO_INT
);
1777 iir
|= UART_IIR_THRI
;
1780 if (!(iir
& UART_IIR_NO_INT
))
1781 serial8250_tx_chars(up
);
1784 serial_out(up
, UART_IER
, ier
);
1786 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
1788 /* Standard timer interval plus 0.2s to keep the port running */
1789 mod_timer(&up
->timer
,
1790 jiffies
+ uart_poll_timeout(&up
->port
) + HZ
/ 5);
1793 static unsigned int serial8250_tx_empty(struct uart_port
*port
)
1795 struct uart_8250_port
*up
= up_to_u8250p(port
);
1796 unsigned long flags
;
1799 spin_lock_irqsave(&port
->lock
, flags
);
1800 lsr
= serial_port_in(port
, UART_LSR
);
1801 up
->lsr_saved_flags
|= lsr
& LSR_SAVE_FLAGS
;
1802 spin_unlock_irqrestore(&port
->lock
, flags
);
1804 return (lsr
& BOTH_EMPTY
) == BOTH_EMPTY
? TIOCSER_TEMT
: 0;
1807 static unsigned int serial8250_get_mctrl(struct uart_port
*port
)
1809 struct uart_8250_port
*up
= up_to_u8250p(port
);
1810 unsigned int status
;
1813 status
= serial8250_modem_status(up
);
1816 if (status
& UART_MSR_DCD
)
1818 if (status
& UART_MSR_RI
)
1820 if (status
& UART_MSR_DSR
)
1822 if (status
& UART_MSR_CTS
)
1827 static void serial8250_set_mctrl(struct uart_port
*port
, unsigned int mctrl
)
1829 struct uart_8250_port
*up
= up_to_u8250p(port
);
1830 unsigned char mcr
= 0;
1832 if (mctrl
& TIOCM_RTS
)
1833 mcr
|= UART_MCR_RTS
;
1834 if (mctrl
& TIOCM_DTR
)
1835 mcr
|= UART_MCR_DTR
;
1836 if (mctrl
& TIOCM_OUT1
)
1837 mcr
|= UART_MCR_OUT1
;
1838 if (mctrl
& TIOCM_OUT2
)
1839 mcr
|= UART_MCR_OUT2
;
1840 if (mctrl
& TIOCM_LOOP
)
1841 mcr
|= UART_MCR_LOOP
;
1843 mcr
= (mcr
& up
->mcr_mask
) | up
->mcr_force
| up
->mcr
;
1845 serial_port_out(port
, UART_MCR
, mcr
);
1848 static void serial8250_break_ctl(struct uart_port
*port
, int break_state
)
1850 struct uart_8250_port
*up
= up_to_u8250p(port
);
1851 unsigned long flags
;
1853 spin_lock_irqsave(&port
->lock
, flags
);
1854 if (break_state
== -1)
1855 up
->lcr
|= UART_LCR_SBC
;
1857 up
->lcr
&= ~UART_LCR_SBC
;
1858 serial_port_out(port
, UART_LCR
, up
->lcr
);
1859 spin_unlock_irqrestore(&port
->lock
, flags
);
1863 * Wait for transmitter & holding register to empty
1865 static void wait_for_xmitr(struct uart_8250_port
*up
, int bits
)
1867 unsigned int status
, tmout
= 10000;
1869 /* Wait up to 10ms for the character(s) to be sent. */
1871 status
= serial_in(up
, UART_LSR
);
1873 up
->lsr_saved_flags
|= status
& LSR_SAVE_FLAGS
;
1875 if ((status
& bits
) == bits
)
1882 /* Wait up to 1s for flow control if necessary */
1883 if (up
->port
.flags
& UPF_CONS_FLOW
) {
1885 for (tmout
= 1000000; tmout
; tmout
--) {
1886 unsigned int msr
= serial_in(up
, UART_MSR
);
1887 up
->msr_saved_flags
|= msr
& MSR_SAVE_FLAGS
;
1888 if (msr
& UART_MSR_CTS
)
1891 touch_nmi_watchdog();
1896 #ifdef CONFIG_CONSOLE_POLL
1898 * Console polling routines for writing and reading from the uart while
1899 * in an interrupt or debug context.
1902 static int serial8250_get_poll_char(struct uart_port
*port
)
1904 unsigned char lsr
= serial_port_in(port
, UART_LSR
);
1906 if (!(lsr
& UART_LSR_DR
))
1907 return NO_POLL_CHAR
;
1909 return serial_port_in(port
, UART_RX
);
1913 static void serial8250_put_poll_char(struct uart_port
*port
,
1917 struct uart_8250_port
*up
= up_to_u8250p(port
);
1920 * First save the IER then disable the interrupts
1922 ier
= serial_port_in(port
, UART_IER
);
1923 if (up
->capabilities
& UART_CAP_UUE
)
1924 serial_port_out(port
, UART_IER
, UART_IER_UUE
);
1926 serial_port_out(port
, UART_IER
, 0);
1928 wait_for_xmitr(up
, BOTH_EMPTY
);
1930 * Send the character out.
1932 serial_port_out(port
, UART_TX
, c
);
1935 * Finally, wait for transmitter to become empty
1936 * and restore the IER
1938 wait_for_xmitr(up
, BOTH_EMPTY
);
1939 serial_port_out(port
, UART_IER
, ier
);
1942 #endif /* CONFIG_CONSOLE_POLL */
1944 int serial8250_do_startup(struct uart_port
*port
)
1946 struct uart_8250_port
*up
= up_to_u8250p(port
);
1947 unsigned long flags
;
1948 unsigned char lsr
, iir
;
1951 if (port
->type
== PORT_8250_CIR
)
1954 if (!port
->fifosize
)
1955 port
->fifosize
= uart_config
[port
->type
].fifo_size
;
1957 up
->tx_loadsz
= uart_config
[port
->type
].tx_loadsz
;
1958 if (!up
->capabilities
)
1959 up
->capabilities
= uart_config
[port
->type
].flags
;
1962 if (port
->iotype
!= up
->cur_iotype
)
1963 set_io_from_upio(port
);
1965 if (port
->type
== PORT_16C950
) {
1966 /* Wake up and initialize UART */
1968 serial_port_out(port
, UART_LCR
, UART_LCR_CONF_MODE_B
);
1969 serial_port_out(port
, UART_EFR
, UART_EFR_ECB
);
1970 serial_port_out(port
, UART_IER
, 0);
1971 serial_port_out(port
, UART_LCR
, 0);
1972 serial_icr_write(up
, UART_CSR
, 0); /* Reset the UART */
1973 serial_port_out(port
, UART_LCR
, UART_LCR_CONF_MODE_B
);
1974 serial_port_out(port
, UART_EFR
, UART_EFR_ECB
);
1975 serial_port_out(port
, UART_LCR
, 0);
1978 #ifdef CONFIG_SERIAL_8250_RSA
1980 * If this is an RSA port, see if we can kick it up to the
1981 * higher speed clock.
1987 * Clear the FIFO buffers and disable them.
1988 * (they will be reenabled in set_termios())
1990 serial8250_clear_fifos(up
);
1993 * Clear the interrupt registers.
1995 serial_port_in(port
, UART_LSR
);
1996 serial_port_in(port
, UART_RX
);
1997 serial_port_in(port
, UART_IIR
);
1998 serial_port_in(port
, UART_MSR
);
2001 * At this point, there's no way the LSR could still be 0xff;
2002 * if it is, then bail out, because there's likely no UART
2005 if (!(port
->flags
& UPF_BUGGY_UART
) &&
2006 (serial_port_in(port
, UART_LSR
) == 0xff)) {
2007 printk_ratelimited(KERN_INFO
"ttyS%d: LSR safety check engaged!\n",
2008 serial_index(port
));
2013 * For a XR16C850, we need to set the trigger levels
2015 if (port
->type
== PORT_16850
) {
2018 serial_out(up
, UART_LCR
, UART_LCR_CONF_MODE_B
);
2020 fctr
= serial_in(up
, UART_FCTR
) & ~(UART_FCTR_RX
|UART_FCTR_TX
);
2021 serial_port_out(port
, UART_FCTR
,
2022 fctr
| UART_FCTR_TRGD
| UART_FCTR_RX
);
2023 serial_port_out(port
, UART_TRG
, UART_TRG_96
);
2024 serial_port_out(port
, UART_FCTR
,
2025 fctr
| UART_FCTR_TRGD
| UART_FCTR_TX
);
2026 serial_port_out(port
, UART_TRG
, UART_TRG_96
);
2028 serial_port_out(port
, UART_LCR
, 0);
2034 * Test for UARTs that do not reassert THRE when the
2035 * transmitter is idle and the interrupt has already
2036 * been cleared. Real 16550s should always reassert
2037 * this interrupt whenever the transmitter is idle and
2038 * the interrupt is enabled. Delays are necessary to
2039 * allow register changes to become visible.
2041 spin_lock_irqsave(&port
->lock
, flags
);
2042 if (up
->port
.irqflags
& IRQF_SHARED
)
2043 disable_irq_nosync(port
->irq
);
2045 wait_for_xmitr(up
, UART_LSR_THRE
);
2046 serial_port_out_sync(port
, UART_IER
, UART_IER_THRI
);
2047 udelay(1); /* allow THRE to set */
2048 iir1
= serial_port_in(port
, UART_IIR
);
2049 serial_port_out(port
, UART_IER
, 0);
2050 serial_port_out_sync(port
, UART_IER
, UART_IER_THRI
);
2051 udelay(1); /* allow a working UART time to re-assert THRE */
2052 iir
= serial_port_in(port
, UART_IIR
);
2053 serial_port_out(port
, UART_IER
, 0);
2055 if (port
->irqflags
& IRQF_SHARED
)
2056 enable_irq(port
->irq
);
2057 spin_unlock_irqrestore(&port
->lock
, flags
);
2060 * If the interrupt is not reasserted, or we otherwise
2061 * don't trust the iir, setup a timer to kick the UART
2062 * on a regular basis.
2064 if ((!(iir1
& UART_IIR_NO_INT
) && (iir
& UART_IIR_NO_INT
)) ||
2065 up
->port
.flags
& UPF_BUG_THRE
) {
2066 up
->bugs
|= UART_BUG_THRE
;
2067 pr_debug("ttyS%d - using backup timer\n",
2068 serial_index(port
));
2073 * The above check will only give an accurate result the first time
2074 * the port is opened so this value needs to be preserved.
2076 if (up
->bugs
& UART_BUG_THRE
) {
2077 up
->timer
.function
= serial8250_backup_timeout
;
2078 up
->timer
.data
= (unsigned long)up
;
2079 mod_timer(&up
->timer
, jiffies
+
2080 uart_poll_timeout(port
) + HZ
/ 5);
2084 * If the "interrupt" for this port doesn't correspond with any
2085 * hardware interrupt, we use a timer-based system. The original
2086 * driver used to do this with IRQ0.
2089 up
->timer
.data
= (unsigned long)up
;
2090 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(port
));
2092 retval
= serial_link_irq_chain(up
);
2098 * Now, initialize the UART
2100 serial_port_out(port
, UART_LCR
, UART_LCR_WLEN8
);
2102 spin_lock_irqsave(&port
->lock
, flags
);
2103 if (up
->port
.flags
& UPF_FOURPORT
) {
2105 up
->port
.mctrl
|= TIOCM_OUT1
;
2108 * Most PC uarts need OUT2 raised to enable interrupts.
2111 up
->port
.mctrl
|= TIOCM_OUT2
;
2113 serial8250_set_mctrl(port
, port
->mctrl
);
2115 /* Serial over Lan (SoL) hack:
2116 Intel 8257x Gigabit ethernet chips have a
2117 16550 emulation, to be used for Serial Over Lan.
2118 Those chips take a longer time than a normal
2119 serial device to signalize that a transmission
2120 data was queued. Due to that, the above test generally
2121 fails. One solution would be to delay the reading of
2122 iir. However, this is not reliable, since the timeout
2123 is variable. So, let's just don't test if we receive
2124 TX irq. This way, we'll never enable UART_BUG_TXEN.
2126 if (skip_txen_test
|| up
->port
.flags
& UPF_NO_TXEN_TEST
)
2127 goto dont_test_tx_en
;
2130 * Do a quick test to see if we receive an
2131 * interrupt when we enable the TX irq.
2133 serial_port_out(port
, UART_IER
, UART_IER_THRI
);
2134 lsr
= serial_port_in(port
, UART_LSR
);
2135 iir
= serial_port_in(port
, UART_IIR
);
2136 serial_port_out(port
, UART_IER
, 0);
2138 if (lsr
& UART_LSR_TEMT
&& iir
& UART_IIR_NO_INT
) {
2139 if (!(up
->bugs
& UART_BUG_TXEN
)) {
2140 up
->bugs
|= UART_BUG_TXEN
;
2141 pr_debug("ttyS%d - enabling bad tx status workarounds\n",
2142 serial_index(port
));
2145 up
->bugs
&= ~UART_BUG_TXEN
;
2149 spin_unlock_irqrestore(&port
->lock
, flags
);
2152 * Clear the interrupt registers again for luck, and clear the
2153 * saved flags to avoid getting false values from polling
2154 * routines or the previous session.
2156 serial_port_in(port
, UART_LSR
);
2157 serial_port_in(port
, UART_RX
);
2158 serial_port_in(port
, UART_IIR
);
2159 serial_port_in(port
, UART_MSR
);
2160 up
->lsr_saved_flags
= 0;
2161 up
->msr_saved_flags
= 0;
2164 * Request DMA channels for both RX and TX.
2167 retval
= serial8250_request_dma(up
);
2169 pr_warn_ratelimited("ttyS%d - failed to request DMA\n",
2170 serial_index(port
));
2176 * Finally, enable interrupts. Note: Modem status interrupts
2177 * are set via set_termios(), which will be occurring imminently
2178 * anyway, so we don't enable them here.
2180 up
->ier
= UART_IER_RLSI
| UART_IER_RDI
;
2181 serial_port_out(port
, UART_IER
, up
->ier
);
2183 if (port
->flags
& UPF_FOURPORT
) {
2186 * Enable interrupts on the AST Fourport board
2188 icp
= (port
->iobase
& 0xfe0) | 0x01f;
2195 EXPORT_SYMBOL_GPL(serial8250_do_startup
);
2197 static int serial8250_startup(struct uart_port
*port
)
2200 return port
->startup(port
);
2201 return serial8250_do_startup(port
);
2204 void serial8250_do_shutdown(struct uart_port
*port
)
2206 struct uart_8250_port
*up
= up_to_u8250p(port
);
2207 unsigned long flags
;
2210 * Disable interrupts from this port
2213 serial_port_out(port
, UART_IER
, 0);
2216 serial8250_release_dma(up
);
2218 spin_lock_irqsave(&port
->lock
, flags
);
2219 if (port
->flags
& UPF_FOURPORT
) {
2220 /* reset interrupts on the AST Fourport board */
2221 inb((port
->iobase
& 0xfe0) | 0x1f);
2222 port
->mctrl
|= TIOCM_OUT1
;
2224 port
->mctrl
&= ~TIOCM_OUT2
;
2226 serial8250_set_mctrl(port
, port
->mctrl
);
2227 spin_unlock_irqrestore(&port
->lock
, flags
);
2230 * Disable break condition and FIFOs
2232 serial_port_out(port
, UART_LCR
,
2233 serial_port_in(port
, UART_LCR
) & ~UART_LCR_SBC
);
2234 serial8250_clear_fifos(up
);
2236 #ifdef CONFIG_SERIAL_8250_RSA
2238 * Reset the RSA board back to 115kbps compat mode.
2244 * Read data port to reset things, and then unlink from
2247 serial_port_in(port
, UART_RX
);
2249 del_timer_sync(&up
->timer
);
2250 up
->timer
.function
= serial8250_timeout
;
2252 serial_unlink_irq_chain(up
);
2254 EXPORT_SYMBOL_GPL(serial8250_do_shutdown
);
2256 static void serial8250_shutdown(struct uart_port
*port
)
2259 port
->shutdown(port
);
2261 serial8250_do_shutdown(port
);
2264 static unsigned int serial8250_get_divisor(struct uart_port
*port
, unsigned int baud
)
2269 * Handle magic divisors for baud rates above baud_base on
2270 * SMSC SuperIO chips.
2272 if ((port
->flags
& UPF_MAGIC_MULTIPLIER
) &&
2273 baud
== (port
->uartclk
/4))
2275 else if ((port
->flags
& UPF_MAGIC_MULTIPLIER
) &&
2276 baud
== (port
->uartclk
/8))
2279 quot
= uart_get_divisor(port
, baud
);
2285 serial8250_do_set_termios(struct uart_port
*port
, struct ktermios
*termios
,
2286 struct ktermios
*old
)
2288 struct uart_8250_port
*up
= up_to_u8250p(port
);
2290 unsigned long flags
;
2291 unsigned int baud
, quot
;
2293 switch (termios
->c_cflag
& CSIZE
) {
2295 cval
= UART_LCR_WLEN5
;
2298 cval
= UART_LCR_WLEN6
;
2301 cval
= UART_LCR_WLEN7
;
2305 cval
= UART_LCR_WLEN8
;
2309 if (termios
->c_cflag
& CSTOPB
)
2310 cval
|= UART_LCR_STOP
;
2311 if (termios
->c_cflag
& PARENB
) {
2312 cval
|= UART_LCR_PARITY
;
2313 if (up
->bugs
& UART_BUG_PARITY
)
2314 up
->fifo_bug
= true;
2316 if (!(termios
->c_cflag
& PARODD
))
2317 cval
|= UART_LCR_EPAR
;
2319 if (termios
->c_cflag
& CMSPAR
)
2320 cval
|= UART_LCR_SPAR
;
2324 * Ask the core to calculate the divisor for us.
2326 baud
= uart_get_baud_rate(port
, termios
, old
,
2327 port
->uartclk
/ 16 / 0xffff,
2328 port
->uartclk
/ 16);
2329 quot
= serial8250_get_divisor(port
, baud
);
2332 * Oxford Semi 952 rev B workaround
2334 if (up
->bugs
& UART_BUG_QUOT
&& (quot
& 0xff) == 0)
2337 if (up
->capabilities
& UART_CAP_FIFO
&& port
->fifosize
> 1) {
2338 /* NOTE: If fifo_bug is not set, a user can set RX_trigger. */
2339 if ((baud
< 2400 && !up
->dma
) || up
->fifo_bug
) {
2340 up
->fcr
&= ~UART_FCR_TRIGGER_MASK
;
2341 up
->fcr
|= UART_FCR_TRIGGER_1
;
2346 * MCR-based auto flow control. When AFE is enabled, RTS will be
2347 * deasserted when the receive FIFO contains more characters than
2348 * the trigger, or the MCR RTS bit is cleared. In the case where
2349 * the remote UART is not using CTS auto flow control, we must
2350 * have sufficient FIFO entries for the latency of the remote
2351 * UART to respond. IOW, at least 32 bytes of FIFO.
2353 if (up
->capabilities
& UART_CAP_AFE
&& port
->fifosize
>= 32) {
2354 up
->mcr
&= ~UART_MCR_AFE
;
2355 if (termios
->c_cflag
& CRTSCTS
)
2356 up
->mcr
|= UART_MCR_AFE
;
2360 * Ok, we're now changing the port state. Do it with
2361 * interrupts disabled.
2363 spin_lock_irqsave(&port
->lock
, flags
);
2366 * Update the per-port timeout.
2368 uart_update_timeout(port
, termios
->c_cflag
, baud
);
2370 port
->read_status_mask
= UART_LSR_OE
| UART_LSR_THRE
| UART_LSR_DR
;
2371 if (termios
->c_iflag
& INPCK
)
2372 port
->read_status_mask
|= UART_LSR_FE
| UART_LSR_PE
;
2373 if (termios
->c_iflag
& (IGNBRK
| BRKINT
| PARMRK
))
2374 port
->read_status_mask
|= UART_LSR_BI
;
2377 * Characteres to ignore
2379 port
->ignore_status_mask
= 0;
2380 if (termios
->c_iflag
& IGNPAR
)
2381 port
->ignore_status_mask
|= UART_LSR_PE
| UART_LSR_FE
;
2382 if (termios
->c_iflag
& IGNBRK
) {
2383 port
->ignore_status_mask
|= UART_LSR_BI
;
2385 * If we're ignoring parity and break indicators,
2386 * ignore overruns too (for real raw support).
2388 if (termios
->c_iflag
& IGNPAR
)
2389 port
->ignore_status_mask
|= UART_LSR_OE
;
2393 * ignore all characters if CREAD is not set
2395 if ((termios
->c_cflag
& CREAD
) == 0)
2396 port
->ignore_status_mask
|= UART_LSR_DR
;
2399 * CTS flow control flag and modem status interrupts
2401 up
->ier
&= ~UART_IER_MSI
;
2402 if (!(up
->bugs
& UART_BUG_NOMSR
) &&
2403 UART_ENABLE_MS(&up
->port
, termios
->c_cflag
))
2404 up
->ier
|= UART_IER_MSI
;
2405 if (up
->capabilities
& UART_CAP_UUE
)
2406 up
->ier
|= UART_IER_UUE
;
2407 if (up
->capabilities
& UART_CAP_RTOIE
)
2408 up
->ier
|= UART_IER_RTOIE
;
2410 serial_port_out(port
, UART_IER
, up
->ier
);
2412 if (up
->capabilities
& UART_CAP_EFR
) {
2413 unsigned char efr
= 0;
2415 * TI16C752/Startech hardware flow control. FIXME:
2416 * - TI16C752 requires control thresholds to be set.
2417 * - UART_MCR_RTS is ineffective if auto-RTS mode is enabled.
2419 if (termios
->c_cflag
& CRTSCTS
)
2420 efr
|= UART_EFR_CTS
;
2422 serial_port_out(port
, UART_LCR
, UART_LCR_CONF_MODE_B
);
2423 if (port
->flags
& UPF_EXAR_EFR
)
2424 serial_port_out(port
, UART_XR_EFR
, efr
);
2426 serial_port_out(port
, UART_EFR
, efr
);
2429 /* Workaround to enable 115200 baud on OMAP1510 internal ports */
2430 if (is_omap1510_8250(up
)) {
2431 if (baud
== 115200) {
2433 serial_port_out(port
, UART_OMAP_OSC_12M_SEL
, 1);
2435 serial_port_out(port
, UART_OMAP_OSC_12M_SEL
, 0);
2439 * For NatSemi, switch to bank 2 not bank 1, to avoid resetting EXCR2,
2440 * otherwise just set DLAB
2442 if (up
->capabilities
& UART_NATSEMI
)
2443 serial_port_out(port
, UART_LCR
, 0xe0);
2445 serial_port_out(port
, UART_LCR
, cval
| UART_LCR_DLAB
);
2447 serial_dl_write(up
, quot
);
2450 * XR17V35x UARTs have an extra fractional divisor register (DLD)
2452 * We need to recalculate all of the registers, because DLM and DLL
2453 * are already rounded to a whole integer.
2455 * When recalculating we use a 32x clock instead of a 16x clock to
2456 * allow 1-bit for rounding in the fractional part.
2458 if (up
->port
.type
== PORT_XR17V35X
) {
2459 unsigned int baud_x32
= (port
->uartclk
* 2) / baud
;
2460 u16 quot
= baud_x32
/ 32;
2461 u8 quot_frac
= DIV_ROUND_CLOSEST(baud_x32
% 32, 2);
2463 serial_dl_write(up
, quot
);
2464 serial_port_out(port
, 0x2, quot_frac
& 0xf);
2468 * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
2469 * is written without DLAB set, this mode will be disabled.
2471 if (port
->type
== PORT_16750
)
2472 serial_port_out(port
, UART_FCR
, up
->fcr
);
2474 serial_port_out(port
, UART_LCR
, cval
); /* reset DLAB */
2475 up
->lcr
= cval
; /* Save LCR */
2476 if (port
->type
!= PORT_16750
) {
2477 /* emulated UARTs (Lucent Venus 167x) need two steps */
2478 if (up
->fcr
& UART_FCR_ENABLE_FIFO
)
2479 serial_port_out(port
, UART_FCR
, UART_FCR_ENABLE_FIFO
);
2480 serial_port_out(port
, UART_FCR
, up
->fcr
); /* set fcr */
2482 serial8250_set_mctrl(port
, port
->mctrl
);
2483 spin_unlock_irqrestore(&port
->lock
, flags
);
2484 /* Don't rewrite B0 */
2485 if (tty_termios_baud_rate(termios
))
2486 tty_termios_encode_baud_rate(termios
, baud
, baud
);
2488 EXPORT_SYMBOL(serial8250_do_set_termios
);
2491 serial8250_set_termios(struct uart_port
*port
, struct ktermios
*termios
,
2492 struct ktermios
*old
)
2494 if (port
->set_termios
)
2495 port
->set_termios(port
, termios
, old
);
2497 serial8250_do_set_termios(port
, termios
, old
);
2501 serial8250_set_ldisc(struct uart_port
*port
, int new)
2504 port
->flags
|= UPF_HARDPPS_CD
;
2505 serial8250_enable_ms(port
);
2507 port
->flags
&= ~UPF_HARDPPS_CD
;
2511 void serial8250_do_pm(struct uart_port
*port
, unsigned int state
,
2512 unsigned int oldstate
)
2514 struct uart_8250_port
*p
= up_to_u8250p(port
);
2516 serial8250_set_sleep(p
, state
!= 0);
2518 EXPORT_SYMBOL(serial8250_do_pm
);
2521 serial8250_pm(struct uart_port
*port
, unsigned int state
,
2522 unsigned int oldstate
)
2525 port
->pm(port
, state
, oldstate
);
2527 serial8250_do_pm(port
, state
, oldstate
);
2530 static unsigned int serial8250_port_size(struct uart_8250_port
*pt
)
2532 if (pt
->port
.iotype
== UPIO_AU
)
2534 if (is_omap1_8250(pt
))
2535 return 0x16 << pt
->port
.regshift
;
2537 return 8 << pt
->port
.regshift
;
2541 * Resource handling.
2543 static int serial8250_request_std_resource(struct uart_8250_port
*up
)
2545 unsigned int size
= serial8250_port_size(up
);
2546 struct uart_port
*port
= &up
->port
;
2549 switch (port
->iotype
) {
2557 if (!request_mem_region(port
->mapbase
, size
, "serial")) {
2562 if (port
->flags
& UPF_IOREMAP
) {
2563 port
->membase
= ioremap_nocache(port
->mapbase
, size
);
2564 if (!port
->membase
) {
2565 release_mem_region(port
->mapbase
, size
);
2573 if (!request_region(port
->iobase
, size
, "serial"))
2580 static void serial8250_release_std_resource(struct uart_8250_port
*up
)
2582 unsigned int size
= serial8250_port_size(up
);
2583 struct uart_port
*port
= &up
->port
;
2585 switch (port
->iotype
) {
2593 if (port
->flags
& UPF_IOREMAP
) {
2594 iounmap(port
->membase
);
2595 port
->membase
= NULL
;
2598 release_mem_region(port
->mapbase
, size
);
2603 release_region(port
->iobase
, size
);
2608 static int serial8250_request_rsa_resource(struct uart_8250_port
*up
)
2610 unsigned long start
= UART_RSA_BASE
<< up
->port
.regshift
;
2611 unsigned int size
= 8 << up
->port
.regshift
;
2612 struct uart_port
*port
= &up
->port
;
2615 switch (port
->iotype
) {
2618 start
+= port
->iobase
;
2619 if (request_region(start
, size
, "serial-rsa"))
2629 static void serial8250_release_rsa_resource(struct uart_8250_port
*up
)
2631 unsigned long offset
= UART_RSA_BASE
<< up
->port
.regshift
;
2632 unsigned int size
= 8 << up
->port
.regshift
;
2633 struct uart_port
*port
= &up
->port
;
2635 switch (port
->iotype
) {
2638 release_region(port
->iobase
+ offset
, size
);
2643 static void serial8250_release_port(struct uart_port
*port
)
2645 struct uart_8250_port
*up
= up_to_u8250p(port
);
2647 serial8250_release_std_resource(up
);
2648 if (port
->type
== PORT_RSA
)
2649 serial8250_release_rsa_resource(up
);
2652 static int serial8250_request_port(struct uart_port
*port
)
2654 struct uart_8250_port
*up
= up_to_u8250p(port
);
2657 if (port
->type
== PORT_8250_CIR
)
2660 ret
= serial8250_request_std_resource(up
);
2661 if (ret
== 0 && port
->type
== PORT_RSA
) {
2662 ret
= serial8250_request_rsa_resource(up
);
2664 serial8250_release_std_resource(up
);
2670 static int fcr_get_rxtrig_bytes(struct uart_8250_port
*up
)
2672 const struct serial8250_config
*conf_type
= &uart_config
[up
->port
.type
];
2673 unsigned char bytes
;
2675 bytes
= conf_type
->rxtrig_bytes
[UART_FCR_R_TRIG_BITS(up
->fcr
)];
2677 return bytes
? bytes
: -EOPNOTSUPP
;
2680 static int bytes_to_fcr_rxtrig(struct uart_8250_port
*up
, unsigned char bytes
)
2682 const struct serial8250_config
*conf_type
= &uart_config
[up
->port
.type
];
2685 if (!conf_type
->rxtrig_bytes
[UART_FCR_R_TRIG_BITS(UART_FCR_R_TRIG_00
)])
2688 for (i
= 1; i
< UART_FCR_R_TRIG_MAX_STATE
; i
++) {
2689 if (bytes
< conf_type
->rxtrig_bytes
[i
])
2690 /* Use the nearest lower value */
2691 return (--i
) << UART_FCR_R_TRIG_SHIFT
;
2694 return UART_FCR_R_TRIG_11
;
2697 static int do_get_rxtrig(struct tty_port
*port
)
2699 struct uart_state
*state
= container_of(port
, struct uart_state
, port
);
2700 struct uart_port
*uport
= state
->uart_port
;
2701 struct uart_8250_port
*up
=
2702 container_of(uport
, struct uart_8250_port
, port
);
2704 if (!(up
->capabilities
& UART_CAP_FIFO
) || uport
->fifosize
<= 1)
2707 return fcr_get_rxtrig_bytes(up
);
2710 static int do_serial8250_get_rxtrig(struct tty_port
*port
)
2714 mutex_lock(&port
->mutex
);
2715 rxtrig_bytes
= do_get_rxtrig(port
);
2716 mutex_unlock(&port
->mutex
);
2718 return rxtrig_bytes
;
2721 static ssize_t
serial8250_get_attr_rx_trig_bytes(struct device
*dev
,
2722 struct device_attribute
*attr
, char *buf
)
2724 struct tty_port
*port
= dev_get_drvdata(dev
);
2727 rxtrig_bytes
= do_serial8250_get_rxtrig(port
);
2728 if (rxtrig_bytes
< 0)
2729 return rxtrig_bytes
;
2731 return snprintf(buf
, PAGE_SIZE
, "%d\n", rxtrig_bytes
);
2734 static int do_set_rxtrig(struct tty_port
*port
, unsigned char bytes
)
2736 struct uart_state
*state
= container_of(port
, struct uart_state
, port
);
2737 struct uart_port
*uport
= state
->uart_port
;
2738 struct uart_8250_port
*up
=
2739 container_of(uport
, struct uart_8250_port
, port
);
2742 if (!(up
->capabilities
& UART_CAP_FIFO
) || uport
->fifosize
<= 1 ||
2746 rxtrig
= bytes_to_fcr_rxtrig(up
, bytes
);
2750 serial8250_clear_fifos(up
);
2751 up
->fcr
&= ~UART_FCR_TRIGGER_MASK
;
2752 up
->fcr
|= (unsigned char)rxtrig
;
2753 serial_out(up
, UART_FCR
, up
->fcr
);
2757 static int do_serial8250_set_rxtrig(struct tty_port
*port
, unsigned char bytes
)
2761 mutex_lock(&port
->mutex
);
2762 ret
= do_set_rxtrig(port
, bytes
);
2763 mutex_unlock(&port
->mutex
);
2768 static ssize_t
serial8250_set_attr_rx_trig_bytes(struct device
*dev
,
2769 struct device_attribute
*attr
, const char *buf
, size_t count
)
2771 struct tty_port
*port
= dev_get_drvdata(dev
);
2772 unsigned char bytes
;
2778 ret
= kstrtou8(buf
, 10, &bytes
);
2782 ret
= do_serial8250_set_rxtrig(port
, bytes
);
2789 static DEVICE_ATTR(rx_trig_bytes
, S_IRUSR
| S_IWUSR
| S_IRGRP
,
2790 serial8250_get_attr_rx_trig_bytes
,
2791 serial8250_set_attr_rx_trig_bytes
);
2793 static struct attribute
*serial8250_dev_attrs
[] = {
2794 &dev_attr_rx_trig_bytes
.attr
,
2798 static struct attribute_group serial8250_dev_attr_group
= {
2799 .attrs
= serial8250_dev_attrs
,
2802 static void register_dev_spec_attr_grp(struct uart_8250_port
*up
)
2804 const struct serial8250_config
*conf_type
= &uart_config
[up
->port
.type
];
2806 if (conf_type
->rxtrig_bytes
[0])
2807 up
->port
.attr_group
= &serial8250_dev_attr_group
;
2810 static void serial8250_config_port(struct uart_port
*port
, int flags
)
2812 struct uart_8250_port
*up
= up_to_u8250p(port
);
2813 int probeflags
= PROBE_ANY
;
2816 if (port
->type
== PORT_8250_CIR
)
2820 * Find the region that we can probe for. This in turn
2821 * tells us whether we can probe for the type of port.
2823 ret
= serial8250_request_std_resource(up
);
2827 ret
= serial8250_request_rsa_resource(up
);
2829 probeflags
&= ~PROBE_RSA
;
2831 if (port
->iotype
!= up
->cur_iotype
)
2832 set_io_from_upio(port
);
2834 if (flags
& UART_CONFIG_TYPE
)
2835 autoconfig(up
, probeflags
);
2837 /* if access method is AU, it is a 16550 with a quirk */
2838 if (port
->type
== PORT_16550A
&& port
->iotype
== UPIO_AU
)
2839 up
->bugs
|= UART_BUG_NOMSR
;
2841 /* HW bugs may trigger IRQ while IIR == NO_INT */
2842 if (port
->type
== PORT_TEGRA
)
2843 up
->bugs
|= UART_BUG_NOMSR
;
2845 if (port
->type
!= PORT_UNKNOWN
&& flags
& UART_CONFIG_IRQ
)
2848 if (port
->type
!= PORT_RSA
&& probeflags
& PROBE_RSA
)
2849 serial8250_release_rsa_resource(up
);
2850 if (port
->type
== PORT_UNKNOWN
)
2851 serial8250_release_std_resource(up
);
2853 /* Fixme: probably not the best place for this */
2854 if ((port
->type
== PORT_XR17V35X
) ||
2855 (port
->type
== PORT_XR17D15X
))
2856 port
->handle_irq
= exar_handle_irq
;
2858 register_dev_spec_attr_grp(up
);
2859 up
->fcr
= uart_config
[up
->port
.type
].fcr
;
2863 serial8250_verify_port(struct uart_port
*port
, struct serial_struct
*ser
)
2865 if (ser
->irq
>= nr_irqs
|| ser
->irq
< 0 ||
2866 ser
->baud_base
< 9600 || ser
->type
< PORT_UNKNOWN
||
2867 ser
->type
>= ARRAY_SIZE(uart_config
) || ser
->type
== PORT_CIRRUS
||
2868 ser
->type
== PORT_STARTECH
)
2873 static int serial8250_ioctl(struct uart_port
*port
, unsigned int cmd
,
2876 struct uart_8250_port
*up
=
2877 container_of(port
, struct uart_8250_port
, port
);
2879 struct serial_rs485 rs485_config
;
2881 if (!up
->rs485_config
)
2882 return -ENOIOCTLCMD
;
2886 if (copy_from_user(&rs485_config
, (void __user
*)arg
,
2887 sizeof(rs485_config
)))
2890 ret
= up
->rs485_config(up
, &rs485_config
);
2894 memcpy(&up
->rs485
, &rs485_config
, sizeof(rs485_config
));
2898 if (copy_to_user((void __user
*)arg
, &up
->rs485
,
2906 return -ENOIOCTLCMD
;
2910 serial8250_type(struct uart_port
*port
)
2912 int type
= port
->type
;
2914 if (type
>= ARRAY_SIZE(uart_config
))
2916 return uart_config
[type
].name
;
2919 static struct uart_ops serial8250_pops
= {
2920 .tx_empty
= serial8250_tx_empty
,
2921 .set_mctrl
= serial8250_set_mctrl
,
2922 .get_mctrl
= serial8250_get_mctrl
,
2923 .stop_tx
= serial8250_stop_tx
,
2924 .start_tx
= serial8250_start_tx
,
2925 .throttle
= serial8250_throttle
,
2926 .unthrottle
= serial8250_unthrottle
,
2927 .stop_rx
= serial8250_stop_rx
,
2928 .enable_ms
= serial8250_enable_ms
,
2929 .break_ctl
= serial8250_break_ctl
,
2930 .startup
= serial8250_startup
,
2931 .shutdown
= serial8250_shutdown
,
2932 .set_termios
= serial8250_set_termios
,
2933 .set_ldisc
= serial8250_set_ldisc
,
2934 .pm
= serial8250_pm
,
2935 .type
= serial8250_type
,
2936 .release_port
= serial8250_release_port
,
2937 .request_port
= serial8250_request_port
,
2938 .config_port
= serial8250_config_port
,
2939 .verify_port
= serial8250_verify_port
,
2940 .ioctl
= serial8250_ioctl
,
2941 #ifdef CONFIG_CONSOLE_POLL
2942 .poll_get_char
= serial8250_get_poll_char
,
2943 .poll_put_char
= serial8250_put_poll_char
,
2947 static struct uart_8250_port serial8250_ports
[UART_NR
];
2950 * serial8250_get_port - retrieve struct uart_8250_port
2951 * @line: serial line number
2953 * This function retrieves struct uart_8250_port for the specific line.
2954 * This struct *must* *not* be used to perform a 8250 or serial core operation
2955 * which is not accessible otherwise. Its only purpose is to make the struct
2956 * accessible to the runtime-pm callbacks for context suspend/restore.
2957 * The lock assumption made here is none because runtime-pm suspend/resume
2958 * callbacks should not be invoked if there is any operation performed on the
2961 struct uart_8250_port
*serial8250_get_port(int line
)
2963 return &serial8250_ports
[line
];
2965 EXPORT_SYMBOL_GPL(serial8250_get_port
);
2967 static void (*serial8250_isa_config
)(int port
, struct uart_port
*up
,
2968 unsigned short *capabilities
);
2970 void serial8250_set_isa_configurator(
2971 void (*v
)(int port
, struct uart_port
*up
, unsigned short *capabilities
))
2973 serial8250_isa_config
= v
;
2975 EXPORT_SYMBOL(serial8250_set_isa_configurator
);
2977 static void __init
serial8250_isa_init_ports(void)
2979 struct uart_8250_port
*up
;
2980 static int first
= 1;
2987 if (nr_uarts
> UART_NR
)
2990 for (i
= 0; i
< nr_uarts
; i
++) {
2991 struct uart_8250_port
*up
= &serial8250_ports
[i
];
2992 struct uart_port
*port
= &up
->port
;
2995 spin_lock_init(&port
->lock
);
2997 init_timer(&up
->timer
);
2998 up
->timer
.function
= serial8250_timeout
;
2999 up
->cur_iotype
= 0xFF;
3002 * ALPHA_KLUDGE_MCR needs to be killed.
3004 up
->mcr_mask
= ~ALPHA_KLUDGE_MCR
;
3005 up
->mcr_force
= ALPHA_KLUDGE_MCR
;
3007 port
->ops
= &serial8250_pops
;
3011 irqflag
= IRQF_SHARED
;
3013 for (i
= 0, up
= serial8250_ports
;
3014 i
< ARRAY_SIZE(old_serial_port
) && i
< nr_uarts
;
3016 struct uart_port
*port
= &up
->port
;
3018 port
->iobase
= old_serial_port
[i
].port
;
3019 port
->irq
= irq_canonicalize(old_serial_port
[i
].irq
);
3020 port
->irqflags
= old_serial_port
[i
].irqflags
;
3021 port
->uartclk
= old_serial_port
[i
].baud_base
* 16;
3022 port
->flags
= old_serial_port
[i
].flags
;
3023 port
->hub6
= old_serial_port
[i
].hub6
;
3024 port
->membase
= old_serial_port
[i
].iomem_base
;
3025 port
->iotype
= old_serial_port
[i
].io_type
;
3026 port
->regshift
= old_serial_port
[i
].iomem_reg_shift
;
3027 set_io_from_upio(port
);
3028 port
->irqflags
|= irqflag
;
3029 if (serial8250_isa_config
!= NULL
)
3030 serial8250_isa_config(i
, &up
->port
, &up
->capabilities
);
3036 serial8250_init_fixed_type_port(struct uart_8250_port
*up
, unsigned int type
)
3038 up
->port
.type
= type
;
3039 if (!up
->port
.fifosize
)
3040 up
->port
.fifosize
= uart_config
[type
].fifo_size
;
3042 up
->tx_loadsz
= uart_config
[type
].tx_loadsz
;
3043 if (!up
->capabilities
)
3044 up
->capabilities
= uart_config
[type
].flags
;
3048 serial8250_register_ports(struct uart_driver
*drv
, struct device
*dev
)
3052 for (i
= 0; i
< nr_uarts
; i
++) {
3053 struct uart_8250_port
*up
= &serial8250_ports
[i
];
3060 if (up
->port
.flags
& UPF_FIXED_TYPE
)
3061 serial8250_init_fixed_type_port(up
, up
->port
.type
);
3063 uart_add_one_port(drv
, &up
->port
);
3067 #ifdef CONFIG_SERIAL_8250_CONSOLE
3069 static void serial8250_console_putchar(struct uart_port
*port
, int ch
)
3071 struct uart_8250_port
*up
= up_to_u8250p(port
);
3073 wait_for_xmitr(up
, UART_LSR_THRE
);
3074 serial_port_out(port
, UART_TX
, ch
);
3078 * Print a string to the serial port trying not to disturb
3079 * any possible real use of the port...
3081 * The console_lock must be held when we get here.
3084 serial8250_console_write(struct console
*co
, const char *s
, unsigned int count
)
3086 struct uart_8250_port
*up
= &serial8250_ports
[co
->index
];
3087 struct uart_port
*port
= &up
->port
;
3088 unsigned long flags
;
3092 touch_nmi_watchdog();
3094 if (port
->sysrq
|| oops_in_progress
)
3095 locked
= spin_trylock_irqsave(&port
->lock
, flags
);
3097 spin_lock_irqsave(&port
->lock
, flags
);
3100 * First save the IER then disable the interrupts
3102 ier
= serial_port_in(port
, UART_IER
);
3104 if (up
->capabilities
& UART_CAP_UUE
)
3105 serial_port_out(port
, UART_IER
, UART_IER_UUE
);
3107 serial_port_out(port
, UART_IER
, 0);
3109 uart_console_write(port
, s
, count
, serial8250_console_putchar
);
3112 * Finally, wait for transmitter to become empty
3113 * and restore the IER
3115 wait_for_xmitr(up
, BOTH_EMPTY
);
3116 serial_port_out(port
, UART_IER
, ier
);
3119 * The receive handling will happen properly because the
3120 * receive ready bit will still be set; it is not cleared
3121 * on read. However, modem control will not, we must
3122 * call it if we have saved something in the saved flags
3123 * while processing with interrupts off.
3125 if (up
->msr_saved_flags
)
3126 serial8250_modem_status(up
);
3129 spin_unlock_irqrestore(&port
->lock
, flags
);
3132 static int __init
serial8250_console_setup(struct console
*co
, char *options
)
3134 struct uart_port
*port
;
3141 * Check whether an invalid uart number has been specified, and
3142 * if so, search for the first available port that does have
3145 if (co
->index
>= nr_uarts
)
3147 port
= &serial8250_ports
[co
->index
].port
;
3148 if (!port
->iobase
&& !port
->membase
)
3152 uart_parse_options(options
, &baud
, &parity
, &bits
, &flow
);
3154 return uart_set_options(port
, co
, baud
, parity
, bits
, flow
);
3157 static int serial8250_console_early_setup(void)
3159 return serial8250_find_port_for_earlycon();
3162 static struct console serial8250_console
= {
3164 .write
= serial8250_console_write
,
3165 .device
= uart_console_device
,
3166 .setup
= serial8250_console_setup
,
3167 .early_setup
= serial8250_console_early_setup
,
3168 .flags
= CON_PRINTBUFFER
| CON_ANYTIME
,
3170 .data
= &serial8250_reg
,
3173 static int __init
serial8250_console_init(void)
3175 serial8250_isa_init_ports();
3176 register_console(&serial8250_console
);
3179 console_initcall(serial8250_console_init
);
3181 int serial8250_find_port(struct uart_port
*p
)
3184 struct uart_port
*port
;
3186 for (line
= 0; line
< nr_uarts
; line
++) {
3187 port
= &serial8250_ports
[line
].port
;
3188 if (uart_match_port(p
, port
))
3194 #define SERIAL8250_CONSOLE &serial8250_console
3196 #define SERIAL8250_CONSOLE NULL
3199 static struct uart_driver serial8250_reg
= {
3200 .owner
= THIS_MODULE
,
3201 .driver_name
= "serial",
3205 .cons
= SERIAL8250_CONSOLE
,
3209 * early_serial_setup - early registration for 8250 ports
3211 * Setup an 8250 port structure prior to console initialisation. Use
3212 * after console initialisation will cause undefined behaviour.
3214 int __init
early_serial_setup(struct uart_port
*port
)
3216 struct uart_port
*p
;
3218 if (port
->line
>= ARRAY_SIZE(serial8250_ports
))
3221 serial8250_isa_init_ports();
3222 p
= &serial8250_ports
[port
->line
].port
;
3223 p
->iobase
= port
->iobase
;
3224 p
->membase
= port
->membase
;
3226 p
->irqflags
= port
->irqflags
;
3227 p
->uartclk
= port
->uartclk
;
3228 p
->fifosize
= port
->fifosize
;
3229 p
->regshift
= port
->regshift
;
3230 p
->iotype
= port
->iotype
;
3231 p
->flags
= port
->flags
;
3232 p
->mapbase
= port
->mapbase
;
3233 p
->private_data
= port
->private_data
;
3234 p
->type
= port
->type
;
3235 p
->line
= port
->line
;
3237 set_io_from_upio(p
);
3238 if (port
->serial_in
)
3239 p
->serial_in
= port
->serial_in
;
3240 if (port
->serial_out
)
3241 p
->serial_out
= port
->serial_out
;
3242 if (port
->handle_irq
)
3243 p
->handle_irq
= port
->handle_irq
;
3245 p
->handle_irq
= serial8250_default_handle_irq
;
3251 * serial8250_suspend_port - suspend one serial port
3252 * @line: serial line number
3254 * Suspend one serial port.
3256 void serial8250_suspend_port(int line
)
3258 uart_suspend_port(&serial8250_reg
, &serial8250_ports
[line
].port
);
3262 * serial8250_resume_port - resume one serial port
3263 * @line: serial line number
3265 * Resume one serial port.
3267 void serial8250_resume_port(int line
)
3269 struct uart_8250_port
*up
= &serial8250_ports
[line
];
3270 struct uart_port
*port
= &up
->port
;
3272 if (up
->capabilities
& UART_NATSEMI
) {
3273 /* Ensure it's still in high speed mode */
3274 serial_port_out(port
, UART_LCR
, 0xE0);
3276 ns16550a_goto_highspeed(up
);
3278 serial_port_out(port
, UART_LCR
, 0);
3279 port
->uartclk
= 921600*16;
3281 uart_resume_port(&serial8250_reg
, port
);
3285 * Register a set of serial devices attached to a platform device. The
3286 * list is terminated with a zero flags entry, which means we expect
3287 * all entries to have at least UPF_BOOT_AUTOCONF set.
3289 static int serial8250_probe(struct platform_device
*dev
)
3291 struct plat_serial8250_port
*p
= dev_get_platdata(&dev
->dev
);
3292 struct uart_8250_port uart
;
3293 int ret
, i
, irqflag
= 0;
3295 memset(&uart
, 0, sizeof(uart
));
3298 irqflag
= IRQF_SHARED
;
3300 for (i
= 0; p
&& p
->flags
!= 0; p
++, i
++) {
3301 uart
.port
.iobase
= p
->iobase
;
3302 uart
.port
.membase
= p
->membase
;
3303 uart
.port
.irq
= p
->irq
;
3304 uart
.port
.irqflags
= p
->irqflags
;
3305 uart
.port
.uartclk
= p
->uartclk
;
3306 uart
.port
.regshift
= p
->regshift
;
3307 uart
.port
.iotype
= p
->iotype
;
3308 uart
.port
.flags
= p
->flags
;
3309 uart
.port
.mapbase
= p
->mapbase
;
3310 uart
.port
.hub6
= p
->hub6
;
3311 uart
.port
.private_data
= p
->private_data
;
3312 uart
.port
.type
= p
->type
;
3313 uart
.port
.serial_in
= p
->serial_in
;
3314 uart
.port
.serial_out
= p
->serial_out
;
3315 uart
.port
.handle_irq
= p
->handle_irq
;
3316 uart
.port
.handle_break
= p
->handle_break
;
3317 uart
.port
.set_termios
= p
->set_termios
;
3318 uart
.port
.pm
= p
->pm
;
3319 uart
.port
.dev
= &dev
->dev
;
3320 uart
.port
.irqflags
|= irqflag
;
3321 ret
= serial8250_register_8250_port(&uart
);
3323 dev_err(&dev
->dev
, "unable to register port at index %d "
3324 "(IO%lx MEM%llx IRQ%d): %d\n", i
,
3325 p
->iobase
, (unsigned long long)p
->mapbase
,
3333 * Remove serial ports registered against a platform device.
3335 static int serial8250_remove(struct platform_device
*dev
)
3339 for (i
= 0; i
< nr_uarts
; i
++) {
3340 struct uart_8250_port
*up
= &serial8250_ports
[i
];
3342 if (up
->port
.dev
== &dev
->dev
)
3343 serial8250_unregister_port(i
);
3348 static int serial8250_suspend(struct platform_device
*dev
, pm_message_t state
)
3352 for (i
= 0; i
< UART_NR
; i
++) {
3353 struct uart_8250_port
*up
= &serial8250_ports
[i
];
3355 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
3356 uart_suspend_port(&serial8250_reg
, &up
->port
);
3362 static int serial8250_resume(struct platform_device
*dev
)
3366 for (i
= 0; i
< UART_NR
; i
++) {
3367 struct uart_8250_port
*up
= &serial8250_ports
[i
];
3369 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
3370 serial8250_resume_port(i
);
3376 static struct platform_driver serial8250_isa_driver
= {
3377 .probe
= serial8250_probe
,
3378 .remove
= serial8250_remove
,
3379 .suspend
= serial8250_suspend
,
3380 .resume
= serial8250_resume
,
3382 .name
= "serial8250",
3383 .owner
= THIS_MODULE
,
3388 * This "device" covers _all_ ISA 8250-compatible serial devices listed
3389 * in the table in include/asm/serial.h
3391 static struct platform_device
*serial8250_isa_devs
;
3394 * serial8250_register_8250_port and serial8250_unregister_port allows for
3395 * 16x50 serial ports to be configured at run-time, to support PCMCIA
3396 * modems and PCI multiport cards.
3398 static DEFINE_MUTEX(serial_mutex
);
3400 static struct uart_8250_port
*serial8250_find_match_or_unused(struct uart_port
*port
)
3405 * First, find a port entry which matches.
3407 for (i
= 0; i
< nr_uarts
; i
++)
3408 if (uart_match_port(&serial8250_ports
[i
].port
, port
))
3409 return &serial8250_ports
[i
];
3412 * We didn't find a matching entry, so look for the first
3413 * free entry. We look for one which hasn't been previously
3414 * used (indicated by zero iobase).
3416 for (i
= 0; i
< nr_uarts
; i
++)
3417 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
3418 serial8250_ports
[i
].port
.iobase
== 0)
3419 return &serial8250_ports
[i
];
3422 * That also failed. Last resort is to find any entry which
3423 * doesn't have a real port associated with it.
3425 for (i
= 0; i
< nr_uarts
; i
++)
3426 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
)
3427 return &serial8250_ports
[i
];
3433 * serial8250_register_8250_port - register a serial port
3434 * @up: serial port template
3436 * Configure the serial port specified by the request. If the
3437 * port exists and is in use, it is hung up and unregistered
3440 * The port is then probed and if necessary the IRQ is autodetected
3441 * If this fails an error is returned.
3443 * On success the port is ready to use and the line number is returned.
3445 int serial8250_register_8250_port(struct uart_8250_port
*up
)
3447 struct uart_8250_port
*uart
;
3450 if (up
->port
.uartclk
== 0)
3453 mutex_lock(&serial_mutex
);
3455 uart
= serial8250_find_match_or_unused(&up
->port
);
3456 if (uart
&& uart
->port
.type
!= PORT_8250_CIR
) {
3458 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
3460 uart
->port
.iobase
= up
->port
.iobase
;
3461 uart
->port
.membase
= up
->port
.membase
;
3462 uart
->port
.irq
= up
->port
.irq
;
3463 uart
->port
.irqflags
= up
->port
.irqflags
;
3464 uart
->port
.uartclk
= up
->port
.uartclk
;
3465 uart
->port
.fifosize
= up
->port
.fifosize
;
3466 uart
->port
.regshift
= up
->port
.regshift
;
3467 uart
->port
.iotype
= up
->port
.iotype
;
3468 uart
->port
.flags
= up
->port
.flags
| UPF_BOOT_AUTOCONF
;
3469 uart
->bugs
= up
->bugs
;
3470 uart
->port
.mapbase
= up
->port
.mapbase
;
3471 uart
->port
.private_data
= up
->port
.private_data
;
3472 uart
->port
.fifosize
= up
->port
.fifosize
;
3473 uart
->tx_loadsz
= up
->tx_loadsz
;
3474 uart
->capabilities
= up
->capabilities
;
3475 uart
->rs485_config
= up
->rs485_config
;
3476 uart
->rs485
= up
->rs485
;
3477 uart
->port
.throttle
= up
->port
.throttle
;
3478 uart
->port
.unthrottle
= up
->port
.unthrottle
;
3480 /* Take tx_loadsz from fifosize if it wasn't set separately */
3481 if (uart
->port
.fifosize
&& !uart
->tx_loadsz
)
3482 uart
->tx_loadsz
= uart
->port
.fifosize
;
3485 uart
->port
.dev
= up
->port
.dev
;
3487 if (up
->port
.flags
& UPF_FIXED_TYPE
)
3488 serial8250_init_fixed_type_port(uart
, up
->port
.type
);
3490 set_io_from_upio(&uart
->port
);
3491 /* Possibly override default I/O functions. */
3492 if (up
->port
.serial_in
)
3493 uart
->port
.serial_in
= up
->port
.serial_in
;
3494 if (up
->port
.serial_out
)
3495 uart
->port
.serial_out
= up
->port
.serial_out
;
3496 if (up
->port
.handle_irq
)
3497 uart
->port
.handle_irq
= up
->port
.handle_irq
;
3498 /* Possibly override set_termios call */
3499 if (up
->port
.set_termios
)
3500 uart
->port
.set_termios
= up
->port
.set_termios
;
3501 if (up
->port
.startup
)
3502 uart
->port
.startup
= up
->port
.startup
;
3503 if (up
->port
.shutdown
)
3504 uart
->port
.shutdown
= up
->port
.shutdown
;
3506 uart
->port
.pm
= up
->port
.pm
;
3507 if (up
->port
.handle_break
)
3508 uart
->port
.handle_break
= up
->port
.handle_break
;
3510 uart
->dl_read
= up
->dl_read
;
3512 uart
->dl_write
= up
->dl_write
;
3514 uart
->dma
= up
->dma
;
3516 if (serial8250_isa_config
!= NULL
)
3517 serial8250_isa_config(0, &uart
->port
,
3518 &uart
->capabilities
);
3520 ret
= uart_add_one_port(&serial8250_reg
, &uart
->port
);
3522 ret
= uart
->port
.line
;
3524 mutex_unlock(&serial_mutex
);
3528 EXPORT_SYMBOL(serial8250_register_8250_port
);
3531 * serial8250_unregister_port - remove a 16x50 serial port at runtime
3532 * @line: serial line number
3534 * Remove one serial port. This may not be called from interrupt
3535 * context. We hand the port back to the our control.
3537 void serial8250_unregister_port(int line
)
3539 struct uart_8250_port
*uart
= &serial8250_ports
[line
];
3541 mutex_lock(&serial_mutex
);
3542 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
3543 if (serial8250_isa_devs
) {
3544 uart
->port
.flags
&= ~UPF_BOOT_AUTOCONF
;
3545 uart
->port
.type
= PORT_UNKNOWN
;
3546 uart
->port
.dev
= &serial8250_isa_devs
->dev
;
3547 uart
->capabilities
= uart_config
[uart
->port
.type
].flags
;
3548 uart_add_one_port(&serial8250_reg
, &uart
->port
);
3550 uart
->port
.dev
= NULL
;
3552 mutex_unlock(&serial_mutex
);
3554 EXPORT_SYMBOL(serial8250_unregister_port
);
3556 static int __init
serial8250_init(void)
3560 serial8250_isa_init_ports();
3562 printk(KERN_INFO
"Serial: 8250/16550 driver, "
3563 "%d ports, IRQ sharing %sabled\n", nr_uarts
,
3564 share_irqs
? "en" : "dis");
3567 ret
= sunserial_register_minors(&serial8250_reg
, UART_NR
);
3569 serial8250_reg
.nr
= UART_NR
;
3570 ret
= uart_register_driver(&serial8250_reg
);
3575 ret
= serial8250_pnp_init();
3577 goto unreg_uart_drv
;
3579 serial8250_isa_devs
= platform_device_alloc("serial8250",
3580 PLAT8250_DEV_LEGACY
);
3581 if (!serial8250_isa_devs
) {
3586 ret
= platform_device_add(serial8250_isa_devs
);
3590 serial8250_register_ports(&serial8250_reg
, &serial8250_isa_devs
->dev
);
3592 ret
= platform_driver_register(&serial8250_isa_driver
);
3596 platform_device_del(serial8250_isa_devs
);
3598 platform_device_put(serial8250_isa_devs
);
3600 serial8250_pnp_exit();
3603 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
3605 uart_unregister_driver(&serial8250_reg
);
3611 static void __exit
serial8250_exit(void)
3613 struct platform_device
*isa_dev
= serial8250_isa_devs
;
3616 * This tells serial8250_unregister_port() not to re-register
3617 * the ports (thereby making serial8250_isa_driver permanently
3620 serial8250_isa_devs
= NULL
;
3622 platform_driver_unregister(&serial8250_isa_driver
);
3623 platform_device_unregister(isa_dev
);
3625 serial8250_pnp_exit();
3628 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
3630 uart_unregister_driver(&serial8250_reg
);
3634 module_init(serial8250_init
);
3635 module_exit(serial8250_exit
);
3637 EXPORT_SYMBOL(serial8250_suspend_port
);
3638 EXPORT_SYMBOL(serial8250_resume_port
);
3640 MODULE_LICENSE("GPL");
3641 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
3643 module_param(share_irqs
, uint
, 0644);
3644 MODULE_PARM_DESC(share_irqs
, "Share IRQs with other non-8250/16x50 devices"
3647 module_param(nr_uarts
, uint
, 0644);
3648 MODULE_PARM_DESC(nr_uarts
, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS
) ")");
3650 module_param(skip_txen_test
, uint
, 0644);
3651 MODULE_PARM_DESC(skip_txen_test
, "Skip checking for the TXEN bug at init time");
3653 #ifdef CONFIG_SERIAL_8250_RSA
3654 module_param_array(probe_rsa
, ulong
, &probe_rsa_count
, 0444);
3655 MODULE_PARM_DESC(probe_rsa
, "Probe I/O ports for RSA");
3657 MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR
);
3659 #ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
3661 /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
3662 * working as well for the module options so we don't break people. We
3663 * need to keep the names identical and the convenient macros will happily
3664 * refuse to let us do that by failing the build with redefinition errors
3665 * of global variables. So we stick them inside a dummy function to avoid
3666 * those conflicts. The options still get parsed, and the redefined
3667 * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
3669 * This is hacky. I'm sorry.
3671 static void __used
s8250_options(void)
3673 #undef MODULE_PARAM_PREFIX
3674 #define MODULE_PARAM_PREFIX "8250_core."
3676 module_param_cb(share_irqs
, ¶m_ops_uint
, &share_irqs
, 0644);
3677 module_param_cb(nr_uarts
, ¶m_ops_uint
, &nr_uarts
, 0644);
3678 module_param_cb(skip_txen_test
, ¶m_ops_uint
, &skip_txen_test
, 0644);
3679 #ifdef CONFIG_SERIAL_8250_RSA
3680 __module_param_call(MODULE_PARAM_PREFIX
, probe_rsa
,
3681 ¶m_array_ops
, .arr
= &__param_arr_probe_rsa
,
3686 MODULE_ALIAS("8250_core");