aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/main.c34
-rw-r--r--src/hci/shell_banner.c19
2 files changed, 32 insertions, 21 deletions
diff --git a/src/core/main.c b/src/core/main.c
index 3295feaf2..ca62db252 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -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;
diff --git a/src/hci/shell_banner.c b/src/hci/shell_banner.c
index 62da487c7..92cd17ddf 100644
--- a/src/hci/shell_banner.c
+++ b/src/hci/shell_banner.c
@@ -18,7 +18,6 @@
#include <stdio.h>
#include <console.h>
-#include <gpxe/features.h>
#include <gpxe/timer.h>
#include <gpxe/shell_banner.h>
@@ -30,13 +29,6 @@
#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 */