2 * Universal/legacy 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 * Supports: ISA-compatible 8250/16550 ports
10 * early_serial_setup() ports
11 * userspace-configurable "phantom" ports
12 * "serial8250" platform devices
13 * serial8250_register_8250_port() ports
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
21 #include <linux/module.h>
22 #include <linux/moduleparam.h>
23 #include <linux/ioport.h>
24 #include <linux/init.h>
25 #include <linux/console.h>
26 #include <linux/sysrq.h>
27 #include <linux/delay.h>
28 #include <linux/platform_device.h>
29 #include <linux/tty.h>
30 #include <linux/ratelimit.h>
31 #include <linux/tty_flip.h>
32 #include <linux/serial.h>
33 #include <linux/serial_8250.h>
34 #include <linux/nmi.h>
35 #include <linux/mutex.h>
36 #include <linux/slab.h>
37 #include <linux/uaccess.h>
38 #include <linux/pm_runtime.h>
41 #include <linux/sunserialcore.h>
50 * share_irqs - whether we pass IRQF_SHARED to request_irq(). This option
51 * is unsafe when used on edge-triggered interrupts.
53 static unsigned int share_irqs
= SERIAL8250_SHARE_IRQS
;
55 static unsigned int nr_uarts
= CONFIG_SERIAL_8250_RUNTIME_UARTS
;
57 static struct uart_driver serial8250_reg
;
59 static unsigned int skip_txen_test
; /* force skip of txen test at init time */
61 #define PASS_LIMIT 512
63 #include <asm/serial.h>
65 * SERIAL_PORT_DFNS tells us about built-in ports that have no
66 * standard enumeration mechanism. Platforms that can find all
67 * serial ports via mechanisms like ACPI or PCI need not supply it.
69 #ifndef SERIAL_PORT_DFNS
70 #define SERIAL_PORT_DFNS
73 static const struct old_serial_port old_serial_port
[] = {
74 SERIAL_PORT_DFNS
/* defined in asm/serial.h */
77 #define UART_NR CONFIG_SERIAL_8250_NR_UARTS
79 #ifdef CONFIG_SERIAL_8250_RSA
81 #define PORT_RSA_MAX 4
82 static unsigned long probe_rsa
[PORT_RSA_MAX
];
83 static unsigned int probe_rsa_count
;
84 #endif /* CONFIG_SERIAL_8250_RSA */
87 struct hlist_node node
;
89 spinlock_t lock
; /* Protects list not the hash */
90 struct list_head
*head
;
93 #define NR_IRQ_HASH 32 /* Can be adjusted later */
94 static struct hlist_head irq_lists
[NR_IRQ_HASH
];
95 static DEFINE_MUTEX(hash_mutex
); /* Used to walk the hash */
98 * This is the serial driver's interrupt routine.
100 * Arjan thinks the old way was overly complex, so it got simplified.
101 * Alan disagrees, saying that need the complexity to handle the weird
102 * nature of ISA shared interrupts. (This is a special exception.)
104 * In order to handle ISA shared interrupts properly, we need to check
105 * that all ports have been serviced, and therefore the ISA interrupt
106 * line has been de-asserted.
108 * This means we need to loop through all ports. checking that they
109 * don't have an interrupt pending.
111 static irqreturn_t
serial8250_interrupt(int irq
, void *dev_id
)
113 struct irq_info
*i
= dev_id
;
114 struct list_head
*l
, *end
= NULL
;
115 int pass_counter
= 0, handled
= 0;
117 pr_debug("%s(%d): start\n", __func__
, irq
);
123 struct uart_8250_port
*up
;
124 struct uart_port
*port
;
126 up
= list_entry(l
, struct uart_8250_port
, list
);
129 if (port
->handle_irq(port
)) {
132 } else if (end
== NULL
)
137 if (l
== i
->head
&& pass_counter
++ > PASS_LIMIT
) {
138 /* If we hit this, we're dead. */
139 printk_ratelimited(KERN_ERR
140 "serial8250: too much work for irq%d\n", irq
);
145 spin_unlock(&i
->lock
);
147 pr_debug("%s(%d): end\n", __func__
, irq
);
149 return IRQ_RETVAL(handled
);
153 * To support ISA shared interrupts, we need to have one interrupt
154 * handler that ensures that the IRQ line has been deasserted
155 * before returning. Failing to do this will result in the IRQ
156 * line being stuck active, and, since ISA irqs are edge triggered,
157 * no more IRQs will be seen.
159 static void serial_do_unlink(struct irq_info
*i
, struct uart_8250_port
*up
)
161 spin_lock_irq(&i
->lock
);
163 if (!list_empty(i
->head
)) {
164 if (i
->head
== &up
->list
)
165 i
->head
= i
->head
->next
;
168 BUG_ON(i
->head
!= &up
->list
);
171 spin_unlock_irq(&i
->lock
);
172 /* List empty so throw away the hash node */
173 if (i
->head
== NULL
) {
179 static int serial_link_irq_chain(struct uart_8250_port
*up
)
181 struct hlist_head
*h
;
182 struct hlist_node
*n
;
184 int ret
, irq_flags
= up
->port
.flags
& UPF_SHARE_IRQ
? IRQF_SHARED
: 0;
186 mutex_lock(&hash_mutex
);
188 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
190 hlist_for_each(n
, h
) {
191 i
= hlist_entry(n
, struct irq_info
, node
);
192 if (i
->irq
== up
->port
.irq
)
197 i
= kzalloc(sizeof(struct irq_info
), GFP_KERNEL
);
199 mutex_unlock(&hash_mutex
);
202 spin_lock_init(&i
->lock
);
203 i
->irq
= up
->port
.irq
;
204 hlist_add_head(&i
->node
, h
);
206 mutex_unlock(&hash_mutex
);
208 spin_lock_irq(&i
->lock
);
211 list_add(&up
->list
, i
->head
);
212 spin_unlock_irq(&i
->lock
);
216 INIT_LIST_HEAD(&up
->list
);
218 spin_unlock_irq(&i
->lock
);
219 irq_flags
|= up
->port
.irqflags
;
220 ret
= request_irq(up
->port
.irq
, serial8250_interrupt
,
221 irq_flags
, "serial", i
);
223 serial_do_unlink(i
, up
);
229 static void serial_unlink_irq_chain(struct uart_8250_port
*up
)
232 * yes, some broken gcc emit "warning: 'i' may be used uninitialized"
233 * but no, we are not going to take a patch that assigns NULL below.
236 struct hlist_node
*n
;
237 struct hlist_head
*h
;
239 mutex_lock(&hash_mutex
);
241 h
= &irq_lists
[up
->port
.irq
% NR_IRQ_HASH
];
243 hlist_for_each(n
, h
) {
244 i
= hlist_entry(n
, struct irq_info
, node
);
245 if (i
->irq
== up
->port
.irq
)
250 BUG_ON(i
->head
== NULL
);
252 if (list_empty(i
->head
))
253 free_irq(up
->port
.irq
, i
);
255 serial_do_unlink(i
, up
);
256 mutex_unlock(&hash_mutex
);
260 * This function is used to handle ports that do not have an
261 * interrupt. This doesn't work very well for 16450's, but gives
262 * barely passable results for a 16550A. (Although at the expense
263 * of much CPU overhead).
265 static void serial8250_timeout(unsigned long data
)
267 struct uart_8250_port
*up
= (struct uart_8250_port
*)data
;
269 up
->port
.handle_irq(&up
->port
);
270 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(&up
->port
));
273 static void serial8250_backup_timeout(unsigned long data
)
275 struct uart_8250_port
*up
= (struct uart_8250_port
*)data
;
276 unsigned int iir
, ier
= 0, lsr
;
279 spin_lock_irqsave(&up
->port
.lock
, flags
);
282 * Must disable interrupts or else we risk racing with the interrupt
286 ier
= serial_in(up
, UART_IER
);
287 serial_out(up
, UART_IER
, 0);
290 iir
= serial_in(up
, UART_IIR
);
293 * This should be a safe test for anyone who doesn't trust the
294 * IIR bits on their UART, but it's specifically designed for
295 * the "Diva" UART used on the management processor on many HP
296 * ia64 and parisc boxes.
298 lsr
= serial_in(up
, UART_LSR
);
299 up
->lsr_saved_flags
|= lsr
& LSR_SAVE_FLAGS
;
300 if ((iir
& UART_IIR_NO_INT
) && (up
->ier
& UART_IER_THRI
) &&
301 (!uart_circ_empty(&up
->port
.state
->xmit
) || up
->port
.x_char
) &&
302 (lsr
& UART_LSR_THRE
)) {
303 iir
&= ~(UART_IIR_ID
| UART_IIR_NO_INT
);
304 iir
|= UART_IIR_THRI
;
307 if (!(iir
& UART_IIR_NO_INT
))
308 serial8250_tx_chars(up
);
311 serial_out(up
, UART_IER
, ier
);
313 spin_unlock_irqrestore(&up
->port
.lock
, flags
);
315 /* Standard timer interval plus 0.2s to keep the port running */
316 mod_timer(&up
->timer
,
317 jiffies
+ uart_poll_timeout(&up
->port
) + HZ
/ 5);
320 static int univ8250_setup_irq(struct uart_8250_port
*up
)
322 struct uart_port
*port
= &up
->port
;
326 * The above check will only give an accurate result the first time
327 * the port is opened so this value needs to be preserved.
329 if (up
->bugs
& UART_BUG_THRE
) {
330 pr_debug("ttyS%d - using backup timer\n", serial_index(port
));
332 up
->timer
.function
= serial8250_backup_timeout
;
333 up
->timer
.data
= (unsigned long)up
;
334 mod_timer(&up
->timer
, jiffies
+
335 uart_poll_timeout(port
) + HZ
/ 5);
339 * If the "interrupt" for this port doesn't correspond with any
340 * hardware interrupt, we use a timer-based system. The original
341 * driver used to do this with IRQ0.
344 up
->timer
.data
= (unsigned long)up
;
345 mod_timer(&up
->timer
, jiffies
+ uart_poll_timeout(port
));
347 retval
= serial_link_irq_chain(up
);
352 static void univ8250_release_irq(struct uart_8250_port
*up
)
354 struct uart_port
*port
= &up
->port
;
356 del_timer_sync(&up
->timer
);
357 up
->timer
.function
= serial8250_timeout
;
359 serial_unlink_irq_chain(up
);
362 #ifdef CONFIG_SERIAL_8250_RSA
363 static int serial8250_request_rsa_resource(struct uart_8250_port
*up
)
365 unsigned long start
= UART_RSA_BASE
<< up
->port
.regshift
;
366 unsigned int size
= 8 << up
->port
.regshift
;
367 struct uart_port
*port
= &up
->port
;
370 switch (port
->iotype
) {
373 start
+= port
->iobase
;
374 if (request_region(start
, size
, "serial-rsa"))
384 static void serial8250_release_rsa_resource(struct uart_8250_port
*up
)
386 unsigned long offset
= UART_RSA_BASE
<< up
->port
.regshift
;
387 unsigned int size
= 8 << up
->port
.regshift
;
388 struct uart_port
*port
= &up
->port
;
390 switch (port
->iotype
) {
393 release_region(port
->iobase
+ offset
, size
);
399 static const struct uart_ops
*base_ops
;
400 static struct uart_ops univ8250_port_ops
;
402 static const struct uart_8250_ops univ8250_driver_ops
= {
403 .setup_irq
= univ8250_setup_irq
,
404 .release_irq
= univ8250_release_irq
,
407 static struct uart_8250_port serial8250_ports
[UART_NR
];
410 * serial8250_get_port - retrieve struct uart_8250_port
411 * @line: serial line number
413 * This function retrieves struct uart_8250_port for the specific line.
414 * This struct *must* *not* be used to perform a 8250 or serial core operation
415 * which is not accessible otherwise. Its only purpose is to make the struct
416 * accessible to the runtime-pm callbacks for context suspend/restore.
417 * The lock assumption made here is none because runtime-pm suspend/resume
418 * callbacks should not be invoked if there is any operation performed on the
421 struct uart_8250_port
*serial8250_get_port(int line
)
423 return &serial8250_ports
[line
];
425 EXPORT_SYMBOL_GPL(serial8250_get_port
);
427 static void (*serial8250_isa_config
)(int port
, struct uart_port
*up
,
430 void serial8250_set_isa_configurator(
431 void (*v
)(int port
, struct uart_port
*up
, u32
*capabilities
))
433 serial8250_isa_config
= v
;
435 EXPORT_SYMBOL(serial8250_set_isa_configurator
);
437 #ifdef CONFIG_SERIAL_8250_RSA
439 static void univ8250_config_port(struct uart_port
*port
, int flags
)
441 struct uart_8250_port
*up
= up_to_u8250p(port
);
443 up
->probe
&= ~UART_PROBE_RSA
;
444 if (port
->type
== PORT_RSA
) {
445 if (serial8250_request_rsa_resource(up
) == 0)
446 up
->probe
|= UART_PROBE_RSA
;
447 } else if (flags
& UART_CONFIG_TYPE
) {
450 for (i
= 0; i
< probe_rsa_count
; i
++) {
451 if (probe_rsa
[i
] == up
->port
.iobase
) {
452 if (serial8250_request_rsa_resource(up
) == 0)
453 up
->probe
|= UART_PROBE_RSA
;
459 base_ops
->config_port(port
, flags
);
461 if (port
->type
!= PORT_RSA
&& up
->probe
& UART_PROBE_RSA
)
462 serial8250_release_rsa_resource(up
);
465 static int univ8250_request_port(struct uart_port
*port
)
467 struct uart_8250_port
*up
= up_to_u8250p(port
);
470 ret
= base_ops
->request_port(port
);
471 if (ret
== 0 && port
->type
== PORT_RSA
) {
472 ret
= serial8250_request_rsa_resource(up
);
474 base_ops
->release_port(port
);
480 static void univ8250_release_port(struct uart_port
*port
)
482 struct uart_8250_port
*up
= up_to_u8250p(port
);
484 if (port
->type
== PORT_RSA
)
485 serial8250_release_rsa_resource(up
);
486 base_ops
->release_port(port
);
489 static void univ8250_rsa_support(struct uart_ops
*ops
)
491 ops
->config_port
= univ8250_config_port
;
492 ops
->request_port
= univ8250_request_port
;
493 ops
->release_port
= univ8250_release_port
;
497 #define univ8250_rsa_support(x) do { } while (0)
498 #endif /* CONFIG_SERIAL_8250_RSA */
500 static void __init
serial8250_isa_init_ports(void)
502 struct uart_8250_port
*up
;
503 static int first
= 1;
510 if (nr_uarts
> UART_NR
)
513 for (i
= 0; i
< nr_uarts
; i
++) {
514 struct uart_8250_port
*up
= &serial8250_ports
[i
];
515 struct uart_port
*port
= &up
->port
;
518 serial8250_init_port(up
);
520 base_ops
= port
->ops
;
521 port
->ops
= &univ8250_port_ops
;
523 init_timer(&up
->timer
);
524 up
->timer
.function
= serial8250_timeout
;
526 up
->ops
= &univ8250_driver_ops
;
529 * ALPHA_KLUDGE_MCR needs to be killed.
531 up
->mcr_mask
= ~ALPHA_KLUDGE_MCR
;
532 up
->mcr_force
= ALPHA_KLUDGE_MCR
;
535 /* chain base port ops to support Remote Supervisor Adapter */
536 univ8250_port_ops
= *base_ops
;
537 univ8250_rsa_support(&univ8250_port_ops
);
540 irqflag
= IRQF_SHARED
;
542 for (i
= 0, up
= serial8250_ports
;
543 i
< ARRAY_SIZE(old_serial_port
) && i
< nr_uarts
;
545 struct uart_port
*port
= &up
->port
;
547 port
->iobase
= old_serial_port
[i
].port
;
548 port
->irq
= irq_canonicalize(old_serial_port
[i
].irq
);
550 port
->uartclk
= old_serial_port
[i
].baud_base
* 16;
551 port
->flags
= old_serial_port
[i
].flags
;
553 port
->membase
= old_serial_port
[i
].iomem_base
;
554 port
->iotype
= old_serial_port
[i
].io_type
;
555 port
->regshift
= old_serial_port
[i
].iomem_reg_shift
;
556 serial8250_set_defaults(up
);
558 port
->irqflags
|= irqflag
;
559 if (serial8250_isa_config
!= NULL
)
560 serial8250_isa_config(i
, &up
->port
, &up
->capabilities
);
565 serial8250_register_ports(struct uart_driver
*drv
, struct device
*dev
)
569 for (i
= 0; i
< nr_uarts
; i
++) {
570 struct uart_8250_port
*up
= &serial8250_ports
[i
];
572 if (up
->port
.type
== PORT_8250_CIR
)
581 up
->port
.flags
|= UPF_NO_TXEN_TEST
;
583 uart_add_one_port(drv
, &up
->port
);
587 #ifdef CONFIG_SERIAL_8250_CONSOLE
589 static void univ8250_console_write(struct console
*co
, const char *s
,
592 struct uart_8250_port
*up
= &serial8250_ports
[co
->index
];
594 serial8250_console_write(up
, s
, count
);
597 static int univ8250_console_setup(struct console
*co
, char *options
)
599 struct uart_port
*port
;
603 * Check whether an invalid uart number has been specified, and
604 * if so, search for the first available port that does have
607 if (co
->index
>= nr_uarts
)
609 port
= &serial8250_ports
[co
->index
].port
;
610 /* link port to console */
613 retval
= serial8250_console_setup(port
, options
, false);
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 .match
= univ8250_console_match
,
678 .flags
= CON_PRINTBUFFER
| CON_ANYTIME
| CON_CONSDEV
,
680 .data
= &serial8250_reg
,
683 static int __init
univ8250_console_init(void)
688 serial8250_isa_init_ports();
689 register_console(&univ8250_console
);
692 console_initcall(univ8250_console_init
);
694 #define SERIAL8250_CONSOLE (&univ8250_console)
696 #define SERIAL8250_CONSOLE NULL
699 static struct uart_driver serial8250_reg
= {
700 .owner
= THIS_MODULE
,
701 .driver_name
= "serial",
705 .cons
= SERIAL8250_CONSOLE
,
709 * early_serial_setup - early registration for 8250 ports
711 * Setup an 8250 port structure prior to console initialisation. Use
712 * after console initialisation will cause undefined behaviour.
714 int __init
early_serial_setup(struct uart_port
*port
)
718 if (port
->line
>= ARRAY_SIZE(serial8250_ports
) || nr_uarts
== 0)
721 serial8250_isa_init_ports();
722 p
= &serial8250_ports
[port
->line
].port
;
723 p
->iobase
= port
->iobase
;
724 p
->membase
= port
->membase
;
726 p
->irqflags
= port
->irqflags
;
727 p
->uartclk
= port
->uartclk
;
728 p
->fifosize
= port
->fifosize
;
729 p
->regshift
= port
->regshift
;
730 p
->iotype
= port
->iotype
;
731 p
->flags
= port
->flags
;
732 p
->mapbase
= port
->mapbase
;
733 p
->mapsize
= port
->mapsize
;
734 p
->private_data
= port
->private_data
;
735 p
->type
= port
->type
;
736 p
->line
= port
->line
;
738 serial8250_set_defaults(up_to_u8250p(p
));
741 p
->serial_in
= port
->serial_in
;
742 if (port
->serial_out
)
743 p
->serial_out
= port
->serial_out
;
744 if (port
->handle_irq
)
745 p
->handle_irq
= port
->handle_irq
;
751 * serial8250_suspend_port - suspend one serial port
752 * @line: serial line number
754 * Suspend one serial port.
756 void serial8250_suspend_port(int line
)
758 struct uart_8250_port
*up
= &serial8250_ports
[line
];
759 struct uart_port
*port
= &up
->port
;
761 if (!console_suspend_enabled
&& uart_console(port
) &&
762 port
->type
!= PORT_8250
) {
763 unsigned char canary
= 0xa5;
764 serial_out(up
, UART_SCR
, canary
);
765 if (serial_in(up
, UART_SCR
) == canary
)
769 uart_suspend_port(&serial8250_reg
, port
);
771 EXPORT_SYMBOL(serial8250_suspend_port
);
774 * serial8250_resume_port - resume one serial port
775 * @line: serial line number
777 * Resume one serial port.
779 void serial8250_resume_port(int line
)
781 struct uart_8250_port
*up
= &serial8250_ports
[line
];
782 struct uart_port
*port
= &up
->port
;
786 if (up
->capabilities
& UART_NATSEMI
) {
787 /* Ensure it's still in high speed mode */
788 serial_port_out(port
, UART_LCR
, 0xE0);
790 ns16550a_goto_highspeed(up
);
792 serial_port_out(port
, UART_LCR
, 0);
793 port
->uartclk
= 921600*16;
795 uart_resume_port(&serial8250_reg
, port
);
797 EXPORT_SYMBOL(serial8250_resume_port
);
800 * Register a set of serial devices attached to a platform device. The
801 * list is terminated with a zero flags entry, which means we expect
802 * all entries to have at least UPF_BOOT_AUTOCONF set.
804 static int serial8250_probe(struct platform_device
*dev
)
806 struct plat_serial8250_port
*p
= dev_get_platdata(&dev
->dev
);
807 struct uart_8250_port uart
;
808 int ret
, i
, irqflag
= 0;
810 memset(&uart
, 0, sizeof(uart
));
813 irqflag
= IRQF_SHARED
;
815 for (i
= 0; p
&& p
->flags
!= 0; p
++, i
++) {
816 uart
.port
.iobase
= p
->iobase
;
817 uart
.port
.membase
= p
->membase
;
818 uart
.port
.irq
= p
->irq
;
819 uart
.port
.irqflags
= p
->irqflags
;
820 uart
.port
.uartclk
= p
->uartclk
;
821 uart
.port
.regshift
= p
->regshift
;
822 uart
.port
.iotype
= p
->iotype
;
823 uart
.port
.flags
= p
->flags
;
824 uart
.port
.mapbase
= p
->mapbase
;
825 uart
.port
.hub6
= p
->hub6
;
826 uart
.port
.private_data
= p
->private_data
;
827 uart
.port
.type
= p
->type
;
828 uart
.port
.serial_in
= p
->serial_in
;
829 uart
.port
.serial_out
= p
->serial_out
;
830 uart
.port
.handle_irq
= p
->handle_irq
;
831 uart
.port
.handle_break
= p
->handle_break
;
832 uart
.port
.set_termios
= p
->set_termios
;
833 uart
.port
.set_ldisc
= p
->set_ldisc
;
834 uart
.port
.get_mctrl
= p
->get_mctrl
;
835 uart
.port
.pm
= p
->pm
;
836 uart
.port
.dev
= &dev
->dev
;
837 uart
.port
.irqflags
|= irqflag
;
838 ret
= serial8250_register_8250_port(&uart
);
840 dev_err(&dev
->dev
, "unable to register port at index %d "
841 "(IO%lx MEM%llx IRQ%d): %d\n", i
,
842 p
->iobase
, (unsigned long long)p
->mapbase
,
850 * Remove serial ports registered against a platform device.
852 static int serial8250_remove(struct platform_device
*dev
)
856 for (i
= 0; i
< nr_uarts
; i
++) {
857 struct uart_8250_port
*up
= &serial8250_ports
[i
];
859 if (up
->port
.dev
== &dev
->dev
)
860 serial8250_unregister_port(i
);
865 static int serial8250_suspend(struct platform_device
*dev
, pm_message_t state
)
869 for (i
= 0; i
< UART_NR
; i
++) {
870 struct uart_8250_port
*up
= &serial8250_ports
[i
];
872 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
873 uart_suspend_port(&serial8250_reg
, &up
->port
);
879 static int serial8250_resume(struct platform_device
*dev
)
883 for (i
= 0; i
< UART_NR
; i
++) {
884 struct uart_8250_port
*up
= &serial8250_ports
[i
];
886 if (up
->port
.type
!= PORT_UNKNOWN
&& up
->port
.dev
== &dev
->dev
)
887 serial8250_resume_port(i
);
893 static struct platform_driver serial8250_isa_driver
= {
894 .probe
= serial8250_probe
,
895 .remove
= serial8250_remove
,
896 .suspend
= serial8250_suspend
,
897 .resume
= serial8250_resume
,
899 .name
= "serial8250",
904 * This "device" covers _all_ ISA 8250-compatible serial devices listed
905 * in the table in include/asm/serial.h
907 static struct platform_device
*serial8250_isa_devs
;
910 * serial8250_register_8250_port and serial8250_unregister_port allows for
911 * 16x50 serial ports to be configured at run-time, to support PCMCIA
912 * modems and PCI multiport cards.
914 static DEFINE_MUTEX(serial_mutex
);
916 static struct uart_8250_port
*serial8250_find_match_or_unused(struct uart_port
*port
)
921 * First, find a port entry which matches.
923 for (i
= 0; i
< nr_uarts
; i
++)
924 if (uart_match_port(&serial8250_ports
[i
].port
, port
))
925 return &serial8250_ports
[i
];
927 /* try line number first if still available */
929 if (i
< nr_uarts
&& serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
930 serial8250_ports
[i
].port
.iobase
== 0)
931 return &serial8250_ports
[i
];
933 * We didn't find a matching entry, so look for the first
934 * free entry. We look for one which hasn't been previously
935 * used (indicated by zero iobase).
937 for (i
= 0; i
< nr_uarts
; i
++)
938 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
&&
939 serial8250_ports
[i
].port
.iobase
== 0)
940 return &serial8250_ports
[i
];
943 * That also failed. Last resort is to find any entry which
944 * doesn't have a real port associated with it.
946 for (i
= 0; i
< nr_uarts
; i
++)
947 if (serial8250_ports
[i
].port
.type
== PORT_UNKNOWN
)
948 return &serial8250_ports
[i
];
954 * serial8250_register_8250_port - register a serial port
955 * @up: serial port template
957 * Configure the serial port specified by the request. If the
958 * port exists and is in use, it is hung up and unregistered
961 * The port is then probed and if necessary the IRQ is autodetected
962 * If this fails an error is returned.
964 * On success the port is ready to use and the line number is returned.
966 int serial8250_register_8250_port(struct uart_8250_port
*up
)
968 struct uart_8250_port
*uart
;
971 if (up
->port
.uartclk
== 0)
974 mutex_lock(&serial_mutex
);
976 uart
= serial8250_find_match_or_unused(&up
->port
);
977 if (uart
&& uart
->port
.type
!= PORT_8250_CIR
) {
979 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
981 uart
->port
.iobase
= up
->port
.iobase
;
982 uart
->port
.membase
= up
->port
.membase
;
983 uart
->port
.irq
= up
->port
.irq
;
984 uart
->port
.irqflags
= up
->port
.irqflags
;
985 uart
->port
.uartclk
= up
->port
.uartclk
;
986 uart
->port
.fifosize
= up
->port
.fifosize
;
987 uart
->port
.regshift
= up
->port
.regshift
;
988 uart
->port
.iotype
= up
->port
.iotype
;
989 uart
->port
.flags
= up
->port
.flags
| UPF_BOOT_AUTOCONF
;
990 uart
->bugs
= up
->bugs
;
991 uart
->port
.mapbase
= up
->port
.mapbase
;
992 uart
->port
.mapsize
= up
->port
.mapsize
;
993 uart
->port
.private_data
= up
->port
.private_data
;
994 uart
->tx_loadsz
= up
->tx_loadsz
;
995 uart
->capabilities
= up
->capabilities
;
996 uart
->port
.throttle
= up
->port
.throttle
;
997 uart
->port
.unthrottle
= up
->port
.unthrottle
;
998 uart
->port
.rs485_config
= up
->port
.rs485_config
;
999 uart
->port
.rs485
= up
->port
.rs485
;
1000 uart
->dma
= up
->dma
;
1002 /* Take tx_loadsz from fifosize if it wasn't set separately */
1003 if (uart
->port
.fifosize
&& !uart
->tx_loadsz
)
1004 uart
->tx_loadsz
= uart
->port
.fifosize
;
1007 uart
->port
.dev
= up
->port
.dev
;
1010 uart
->port
.flags
|= UPF_NO_TXEN_TEST
;
1012 if (up
->port
.flags
& UPF_FIXED_TYPE
)
1013 uart
->port
.type
= up
->port
.type
;
1015 serial8250_set_defaults(uart
);
1017 /* Possibly override default I/O functions. */
1018 if (up
->port
.serial_in
)
1019 uart
->port
.serial_in
= up
->port
.serial_in
;
1020 if (up
->port
.serial_out
)
1021 uart
->port
.serial_out
= up
->port
.serial_out
;
1022 if (up
->port
.handle_irq
)
1023 uart
->port
.handle_irq
= up
->port
.handle_irq
;
1024 /* Possibly override set_termios call */
1025 if (up
->port
.set_termios
)
1026 uart
->port
.set_termios
= up
->port
.set_termios
;
1027 if (up
->port
.set_ldisc
)
1028 uart
->port
.set_ldisc
= up
->port
.set_ldisc
;
1029 if (up
->port
.get_mctrl
)
1030 uart
->port
.get_mctrl
= up
->port
.get_mctrl
;
1031 if (up
->port
.set_mctrl
)
1032 uart
->port
.set_mctrl
= up
->port
.set_mctrl
;
1033 if (up
->port
.startup
)
1034 uart
->port
.startup
= up
->port
.startup
;
1035 if (up
->port
.shutdown
)
1036 uart
->port
.shutdown
= up
->port
.shutdown
;
1038 uart
->port
.pm
= up
->port
.pm
;
1039 if (up
->port
.handle_break
)
1040 uart
->port
.handle_break
= up
->port
.handle_break
;
1042 uart
->dl_read
= up
->dl_read
;
1044 uart
->dl_write
= up
->dl_write
;
1046 if (uart
->port
.type
!= PORT_8250_CIR
) {
1047 if (serial8250_isa_config
!= NULL
)
1048 serial8250_isa_config(0, &uart
->port
,
1049 &uart
->capabilities
);
1051 ret
= uart_add_one_port(&serial8250_reg
,
1054 ret
= uart
->port
.line
;
1056 dev_info(uart
->port
.dev
,
1057 "skipping CIR port at 0x%lx / 0x%llx, IRQ %d\n",
1059 (unsigned long long)uart
->port
.mapbase
,
1065 mutex_unlock(&serial_mutex
);
1069 EXPORT_SYMBOL(serial8250_register_8250_port
);
1072 * serial8250_unregister_port - remove a 16x50 serial port at runtime
1073 * @line: serial line number
1075 * Remove one serial port. This may not be called from interrupt
1076 * context. We hand the port back to the our control.
1078 void serial8250_unregister_port(int line
)
1080 struct uart_8250_port
*uart
= &serial8250_ports
[line
];
1082 mutex_lock(&serial_mutex
);
1085 unsigned long flags
;
1087 spin_lock_irqsave(&uart
->port
.lock
, flags
);
1088 serial8250_em485_destroy(uart
);
1089 spin_unlock_irqrestore(&uart
->port
.lock
, flags
);
1092 uart_remove_one_port(&serial8250_reg
, &uart
->port
);
1093 if (serial8250_isa_devs
) {
1094 uart
->port
.flags
&= ~UPF_BOOT_AUTOCONF
;
1096 uart
->port
.flags
|= UPF_NO_TXEN_TEST
;
1097 uart
->port
.type
= PORT_UNKNOWN
;
1098 uart
->port
.dev
= &serial8250_isa_devs
->dev
;
1099 uart
->capabilities
= 0;
1100 uart_add_one_port(&serial8250_reg
, &uart
->port
);
1102 uart
->port
.dev
= NULL
;
1104 mutex_unlock(&serial_mutex
);
1106 EXPORT_SYMBOL(serial8250_unregister_port
);
1108 static int __init
serial8250_init(void)
1115 serial8250_isa_init_ports();
1117 pr_info("Serial: 8250/16550 driver, %d ports, IRQ sharing %sabled\n",
1118 nr_uarts
, share_irqs
? "en" : "dis");
1121 ret
= sunserial_register_minors(&serial8250_reg
, UART_NR
);
1123 serial8250_reg
.nr
= UART_NR
;
1124 ret
= uart_register_driver(&serial8250_reg
);
1129 ret
= serial8250_pnp_init();
1131 goto unreg_uart_drv
;
1133 serial8250_isa_devs
= platform_device_alloc("serial8250",
1134 PLAT8250_DEV_LEGACY
);
1135 if (!serial8250_isa_devs
) {
1140 ret
= platform_device_add(serial8250_isa_devs
);
1144 serial8250_register_ports(&serial8250_reg
, &serial8250_isa_devs
->dev
);
1146 ret
= platform_driver_register(&serial8250_isa_driver
);
1150 platform_device_del(serial8250_isa_devs
);
1152 platform_device_put(serial8250_isa_devs
);
1154 serial8250_pnp_exit();
1157 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1159 uart_unregister_driver(&serial8250_reg
);
1165 static void __exit
serial8250_exit(void)
1167 struct platform_device
*isa_dev
= serial8250_isa_devs
;
1170 * This tells serial8250_unregister_port() not to re-register
1171 * the ports (thereby making serial8250_isa_driver permanently
1174 serial8250_isa_devs
= NULL
;
1176 platform_driver_unregister(&serial8250_isa_driver
);
1177 platform_device_unregister(isa_dev
);
1179 serial8250_pnp_exit();
1182 sunserial_unregister_minors(&serial8250_reg
, UART_NR
);
1184 uart_unregister_driver(&serial8250_reg
);
1188 module_init(serial8250_init
);
1189 module_exit(serial8250_exit
);
1191 MODULE_LICENSE("GPL");
1192 MODULE_DESCRIPTION("Generic 8250/16x50 serial driver");
1194 module_param(share_irqs
, uint
, 0644);
1195 MODULE_PARM_DESC(share_irqs
, "Share IRQs with other non-8250/16x50 devices (unsafe)");
1197 module_param(nr_uarts
, uint
, 0644);
1198 MODULE_PARM_DESC(nr_uarts
, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS
) ")");
1200 module_param(skip_txen_test
, uint
, 0644);
1201 MODULE_PARM_DESC(skip_txen_test
, "Skip checking for the TXEN bug at init time");
1203 #ifdef CONFIG_SERIAL_8250_RSA
1204 module_param_array(probe_rsa
, ulong
, &probe_rsa_count
, 0444);
1205 MODULE_PARM_DESC(probe_rsa
, "Probe I/O ports for RSA");
1207 MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR
);
1209 #ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
1211 /* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
1212 * working as well for the module options so we don't break people. We
1213 * need to keep the names identical and the convenient macros will happily
1214 * refuse to let us do that by failing the build with redefinition errors
1215 * of global variables. So we stick them inside a dummy function to avoid
1216 * those conflicts. The options still get parsed, and the redefined
1217 * MODULE_PARAM_PREFIX lets us keep the "8250." syntax alive.
1219 * This is hacky. I'm sorry.
1221 static void __used
s8250_options(void)
1223 #undef MODULE_PARAM_PREFIX
1224 #define MODULE_PARAM_PREFIX "8250_core."
1226 module_param_cb(share_irqs
, ¶m_ops_uint
, &share_irqs
, 0644);
1227 module_param_cb(nr_uarts
, ¶m_ops_uint
, &nr_uarts
, 0644);
1228 module_param_cb(skip_txen_test
, ¶m_ops_uint
, &skip_txen_test
, 0644);
1229 #ifdef CONFIG_SERIAL_8250_RSA
1230 __module_param_call(MODULE_PARAM_PREFIX
, probe_rsa
,
1231 ¶m_array_ops
, .arr
= &__param_arr_probe_rsa
,
1236 MODULE_ALIAS("8250_core");