This will allow ports to be added with a pre-set configuration Signed-off-by: Benjamin Herrenschmidt <b...@kernel.crashing.org> --- grub-core/term/ns8250.c | 25 +++++++++++++++++++------ grub-core/term/serial.c | 2 +- include/grub/serial.h | 4 ++-- 3 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/grub-core/term/ns8250.c b/grub-core/term/ns8250.c index 183e14b3b..d783c2897 100644 --- a/grub-core/term/ns8250.c +++ b/grub-core/term/ns8250.c @@ -298,7 +298,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; @@ -307,6 +307,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) + grub_serial_port_configure (&com_ports[i], config); return com_names[i]; } @@ -328,22 +331,29 @@ grub_serial_ns8250_add_port (grub_port_t port) return NULL; } p->driver = &grub_ns8250_driver; - grub_serial_config_defaults (p); p->mmio = 0; p->port = port; + if (config) + 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 && com_ports[i].mmio_base == addr) - return com_names[i]; + if (com_ports[i].mmio && com_ports[i].mmio_base == addr) + { + if (config) + grub_serial_port_configure (&com_ports[i], config); + return com_names[i]; + } p = grub_malloc (sizeof (*p)); if (!p) @@ -355,9 +365,12 @@ grub_serial_ns8250_add_mmio(grub_addr_t addr) return NULL; } p->driver = &grub_ns8250_driver; - grub_serial_config_defaults (p); p->mmio = 1; p->mmio_base = addr; + if (config) + grub_serial_port_configure (p, config); + else + grub_serial_config_defaults (p); grub_serial_register (p); return p->name; diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c index 7d4dbb2de..313341f53 100644 --- a/grub-core/term/serial.c +++ b/grub-core/term/serial.c @@ -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; diff --git a/include/grub/serial.h b/include/grub/serial.h index a5756cd25..5677dae33 100644 --- a/include/grub/serial.h +++ b/include/grub/serial.h @@ -184,8 +184,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); -- 2.25.1 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel