mirror of https://github.com/ipxe/ipxe.git
[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>pull/5/head
parent
7a84cc593a
commit
bf2da3122b
|
@ -31,6 +31,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
#include <ipxe/command.h>
|
#include <ipxe/command.h>
|
||||||
#include <ipxe/parseopt.h>
|
#include <ipxe/parseopt.h>
|
||||||
#include <ipxe/settings.h>
|
#include <ipxe/settings.h>
|
||||||
|
#include <ipxe/nap.h>
|
||||||
#include <ipxe/shell.h>
|
#include <ipxe/shell.h>
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
|
@ -527,3 +528,42 @@ struct command iseq_command __command = {
|
||||||
.name = "iseq",
|
.name = "iseq",
|
||||||
.exec = iseq_exec,
|
.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,
|
||||||
|
};
|
||||||
|
|
|
@ -27,7 +27,6 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <ipxe/command.h>
|
#include <ipxe/command.h>
|
||||||
#include <ipxe/parseopt.h>
|
#include <ipxe/parseopt.h>
|
||||||
#include <ipxe/nap.h>
|
|
||||||
#include <ipxe/timer.h>
|
#include <ipxe/timer.h>
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
|
@ -78,42 +77,3 @@ struct command time_command __command = {
|
||||||
.name = "time",
|
.name = "time",
|
||||||
.exec = time_exec,
|
.exec = time_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,
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in New Issue