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