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:
Benjamin Herrenschmidt 2022-12-23 12:47:56 +11:00 committed by Daniel Kiper
parent ee48f6c1ba
commit c2ef140a68
3 changed files with 23 additions and 10 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);