mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-22 23:32:39 +00:00
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:
1 parent
ee48f6c1ba
commit
c2ef140a68
3 files changed
+23
-10
No files matched your search
+20
-7
@@ -304,7 +304,7 @@ grub_ns8250_hw_get_port (const unsigned int unit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *
|
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;
|
struct grub_serial_port *p;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
@@ -314,6 +314,9 @@ grub_serial_ns8250_add_port (grub_port_t port)
|
|||||||
{
|
{
|
||||||
if (dead_ports & (1 << i))
|
if (dead_ports & (1 << i))
|
||||||
return NULL;
|
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];
|
return com_names[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,32 +329,39 @@ grub_serial_ns8250_add_port (grub_port_t port)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
p = grub_malloc (sizeof (*p));
|
p = grub_malloc (sizeof (*p));
|
||||||
if (!p)
|
if (p == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
p->name = grub_xasprintf ("port%lx", (unsigned long) port);
|
p->name = grub_xasprintf ("port%lx", (unsigned long) port);
|
||||||
if (!p->name)
|
if (p->name == NULL)
|
||||||
{
|
{
|
||||||
grub_free (p);
|
grub_free (p);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p->driver = &grub_ns8250_driver;
|
p->driver = &grub_ns8250_driver;
|
||||||
grub_serial_config_defaults (p);
|
|
||||||
p->mmio = false;
|
p->mmio = false;
|
||||||
p->port = port;
|
p->port = port;
|
||||||
|
if (config != NULL)
|
||||||
|
grub_serial_port_configure (p, config);
|
||||||
|
else
|
||||||
|
grub_serial_config_defaults (p);
|
||||||
grub_serial_register (p);
|
grub_serial_register (p);
|
||||||
|
|
||||||
return p->name;
|
return p->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *
|
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;
|
struct grub_serial_port *p;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < GRUB_SERIAL_PORT_NUM; i++)
|
for (i = 0; i < GRUB_SERIAL_PORT_NUM; i++)
|
||||||
if (com_ports[i].mmio == true && com_ports[i].mmio_base == addr)
|
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));
|
p = grub_malloc (sizeof (*p));
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
@@ -363,9 +373,12 @@ grub_serial_ns8250_add_mmio (grub_addr_t addr)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p->driver = &grub_ns8250_driver;
|
p->driver = &grub_ns8250_driver;
|
||||||
grub_serial_config_defaults (p);
|
|
||||||
p->mmio = true;
|
p->mmio = true;
|
||||||
p->mmio_base = addr;
|
p->mmio_base = addr;
|
||||||
|
if (config != NULL)
|
||||||
|
grub_serial_port_configure (p, config);
|
||||||
|
else
|
||||||
|
grub_serial_config_defaults (p);
|
||||||
grub_serial_register (p);
|
grub_serial_register (p);
|
||||||
|
|
||||||
return p->name;
|
return p->name;
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ grub_serial_find (const char *name)
|
|||||||
&& grub_isxdigit (name [sizeof ("port") - 1]))
|
&& grub_isxdigit (name [sizeof ("port") - 1]))
|
||||||
{
|
{
|
||||||
name = grub_serial_ns8250_add_port (grub_strtoul (&name[sizeof ("port") - 1],
|
name = grub_serial_ns8250_add_port (grub_strtoul (&name[sizeof ("port") - 1],
|
||||||
0, 16));
|
0, 16), NULL);
|
||||||
if (!name)
|
if (!name)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -185,8 +185,8 @@ grub_serial_config_defaults (struct grub_serial_port *port)
|
|||||||
|
|
||||||
#if defined(__mips__) || defined (__i386__) || defined (__x86_64__)
|
#if defined(__mips__) || defined (__i386__) || defined (__x86_64__)
|
||||||
void grub_ns8250_init (void);
|
void grub_ns8250_init (void);
|
||||||
char *grub_serial_ns8250_add_port (grub_port_t port);
|
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);
|
char *grub_serial_ns8250_add_mmio (grub_addr_t addr, struct grub_serial_config *config);
|
||||||
#endif
|
#endif
|
||||||
#ifdef GRUB_MACHINE_IEEE1275
|
#ifdef GRUB_MACHINE_IEEE1275
|
||||||
void grub_ofserial_init (void);
|
void grub_ofserial_init (void);
|
||||||
|
|||||||
Reference in new issue
Block a user