* Copyright (C) 2005 by Dominic Rath *
* Dominic.Rath@gmx.de *
* *
- * Copyright (C) 2007,2008 Øyvind Harboe *
+ * Copyright (C) 2007-2010 Øyvind Harboe *
* oyvind.harboe@zylin.com *
* *
* Copyright (C) 2009 SoftPLC Corporation *
str = Jim_GetString(args[i + 1], &len);
fields[field_count].num_bits = bits;
- fields[field_count].out_value = malloc(DIV_ROUND_UP(bits, 8));
- str_to_buf(str, len, fields[field_count].out_value, bits, 0);
- fields[field_count].in_value = fields[field_count].out_value;
+ void * t = malloc(DIV_ROUND_UP(bits, 8));
+ fields[field_count].out_value = t;
+ str_to_buf(str, len, t, bits, 0);
+ fields[field_count].in_value = t;
field_count++;
}
Jim_GetLong(interp, args[i], &bits);
str = buf_to_str(fields[field_count].in_value, bits, 16);
- free(fields[field_count].out_value);
+ free((void *)fields[field_count].out_value);
Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str)));
free(str);
if (strcmp(CMD_NAME, "interface_list") == 0 && CMD_ARGC > 0)
return ERROR_COMMAND_SYNTAX_ERROR;
- command_print(CMD_CTX, "The following JTAG interfaces are available:");
+ command_print(CMD_CTX, "The following debug interfaces are available:");
for (unsigned i = 0; NULL != jtag_interfaces[i]; i++)
{
const char *name = jtag_interfaces[i]->name;
/* no valid interface was found (i.e. the configuration option,
* didn't match one of the compiled-in interfaces
*/
- LOG_ERROR("The specified JTAG interface was not found (%s)", CMD_ARGV[0]);
+ LOG_ERROR("The specified debug interface was not found (%s)", CMD_ARGV[0]);
CALL_COMMAND_HANDLER(handle_interface_list_command);
return ERROR_JTAG_INVALID_INTERFACE;
}
return ERROR_OK;
}
-COMMAND_HANDLER(handle_jtag_nsrst_delay_command)
+COMMAND_HANDLER(handle_adapter_nsrst_delay_command)
{
if (CMD_ARGC > 1)
return ERROR_COMMAND_SYNTAX_ERROR;
jtag_set_nsrst_delay(delay);
}
- command_print(CMD_CTX, "jtag_nsrst_delay: %u", jtag_get_nsrst_delay());
+ command_print(CMD_CTX, "adapter_nsrst_delay: %u", jtag_get_nsrst_delay());
return ERROR_OK;
}
return ERROR_OK;
}
-COMMAND_HANDLER(handle_jtag_nsrst_assert_width_command)
+COMMAND_HANDLER(handle_adapter_nsrst_assert_width_command)
{
if (CMD_ARGC > 1)
return ERROR_COMMAND_SYNTAX_ERROR;
jtag_set_nsrst_assert_width(delay);
}
- command_print(CMD_CTX, "jtag_nsrst_assert_width: %u", jtag_get_nsrst_assert_width());
+ command_print(CMD_CTX, "adapter_nsrst_assert_width: %u", jtag_get_nsrst_assert_width());
return ERROR_OK;
}
return ERROR_OK;
}
-COMMAND_HANDLER(handle_jtag_khz_command)
+COMMAND_HANDLER(handle_adapter_khz_command)
{
if (CMD_ARGC > 1)
return ERROR_COMMAND_SYNTAX_ERROR;
else
return ERROR_COMMAND_SYNTAX_ERROR;
- if (jtag_interface_init(CMD_CTX) != ERROR_OK)
+ if (adapter_init(CMD_CTX) != ERROR_OK)
return ERROR_JTAG_INIT_FAILED;
jtag_add_reset(trst, srst);
}
int num_fields = CMD_ARGC / 2;
+ if (num_fields > 1)
+ {
+ /* we really should be looking at plain_ir_scan if we want
+ * anything more fancy.
+ */
+ LOG_ERROR("Specify a single value for tap");
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+
size_t fields_len = sizeof(struct scan_field) * num_fields;
fields = malloc(fields_len);
memset(fields, 0, fields_len);
{
int j;
for (j = 0; j < i; j++)
- free(fields[j].out_value);
+ free((void *)fields[j].out_value);
free(fields);
command_print(CMD_CTX, "Tap: %s unknown", CMD_ARGV[i*2]);
retval = parse_u32(CMD_ARGV[i * 2 + 1], &value);
if (ERROR_OK != retval)
goto error_return;
- buf_set_u32(fields[i].out_value, 0, field_size, value);
+ buf_set_u32((void *)fields[i].out_value, 0, field_size, value);
fields[i].in_value = NULL;
}
/* did we have an endstate? */
- jtag_add_ir_scan(tap, num_fields, fields, endstate);
+ jtag_add_ir_scan(tap, fields, endstate);
retval = jtag_execute_queue();
for (i = 0; i < num_fields; i++)
{
if (NULL != fields[i].out_value)
- free(fields[i].out_value);
+ free((void *)fields[i].out_value);
}
free (fields);
return ERROR_OK;
}
-static const struct command_registration jtag_command_handlers[] = {
+static const struct command_registration interface_command_handlers[] = {
{
- .name = "interface",
- .handler = handle_interface_command,
- .mode = COMMAND_CONFIG,
- .help = "Select a JTAG interface",
- .usage = "driver_name",
+ .name = "adapter_khz",
+ .handler = handle_adapter_khz_command,
+ .mode = COMMAND_ANY,
+ .help = "With an argument, change to the specified maximum "
+ "jtag speed. For JTAG, 0 KHz signifies adaptive "
+ " clocking. "
+ "With or without argument, display current setting.",
+ .usage = "[khz]",
},
{
- .name = "interface_list",
- .handler = handle_interface_list_command,
+ .name = "adapter_nsrst_assert_width",
+ .handler = handle_adapter_nsrst_assert_width_command,
.mode = COMMAND_ANY,
- .help = "List all built-in interfaces",
+ .help = "delay after asserting SRST in ms",
+ .usage = "[milliseconds]",
},
{
- .name = "jtag_khz",
- .handler = handle_jtag_khz_command,
+ .name = "adapter_nsrst_delay",
+ .handler = handle_adapter_nsrst_delay_command,
.mode = COMMAND_ANY,
- .help = "With an argument, change to the specified maximum "
- "jtag speed. Pass 0 to require adaptive clocking. "
- "With or without argument, display current setting.",
- .usage = "[khz]",
+ .help = "delay after deasserting SRST in ms",
+ .usage = "[milliseconds]",
},
{
- .name = "jtag_rclk",
- .handler = handle_jtag_rclk_command,
+ .name = "interface",
+ .handler = handle_interface_command,
+ .mode = COMMAND_CONFIG,
+ .help = "Select a debug adapter interface (driver)",
+ .usage = "driver_name",
+ },
+ {
+ .name = "interface_list",
+ .handler = handle_interface_list_command,
.mode = COMMAND_ANY,
- .help = "With an argument, change to to use adaptive clocking "
- "if possible; else to use the fallback speed. "
- "With or without argument, display current setting.",
- .usage = "[fallback_speed_khz]",
+ .help = "List all built-in debug adapter interfaces (drivers)",
},
{
.name = "reset_config",
.handler = handle_reset_config_command,
.mode = COMMAND_ANY,
- .help = "configure JTAG reset behavior",
+ .help = "configure adapter reset behavior",
.usage = "[none|trst_only|srst_only|trst_and_srst] "
"[srst_pulls_trst|trst_pulls_srst|combined|separate] "
"[srst_gates_jtag|srst_nogate] "
"[trst_push_pull|trst_open_drain] "
"[srst_push_pull|srst_open_drain]",
},
+ COMMAND_REGISTRATION_DONE
+};
+
+/**
+ * Register the commands which deal with arbitrary debug adapter drivers.
+ *
+ * @todo Remove internal assumptions that all debug adapters use JTAG for
+ * transport. Various types and data structures are not named generically.
+ */
+int interface_register_commands(struct command_context *ctx)
+{
+ return register_commands(ctx, NULL, interface_command_handlers);
+}
+
+static const struct command_registration jtag_command_handlers[] = {
{
- .name = "jtag_nsrst_delay",
- .handler = handle_jtag_nsrst_delay_command,
+ .name = "jtag_rclk",
+ .handler = handle_jtag_rclk_command,
.mode = COMMAND_ANY,
- .help = "delay after deasserting srst in ms",
- .usage = "[milliseconds]",
+ .help = "With an argument, change to to use adaptive clocking "
+ "if possible; else to use the fallback speed. "
+ "With or without argument, display current setting.",
+ .usage = "[fallback_speed_khz]",
},
{
.name = "jtag_ntrst_delay",
.help = "delay after deasserting trst in ms",
.usage = "[milliseconds]",
},
- {
- .name = "jtag_nsrst_assert_width",
- .handler = handle_jtag_nsrst_assert_width_command,
- .mode = COMMAND_ANY,
- .help = "delay after asserting srst in ms",
- .usage = "[milliseconds]",
- },
{
.name = "jtag_ntrst_assert_width",
.handler = handle_jtag_ntrst_assert_width_command,
},
COMMAND_REGISTRATION_DONE
};
+
int jtag_register_commands(struct command_context *cmd_ctx)
{
return register_commands(cmd_ctx, NULL, jtag_command_handlers);