From 228f29ac6e0026e596b3a6fbb640118b9944cdd8 Mon Sep 17 00:00:00 2001 From: wdenk Date: Sun, 8 Dec 2002 09:53:23 +0000 Subject: * Improve log buffer code; use "loglevel" to decide which messages to log on the console, too (like in Linux); get rid of "logstart" --- post/post.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'post/post.c') diff --git a/post/post.c b/post/post.c index f87636cb44..eab3f114d2 100644 --- a/post/post.c +++ b/post/post.c @@ -38,6 +38,7 @@ void post_bootmode_init (void) { + DECLARE_GLOBAL_DATA_PTR; int bootmode = post_bootmode_get (0); if (bootmode == 0) { @@ -49,6 +50,8 @@ void post_bootmode_init (void) } post_word_store (BOOTMODE_MAGIC | bootmode); + /* Reset activity record */ + gd->post_log_word = 0; } int post_bootmode_get (unsigned int *last_test) @@ -74,6 +77,36 @@ void post_bootmode_clear (void) post_word_store (0); } +/* POST tests run before relocation only mark status bits .... */ +static void post_log_mark_start ( unsigned long testid ) +{ + DECLARE_GLOBAL_DATA_PTR; + gd->post_log_word |= (testid)<<16; +} + +static void post_log_mark_succ ( unsigned long testid ) +{ + DECLARE_GLOBAL_DATA_PTR; + gd->post_log_word |= testid; +} + +/* ... and the messages are output once we are relocated */ +void post_output_backlog ( void ) +{ + DECLARE_GLOBAL_DATA_PTR; + int j; + + for (j = 0; j < post_list_size; j++) { + if (gd->post_log_word & (post_list[j].testid<<16)) { + post_log ("POST %s ", post_list[j].cmd); + if (gd->post_log_word & post_list[j].testid) + post_log ("PASSED\n"); + else + post_log ("FAILED\n"); + } + } +} + static void post_bootmode_test_on (unsigned int last_test) { unsigned long word = post_word_load (); @@ -160,13 +193,21 @@ static int post_run_single (struct post_test *test, post_bootmode_test_on (i); } + if (test_flags & POST_PREREL) + post_log_mark_start ( test->testid ); + else post_log ("POST %s ", test->cmd); } + if (test_flags & POST_PREREL) { + if ((*test->test) (flags) == 0) + post_log_mark_succ ( test->testid ); + } else { if ((*test->test) (flags) != 0) post_log ("FAILED\n"); else post_log ("PASSED\n"); + } if ((test_flags & POST_REBOOT) && !(flags & POST_MANUAL)) { post_bootmode_test_off (); @@ -282,6 +323,7 @@ int post_log (char *format, ...) va_end (args); #ifdef CONFIG_LOGBUFFER + /* Send to the logbuffer */ logbuff_log (printbuffer); #else /* Send to the stdout file */ -- cgit v1.2.1