- added patch to change pathmove handling

https://lists.berlios.de/pipermail/openocd-development/2008-January/000678.html

(thanks to Øyvind for the patch)

git-svn-id: svn://svn.berlios.de/openocd/trunk@286 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
mifi
2008-02-10 12:58:24 +00:00
parent 70b2de2a63
commit 8f6d142b95
10 changed files with 11 additions and 63 deletions

View File

@@ -728,52 +728,18 @@ int jtag_add_pathmove(int num_states, enum tap_state *path)
return ERROR_JTAG_NOT_IMPLEMENTED;
}
if (jtag->support_pathmove)
{
/* allocate memory for a new list member */
*last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
last_comand_pointer = &((*last_cmd)->next);
(*last_cmd)->next = NULL;
(*last_cmd)->type = JTAG_PATHMOVE;
/* allocate memory for a new list member */
*last_cmd = cmd_queue_alloc(sizeof(jtag_command_t));
last_comand_pointer = &((*last_cmd)->next);
(*last_cmd)->next = NULL;
(*last_cmd)->type = JTAG_PATHMOVE;
(*last_cmd)->cmd.pathmove = cmd_queue_alloc(sizeof(pathmove_command_t));
(*last_cmd)->cmd.pathmove->num_states = num_states;
(*last_cmd)->cmd.pathmove->path = cmd_queue_alloc(sizeof(enum tap_state) * num_states);
(*last_cmd)->cmd.pathmove = cmd_queue_alloc(sizeof(pathmove_command_t));
(*last_cmd)->cmd.pathmove->num_states = num_states;
(*last_cmd)->cmd.pathmove->path = cmd_queue_alloc(sizeof(enum tap_state) * num_states);
for (i = 0; i < num_states; i++)
(*last_cmd)->cmd.pathmove->path[i] = path[i];
}
else
{
/* validate the desired path, and see if it fits a default path */
int begin = 0;
int end = 0;
int j;
for (i = 0; i < num_states; i++)
{
for (j = i; j < num_states; j++)
{
if (tap_move_map[path[j]] != -1)
{
end = j;
break;
}
}
if (begin - end <= 7) /* a default path spans no more than 7 states */
{
jtag_add_statemove(path[end]);
}
else
{
ERROR("encountered a TAP path that can't be fulfilled by default paths");
return ERROR_JTAG_NOT_IMPLEMENTED;
}
i = end;
}
}
for (i = 0; i < num_states; i++)
(*last_cmd)->cmd.pathmove->path[i] = path[i];
if (cmd_queue_cur_state == TAP_TLR && cmd_queue_end_state != TAP_TLR)
jtag_call_event_callbacks(JTAG_TRST_RELEASED);