diff options
author | Michael Brown | 2011-10-24 16:39:05 +0200 |
---|---|---|
committer | Michael Brown | 2011-10-24 16:39:05 +0200 |
commit | bf2da3122b988cd277da435ee76bc35ad438e8af (patch) | |
tree | 631f7208c243a8320a90926a9d9d1bb64df532f5 /src/core/exec.c | |
parent | [arbel] Add (not-yet-functional) support for RC queue pairs (diff) | |
download | ipxe-bf2da3122b988cd277da435ee76bc35ad438e8af.tar.gz ipxe-bf2da3122b988cd277da435ee76bc35ad438e8af.tar.xz ipxe-bf2da3122b988cd277da435ee76bc35ad438e8af.zip |
[cmdline] Make "sleep" command available by default
The "sleep" command is generally useful to have. For example:
:dhcp_retry
dhcp && goto dhcp_done
sleep 5
goto dhcp_retry
:dhcp_done
Make the "sleep" command available by default, leaving TIME_CMD
controlling only the (fairly specialist) "time" command.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/exec.c')
-rw-r--r-- | src/core/exec.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/core/exec.c b/src/core/exec.c index bfc0c97f..cbbccdfa 100644 --- a/src/core/exec.c +++ b/src/core/exec.c @@ -31,6 +31,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include <ipxe/command.h> #include <ipxe/parseopt.h> #include <ipxe/settings.h> +#include <ipxe/nap.h> #include <ipxe/shell.h> /** @file @@ -527,3 +528,42 @@ struct command iseq_command __command = { .name = "iseq", .exec = iseq_exec, }; + +/** "sleep" options */ +struct sleep_options {}; + +/** "sleep" option list */ +static struct option_descriptor sleep_opts[] = {}; + +/** "sleep" command descriptor */ +static struct command_descriptor sleep_cmd = + COMMAND_DESC ( struct sleep_options, sleep_opts, 1, 1, "<seconds>" ); + +/** + * "sleep" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int sleep_exec ( int argc, char **argv ) { + struct sleep_options opts; + unsigned long start, delay; + int rc; + + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &sleep_cmd, &opts ) ) != 0 ) + return rc; + + start = currticks(); + delay = strtoul ( argv[1], NULL, 0 ) * ticks_per_sec(); + while ( ( currticks() - start ) <= delay ) + cpu_nap(); + return 0; +} + +/** "sleep" command */ +struct command sleep_command __command = { + .name = "sleep", + .exec = sleep_exec, +}; |