term/ns8250: Add configuration parameter when adding ports
This will allow ports to be added with a pre-set configuration. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
ee48f6c1ba
commit
c2ef140a68
@ -304,7 +304,7 @@ grub_ns8250_hw_get_port (const unsigned int unit)
|
||||
}
|
||||
|
||||
char *
|
||||
grub_serial_ns8250_add_port (grub_port_t port)
|
||||
grub_serial_ns8250_add_port (grub_port_t port, struct grub_serial_config *config)
|
||||
{
|
||||
struct grub_serial_port *p;
|
||||
unsigned i;
|
||||
@ -314,6 +314,9 @@ grub_serial_ns8250_add_port (grub_port_t port)
|
||||
{
|
||||
if (dead_ports & (1 << i))
|
||||
return NULL;
|
||||
/* Give the opportunity for SPCR to configure a default com port. */
|
||||
if (config != NULL)
|
||||
grub_serial_port_configure (&com_ports[i], config);
|
||||
return com_names[i];
|
||||
}
|
||||
|
||||
@ -326,32 +329,39 @@ grub_serial_ns8250_add_port (grub_port_t port)
|
||||
return NULL;
|
||||
|
||||
p = grub_malloc (sizeof (*p));
|
||||
if (!p)
|
||||
if (p == NULL)
|
||||
return NULL;
|
||||
p->name = grub_xasprintf ("port%lx", (unsigned long) port);
|
||||
if (!p->name)
|
||||
if (p->name == NULL)
|
||||
{
|
||||
grub_free (p);
|
||||
return NULL;
|
||||
}
|
||||
p->driver = &grub_ns8250_driver;
|
||||
grub_serial_config_defaults (p);
|
||||
p->mmio = false;
|
||||
p->port = port;
|
||||
if (config != NULL)
|
||||
grub_serial_port_configure (p, config);
|
||||
else
|
||||
grub_serial_config_defaults (p);
|
||||
grub_serial_register (p);
|
||||
|
||||
return p->name;
|
||||
}
|
||||
|
||||
char *
|
||||
grub_serial_ns8250_add_mmio (grub_addr_t addr)
|
||||
grub_serial_ns8250_add_mmio (grub_addr_t addr, struct grub_serial_config *config)
|
||||
{
|
||||
struct grub_serial_port *p;
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < GRUB_SERIAL_PORT_NUM; i++)
|
||||
if (com_ports[i].mmio == true && com_ports[i].mmio_base == addr)
|
||||
return com_names[i];
|
||||
{
|
||||
if (config != NULL)
|
||||
grub_serial_port_configure (&com_ports[i], config);
|
||||
return com_names[i];
|
||||
}
|
||||
|
||||
p = grub_malloc (sizeof (*p));
|
||||
if (p == NULL)
|
||||
@ -363,9 +373,12 @@ grub_serial_ns8250_add_mmio (grub_addr_t addr)
|
||||
return NULL;
|
||||
}
|
||||
p->driver = &grub_ns8250_driver;
|
||||
grub_serial_config_defaults (p);
|
||||
p->mmio = true;
|
||||
p->mmio_base = addr;
|
||||
if (config != NULL)
|
||||
grub_serial_port_configure (p, config);
|
||||
else
|
||||
grub_serial_config_defaults (p);
|
||||
grub_serial_register (p);
|
||||
|
||||
return p->name;
|
||||
|
||||
@ -156,7 +156,7 @@ grub_serial_find (const char *name)
|
||||
&& grub_isxdigit (name [sizeof ("port") - 1]))
|
||||
{
|
||||
name = grub_serial_ns8250_add_port (grub_strtoul (&name[sizeof ("port") - 1],
|
||||
0, 16));
|
||||
0, 16), NULL);
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
|
||||
@ -185,8 +185,8 @@ grub_serial_config_defaults (struct grub_serial_port *port)
|
||||
|
||||
#if defined(__mips__) || defined (__i386__) || defined (__x86_64__)
|
||||
void grub_ns8250_init (void);
|
||||
char *grub_serial_ns8250_add_port (grub_port_t port);
|
||||
char *grub_serial_ns8250_add_mmio (grub_addr_t addr);
|
||||
char *grub_serial_ns8250_add_port (grub_port_t port, struct grub_serial_config *config);
|
||||
char *grub_serial_ns8250_add_mmio (grub_addr_t addr, struct grub_serial_config *config);
|
||||
#endif
|
||||
#ifdef GRUB_MACHINE_IEEE1275
|
||||
void grub_ofserial_init (void);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user