X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fsvf%2Fsvf.c;h=dfdecbcd83c6c082c563d74f9853db66944deeaa;hp=4dea968fd471f25b29e4f54e81a1eddd4093ff51;hb=08a890e4aae307d874bd617f4dc742a56f2064a2;hpb=42ef503d37b18d907da16d26e99167566d5aabd1 diff --git a/src/svf/svf.c b/src/svf/svf.c index 4dea968fd4..dfdecbcd83 100644 --- a/src/svf/svf.c +++ b/src/svf/svf.c @@ -31,9 +31,9 @@ #include "config.h" #endif -#include "jtag.h" +#include #include "svf.h" -#include "time_support.h" +#include // SVF command @@ -89,13 +89,13 @@ static const char *svf_trst_mode_name[4] = "ABSENT" }; -typedef struct +struct svf_statemove { tap_state_t from; tap_state_t to; uint32_t num_of_moves; tap_state_t paths[8]; -}svf_statemove_t; +}; /* * These paths are from the SVF specification for the STATE command, to be @@ -112,7 +112,7 @@ typedef struct * and many SVF implementations, we don't want to risk missing that state. * To get to RESET, always we ignore the current state. */ -static const svf_statemove_t svf_statemoves[] = +static const struct svf_statemove svf_statemoves[] = { // from to num_of_moves, paths[8] // {TAP_RESET, TAP_RESET, 1, {TAP_RESET}}, @@ -141,7 +141,7 @@ static const svf_statemove_t svf_statemoves[] = #define XXR_TDO (1 << 1) #define XXR_MASK (1 << 2) #define XXR_SMASK (1 << 3) -typedef struct +struct svf_xxr_para { int len; int data_mask; @@ -149,9 +149,9 @@ typedef struct uint8_t *tdo; uint8_t *mask; uint8_t *smask; -}svf_xxr_para_t; +}; -typedef struct +struct svf_para { float frequency; tap_state_t ir_end_state; @@ -160,16 +160,16 @@ typedef struct tap_state_t runtest_end_state; trst_mode_t trst_mode; - svf_xxr_para_t hir_para; - svf_xxr_para_t hdr_para; - svf_xxr_para_t tir_para; - svf_xxr_para_t tdr_para; - svf_xxr_para_t sir_para; - svf_xxr_para_t sdr_para; -}svf_para_t; + struct svf_xxr_para hir_para; + struct svf_xxr_para hdr_para; + struct svf_xxr_para tir_para; + struct svf_xxr_para tdr_para; + struct svf_xxr_para sir_para; + struct svf_xxr_para sdr_para; +}; -static svf_para_t svf_para; -static const svf_para_t svf_para_init = +static struct svf_para svf_para; +static const struct svf_para svf_para_init = { // frequency, ir_end_state, dr_end_state, runtest_run_state, runtest_end_state, trst_mode 0, TAP_IDLE, TAP_IDLE, TAP_IDLE, TAP_IDLE, TRST_Z, @@ -193,23 +193,23 @@ static const svf_para_t svf_para_init = {0, 0, NULL, NULL, NULL, NULL}, }; -typedef struct +struct svf_check_tdo_para { int line_num; // used to record line number of the check operation // so more information could be printed int enabled; // check is enabled or not int buffer_offset; // buffer_offset to buffers int bit_len; // bit length to check -}svf_check_tdo_para_t; +}; #define SVF_CHECK_TDO_PARA_SIZE 1024 -static svf_check_tdo_para_t *svf_check_tdo_para = NULL; +static struct svf_check_tdo_para *svf_check_tdo_para = NULL; static int svf_check_tdo_para_index = 0; static int svf_read_command_from_file(int fd); static int svf_check_tdo(void); static int svf_add_check_para(uint8_t enabled, int buffer_offset, int bit_len); -static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str); +static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str); static int svf_fd = 0; static char *svf_command_buffer = NULL; @@ -224,7 +224,7 @@ static int svf_buffer_index = 0, svf_buffer_size = 0; static int svf_quiet = 0; -static void svf_free_xxd_para(svf_xxr_para_t *para) +static void svf_free_xxd_para(struct svf_xxr_para *para) { if (NULL != para) { @@ -282,7 +282,7 @@ int svf_add_statemove(tap_state_t state_to) return ERROR_OK; } - for (index = 0; index < DIM(svf_statemoves); index++) + for (index = 0; index < ARRAY_SIZE(svf_statemoves); index++) { if ((svf_statemoves[index].from == state_from) && (svf_statemoves[index].to == state_to)) @@ -308,38 +308,38 @@ COMMAND_HANDLER(handle_svf_command) int ret = ERROR_OK; long long time_ago; - if ((argc < 1) || (argc > (1 + SVF_NUM_OF_OPTIONS))) + if ((CMD_ARGC < 1) || (CMD_ARGC > (1 + SVF_NUM_OF_OPTIONS))) { - command_print(cmd_ctx, "usage: svf [quiet]"); + command_print(CMD_CTX, "usage: svf [quiet]"); return ERROR_FAIL; } // parse variant svf_quiet = 0; - for (unsigned i = 1; i < argc; i++) + for (unsigned i = 1; i < CMD_ARGC; i++) { - if (!strcmp(args[i], "quiet")) + if (!strcmp(CMD_ARGV[i], "quiet")) { svf_quiet = 1; } else { - LOG_ERROR("unknown variant for svf: %s", args[i]); + LOG_ERROR("unknown variant for svf: %s", CMD_ARGV[i]); // no need to free anything now return ERROR_FAIL; } } - if ((svf_fd = open(args[0], O_RDONLY)) < 0) + if ((svf_fd = open(CMD_ARGV[0], O_RDONLY)) < 0) { - command_print(cmd_ctx, "file \"%s\" not found", args[0]); + command_print(CMD_CTX, "file \"%s\" not found", CMD_ARGV[0]); // no need to free anything now return ERROR_FAIL; } - LOG_USER("svf processing file: \"%s\"", args[0]); + LOG_USER("svf processing file: \"%s\"", CMD_ARGV[0]); // get time time_ago = timeval_ms(); @@ -349,7 +349,7 @@ COMMAND_HANDLER(handle_svf_command) svf_command_buffer_size = 0; svf_check_tdo_para_index = 0; - svf_check_tdo_para = malloc(sizeof(svf_check_tdo_para_t) * SVF_CHECK_TDO_PARA_SIZE); + svf_check_tdo_para = malloc(sizeof(struct svf_check_tdo_para) * SVF_CHECK_TDO_PARA_SIZE); if (NULL == svf_check_tdo_para) { LOG_ERROR("not enough memory"); @@ -392,7 +392,7 @@ COMMAND_HANDLER(handle_svf_command) while (ERROR_OK == svf_read_command_from_file(svf_fd)) { - if (ERROR_OK != svf_run_command(cmd_ctx, svf_command_buffer)) + if (ERROR_OK != svf_run_command(CMD_CTX, svf_command_buffer)) { LOG_ERROR("fail to run command at line %d", svf_line_number); ret = ERROR_FAIL; @@ -410,7 +410,7 @@ COMMAND_HANDLER(handle_svf_command) } // print time - command_print(cmd_ctx, "%lld ms used", timeval_ms() - time_ago); + command_print(CMD_CTX, "%lld ms used", timeval_ms() - time_ago); free_all: @@ -457,11 +457,11 @@ free_all: if (ERROR_OK == ret) { - command_print(cmd_ctx, "svf file programmed successfully for %d commands", command_num); + command_print(CMD_CTX, "svf file programmed successfully for %d commands", command_num); } else { - command_print(cmd_ctx, "svf file programmed failed"); + command_print(CMD_CTX, "svf file programmed failed"); } return ret; @@ -470,7 +470,8 @@ free_all: #define SVFP_CMD_INC_CNT 1024 static int svf_read_command_from_file(int fd) { - char ch, *tmp_buffer = NULL; + unsigned char ch; + char *tmp_buffer = NULL; int cmd_pos = 0, cmd_ok = 0, slash = 0, comment = 0; while (!cmd_ok && (read(fd, &ch, 1) > 0)) @@ -750,7 +751,7 @@ static int svf_execute_tap(void) return ERROR_OK; } -static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) +static int svf_run_command(struct command_context *cmd_ctx, char *cmd_str) { char *argus[256], command; int num_of_argu = 0, i; @@ -762,9 +763,9 @@ static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) int run_count; float min_time, max_time; // for XXR - svf_xxr_para_t *xxr_para_tmp; + struct svf_xxr_para *xxr_para_tmp; uint8_t **pbuffer_tmp; - scan_field_t field; + struct scan_field field; // for STATE tap_state_t *path = NULL, state; @@ -783,7 +784,7 @@ static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) */ command = svf_find_string_in_array(argus[0], - (char **)svf_command_name, DIM(svf_command_name)); + (char **)svf_command_name, ARRAY_SIZE(svf_command_name)); switch (command) { case ENDDR: @@ -1350,12 +1351,9 @@ static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) return ERROR_FAIL; } } - // no need to keep this memory, in jtag_add_pathmove, path will be duplicated - if (NULL != path) - { - free(path); - path = NULL; - } + + free(path); + path = NULL; } else { @@ -1391,7 +1389,7 @@ static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) } i_tmp = svf_find_string_in_array(argus[1], (char **)svf_trst_mode_name, - DIM(svf_trst_mode_name)); + ARRAY_SIZE(svf_trst_mode_name)); switch (i_tmp) { case TRST_ON: @@ -1460,11 +1458,18 @@ static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) return ERROR_OK; } -int svf_register_commands(struct command_context_s *cmd_ctx) -{ - register_command(cmd_ctx, NULL, "svf", - &handle_svf_command, COMMAND_EXEC, - "run svf "); +static const struct command_registration svf_command_handlers[] = { + { + .name = "svf", + .handler = &handle_svf_command, + .mode = COMMAND_EXEC, + .help = "Runs a SVF file.", + .usage = "", + }, + COMMAND_REGISTRATION_DONE +}; - return ERROR_OK; +int svf_register_commands(struct command_context *cmd_ctx) +{ + return register_commands(cmd_ctx, NULL, svf_command_handlers); }