diff options
author | Bin Meng <bin.meng@windriver.com> | 2020-10-13 18:45:05 +0800 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-10-23 13:33:07 -0400 |
commit | 16060854095036d5becc2c850641955a47d327d1 (patch) | |
tree | c2d9a58465dc44157fa96054638ce03b6efaf471 /cmd/sleep.c | |
parent | ae897022d7bdf1466584f54655efe89e2f67ca82 (diff) | |
download | u-boot-16060854095036d5becc2c850641955a47d327d1.tar.gz |
cmd: Rename CMD_MISC to CMD_SLEEP
The "cmd/Kconfig" has a TODO description for CMD_MISC that it should
really be named as CMD_SLEEP. Change it in the whole source tree.
Signed-off-by: Bin Meng <bin.meng@windriver.com>
Diffstat (limited to 'cmd/sleep.c')
-rw-r--r-- | cmd/sleep.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/cmd/sleep.c b/cmd/sleep.c new file mode 100644 index 0000000000..86986f0993 --- /dev/null +++ b/cmd/sleep.c @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2001 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + */ + +#include <common.h> +#include <command.h> +#include <console.h> +#include <linux/delay.h> + +static int do_sleep(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong start = get_timer(0); + ulong mdelay = 0; + ulong delay; + char *frpart; + + if (argc != 2) + return CMD_RET_USAGE; + + delay = simple_strtoul(argv[1], NULL, 10) * CONFIG_SYS_HZ; + + frpart = strchr(argv[1], '.'); + + if (frpart) { + uint mult = CONFIG_SYS_HZ / 10; + for (frpart++; *frpart != '\0' && mult > 0; frpart++) { + if (*frpart < '0' || *frpart > '9') { + mdelay = 0; + break; + } + mdelay += (*frpart - '0') * mult; + mult /= 10; + } + } + + delay += mdelay; + + while (get_timer(start) < delay) { + if (ctrlc()) + return (-1); + + udelay(100); + } + + return 0; +} + +U_BOOT_CMD( + sleep , 2, 1, do_sleep, + "delay execution for some time", + "N\n" + " - delay execution for N seconds (N is _decimal_ and can be\n" + " fractional)" +); + +#ifdef CONFIG_CMD_TIMER +static int do_timer(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + static ulong start; + + if (argc != 2) + return CMD_RET_USAGE; + + if (!strcmp(argv[1], "start")) + start = get_timer(0); + + if (!strcmp(argv[1], "get")) { + ulong msecs = get_timer(start) * 1000 / CONFIG_SYS_HZ; + printf("%ld.%03d\n", msecs / 1000, (int)(msecs % 1000)); + } + + return 0; +} + +U_BOOT_CMD( + timer, 2, 1, do_timer, + "access the system timer", + "start - Reset the timer reference.\n" + "timer get - Print the time since 'start'." +); +#endif |