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/acpi.h>
18 #include <linux/module.h>
19 #include <linux/moduleparam.h>
20 #include <linux/ioport.h>
21 #include <linux/init.h>
22 #include <linux/console.h>
23 #include <linux/sysrq.h>
24 #include <linux/delay.h>
25 #include <linux/platform_device.h>
26 #include <linux/tty.h>
27 #include <linux/ratelimit.h>
28 #include <linux/tty_flip.h>
29 #include <linux/serial.h>
30 #include <linux/serial_8250.h>
31 #include <linux/nmi.h>
32 #include <linux/mutex.h>
33 #include <linux/slab.h>
34 #include <linux/uaccess.h>
35 #include <linux/pm_runtime.h>
38 #include <linux/sunserialcore.h>
47 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
48 * is unsafe when used on edge-triggered interrupts.
50 static unsigned int share_irqs
= SERIAL8250_SHARE_IRQS
;
52 static unsigned int nr_uarts
= CONFIG_SERIAL_8250_RUNTIME_UARTS
;
54 static struct uart_driver serial8250_reg
;
56 static unsigned int skip_txen_test
; /* force skip of txen test at init time */
58 #define PASS_LIMIT 512
60 #include <asm/serial.h>
62 * SERIAL_PORT_DFNS tells us about built-in ports that have no
63 * standard enumeration mechanism. Platforms that can find all
64 * serial ports via mechanisms like ACPI or PCI need not supply it.
66 #ifndef SERIAL_PORT_DFNS
67 #define SERIAL_PORT_DFNS
70 static const struct old_serial_port old_serial_port
[] = {
71 SERIAL_PORT_DFNS
/* defined in asm/serial.h */
74 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
76 #ifdef CONFIG_SERIAL_8250_RSA
78 #define PORT_RSA_MAX 4
79 static unsigned long probe_rsa
[PORT_RSA_MAX
];
80 static unsigned int probe_rsa_count
;
81 #endif /* CONFIG_SERIAL_8250_RSA */
84 struct hlist_node node
;
86 spinlock_t lock
; /* Protects list not the hash */
87 struct list_head
*head
;
90 #define NR_IRQ_HASH 32 /* Can be adjusted later */
91 static struct hlist_head irq_lists
[NR_IRQ_HASH
];
92 static DEFINE_MUTEX(hash_mutex
); /* Used to walk the hash */
95 * This is the serial driver's interrupt routine.
97 * Arjan thinks the old way was overly complex, so it got simplified.
98 * Alan disagrees, saying that need the complexity to handle the weird
99 * nature of ISA shared interrupts. (This is a special exception.)
101 * In order to handle ISA shared interrupts properly, we need to check
102 * that all ports have been serviced, and therefore the ISA interrupt
103 * line has been de-asserted.
105 * This means we need to loop through all ports. checking that they
106 * don't have an interrupt pending.
108 static irqreturn_t
serial8250_interrupt(int irq
, void *dev_id
)
110 struct irq_info
*i
= dev_id
;
111 struct list_head
*l
, *end
= NULL
;
112 int pass_counter
= 0, handled
= 0;
114 pr_debug("%s(%d): start\n", __func__
, irq
);
120 struct uart_8250_port
*up
;
121 struct uart_port
*port
;
123 up
= list_entry(l
, struct uart_8250_port
, list
);
126 if (port
->handle_irq(port
)) {
129 } else if (end
== NULL
)
134 if (l
== i
->head
&& pass_counter
++ > PASS_LIMIT
)
138 spin_unlock(&i
->lock
);
140 pr_debug("%s(%d): end\n", __func__
, irq
);
142 return IRQ_RETVAL(handled
);
146 * To support ISA shared interrupts, we need to have one interrupt
147 * handler that ensures that the IRQ line has been deasserted
148 * before returning. Failing to do this will result in the IRQ
149 * line being stuck active, and, since ISA irqs are edge triggered,
150 * no more IRQs will be seen.
152 static void serial_do_unlink(struct irq_info
*i
, struct uart_8250_port
*up
)
154 spin_lock_irq(&i
->lock
);
156 if (!list_empty(i
->head
)) {
157 if (i
->head
== &up
->list
)
158 i
->head
= i
->head
->next
;
161 BUG_ON(i
->head
!= &up
->list
);
164 spin_unlock_irq(&i
->lock
);
165 /* List empty so throw away the hash node */
166 if (i
->head
== NULL
) {
172 static int serial_link_irq_chain(struct uart_8250_port
*up
)
174 struct hlist_head
*h
;
175 struct hlist_node
*n
;
179 mutex_lock(&hash_mutex
);
181 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
183 hlist_for_each(n
, h
) {
184 i
= hlist_entry(n
, struct irq_info
, node
);
185 if (i
->irq
== up
->port
.irq
)
190 i
= kzalloc(sizeof(struct irq_info
), GFP_KERNEL
);
192 mutex_unlock(&hash_mutex
);
195 spin_lock_init(&i
->lock
);
196 i
->irq
= up
->port
.irq
;
197 hlist_add_head(&i
->node
, h
);
199 mutex_unlock(&hash_mutex
);
201 spin_lock_irq(&i
->lock
);
204 list_add(&up
->list
, i
->head
);
205 spin_unlock_irq(&i
->lock
);
209 INIT_LIST_HEAD(&up
->list
);
211 spin_unlock_irq(&i
->lock
);
212 ret
= request_irq(up
->port
.irq
, serial8250_interrupt
,
213 up
->port
.irqflags
, 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
;
527 serial8250_set_defaults(up
);
530 /* chain base port ops to support Remote Supervisor Adapter */
531 univ8250_port_ops
= *base_ops
;
532 univ8250_rsa_support(&univ8250_port_ops
);
535 irqflag
= IRQF_SHARED
;
537 for (i
= 0, up
= serial8250_ports
;
538 i
< ARRAY_SIZE(old_serial_port
) && i
< nr_uarts
;
540 struct uart_port
*port
= &up
->port
;
542 port
->iobase
= old_serial_port
[i
].port
;
543 port
->irq
= irq_canonicalize(old_serial_port
[i
].irq
);
545 port
->uartclk
= old_serial_port
[i
].baud_base
* 16;
546 port
->flags
= old_serial_port
[i
].flags
;
548 port
->membase
= old_serial_port
[i
].iomem_base
;
549 port
->iotype
= old_serial_port
[i
].io_type
;
550 port
->regshift
= old_serial_port
[i
].iomem_reg_shift
;
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);
611 static int univ8250_console_exit(struct console
*co
)
613 struct uart_port
*port
;
615 port
= &serial8250_ports
[co
->index
].port
;
616 return serial8250_console_exit(port
);
620 * univ8250_console_match - non-standard console matching
621 * @co: registering console
622 * @name: name from console command line
623 * @idx: index from console command line
624 * @options: ptr to option string from console command line
626 * Only attempts to match console command lines of the form:
627 * console=uart[8250],io|mmio|mmio16|mmio32,<addr>[,<options>]
628 * console=uart[8250],0x<addr>[,<options>]
629 * This form is used to register an initial earlycon boot console and
630 * replace it with the serial8250_console at 8250 driver init.
632 * Performs console setup for a match (as required by interface)
633 * If no <options> are specified, then assume the h/w is already setup.
635 * Returns 0 if console matches; otherwise non-zero to use default matching
637 static int univ8250_console_match(struct console
*co
, char *name
, int idx
,
640 char match
[] = "uart"; /* 8250-specific earlycon name */
641 unsigned char iotype
;
642 resource_size_t addr
;
645 if (strncmp(name
, match
, 4) != 0)
648 if (uart_parse_earlycon(options
, &iotype
, &addr
, &options
))
651 /* try to match the port specified on the command line */
652 for (i
= 0; i
< nr_uarts
; i
++) {
653 struct uart_port
*port
= &serial8250_ports
[i
].port
;
655 if (port
->iotype
!= iotype
)
657 if ((iotype
== UPIO_MEM
|| iotype
== UPIO_MEM16
||
658 iotype
== UPIO_MEM32
|| iotype
== UPIO_MEM32BE
)
659 && (port
->mapbase
!= addr
))
661 if (iotype
== UPIO_PORT
&& port
->iobase
!= addr
)
666 return serial8250_console_setup(port
, options
, true);
672 static struct console univ8250_console
= {
674 .write
= univ8250_console_write
,
675 .device
= uart_console_device
,
676 .setup
= univ8250_console_setup
,
677 .exit
= univ8250_console_exit
,
678 .match
= univ8250_console_match
,
679 .flags
= CON_PRINTBUFFER
| CON_ANYTIME
,
681 .data
= &serial8250_reg
,
684 static int __init
univ8250_console_init(void)
689 serial8250_isa_init_ports();
690 register_console(&univ8250_console
);
693 console_initcall(univ8250_console_init
);
695 #define SERIAL8250_CONSOLE (&univ8250_console)
697 #define SERIAL8250_CONSOLE NULL
700 static struct uart_driver serial8250_reg
= {
701 .owner
= THIS_MODULE
,
702 .driver_name
= "serial",
706 .cons
= SERIAL8250_CONSOLE
,
710 * early_serial_setup - early registration for 8250 ports
712 * Setup an 8250 port structure prior to console initialisation. Use
713 * after console initialisation will cause undefined behaviour.
715 int __init
early_serial_setup(struct uart_port
*port
)
719 if (port
->line
>= ARRAY_SIZE(serial8250_ports
) || nr_uarts
== 0)
722 serial8250_isa_init_ports();
723 p
= &serial8250_ports
[port
->line
].port
;
724 p
->iobase
= port
->iobase
;
725 p
->membase
= port
->membase
;
727 p
->irqflags
= port
->irqflags
;
728 p
->uartclk
= port
->uartclk
;
729 p
->fifosize
= port
->fifosize
;
730 p
->regshift
= port
->regshift
;
731 p
->iotype
= port
->iotype
;
732 p
->flags
= port
->flags
;
733 p
->mapbase
= port
->mapbase
;
734 p
->mapsize
= port
->mapsize
;
735 p
->private_data
= port
->private_data
;
736 p
->type
= port
->type
;
737 p
->line
= port
->line
;
739 serial8250_set_defaults(up_to_u8250p(p
));
742 p
->serial_in
= port
->serial_in
;
743 if (port
->serial_out
)
744 p
->serial_out
= port
->serial_out
;
745 if (port
->handle_irq
)
746 p
->handle_irq
= port
->handle_irq
;
752 * serial8250_suspend_port - suspend one serial port
753 * @line: serial line number
755 * Suspend one serial port.
757 void serial8250_suspend_port(int line
)
759 struct uart_8250_port
*up
= &serial8250_ports
[line
];
760 struct uart_port
*port
= &up
->port
;
762 if (!console_suspend_enabled
&& uart_console(port
) &&
763 port
->type
!= PORT_8250
) {
764 unsigned char canary
= 0xa5;
765 serial_out(up
, UART_SCR
, canary
);
766 if (serial_in(up
, UART_SCR
) == canary
)
770 uart_suspend_port(&serial8250_reg
, port
);
772 EXPORT_SYMBOL(serial8250_suspend_port
);
775 * serial8250_resume_port - resume one serial port
776 * @line: serial line number
778 * Resume one serial port.
780 void serial8250_resume_port(int line
)
782 struct uart_8250_port
*up
= &serial8250_ports
[line
];
783 struct uart_port
*port
= &up
->port
;
787 if (up
->capabilities
& UART_NATSEMI
) {
788 /* Ensure it's still in high speed mode */
789 serial_port_out(port
, UART_LCR
, 0xE0);
791 ns16550a_goto_highspeed(up
);
793 serial_port_out(port
, UART_LCR
, 0);
794 port
->uartclk
= 921600*16;
796 uart_resume_port(&serial8250_reg
, port
);
798 EXPORT_SYMBOL(serial8250_resume_port
);
801 * Register a set of serial devices attached to a platform device. The
802 * list is terminated with a zero flags entry, which means we expect
803 * all entries to have at least UPF_BOOT_AUTOCONF set.
805 static int serial8250_probe(struct platform_device
*dev
)
807 struct plat_serial8250_port
*p
= dev_get_platdata(&dev
->dev
);
808 struct uart_8250_port uart
;
809 int ret
, i
, irqflag
= 0;
811 memset(&uart
, 0, sizeof(uart
));
814 irqflag
= IRQF_SHARED
;
816 for (i
= 0; p
&& p
->flags
!= 0; p
++, i
++) {
817 uart
.port
.iobase
= p
->iobase
;
818 uart
.port
.membase
= p
->membase
;
819 uart
.port
.irq
= p
->irq
;
820 uart
.port
.irqflags
= p
->irqflags
;
821 uart
.port
.uartclk
= p
->uartclk
;
822 uart
.port
.regshift
= p
->regshift
;
823 uart
.port
.iotype
= p
->iotype
;
824 uart
.port
.flags
= p
->flags
;
825 uart
.port
.mapbase
= p
->mapbase
;
826 uart
.port
.hub6
= p
->hub6
;
827 uart
.port
.has_sysrq
= p
->has_sysrq
;
828 uart
.port
.private_data
= p
->private_data
;
829 uart
.port
.type
= p
->type
;
830 uart
.port
.serial_in
= p
->serial_in
;
831 uart
.port
.serial_out
= p
->serial_out
;
832 uart
.port
.handle_irq
= p
->handle_irq
;
833 uart
.port
.handle_break
= p
->handle_break
;
834 uart
.port
.set_termios
= p
->set_termios
;
835 uart
.port
.set_ldisc
= p
->set_ldisc
;
836 uart
.port
.get_mctrl
= p
->get_mctrl
;
837 uart
.port
.pm
= p
->pm
;
838 uart
.port
.dev
= &dev
->dev
;
839 uart
.port
.irqflags
|= irqflag
;
840 ret
= serial8250_register_8250_port(&uart
);
842 dev_err(&dev
->dev
, "unable to register port at index %d "
843 "(IO%lx MEM%llx IRQ%d): %d\n", i
,
844 p
->iobase
, (unsigned long long)p
->mapbase
,
852 * Remove serial ports registered against a platform device.
854 static int serial8250_remove(struct platform_device
*dev
)
858 for (i
= 0; i
< nr_uarts
; i
++) {
859 struct uart_8250_port
*up
= &serial8250_ports
[i
];
861 if (up
->port
.dev
== &dev
->dev
)
862 serial8250_unregister_port(i
);
867 static int serial8250_suspend(struct platform_device
*dev
, pm_message_t state
)
871 for (i
= 0; i
< UART_NR
; i
++) {
872 struct uart_8250_port
*up
= &serial8250_ports
[i
];
874 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
875 uart_suspend_port(&serial8250_reg
, &up
->port
);
881 static int serial8250_resume(struct platform_device
*dev
)
885 for (i
= 0; i
< UART_NR
; i
++) {
886 struct uart_8250_port
*up
= &serial8250_ports
[i
];
888 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
889 serial8250_resume_port(i
);
895 static struct platform_driver serial8250_isa_driver
= {
896 .probe
= serial8250_probe
,
897 .remove
= serial8250_remove
,
898 .suspend
= serial8250_suspend
,
899 .resume
= serial8250_resume
,
901 .name
= "serial8250",
906 * This "device" covers _all_ ISA 8250-compatible serial devices listed
907 * in the table in include/asm/serial.h
909 static struct platform_device
*serial8250_isa_devs
;
912 * serial8250_register_8250_port and serial8250_unregister_port allows for
913 * 16x50 serial ports to be configured at run-time, to support PCMCIA
914 * modems and PCI multiport cards.
916 static DEFINE_MUTEX(serial_mutex
);
918 static struct uart_8250_port
*serial8250_find_match_or_unused(struct uart_port
*port
)
923 * First, find a port entry which matches.
925 for (i
= 0; i
< nr_uarts
; i
++)
926 if (uart_match_port(&serial8250_ports
[i
].port
, port
))
927 return &serial8250_ports
[i
];
929 /* try line number first if still available */
931 if (i
< nr_uarts
&& serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
932 serial8250_ports
[i
].port
.iobase
== 0)
933 return &serial8250_ports
[i
];
935 * We didn't find a matching entry, so look for the first
936 * free entry. We look for one which hasn't been previously
937 * used (indicated by zero iobase).
939 for (i
= 0; i
< nr_uarts
; i
++)
940 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
941 serial8250_ports
[i
].port
.iobase
== 0)
942 return &serial8250_ports
[i
];
945 * That also failed. Last resort is to find any entry which
946 * doesn't have a real port associated with it.
948 for (i
= 0; i
< nr_uarts
; i
++)
949 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
)
950 return &serial8250_ports
[i
];
955 static void serial_8250_overrun_backoff_work(struct work_struct
*work
)
957 struct uart_8250_port
*up
=
958 container_of(to_delayed_work(work
), struct uart_8250_port
,
960 struct uart_port
*port
= &up
->port
;
963 spin_lock_irqsave(&port
->lock
, flags
);
964 up
->ier
|= UART_IER_RLSI
| UART_IER_RDI
;
965 up
->port
.read_status_mask
|= UART_LSR_DR
;
966 serial_out(up
, UART_IER
, up
->ier
);
967 spin_unlock_irqrestore(&port
->lock
, flags
);
971 * serial8250_register_8250_port - register a serial port
972 * @up: serial port template
974 * Configure the serial port specified by the request. If the
975 * port exists and is in use, it is hung up and unregistered
978 * The port is then probed and if necessary the IRQ is autodetected
979 * If this fails an error is returned.
981 * On success the port is ready to use and the line number is returned.
983 int serial8250_register_8250_port(struct uart_8250_port
*up
)
985 struct uart_8250_port
*uart
;
988 if (up
->port
.uartclk
== 0)
991 mutex_lock(&serial_mutex
);
993 uart
= serial8250_find_match_or_unused(&up
->port
);
994 if (uart
&& uart
->port
.type
!= PORT_8250_CIR
) {
995 struct mctrl_gpios
*gpios
;
998 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
1000 uart
->port
.iobase
= up
->port
.iobase
;
1001 uart
->port
.membase
= up
->port
.membase
;
1002 uart
->port
.irq
= up
->port
.irq
;
1003 uart
->port
.irqflags
= up
->port
.irqflags
;
1004 uart
->port
.uartclk
= up
->port
.uartclk
;
1005 uart
->port
.fifosize
= up
->port
.fifosize
;
1006 uart
->port
.regshift
= up
->port
.regshift
;
1007 uart
->port
.iotype
= up
->port
.iotype
;
1008 uart
->port
.flags
= up
->port
.flags
| UPF_BOOT_AUTOCONF
;
1009 uart
->bugs
= up
->bugs
;
1010 uart
->port
.mapbase
= up
->port
.mapbase
;
1011 uart
->port
.mapsize
= up
->port
.mapsize
;
1012 uart
->port
.private_data
= up
->port
.private_data
;
1013 uart
->tx_loadsz
= up
->tx_loadsz
;
1014 uart
->capabilities
= up
->capabilities
;
1015 uart
->port
.throttle
= up
->port
.throttle
;
1016 uart
->port
.unthrottle
= up
->port
.unthrottle
;
1017 uart
->port
.rs485_config
= up
->port
.rs485_config
;
1018 uart
->port
.rs485
= up
->port
.rs485
;
1019 uart
->rs485_start_tx
= up
->rs485_start_tx
;
1020 uart
->rs485_stop_tx
= up
->rs485_stop_tx
;
1021 uart
->dma
= up
->dma
;
1023 /* Take tx_loadsz from fifosize if it wasn't set separately */
1024 if (uart
->port
.fifosize
&& !uart
->tx_loadsz
)
1025 uart
->tx_loadsz
= uart
->port
.fifosize
;
1028 uart
->port
.dev
= up
->port
.dev
;
1029 ret
= uart_get_rs485_mode(&uart
->port
);
1034 if (up
->port
.flags
& UPF_FIXED_TYPE
)
1035 uart
->port
.type
= up
->port
.type
;
1038 * Only call mctrl_gpio_init(), if the device has no ACPI
1041 if (!has_acpi_companion(uart
->port
.dev
)) {
1042 gpios
= mctrl_gpio_init(&uart
->port
, 0);
1043 if (IS_ERR(gpios
)) {
1044 ret
= PTR_ERR(gpios
);
1047 uart
->gpios
= gpios
;
1051 serial8250_set_defaults(uart
);
1053 /* Possibly override default I/O functions. */
1054 if (up
->port
.serial_in
)
1055 uart
->port
.serial_in
= up
->port
.serial_in
;
1056 if (up
->port
.serial_out
)
1057 uart
->port
.serial_out
= up
->port
.serial_out
;
1058 if (up
->port
.handle_irq
)
1059 uart
->port
.handle_irq
= up
->port
.handle_irq
;
1060 /* Possibly override set_termios call */
1061 if (up
->port
.set_termios
)
1062 uart
->port
.set_termios
= up
->port
.set_termios
;
1063 if (up
->port
.set_ldisc
)
1064 uart
->port
.set_ldisc
= up
->port
.set_ldisc
;
1065 if (up
->port
.get_mctrl
)
1066 uart
->port
.get_mctrl
= up
->port
.get_mctrl
;
1067 if (up
->port
.set_mctrl
)
1068 uart
->port
.set_mctrl
= up
->port
.set_mctrl
;
1069 if (up
->port
.get_divisor
)
1070 uart
->port
.get_divisor
= up
->port
.get_divisor
;
1071 if (up
->port
.set_divisor
)
1072 uart
->port
.set_divisor
= up
->port
.set_divisor
;
1073 if (up
->port
.startup
)
1074 uart
->port
.startup
= up
->port
.startup
;
1075 if (up
->port
.shutdown
)
1076 uart
->port
.shutdown
= up
->port
.shutdown
;
1078 uart
->port
.pm
= up
->port
.pm
;
1079 if (up
->port
.handle_break
)
1080 uart
->port
.handle_break
= up
->port
.handle_break
;
1082 uart
->dl_read
= up
->dl_read
;
1084 uart
->dl_write
= up
->dl_write
;
1086 if (uart
->port
.type
!= PORT_8250_CIR
) {
1087 if (serial8250_isa_config
!= NULL
)
1088 serial8250_isa_config(0, &uart
->port
,
1089 &uart
->capabilities
);
1091 serial8250_apply_quirks(uart
);
1092 ret
= uart_add_one_port(&serial8250_reg
,
1097 ret
= uart
->port
.line
;
1099 dev_info(uart
->port
.dev
,
1100 "skipping CIR port at 0x%lx / 0x%llx, IRQ %d\n",
1102 (unsigned long long)uart
->port
.mapbase
,
1108 /* Initialise interrupt backoff work if required */
1109 if (up
->overrun_backoff_time_ms
> 0) {
1110 uart
->overrun_backoff_time_ms
=
1111 up
->overrun_backoff_time_ms
;
1112 INIT_DELAYED_WORK(&uart
->overrun_backoff
,
1113 serial_8250_overrun_backoff_work
);
1115 uart
->overrun_backoff_time_ms
= 0;
1119 mutex_unlock(&serial_mutex
);
1124 uart
->port
.dev
= NULL
;
1125 mutex_unlock(&serial_mutex
);
1128 EXPORT_SYMBOL(serial8250_register_8250_port
);
1131 * serial8250_unregister_port - remove a 16x50 serial port at runtime
1132 * @line: serial line number
1134 * Remove one serial port. This may not be called from interrupt
1135 * context. We hand the port back to the our control.
1137 void serial8250_unregister_port(int line
)
1139 struct uart_8250_port
*uart
= &serial8250_ports
[line
];
1141 mutex_lock(&serial_mutex
);
1144 unsigned long flags
;
1146 spin_lock_irqsave(&uart
->port
.lock
, flags
);
1147 serial8250_em485_destroy(uart
);
1148 spin_unlock_irqrestore(&uart
->port
.lock
, flags
);
1151 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
1152 if (serial8250_isa_devs
) {
1153 uart
->port
.flags
&= ~UPF_BOOT_AUTOCONF
;
1154 uart
->port
.type
= PORT_UNKNOWN
;
1155 uart
->port
.dev
= &serial8250_isa_devs
->dev
;
1156 uart
->capabilities
= 0;
1157 serial8250_apply_quirks(uart
);
1158 uart_add_one_port(&serial8250_reg
, &uart
->port
);
1160 uart
->port
.dev
= NULL
;
1162 mutex_unlock(&serial_mutex
);
1164 EXPORT_SYMBOL(serial8250_unregister_port
);
1166 static int __init
serial8250_init(void)
1173 serial8250_isa_init_ports();
1175 pr_info("Serial: 8250/16550 driver, %d ports, IRQ sharing %sabled\n",
1176 nr_uarts
, share_irqs
? "en" : "dis");
1179 ret
= sunserial_register_minors(&serial8250_reg
, UART_NR
);
1181 serial8250_reg
.nr
= UART_NR
;
1182 ret
= uart_register_driver(&serial8250_reg
);
1187 ret
= serial8250_pnp_init();
1189 goto unreg_uart_drv
;
1191 serial8250_isa_devs
= platform_device_alloc("serial8250",
1192 PLAT8250_DEV_LEGACY
);
1193 if (!serial8250_isa_devs
) {
1198 ret
= platform_device_add(serial8250_isa_devs
);
1202 serial8250_register_ports(&serial8250_reg
, &serial8250_isa_devs
->dev
);
1204 ret
= platform_driver_register(&serial8250_isa_driver
);
1208 platform_device_del(serial8250_isa_devs
);
1210 platform_device_put(serial8250_isa_devs
);
1212 serial8250_pnp_exit();
1215 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1217 uart_unregister_driver(&serial8250_reg
);
1223 static void __exit
serial8250_exit(void)
1225 struct platform_device
*isa_dev
= serial8250_isa_devs
;
1228 * This tells serial8250_unregister_port() not to re-register
1229 * the ports (thereby making serial8250_isa_driver permanently
1232 serial8250_isa_devs
= NULL
;
1234 platform_driver_unregister(&serial8250_isa_driver
);
1235 platform_device_unregister(isa_dev
);
1237 serial8250_pnp_exit();
1240 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1242 uart_unregister_driver(&serial8250_reg
);
1246 module_init(serial8250_init
);
1247 module_exit(serial8250_exit
);
1249 MODULE_LICENSE("GPL");
1250 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
1252 module_param_hw(share_irqs
, uint
, other
, 0644);
1253 MODULE_PARM_DESC(share_irqs
, "Share IRQs with other non-8250/16x50 devices (unsafe)");
1255 module_param(nr_uarts
, uint
, 0644);
1256 MODULE_PARM_DESC(nr_uarts
, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS
) ")");
1258 module_param(skip_txen_test
, uint
, 0644);
1259 MODULE_PARM_DESC(skip_txen_test
, "Skip checking for the TXEN bug at init time");
1261 #ifdef CONFIG_SERIAL_8250_RSA
1262 module_param_hw_array(probe_rsa
, ulong
, ioport
, &probe_rsa_count
, 0444);
1263 MODULE_PARM_DESC(probe_rsa
, "Probe I/O ports for RSA");
1265 MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR
);
1267 #ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
1269 /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
1270 * working as well for the module options so we don't break people. We
1271 * need to keep the names identical and the convenient macros will happily
1272 * refuse to let us do that by failing the build with redefinition errors
1273 * of global variables. So we stick them inside a dummy function to avoid
1274 * those conflicts. The options still get parsed, and the redefined
1275 * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
1277 * This is hacky. I'm sorry.
1279 static void __used
s8250_options(void)
1281 #undef MODULE_PARAM_PREFIX
1282 #define MODULE_PARAM_PREFIX "8250_core."
1284 module_param_cb(share_irqs
, ¶m_ops_uint
, &share_irqs
, 0644);
1285 module_param_cb(nr_uarts
, ¶m_ops_uint
, &nr_uarts
, 0644);
1286 module_param_cb(skip_txen_test
, ¶m_ops_uint
, &skip_txen_test
, 0644);
1287 #ifdef CONFIG_SERIAL_8250_RSA
1288 __module_param_call(MODULE_PARAM_PREFIX
, probe_rsa
,
1289 ¶m_array_ops
, .arr
= &__param_arr_probe_rsa
,
1294 MODULE_ALIAS("8250_core");