use assert() to catch TAP_INVALID passed to jtag_add_xxx() fn's.
[fw/openocd] / src / jtag / jtag.c
1 /***************************************************************************
2  *   Copyright (C) 2005 by Dominic Rath                                    *
3  *   Dominic.Rath@gmx.de                                                   *
4  *                                                                         *
5  *   Copyright (C) 2007,2008 Ã˜yvind Harboe                                 *
6  *   oyvind.harboe@zylin.com                                               *
7  *                                                                         *
8  *   Copyright (C) 2009 SoftPLC Corporation                                *
9  *       http://softplc.com                                                *
10  *   dick@softplc.com                                                      *
11  *                                                                         *
12  *   This program is free software; you can redistribute it and/or modify  *
13  *   it under the terms of the GNU General Public License as published by  *
14  *   the Free Software Foundation; either version 2 of the License, or     *
15  *   (at your option) any later version.                                   *
16  *                                                                         *
17  *   This program is distributed in the hope that it will be useful,       *
18  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
19  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
20  *   GNU General Public License for more details.                          *
21  *                                                                         *
22  *   You should have received a copy of the GNU General Public License     *
23  *   along with this program; if not, write to the                         *
24  *   Free Software Foundation, Inc.,                                       *
25  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
26  ***************************************************************************/
27 #ifdef HAVE_CONFIG_H
28 #include "config.h"
29 #endif
30
31 #include "jtag.h"
32 #include "minidriver.h"
33 #include "interface.h"
34
35 #ifdef HAVE_STRINGS_H
36 #include <strings.h>
37 #endif
38
39
40 int jtag_flush_queue_count; /* count # of flushes for profiling / debugging purposes */
41
42 static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
43                 int in_num_fields, scan_field_t *in_fields, tap_state_t state);
44
45 /* note that this is not marked as static as it must be available from outside jtag.c for those
46    that implement the jtag_xxx() minidriver layer
47 */
48 int jtag_error=ERROR_OK;
49
50 char* jtag_event_strings[] =
51 {
52         "JTAG controller reset (RESET or TRST)"
53 };
54
55 const Jim_Nvp nvp_jtag_tap_event[] = {
56         { .value = JTAG_TAP_EVENT_ENABLE,       .name = "tap-enable" },
57         { .value = JTAG_TAP_EVENT_DISABLE,      .name = "tap-disable" },
58
59         { .name = NULL, .value = -1 }
60 };
61
62 int jtag_trst = 0;
63 int jtag_srst = 0;
64
65 static jtag_tap_t *jtag_all_taps = NULL;
66
67 enum reset_types jtag_reset_config = RESET_NONE;
68 tap_state_t cmd_queue_end_state = TAP_RESET;
69 tap_state_t cmd_queue_cur_state = TAP_RESET;
70
71 int jtag_verify_capture_ir = 1;
72 int jtag_verify = 1;
73
74 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
75 static int jtag_nsrst_delay = 0; /* default to no nSRST delay */
76 static int jtag_ntrst_delay = 0; /* default to no nTRST delay */
77
78 /* maximum number of JTAG devices expected in the chain
79  */
80 #define JTAG_MAX_CHAIN_SIZE 20
81
82 /* callbacks to inform high-level handlers about JTAG state changes */
83 jtag_event_callback_t *jtag_event_callbacks;
84
85 /* speed in kHz*/
86 static int speed_khz = 0;
87 /* flag if the kHz speed was defined */
88 static int hasKHz = 0;
89
90 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
91  */
92
93 #if BUILD_ECOSBOARD == 1
94         extern jtag_interface_t zy1000_interface;
95 #endif
96
97 #if BUILD_PARPORT == 1
98         extern jtag_interface_t parport_interface;
99 #endif
100
101 #if BUILD_DUMMY == 1
102         extern jtag_interface_t dummy_interface;
103 #endif
104
105 #if BUILD_FT2232_FTD2XX == 1
106         extern jtag_interface_t ft2232_interface;
107 #endif
108
109 #if BUILD_FT2232_LIBFTDI == 1
110         extern jtag_interface_t ft2232_interface;
111 #endif
112
113 #if BUILD_AMTJTAGACCEL == 1
114         extern jtag_interface_t amt_jtagaccel_interface;
115 #endif
116
117 #if BUILD_EP93XX == 1
118         extern jtag_interface_t ep93xx_interface;
119 #endif
120
121 #if BUILD_AT91RM9200 == 1
122         extern jtag_interface_t at91rm9200_interface;
123 #endif
124
125 #if BUILD_GW16012 == 1
126         extern jtag_interface_t gw16012_interface;
127 #endif
128
129 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
130         extern jtag_interface_t presto_interface;
131 #endif
132
133 #if BUILD_USBPROG == 1
134         extern jtag_interface_t usbprog_interface;
135 #endif
136
137 #if BUILD_JLINK == 1
138         extern jtag_interface_t jlink_interface;
139 #endif
140
141 #if BUILD_VSLLINK == 1
142         extern jtag_interface_t vsllink_interface;
143 #endif
144
145 #if BUILD_RLINK == 1
146         extern jtag_interface_t rlink_interface;
147 #endif
148
149 #if BUILD_ARMJTAGEW == 1
150         extern jtag_interface_t armjtagew_interface;
151 #endif
152
153 jtag_interface_t *jtag_interfaces[] = {
154 #if BUILD_ECOSBOARD == 1
155         &zy1000_interface,
156 #endif
157 #if BUILD_PARPORT == 1
158         &parport_interface,
159 #endif
160 #if BUILD_DUMMY == 1
161         &dummy_interface,
162 #endif
163 #if BUILD_FT2232_FTD2XX == 1
164         &ft2232_interface,
165 #endif
166 #if BUILD_FT2232_LIBFTDI == 1
167         &ft2232_interface,
168 #endif
169 #if BUILD_AMTJTAGACCEL == 1
170         &amt_jtagaccel_interface,
171 #endif
172 #if BUILD_EP93XX == 1
173         &ep93xx_interface,
174 #endif
175 #if BUILD_AT91RM9200 == 1
176         &at91rm9200_interface,
177 #endif
178 #if BUILD_GW16012 == 1
179         &gw16012_interface,
180 #endif
181 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
182         &presto_interface,
183 #endif
184 #if BUILD_USBPROG == 1
185         &usbprog_interface,
186 #endif
187 #if BUILD_JLINK == 1
188         &jlink_interface,
189 #endif
190 #if BUILD_VSLLINK == 1
191         &vsllink_interface,
192 #endif
193 #if BUILD_RLINK == 1
194         &rlink_interface,
195 #endif
196 #if BUILD_ARMJTAGEW == 1
197         &armjtagew_interface,
198 #endif
199         NULL,
200 };
201
202 struct jtag_interface_s *jtag = NULL;
203
204 /* configuration */
205 static jtag_interface_t *jtag_interface = NULL;
206 int jtag_speed = 0;
207
208 /* jtag commands */
209 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
210 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
211 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
212 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
213 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
214 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
215 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
216
217 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
218
219 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
220 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
221 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
222 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
223 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
224 static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args);
225
226 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
227 static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
228 static int handle_tms_sequence_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
229
230 jtag_tap_t *jtag_AllTaps(void)
231 {
232         return jtag_all_taps;
233 };
234
235 int jtag_NumTotalTaps(void)
236 {
237         jtag_tap_t *t;
238         int n;
239
240         n = 0;
241         t = jtag_AllTaps();
242         while(t){
243                 n++;
244                 t = t->next_tap;
245         }
246         return n;
247 }
248
249 int jtag_NumEnabledTaps(void)
250 {
251         jtag_tap_t *t;
252         int n;
253
254         n = 0;
255         t = jtag_AllTaps();
256         while(t){
257                 if( t->enabled ){
258                         n++;
259                 }
260                 t = t->next_tap;
261         }
262         return n;
263 }
264
265 jtag_tap_t *jtag_TapByString( const char *s )
266 {
267         jtag_tap_t *t;
268         char *cp;
269
270         t = jtag_AllTaps();
271         /* try name first */
272         while(t){
273                 if( 0 == strcmp( t->dotted_name, s ) ){
274                         break;
275                 } else {
276                         t = t->next_tap;
277                 }
278         }
279         /* backup plan is by number */
280         if( t == NULL ){
281                 /* ok - is "s" a number? */
282                 int n;
283                 n = strtol( s, &cp, 0 );
284                 if( (s != cp) && (*cp == 0) ){
285                         /* Then it is... */
286                         t = jtag_TapByAbsPosition(n);
287                 }
288         }
289         return t;
290 }
291
292 jtag_tap_t * jtag_TapByJimObj( Jim_Interp *interp, Jim_Obj *o )
293 {
294         jtag_tap_t *t;
295         const char *cp;
296
297         cp = Jim_GetString( o, NULL );
298         if(cp == NULL){
299                 cp = "(unknown)";
300                 t = NULL;
301         }  else {
302                 t = jtag_TapByString( cp );
303         }
304         if( t == NULL ){
305                 Jim_SetResult_sprintf(interp,"Tap: %s is unknown", cp );
306         }
307         return t;
308 }
309
310 /* returns a pointer to the n-th device in the scan chain */
311 jtag_tap_t * jtag_TapByAbsPosition( int n )
312 {
313         int orig_n;
314         jtag_tap_t *t;
315
316         orig_n = n;
317         t = jtag_AllTaps();
318
319         while( t && (n > 0)) {
320                 n--;
321                 t = t->next_tap;
322         }
323         return t;
324 }
325
326 int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
327 {
328         jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
329
330         if (callback == NULL)
331         {
332                 return ERROR_INVALID_ARGUMENTS;
333         }
334
335         if (*callbacks_p)
336         {
337                 while ((*callbacks_p)->next)
338                         callbacks_p = &((*callbacks_p)->next);
339                 callbacks_p = &((*callbacks_p)->next);
340         }
341
342         (*callbacks_p) = malloc(sizeof(jtag_event_callback_t));
343         (*callbacks_p)->callback = callback;
344         (*callbacks_p)->priv = priv;
345         (*callbacks_p)->next = NULL;
346
347         return ERROR_OK;
348 }
349
350 int jtag_unregister_event_callback(int (*callback)(enum jtag_event event, void *priv))
351 {
352         jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
353
354         if (callback == NULL)
355         {
356                 return ERROR_INVALID_ARGUMENTS;
357         }
358
359         while (*callbacks_p)
360         {
361                 jtag_event_callback_t **next = &((*callbacks_p)->next);
362                 if ((*callbacks_p)->callback == callback)
363                 {
364                         free(*callbacks_p);
365                         *callbacks_p = *next;
366                 }
367                 callbacks_p = next;
368         }
369
370         return ERROR_OK;
371 }
372
373 int jtag_call_event_callbacks(enum jtag_event event)
374 {
375         jtag_event_callback_t *callback = jtag_event_callbacks;
376
377         LOG_DEBUG("jtag event: %s", jtag_event_strings[event]);
378
379         while (callback)
380         {
381                 callback->callback(event, callback->priv);
382                 callback = callback->next;
383         }
384
385         return ERROR_OK;
386 }
387
388 static void jtag_checks(void)
389 {
390         assert(jtag_trst == 0);
391 }
392
393 static void jtag_prelude(tap_state_t state)
394 {
395         jtag_checks();
396
397         assert(state!=TAP_INVALID);
398
399         jtag_add_end_state(state);
400
401         cmd_queue_cur_state = cmd_queue_end_state;
402 }
403
404 void jtag_alloc_in_value32(scan_field_t *field)
405 {
406         interface_jtag_alloc_in_value32(field);
407 }
408
409 void jtag_add_ir_scan_noverify(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
410 {
411         int retval;
412         jtag_prelude(state);
413
414         retval=interface_jtag_add_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
415         if (retval!=ERROR_OK)
416                 jtag_error=retval;
417
418 }
419
420
421 /**
422  * Generate an IR SCAN with a list of scan fields with one entry for each enabled TAP.
423  *
424  * If the input field list contains an instruction value for a TAP then that is used
425  * otherwise the TAP is set to bypass.
426  *
427  * TAPs for which no fields are passed are marked as bypassed for subsequent DR SCANs.
428  *
429  */
430 void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
431 {
432         if (jtag_verify&&jtag_verify_capture_ir)
433         {
434                 /* 8 x 32 bit id's is enough for all invocations */
435
436                 for (int j = 0; j < in_num_fields; j++)
437                 {
438                         /* if we are to run a verification of the ir scan, we need to get the input back.
439                          * We may have to allocate space if the caller didn't ask for the input back.
440                          */
441                         in_fields[j].check_value=in_fields[j].tap->expected;
442                         in_fields[j].check_mask=in_fields[j].tap->expected_mask;
443                 }
444                 jtag_add_scan_check(jtag_add_ir_scan_noverify, in_num_fields, in_fields, state);
445         } else
446         {
447                 jtag_add_ir_scan_noverify(in_num_fields, in_fields, state);
448         }
449 }
450
451 /**
452  * Duplicate the scan fields passed into the function into an IR SCAN command
453  *
454  * This function assumes that the caller handles extra fields for bypassed TAPs
455  *
456  */
457 void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
458 {
459         int retval;
460
461         jtag_prelude(state);
462
463         retval=interface_jtag_add_plain_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
464         if (retval!=ERROR_OK)
465                 jtag_error=retval;
466 }
467
468 void jtag_add_callback(jtag_callback1_t f, u8 *in)
469 {
470         interface_jtag_add_callback(f, in);
471 }
472
473 void jtag_add_callback4(jtag_callback_t f, u8 *in,
474                 jtag_callback_data_t data1, jtag_callback_data_t data2,
475                 jtag_callback_data_t data3)
476 {
477         interface_jtag_add_callback4(f, in, data1, data2, data3);
478 }
479
480 int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits);
481
482 static int jtag_check_value_mask_callback(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
483 {
484         return jtag_check_value_inner(in, (u8 *)data1, (u8 *)data2, (int)data3);
485 }
486
487 static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
488                 int in_num_fields, scan_field_t *in_fields, tap_state_t state)
489 {
490         for (int i = 0; i < in_num_fields; i++)
491         {
492                 struct scan_field_s *field = &in_fields[i];
493                 field->allocated = 0;
494                 field->modified = 0;
495                 if (field->check_value || field->in_value)
496                         continue;
497                 interface_jtag_add_scan_check_alloc(field);
498                 field->modified = 1;
499         }
500
501         jtag_add_scan(in_num_fields, in_fields, state);
502
503         for (int i = 0; i < in_num_fields; i++)
504         {
505                 if ((in_fields[i].check_value != NULL) && (in_fields[i].in_value != NULL))
506                 {
507                         /* this is synchronous for a minidriver */
508                         jtag_add_callback4(jtag_check_value_mask_callback, in_fields[i].in_value,
509                                 (jtag_callback_data_t)in_fields[i].check_value,
510                                 (jtag_callback_data_t)in_fields[i].check_mask,
511                                 (jtag_callback_data_t)in_fields[i].num_bits);
512                 }
513                 if (in_fields[i].allocated)
514                 {
515                         free(in_fields[i].in_value);
516                 }
517                 if (in_fields[i].modified)
518                 {
519                         in_fields[i].in_value = NULL;
520                 }
521         }
522 }
523
524 void jtag_add_dr_scan_check(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
525 {
526         if (jtag_verify)
527         {
528                 jtag_add_scan_check(jtag_add_dr_scan, in_num_fields, in_fields, state);
529         } else
530         {
531                 jtag_add_dr_scan(in_num_fields, in_fields, state);
532         }
533 }
534
535
536 /**
537  * Generate a DR SCAN using the fields passed to the function
538  *
539  * For not bypassed TAPs the function checks in_fields and uses fields specified there.
540  * For bypassed TAPs the function generates a dummy 1bit field.
541  *
542  * The bypass status of TAPs is set by jtag_add_ir_scan().
543  *
544  */
545 void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
546 {
547         int retval;
548
549         jtag_prelude(state);
550
551         retval=interface_jtag_add_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
552         if (retval!=ERROR_OK)
553                 jtag_error=retval;
554 }
555
556
557
558 /**
559  * Duplicate the scan fields passed into the function into a DR SCAN command
560  *
561  * This function assumes that the caller handles extra fields for bypassed TAPs
562  *
563  */
564 void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
565 {
566         int retval;
567
568         jtag_prelude(state);
569
570         retval=interface_jtag_add_plain_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
571         if (retval!=ERROR_OK)
572                 jtag_error=retval;
573 }
574
575 void jtag_add_dr_out(jtag_tap_t* tap,
576                 int num_fields, const int* num_bits, const u32* value,
577                 tap_state_t end_state)
578 {
579         assert(end_state != TAP_INVALID);
580
581         cmd_queue_end_state = end_state;
582
583         cmd_queue_cur_state = cmd_queue_end_state;
584
585         interface_jtag_add_dr_out(tap,
586                         num_fields, num_bits, value,
587                         cmd_queue_end_state);
588 }
589
590 void jtag_add_tlr(void)
591 {
592         jtag_prelude(TAP_RESET);
593
594         int retval;
595         retval=interface_jtag_add_tlr();
596         if (retval!=ERROR_OK)
597                 jtag_error=retval;
598         
599         jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
600 }
601
602 void jtag_add_pathmove(int num_states, const tap_state_t *path)
603 {
604         tap_state_t cur_state = cmd_queue_cur_state;
605         int i;
606         int retval;
607
608         /* the last state has to be a stable state */
609         if (!tap_is_state_stable(path[num_states - 1]))
610         {
611                 LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
612                 exit(-1);
613         }
614
615         for (i=0; i<num_states; i++)
616         {
617                 if (path[i] == TAP_RESET)
618                 {
619                         LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
620                         exit(-1);
621                 }
622
623                 if ( tap_state_transition(cur_state, true)  != path[i]
624                   && tap_state_transition(cur_state, false) != path[i])
625                 {
626                         LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[i]));
627                         exit(-1);
628                 }
629                 cur_state = path[i];
630         }
631
632         jtag_checks();
633
634         retval = interface_jtag_add_pathmove(num_states, path);
635         cmd_queue_cur_state = path[num_states - 1];
636         if (retval!=ERROR_OK)
637                 jtag_error=retval;
638 }
639
640 void jtag_add_runtest(int num_cycles, tap_state_t state)
641 {
642         int retval;
643
644         jtag_prelude(state);
645
646         /* executed by sw or hw fifo */
647         retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);
648         if (retval!=ERROR_OK)
649                 jtag_error=retval;
650 }
651
652
653 void jtag_add_clocks( int num_cycles )
654 {
655         int retval;
656
657         if( !tap_is_state_stable(cmd_queue_cur_state) )
658         {
659                  LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
660                                  tap_state_name(cmd_queue_cur_state) );
661                  jtag_error = ERROR_JTAG_NOT_STABLE_STATE;
662                  return;
663         }
664
665         if( num_cycles > 0 )
666         {
667                 jtag_checks();
668
669                 retval = interface_jtag_add_clocks(num_cycles);
670                 if (retval != ERROR_OK)
671                         jtag_error=retval;
672         }
673 }
674
675 void jtag_add_reset(int req_tlr_or_trst, int req_srst)
676 {
677         int trst_with_tlr = 0;
678         int retval;
679
680         /* FIX!!! there are *many* different cases here. A better
681          * approach is needed for legal combinations of transitions...
682          */
683         if ((jtag_reset_config & RESET_HAS_SRST)&&
684                         (jtag_reset_config & RESET_HAS_TRST)&&
685                         ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0))
686         {
687                 if (((req_tlr_or_trst&&!jtag_trst)||
688                                 (!req_tlr_or_trst&&jtag_trst))&&
689                                 ((req_srst&&!jtag_srst)||
690                                                 (!req_srst&&jtag_srst)))
691                 {
692                         /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
693                         //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
694                 }
695         }
696
697         /* Make sure that jtag_reset_config allows the requested reset */
698         /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
699         if (((jtag_reset_config & RESET_SRST_PULLS_TRST) && (req_srst == 1)) && (!req_tlr_or_trst))
700         {
701                 LOG_ERROR("BUG: requested reset would assert trst");
702                 jtag_error=ERROR_FAIL;
703                 return;
704         }
705
706         /* if TRST pulls SRST, we reset with TAP T-L-R */
707         if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
708         {
709                 trst_with_tlr = 1;
710         }
711
712         if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
713         {
714                 LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
715                 jtag_error=ERROR_FAIL;
716                 return;
717         }
718
719         if (req_tlr_or_trst)
720         {
721                 if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
722                 {
723                         jtag_trst = 1;
724                 } else
725                 {
726                         trst_with_tlr = 1;
727                 }
728         } else
729         {
730                 jtag_trst = 0;
731         }
732
733         jtag_srst = req_srst;
734
735         retval = interface_jtag_add_reset(jtag_trst, jtag_srst);
736         if (retval!=ERROR_OK)
737         {
738                 jtag_error=retval;
739                 return;
740         }
741         jtag_execute_queue();
742
743         if (jtag_srst)
744         {
745                 LOG_DEBUG("SRST line asserted");
746         }
747         else
748         {
749                 LOG_DEBUG("SRST line released");
750                 if (jtag_nsrst_delay)
751                         jtag_add_sleep(jtag_nsrst_delay * 1000);
752         }
753
754         if (trst_with_tlr)
755         {
756                 LOG_DEBUG("JTAG reset with RESET instead of TRST");
757                 jtag_add_end_state(TAP_RESET);
758                 jtag_add_tlr();
759                 return;
760         }
761
762         if (jtag_trst)
763         {
764                 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
765                  * and inform possible listeners about this
766                  */
767                 LOG_DEBUG("TRST line asserted");
768                 tap_set_state(TAP_RESET);
769                 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
770         }
771         else
772         {
773                 if (jtag_ntrst_delay)
774                         jtag_add_sleep(jtag_ntrst_delay * 1000);
775         }
776 }
777
778 tap_state_t jtag_add_end_state(tap_state_t state)
779 {
780         if ((state == TAP_DRSHIFT)||(state == TAP_IRSHIFT))
781         {
782                 LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
783         }
784
785         if (state!=TAP_INVALID)
786                 cmd_queue_end_state = state;
787         return cmd_queue_end_state;
788 }
789
790 void jtag_add_sleep(u32 us)
791 {
792         keep_alive(); /* we might be running on a very slow JTAG clk */
793         int retval=interface_jtag_add_sleep(us);
794         if (retval!=ERROR_OK)
795                 jtag_error=retval;
796         return;
797 }
798
799 static const char *jtag_tap_name(const jtag_tap_t *tap)
800 {
801         return (tap == NULL) ? "(unknown)" : tap->dotted_name;
802 }
803
804 int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits)
805 {
806         int retval = ERROR_OK;
807
808         int compare_failed = 0;
809
810         if (in_check_mask)
811                 compare_failed = buf_cmp_mask(captured, in_check_value, in_check_mask, num_bits);
812         else
813                 compare_failed = buf_cmp(captured, in_check_value, num_bits);
814
815         if (compare_failed){
816                 /* An error handler could have caught the failing check
817                  * only report a problem when there wasn't a handler, or if the handler
818                  * acknowledged the error
819                  */
820                 /*
821                 LOG_WARNING("TAP %s:",
822                                         jtag_tap_name(field->tap));
823                                         */
824                 if (compare_failed)
825                 {
826                         char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
827                         char *in_check_value_char = buf_to_str(in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
828
829                         if (in_check_mask)
830                         {
831                                 char *in_check_mask_char;
832                                 in_check_mask_char = buf_to_str(in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
833                                 LOG_WARNING("value captured during scan didn't pass the requested check:");
834                                 LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
835                                                         captured_char, in_check_value_char, in_check_mask_char);
836                                 free(in_check_mask_char);
837                         }
838                         else
839                         {
840                                 LOG_WARNING("value captured during scan didn't pass the requested check: captured: 0x%s check_value: 0x%s", captured_char, in_check_value_char);
841                         }
842
843                         free(captured_char);
844                         free(in_check_value_char);
845
846                         retval = ERROR_JTAG_QUEUE_FAILED;
847                 }
848
849         }
850         return retval;
851 }
852
853 void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask)
854 {
855         assert(field->in_value != NULL);
856
857         if (value==NULL)
858         {
859                 /* no checking to do */
860                 return;
861         }
862
863         jtag_execute_queue_noclear();
864
865         int retval=jtag_check_value_inner(field->in_value, value, mask, field->num_bits);
866         jtag_set_error(retval);
867 }
868
869
870
871 int default_interface_jtag_execute_queue(void)
872 {
873         if (NULL == jtag)
874         {
875                 LOG_ERROR("No JTAG interface configured yet.  "
876                         "Issue 'init' command in startup scripts "
877                         "before communicating with targets.");
878                 return ERROR_FAIL;
879         }
880
881         return jtag->execute_queue();
882 }
883
884 void jtag_execute_queue_noclear(void)
885 {
886         /* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
887          * E.g. a JTAG over TCP/IP or USB....
888          */
889         jtag_flush_queue_count++;
890
891         int retval=interface_jtag_execute_queue();
892         /* we keep the first error */
893         if ((jtag_error==ERROR_OK)&&(retval!=ERROR_OK))
894         {
895                 jtag_error=retval;
896         }
897 }
898
899 int jtag_execute_queue(void)
900 {
901         int retval;
902         jtag_execute_queue_noclear();
903         retval=jtag_error;
904         jtag_error=ERROR_OK;
905         return retval;
906 }
907
908 int jtag_reset_callback(enum jtag_event event, void *priv)
909 {
910         jtag_tap_t *tap = priv;
911
912         LOG_DEBUG("-");
913
914         if (event == JTAG_TRST_ASSERTED)
915         {
916                 buf_set_ones(tap->cur_instr, tap->ir_length);
917                 tap->bypass = 1;
918         }
919
920         return ERROR_OK;
921 }
922
923 void jtag_sleep(u32 us)
924 {
925         alive_sleep(us/1000);
926 }
927
928 /* Try to examine chain layout according to IEEE 1149.1 Â§12
929  */
930 int jtag_examine_chain(void)
931 {
932         jtag_tap_t *tap;
933         scan_field_t field;
934         u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
935         int i;
936         int bit_count;
937         int device_count = 0;
938         u8 zero_check = 0x0;
939         u8 one_check = 0xff;
940
941         field.tap = NULL;
942         field.num_bits = sizeof(idcode_buffer) * 8;
943         field.out_value = idcode_buffer;
944
945         field.in_value = idcode_buffer;
946
947
948
949
950         for (i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
951         {
952                 buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
953         }
954
955         jtag_add_plain_dr_scan(1, &field, TAP_RESET);
956         jtag_execute_queue();
957
958         for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++)
959         {
960                 zero_check |= idcode_buffer[i];
961                 one_check &= idcode_buffer[i];
962         }
963
964         /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
965         if ((zero_check == 0x00) || (one_check == 0xff))
966         {
967                 LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
968                 return ERROR_JTAG_INIT_FAILED;
969         }
970
971         /* point at the 1st tap */
972         tap = jtag_NextEnabledTap(NULL);
973         if( tap == NULL ){
974                 LOG_ERROR("JTAG: No taps enabled?");
975                 return ERROR_JTAG_INIT_FAILED;
976         }
977
978         for (bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
979         {
980                 u32 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
981                 if ((idcode & 1) == 0)
982                 {
983                         /* LSB must not be 0, this indicates a device in bypass */
984                         LOG_WARNING("Tap/Device does not have IDCODE");
985                         idcode=0;
986
987                         bit_count += 1;
988                 }
989                 else
990                 {
991                         u32 manufacturer;
992                         u32 part;
993                         u32 version;
994
995                         /* some devices, such as AVR will output all 1's instead of TDI
996                         input value at end of chain. */
997                         if ((idcode == 0x000000FF)||(idcode == 0xFFFFFFFF))
998                         {
999                                 int unexpected=0;
1000                                 /* End of chain (invalid manufacturer ID)
1001                                  *
1002                                  * The JTAG examine is the very first thing that happens
1003                                  *
1004                                  * A single JTAG device requires only 64 bits to be read back correctly.
1005                                  *
1006                                  * The code below adds a check that the rest of the data scanned (640 bits)
1007                                  * are all as expected. This helps diagnose/catch problems with the JTAG chain
1008                                  *
1009                                  * earlier and gives more helpful/explicit error messages.
1010                                  */
1011                                 for (bit_count += 32; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;bit_count += 32)
1012                                 {
1013                                         idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1014                                         if (unexpected||((idcode != 0x000000FF)&&(idcode != 0xFFFFFFFF)))
1015                                         {
1016                                                 LOG_WARNING("Unexpected idcode after end of chain! %d 0x%08x", bit_count, idcode);
1017                                                 unexpected = 1;
1018                                         }
1019                                 }
1020
1021                                 break;
1022                         }
1023
1024 #define EXTRACT_MFG(X)  (((X) & 0xffe) >> 1)
1025                         manufacturer = EXTRACT_MFG(idcode);
1026 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
1027                         part = EXTRACT_PART(idcode);
1028 #define EXTRACT_VER(X)  (((X) & 0xf0000000) >> 28)
1029                         version = EXTRACT_VER(idcode);
1030
1031                         LOG_INFO("JTAG tap: %s tap/device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1032                                          ((tap != NULL) ? (tap->dotted_name) : "(not-named)"),
1033                                 idcode, manufacturer, part, version);
1034
1035                         bit_count += 32;
1036                 }
1037                 if (tap)
1038                 {
1039                         tap->idcode = idcode;
1040
1041                         if (tap->expected_ids_cnt > 0) {
1042                                 /* Loop over the expected identification codes and test for a match */
1043                                 u8 ii;
1044                                 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1045                                         if( tap->idcode == tap->expected_ids[ii] ){
1046                                                 break;
1047                                         }
1048                                 }
1049
1050                                 /* If none of the expected ids matched, log an error */
1051                                 if (ii == tap->expected_ids_cnt) {
1052                                         LOG_ERROR("JTAG tap: %s             got: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1053                                                           tap->dotted_name,
1054                                                           idcode,
1055                                                           EXTRACT_MFG( tap->idcode ),
1056                                                           EXTRACT_PART( tap->idcode ),
1057                                                           EXTRACT_VER( tap->idcode ) );
1058                                         for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1059                                                 LOG_ERROR("JTAG tap: %s expected %hhu of %hhu: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1060                                                                   tap->dotted_name,
1061                                                                   ii + 1,
1062                                                                   tap->expected_ids_cnt,
1063                                                                   tap->expected_ids[ii],
1064                                                                   EXTRACT_MFG( tap->expected_ids[ii] ),
1065                                                                   EXTRACT_PART( tap->expected_ids[ii] ),
1066                                                                   EXTRACT_VER( tap->expected_ids[ii] ) );
1067                                         }
1068
1069                                         return ERROR_JTAG_INIT_FAILED;
1070                                 } else {
1071                                         LOG_INFO("JTAG Tap/device matched");
1072                                 }
1073                         } else {
1074 #if 0
1075                                 LOG_INFO("JTAG TAP ID: 0x%08x - Unknown - please report (A) chipname and (B) idcode to the openocd project",
1076                                                  tap->idcode);
1077 #endif
1078                         }
1079                         tap = jtag_NextEnabledTap(tap);
1080                 }
1081                 device_count++;
1082         }
1083
1084         /* see if number of discovered devices matches configuration */
1085         if (device_count != jtag_NumEnabledTaps())
1086         {
1087                 LOG_ERROR("number of discovered devices in JTAG chain (%i) doesn't match (enabled) configuration (%i), total taps: %d",
1088                                   device_count, jtag_NumEnabledTaps(), jtag_NumTotalTaps());
1089                 LOG_ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1090                 return ERROR_JTAG_INIT_FAILED;
1091         }
1092
1093         return ERROR_OK;
1094 }
1095
1096 int jtag_validate_chain(void)
1097 {
1098         jtag_tap_t *tap;
1099         int total_ir_length = 0;
1100         u8 *ir_test = NULL;
1101         scan_field_t field;
1102         int chain_pos = 0;
1103
1104         tap = NULL;
1105         total_ir_length = 0;
1106         for(;;){
1107                 tap = jtag_NextEnabledTap(tap);
1108                 if( tap == NULL ){
1109                         break;
1110                 }
1111                 total_ir_length += tap->ir_length;
1112         }
1113
1114         total_ir_length += 2;
1115         ir_test = malloc(CEIL(total_ir_length, 8));
1116         buf_set_ones(ir_test, total_ir_length);
1117
1118         field.tap = NULL;
1119         field.num_bits = total_ir_length;
1120         field.out_value = ir_test;
1121         field.in_value = ir_test;
1122
1123
1124         jtag_add_plain_ir_scan(1, &field, TAP_RESET);
1125         jtag_execute_queue();
1126
1127         tap = NULL;
1128         chain_pos = 0;
1129         int val;
1130         for(;;){
1131                 tap = jtag_NextEnabledTap(tap);
1132                 if( tap == NULL ){
1133                         break;
1134                 }
1135
1136                 val = buf_get_u32(ir_test, chain_pos, 2);
1137                 if (val != 0x1)
1138                 {
1139                         char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1140                         LOG_ERROR("Could not validate JTAG scan chain, IR mismatch, scan returned 0x%s. tap=%s pos=%d expected 0x1 got %0x", cbuf, jtag_tap_name(tap), chain_pos, val);
1141                         free(cbuf);
1142                         free(ir_test);
1143                         return ERROR_JTAG_INIT_FAILED;
1144                 }
1145                 chain_pos += tap->ir_length;
1146         }
1147
1148         val = buf_get_u32(ir_test, chain_pos, 2);
1149         if (val != 0x3)
1150         {
1151                 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1152                 LOG_ERROR("Could not validate end of JTAG scan chain, IR mismatch, scan returned 0x%s. pos=%d expected 0x3 got %0x", cbuf, chain_pos, val);
1153                 free(cbuf);
1154                 free(ir_test);
1155                 return ERROR_JTAG_INIT_FAILED;
1156         }
1157
1158         free(ir_test);
1159
1160         return ERROR_OK;
1161 }
1162
1163 enum jtag_tap_cfg_param {
1164         JCFG_EVENT
1165 };
1166
1167 static Jim_Nvp nvp_config_opts[] = {
1168         { .name = "-event",      .value = JCFG_EVENT },
1169
1170         { .name = NULL,          .value = -1 }
1171 };
1172
1173 static int jtag_tap_configure_cmd( Jim_GetOptInfo *goi, jtag_tap_t * tap)
1174 {
1175         Jim_Nvp *n;
1176         Jim_Obj *o;
1177         int e;
1178
1179         /* parse config or cget options */
1180         while (goi->argc > 0) {
1181                 Jim_SetEmptyResult (goi->interp);
1182
1183                 e = Jim_GetOpt_Nvp(goi, nvp_config_opts, &n);
1184                 if (e != JIM_OK) {
1185                         Jim_GetOpt_NvpUnknown(goi, nvp_config_opts, 0);
1186                         return e;
1187                 }
1188
1189                 switch (n->value) {
1190                         case JCFG_EVENT:
1191                                 if (goi->argc == 0) {
1192                                         Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ..." );
1193                                         return JIM_ERR;
1194                                 }
1195
1196                                 e = Jim_GetOpt_Nvp( goi, nvp_jtag_tap_event, &n );
1197                                 if (e != JIM_OK) {
1198                                         Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
1199                                         return e;
1200                                 }
1201
1202                                 if (goi->isconfigure) {
1203                                         if (goi->argc != 1) {
1204                                                 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?");
1205                                                 return JIM_ERR;
1206                                         }
1207                                 } else {
1208                                         if (goi->argc != 0) {
1209                                                 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?");
1210                                                 return JIM_ERR;
1211                                         }
1212                                 }
1213
1214                                 {
1215                                         jtag_tap_event_action_t *jteap;
1216
1217                                         jteap = tap->event_action;
1218                                         /* replace existing? */
1219                                         while (jteap) {
1220                                                 if (jteap->event == (enum jtag_tap_event)n->value) {
1221                                                         break;
1222                                                 }
1223                                                 jteap = jteap->next;
1224                                         }
1225
1226                                         if (goi->isconfigure) {
1227                                                 if (jteap == NULL) {
1228                                                         /* create new */
1229                                                         jteap = calloc(1, sizeof (*jteap));
1230                                                 }
1231                                                 jteap->event = n->value;
1232                                                 Jim_GetOpt_Obj( goi, &o);
1233                                                 if (jteap->body) {
1234                                                         Jim_DecrRefCount(interp, jteap->body);
1235                                                 }
1236                                                 jteap->body = Jim_DuplicateObj(goi->interp, o);
1237                                                 Jim_IncrRefCount(jteap->body);
1238
1239                                                 /* add to head of event list */
1240                                                 jteap->next = tap->event_action;
1241                                                 tap->event_action = jteap;
1242                                                 Jim_SetEmptyResult(goi->interp);
1243                                         } else {
1244                                                 /* get */
1245                                                 if (jteap == NULL) {
1246                                                         Jim_SetEmptyResult(goi->interp);
1247                                                 } else {
1248                                                         Jim_SetResult(goi->interp, Jim_DuplicateObj(goi->interp, jteap->body));
1249                                                 }
1250                                         }
1251                                 }
1252                                 /* loop for more */
1253                                 break;
1254                 }
1255         } /* while (goi->argc) */
1256
1257         return JIM_OK;
1258 }
1259
1260 static int jim_newtap_cmd( Jim_GetOptInfo *goi )
1261 {
1262         jtag_tap_t *pTap;
1263         jtag_tap_t **ppTap;
1264         jim_wide w;
1265         int x;
1266         int e;
1267         int reqbits;
1268         Jim_Nvp *n;
1269         char *cp;
1270         const Jim_Nvp opts[] = {
1271 #define NTAP_OPT_IRLEN     0
1272                 { .name = "-irlen"                      ,       .value = NTAP_OPT_IRLEN },
1273 #define NTAP_OPT_IRMASK    1
1274                 { .name = "-irmask"                     ,       .value = NTAP_OPT_IRMASK },
1275 #define NTAP_OPT_IRCAPTURE 2
1276                 { .name = "-ircapture"          ,       .value = NTAP_OPT_IRCAPTURE },
1277 #define NTAP_OPT_ENABLED   3
1278                 { .name = "-enable"                     ,       .value = NTAP_OPT_ENABLED },
1279 #define NTAP_OPT_DISABLED  4
1280                 { .name = "-disable"            ,       .value = NTAP_OPT_DISABLED },
1281 #define NTAP_OPT_EXPECTED_ID 5
1282                 { .name = "-expected-id"        ,       .value = NTAP_OPT_EXPECTED_ID },
1283                 { .name = NULL                          ,       .value = -1 },
1284         };
1285
1286         pTap = malloc( sizeof(jtag_tap_t) );
1287         memset( pTap, 0, sizeof(*pTap) );
1288         if( !pTap ){
1289                 Jim_SetResult_sprintf( goi->interp, "no memory");
1290                 return JIM_ERR;
1291         }
1292         /*
1293          * we expect CHIP + TAP + OPTIONS
1294          * */
1295         if( goi->argc < 3 ){
1296                 Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
1297                 return JIM_ERR;
1298         }
1299         Jim_GetOpt_String( goi, &cp, NULL );
1300         pTap->chip = strdup(cp);
1301
1302         Jim_GetOpt_String( goi, &cp, NULL );
1303         pTap->tapname = strdup(cp);
1304
1305         /* name + dot + name + null */
1306         x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
1307         cp = malloc( x );
1308         sprintf( cp, "%s.%s", pTap->chip, pTap->tapname );
1309         pTap->dotted_name = cp;
1310
1311         LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
1312                           pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
1313
1314         /* default is enabled */
1315         pTap->enabled = 1;
1316
1317         /* deal with options */
1318 #define NTREQ_IRLEN      1
1319 #define NTREQ_IRCAPTURE  2
1320 #define NTREQ_IRMASK     4
1321
1322         /* clear them as we find them */
1323         reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
1324
1325         while( goi->argc ){
1326                 e = Jim_GetOpt_Nvp( goi, opts, &n );
1327                 if( e != JIM_OK ){
1328                         Jim_GetOpt_NvpUnknown( goi, opts, 0 );
1329                         return e;
1330                 }
1331                 LOG_DEBUG("Processing option: %s", n->name );
1332                 switch( n->value ){
1333                 case NTAP_OPT_ENABLED:
1334                         pTap->enabled = 1;
1335                         break;
1336                 case NTAP_OPT_DISABLED:
1337                         pTap->enabled = 0;
1338                         break;
1339                 case NTAP_OPT_EXPECTED_ID:
1340                 {
1341                         u32 *new_expected_ids;
1342
1343                         e = Jim_GetOpt_Wide( goi, &w );
1344                         if( e != JIM_OK) {
1345                                 Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
1346                                 return e;
1347                         }
1348
1349                         new_expected_ids = malloc(sizeof(u32) * (pTap->expected_ids_cnt + 1));
1350                         if (new_expected_ids == NULL) {
1351                                 Jim_SetResult_sprintf( goi->interp, "no memory");
1352                                 return JIM_ERR;
1353                         }
1354
1355                         memcpy(new_expected_ids, pTap->expected_ids, sizeof(u32) * pTap->expected_ids_cnt);
1356
1357                         new_expected_ids[pTap->expected_ids_cnt] = w;
1358
1359                         free(pTap->expected_ids);
1360                         pTap->expected_ids = new_expected_ids;
1361                         pTap->expected_ids_cnt++;
1362                         break;
1363                 }
1364                 case NTAP_OPT_IRLEN:
1365                 case NTAP_OPT_IRMASK:
1366                 case NTAP_OPT_IRCAPTURE:
1367                         e = Jim_GetOpt_Wide( goi, &w );
1368                         if( e != JIM_OK ){
1369                                 Jim_SetResult_sprintf( goi->interp, "option: %s bad parameter", n->name );
1370                                 return e;
1371                         }
1372                         if( (w < 0) || (w > 0xffff) ){
1373                                 /* wacky value */
1374                                 Jim_SetResult_sprintf( goi->interp, "option: %s - wacky value: %d (0x%x)",
1375                                                                            n->name, (int)(w), (int)(w));
1376                                 return JIM_ERR;
1377                         }
1378                         switch(n->value){
1379                         case NTAP_OPT_IRLEN:
1380                                 pTap->ir_length = w;
1381                                 reqbits &= (~(NTREQ_IRLEN));
1382                                 break;
1383                         case NTAP_OPT_IRMASK:
1384                                 pTap->ir_capture_mask = w;
1385                                 reqbits &= (~(NTREQ_IRMASK));
1386                                 break;
1387                         case NTAP_OPT_IRCAPTURE:
1388                                 pTap->ir_capture_value = w;
1389                                 reqbits &= (~(NTREQ_IRCAPTURE));
1390                                 break;
1391                         }
1392                 } /* switch(n->value) */
1393         } /* while( goi->argc ) */
1394
1395         /* Did we get all the options? */
1396         if( reqbits ){
1397                 // no
1398                 Jim_SetResult_sprintf( goi->interp,
1399                                                            "newtap: %s missing required parameters",
1400                                                            pTap->dotted_name);
1401                 /* TODO: Tell user what is missing :-( */
1402                 /* no memory leaks pelase */
1403                 free(((void *)(pTap->expected_ids)));
1404                 free(((void *)(pTap->chip)));
1405                 free(((void *)(pTap->tapname)));
1406                 free(((void *)(pTap->dotted_name)));
1407                 free(((void *)(pTap)));
1408                 return JIM_ERR;
1409         }
1410
1411         pTap->expected      = malloc( pTap->ir_length );
1412         pTap->expected_mask = malloc( pTap->ir_length );
1413         pTap->cur_instr     = malloc( pTap->ir_length );
1414
1415         buf_set_u32( pTap->expected,
1416                                  0,
1417                                  pTap->ir_length,
1418                                  pTap->ir_capture_value );
1419         buf_set_u32( pTap->expected_mask,
1420                                  0,
1421                                  pTap->ir_length,
1422                                  pTap->ir_capture_mask );
1423         buf_set_ones( pTap->cur_instr,
1424                                   pTap->ir_length );
1425
1426         pTap->bypass = 1;
1427
1428         jtag_register_event_callback(jtag_reset_callback, pTap );
1429
1430         ppTap = &(jtag_all_taps);
1431         while( (*ppTap) != NULL ){
1432                 ppTap = &((*ppTap)->next_tap);
1433         }
1434         *ppTap = pTap;
1435         {
1436                 static int n_taps = 0;
1437                 pTap->abs_chain_position = n_taps++;
1438         }
1439         LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
1440                                 (*ppTap)->dotted_name,
1441                                 (*ppTap)->abs_chain_position,
1442                                 (*ppTap)->ir_length,
1443                                 (*ppTap)->ir_capture_value,
1444                                 (*ppTap)->ir_capture_mask );
1445
1446         return ERROR_OK;
1447 }
1448
1449 static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
1450 {
1451         Jim_GetOptInfo goi;
1452         int e;
1453         Jim_Nvp *n;
1454         Jim_Obj *o;
1455         struct command_context_s *context;
1456
1457         enum {
1458                 JTAG_CMD_INTERFACE,
1459                 JTAG_CMD_INIT_RESET,
1460                 JTAG_CMD_NEWTAP,
1461                 JTAG_CMD_TAPENABLE,
1462                 JTAG_CMD_TAPDISABLE,
1463                 JTAG_CMD_TAPISENABLED,
1464                 JTAG_CMD_CONFIGURE,
1465                 JTAG_CMD_CGET
1466         };
1467
1468         const Jim_Nvp jtag_cmds[] = {
1469                 { .name = "interface"     , .value = JTAG_CMD_INTERFACE },
1470                 { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET },
1471                 { .name = "newtap"        , .value = JTAG_CMD_NEWTAP },
1472                 { .name = "tapisenabled"     , .value = JTAG_CMD_TAPISENABLED },
1473                 { .name = "tapenable"     , .value = JTAG_CMD_TAPENABLE },
1474                 { .name = "tapdisable"    , .value = JTAG_CMD_TAPDISABLE },
1475                 { .name = "configure"     , .value = JTAG_CMD_CONFIGURE },
1476                 { .name = "cget"          , .value = JTAG_CMD_CGET },
1477
1478                 { .name = NULL, .value = -1 },
1479         };
1480
1481         context = Jim_GetAssocData(interp, "context");
1482         /* go past the command */
1483         Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
1484
1485         e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
1486         if( e != JIM_OK ){
1487                 Jim_GetOpt_NvpUnknown( &goi, jtag_cmds, 0 );
1488                 return e;
1489         }
1490                 Jim_SetEmptyResult( goi.interp );
1491         switch( n->value ){
1492         case JTAG_CMD_INTERFACE:
1493                 /* return the name of the interface */
1494                 /* TCL code might need to know the exact type... */
1495                 /* FUTURE: we allow this as a means to "set" the interface. */
1496                 if( goi.argc != 0 ){
1497                         Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
1498                         return JIM_ERR;
1499                 }
1500                 Jim_SetResultString( goi.interp, jtag_interface->name, -1 );
1501                 return JIM_OK;
1502         case JTAG_CMD_INIT_RESET:
1503                 if( goi.argc != 0 ){
1504                         Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
1505                         return JIM_ERR;
1506                 }
1507                 e = jtag_init_reset(context);
1508                 if( e != ERROR_OK ){
1509                         Jim_SetResult_sprintf( goi.interp, "error: %d", e);
1510                         return JIM_ERR;
1511                 }
1512                 return JIM_OK;
1513         case JTAG_CMD_NEWTAP:
1514                 return jim_newtap_cmd( &goi );
1515                 break;
1516         case JTAG_CMD_TAPISENABLED:
1517         case JTAG_CMD_TAPENABLE:
1518         case JTAG_CMD_TAPDISABLE:
1519                 if( goi.argc != 1 ){
1520                         Jim_SetResultString( goi.interp, "Too many parameters",-1 );
1521                         return JIM_ERR;
1522                 }
1523
1524                 {
1525                         jtag_tap_t *t;
1526                         t = jtag_TapByJimObj( goi.interp, goi.argv[0] );
1527                         if( t == NULL ){
1528                                 return JIM_ERR;
1529                         }
1530                         switch( n->value ){
1531                         case JTAG_CMD_TAPISENABLED:
1532                                 e = t->enabled;
1533                                 break;
1534                         case JTAG_CMD_TAPENABLE:
1535                                 jtag_tap_handle_event( t, JTAG_TAP_EVENT_ENABLE);
1536                                 e = 1;
1537                                 t->enabled = e;
1538                                 break;
1539                         case JTAG_CMD_TAPDISABLE:
1540                                 jtag_tap_handle_event( t, JTAG_TAP_EVENT_DISABLE);
1541                                 e = 0;
1542                                 t->enabled = e;
1543                                 break;
1544                         }
1545                         Jim_SetResult( goi.interp, Jim_NewIntObj( goi.interp, e ) );
1546                         return JIM_OK;
1547                 }
1548                 break;
1549
1550         case JTAG_CMD_CGET:
1551                 if( goi.argc < 2 ){
1552                         Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ...");
1553                         return JIM_ERR;
1554                 }
1555
1556                 {
1557                         jtag_tap_t *t;
1558
1559                         Jim_GetOpt_Obj(&goi, &o);
1560                         t = jtag_TapByJimObj( goi.interp, o );
1561                         if( t == NULL ){
1562                                 return JIM_ERR;
1563                         }
1564
1565                         goi.isconfigure = 0;
1566                         return jtag_tap_configure_cmd( &goi, t);
1567                 }
1568                 break;
1569
1570         case JTAG_CMD_CONFIGURE:
1571                 if( goi.argc < 3 ){
1572                         Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
1573                         return JIM_ERR;
1574                 }
1575
1576                 {
1577                         jtag_tap_t *t;
1578
1579                         Jim_GetOpt_Obj(&goi, &o);
1580                         t = jtag_TapByJimObj( goi.interp, o );
1581                         if( t == NULL ){
1582                                 return JIM_ERR;
1583                         }
1584
1585                         goi.isconfigure = 1;
1586                         return jtag_tap_configure_cmd( &goi, t);
1587                 }
1588         }
1589
1590         return JIM_ERR;
1591 }
1592
1593 int jtag_register_commands(struct command_context_s *cmd_ctx)
1594 {
1595         register_jim( cmd_ctx, "jtag", jim_jtag_command, "perform jtag tap actions");
1596
1597         register_command(cmd_ctx, NULL, "interface", handle_interface_command,
1598                 COMMAND_CONFIG, "try to configure interface");
1599         register_command(cmd_ctx, NULL, "jtag_speed", handle_jtag_speed_command,
1600                 COMMAND_ANY, "(DEPRECATED) set jtag speed (if supported)");
1601         register_command(cmd_ctx, NULL, "jtag_khz", handle_jtag_khz_command,
1602                 COMMAND_ANY, "set maximum jtag speed (if supported); "
1603                 "parameter is maximum khz, or 0 for adaptive clocking (RTCK).");
1604         register_command(cmd_ctx, NULL, "jtag_device", handle_jtag_device_command,
1605                 COMMAND_CONFIG, "(DEPRECATED) jtag_device <ir_length> <ir_expected> <ir_mask>");
1606         register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command,
1607                 COMMAND_ANY,
1608                 "[none/trst_only/srst_only/trst_and_srst] [srst_pulls_trst/trst_pulls_srst] [combined/separate] [trst_push_pull/trst_open_drain] [srst_push_pull/srst_open_drain]");
1609         register_command(cmd_ctx, NULL, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command,
1610                 COMMAND_ANY, "jtag_nsrst_delay <ms> - delay after deasserting srst in ms");
1611         register_command(cmd_ctx, NULL, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command,
1612                 COMMAND_ANY, "jtag_ntrst_delay <ms> - delay after deasserting trst in ms");
1613
1614         register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command,
1615                 COMMAND_EXEC, "print current scan chain configuration");
1616
1617         register_command(cmd_ctx, NULL, "endstate", handle_endstate_command,
1618                 COMMAND_EXEC, "finish JTAG operations in <tap_state>");
1619         register_command(cmd_ctx, NULL, "jtag_reset", handle_jtag_reset_command,
1620                 COMMAND_EXEC, "toggle reset lines <trst> <srst>");
1621         register_command(cmd_ctx, NULL, "runtest", handle_runtest_command,
1622                 COMMAND_EXEC, "move to Run-Test/Idle, and execute <num_cycles>");
1623         register_command(cmd_ctx, NULL, "irscan", handle_irscan_command,
1624                 COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ...");
1625         register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ...");
1626         register_jim(cmd_ctx, "flush_count", Jim_Command_flush_count, "returns number of times the JTAG queue has been flushed");
1627
1628         register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command,
1629                 COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>");
1630         register_command(cmd_ctx, NULL, "verify_jtag", handle_verify_jtag_command,
1631                 COMMAND_ANY, "verify value capture <enable|disable>");
1632         register_command(cmd_ctx, NULL, "tms_sequence", handle_tms_sequence_command,
1633                 COMMAND_ANY, "choose short(default) or long tms_sequence <short|long>");
1634         return ERROR_OK;
1635 }
1636
1637 int jtag_interface_init(struct command_context_s *cmd_ctx)
1638 {
1639         if (jtag)
1640                 return ERROR_OK;
1641
1642         if (!jtag_interface)
1643         {
1644                 /* nothing was previously specified by "interface" command */
1645                 LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
1646                 return ERROR_JTAG_INVALID_INTERFACE;
1647         }
1648         if(hasKHz)
1649         {
1650                 jtag_interface->khz(speed_khz, &jtag_speed);
1651                 hasKHz = 0;
1652         }
1653
1654         if (jtag_interface->init() != ERROR_OK)
1655                 return ERROR_JTAG_INIT_FAILED;
1656
1657         jtag = jtag_interface;
1658         return ERROR_OK;
1659 }
1660
1661 static int jtag_init_inner(struct command_context_s *cmd_ctx)
1662 {
1663         jtag_tap_t *tap;
1664         int retval;
1665
1666         LOG_DEBUG("Init JTAG chain");
1667
1668         tap = jtag_NextEnabledTap(NULL);
1669         if( tap == NULL ){
1670                 LOG_ERROR("There are no enabled taps?");
1671                 return ERROR_JTAG_INIT_FAILED;
1672         }
1673
1674         jtag_add_tlr();
1675         if ((retval=jtag_execute_queue())!=ERROR_OK)
1676                 return retval;
1677
1678         /* examine chain first, as this could discover the real chain layout */
1679         if (jtag_examine_chain() != ERROR_OK)
1680         {
1681                 LOG_ERROR("trying to validate configured JTAG chain anyway...");
1682         }
1683
1684         if (jtag_validate_chain() != ERROR_OK)
1685         {
1686                 LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
1687         }
1688
1689         return ERROR_OK;
1690 }
1691
1692 int jtag_interface_quit(void)
1693 {
1694         if (!jtag || !jtag->quit)
1695                 return ERROR_OK;
1696
1697         // close the JTAG interface
1698         int result = jtag->quit();
1699         if (ERROR_OK != result)
1700                 LOG_ERROR("failed: %d", result);
1701
1702         return ERROR_OK;
1703 }
1704
1705
1706 int jtag_init_reset(struct command_context_s *cmd_ctx)
1707 {
1708         int retval;
1709
1710         if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
1711                 return retval;
1712
1713         LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
1714
1715         /* Reset can happen after a power cycle.
1716          *
1717          * Ideally we would only assert TRST or run RESET before the target reset.
1718          *
1719          * However w/srst_pulls_trst, trst is asserted together with the target
1720          * reset whether we want it or not.
1721          *
1722          * NB! Some targets have JTAG circuitry disabled until a
1723          * trst & srst has been asserted.
1724          *
1725          * NB! here we assume nsrst/ntrst delay are sufficient!
1726          *
1727          * NB! order matters!!!! srst *can* disconnect JTAG circuitry
1728          *
1729          */
1730         jtag_add_reset(1, 0); /* RESET or TRST */
1731         if (jtag_reset_config & RESET_HAS_SRST)
1732         {
1733                 jtag_add_reset(1, 1);
1734                 if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
1735                         jtag_add_reset(0, 1);
1736         }
1737         jtag_add_reset(0, 0);
1738         if ((retval = jtag_execute_queue()) != ERROR_OK)
1739                 return retval;
1740
1741         /* Check that we can communication on the JTAG chain + eventually we want to
1742          * be able to perform enumeration only after OpenOCD has started
1743          * telnet and GDB server
1744          *
1745          * That would allow users to more easily perform any magic they need to before
1746          * reset happens.
1747          */
1748         return jtag_init_inner(cmd_ctx);
1749 }
1750
1751 int jtag_init(struct command_context_s *cmd_ctx)
1752 {
1753         int retval;
1754         if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
1755                 return retval;
1756         if (jtag_init_inner(cmd_ctx)==ERROR_OK)
1757         {
1758                 return ERROR_OK;
1759         }
1760         return jtag_init_reset(cmd_ctx);
1761 }
1762
1763 static int default_khz(int khz, int *jtag_speed)
1764 {
1765         LOG_ERROR("Translation from khz to jtag_speed not implemented");
1766         return ERROR_FAIL;
1767 }
1768
1769 static int default_speed_div(int speed, int *khz)
1770 {
1771         LOG_ERROR("Translation from jtag_speed to khz not implemented");
1772         return ERROR_FAIL;
1773 }
1774
1775 static int default_power_dropout(int *dropout)
1776 {
1777         *dropout=0; /* by default we can't detect power dropout */
1778         return ERROR_OK;
1779 }
1780
1781 static int default_srst_asserted(int *srst_asserted)
1782 {
1783         *srst_asserted=0; /* by default we can't detect srst asserted */
1784         return ERROR_OK;
1785 }
1786
1787 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1788 {
1789         int i;
1790         int retval;
1791
1792         /* check whether the interface is already configured */
1793         if (jtag_interface)
1794         {
1795                 LOG_WARNING("Interface already configured, ignoring");
1796                 return ERROR_OK;
1797         }
1798
1799         /* interface name is a mandatory argument */
1800         if (argc < 1 || args[0][0] == '\0')
1801         {
1802                 return ERROR_COMMAND_SYNTAX_ERROR;
1803         }
1804
1805         for (i=0; jtag_interfaces[i]; i++)
1806         {
1807                 if (strcmp(args[0], jtag_interfaces[i]->name) == 0)
1808                 {
1809                         if ((retval = jtag_interfaces[i]->register_commands(cmd_ctx)) != ERROR_OK)
1810                         {
1811                                 return retval;
1812                         }
1813
1814                         jtag_interface = jtag_interfaces[i];
1815
1816                         if (jtag_interface->khz == NULL)
1817                         {
1818                                 jtag_interface->khz = default_khz;
1819                         }
1820                         if (jtag_interface->speed_div == NULL)
1821                         {
1822                                 jtag_interface->speed_div = default_speed_div;
1823                         }
1824                         if (jtag_interface->power_dropout == NULL)
1825                         {
1826                                 jtag_interface->power_dropout = default_power_dropout;
1827                         }
1828                         if (jtag_interface->srst_asserted == NULL)
1829                         {
1830                                 jtag_interface->srst_asserted = default_srst_asserted;
1831                         }
1832
1833                         return ERROR_OK;
1834                 }
1835         }
1836
1837         /* no valid interface was found (i.e. the configuration option,
1838          * didn't match one of the compiled-in interfaces
1839          */
1840         LOG_ERROR("No valid jtag interface found (%s)", args[0]);
1841         LOG_ERROR("compiled-in jtag interfaces:");
1842         for (i = 0; jtag_interfaces[i]; i++)
1843         {
1844                 LOG_ERROR("%i: %s", i, jtag_interfaces[i]->name);
1845         }
1846
1847         return ERROR_JTAG_INVALID_INTERFACE;
1848 }
1849
1850 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1851 {
1852         int e;
1853         char buf[1024];
1854         Jim_Obj *newargs[ 10 ];
1855         /*
1856          * CONVERT SYNTAX
1857          * argv[-1] = command
1858          * argv[ 0] = ir length
1859          * argv[ 1] = ir capture
1860          * argv[ 2] = ir mask
1861          * argv[ 3] = not actually used by anything but in the docs
1862          */
1863
1864         if( argc < 4 ){
1865                 command_print( cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
1866                 return ERROR_OK;
1867         }
1868         command_print( cmd_ctx, "OLD SYNTAX: DEPRECATED - translating to new syntax");
1869         command_print( cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
1870                                    args[0],
1871                                    args[1],
1872                                    args[2] );
1873         command_print( cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
1874         command_print( cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
1875         command_print( cmd_ctx, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
1876         command_print( cmd_ctx, "And then refer to the taps by the dotted name.");
1877
1878         newargs[0] = Jim_NewStringObj( interp, "jtag", -1   );
1879         newargs[1] = Jim_NewStringObj( interp, "newtap", -1 );
1880         sprintf( buf, "chip%d", jtag_NumTotalTaps() );
1881         newargs[2] = Jim_NewStringObj( interp, buf, -1 );
1882         sprintf( buf, "tap%d", jtag_NumTotalTaps() );
1883         newargs[3] = Jim_NewStringObj( interp, buf, -1  );
1884         newargs[4] = Jim_NewStringObj( interp, "-irlen", -1  );
1885         newargs[5] = Jim_NewStringObj( interp, args[0], -1  );
1886         newargs[6] = Jim_NewStringObj( interp, "-ircapture", -1  );
1887         newargs[7] = Jim_NewStringObj( interp, args[1], -1  );
1888         newargs[8] = Jim_NewStringObj( interp, "-irmask", -1  );
1889         newargs[9] = Jim_NewStringObj( interp, args[2], -1  );
1890
1891         command_print( cmd_ctx, "NEW COMMAND:");
1892         sprintf( buf, "%s %s %s %s %s %s %s %s %s %s",
1893                          Jim_GetString( newargs[0], NULL ),
1894                          Jim_GetString( newargs[1], NULL ),
1895                          Jim_GetString( newargs[2], NULL ),
1896                          Jim_GetString( newargs[3], NULL ),
1897                          Jim_GetString( newargs[4], NULL ),
1898                          Jim_GetString( newargs[5], NULL ),
1899                          Jim_GetString( newargs[6], NULL ),
1900                          Jim_GetString( newargs[7], NULL ),
1901                          Jim_GetString( newargs[8], NULL ),
1902                          Jim_GetString( newargs[9], NULL ) );
1903
1904         e = jim_jtag_command( interp, 10, newargs );
1905         if( e != JIM_OK ){
1906                 command_print( cmd_ctx, "%s", Jim_GetString( Jim_GetResult(interp), NULL ) );
1907         }
1908         return e;
1909 }
1910
1911 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1912 {
1913         jtag_tap_t *tap;
1914
1915         tap = jtag_all_taps;
1916         command_print(cmd_ctx, "     TapName            | Enabled |   IdCode      Expected    IrLen IrCap  IrMask Instr     ");
1917         command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
1918
1919         while( tap ){
1920                 u32 expected, expected_mask, cur_instr, ii;
1921                 expected = buf_get_u32(tap->expected, 0, tap->ir_length);
1922                 expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
1923                 cur_instr = buf_get_u32(tap->cur_instr, 0, tap->ir_length);
1924
1925                 command_print(cmd_ctx,
1926                                           "%2d | %-18s |    %c    | 0x%08x | 0x%08x | 0x%02x | 0x%02x | 0x%02x | 0x%02x",
1927                                           tap->abs_chain_position,
1928                                           tap->dotted_name,
1929                                           tap->enabled ? 'Y' : 'n',
1930                                           tap->idcode,
1931                                           (tap->expected_ids_cnt > 0 ? tap->expected_ids[0] : 0),
1932                                           tap->ir_length,
1933                                           expected,
1934                                           expected_mask,
1935                                           cur_instr);
1936
1937                 for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
1938                         command_print(cmd_ctx, "   |                    |         |            | 0x%08x |      |      |      |         ",
1939                                                   tap->expected_ids[ii]);
1940                 }
1941
1942                 tap = tap->next_tap;
1943         }
1944
1945         return ERROR_OK;
1946 }
1947
1948 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
1949 {
1950         int new_cfg = 0;
1951         int mask = 0;
1952
1953         if (argc < 1)
1954                 return ERROR_COMMAND_SYNTAX_ERROR;
1955
1956         /* Original versions cared about the order of these tokens:
1957          *   reset_config signals [combination [trst_type [srst_type]]]
1958          * They also clobbered the previous configuration even on error.
1959          *
1960          * Here we don't care about the order, and only change values
1961          * which have been explicitly specified.
1962          */
1963         for (; argc; argc--, args++) {
1964                 int tmp = 0;
1965                 int m;
1966
1967                 /* signals */
1968                 m = RESET_HAS_TRST | RESET_HAS_SRST;
1969                 if (strcmp(*args, "none") == 0)
1970                         tmp = RESET_NONE;
1971                 else if (strcmp(*args, "trst_only") == 0)
1972                         tmp = RESET_HAS_TRST;
1973                 else if (strcmp(*args, "srst_only") == 0)
1974                         tmp = RESET_HAS_SRST;
1975                 else if (strcmp(*args, "trst_and_srst") == 0)
1976                         tmp = RESET_HAS_TRST | RESET_HAS_SRST;
1977                 else
1978                         m = 0;
1979                 if (mask & m) {
1980                         LOG_ERROR("extra reset_config %s spec (%s)",
1981                                         "signal", *args);
1982                         return ERROR_INVALID_ARGUMENTS;
1983                 }
1984                 if (m)
1985                         goto next;
1986
1987                 /* combination (options for broken wiring) */
1988                 m = RESET_SRST_PULLS_TRST | RESET_TRST_PULLS_SRST;
1989                 if (strcmp(*args, "separate") == 0)
1990                         /* separate reset lines - default */;
1991                 else if (strcmp(*args, "srst_pulls_trst") == 0)
1992                         tmp |= RESET_SRST_PULLS_TRST;
1993                 else if (strcmp(*args, "trst_pulls_srst") == 0)
1994                         tmp |= RESET_TRST_PULLS_SRST;
1995                 else if (strcmp(*args, "combined") == 0)
1996                         tmp |= RESET_SRST_PULLS_TRST | RESET_TRST_PULLS_SRST;
1997                 else
1998                         m = 0;
1999                 if (mask & m) {
2000                         LOG_ERROR("extra reset_config %s spec (%s)",
2001                                         "combination", *args);
2002                         return ERROR_INVALID_ARGUMENTS;
2003                 }
2004                 if (m)
2005                         goto next;
2006
2007                 /* trst_type (NOP without HAS_TRST) */
2008                 m = RESET_TRST_OPEN_DRAIN;
2009                 if (strcmp(*args, "trst_open_drain") == 0)
2010                         tmp |= RESET_TRST_OPEN_DRAIN;
2011                 else if (strcmp(*args, "trst_push_pull") == 0)
2012                         /* push/pull from adapter - default */;
2013                 else
2014                         m = 0;
2015                 if (mask & m) {
2016                         LOG_ERROR("extra reset_config %s spec (%s)",
2017                                         "trst_type", *args);
2018                         return ERROR_INVALID_ARGUMENTS;
2019                 }
2020                 if (m)
2021                         goto next;
2022
2023                 /* srst_type (NOP without HAS_SRST) */
2024                 m |= RESET_SRST_PUSH_PULL;
2025                 if (strcmp(*args, "srst_push_pull") == 0)
2026                         tmp |= RESET_SRST_PUSH_PULL;
2027                 else if (strcmp(*args, "srst_open_drain") == 0)
2028                         /* open drain from adapter - default */;
2029                 else
2030                         m = 0;
2031                 if (mask & m) {
2032                         LOG_ERROR("extra reset_config %s spec (%s)",
2033                                         "srst_type", *args);
2034                         return ERROR_INVALID_ARGUMENTS;
2035                 }
2036                 if (m)
2037                         goto next;
2038
2039                 /* caller provided nonsense; fail */
2040                 LOG_ERROR("unknown reset_config flag (%s)", *args);
2041                 return ERROR_INVALID_ARGUMENTS;
2042
2043 next:
2044                 /* Remember the bits which were specified (mask)
2045                  * and their new values (new_cfg).
2046                  */
2047                 mask |= m;
2048                 new_cfg |= tmp;
2049         }
2050
2051         /* clear previous values of those bits, save new values */
2052         jtag_reset_config &= ~mask;
2053         jtag_reset_config |= new_cfg;
2054
2055         return ERROR_OK;
2056 }
2057
2058 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2059 {
2060         if (argc < 1)
2061         {
2062                 LOG_ERROR("jtag_nsrst_delay <ms> command takes one required argument");
2063                 exit(-1);
2064         }
2065         else
2066         {
2067                 jtag_nsrst_delay = strtoul(args[0], NULL, 0);
2068         }
2069
2070         return ERROR_OK;
2071 }
2072
2073 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2074 {
2075         if (argc < 1)
2076         {
2077                 LOG_ERROR("jtag_ntrst_delay <ms> command takes one required argument");
2078                 exit(-1);
2079         }
2080         else
2081         {
2082                 jtag_ntrst_delay = strtoul(args[0], NULL, 0);
2083         }
2084
2085         return ERROR_OK;
2086 }
2087
2088 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2089 {
2090         int retval=ERROR_OK;
2091
2092         if (argc == 1)
2093         {
2094                 LOG_DEBUG("handle jtag speed");
2095
2096                 int cur_speed = 0;
2097                 cur_speed = jtag_speed = strtoul(args[0], NULL, 0);
2098
2099                 /* this command can be called during CONFIG,
2100                  * in which case jtag isn't initialized */
2101                 if (jtag)
2102                 {
2103                         retval=jtag->speed(cur_speed);
2104                 }
2105         } else if (argc == 0)
2106         {
2107         } else
2108         {
2109                 return ERROR_COMMAND_SYNTAX_ERROR;
2110         }
2111         command_print(cmd_ctx, "jtag_speed: %d", jtag_speed);
2112
2113         return retval;
2114 }
2115
2116 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2117 {
2118         int retval=ERROR_OK;
2119         LOG_DEBUG("handle jtag khz");
2120
2121         if(argc == 1)
2122         {
2123                 speed_khz = strtoul(args[0], NULL, 0);
2124                 if (jtag != NULL)
2125                 {
2126                         int cur_speed = 0;
2127                         LOG_DEBUG("have interface set up");
2128                         int speed_div1;
2129                         if ((retval=jtag->khz(speed_khz, &speed_div1))!=ERROR_OK)
2130                         {
2131                                 speed_khz = 0;
2132                                 return retval;
2133                         }
2134
2135                         cur_speed = jtag_speed = speed_div1;
2136
2137                         retval=jtag->speed(cur_speed);
2138                 } else
2139                 {
2140                         hasKHz = 1;
2141                 }
2142         } else if (argc==0)
2143         {
2144         } else
2145         {
2146                 return ERROR_COMMAND_SYNTAX_ERROR;
2147         }
2148
2149         if (jtag!=NULL)
2150         {
2151                 if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK)
2152                         return retval;
2153         }
2154
2155         if (speed_khz==0)
2156         {
2157                 command_print(cmd_ctx, "RCLK - adaptive");
2158         } else
2159         {
2160                 command_print(cmd_ctx, "%d kHz", speed_khz);
2161         }
2162         return retval;
2163
2164 }
2165
2166 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2167 {
2168         tap_state_t state;
2169
2170         if (argc < 1)
2171         {
2172                 return ERROR_COMMAND_SYNTAX_ERROR;
2173         }
2174         else
2175         {
2176                 state = tap_state_by_name( args[0] );
2177                 if( state < 0 ){
2178                         command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
2179                         return ERROR_COMMAND_SYNTAX_ERROR;
2180                 }
2181                 jtag_add_end_state(state);
2182                 jtag_execute_queue();
2183         }
2184         command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state));
2185
2186         return ERROR_OK;
2187 }
2188
2189 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2190 {
2191         int trst = -1;
2192         int srst = -1;
2193
2194         if (argc < 2)
2195         {
2196                 return ERROR_COMMAND_SYNTAX_ERROR;
2197         }
2198
2199         if (args[0][0] == '1')
2200                 trst = 1;
2201         else if (args[0][0] == '0')
2202                 trst = 0;
2203         else
2204         {
2205                 return ERROR_COMMAND_SYNTAX_ERROR;
2206         }
2207
2208         if (args[1][0] == '1')
2209                 srst = 1;
2210         else if (args[1][0] == '0')
2211                 srst = 0;
2212         else
2213         {
2214                 return ERROR_COMMAND_SYNTAX_ERROR;
2215         }
2216
2217         if (jtag_interface_init(cmd_ctx) != ERROR_OK)
2218                 return ERROR_JTAG_INIT_FAILED;
2219
2220         jtag_add_reset(trst, srst);
2221         jtag_execute_queue();
2222
2223         return ERROR_OK;
2224 }
2225
2226 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2227 {
2228         if (argc < 1)
2229         {
2230                 return ERROR_COMMAND_SYNTAX_ERROR;
2231         }
2232
2233         jtag_add_runtest(strtol(args[0], NULL, 0), jtag_add_end_state(TAP_INVALID));
2234         jtag_execute_queue();
2235
2236         return ERROR_OK;
2237
2238 }
2239
2240 /*
2241  * For "irscan" or "drscan" commands, the "end" (really, "next") state
2242  * should be stable ... and *NOT* a shift state, otherwise free-running
2243  * jtag clocks could change the values latched by the update state.
2244  */
2245 static bool scan_is_safe(tap_state_t state)
2246 {
2247         switch (state)
2248         {
2249         case TAP_RESET:
2250         case TAP_IDLE:
2251         case TAP_DRPAUSE:
2252         case TAP_IRPAUSE:
2253                 return true;
2254         default:
2255                 return false;
2256         }
2257 }
2258
2259
2260 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2261 {
2262         int i;
2263         scan_field_t *fields;
2264         jtag_tap_t *tap;
2265         tap_state_t endstate;
2266
2267         if ((argc < 2) || (argc % 2))
2268         {
2269                 return ERROR_COMMAND_SYNTAX_ERROR;
2270         }
2271
2272         /* optional "-endstate" "statename" at the end of the arguments,
2273          * so that e.g. IRPAUSE can let us load the data register before
2274          * entering RUN/IDLE to execute the instruction we load here.
2275          */
2276         endstate = TAP_IDLE;
2277
2278         if( argc >= 4 ){
2279                 /* have at least one pair of numbers. */
2280                 /* is last pair the magic text? */
2281                 if( 0 == strcmp( "-endstate", args[ argc - 2 ] ) ){
2282                         const char *cpA;
2283                         const char *cpS;
2284                         cpA = args[ argc-1 ];
2285                         for( endstate = 0 ; endstate < TAP_NUM_STATES ; endstate++ ){
2286                                 cpS = tap_state_name( endstate );
2287                                 if( 0 == strcmp( cpA, cpS ) ){
2288                                         break;
2289                                 }
2290                         }
2291                         if( endstate >= TAP_NUM_STATES ){
2292                                 return ERROR_COMMAND_SYNTAX_ERROR;
2293                         } else {
2294                                 if (!scan_is_safe(endstate))
2295                                         LOG_WARNING("irscan with unsafe "
2296                                                         "endstate \"%s\"", cpA);
2297                                 /* found - remove the last 2 args */
2298                                 argc -= 2;
2299                         }
2300                 }
2301         }
2302
2303         int num_fields = argc / 2;
2304
2305         fields = malloc(sizeof(scan_field_t) * num_fields);
2306
2307         for (i = 0; i < num_fields; i++)
2308         {
2309                 tap = jtag_TapByString( args[i*2] );
2310                 if (tap==NULL)
2311                 {
2312                         command_print( cmd_ctx, "Tap: %s unknown", args[i*2] );
2313                         return ERROR_FAIL;
2314                 }
2315                 int field_size = tap->ir_length;
2316                 fields[i].tap = tap;
2317                 fields[i].num_bits = field_size;
2318                 fields[i].out_value = malloc(CEIL(field_size, 8));
2319                 buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0));
2320                 fields[i].in_value = NULL;
2321         }
2322
2323         /* did we have an endstate? */
2324         jtag_add_ir_scan(num_fields, fields, endstate);
2325
2326         int retval=jtag_execute_queue();
2327
2328         for (i = 0; i < num_fields; i++)
2329                 free(fields[i].out_value);
2330
2331         free (fields);
2332
2333         return retval;
2334 }
2335
2336 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args)
2337 {
2338         int retval;
2339         scan_field_t *fields;
2340         int num_fields;
2341         int field_count = 0;
2342         int i, e;
2343         jtag_tap_t *tap;
2344         tap_state_t endstate;
2345
2346         /* args[1] = device
2347          * args[2] = num_bits
2348          * args[3] = hex string
2349          * ... repeat num bits and hex string ...
2350          *
2351          * .. optionally:
2352         *     args[N-2] = "-endstate"
2353          *     args[N-1] = statename
2354          */
2355         if ((argc < 4) || ((argc % 2)!=0))
2356         {
2357                 Jim_WrongNumArgs(interp, 1, args, "wrong arguments");
2358                 return JIM_ERR;
2359         }
2360
2361         endstate = TAP_IDLE;
2362
2363         /* validate arguments as numbers */
2364         e = JIM_OK;
2365         for (i = 2; i < argc; i+=2)
2366         {
2367                 long bits;
2368                 const char *cp;
2369
2370                 e = Jim_GetLong(interp, args[i], &bits);
2371                 /* If valid - try next arg */
2372                 if( e == JIM_OK ){
2373                         continue;
2374                 }
2375
2376                 /* Not valid.. are we at the end? */
2377                 if ( ((i+2) != argc) ){
2378                         /* nope, then error */
2379                         return e;
2380                 }
2381
2382                 /* it could be: "-endstate FOO"
2383                  * e.g. DRPAUSE so we can issue more instructions
2384                  * before entering RUN/IDLE and executing them.
2385                  */
2386
2387                 /* get arg as a string. */
2388                 cp = Jim_GetString( args[i], NULL );
2389                 /* is it the magic? */
2390                 if( 0 == strcmp( "-endstate", cp ) ){
2391                         /* is the statename valid? */
2392                         cp = Jim_GetString( args[i+1], NULL );
2393
2394                         /* see if it is a valid state name */
2395                         endstate = tap_state_by_name(cp);
2396                         if( endstate < 0 ){
2397                                 /* update the error message */
2398                                 Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
2399                         } else {
2400                                 if (!scan_is_safe(endstate))
2401                                         LOG_WARNING("drscan with unsafe "
2402                                                         "endstate \"%s\"", cp);
2403
2404                                 /* valid - so clear the error */
2405                                 e = JIM_OK;
2406                                 /* and remove the last 2 args */
2407                                 argc -= 2;
2408                         }
2409                 }
2410
2411                 /* Still an error? */
2412                 if( e != JIM_OK ){
2413                         return e; /* too bad */
2414                 }
2415         } /* validate args */
2416
2417         tap = jtag_TapByJimObj( interp, args[1] );
2418         if( tap == NULL ){
2419                 return JIM_ERR;
2420         }
2421
2422         num_fields=(argc-2)/2;
2423         fields = malloc(sizeof(scan_field_t) * num_fields);
2424         for (i = 2; i < argc; i+=2)
2425         {
2426                 long bits;
2427                 int len;
2428                 const char *str;
2429
2430                 Jim_GetLong(interp, args[i], &bits);
2431                 str = Jim_GetString(args[i+1], &len);
2432
2433                 fields[field_count].tap = tap;
2434                 fields[field_count].num_bits = bits;
2435                 fields[field_count].out_value = malloc(CEIL(bits, 8));
2436                 str_to_buf(str, len, fields[field_count].out_value, bits, 0);
2437                 fields[field_count].in_value = fields[field_count].out_value;
2438                 field_count++;
2439         }
2440
2441         jtag_add_dr_scan(num_fields, fields, endstate);
2442
2443         retval = jtag_execute_queue();
2444         if (retval != ERROR_OK)
2445         {
2446                 Jim_SetResultString(interp, "drscan: jtag execute failed",-1);
2447                 return JIM_ERR;
2448         }
2449
2450         field_count=0;
2451         Jim_Obj *list = Jim_NewListObj(interp, NULL, 0);
2452         for (i = 2; i < argc; i+=2)
2453         {
2454                 long bits;
2455                 char *str;
2456
2457                 Jim_GetLong(interp, args[i], &bits);
2458                 str = buf_to_str(fields[field_count].in_value, bits, 16);
2459                 free(fields[field_count].out_value);
2460
2461                 Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str)));
2462                 free(str);
2463                 field_count++;
2464         }
2465
2466         Jim_SetResult(interp, list);
2467
2468         free(fields);
2469
2470         return JIM_OK;
2471 }
2472
2473
2474 static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args)
2475 {
2476         Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_flush_queue_count));
2477
2478         return JIM_OK;
2479 }
2480
2481
2482 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2483 {
2484         if (argc == 1)
2485         {
2486                 if (strcmp(args[0], "enable") == 0)
2487                 {
2488                         jtag_verify_capture_ir = 1;
2489                 }
2490                 else if (strcmp(args[0], "disable") == 0)
2491                 {
2492                         jtag_verify_capture_ir = 0;
2493                 } else
2494                 {
2495                         return ERROR_COMMAND_SYNTAX_ERROR;
2496                 }
2497         } else if (argc != 0)
2498         {
2499                 return ERROR_COMMAND_SYNTAX_ERROR;
2500         }
2501
2502         command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
2503
2504         return ERROR_OK;
2505 }
2506
2507 static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2508 {
2509         if (argc == 1)
2510         {
2511                 if (strcmp(args[0], "enable") == 0)
2512                 {
2513                         jtag_verify = 1;
2514                 }
2515                 else if (strcmp(args[0], "disable") == 0)
2516                 {
2517                         jtag_verify = 0;
2518                 } else
2519                 {
2520                         return ERROR_COMMAND_SYNTAX_ERROR;
2521                 }
2522         } else if (argc != 0)
2523         {
2524                 return ERROR_COMMAND_SYNTAX_ERROR;
2525         }
2526
2527         command_print(cmd_ctx, "verify jtag capture is %s", (jtag_verify) ? "enabled": "disabled");
2528
2529         return ERROR_OK;
2530 }
2531
2532
2533 int jtag_power_dropout(int *dropout)
2534 {
2535         return jtag->power_dropout(dropout);
2536 }
2537
2538 int jtag_srst_asserted(int *srst_asserted)
2539 {
2540         return jtag->srst_asserted(srst_asserted);
2541 }
2542
2543 void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
2544 {
2545         jtag_tap_event_action_t * jteap;
2546         int done;
2547
2548         jteap = tap->event_action;
2549
2550         done = 0;
2551         while (jteap) {
2552                 if (jteap->event == e) {
2553                         done = 1;
2554                         LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
2555                                         tap->dotted_name,
2556                                         e,
2557                                         Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
2558                                         Jim_GetString(jteap->body, NULL) );
2559                         if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
2560                                 Jim_PrintErrorMessage(interp);
2561                         }
2562                 }
2563
2564                 jteap = jteap->next;
2565         }
2566
2567         if (!done) {
2568                 LOG_DEBUG( "event %d %s - no action",
2569                                 e,
2570                                 Jim_Nvp_value2name_simple( nvp_jtag_tap_event, e)->name);
2571         }
2572 }
2573
2574 static int handle_tms_sequence_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2575 {
2576         if (argc > 1)
2577                 return ERROR_COMMAND_SYNTAX_ERROR;
2578
2579         if (argc == 1)
2580         {
2581                 bool use_new_table;
2582                 if (strcmp(args[0], "short") == 0)
2583                         use_new_table = true;
2584                 else if (strcmp(args[0], "long") == 0)
2585                         use_new_table = false;
2586                 else
2587                         return ERROR_COMMAND_SYNTAX_ERROR;
2588
2589                 tap_use_new_tms_table(use_new_table);
2590         }
2591
2592         command_print(cmd_ctx, "tms sequence is  %s",
2593                         tap_uses_new_tms_table() ? "short": "long");
2594
2595         return ERROR_OK;
2596 }
2597
2598 /**
2599  * Function jtag_add_statemove
2600  * moves from the current state to the goal \a state. This needs
2601  * to be handled according to the xsvf spec, see the XSTATE command
2602  * description.
2603  */
2604 int jtag_add_statemove(tap_state_t goal_state)
2605 {
2606         int retval = ERROR_OK;
2607
2608         tap_state_t moves[8];
2609         tap_state_t cur_state = cmd_queue_cur_state;
2610         int i;
2611         int tms_bits;
2612         int     tms_count;
2613
2614         LOG_DEBUG( "cur_state=%s goal_state=%s",
2615                 tap_state_name(cur_state),
2616                 tap_state_name(goal_state) );
2617
2618
2619         /*      From the XSVF spec, pertaining to XSTATE:
2620
2621                 For special states known as stable states (Test-Logic-Reset,
2622                 Run-Test/Idle, Pause-DR, Pause- IR), an XSVF interpreter follows
2623                 predefined TAP state paths when the starting state is a stable state and
2624                 when the XSTATE specifies a new stable state (see the STATE command in
2625                 the [Ref 5] for the TAP state paths between stable states). For
2626                 non-stable states, XSTATE should specify a state that is only one TAP
2627                 state transition distance from the current TAP state to avoid undefined
2628                 TAP state paths. A sequence of multiple XSTATE commands can be issued to
2629                 transition the TAP through a specific state path.
2630         */
2631
2632         if (goal_state==cur_state )
2633                 ;       /* nothing to do */
2634
2635         else if( goal_state==TAP_RESET )
2636         {
2637                 jtag_add_tlr();
2638         }
2639
2640         else if( tap_is_state_stable(cur_state) && tap_is_state_stable(goal_state) )
2641         {
2642                 /*      note: unless tms_bits holds a path that agrees with [Ref 5] in above
2643                         spec, then this code is not fully conformant to the xsvf spec.  This
2644                         puts a burden on tap_get_tms_path() function from the xsvf spec.
2645                         If in doubt, you should confirm that that burden is being met.
2646                 */
2647
2648                 tms_bits  = tap_get_tms_path(cur_state, goal_state);
2649                 tms_count = tap_get_tms_path_len(cur_state, goal_state);
2650
2651                 assert( (unsigned) tms_count < DIM(moves) );
2652
2653                 for (i=0;   i<tms_count;   i++, tms_bits>>=1)
2654                 {
2655                         bool bit = tms_bits & 1;
2656
2657                         cur_state = tap_state_transition(cur_state, bit);
2658                         moves[i] = cur_state;
2659                 }
2660
2661                 jtag_add_pathmove(tms_count, moves);
2662         }
2663
2664         /*      else state must be immediately reachable in one clock cycle, and does not
2665                 need to be a stable state.
2666         */
2667         else if( tap_state_transition(cur_state, true)  == goal_state
2668                 ||   tap_state_transition(cur_state, false) == goal_state )
2669         {
2670                 /* move a single state */
2671                 moves[0] = goal_state;
2672                 jtag_add_pathmove( 1, moves );
2673         }
2674
2675         else
2676         {
2677                 retval = ERROR_FAIL;
2678         }
2679
2680         return retval;
2681 }
2682