jtag_interface_t *jtag = NULL;
/* configuration */
-char* jtag_interface = NULL;
-int jtag_speed = -1;
+jtag_interface_t *jtag_interface = NULL;
+int jtag_speed = 0;
/* forward declarations */
cmd_queue_pages = NULL;
}
-int jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state, void *dummy_anachronism)
+int jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state)
{
jtag_command_t **last_cmd;
jtag_device_t *device;
return ERROR_OK;
}
-int jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state, void *dummy_anachronism)
+int jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state)
{
jtag_command_t **last_cmd;
int i;
return ERROR_OK;
}
-int jtag_add_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state, void *dummy_anachronism)
+int jtag_add_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state)
{
int i, j;
int bypass_devices = 0;
return ERROR_OK;
}
-int jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state, void *dummy_anachronism)
+
+int jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state)
{
int i;
jtag_command_t **last_cmd = jtag_get_last_command_p();
buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
}
- jtag_add_plain_dr_scan(1, &field, TAP_TLR, NULL);
+ jtag_add_plain_dr_scan(1, &field, TAP_TLR);
jtag_execute_queue();
for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++)
field.in_handler = NULL;
field.in_handler_priv = NULL;
- jtag_add_plain_ir_scan(1, &field, TAP_TLR, NULL);
+ jtag_add_plain_ir_scan(1, &field, TAP_TLR);
jtag_execute_queue();
device = jtag_devices;
return ERROR_OK;
}
-int jtag_init(struct command_context_s *cmd_ctx)
+int jtag_interface_init(struct command_context_s *cmd_ctx)
{
- int i, validate_tries = 0;
+ if (!jtag_interface)
+ {
+ /* nothing was previously specified by "interface" command */
+ ERROR("JTAG interface has to be specified, see \"interface\" command");
+ return ERROR_JTAG_INVALID_INTERFACE;
+ }
- DEBUG("-");
+ if (jtag_interface->init() != ERROR_OK)
+ return ERROR_JTAG_INIT_FAILED;
- if (jtag_speed == -1)
- jtag_speed = 0;
+ jtag = jtag_interface;
+ return ERROR_OK;
+}
- if (jtag_interface && (jtag_interface[0] != 0))
- /* configuration var 'jtag_interface' is set, and not empty */
- for (i = 0; jtag_interfaces[i]; i++)
- {
- if (strcmp(jtag_interface, jtag_interfaces[i]->name) == 0)
- {
+int jtag_init(struct command_context_s *cmd_ctx)
+{
+ int i, validate_tries = 0;
jtag_device_t *device;
- device = jtag_devices;
- if (jtag_interfaces[i]->init() != ERROR_OK)
+ DEBUG("-");
+
+ if (!jtag && jtag_interface_init(cmd_ctx) != ERROR_OK)
return ERROR_JTAG_INIT_FAILED;
- jtag = jtag_interfaces[i];
+ device = jtag_devices;
jtag_ir_scan_size = 0;
jtag_num_devices = 0;
while (device != NULL)
}
return ERROR_OK;
- }
- }
-
- /* no valid interface was found (i.e. the configuration option,
- * didn't match one of the compiled-in interfaces
- */
- ERROR("No valid jtag interface found (%s)", jtag_interface);
- ERROR("compiled-in jtag interfaces:");
- for (i = 0; jtag_interfaces[i]; i++)
- {
- ERROR("%i: %s", i, jtag_interfaces[i]->name);
- }
-
- jtag = NULL;
- return ERROR_JTAG_INVALID_INTERFACE;
}
int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
int i;
- /* only if the configuration var isn't overwritten from cmdline */
- if (!jtag_interface)
+ /* check whether the interface is already configured */
+ if (jtag_interface)
{
- if (args[0] && (args[0][0] != 0))
+ WARNING("Interface already configured, ignoring");
+ return ERROR_OK;
+ }
+
+ /* interface name is a mandatory argument */
+ if (argc < 1 || args[0][0] == '\0')
{
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+
for (i=0; jtag_interfaces[i]; i++)
{
if (strcmp(args[0], jtag_interfaces[i]->name) == 0)
if (jtag_interfaces[i]->register_commands(cmd_ctx) != ERROR_OK)
exit(-1);
- jtag_interface = jtag_interfaces[i]->name;
-
+ jtag_interface = jtag_interfaces[i];
return ERROR_OK;
}
}
- }
- /* remember the requested interface name, so we can complain about it later */
- jtag_interface = strdup(args[0]);
- DEBUG("'interface' command didn't specify a valid interface");
+ /* no valid interface was found (i.e. the configuration option,
+ * didn't match one of the compiled-in interfaces
+ */
+ ERROR("No valid jtag interface found (%s)", args[0]);
+ ERROR("compiled-in jtag interfaces:");
+ for (i = 0; jtag_interfaces[i]; i++)
+ {
+ ERROR("%i: %s", i, jtag_interfaces[i]->name);
}
- return ERROR_OK;
+ return ERROR_JTAG_INVALID_INTERFACE;
}
int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
if (argc < 1)
{
- command_print(cmd_ctx, "usage: endstate <tap_state>");
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
else
{
{
int trst = -1;
int srst = -1;
- char *usage = "usage: jtag_reset <trst> <srst>";
int retval;
- if (argc < 1)
+ if (argc < 2)
{
- command_print(cmd_ctx, usage);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
}
if (args[0][0] == '1')
trst = 0;
else
{
- command_print(cmd_ctx, usage);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (args[1][0] == '1')
srst = 0;
else
{
- command_print(cmd_ctx, usage);
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
+ if (!jtag && jtag_interface_init(cmd_ctx) != ERROR_OK)
+ return ERROR_JTAG_INIT_FAILED;
+
if ((retval = jtag_add_reset(trst, srst)) != ERROR_OK)
{
switch (retval)
{
if (argc < 1)
{
- command_print(cmd_ctx, "usage: runtest <num_cycles>");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
jtag_add_runtest(strtol(args[0], NULL, 0), -1);
if ((argc < 2) || (argc % 2))
{
- command_print(cmd_ctx, "usage: irscan <device> <instr> [dev2] [instr2] ...");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
fields = malloc(sizeof(scan_field_t) * argc / 2);
fields[i].in_handler_priv = NULL;
}
- jtag_add_ir_scan(argc / 2, fields, -1, NULL);
+ jtag_add_ir_scan(argc / 2, fields, -1);
jtag_execute_queue();
for (i = 0; i < argc / 2; i++)
if ((argc < 2) || (argc % 2))
{
- command_print(cmd_ctx, "usage: drscan <device> <var> [dev2] [var2]");
- return ERROR_OK;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
for (i = 0; i < argc; i+=2)
}
}
- jtag_add_dr_scan(num_fields, fields, -1, NULL);
+ jtag_add_dr_scan(num_fields, fields, -1);
jtag_execute_queue();
for (i = 0; i < argc / 2; i++)
int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- if (argc == 0)
- {
- command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
- return ERROR_OK;
- }
-
- if (strcmp(args[0], "enable") == 0)
+ if (argc == 1)
{
- jtag_verify_capture_ir = 1;
- }
- else if (strcmp(args[0], "disable") == 0)
+ if (strcmp(args[0], "enable") == 0)
+ {
+ jtag_verify_capture_ir = 1;
+ }
+ else if (strcmp(args[0], "disable") == 0)
+ {
+ jtag_verify_capture_ir = 0;
+ } else
+ {
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+ } else if (argc != 0)
{
- jtag_verify_capture_ir = 0;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
+ command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
+
return ERROR_OK;
}