#endif
#include "xsvf.h"
-#include "jtag.h"
+#include <jtag/jtag.h>
#include "svf.h"
*/
struct jtag_tap *tap = NULL;
- if (argc < 2)
+ if (CMD_ARGC < 2)
{
- command_print(cmd_ctx, "usage: xsvf <device#|plain> <file> [<variant>] [quiet]");
+ command_print(CMD_CTX, "usage: xsvf <device#|plain> <file> [<variant>] [quiet]");
return ERROR_FAIL;
}
- /* we mess with args starting point below, snapshot filename here */
- const char *filename = args[1];
+ /* we mess with CMD_ARGV starting point below, snapshot filename here */
+ const char *filename = CMD_ARGV[1];
- if (strcmp(args[0], "plain") != 0)
+ if (strcmp(CMD_ARGV[0], "plain") != 0)
{
- tap = jtag_tap_by_string(args[0]);
+ tap = jtag_tap_by_string(CMD_ARGV[0]);
if (!tap)
{
- command_print(cmd_ctx, "Tap: %s unknown", args[0]);
+ command_print(CMD_CTX, "Tap: %s unknown", CMD_ARGV[0]);
return ERROR_FAIL;
}
}
if ((xsvf_fd = open(filename, O_RDONLY)) < 0)
{
- command_print(cmd_ctx, "file \"%s\" not found", filename);
+ command_print(CMD_CTX, "file \"%s\" not found", filename);
return ERROR_FAIL;
}
/* if this argument is present, then interpret xruntest counts as TCK cycles rather than as usecs */
- if ((argc > 2) && (strcmp(args[2], "virt2") == 0))
+ if ((CMD_ARGC > 2) && (strcmp(CMD_ARGV[2], "virt2") == 0))
{
runtest_requires_tck = 1;
- --argc;
- ++args;
+ --CMD_ARGC;
+ ++CMD_ARGV;
}
- if ((argc > 2) && (strcmp(args[2], "quiet") == 0))
+ if ((CMD_ARGC > 2) && (strcmp(CMD_ARGV[2], "quiet") == 0))
{
verbose = 0;
}
TAP_IDLE,
};
- jtag_add_pathmove(DIM(exception_path), exception_path);
+ jtag_add_pathmove(ARRAY_SIZE(exception_path), exception_path);
if (verbose)
LOG_USER("%s mismatch, xsdrsize=%d retry=%d", op_name, xsdrsize, attempt);
field.tap = tap;
field.num_bits = xsdrsize;
field.out_value = dr_out_buf;
- field.in_value = calloc(CEIL(field.num_bits, 8), 1);
+ field.in_value = calloc(DIV_ROUND_UP(field.num_bits, 8), 1);
if (tap == NULL)
jtag_add_plain_dr_scan(1, &field, jtag_set_end_state(TAP_DRPAUSE));
field.tap = tap;
field.num_bits = xsdrsize;
field.out_value = dr_out_buf;
- field.in_value = calloc(CEIL(field.num_bits, 8), 1);
+ field.in_value = calloc(DIV_ROUND_UP(field.num_bits, 8), 1);
if (attempt > 0 && verbose)
LOG_USER("LSDR retry %d", attempt);
if (tdo_mismatch)
{
- command_print(cmd_ctx, "TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
+ command_print(CMD_CTX, "TDO mismatch, somewhere near offset %lu in xsvf file, aborting",
file_offset);
if (unsupported)
{
off_t offset = lseek(xsvf_fd, 0, SEEK_CUR) - 1;
- command_print(cmd_ctx,
+ command_print(CMD_CTX,
"unsupported xsvf command (0x%02X) at offset %jd, aborting",
uc, (intmax_t)offset);
return ERROR_FAIL;
if (do_abort)
{
- command_print(cmd_ctx, "premature end of xsvf file detected, aborting");
+ command_print(CMD_CTX, "premature end of xsvf file detected, aborting");
return ERROR_FAIL;
}
close(xsvf_fd);
- command_print(cmd_ctx, "XSVF file programmed successfully");
+ command_print(CMD_CTX, "XSVF file programmed successfully");
return ERROR_OK;
}
+static const struct command_registration xsvf_command_handlers[] = {
+ {
+ .name = "xsvf",
+ .handler = &handle_xsvf_command,
+ .mode = COMMAND_EXEC,
+ .help = "Runs a XSVF file. If 'virt2' is given, xruntest "
+ "counts are interpreted as TCK cycles rather than "
+ "as microseconds. Without the 'quiet' option, all "
+ "comments, retries, and mismatches will be reported.",
+ .usage = "<file> [virt2] [quiet]",
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
int xsvf_register_commands(struct command_context *cmd_ctx)
{
- register_command(cmd_ctx, NULL, "xsvf",
- &handle_xsvf_command, COMMAND_EXEC,
- "run xsvf <file> [virt2] [quiet]");
-
- return ERROR_OK;
+ return register_commands(cmd_ctx, NULL, xsvf_command_handlers);
}
#if 0 /* this comment style used to try and keep uncrustify from adding * at begin of line */