- type = jtag_scan_type(cmd->cmd.scan);
- jlink_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size, cmd->cmd.scan);
- break;
-
- case JTAG_RESET:
- DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
-
- jlink_tap_execute();
-
- if (cmd->cmd.reset->trst == 1)
- {
- tap_set_state(TAP_RESET);
- }
- jlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
- break;
-
- case JTAG_SLEEP:
- DEBUG_JTAG_IO("sleep %i", cmd->cmd.sleep->us);
- jlink_tap_execute();
- jtag_sleep(cmd->cmd.sleep->us);
- break;
-
- default:
- LOG_ERROR("BUG: unknown JTAG command type encountered");
- exit(-1);
- }
+ type = jtag_scan_type(cmd->cmd.scan);
+ jlink_scan(cmd->cmd.scan->ir_scan,
+ type, buffer, scan_size, cmd->cmd.scan);
+}
+
+static void jlink_execute_reset(jtag_command_t *cmd)
+{
+ DEBUG_JTAG_IO("reset trst: %i srst %i",
+ cmd->cmd.reset->trst, cmd->cmd.reset->srst);
+
+ jlink_tap_execute();
+
+ if (cmd->cmd.reset->trst == 1)
+ tap_set_state(TAP_RESET);
+
+ jlink_reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst);
+}
+
+static void jlink_execute_sleep(jtag_command_t *cmd)
+{
+ DEBUG_JTAG_IO("sleep %i", cmd->cmd.sleep->us);
+ jlink_tap_execute();
+ jtag_sleep(cmd->cmd.sleep->us);
+}
+
+static void jlink_execute_command(jtag_command_t *cmd)
+{
+ switch (cmd->type)
+ {
+ case JTAG_END_STATE: jlink_execute_end_state(cmd); break;
+ case JTAG_RUNTEST: jlink_execute_runtest(cmd); break;
+ case JTAG_STATEMOVE: jlink_execute_statemove(cmd); break;
+ case JTAG_PATHMOVE: jlink_execute_pathmove(cmd); break;
+ case JTAG_SCAN: jlink_execute_scan(cmd); break;
+ case JTAG_RESET: jlink_execute_reset(cmd); break;
+ case JTAG_SLEEP: jlink_execute_sleep(cmd); break;
+ default:
+ LOG_ERROR("BUG: unknown JTAG command type encountered");
+ exit(-1);
+ }
+}
+
+static int jlink_execute_queue(void)
+{
+ jtag_command_t *cmd = jtag_command_queue;
+
+ while (cmd != NULL)
+ {
+ jlink_execute_command(cmd);