Skip to content
Snippets Groups Projects
main.c 2.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • Wolfgang Denk's avatar
    Wolfgang Denk committed
    /*
     * (C) Copyright 2000
     * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
     *
    
     * SPDX-License-Identifier:	GPL-2.0+
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
     */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #include <common.h>
    
    #include <autoboot.h>
    
    #include <cli.h>
    
    Simon Glass's avatar
    Simon Glass committed
    #include <cli_hush.h>
    
    Simon Glass's avatar
    Simon Glass committed
    #include <malloc.h>
    #include <version.h>
    
    DECLARE_GLOBAL_DATA_PTR;
    
    
    /*
     * Board-specific Platform code can reimplement show_boot_progress () if needed
     */
    void inline __show_boot_progress (int val) {}
    
    void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progress")));
    
    Simon Glass's avatar
    Simon Glass committed
    static void modem_init(void)
    
    {
    #ifdef CONFIG_MODEM_SUPPORT
    
    	debug("DEBUG: main_loop:   gd->do_mdm_init=%lu\n", gd->do_mdm_init);
    	if (gd->do_mdm_init) {
    
    		char *str = strdup(getenv("mdm_cmd"));
    		setenv("preboot", str);  /* set or delete definition */
    		if (str != NULL)
    			free(str);
    		mdm_init(); /* wait for modem connection */
    	}
    #endif  /* CONFIG_MODEM_SUPPORT */
    
    Simon Glass's avatar
    Simon Glass committed
    }
    
    Simon Glass's avatar
    Simon Glass committed
    static void run_preboot_environment_command(void)
    {
    
    #ifdef CONFIG_PREBOOT
    
    Simon Glass's avatar
    Simon Glass committed
    	char *p;
    
    
    	p = getenv("preboot");
    	if (p != NULL) {
    # ifdef CONFIG_AUTOBOOT_KEYED
    		int prev = disable_ctrlc(1);	/* disable Control C checking */
    # endif
    
    		run_command_list(p, -1, 0);
    
    # ifdef CONFIG_AUTOBOOT_KEYED
    		disable_ctrlc(prev);	/* restore Control C checking */
    # endif
    	}
    #endif /* CONFIG_PREBOOT */
    
    Simon Glass's avatar
    Simon Glass committed
    }
    
    void main_loop(void)
    {
    	bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");
    
    #ifndef CONFIG_SYS_GENERIC_BOARD
    	puts("Warning: Your board does not use generic board. Please read\n");
    	puts("doc/README.generic-board and take action. Boards not\n");
    	puts("upgraded by the late 2014 may break or be removed.\n");
    #endif
    
    	modem_init();
    #ifdef CONFIG_VERSION_VARIABLE
    	setenv("ver", version_string);  /* set version variable */
    #endif /* CONFIG_VERSION_VARIABLE */
    
    #ifdef CONFIG_SYS_HUSH_PARSER
    	u_boot_hush_start();
    #endif
    
    #if defined(CONFIG_HUSH_INIT_VAR)
    	hush_init_var();
    #endif
    
    	run_preboot_environment_command();
    
    
    #if defined(CONFIG_UPDATE_TFTP)
    	update_tftp(0UL);
    #endif /* CONFIG_UPDATE_TFTP */
    
    
    	bootdelay_process();
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	/*
    	 * Main Loop for Monitor Command Processing
    	 */
    
    #ifdef CONFIG_SYS_HUSH_PARSER
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	parse_file_outer();
    	/* This point is never reached */
    	for (;;);
    #else
    
    #endif /*CONFIG_SYS_HUSH_PARSER*/
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    }