[SeaBIOS] [PATCH 1/2] add hwerr_printf function for threads

Gerd Hoffmann posted 2 patches 1 year, 4 months ago
[SeaBIOS] [PATCH 1/2] add hwerr_printf function for threads
Posted by Gerd Hoffmann 1 year, 4 months ago
Printing to the screen from threads doesn't work, because that involves
a switch to real mode for using int10h services.

Add a string buffer and hwerr_printf() helper functions to store error
messages. Print the buffer later, after device initialization, from main
thread in case it is not empty.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 src/output.h |  5 +++++
 src/output.c | 17 +++++++++++++++++
 src/post.c   |  4 ++++
 3 files changed, 26 insertions(+)

diff --git a/src/output.h b/src/output.h
index 14288cf505d8..4548d2d4abc2 100644
--- a/src/output.h
+++ b/src/output.h
@@ -16,6 +16,11 @@ char * znprintf(size_t size, const char *fmt, ...)
     __attribute__ ((format (printf, 2, 3)));
 void __dprintf(const char *fmt, ...)
     __attribute__ ((format (printf, 1, 2)));
+
+extern char hwerror_str[512];
+void hwerr_printf(const char *fmt, ...)
+    __attribute__ ((format (printf, 1, 2)));
+
 struct bregs;
 void __debug_enter(struct bregs *regs, const char *fname);
 void __debug_isr(const char *fname);
diff --git a/src/output.c b/src/output.c
index 0184444c8f21..8c9d6b8fb1e0 100644
--- a/src/output.c
+++ b/src/output.c
@@ -419,6 +419,23 @@ snprintf(char *str, size_t size, const char *fmt, ...)
     return end - str;
 }
 
+char hwerror_str[512];
+struct snprintfinfo hwerror_info = {
+    .info  = { putc_str },
+    .str   = hwerror_str,
+    .end   = hwerror_str + sizeof(hwerror_str) - 1,
+};
+
+void
+hwerr_printf(const char *fmt, ...)
+{
+    ASSERT32FLAT();
+    va_list args;
+    va_start(args, fmt);
+    bvprintf(&hwerror_info.info, fmt, args);
+    va_end(args);
+}
+
 // Build a formatted string - malloc'ing the memory.
 char *
 znprintf(size_t size, const char *fmt, ...)
diff --git a/src/post.c b/src/post.c
index f93106a1c9c9..3e85da43060f 100644
--- a/src/post.c
+++ b/src/post.c
@@ -216,6 +216,10 @@ maininit(void)
         device_hardware_setup();
         wait_threads();
     }
+    if (hwerror_str[0])
+        printf("\n"
+               "hardware setup errors:\n"
+               "%s", hwerror_str);
 
     // Run option roms
     optionrom_setup();
-- 
2.40.1

_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-leave@seabios.org