drivers/serial: Initialize serial baudrate ahead of time
diff --git a/common/drivers/serial.c b/common/drivers/serial.c
index 0d724857..664a1c2d 100644
--- a/common/drivers/serial.c
+++ b/common/drivers/serial.c
@@ -1,31 +1,18 @@
#if defined (BIOS)
#include <stdint.h>
-#include <stddef.h>
#include <stdbool.h>
#include <drivers/serial.h>
#include <sys/cpu.h>
-#include <lib/misc.h>
-#include <lib/config.h>
static bool serial_initialised = false;
-static uint32_t serial_baudrate;
+uint32_t serial_baudrate;
static void serial_initialise(void) {
- if (serial_initialised || config_ready == false) {
+ if (serial_initialised || !serial) {
return;
}
- char *baudrate_s = config_get_value(NULL, 0, "SERIAL_BAUDRATE");
- if (baudrate_s == NULL) {
- serial_baudrate = 115200;
- } else {
- serial_baudrate = strtoui(baudrate_s, NULL, 10);
- if (serial_baudrate == 0 || serial_baudrate > 115200) {
- serial_baudrate = 115200;
- }
- }
-
// Init com1
outb(0x3f8 + 3, 0x00);
outb(0x3f8 + 1, 0x00);
diff --git a/common/drivers/serial.h b/common/drivers/serial.h
index 882f0563..139e4c26 100644
--- a/common/drivers/serial.h
+++ b/common/drivers/serial.h
@@ -5,6 +5,8 @@
#include <stdint.h>
+extern uint32_t serial_baudrate;
+
void serial_out(uint8_t b);
int serial_in(void);
diff --git a/common/menu.c b/common/menu.c
index 563411bb..8b947b7d 100644
--- a/common/menu.c
+++ b/common/menu.c
@@ -15,6 +15,7 @@
#include <mm/pmm.h>
#include <drivers/vbe.h>
#include <drivers/vga_textmode.h>
+#include <drivers/serial.h>
#include <protos/linux.h>
#include <protos/chainload.h>
#include <protos/multiboot1.h>
@@ -803,6 +804,20 @@ noreturn void _menu(bool first_run) {
#endif
serial_str != NULL && strcmp(serial_str, "yes") == 0;
+#if defined (BIOS)
+ if (serial) {
+ char *baudrate_s = config_get_value(NULL, 0, "SERIAL_BAUDRATE");
+ if (baudrate_s == NULL) {
+ serial_baudrate = 115200;
+ } else {
+ serial_baudrate = strtoui(baudrate_s, NULL, 10);
+ if (serial_baudrate == 0 || serial_baudrate > 115200) {
+ serial_baudrate = 115200;
+ }
+ }
+ }
+#endif
+
char *hash_mismatch_panic_str = config_get_value(NULL, 0, "HASH_MISMATCH_PANIC");
hash_mismatch_panic = hash_mismatch_panic_str == NULL || strcmp(hash_mismatch_panic_str, "yes") == 0;
