sleep.c 1.0 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0+
W
wdenk 已提交
2 3 4 5 6 7 8
/*
 * (C) Copyright 2001
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 */

#include <common.h>
#include <command.h>
9
#include <console.h>
10
#include <linux/delay.h>
W
wdenk 已提交
11

12 13
static int do_sleep(struct cmd_tbl *cmdtp, int flag, int argc,
		    char *const argv[])
W
wdenk 已提交
14
{
15
	ulong start = get_timer(0);
16
	ulong mdelay = 0;
W
wdenk 已提交
17
	ulong delay;
18
	char *frpart;
W
wdenk 已提交
19

20
	if (argc != 2)
21
		return CMD_RET_USAGE;
W
wdenk 已提交
22

23
	delay = simple_strtoul(argv[1], NULL, 10) * CONFIG_SYS_HZ;
W
wdenk 已提交
24

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
	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;

41
	while (get_timer(start) < delay) {
K
Kim Phillips 已提交
42
		if (ctrlc())
43
			return CMD_RET_FAILURE;
44

K
Kim Phillips 已提交
45
		udelay(100);
W
wdenk 已提交
46
	}
47

W
wdenk 已提交
48 49
	return 0;
}
50

W
wdenk 已提交
51
U_BOOT_CMD(
52
	sleep ,    2,    1,     do_sleep,
P
Peter Tyser 已提交
53
	"delay execution for some time",
W
wdenk 已提交
54
	"N\n"
55 56
	"    - delay execution for N seconds (N is _decimal_ and can be\n"
	"      fractional)"
W
wdenk 已提交
57
);