X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Ftarget.c;h=67876d10e52b3cdeb82f316afc7da0785e32650a;hp=bcd00a1fbe9959224c624ab24c614cf110803383;hb=3a550e5b5fe011e526b150a5d234b48e8e2aaad6;hpb=b46231669928bf4edb48c50b327cb68b0d01a27e
diff --git a/src/target/target.c b/src/target/target.c
index bcd00a1fbe..67876d10e5 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -84,6 +84,7 @@ extern struct target_type dsp563xx_target;
extern struct target_type dsp5680xx_target;
extern struct target_type testee_target;
extern struct target_type avr32_ap7k_target;
+extern struct target_type stm32_stlink_target;
static struct target_type *target_types[] =
{
@@ -107,6 +108,7 @@ static struct target_type *target_types[] =
&dsp5680xx_target,
&testee_target,
&avr32_ap7k_target,
+ &stm32_stlink_target,
NULL,
};
@@ -940,6 +942,8 @@ static int target_init_one(struct command_context *cmd_ctx,
if (type->check_reset== NULL)
type->check_reset = default_check_reset;
+ assert(type->init_target != NULL);
+
int retval = type->init_target(cmd_ctx, target);
if (ERROR_OK != retval)
{
@@ -1070,7 +1074,7 @@ int target_register_event_callback(int (*callback)(struct target *target, enum t
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (*callbacks_p)
@@ -1095,7 +1099,7 @@ int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (*callbacks_p)
@@ -1133,7 +1137,7 @@ int target_unregister_event_callback(int (*callback)(struct target *target, enum
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
while (c)
@@ -1160,7 +1164,7 @@ static int target_unregister_timer_callback(int (*callback)(void *priv), void *p
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
while (c)
@@ -1677,7 +1681,7 @@ int target_checksum_memory(struct target *target, uint32_t address, uint32_t siz
if (buffer == NULL)
{
LOG_ERROR("error allocating buffer for section (%d bytes)", (int)size);
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
retval = target_read_buffer(target, address, size, buffer);
if (retval != ERROR_OK)
@@ -2242,9 +2246,7 @@ COMMAND_HANDLER(handle_reg_command)
return ERROR_OK;
}
- command_print(CMD_CTX, "usage: reg <#|name> [value]");
-
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
COMMAND_HANDLER(handle_poll_command)
@@ -2291,7 +2293,6 @@ COMMAND_HANDLER(handle_wait_halt_command)
int retval = parse_uint(CMD_ARGV[0], &ms);
if (ERROR_OK != retval)
{
- command_print(CMD_CTX, "usage: %s [seconds]", CMD_NAME);
return ERROR_COMMAND_SYNTAX_ERROR;
}
// convert seconds (given) to milliseconds (needed)
@@ -3151,7 +3152,6 @@ COMMAND_HANDLER(handle_bp_command)
return handle_bp_command_set(CMD_CTX, addr, asid, length, hw);
default:
- command_print(CMD_CTX, "usage: bp
[] ['hw'|'hw_ctx']");
return ERROR_COMMAND_SYNTAX_ERROR;
}
}
@@ -3231,8 +3231,6 @@ COMMAND_HANDLER(handle_wp_command)
break;
default:
- command_print(CMD_CTX, "usage: wp [address length "
- "[(r|w|a) [value [mask]]]]");
return ERROR_COMMAND_SYNTAX_ERROR;
}
@@ -5052,6 +5050,7 @@ static int target_create(Jim_GetOptInfo *goi)
.name = cp,
.mode = COMMAND_ANY,
.help = "target command group",
+ .usage = "",
.chain = target_subcommands,
},
COMMAND_REGISTRATION_DONE
@@ -5120,11 +5119,12 @@ static int jim_target_smp(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
int i;
const char *targetname;
int retval,len;
- struct target *target;
- struct target_list *head, *curr;
- curr = (struct target_list*) NULL;
- head = (struct target_list*) NULL;
-
+ struct target *target = (struct target *) NULL;
+ struct target_list *head, *curr, *new;
+ curr = (struct target_list *) NULL;
+ head = (struct target_list *) NULL;
+ new = (struct target_list *) NULL;
+
retval = 0;
LOG_DEBUG("%d",argc);
/* argv[1] = target to associate in smp
@@ -5140,7 +5140,6 @@ static int jim_target_smp(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
LOG_DEBUG("%s ",targetname);
if (target)
{
- struct target_list *new;
new=malloc(sizeof(struct target_list));
new->target = target;
new->next = (struct target_list*)NULL;
@@ -5161,11 +5160,13 @@ static int jim_target_smp(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
while(curr!=(struct target_list *)NULL)
{
- target=curr->target;
- target->smp = 1;
- target->head = head;
- curr=curr->next;
+ target = curr->target;
+ target->smp = 1;
+ target->head = head;
+ curr = curr->next;
}
+ if (target->rtos)
+ retval = rtos_smp_init(head->target);
return retval;
}
@@ -5514,6 +5515,27 @@ COMMAND_HANDLER(handle_target_reset_nag)
"performance");
}
+COMMAND_HANDLER(handle_ps_command)
+{
+ struct target *target = get_current_target(CMD_CTX);
+ char *display;
+ if (target->state != TARGET_HALTED) {
+ LOG_INFO("target not halted !!");
+ return ERROR_OK;
+ }
+
+ if ((target->rtos) && (target->rtos->type)
+ && (target->rtos->type->ps_command)) {
+ display = target->rtos->type->ps_command(target);
+ command_print(CMD_CTX, "%s", display);
+ free(display);
+ return ERROR_OK;
+ } else {
+ LOG_INFO("failed");
+ return ERROR_TARGET_FAILURE;
+ }
+}
+
static const struct command_registration target_exec_command_handlers[] = {
{
.name = "fast_load_image",
@@ -5530,11 +5552,13 @@ static const struct command_registration target_exec_command_handlers[] = {
.mode = COMMAND_EXEC,
.help = "loads active fast load image to current target "
"- mainly for profiling purposes",
+ .usage = "",
},
{
.name = "profile",
.handler = handle_profile_command,
.mode = COMMAND_EXEC,
+ .usage = "seconds filename",
.help = "profiling samples the CPU PC",
},
/** @todo don't register virt2phys() unless target supports it */
@@ -5595,6 +5619,7 @@ static const struct command_registration target_exec_command_handlers[] = {
.name = "soft_reset_halt",
.handler = handle_soft_reset_halt_command,
.mode = COMMAND_EXEC,
+ .usage = "",
.help = "halt the target and do a soft reset",
},
{
@@ -5651,7 +5676,7 @@ static const struct command_registration target_exec_command_handlers[] = {
.handler = handle_bp_command,
.mode = COMMAND_EXEC,
.help = "list or set hardware or software breakpoint",
- .usage = "usage: bp [] ['hw'|'hw_ctx']",
+ .usage = " [] ['hw'|'hw_ctx']",
},
{
.name = "rbp",
@@ -5723,6 +5748,14 @@ static const struct command_registration target_exec_command_handlers[] = {
"enabled to improve performance. ",
.usage = "['enable'|'disable']",
},
+ {
+ .name = "ps",
+ .handler = handle_ps_command,
+ .mode = COMMAND_EXEC,
+ .help = "list all tasks ",
+ .usage = " ",
+ },
+
COMMAND_REGISTRATION_DONE
};
static int target_register_user_commands(struct command_context *cmd_ctx)