+static const struct command_registration jtag_command_handlers[] = {
+
+ {
+ .name = "jtag_flush_queue_sleep",
+ .handler = handle_jtag_flush_queue_sleep,
+ .mode = COMMAND_ANY,
+ .help = "For debug purposes(simulate long delays of interface) "
+ "to test performance or change in behavior. Default 0ms.",
+ .usage = "[sleep in ms]",
+ },
+ {
+ .name = "jtag_rclk",
+ .handler = handle_jtag_rclk_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]",
+ },
+ {
+ .name = "jtag_ntrst_delay",
+ .handler = handle_jtag_ntrst_delay_command,
+ .mode = COMMAND_ANY,
+ .help = "delay after deasserting trst in ms",
+ .usage = "[milliseconds]",
+ },
+ {
+ .name = "jtag_ntrst_assert_width",
+ .handler = handle_jtag_ntrst_assert_width_command,
+ .mode = COMMAND_ANY,
+ .help = "delay after asserting trst in ms",
+ .usage = "[milliseconds]",
+ },
+ {
+ .name = "scan_chain",
+ .handler = handle_scan_chain_command,
+ .mode = COMMAND_ANY,
+ .help = "print current scan chain configuration",
+ .usage = ""
+ },
+ {
+ .name = "jtag_reset",
+ .handler = handle_jtag_reset_command,
+ .mode = COMMAND_EXEC,
+ .help = "Set reset line values. Value '1' is active, "
+ "value '0' is inactive.",
+ .usage = "trst_active srst_active",
+ },
+ {
+ .name = "runtest",
+ .handler = handle_runtest_command,
+ .mode = COMMAND_EXEC,
+ .help = "Move to Run-Test/Idle, and issue TCK for num_cycles.",
+ .usage = "num_cycles"
+ },
+ {
+ .name = "irscan",
+ .handler = handle_irscan_command,
+ .mode = COMMAND_EXEC,
+ .help = "Execute Instruction Register (DR) scan. The "
+ "specified opcodes are put into each TAP's IR, "
+ "and other TAPs are put in BYPASS.",
+ .usage = "[tap_name instruction]* ['-endstate' state_name]",
+ },
+ {
+ .name = "verify_ircapture",
+ .handler = handle_verify_ircapture_command,
+ .mode = COMMAND_ANY,
+ .help = "Display or assign flag controlling whether to "
+ "verify values captured during Capture-IR.",
+ .usage = "['enable'|'disable']",
+ },
+ {
+ .name = "verify_jtag",
+ .handler = handle_verify_jtag_command,
+ .mode = COMMAND_ANY,
+ .help = "Display or assign flag controlling whether to "
+ "verify values captured during IR and DR scans.",
+ .usage = "['enable'|'disable']",
+ },
+ {
+ .name = "tms_sequence",
+ .handler = handle_tms_sequence_command,
+ .mode = COMMAND_ANY,
+ .help = "Display or change what style TMS sequences to use "
+ "for JTAG state transitions: short (default) or "
+ "long. Only for working around JTAG bugs.",
+ /* Specifically for working around DRIVER bugs... */
+ .usage = "['short'|'long']",
+ },
+ {
+ .name = "wait_srst_deassert",
+ .handler = handle_wait_srst_deassert,
+ .mode = COMMAND_ANY,
+ .help = "Wait for an SRST deassert. "
+ "Useful for cases where you need something to happen within ms "
+ "of an srst deassert. Timeout in ms ",
+ .usage = "ms",
+ },
+ {
+ .name = "jtag",
+ .mode = COMMAND_ANY,
+ .help = "perform jtag tap actions",
+ .usage = "",
+
+ .chain = jtag_subcommand_handlers,
+ },
+ {
+ .chain = jtag_command_handlers_to_move,
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
+int jtag_register_commands(struct command_context *cmd_ctx)
+{
+ return register_commands(cmd_ctx, NULL, jtag_command_handlers);
+}