Skip to content
Snippets Groups Projects
bootretry.c 1.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * (C) Copyright 2000
     * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #include <common.h>
    #include <bootretry.h>
    #include <cli.h>
    #include <errno.h>
    #include <watchdog.h>
    
    #ifndef CONFIG_BOOT_RETRY_MIN
    #define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME
    #endif
    
    static uint64_t endtime;  /* must be set, default is instant timeout */
    static int      retry_time = -1; /* -1 so can call readline before main_loop */
    
    /***************************************************************************
     * initialize command line timeout
     */
    
    void bootretry_init_cmd_timeout(void)
    
    {
    	char *s = getenv("bootretry");
    
    	if (s != NULL)
    		retry_time = (int)simple_strtol(s, NULL, 10);
    	else
    		retry_time = CONFIG_BOOT_RETRY_TIME;
    
    	if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN)
    		retry_time = CONFIG_BOOT_RETRY_MIN;
    }
    
    /***************************************************************************
     * reset command line timeout to retry_time seconds
     */
    
    void bootretry_reset_cmd_timeout(void)
    
    {
    	endtime = endtick(retry_time);
    }
    
    int bootretry_tstc_timeout(void)
    {
    	while (!tstc()) {	/* while no incoming data */
    		if (retry_time >= 0 && get_ticks() > endtime)
    			return -ETIMEDOUT;
    		WATCHDOG_RESET();
    	}
    
    	return 0;
    }
    
    void bootretry_dont_retry(void)
    {
    	retry_time = -1;
    }