diff options
author | Michael Brown | 2013-03-11 19:38:42 +0100 |
---|---|---|
committer | Michael Brown | 2013-03-13 23:24:13 +0100 |
commit | 033f4c92ca86834e44cb3c2a75cdc87cdef80cf9 (patch) | |
tree | 0bb54bb20a11e2bed4bde9d0c3f0ee96b37bd1f8 /src/core/main.c | |
parent | [efi] Update to latest EDK2 headers (diff) | |
download | ipxe-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.c | 84 |
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(); |