diff options
author | Simon Glass <sjg@chromium.org> | 2014-04-10 20:01:30 -0600 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-05-29 17:48:21 -0400 |
commit | 0098e179e1afacb3cf595c67a98b8739dc7edcde (patch) | |
tree | c19140ef37a8f86d6ccd5d2a065239f09cf09121 /common/bootretry.c | |
parent | 30354978ff470470c15caea2566b61b5792ad277 (diff) | |
download | u-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.zip u-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.tar.gz u-boot-imx-0098e179e1afacb3cf595c67a98b8739dc7edcde.tar.bz2 |
Move bootretry code into bootretry.c and clean up
This code is only used by one board, so it seems a shame to clutter up
the readline code with it. Move it into its own file.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/bootretry.c')
-rw-r--r-- | common/bootretry.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/common/bootretry.c b/common/bootretry.c new file mode 100644 index 0000000..12653c0 --- /dev/null +++ b/common/bootretry.c @@ -0,0 +1,59 @@ +/* + * (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 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 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; +} |