]>
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> | |
10 | #include <errno.h> | |
11 | #include <watchdog.h> | |
12 | ||
13 | #ifndef CONFIG_BOOT_RETRY_MIN | |
14 | #define CONFIG_BOOT_RETRY_MIN CONFIG_BOOT_RETRY_TIME | |
15 | #endif | |
16 | ||
17 | static uint64_t endtime; /* must be set, default is instant timeout */ | |
18 | static int retry_time = -1; /* -1 so can call readline before main_loop */ | |
19 | ||
20 | /*************************************************************************** | |
21 | * initialize command line timeout | |
22 | */ | |
b26440f1 | 23 | void bootretry_init_cmd_timeout(void) |
0098e179 | 24 | { |
00caae6d | 25 | char *s = env_get("bootretry"); |
0098e179 SG |
26 | |
27 | if (s != NULL) | |
28 | retry_time = (int)simple_strtol(s, NULL, 10); | |
29 | else | |
30 | retry_time = CONFIG_BOOT_RETRY_TIME; | |
31 | ||
32 | if (retry_time >= 0 && retry_time < CONFIG_BOOT_RETRY_MIN) | |
33 | retry_time = CONFIG_BOOT_RETRY_MIN; | |
34 | } | |
35 | ||
36 | /*************************************************************************** | |
37 | * reset command line timeout to retry_time seconds | |
38 | */ | |
b26440f1 | 39 | void bootretry_reset_cmd_timeout(void) |
0098e179 SG |
40 | { |
41 | endtime = endtick(retry_time); | |
42 | } | |
43 | ||
44 | int bootretry_tstc_timeout(void) | |
45 | { | |
46 | while (!tstc()) { /* while no incoming data */ | |
47 | if (retry_time >= 0 && get_ticks() > endtime) | |
48 | return -ETIMEDOUT; | |
49 | WATCHDOG_RESET(); | |
50 | } | |
51 | ||
52 | return 0; | |
53 | } | |
54 | ||
55 | void bootretry_dont_retry(void) | |
56 | { | |
57 | retry_time = -1; | |
58 | } |