change #include "jtag.h" to <jtag/jtag.h>
[fw/openocd] / src / xsvf / xsvf.c
index 17af9eadd783e7481c3a33f8a605222bee337cda..5cacbed808a2dea2a3197a6af9e030e5527e160c 100644 (file)
@@ -41,7 +41,7 @@
 #endif
 
 #include "xsvf.h"
-#include "jtag.h"
+#include <jtag/jtag.h>
 #include "svf.h"
 
 
@@ -175,7 +175,7 @@ static int xsvf_read_buffer(int num_bits, int fd, uint8_t* buf)
 }
 
 
-static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_xsvf_command)
 {
        uint8_t *dr_out_buf = NULL;                             /* from host to device (TDI) */
        uint8_t *dr_in_buf = NULL;                              /* from device to host (TDO) */
@@ -202,7 +202,6 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
        int             tdo_mismatch = 0;
        int             result;
        int             verbose = 1;
-       char            *filename;
 
        bool            collecting_path = false;
        tap_state_t     path[XSTATE_MAX_PATH];
@@ -218,41 +217,42 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
           additional devices in the scan chain, otherwise the device
           that should be affected
        */
-       jtag_tap_t *tap = NULL;
+       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;
        }
 
-       filename = args[1];             /* we mess with args starting point below, snapshot filename here */
+       /* 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;
        }
@@ -445,7 +445,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 
                                for (attempt = 0; attempt < limit;  ++attempt)
                                {
-                                       scan_field_t field;
+                                       struct scan_field field;
 
                                        if (attempt > 0)
                                        {
@@ -470,7 +470,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
                                                        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);
@@ -479,7 +479,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
                                        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));
@@ -692,7 +692,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
                                        do_abort = 1;
                                else
                                {
-                                       scan_field_t field;
+                                       struct scan_field field;
 
                                        field.tap = tap;
                                        field.num_bits = bitcount;
@@ -924,7 +924,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 
                                for (attempt = 0; attempt < limit;  ++attempt)
                                {
-                                       scan_field_t field;
+                                       struct scan_field field;
 
                                        result = svf_add_statemove(loop_state);
                                        jtag_add_clocks(loop_clocks);
@@ -933,7 +933,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
                                        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);
@@ -1012,7 +1012,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 
        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);
 
 
@@ -1022,7 +1022,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
        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;
@@ -1030,7 +1030,7 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 
        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;
        }
 
@@ -1045,18 +1045,28 @@ static int handle_xsvf_command(struct command_context_s *cmd_ctx, char *cmd, cha
 
        close(xsvf_fd);
 
-       command_print(cmd_ctx, "XSVF file programmed successfully");
+       command_print(CMD_CTX, "XSVF file programmed successfully");
 
        return ERROR_OK;
 }
 
-int xsvf_register_commands(struct command_context_s *cmd_ctx)
+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 */