summaryrefslogtreecommitdiffstats
path: root/src/core/main.c
diff options
context:
space:
mode:
authorMichael Brown2013-03-11 19:38:42 +0100
committerMichael Brown2013-03-13 23:24:13 +0100
commit033f4c92ca86834e44cb3c2a75cdc87cdef80cf9 (patch)
tree0bb54bb20a11e2bed4bde9d0c3f0ee96b37bd1f8 /src/core/main.c
parent[efi] Update to latest EDK2 headers (diff)
downloadipxe-033f4c92ca86834e44cb3c2a75cdc87cdef80cf9.tar.gz
ipxe-033f4c92ca86834e44cb3c2a75cdc87cdef80cf9.tar.xz
ipxe-033f4c92ca86834e44cb3c2a75cdc87cdef80cf9.zip
[autoboot] Split main control flow out of main() into a new function ipxe()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/main.c')
-rw-r--r--src/core/main.c84
1 files changed, 2 insertions, 82 deletions
diff --git a/src/core/main.c b/src/core/main.c
index 7b7755c9..8ad912d4 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -14,56 +14,18 @@ Literature dealing with the network protocols:
FILE_LICENCE ( GPL2_OR_LATER );
+#include <stddef.h>
#include <stdio.h>
-#include <stdlib.h>
#include <ipxe/init.h>
-#include <ipxe/features.h>
-#include <ipxe/shell.h>
-#include <ipxe/image.h>
-#include <ipxe/keys.h>
-#include <ipxe/version.h>
-#include <usr/prompt.h>
#include <usr/autoboot.h>
#include <config/general.h>
-#define NORMAL "\033[0m"
-#define BOLD "\033[1m"
-#define CYAN "\033[36m"
-
-/** The "scriptlet" setting */
-struct setting scriptlet_setting __setting ( SETTING_MISC ) = {
- .name = "scriptlet",
- .description = "Boot scriptlet",
- .tag = DHCP_EB_SCRIPTLET,
- .type = &setting_type_string,
-};
-
-/**
- * Prompt for shell entry
- *
- * @ret enter_shell User wants to enter shell
- */
-static int shell_banner ( void ) {
-
- /* Skip prompt if timeout is zero */
- if ( BANNER_TIMEOUT <= 0 )
- return 0;
-
- /* Prompt user */
- printf ( "\n" );
- return ( prompt ( "Press Ctrl-B for the iPXE command line...",
- ( BANNER_TIMEOUT * 100 ), CTRL_B ) == 0 );
-}
-
/**
* Main entry point
*
* @ret rc Return status code
*/
__asmcall int main ( void ) {
- struct feature *feature;
- struct image *image;
- char *scriptlet;
/* Some devices take an unreasonably long time to initialise */
printf ( PRODUCT_SHORT_NAME " initialising devices..." );
@@ -71,49 +33,7 @@ __asmcall int main ( void ) {
startup();
printf ( "ok\n" );
- /*
- * Print welcome banner
- *
- *
- * If you wish to brand this build of iPXE, please do so by
- * defining the string PRODUCT_NAME in config/general.h.
- *
- * While nothing in the GPL prevents you from removing all
- * references to iPXE or http://ipxe.org, we prefer you not to
- * do so.
- *
- */
- printf ( NORMAL "\n\n" PRODUCT_NAME "\n" BOLD "iPXE %s"
- NORMAL " -- Open Source Network Boot Firmware -- "
- CYAN "http://ipxe.org" NORMAL "\n"
- "Features:", product_version );
- for_each_table_entry ( feature, FEATURES )
- printf ( " %s", feature->name );
- printf ( "\n" );
-
- /* Boot system */
- if ( ( image = first_image() ) != NULL ) {
- /* We have an embedded image; execute it */
- image_exec ( image );
- } else if ( shell_banner() ) {
- /* User wants shell; just give them a shell */
- shell();
- } else {
- fetch_string_setting_copy ( NULL, &scriptlet_setting,
- &scriptlet );
- if ( scriptlet ) {
- /* User has defined a scriptlet; execute it */
- system ( scriptlet );
- free ( scriptlet );
- } else {
- /* Try booting. If booting fails, offer the
- * user another chance to enter the shell.
- */
- autoboot();
- if ( shell_banner() )
- shell();
- }
- }
+ ipxe ( NULL );
shutdown_exit();