X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Ftcl.c;h=e755dd7ef2b7ff983bf892f26ead0b128dd9643c;hp=7307f64e3cf49ea695241e28c67a3db2fb058bde;hb=4946925bea77a4aace6c310b2b724cf2095c6719;hpb=c46c2d77e63264a9f0187a477b77032d0ce6fcfa diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c index 7307f64e3c..e755dd7ef2 100644 --- a/src/jtag/tcl.c +++ b/src/jtag/tcl.c @@ -636,9 +636,10 @@ COMMAND_HANDLER(handle_interface_command) if (strcmp(CMD_ARGV[0], jtag_interfaces[i]->name) != 0) continue; - if (NULL != jtag_interfaces[i]->register_commands) + if (NULL != jtag_interfaces[i]->commands) { - int retval = jtag_interfaces[i]->register_commands(CMD_CTX); + int retval = register_commands(CMD_CTX, NULL, + jtag_interfaces[i]->commands); if (ERROR_OK != retval) return retval; } @@ -1303,7 +1304,7 @@ static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *ar { tap_state_t states[8]; - if ((argc < 2) || ((size_t)argc > (sizeof(states)/sizeof(*states) + 1))) + if ((argc < 2) || ((size_t)argc > (ARRAY_SIZE(states) + 1))) { Jim_WrongNumArgs(interp, 1, args, "wrong arguments"); return JIM_ERR; @@ -1413,89 +1414,152 @@ COMMAND_HANDLER(handle_tms_sequence_command) return ERROR_OK; } -int jtag_register_commands(struct command_context *cmd_ctx) -{ - register_jim(cmd_ctx, "jtag", jim_jtag_command, - "perform jtag tap actions"); - - register_command(cmd_ctx, NULL, "interface", - handle_interface_command, COMMAND_CONFIG, - "try to configure interface"); - register_command(cmd_ctx, NULL, "interface_list", - &handle_interface_list_command, COMMAND_ANY, - "list all built-in interfaces"); - - register_command(cmd_ctx, NULL, "jtag_khz", - handle_jtag_khz_command, COMMAND_ANY, - "set maximum jtag speed (if supported); " - "parameter is maximum khz, or 0 for adaptive clocking (RTCK)."); - register_command(cmd_ctx, NULL, "jtag_rclk", - handle_jtag_rclk_command, COMMAND_ANY, - "fallback_speed_khz - set JTAG speed to RCLK or use fallback speed"); - register_command(cmd_ctx, NULL, "reset_config", - handle_reset_config_command, COMMAND_ANY, - "reset_config " - "[none|trst_only|srst_only|trst_and_srst] " +static const struct command_registration jtag_command_handlers[] = { + { + .name = "interface", + .handler = &handle_interface_command, + .mode = COMMAND_CONFIG, + .help = "select a JTAG interface", + .usage = "", + }, + { + .name = "interface_list", + .handler = &handle_interface_list_command, + .mode = COMMAND_ANY, + .help = "list all built-in interfaces", + }, + { + .name = "jtag_khz", + .handler = &handle_jtag_khz_command, + .mode = COMMAND_ANY, + .help = "set maximum jtag speed (if supported)", + .usage = "", + }, + { + .name = "jtag_rclk", + .handler = &handle_jtag_rclk_command, + .mode = COMMAND_ANY, + .help = "set JTAG speed to RCLK or use fallback speed", + .usage = "", + }, + { + .name = "reset_config", + .handler = &handle_reset_config_command, + .mode = COMMAND_ANY, + .help = "configure JTAG 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]"); - - register_command(cmd_ctx, NULL, "jtag_nsrst_delay", - handle_jtag_nsrst_delay_command, COMMAND_ANY, - "jtag_nsrst_delay " - "- delay after deasserting srst in ms"); - register_command(cmd_ctx, NULL, "jtag_ntrst_delay", - handle_jtag_ntrst_delay_command, COMMAND_ANY, - "jtag_ntrst_delay " - "- delay after deasserting trst in ms"); - - register_command(cmd_ctx, NULL, "jtag_nsrst_assert_width", - handle_jtag_nsrst_assert_width_command, COMMAND_ANY, - "jtag_nsrst_assert_width " - "- delay after asserting srst in ms"); - register_command(cmd_ctx, NULL, "jtag_ntrst_assert_width", - handle_jtag_ntrst_assert_width_command, COMMAND_ANY, - "jtag_ntrst_assert_width " - "- delay after asserting trst in ms"); - - register_command(cmd_ctx, NULL, "scan_chain", - handle_scan_chain_command, COMMAND_EXEC, - "print current scan chain configuration"); - - register_command(cmd_ctx, NULL, "jtag_reset", - handle_jtag_reset_command, COMMAND_EXEC, - "toggle reset lines "); - register_command(cmd_ctx, NULL, "runtest", - handle_runtest_command, COMMAND_EXEC, - "move to Run-Test/Idle, and execute "); - register_command(cmd_ctx, NULL, "irscan", - handle_irscan_command, COMMAND_EXEC, - "execute IR scan [dev2] [instr2] ..."); - - register_jim(cmd_ctx, "drscan", Jim_Command_drscan, - "execute DR scan " - " ..."); - - register_jim(cmd_ctx, "flush_count", Jim_Command_flush_count, - "returns number of times the JTAG queue has been flushed"); - - register_jim(cmd_ctx, "pathmove", Jim_Command_pathmove, - ",,... " - "- move JTAG to state1 then to state2, state3, etc."); - - register_command(cmd_ctx, NULL, "verify_ircapture", - handle_verify_ircapture_command, COMMAND_ANY, - "verify value captured during Capture-IR "); - register_command(cmd_ctx, NULL, "verify_jtag", - handle_verify_jtag_command, COMMAND_ANY, - "verify value capture "); - - register_command(cmd_ctx, NULL, "tms_sequence", - handle_tms_sequence_command, COMMAND_ANY, - "choose short(default) or long tms_sequence "); + "[srst_push_pull|srst_open_drain]", + }, + { + .name = "jtag_nsrst_delay", + .handler = &handle_jtag_nsrst_delay_command, + .mode = COMMAND_ANY, + .help = "delay after deasserting srst in ms", + .usage = "", + }, + { + .name = "jtag_ntrst_delay", + .handler = &handle_jtag_ntrst_delay_command, + .mode = COMMAND_ANY, + .help = "delay after deasserting trst in ms", + .usage = "" + }, + { + .name = "jtag_nsrst_assert_width", + .handler = &handle_jtag_nsrst_assert_width_command, + .mode = COMMAND_ANY, + .help = "delay after asserting srst in ms", + .usage = "" + }, + { + .name = "jtag_ntrst_assert_width", + .handler = &handle_jtag_ntrst_assert_width_command, + .mode = COMMAND_ANY, + .help = "delay after asserting trst in ms", + .usage = "" + }, + { + .name = "scan_chain", + .handler = &handle_scan_chain_command, + .mode = COMMAND_EXEC, + .help = "print current scan chain configuration", + }, + { + .name = "jtag_reset", + .handler = &handle_jtag_reset_command, + .mode = COMMAND_EXEC, + .help = "toggle reset lines", + .usage = " ", + }, + { + .name = "runtest", + .handler = &handle_runtest_command, + .mode = COMMAND_EXEC, + .help = "move to Run-Test/Idle, and execute ", + .usage = "" + }, + { + .name = "irscan", + .handler = &handle_irscan_command, + .mode = COMMAND_EXEC, + .help = "execute IR scan", + .usage = " [dev2] [instr2] ...", + }, + { + .name = "verify_ircapture", + .handler = &handle_verify_ircapture_command, + .mode = COMMAND_ANY, + .help = "verify value captured during Capture-IR", + .usage = "", + }, + { + .name = "verify_jtag", + .handler = &handle_verify_jtag_command, + .mode = COMMAND_ANY, + .help = "verify value capture", + .usage = "", + }, + { + .name = "tms_sequence", + .handler = &handle_tms_sequence_command, + .mode = COMMAND_ANY, + .help = "choose short(default) or long tms_sequence", + .usage = "", + }, + // jim commands + { + .name = "jtag", + .mode = COMMAND_ANY, + .jim_handler = &jim_jtag_command, + .help = "perform jtag tap actions", + }, + { + .name = "drscan", + .mode = COMMAND_EXEC, + .jim_handler = &Jim_Command_drscan, + .help = "execute DR scan " + " ...", + }, + { + .name = "flush_count", + .mode = COMMAND_EXEC, + .jim_handler = &Jim_Command_flush_count, + .help = "returns number of times the JTAG queue has been flushed", + }, + { + .name = "pathmove", + .mode = COMMAND_EXEC, + .jim_handler = &Jim_Command_pathmove, + .usage = ",,... ", + .help = "move JTAG to state1 then to state2, state3, etc.", + }, + COMMAND_REGISTRATION_DONE +}; - return ERROR_OK; +int jtag_register_commands(struct command_context *cmd_ctx) +{ + return register_commands(cmd_ctx, NULL, jtag_command_handlers); } - -