summaryrefslogtreecommitdiffstats
path: root/src/core/exec.c
diff options
context:
space:
mode:
authorMichael Brown2011-10-24 16:39:05 +0200
committerMichael Brown2011-10-24 16:39:05 +0200
commitbf2da3122b988cd277da435ee76bc35ad438e8af (patch)
tree631f7208c243a8320a90926a9d9d1bb64df532f5 /src/core/exec.c
parent[arbel] Add (not-yet-functional) support for RC queue pairs (diff)
downloadipxe-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.c40
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,
+};