tap_state_t xenddr = TAP_IDLE;
uint8_t opcode;
- uint8_t uc;
+ uint8_t uc = 0;
long file_offset = 0;
int loop_count = 0;
if (CMD_ARGC < 2)
{
- command_print(CMD_CTX, "usage: xsvf <device#|plain> <file> [<variant>] [quiet]");
- return ERROR_FAIL;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
/* we mess with CMD_ARGV starting point below, snapshot filename here */
if (xruntest)
{
result = svf_add_statemove(TAP_IDLE);
+ if (result != ERROR_OK)
+ return result;
if (runtest_requires_tck)
jtag_add_clocks(xruntest);
else
jtag_add_sleep(xruntest);
- }
- else if (xendir != TAP_DRPAUSE) /* we are already in TAP_DRPAUSE */
+ } else if (xendir != TAP_DRPAUSE) {
+ /* we are already in TAP_DRPAUSE */
result = svf_add_statemove(xenddr);
+ if (result != ERROR_OK)
+ return result;
+ }
}
break;
case XSETSDRMASKS:
- LOG_ERROR("unsupported XSETSDRMASKS\n");
+ LOG_ERROR("unsupported XSETSDRMASKS");
unsupported = 1;
break;
case XSDRINC:
- LOG_ERROR("unsupported XSDRINC\n");
+ LOG_ERROR("unsupported XSDRINC");
unsupported = 1;
break;
case XSDRB:
- LOG_ERROR("unsupported XSDRB\n");
+ LOG_ERROR("unsupported XSDRB");
unsupported = 1;
break;
case XSDRC:
- LOG_ERROR("unsupported XSDRC\n");
+ LOG_ERROR("unsupported XSDRC");
unsupported = 1;
break;
case XSDRE:
- LOG_ERROR("unsupported XSDRE\n");
+ LOG_ERROR("unsupported XSDRE");
unsupported = 1;
break;
case XSDRTDOB:
- LOG_ERROR("unsupported XSDRTDOB\n");
+ LOG_ERROR("unsupported XSDRTDOB");
unsupported = 1;
break;
case XSDRTDOC:
- LOG_ERROR("unsupported XSDRTDOC\n");
+ LOG_ERROR("unsupported XSDRTDOC");
unsupported = 1;
break;
case XSDRTDOE:
- LOG_ERROR("unsupported XSDRTDOE\n");
+ LOG_ERROR("unsupported XSDRTDOE");
unsupported = 1;
break;
XWAIT <uint8_t wait_state> <uint8_t end_state> <uint32_t usecs>
*/
- uint8_t wait;
+ uint8_t wait_local;
uint8_t end;
uint8_t delay_buf[4];
tap_state_t end_state;
int delay;
- if (read(xsvf_fd, &wait, 1) < 0
+ if (read(xsvf_fd, &wait_local, 1) < 0
|| read(xsvf_fd, &end, 1) < 0
|| read(xsvf_fd, delay_buf, 4) < 0)
{
break;
}
- wait_state = xsvf_to_tap(wait);
+ wait_state = xsvf_to_tap(wait_local);
end_state = xsvf_to_tap(end);
delay = be_to_h_u32(delay_buf);
{
/* FIXME handle statemove errors ... */
result = svf_add_statemove(wait_state);
+ if (result != ERROR_OK)
+ return result;
jtag_add_sleep(delay);
result = svf_add_statemove(end_state);
+ if (result != ERROR_OK)
+ return result;
}
}
break;
uint8_t clock_buf[4];
uint8_t usecs_buf[4];
- uint8_t wait;
+ uint8_t wait_local;
uint8_t end;
tap_state_t wait_state;
tap_state_t end_state;
int clock_count;
int usecs;
- if (read(xsvf_fd, &wait, 1) < 0
+ if (read(xsvf_fd, &wait_local, 1) < 0
|| read(xsvf_fd, &end, 1) < 0
|| read(xsvf_fd, clock_buf, 4) < 0
|| read(xsvf_fd, usecs_buf, 4) < 0)
break;
}
- wait_state = xsvf_to_tap(wait);
+ wait_state = xsvf_to_tap(wait_local);
end_state = xsvf_to_tap(end);
clock_count = be_to_h_u32(clock_buf);
/* FIXME handle statemove errors ... */
result = svf_add_statemove(wait_state);
+ if (result != ERROR_OK)
+ return result;
jtag_add_clocks(clock_count);
jtag_add_sleep(usecs);
result = svf_add_statemove(end_state);
+ if (result != ERROR_OK)
+ return result;
}
break;
struct scan_field field;
result = svf_add_statemove(loop_state);
+ if (result != ERROR_OK)
+ return result;
jtag_add_clocks(loop_clocks);
jtag_add_sleep(loop_usecs);
break;
default:
- LOG_ERROR("unknown xsvf command (0x%02X)\n", uc);
+ LOG_ERROR("unknown xsvf command (0x%02X)", uc);
unsupported = 1;
}
/* upon error, return the TAPs to a reasonable state */
result = svf_add_statemove(TAP_IDLE);
+ if (result != ERROR_OK)
+ return result;
result = jtag_execute_queue();
+ if (result != ERROR_OK)
+ return result;
break;
}
}