]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
0098e179 SG |
2 | /* |
3 | * (C) Copyright 2000 | |
4 | * Wolfgang Denk, DENX Software Engineering, [email protected]. | |
0098e179 SG |
5 | */ |
6 | ||
7 | #include <common.h> | |
8 | #include <bootretry.h> | |
9 | #include <cli.h> | |
7b51b576 | 10 | #include <env.h> |
0098e179 SG |
11 | #include <errno.h> |
12 | #include <watchdog.h> | |
13 | ||
14 | #ifndef CONFIG_BOOT_RETRY_MIN | |
15 | #define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME | |
16 | #endif | |
17 | ||
18 | static uint64_t endtime; /* must be set, default is instant timeout */ | |
19 | static int retry_time = -1; /* -1 so can call readline before main_loop */ | |
20 | ||
21 | /*************************************************************************** | |
22 | * initialize command line timeout | |
23 | */ | |
b26440f1 | 24 | void bootretry_init_cmd_timeout(void) |
0098e179 | 25 | { |
00caae6d | 26 | char *s = env_get("bootretry"); |
0098e179 SG |
27 | |
28 | if (s != NULL) | |
29 | retry_time = (int)simple_strtol(s, NULL, 10); | |
30 | else | |
31 | retry_time = CONFIG_BOOT_RETRY_TIME; | |
32 | ||
33 | if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN) | |
34 | retry_time = CONFIG_BOOT_RETRY_MIN; | |
35 | } | |
36 | ||
37 | /*************************************************************************** | |
38 | * reset command line timeout to retry_time seconds | |
39 | */ | |
b26440f1 | 40 | void bootretry_reset_cmd_timeout(void) |
0098e179 SG |
41 | { |
42 | endtime = endtick(retry_time); | |
43 | } | |
44 | ||
45 | int bootretry_tstc_timeout(void) | |
46 | { | |
47 | while (!tstc()) { /* while no incoming data */ | |
48 | if (retry_time >= 0 && get_ticks() > endtime) | |
49 | return -ETIMEDOUT; | |
50 | WATCHDOG_RESET(); | |
51 | } | |
52 | ||
53 | return 0; | |
54 | } | |
55 | ||
56 | void bootretry_dont_retry(void) | |
57 | { | |
58 | retry_time = -1; | |
59 | } |