:: commit db3ac54d4e570e04a52e38f4d13d67d62c722eac

Marvin Friedrich <contact@marvinf.com> — 2026-01-06 14:08

parents: 45dbc18a5e

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;
 
tab: 248 wrap: offon