X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fjtag.c;h=33330a09adaed2095dbeef9bee772d966a3a5e4e;hb=473dc89c24f3c17c04dcafbf9b5c79d73a35ffe4;hp=e818e92f0472664f243556f259122bb148685c85;hpb=a8473262165a456e46b70e58ff36ef9712b3db2a;p=openocd.git diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index e818e92f04..33330a09ad 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -66,9 +66,9 @@ int jtag_srst = 0; /** * List all TAPs that have been created. */ -static jtag_tap_t *jtag_all_taps = NULL; +static jtag_tap_t *__jtag_all_taps = NULL; /** - * The number of TAPs in the jtag_all_taps list, used to track the + * The number of TAPs in the __jtag_all_taps list, used to track the * assigned chain position to new TAPs */ static int jtag_num_taps = 0; @@ -236,9 +236,9 @@ static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, ch static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int handle_tms_sequence_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -jtag_tap_t *jtag_AllTaps(void) +jtag_tap_t *jtag_all_taps(void) { - return jtag_all_taps; + return __jtag_all_taps; }; int jtag_NumTotalTaps(void) @@ -252,7 +252,7 @@ int jtag_NumEnabledTaps(void) int n; n = 0; - t = jtag_AllTaps(); + t = jtag_all_taps(); while(t){ if( t->enabled ){ n++; @@ -267,7 +267,7 @@ static void jtag_tap_add(struct jtag_tap_s *t) { t->abs_chain_position = jtag_num_taps++; - jtag_tap_t **tap = &jtag_all_taps; + jtag_tap_t **tap = &__jtag_all_taps; while(*tap != NULL) tap = &(*tap)->next_tap; *tap = t; @@ -278,7 +278,7 @@ jtag_tap_t *jtag_TapByString( const char *s ) jtag_tap_t *t; char *cp; - t = jtag_AllTaps(); + t = jtag_all_taps(); /* try name first */ while(t){ if( 0 == strcmp( t->dotted_name, s ) ){ @@ -294,7 +294,7 @@ jtag_tap_t *jtag_TapByString( const char *s ) n = strtol( s, &cp, 0 ); if( (s != cp) && (*cp == 0) ){ /* Then it is... */ - t = jtag_TapByAbsPosition(n); + t = jtag_tap_by_abs_position(n); } } return t; @@ -319,13 +319,13 @@ jtag_tap_t * jtag_TapByJimObj( Jim_Interp *interp, Jim_Obj *o ) } /* returns a pointer to the n-th device in the scan chain */ -jtag_tap_t * jtag_TapByAbsPosition( int n ) +jtag_tap_t * jtag_tap_by_abs_position( int n ) { int orig_n; jtag_tap_t *t; orig_n = n; - t = jtag_AllTaps(); + t = jtag_all_taps(); while( t && (n > 0)) { n--; @@ -909,6 +909,11 @@ void jtag_execute_queue_noclear(void) } } +int jtag_get_flush_queue_count(void) +{ + return jtag_flush_queue_count; +} + int jtag_execute_queue(void) { int retval; @@ -1654,7 +1659,7 @@ int jtag_interface_init(struct command_context_s *cmd_ctx) } if(hasKHz) { - jtag_interface->khz(speed_khz, &jtag_speed); + jtag_interface->khz(jtag_get_speed_khz(), &jtag_speed); hasKHz = false; } @@ -1767,6 +1772,15 @@ int jtag_init(struct command_context_s *cmd_ctx) return jtag_init_reset(cmd_ctx); } +void jtag_set_speed_khz(unsigned khz) +{ + speed_khz = khz; +} +unsigned jtag_get_speed_khz(void) +{ + return speed_khz; +} + static int default_khz(int khz, int *jtag_speed) { LOG_ERROR("Translation from khz to jtag_speed not implemented"); @@ -1919,7 +1933,7 @@ static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cm { jtag_tap_t *tap; - tap = jtag_AllTaps(); + tap = jtag_all_taps(); command_print(cmd_ctx, " TapName | Enabled | IdCode Expected IrLen IrCap IrMask Instr "); command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------"); @@ -2071,7 +2085,7 @@ static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, ch } else { - jtag_nsrst_delay = strtoul(args[0], NULL, 0); + jtag_set_nsrst_delay(strtoul(args[0], NULL, 0)); } return ERROR_OK; @@ -2086,12 +2100,13 @@ static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, ch } else { - jtag_ntrst_delay = strtoul(args[0], NULL, 0); + jtag_set_ntrst_delay(strtoul(args[0], NULL, 0)); } return ERROR_OK; } + static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { int retval=ERROR_OK; @@ -2125,17 +2140,17 @@ static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, int retval=ERROR_OK; LOG_DEBUG("handle jtag khz"); + int cur_speed = 0; if(argc == 1) { - speed_khz = strtoul(args[0], NULL, 0); + jtag_set_speed_khz(strtoul(args[0], NULL, 0)); if (jtag != NULL) { - int cur_speed = 0; LOG_DEBUG("have interface set up"); int speed_div1; - if ((retval=jtag->khz(speed_khz, &speed_div1))!=ERROR_OK) + if ((retval=jtag->khz(jtag_get_speed_khz(), &speed_div1))!=ERROR_OK) { - speed_khz = 0; + jtag_set_speed_khz(0); return retval; } @@ -2152,20 +2167,18 @@ static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, { return ERROR_COMMAND_SYNTAX_ERROR; } + cur_speed = jtag_get_speed_khz(); if (jtag!=NULL) { - if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK) + if ((retval=jtag->speed_div(jtag_speed, &cur_speed))!=ERROR_OK) return retval; } - if (speed_khz==0) - { + if (cur_speed) + command_print(cmd_ctx, "%d kHz", cur_speed); + else command_print(cmd_ctx, "RCLK - adaptive"); - } else - { - command_print(cmd_ctx, "%d kHz", speed_khz); - } return retval; } @@ -2480,7 +2493,7 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args) { - Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_flush_queue_count)); + Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_get_flush_queue_count())); return JIM_OK; } @@ -2511,27 +2524,33 @@ static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, ch return ERROR_OK; } +void jtag_set_verify(bool enable) +{ + jtag_verify = enable; +} + +bool jtag_will_verify() +{ + return jtag_verify; +} + static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { + if (argc > 1) + return ERROR_COMMAND_SYNTAX_ERROR; + if (argc == 1) { if (strcmp(args[0], "enable") == 0) - { - jtag_verify = 1; - } + jtag_set_verify(true); else if (strcmp(args[0], "disable") == 0) - { - jtag_verify = 0; - } else - { + jtag_set_verify(false); + else return ERROR_COMMAND_SYNTAX_ERROR; - } - } else if (argc != 0) - { - return ERROR_COMMAND_SYNTAX_ERROR; } - command_print(cmd_ctx, "verify jtag capture is %s", (jtag_verify) ? "enabled": "disabled"); + const char *status = jtag_will_verify() ? "enabled": "disabled"; + command_print(cmd_ctx, "verify jtag capture is %s", status); return ERROR_OK; } @@ -2687,3 +2706,13 @@ int jtag_add_statemove(tap_state_t goal_state) return retval; } +void jtag_set_nsrst_delay(unsigned delay) +{ + jtag_nsrst_delay = delay; +} +void jtag_set_ntrst_delay(unsigned delay) +{ + jtag_ntrst_delay = delay; +} + +