1 // SPDX-License-Identifier: GPL-2.0+
3 * Universal/legacy driver for 8250/16550-type serial ports
5 * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
7 * Copyright (C) 2001 Russell King.
9 * Supports: ISA-compatible 8250/16550 ports
10 * PNP 8250/16550 ports
11 * early_serial_setup() ports
12 * userspace-configurable "phantom" ports
13 * "serial8250" platform devices
14 * serial8250_register_8250_port() ports
17 #include <linux/module.h>
18 #include <linux/moduleparam.h>
19 #include <linux/ioport.h>
20 #include <linux/init.h>
21 #include <linux/console.h>
22 #include <linux/sysrq.h>
23 #include <linux/delay.h>
24 #include <linux/platform_device.h>
25 #include <linux/tty.h>
26 #include <linux/ratelimit.h>
27 #include <linux/tty_flip.h>
28 #include <linux/serial.h>
29 #include <linux/serial_8250.h>
30 #include <linux/nmi.h>
31 #include <linux/mutex.h>
32 #include <linux/slab.h>
33 #include <linux/uaccess.h>
34 #include <linux/pm_runtime.h>
37 #include <linux/sunserialcore.h>
46 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
47 * is unsafe when used on edge-triggered interrupts.
49 static unsigned int share_irqs
= SERIAL8250_SHARE_IRQS
;
51 static unsigned int nr_uarts
= CONFIG_SERIAL_8250_RUNTIME_UARTS
;
53 static struct uart_driver serial8250_reg
;
55 static unsigned int skip_txen_test
; /* force skip of txen test at init time */
57 #define PASS_LIMIT 512
59 #include <asm/serial.h>
61 * SERIAL_PORT_DFNS tells us about built-in ports that have no
62 * standard enumeration mechanism. Platforms that can find all
63 * serial ports via mechanisms like ACPI or PCI need not supply it.
65 #ifndef SERIAL_PORT_DFNS
66 #define SERIAL_PORT_DFNS
69 static const struct old_serial_port old_serial_port
[] = {
70 SERIAL_PORT_DFNS
/* defined in asm/serial.h */
73 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
75 #ifdef CONFIG_SERIAL_8250_RSA
77 #define PORT_RSA_MAX 4
78 static unsigned long probe_rsa
[PORT_RSA_MAX
];
79 static unsigned int probe_rsa_count
;
80 #endif /* CONFIG_SERIAL_8250_RSA */
83 struct hlist_node node
;
85 spinlock_t lock
; /* Protects list not the hash */
86 struct list_head
*head
;
89 #define NR_IRQ_HASH 32 /* Can be adjusted later */
90 static struct hlist_head irq_lists
[NR_IRQ_HASH
];
91 static DEFINE_MUTEX(hash_mutex
); /* Used to walk the hash */
94 * This is the serial driver's interrupt routine.
96 * Arjan thinks the old way was overly complex, so it got simplified.
97 * Alan disagrees, saying that need the complexity to handle the weird
98 * nature of ISA shared interrupts. (This is a special exception.)
100 * In order to handle ISA shared interrupts properly, we need to check
101 * that all ports have been serviced, and therefore the ISA interrupt
102 * line has been de-asserted.
104 * This means we need to loop through all ports. checking that they
105 * don't have an interrupt pending.
107 static irqreturn_t
serial8250_interrupt(int irq
, void *dev_id
)
109 struct irq_info
*i
= dev_id
;
110 struct list_head
*l
, *end
= NULL
;
111 int pass_counter
= 0, handled
= 0;
113 pr_debug("%s(%d): start\n", __func__
, irq
);
119 struct uart_8250_port
*up
;
120 struct uart_port
*port
;
122 up
= list_entry(l
, struct uart_8250_port
, list
);
125 if (port
->handle_irq(port
)) {
128 } else if (end
== NULL
)
133 if (l
== i
->head
&& pass_counter
++ > PASS_LIMIT
)
137 spin_unlock(&i
->lock
);
139 pr_debug("%s(%d): end\n", __func__
, irq
);
141 return IRQ_RETVAL(handled
);
145 * To support ISA shared interrupts, we need to have one interrupt
146 * handler that ensures that the IRQ line has been deasserted
147 * before returning. Failing to do this will result in the IRQ
148 * line being stuck active, and, since ISA irqs are edge triggered,
149 * no more IRQs will be seen.
151 static void serial_do_unlink(struct irq_info
*i
, struct uart_8250_port
*up
)
153 spin_lock_irq(&i
->lock
);
155 if (!list_empty(i
->head
)) {
156 if (i
->head
== &up
->list
)
157 i
->head
= i
->head
->next
;
160 BUG_ON(i
->head
!= &up
->list
);
163 spin_unlock_irq(&i
->lock
);
164 /* List empty so throw away the hash node */
165 if (i
->head
== NULL
) {
171 static int serial_link_irq_chain(struct uart_8250_port
*up
)
173 struct hlist_head
*h
;
174 struct hlist_node
*n
;
176 int ret
, irq_flags
= up
->port
.flags
& UPF_SHARE_IRQ
? IRQF_SHARED
: 0;
178 mutex_lock(&hash_mutex
);
180 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
182 hlist_for_each(n
, h
) {
183 i
= hlist_entry(n
, struct irq_info
, node
);
184 if (i
->irq
== up
->port
.irq
)
189 i
= kzalloc(sizeof(struct irq_info
), GFP_KERNEL
);
191 mutex_unlock(&hash_mutex
);
194 spin_lock_init(&i
->lock
);
195 i
->irq
= up
->port
.irq
;
196 hlist_add_head(&i
->node
, h
);
198 mutex_unlock(&hash_mutex
);
200 spin_lock_irq(&i
->lock
);
203 list_add(&up
->list
, i
->head
);
204 spin_unlock_irq(&i
->lock
);
208 INIT_LIST_HEAD(&up
->list
);
210 spin_unlock_irq(&i
->lock
);
211 irq_flags
|= up
->port
.irqflags
;
212 ret
= request_irq(up
->port
.irq
, serial8250_interrupt
,
213 irq_flags
, up
->port
.name
, i
);
215 serial_do_unlink(i
, up
);
221 static void serial_unlink_irq_chain(struct uart_8250_port
*up
)
224 * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
225 * but no, we are not going to take a patch that assigns NULL below.
228 struct hlist_node
*n
;
229 struct hlist_head
*h
;
231 mutex_lock(&hash_mutex
);
233 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
235 hlist_for_each(n
, h
) {
236 i
= hlist_entry(n
, struct irq_info
, node
);
237 if (i
->irq
== up
->port
.irq
)
242 BUG_ON(i
->head
== NULL
);
244 if (list_empty(i
->head
))
245 free_irq(up
->port
.irq
, i
);
247 serial_do_unlink(i
, up
);
248 mutex_unlock(&hash_mutex
);
252 * This function is used to handle ports that do not have an
253 * interrupt. This doesn't work very well for 16450's, but gives
254 * barely passable results for a 16550A. (Although at the expense
255 * of much CPU overhead).
257 static void serial8250_timeout(struct timer_list
*t
)
259 struct uart_8250_port
*up
= from_timer(up
, t
, timer
);
261 up
->port
.handle_irq(&up
->port
);
262 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(&up
->port
));
265 static void serial8250_backup_timeout(struct timer_list
*t
)
267 struct uart_8250_port
*up
= from_timer(up
, t
, timer
);
268 unsigned int iir
, ier
= 0, lsr
;
271 spin_lock_irqsave(&up
->port
.lock
, flags
);
274 * Must disable interrupts or else we risk racing with the interrupt
278 ier
= serial_in(up
, UART_IER
);
279 serial_out(up
, UART_IER
, 0);
282 iir
= serial_in(up
, UART_IIR
);
285 * This should be a safe test for anyone who doesn't trust the
286 * IIR bits on their UART, but it's specifically designed for
287 * the "Diva" UART used on the management processor on many HP
288 * ia64 and parisc boxes.
290 lsr
= serial_in(up
, UART_LSR
);
291 up
->lsr_saved_flags
|= lsr
& LSR_SAVE_FLAGS
;
292 if ((iir
& UART_IIR_NO_INT
) && (up
->ier
& UART_IER_THRI
) &&
293 (!uart_circ_empty(&up
->port
.state
->xmit
) || up
->port
.x_char
) &&
294 (lsr
& UART_LSR_THRE
)) {
295 iir
&= ~(UART_IIR_ID
| UART_IIR_NO_INT
);
296 iir
|= UART_IIR_THRI
;
299 if (!(iir
& UART_IIR_NO_INT
))
300 serial8250_tx_chars(up
);
303 serial_out(up
, UART_IER
, ier
);
305 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
307 /* Standard timer interval plus 0.2s to keep the port running */
308 mod_timer(&up
->timer
,
309 jiffies
+ uart_poll_timeout(&up
->port
) + HZ
/ 5);
312 static int univ8250_setup_irq(struct uart_8250_port
*up
)
314 struct uart_port
*port
= &up
->port
;
318 * The above check will only give an accurate result the first time
319 * the port is opened so this value needs to be preserved.
321 if (up
->bugs
& UART_BUG_THRE
) {
322 pr_debug("%s - using backup timer\n", port
->name
);
324 up
->timer
.function
= serial8250_backup_timeout
;
325 mod_timer(&up
->timer
, jiffies
+
326 uart_poll_timeout(port
) + HZ
/ 5);
330 * If the "interrupt" for this port doesn't correspond with any
331 * hardware interrupt, we use a timer-based system. The original
332 * driver used to do this with IRQ0.
335 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(port
));
337 retval
= serial_link_irq_chain(up
);
342 static void univ8250_release_irq(struct uart_8250_port
*up
)
344 struct uart_port
*port
= &up
->port
;
346 del_timer_sync(&up
->timer
);
347 up
->timer
.function
= serial8250_timeout
;
349 serial_unlink_irq_chain(up
);
352 #ifdef CONFIG_SERIAL_8250_RSA
353 static int serial8250_request_rsa_resource(struct uart_8250_port
*up
)
355 unsigned long start
= UART_RSA_BASE
<< up
->port
.regshift
;
356 unsigned int size
= 8 << up
->port
.regshift
;
357 struct uart_port
*port
= &up
->port
;
360 switch (port
->iotype
) {
363 start
+= port
->iobase
;
364 if (request_region(start
, size
, "serial-rsa"))
374 static void serial8250_release_rsa_resource(struct uart_8250_port
*up
)
376 unsigned long offset
= UART_RSA_BASE
<< up
->port
.regshift
;
377 unsigned int size
= 8 << up
->port
.regshift
;
378 struct uart_port
*port
= &up
->port
;
380 switch (port
->iotype
) {
383 release_region(port
->iobase
+ offset
, size
);
389 static const struct uart_ops
*base_ops
;
390 static struct uart_ops univ8250_port_ops
;
392 static const struct uart_8250_ops univ8250_driver_ops
= {
393 .setup_irq
= univ8250_setup_irq
,
394 .release_irq
= univ8250_release_irq
,
397 static struct uart_8250_port serial8250_ports
[UART_NR
];
400 * serial8250_get_port - retrieve struct uart_8250_port
401 * @line: serial line number
403 * This function retrieves struct uart_8250_port for the specific line.
404 * This struct *must* *not* be used to perform a 8250 or serial core operation
405 * which is not accessible otherwise. Its only purpose is to make the struct
406 * accessible to the runtime-pm callbacks for context suspend/restore.
407 * The lock assumption made here is none because runtime-pm suspend/resume
408 * callbacks should not be invoked if there is any operation performed on the
411 struct uart_8250_port
*serial8250_get_port(int line
)
413 return &serial8250_ports
[line
];
415 EXPORT_SYMBOL_GPL(serial8250_get_port
);
417 static void (*serial8250_isa_config
)(int port
, struct uart_port
*up
,
420 void serial8250_set_isa_configurator(
421 void (*v
)(int port
, struct uart_port
*up
, u32
*capabilities
))
423 serial8250_isa_config
= v
;
425 EXPORT_SYMBOL(serial8250_set_isa_configurator
);
427 #ifdef CONFIG_SERIAL_8250_RSA
429 static void univ8250_config_port(struct uart_port
*port
, int flags
)
431 struct uart_8250_port
*up
= up_to_u8250p(port
);
433 up
->probe
&= ~UART_PROBE_RSA
;
434 if (port
->type
== PORT_RSA
) {
435 if (serial8250_request_rsa_resource(up
) == 0)
436 up
->probe
|= UART_PROBE_RSA
;
437 } else if (flags
& UART_CONFIG_TYPE
) {
440 for (i
= 0; i
< probe_rsa_count
; i
++) {
441 if (probe_rsa
[i
] == up
->port
.iobase
) {
442 if (serial8250_request_rsa_resource(up
) == 0)
443 up
->probe
|= UART_PROBE_RSA
;
449 base_ops
->config_port(port
, flags
);
451 if (port
->type
!= PORT_RSA
&& up
->probe
& UART_PROBE_RSA
)
452 serial8250_release_rsa_resource(up
);
455 static int univ8250_request_port(struct uart_port
*port
)
457 struct uart_8250_port
*up
= up_to_u8250p(port
);
460 ret
= base_ops
->request_port(port
);
461 if (ret
== 0 && port
->type
== PORT_RSA
) {
462 ret
= serial8250_request_rsa_resource(up
);
464 base_ops
->release_port(port
);
470 static void univ8250_release_port(struct uart_port
*port
)
472 struct uart_8250_port
*up
= up_to_u8250p(port
);
474 if (port
->type
== PORT_RSA
)
475 serial8250_release_rsa_resource(up
);
476 base_ops
->release_port(port
);
479 static void univ8250_rsa_support(struct uart_ops
*ops
)
481 ops
->config_port
= univ8250_config_port
;
482 ops
->request_port
= univ8250_request_port
;
483 ops
->release_port
= univ8250_release_port
;
487 #define univ8250_rsa_support(x) do { } while (0)
488 #endif /* CONFIG_SERIAL_8250_RSA */
490 static inline void serial8250_apply_quirks(struct uart_8250_port
*up
)
492 up
->port
.quirks
|= skip_txen_test
? UPQ_NO_TXEN_TEST
: 0;
495 static void __init
serial8250_isa_init_ports(void)
497 struct uart_8250_port
*up
;
498 static int first
= 1;
505 if (nr_uarts
> UART_NR
)
508 for (i
= 0; i
< nr_uarts
; i
++) {
509 struct uart_8250_port
*up
= &serial8250_ports
[i
];
510 struct uart_port
*port
= &up
->port
;
513 serial8250_init_port(up
);
515 base_ops
= port
->ops
;
516 port
->ops
= &univ8250_port_ops
;
518 timer_setup(&up
->timer
, serial8250_timeout
, 0);
520 up
->ops
= &univ8250_driver_ops
;
523 * ALPHA_KLUDGE_MCR needs to be killed.
525 up
->mcr_mask
= ~ALPHA_KLUDGE_MCR
;
526 up
->mcr_force
= ALPHA_KLUDGE_MCR
;
529 /* chain base port ops to support Remote Supervisor Adapter */
530 univ8250_port_ops
= *base_ops
;
531 univ8250_rsa_support(&univ8250_port_ops
);
534 irqflag
= IRQF_SHARED
;
536 for (i
= 0, up
= serial8250_ports
;
537 i
< ARRAY_SIZE(old_serial_port
) && i
< nr_uarts
;
539 struct uart_port
*port
= &up
->port
;
541 port
->iobase
= old_serial_port
[i
].port
;
542 port
->irq
= irq_canonicalize(old_serial_port
[i
].irq
);
544 port
->uartclk
= old_serial_port
[i
].baud_base
* 16;
545 port
->flags
= old_serial_port
[i
].flags
;
547 port
->membase
= old_serial_port
[i
].iomem_base
;
548 port
->iotype
= old_serial_port
[i
].io_type
;
549 port
->regshift
= old_serial_port
[i
].iomem_reg_shift
;
550 serial8250_set_defaults(up
);
552 port
->irqflags
|= irqflag
;
553 if (serial8250_isa_config
!= NULL
)
554 serial8250_isa_config(i
, &up
->port
, &up
->capabilities
);
559 serial8250_register_ports(struct uart_driver
*drv
, struct device
*dev
)
563 for (i
= 0; i
< nr_uarts
; i
++) {
564 struct uart_8250_port
*up
= &serial8250_ports
[i
];
566 if (up
->port
.type
== PORT_8250_CIR
)
574 serial8250_apply_quirks(up
);
575 uart_add_one_port(drv
, &up
->port
);
579 #ifdef CONFIG_SERIAL_8250_CONSOLE
581 static void univ8250_console_write(struct console
*co
, const char *s
,
584 struct uart_8250_port
*up
= &serial8250_ports
[co
->index
];
586 serial8250_console_write(up
, s
, count
);
589 static int univ8250_console_setup(struct console
*co
, char *options
)
591 struct uart_port
*port
;
595 * Check whether an invalid uart number has been specified, and
596 * if so, search for the first available port that does have
599 if (co
->index
>= nr_uarts
)
601 port
= &serial8250_ports
[co
->index
].port
;
602 /* link port to console */
605 retval
= serial8250_console_setup(port
, options
, false);
612 * univ8250_console_match - non-standard console matching
613 * @co: registering console
614 * @name: name from console command line
615 * @idx: index from console command line
616 * @options: ptr to option string from console command line
618 * Only attempts to match console command lines of the form:
619 * console=uart[8250],io|mmio|mmio16|mmio32,<addr>[,<options>]
620 * console=uart[8250],0x<addr>[,<options>]
621 * This form is used to register an initial earlycon boot console and
622 * replace it with the serial8250_console at 8250 driver init.
624 * Performs console setup for a match (as required by interface)
625 * If no <options> are specified, then assume the h/w is already setup.
627 * Returns 0 if console matches; otherwise non-zero to use default matching
629 static int univ8250_console_match(struct console
*co
, char *name
, int idx
,
632 char match
[] = "uart"; /* 8250-specific earlycon name */
633 unsigned char iotype
;
634 resource_size_t addr
;
637 if (strncmp(name
, match
, 4) != 0)
640 if (uart_parse_earlycon(options
, &iotype
, &addr
, &options
))
643 /* try to match the port specified on the command line */
644 for (i
= 0; i
< nr_uarts
; i
++) {
645 struct uart_port
*port
= &serial8250_ports
[i
].port
;
647 if (port
->iotype
!= iotype
)
649 if ((iotype
== UPIO_MEM
|| iotype
== UPIO_MEM16
||
650 iotype
== UPIO_MEM32
|| iotype
== UPIO_MEM32BE
)
651 && (port
->mapbase
!= addr
))
653 if (iotype
== UPIO_PORT
&& port
->iobase
!= addr
)
658 return serial8250_console_setup(port
, options
, true);
664 static struct console univ8250_console
= {
666 .write
= univ8250_console_write
,
667 .device
= uart_console_device
,
668 .setup
= univ8250_console_setup
,
669 .match
= univ8250_console_match
,
670 .flags
= CON_PRINTBUFFER
| CON_ANYTIME
,
672 .data
= &serial8250_reg
,
675 static int __init
univ8250_console_init(void)
680 serial8250_isa_init_ports();
681 register_console(&univ8250_console
);
684 console_initcall(univ8250_console_init
);
686 #define SERIAL8250_CONSOLE (&univ8250_console)
688 #define SERIAL8250_CONSOLE NULL
691 static struct uart_driver serial8250_reg
= {
692 .owner
= THIS_MODULE
,
693 .driver_name
= "serial",
697 .cons
= SERIAL8250_CONSOLE
,
701 * early_serial_setup - early registration for 8250 ports
703 * Setup an 8250 port structure prior to console initialisation. Use
704 * after console initialisation will cause undefined behaviour.
706 int __init
early_serial_setup(struct uart_port
*port
)
710 if (port
->line
>= ARRAY_SIZE(serial8250_ports
) || nr_uarts
== 0)
713 serial8250_isa_init_ports();
714 p
= &serial8250_ports
[port
->line
].port
;
715 p
->iobase
= port
->iobase
;
716 p
->membase
= port
->membase
;
718 p
->irqflags
= port
->irqflags
;
719 p
->uartclk
= port
->uartclk
;
720 p
->fifosize
= port
->fifosize
;
721 p
->regshift
= port
->regshift
;
722 p
->iotype
= port
->iotype
;
723 p
->flags
= port
->flags
;
724 p
->mapbase
= port
->mapbase
;
725 p
->mapsize
= port
->mapsize
;
726 p
->private_data
= port
->private_data
;
727 p
->type
= port
->type
;
728 p
->line
= port
->line
;
730 serial8250_set_defaults(up_to_u8250p(p
));
733 p
->serial_in
= port
->serial_in
;
734 if (port
->serial_out
)
735 p
->serial_out
= port
->serial_out
;
736 if (port
->handle_irq
)
737 p
->handle_irq
= port
->handle_irq
;
743 * serial8250_suspend_port - suspend one serial port
744 * @line: serial line number
746 * Suspend one serial port.
748 void serial8250_suspend_port(int line
)
750 struct uart_8250_port
*up
= &serial8250_ports
[line
];
751 struct uart_port
*port
= &up
->port
;
753 if (!console_suspend_enabled
&& uart_console(port
) &&
754 port
->type
!= PORT_8250
) {
755 unsigned char canary
= 0xa5;
756 serial_out(up
, UART_SCR
, canary
);
757 if (serial_in(up
, UART_SCR
) == canary
)
761 uart_suspend_port(&serial8250_reg
, port
);
763 EXPORT_SYMBOL(serial8250_suspend_port
);
766 * serial8250_resume_port - resume one serial port
767 * @line: serial line number
769 * Resume one serial port.
771 void serial8250_resume_port(int line
)
773 struct uart_8250_port
*up
= &serial8250_ports
[line
];
774 struct uart_port
*port
= &up
->port
;
778 if (up
->capabilities
& UART_NATSEMI
) {
779 /* Ensure it's still in high speed mode */
780 serial_port_out(port
, UART_LCR
, 0xE0);
782 ns16550a_goto_highspeed(up
);
784 serial_port_out(port
, UART_LCR
, 0);
785 port
->uartclk
= 921600*16;
787 uart_resume_port(&serial8250_reg
, port
);
789 EXPORT_SYMBOL(serial8250_resume_port
);
792 * Register a set of serial devices attached to a platform device. The
793 * list is terminated with a zero flags entry, which means we expect
794 * all entries to have at least UPF_BOOT_AUTOCONF set.
796 static int serial8250_probe(struct platform_device
*dev
)
798 struct plat_serial8250_port
*p
= dev_get_platdata(&dev
->dev
);
799 struct uart_8250_port uart
;
800 int ret
, i
, irqflag
= 0;
802 memset(&uart
, 0, sizeof(uart
));
805 irqflag
= IRQF_SHARED
;
807 for (i
= 0; p
&& p
->flags
!= 0; p
++, i
++) {
808 uart
.port
.iobase
= p
->iobase
;
809 uart
.port
.membase
= p
->membase
;
810 uart
.port
.irq
= p
->irq
;
811 uart
.port
.irqflags
= p
->irqflags
;
812 uart
.port
.uartclk
= p
->uartclk
;
813 uart
.port
.regshift
= p
->regshift
;
814 uart
.port
.iotype
= p
->iotype
;
815 uart
.port
.flags
= p
->flags
;
816 uart
.port
.mapbase
= p
->mapbase
;
817 uart
.port
.hub6
= p
->hub6
;
818 uart
.port
.private_data
= p
->private_data
;
819 uart
.port
.type
= p
->type
;
820 uart
.port
.serial_in
= p
->serial_in
;
821 uart
.port
.serial_out
= p
->serial_out
;
822 uart
.port
.handle_irq
= p
->handle_irq
;
823 uart
.port
.handle_break
= p
->handle_break
;
824 uart
.port
.set_termios
= p
->set_termios
;
825 uart
.port
.set_ldisc
= p
->set_ldisc
;
826 uart
.port
.get_mctrl
= p
->get_mctrl
;
827 uart
.port
.pm
= p
->pm
;
828 uart
.port
.dev
= &dev
->dev
;
829 uart
.port
.irqflags
|= irqflag
;
830 ret
= serial8250_register_8250_port(&uart
);
832 dev_err(&dev
->dev
, "unable to register port at index %d "
833 "(IO%lx MEM%llx IRQ%d): %d\n", i
,
834 p
->iobase
, (unsigned long long)p
->mapbase
,
842 * Remove serial ports registered against a platform device.
844 static int serial8250_remove(struct platform_device
*dev
)
848 for (i
= 0; i
< nr_uarts
; i
++) {
849 struct uart_8250_port
*up
= &serial8250_ports
[i
];
851 if (up
->port
.dev
== &dev
->dev
)
852 serial8250_unregister_port(i
);
857 static int serial8250_suspend(struct platform_device
*dev
, pm_message_t state
)
861 for (i
= 0; i
< UART_NR
; i
++) {
862 struct uart_8250_port
*up
= &serial8250_ports
[i
];
864 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
865 uart_suspend_port(&serial8250_reg
, &up
->port
);
871 static int serial8250_resume(struct platform_device
*dev
)
875 for (i
= 0; i
< UART_NR
; i
++) {
876 struct uart_8250_port
*up
= &serial8250_ports
[i
];
878 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
879 serial8250_resume_port(i
);
885 static struct platform_driver serial8250_isa_driver
= {
886 .probe
= serial8250_probe
,
887 .remove
= serial8250_remove
,
888 .suspend
= serial8250_suspend
,
889 .resume
= serial8250_resume
,
891 .name
= "serial8250",
896 * This "device" covers _all_ ISA 8250-compatible serial devices listed
897 * in the table in include/asm/serial.h
899 static struct platform_device
*serial8250_isa_devs
;
902 * serial8250_register_8250_port and serial8250_unregister_port allows for
903 * 16x50 serial ports to be configured at run-time, to support PCMCIA
904 * modems and PCI multiport cards.
906 static DEFINE_MUTEX(serial_mutex
);
908 static struct uart_8250_port
*serial8250_find_match_or_unused(struct uart_port
*port
)
913 * First, find a port entry which matches.
915 for (i
= 0; i
< nr_uarts
; i
++)
916 if (uart_match_port(&serial8250_ports
[i
].port
, port
))
917 return &serial8250_ports
[i
];
919 /* try line number first if still available */
921 if (i
< nr_uarts
&& serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
922 serial8250_ports
[i
].port
.iobase
== 0)
923 return &serial8250_ports
[i
];
925 * We didn't find a matching entry, so look for the first
926 * free entry. We look for one which hasn't been previously
927 * used (indicated by zero iobase).
929 for (i
= 0; i
< nr_uarts
; i
++)
930 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
931 serial8250_ports
[i
].port
.iobase
== 0)
932 return &serial8250_ports
[i
];
935 * That also failed. Last resort is to find any entry which
936 * doesn't have a real port associated with it.
938 for (i
= 0; i
< nr_uarts
; i
++)
939 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
)
940 return &serial8250_ports
[i
];
945 static void serial_8250_overrun_backoff_work(struct work_struct
*work
)
947 struct uart_8250_port
*up
=
948 container_of(to_delayed_work(work
), struct uart_8250_port
,
950 struct uart_port
*port
= &up
->port
;
953 spin_lock_irqsave(&port
->lock
, flags
);
954 up
->ier
|= UART_IER_RLSI
| UART_IER_RDI
;
955 up
->port
.read_status_mask
|= UART_LSR_DR
;
956 serial_out(up
, UART_IER
, up
->ier
);
957 spin_unlock_irqrestore(&port
->lock
, flags
);
961 * serial8250_register_8250_port - register a serial port
962 * @up: serial port template
964 * Configure the serial port specified by the request. If the
965 * port exists and is in use, it is hung up and unregistered
968 * The port is then probed and if necessary the IRQ is autodetected
969 * If this fails an error is returned.
971 * On success the port is ready to use and the line number is returned.
973 int serial8250_register_8250_port(struct uart_8250_port
*up
)
975 struct uart_8250_port
*uart
;
978 if (up
->port
.uartclk
== 0)
981 mutex_lock(&serial_mutex
);
983 uart
= serial8250_find_match_or_unused(&up
->port
);
984 if (uart
&& uart
->port
.type
!= PORT_8250_CIR
) {
986 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
988 uart
->port
.iobase
= up
->port
.iobase
;
989 uart
->port
.membase
= up
->port
.membase
;
990 uart
->port
.irq
= up
->port
.irq
;
991 uart
->port
.irqflags
= up
->port
.irqflags
;
992 uart
->port
.uartclk
= up
->port
.uartclk
;
993 uart
->port
.fifosize
= up
->port
.fifosize
;
994 uart
->port
.regshift
= up
->port
.regshift
;
995 uart
->port
.iotype
= up
->port
.iotype
;
996 uart
->port
.flags
= up
->port
.flags
| UPF_BOOT_AUTOCONF
;
997 uart
->bugs
= up
->bugs
;
998 uart
->port
.mapbase
= up
->port
.mapbase
;
999 uart
->port
.mapsize
= up
->port
.mapsize
;
1000 uart
->port
.private_data
= up
->port
.private_data
;
1001 uart
->tx_loadsz
= up
->tx_loadsz
;
1002 uart
->capabilities
= up
->capabilities
;
1003 uart
->port
.throttle
= up
->port
.throttle
;
1004 uart
->port
.unthrottle
= up
->port
.unthrottle
;
1005 uart
->port
.rs485_config
= up
->port
.rs485_config
;
1006 uart
->port
.rs485
= up
->port
.rs485
;
1007 uart
->dma
= up
->dma
;
1009 /* Take tx_loadsz from fifosize if it wasn't set separately */
1010 if (uart
->port
.fifosize
&& !uart
->tx_loadsz
)
1011 uart
->tx_loadsz
= uart
->port
.fifosize
;
1014 uart
->port
.dev
= up
->port
.dev
;
1016 if (up
->port
.flags
& UPF_FIXED_TYPE
)
1017 uart
->port
.type
= up
->port
.type
;
1019 serial8250_set_defaults(uart
);
1021 /* Possibly override default I/O functions. */
1022 if (up
->port
.serial_in
)
1023 uart
->port
.serial_in
= up
->port
.serial_in
;
1024 if (up
->port
.serial_out
)
1025 uart
->port
.serial_out
= up
->port
.serial_out
;
1026 if (up
->port
.handle_irq
)
1027 uart
->port
.handle_irq
= up
->port
.handle_irq
;
1028 /* Possibly override set_termios call */
1029 if (up
->port
.set_termios
)
1030 uart
->port
.set_termios
= up
->port
.set_termios
;
1031 if (up
->port
.set_ldisc
)
1032 uart
->port
.set_ldisc
= up
->port
.set_ldisc
;
1033 if (up
->port
.get_mctrl
)
1034 uart
->port
.get_mctrl
= up
->port
.get_mctrl
;
1035 if (up
->port
.set_mctrl
)
1036 uart
->port
.set_mctrl
= up
->port
.set_mctrl
;
1037 if (up
->port
.get_divisor
)
1038 uart
->port
.get_divisor
= up
->port
.get_divisor
;
1039 if (up
->port
.set_divisor
)
1040 uart
->port
.set_divisor
= up
->port
.set_divisor
;
1041 if (up
->port
.startup
)
1042 uart
->port
.startup
= up
->port
.startup
;
1043 if (up
->port
.shutdown
)
1044 uart
->port
.shutdown
= up
->port
.shutdown
;
1046 uart
->port
.pm
= up
->port
.pm
;
1047 if (up
->port
.handle_break
)
1048 uart
->port
.handle_break
= up
->port
.handle_break
;
1050 uart
->dl_read
= up
->dl_read
;
1052 uart
->dl_write
= up
->dl_write
;
1054 if (uart
->port
.type
!= PORT_8250_CIR
) {
1055 if (serial8250_isa_config
!= NULL
)
1056 serial8250_isa_config(0, &uart
->port
,
1057 &uart
->capabilities
);
1059 serial8250_apply_quirks(uart
);
1060 ret
= uart_add_one_port(&serial8250_reg
,
1063 ret
= uart
->port
.line
;
1065 dev_info(uart
->port
.dev
,
1066 "skipping CIR port at 0x%lx / 0x%llx, IRQ %d\n",
1068 (unsigned long long)uart
->port
.mapbase
,
1074 /* Initialise interrupt backoff work if required */
1075 if (up
->overrun_backoff_time_ms
> 0) {
1076 uart
->overrun_backoff_time_ms
=
1077 up
->overrun_backoff_time_ms
;
1078 INIT_DELAYED_WORK(&uart
->overrun_backoff
,
1079 serial_8250_overrun_backoff_work
);
1081 uart
->overrun_backoff_time_ms
= 0;
1085 mutex_unlock(&serial_mutex
);
1089 EXPORT_SYMBOL(serial8250_register_8250_port
);
1092 * serial8250_unregister_port - remove a 16x50 serial port at runtime
1093 * @line: serial line number
1095 * Remove one serial port. This may not be called from interrupt
1096 * context. We hand the port back to the our control.
1098 void serial8250_unregister_port(int line
)
1100 struct uart_8250_port
*uart
= &serial8250_ports
[line
];
1102 mutex_lock(&serial_mutex
);
1105 unsigned long flags
;
1107 spin_lock_irqsave(&uart
->port
.lock
, flags
);
1108 serial8250_em485_destroy(uart
);
1109 spin_unlock_irqrestore(&uart
->port
.lock
, flags
);
1112 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
1113 if (serial8250_isa_devs
) {
1114 uart
->port
.flags
&= ~UPF_BOOT_AUTOCONF
;
1115 uart
->port
.type
= PORT_UNKNOWN
;
1116 uart
->port
.dev
= &serial8250_isa_devs
->dev
;
1117 uart
->capabilities
= 0;
1118 serial8250_apply_quirks(uart
);
1119 uart_add_one_port(&serial8250_reg
, &uart
->port
);
1121 uart
->port
.dev
= NULL
;
1123 mutex_unlock(&serial_mutex
);
1125 EXPORT_SYMBOL(serial8250_unregister_port
);
1127 static int __init
serial8250_init(void)
1134 serial8250_isa_init_ports();
1136 pr_info("Serial: 8250/16550 driver, %d ports, IRQ sharing %sabled\n",
1137 nr_uarts
, share_irqs
? "en" : "dis");
1140 ret
= sunserial_register_minors(&serial8250_reg
, UART_NR
);
1142 serial8250_reg
.nr
= UART_NR
;
1143 ret
= uart_register_driver(&serial8250_reg
);
1148 ret
= serial8250_pnp_init();
1150 goto unreg_uart_drv
;
1152 serial8250_isa_devs
= platform_device_alloc("serial8250",
1153 PLAT8250_DEV_LEGACY
);
1154 if (!serial8250_isa_devs
) {
1159 ret
= platform_device_add(serial8250_isa_devs
);
1163 serial8250_register_ports(&serial8250_reg
, &serial8250_isa_devs
->dev
);
1165 ret
= platform_driver_register(&serial8250_isa_driver
);
1169 platform_device_del(serial8250_isa_devs
);
1171 platform_device_put(serial8250_isa_devs
);
1173 serial8250_pnp_exit();
1176 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1178 uart_unregister_driver(&serial8250_reg
);
1184 static void __exit
serial8250_exit(void)
1186 struct platform_device
*isa_dev
= serial8250_isa_devs
;
1189 * This tells serial8250_unregister_port() not to re-register
1190 * the ports (thereby making serial8250_isa_driver permanently
1193 serial8250_isa_devs
= NULL
;
1195 platform_driver_unregister(&serial8250_isa_driver
);
1196 platform_device_unregister(isa_dev
);
1198 serial8250_pnp_exit();
1201 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1203 uart_unregister_driver(&serial8250_reg
);
1207 module_init(serial8250_init
);
1208 module_exit(serial8250_exit
);
1210 MODULE_LICENSE("GPL");
1211 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
1213 module_param_hw(share_irqs
, uint
, other
, 0644);
1214 MODULE_PARM_DESC(share_irqs
, "Share IRQs with other non-8250/16x50 devices (unsafe)");
1216 module_param(nr_uarts
, uint
, 0644);
1217 MODULE_PARM_DESC(nr_uarts
, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS
) ")");
1219 module_param(skip_txen_test
, uint
, 0644);
1220 MODULE_PARM_DESC(skip_txen_test
, "Skip checking for the TXEN bug at init time");
1222 #ifdef CONFIG_SERIAL_8250_RSA
1223 module_param_hw_array(probe_rsa
, ulong
, ioport
, &probe_rsa_count
, 0444);
1224 MODULE_PARM_DESC(probe_rsa
, "Probe I/O ports for RSA");
1226 MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR
);
1228 #ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
1230 /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
1231 * working as well for the module options so we don't break people. We
1232 * need to keep the names identical and the convenient macros will happily
1233 * refuse to let us do that by failing the build with redefinition errors
1234 * of global variables. So we stick them inside a dummy function to avoid
1235 * those conflicts. The options still get parsed, and the redefined
1236 * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
1238 * This is hacky. I'm sorry.
1240 static void __used
s8250_options(void)
1242 #undef MODULE_PARAM_PREFIX
1243 #define MODULE_PARAM_PREFIX "8250_core."
1245 module_param_cb(share_irqs
, ¶m_ops_uint
, &share_irqs
, 0644);
1246 module_param_cb(nr_uarts
, ¶m_ops_uint
, &nr_uarts
, 0644);
1247 module_param_cb(skip_txen_test
, ¶m_ops_uint
, &skip_txen_test
, 0644);
1248 #ifdef CONFIG_SERIAL_8250_RSA
1249 __module_param_call(MODULE_PARAM_PREFIX
, probe_rsa
,
1250 ¶m_array_ops
, .arr
= &__param_arr_probe_rsa
,
1255 MODULE_ALIAS("8250_core");