cmd_time: merge run_command_and_time_it with cmd_process
As far as every arch has a get_timer function, run_command_and_time_it code can now disappear. Signed-off-by: Richard Genoud <richard.genoud@gmail.com> Acked-By: Che-Liang Chiou <clchiou@chromium.org> [trini: s/ulong/unsigned long/ in command.h portion] Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
parent
b2f3e0ea3e
commit
34765e8853
|
@ -22,36 +22,6 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO(clchiou): This function actually minics the bottom-half of the
|
|
||||||
* run_command() function. Since this function has ARM-dependent timer
|
|
||||||
* codes, we cannot merge it with the run_command() for now.
|
|
||||||
*/
|
|
||||||
static int run_command_and_time_it(int flag, int argc, char * const argv[],
|
|
||||||
ulong *cycles)
|
|
||||||
{
|
|
||||||
cmd_tbl_t *cmdtp = find_cmd(argv[0]);
|
|
||||||
int retval = 0;
|
|
||||||
|
|
||||||
if (!cmdtp) {
|
|
||||||
printf("%s: command not found\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (argc > cmdtp->maxargs)
|
|
||||||
return CMD_RET_USAGE;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO(clchiou): get_timer_masked() is only defined in certain ARM
|
|
||||||
* boards. We could use the new timer API that Graeme is proposing
|
|
||||||
* so that this piece of code would be arch-independent.
|
|
||||||
*/
|
|
||||||
*cycles = get_timer_masked();
|
|
||||||
retval = cmdtp->cmd(cmdtp, flag, argc, argv);
|
|
||||||
*cycles = get_timer_masked() - *cycles;
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void report_time(ulong cycles)
|
static void report_time(ulong cycles)
|
||||||
{
|
{
|
||||||
ulong minutes, seconds, milliseconds;
|
ulong minutes, seconds, milliseconds;
|
||||||
|
@ -75,11 +45,12 @@ static int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
ulong cycles = 0;
|
ulong cycles = 0;
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
int repeatable;
|
||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
|
|
||||||
retval = run_command_and_time_it(0, argc - 1, argv + 1, &cycles);
|
retval = cmd_process(0, argc - 1, argv + 1, &repeatable, &cycles);
|
||||||
report_time(cycles);
|
report_time(cycles);
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -513,7 +513,7 @@ static int cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
|
enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
|
||||||
int *repeatable)
|
int *repeatable, ulong *ticks)
|
||||||
{
|
{
|
||||||
enum command_ret_t rc = CMD_RET_SUCCESS;
|
enum command_ret_t rc = CMD_RET_SUCCESS;
|
||||||
cmd_tbl_t *cmdtp;
|
cmd_tbl_t *cmdtp;
|
||||||
|
@ -543,7 +543,11 @@ enum command_ret_t cmd_process(int flag, int argc, char * const argv[],
|
||||||
|
|
||||||
/* If OK so far, then do the command */
|
/* If OK so far, then do the command */
|
||||||
if (!rc) {
|
if (!rc) {
|
||||||
|
if (ticks)
|
||||||
|
*ticks = get_timer(0);
|
||||||
rc = cmd_call(cmdtp, flag, argc, argv);
|
rc = cmd_call(cmdtp, flag, argc, argv);
|
||||||
|
if (ticks)
|
||||||
|
*ticks = get_timer(*ticks);
|
||||||
*repeatable &= cmdtp->repeatable;
|
*repeatable &= cmdtp->repeatable;
|
||||||
}
|
}
|
||||||
if (rc == CMD_RET_USAGE)
|
if (rc == CMD_RET_USAGE)
|
||||||
|
|
|
@ -1665,7 +1665,7 @@ static int run_pipe_real(struct pipe *pi)
|
||||||
}
|
}
|
||||||
/* Process the command */
|
/* Process the command */
|
||||||
return cmd_process(flag, child->argc, child->argv,
|
return cmd_process(flag, child->argc, child->argv,
|
||||||
&flag_repeat);
|
&flag_repeat, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifndef __U_BOOT__
|
#ifndef __U_BOOT__
|
||||||
|
|
|
@ -1452,7 +1452,7 @@ static int builtin_run_command(const char *cmd, int flag)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd_process(flag, argc, argv, &repeatable))
|
if (cmd_process(flag, argc, argv, &repeatable, NULL))
|
||||||
rc = -1;
|
rc = -1;
|
||||||
|
|
||||||
/* Did the user stop this? */
|
/* Did the user stop this? */
|
||||||
|
|
|
@ -139,10 +139,12 @@ enum command_ret_t {
|
||||||
* @param repeatable This function sets this to 0 if the command is not
|
* @param repeatable This function sets this to 0 if the command is not
|
||||||
* repeatable. If the command is repeatable, the value
|
* repeatable. If the command is repeatable, the value
|
||||||
* is left unchanged.
|
* is left unchanged.
|
||||||
|
* @param ticks If ticks is not null, this function set it to the
|
||||||
|
* number of ticks the command took to complete.
|
||||||
* @return 0 if the command succeeded, 1 if it failed
|
* @return 0 if the command succeeded, 1 if it failed
|
||||||
*/
|
*/
|
||||||
int cmd_process(int flag, int argc, char * const argv[],
|
int cmd_process(int flag, int argc, char * const argv[],
|
||||||
int *repeatable);
|
int *repeatable, unsigned long *ticks);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue