[usr] Offer user a second chance to enter the shell on boot failure
authorMichael Brown <mcb30@etherboot.org>
Wed, 26 Mar 2008 23:16:20 +0000 (23:16 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 26 Mar 2008 23:16:20 +0000 (23:16 +0000)
src/core/main.c
src/hci/shell_banner.c

index 3295fea..ca62db2 100644 (file)
@@ -14,26 +14,54 @@ Literature dealing with the network protocols:
 
 **************************************************************************/
 
+#include <stdio.h>
 #include <gpxe/init.h>
+#include <gpxe/features.h>
 #include <gpxe/shell.h>
 #include <gpxe/shell_banner.h>
 #include <usr/autoboot.h>
 
+#define NORMAL "\033[0m"
+#define BOLD   "\033[1m"
+#define CYAN   "\033[36m"
+
+static struct feature features[0] __table_start ( struct feature, features );
+static struct feature features_end[0] __table_end ( struct feature, features );
+
 /**
  * Main entry point
  *
  * @ret rc             Return status code
  */
 __cdecl int main ( void ) {
+       struct feature *feature;
 
        initialise();
        startup();
 
-       if ( shell_banner() )
+       /* Print welcome banner */
+       printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION
+                NORMAL " -- Open Source Boot Firmware -- "
+                CYAN "http://etherboot.org" NORMAL "\n"
+                "Features:" );
+       for ( feature = features ; feature < features_end ; feature++ )
+               printf ( " %s", feature->name );
+       printf ( "\n" );
+
+       /* Prompt for shell */
+       if ( shell_banner() ) {
+               /* User wants shell; just give them a shell */
                shell();
-       else
+       } else {
+               /* User doesn't want shell; try booting.  If booting
+                * fails, offer a second chance to enter the shell for
+                * diagnostics.
+                */
                autoboot();
-       
+               if ( shell_banner() )
+                       shell();
+       }
+
        shutdown();
 
        return 0;
index 62da487..92cd17d 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <stdio.h>
 #include <console.h>
-#include <gpxe/features.h>
 #include <gpxe/timer.h>
 #include <gpxe/shell_banner.h>
 
 
 #define BANNER_TIMEOUT ( 2 * TICKS_PER_SEC )
 
-#define NORMAL "\033[0m"
-#define BOLD   "\033[1m"
-#define CYAN   "\033[36m"
-
-static struct feature features[0] __table_start ( struct feature, features );
-static struct feature features_end[0] __table_end ( struct feature, features );
-
 /**
  * Print shell banner and prompt for shell entry
  *
@@ -44,18 +36,9 @@ static struct feature features_end[0] __table_end ( struct feature, features );
  */
 int shell_banner ( void ) {
        unsigned long timeout = ( currticks() + BANNER_TIMEOUT );
-       struct feature *feature;
-       int key;
        int enter_shell = 0;
+       int key;
 
-       /* Print welcome banner */
-       printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION
-                NORMAL " -- Open Source Boot Firmware -- "
-                CYAN "http://etherboot.org" NORMAL "\n"
-                "Features:" );
-       for ( feature = features ; feature < features_end ; feature++ ) {
-               printf ( " %s", feature->name );
-       }
        printf ( "\nPress Ctrl-B for the gPXE command line..." );
 
        /* Wait for key */