Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17402
b: refs/heads/master
c: a61c2d7
h: refs/heads/master
v: v3
  • Loading branch information
Dave Jones authored and Russell King committed Jan 7, 2006
1 parent 494b4c7 commit 7c3fb58
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f61051cd2fc58546f28c226933942d4360810ffb
refs/heads/master: a61c2d78ce61e67baf27c43f6721db87a27ac762
2 changes: 2 additions & 0 deletions trunk/Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -998,6 +998,8 @@ running once the system is up.

nowb [ARM]

nr_uarts= [SERIAL] maximum number of UARTs to be registered.

opl3= [HW,OSS]
Format: <io>

Expand Down
28 changes: 18 additions & 10 deletions trunk/drivers/serial/8250.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@
*/
static unsigned int share_irqs = SERIAL8250_SHARE_IRQS;

static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS;

/*
* Debugging.
*/
Expand Down Expand Up @@ -2118,7 +2120,7 @@ static void __init serial8250_isa_init_ports(void)
return;
first = 0;

for (i = 0; i < UART_NR; i++) {
for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i];

up->port.line = i;
Expand All @@ -2137,7 +2139,7 @@ static void __init serial8250_isa_init_ports(void)
}

for (i = 0, up = serial8250_ports;
i < ARRAY_SIZE(old_serial_port) && i < UART_NR;
i < ARRAY_SIZE(old_serial_port) && i < nr_uarts;
i++, up++) {
up->port.iobase = old_serial_port[i].port;
up->port.irq = irq_canonicalize(old_serial_port[i].irq);
Expand All @@ -2159,7 +2161,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev)

serial8250_isa_init_ports();

for (i = 0; i < UART_NR; i++) {
for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i];

up->port.dev = dev;
Expand Down Expand Up @@ -2262,7 +2264,7 @@ static int serial8250_console_setup(struct console *co, char *options)
* if so, search for the first available port that does have
* console support.
*/
if (co->index >= UART_NR)
if (co->index >= nr_uarts)
co->index = 0;
port = &serial8250_ports[co->index].port;
if (!port->iobase && !port->membase)
Expand Down Expand Up @@ -2298,7 +2300,7 @@ static int __init find_port(struct uart_port *p)
int line;
struct uart_port *port;

for (line = 0; line < UART_NR; line++) {
for (line = 0; line < nr_uarts; line++) {
port = &serial8250_ports[line].port;
if (uart_match_port(p, port))
return line;
Expand Down Expand Up @@ -2420,7 +2422,7 @@ static int __devexit serial8250_remove(struct platform_device *dev)
{
int i;

for (i = 0; i < UART_NR; i++) {
for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i];

if (up->port.dev == &dev->dev)
Expand Down Expand Up @@ -2487,7 +2489,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
/*
* First, find a port entry which matches.
*/
for (i = 0; i < UART_NR; i++)
for (i = 0; i < nr_uarts; i++)
if (uart_match_port(&serial8250_ports[i].port, port))
return &serial8250_ports[i];

Expand All @@ -2496,7 +2498,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
* free entry. We look for one which hasn't been previously
* used (indicated by zero iobase).
*/
for (i = 0; i < UART_NR; i++)
for (i = 0; i < nr_uarts; i++)
if (serial8250_ports[i].port.type == PORT_UNKNOWN &&
serial8250_ports[i].port.iobase == 0)
return &serial8250_ports[i];
Expand All @@ -2505,7 +2507,7 @@ static struct uart_8250_port *serial8250_find_match_or_unused(struct uart_port *
* That also failed. Last resort is to find any entry which
* doesn't have a real port associated with it.
*/
for (i = 0; i < UART_NR; i++)
for (i = 0; i < nr_uarts; i++)
if (serial8250_ports[i].port.type == PORT_UNKNOWN)
return &serial8250_ports[i];

Expand Down Expand Up @@ -2590,8 +2592,11 @@ static int __init serial8250_init(void)
{
int ret, i;

if (nr_uarts > UART_NR)
nr_uarts = UART_NR;

printk(KERN_INFO "Serial: 8250/16550 driver $Revision: 1.90 $ "
"%d ports, IRQ sharing %sabled\n", (int) UART_NR,
"%d ports, IRQ sharing %sabled\n", nr_uarts,
share_irqs ? "en" : "dis");

for (i = 0; i < NR_IRQS; i++)
Expand Down Expand Up @@ -2651,6 +2656,9 @@ module_param(share_irqs, uint, 0644);
MODULE_PARM_DESC(share_irqs, "Share IRQs with other non-8250/16x50 devices"
" (unsafe)");

module_param(nr_uarts, uint, 0644);
MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STRING(CONFIG_SERIAL_8250_NR_UARTS) ")");

#ifdef CONFIG_SERIAL_8250_RSA
module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444);
MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
Expand Down
10 changes: 10 additions & 0 deletions trunk/drivers/serial/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,16 @@ config SERIAL_8250_NR_UARTS
PCI enumeration and any ports that may be added at run-time
via hot-plug, or any ISA multi-port serial cards.

config SERIAL_8250_RUNTIME_UARTS
int "Number of 8250/16550 serial ports to register at runtime"
depends on SERIAL_8250
default "4"
help
Set this to the maximum number of serial ports you want
the kernel to register at boot time. This can be overriden
with the module parameter "nr_uarts", or boot-time parameter
8250.nr_uarts

config SERIAL_8250_EXTENDED
bool "Extended 8250/16550 serial driver options"
depends on SERIAL_8250
Expand Down

0 comments on commit 7c3fb58

Please sign in to comment.