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[] =
{
&dsp5680xx_target,
&testee_target,
&avr32_ap7k_target,
+ &stm32_stlink_target,
NULL,
};
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)
{
COMMAND_HANDLER(handle_target_init_command)
{
+ int retval;
+
if (CMD_ARGC != 0)
return ERROR_COMMAND_SYNTAX_ERROR;
}
target_initialized = true;
+ retval = command_run_line(CMD_CTX, "init_targets");
+ if (ERROR_OK != retval)
+ return retval;
+
LOG_DEBUG("Initializing targets...");
return target_init(CMD_CTX);
}
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (*callbacks_p)
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (*callbacks_p)
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
while (c)
if (callback == NULL)
{
- return ERROR_INVALID_ARGUMENTS;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
while (c)
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)
return retval;
}
+static int find_target(struct command_context *cmd_ctx, const char *name)
+{
+ struct target *target = get_target(name);
+ if (target == NULL) {
+ LOG_ERROR("Target: %s is unknown, try one of:\n", name);
+ return ERROR_FAIL;
+ }
+ if (!target->tap->enabled) {
+ LOG_USER("Target: TAP %s is disabled, "
+ "can't be the current target\n",
+ target->tap->dotted_name);
+ return ERROR_FAIL;
+ }
+
+ cmd_ctx->current_target = target->target_number;
+ return ERROR_OK;
+}
+
+
COMMAND_HANDLER(handle_targets_command)
{
+ int retval = ERROR_OK;
if (CMD_ARGC == 1)
{
- struct target *target = get_target(CMD_ARGV[0]);
- if (target == NULL) {
- command_print(CMD_CTX,"Target: %s is unknown, try one of:\n", CMD_ARGV[0]);
- goto DumpTargets;
- }
- if (!target->tap->enabled) {
- command_print(CMD_CTX,"Target: TAP %s is disabled, "
- "can't be the current target\n",
- target->tap->dotted_name);
- return ERROR_FAIL;
+ retval = find_target(CMD_CTX, CMD_ARGV[0]);
+ if (retval == ERROR_OK) {
+ /* we're done! */
+ return retval;
}
-
- CMD_CTX->current_target = target->target_number;
- return ERROR_OK;
}
-DumpTargets:;
struct target *target = all_targets;
command_print(CMD_CTX, " TargetName Type Endian TapName State ");
marker = '*';
/* keep columns lined up to match the headers above */
- command_print(CMD_CTX, "%2d%c %-18s %-10s %-6s %-18s %s",
- target->target_number,
- marker,
- target_name(target),
- target_type_name(target),
- Jim_Nvp_value2name_simple(nvp_target_endian,
- target->endianness)->name,
- target->tap->dotted_name,
- state);
+ command_print(CMD_CTX,
+ "%2d%c %-18s %-10s %-6s %-18s %s",
+ target->target_number,
+ marker,
+ target_name(target),
+ target_type_name(target),
+ Jim_Nvp_value2name_simple(nvp_target_endian,
+ target->endianness)->name,
+ target->tap->dotted_name,
+ state);
target = target->next;
}
- return ERROR_OK;
+ return retval;
}
/* every 300ms we check for reset & powerdropout and issue a "reset halt" if so. */
return ERROR_OK;
}
- command_print(CMD_CTX, "usage: reg <#|name> [value]");
-
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
COMMAND_HANDLER(handle_poll_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)
return handle_bp_command_set(CMD_CTX, addr, asid, length, hw);
default:
- command_print(CMD_CTX, "usage: bp <address> [<asid>]<length> ['hw'|'hw_ctx']");
return ERROR_COMMAND_SYNTAX_ERROR;
}
}
break;
default:
- command_print(CMD_CTX, "usage: wp [address length "
- "[(r|w|a) [value [mask]]]]");
return ERROR_COMMAND_SYNTAX_ERROR;
}
.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 */
.name = "soft_reset_halt",
.handler = handle_soft_reset_halt_command,
.mode = COMMAND_EXEC,
+ .usage = "",
.help = "halt the target and do a soft reset",
},
{
.handler = handle_bp_command,
.mode = COMMAND_EXEC,
.help = "list or set hardware or software breakpoint",
- .usage = "usage: bp <address> [<asid>]<length> ['hw'|'hw_ctx']",
+ .usage = "<address> [<asid>]<length> ['hw'|'hw_ctx']",
},
{
.name = "rbp",