extern struct jtag_interface *jtag_interface;
+struct jtag_tap *jtag_tap_by_jim_obj(Jim_Interp *interp, Jim_Obj *o)
+{
+ const char *cp = Jim_GetString(o, NULL);
+ struct jtag_tap *t = cp ? jtag_tap_by_string(cp) : NULL;
+ if (NULL == cp)
+ cp = "(unknown)";
+ if (NULL == t)
+ Jim_SetResult_sprintf(interp, "Tap '%s' could not be found", cp);
+ return t;
+}
+
static bool scan_is_safe(tap_state_t state)
{
switch (state)
if (!found)
jteap = calloc(1, sizeof(*jteap));
else if (NULL != jteap->body)
- Jim_DecrRefCount(interp, jteap->body);
+ Jim_DecrRefCount(goi->interp, jteap->body);
+ jteap->interp = goi->interp;
jteap->event = n->value;
Jim_Obj *o;
}
else if (found)
{
+ jteap->interp = goi->interp;
Jim_SetResult(goi->interp,
Jim_DuplicateObj(goi->interp, jteap->body));
}
tap->dotted_name, e, nvp->name,
Jim_GetString(jteap->body, NULL));
- if (Jim_EvalObj(interp, jteap->body) != JIM_OK)
+ if (Jim_EvalObj(jteap->interp, jteap->body) != JIM_OK)
{
- Jim_PrintErrorMessage(interp);
+ Jim_PrintErrorMessage(jteap->interp);
continue;
}
return JIM_OK;
}
+COMMAND_HANDLER(handle_jtag_init_command)
+{
+ if (CMD_ARGC != 0)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
+ static bool jtag_initialized = false;
+ if (jtag_initialized)
+ {
+ LOG_INFO("'jtag init' has already been called");
+ return ERROR_OK;
+ }
+ jtag_initialized = true;
+
+ LOG_DEBUG("Initializing jtag devices...");
+ return jtag_init(CMD_CTX);
+}
+
static const struct command_registration jtag_subcommand_handlers[] = {
+ {
+ .name = "init",
+ .mode = COMMAND_ANY,
+ .handler = &handle_jtag_init_command,
+ .help = "initialize jtag scan chain",
+ },
{
.name = "interface",
.mode = COMMAND_ANY,