ebdd4a3d266a33f60da1fc2238d23016ebb6045c
[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
33 #ifdef HAVE_STRINGS_H
34 #include <strings.h>
35 #endif
36
37
38 int jtag_flush_queue_count; /* count # of flushes for profiling / debugging purposes */
39
40 static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
41                 int in_num_fields, scan_field_t *in_fields, tap_state_t state);
42
43 /* note that this is not marked as static as it must be available from outside jtag.c for those
44    that implement the jtag_xxx() minidriver layer
45 */
46 int jtag_error=ERROR_OK;
47
48 typedef struct cmd_queue_page_s
49 {
50         void *address;
51         size_t used;
52         struct cmd_queue_page_s *next;
53 } cmd_queue_page_t;
54
55 #define CMD_QUEUE_PAGE_SIZE (1024 * 1024)
56 static cmd_queue_page_t *cmd_queue_pages = NULL;
57
58 char* jtag_event_strings[] =
59 {
60         "JTAG controller reset (RESET or TRST)"
61 };
62
63 const Jim_Nvp nvp_jtag_tap_event[] = {
64         { .value = JTAG_TAP_EVENT_ENABLE,       .name = "tap-enable" },
65         { .value = JTAG_TAP_EVENT_DISABLE,      .name = "tap-disable" },
66
67         { .name = NULL, .value = -1 }
68 };
69
70 int jtag_trst = 0;
71 int jtag_srst = 0;
72
73 #ifndef HAVE_JTAG_MINIDRIVER_H
74 struct jtag_callback_entry
75 {
76         struct jtag_callback_entry *next;
77
78         jtag_callback_t callback;
79         u8 *in;
80         jtag_callback_data_t data1;
81         jtag_callback_data_t data2;
82         jtag_callback_data_t data3;
83 };
84
85
86 static struct jtag_callback_entry *jtag_callback_queue_head = NULL;
87 static struct jtag_callback_entry *jtag_callback_queue_tail = NULL;
88 #endif
89
90
91 jtag_command_t *jtag_command_queue = NULL;
92 jtag_command_t **last_command_pointer = &jtag_command_queue;
93 static jtag_tap_t *jtag_all_taps = NULL;
94
95 enum reset_types jtag_reset_config = RESET_NONE;
96 tap_state_t cmd_queue_end_state = TAP_RESET;
97 tap_state_t cmd_queue_cur_state = TAP_RESET;
98
99 int jtag_verify_capture_ir = 1;
100 int jtag_verify = 1;
101
102 /* how long the OpenOCD should wait before attempting JTAG communication after reset lines deasserted (in ms) */
103 static int jtag_nsrst_delay = 0; /* default to no nSRST delay */
104 static int jtag_ntrst_delay = 0; /* default to no nTRST delay */
105
106 /* maximum number of JTAG devices expected in the chain
107  */
108 #define JTAG_MAX_CHAIN_SIZE 20
109
110 /* callbacks to inform high-level handlers about JTAG state changes */
111 jtag_event_callback_t *jtag_event_callbacks;
112
113 /* speed in kHz*/
114 static int speed_khz = 0;
115 /* flag if the kHz speed was defined */
116 static int hasKHz = 0;
117
118 /* jtag interfaces (parport, FTDI-USB, TI-USB, ...)
119  */
120
121 #if BUILD_ECOSBOARD == 1
122         extern jtag_interface_t zy1000_interface;
123 #endif
124
125 #if BUILD_PARPORT == 1
126         extern jtag_interface_t parport_interface;
127 #endif
128
129 #if BUILD_DUMMY == 1
130         extern jtag_interface_t dummy_interface;
131 #endif
132
133 #if BUILD_FT2232_FTD2XX == 1
134         extern jtag_interface_t ft2232_interface;
135 #endif
136
137 #if BUILD_FT2232_LIBFTDI == 1
138         extern jtag_interface_t ft2232_interface;
139 #endif
140
141 #if BUILD_AMTJTAGACCEL == 1
142         extern jtag_interface_t amt_jtagaccel_interface;
143 #endif
144
145 #if BUILD_EP93XX == 1
146         extern jtag_interface_t ep93xx_interface;
147 #endif
148
149 #if BUILD_AT91RM9200 == 1
150         extern jtag_interface_t at91rm9200_interface;
151 #endif
152
153 #if BUILD_GW16012 == 1
154         extern jtag_interface_t gw16012_interface;
155 #endif
156
157 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
158         extern jtag_interface_t presto_interface;
159 #endif
160
161 #if BUILD_USBPROG == 1
162         extern jtag_interface_t usbprog_interface;
163 #endif
164
165 #if BUILD_JLINK == 1
166         extern jtag_interface_t jlink_interface;
167 #endif
168
169 #if BUILD_VSLLINK == 1
170         extern jtag_interface_t vsllink_interface;
171 #endif
172
173 #if BUILD_RLINK == 1
174         extern jtag_interface_t rlink_interface;
175 #endif
176
177 #if BUILD_ARMJTAGEW == 1
178         extern jtag_interface_t armjtagew_interface;
179 #endif
180
181 jtag_interface_t *jtag_interfaces[] = {
182 #if BUILD_ECOSBOARD == 1
183         &zy1000_interface,
184 #endif
185 #if BUILD_PARPORT == 1
186         &parport_interface,
187 #endif
188 #if BUILD_DUMMY == 1
189         &dummy_interface,
190 #endif
191 #if BUILD_FT2232_FTD2XX == 1
192         &ft2232_interface,
193 #endif
194 #if BUILD_FT2232_LIBFTDI == 1
195         &ft2232_interface,
196 #endif
197 #if BUILD_AMTJTAGACCEL == 1
198         &amt_jtagaccel_interface,
199 #endif
200 #if BUILD_EP93XX == 1
201         &ep93xx_interface,
202 #endif
203 #if BUILD_AT91RM9200 == 1
204         &at91rm9200_interface,
205 #endif
206 #if BUILD_GW16012 == 1
207         &gw16012_interface,
208 #endif
209 #if BUILD_PRESTO_LIBFTDI == 1 || BUILD_PRESTO_FTD2XX == 1
210         &presto_interface,
211 #endif
212 #if BUILD_USBPROG == 1
213         &usbprog_interface,
214 #endif
215 #if BUILD_JLINK == 1
216         &jlink_interface,
217 #endif
218 #if BUILD_VSLLINK == 1
219         &vsllink_interface,
220 #endif
221 #if BUILD_RLINK == 1
222         &rlink_interface,
223 #endif
224 #if BUILD_ARMJTAGEW == 1
225         &armjtagew_interface,
226 #endif
227         NULL,
228 };
229
230 jtag_interface_t *jtag = NULL;
231
232 /* configuration */
233 static jtag_interface_t *jtag_interface = NULL;
234 int jtag_speed = 0;
235
236 /* forward declarations */
237 //void jtag_add_pathmove(int num_states, tap_state_t *path);
238 //void jtag_add_runtest(int num_cycles, tap_state_t endstate);
239 //void jtag_add_end_state(tap_state_t endstate);
240 //void jtag_add_sleep(u32 us);
241 //int jtag_execute_queue(void);
242 static tap_state_t tap_state_by_name(const char *name);
243
244 /* jtag commands */
245 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
246 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
247 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
248 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
249 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
250 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
251 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
252
253 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
254
255 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
256 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
257 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
258 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
259 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv);
260 static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args);
261
262 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
263 static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
264 static int handle_tms_sequence_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
265
266 jtag_tap_t *jtag_AllTaps(void)
267 {
268         return jtag_all_taps;
269 };
270
271 int jtag_NumTotalTaps(void)
272 {
273         jtag_tap_t *t;
274         int n;
275
276         n = 0;
277         t = jtag_AllTaps();
278         while(t){
279                 n++;
280                 t = t->next_tap;
281         }
282         return n;
283 }
284
285 int jtag_NumEnabledTaps(void)
286 {
287         jtag_tap_t *t;
288         int n;
289
290         n = 0;
291         t = jtag_AllTaps();
292         while(t){
293                 if( t->enabled ){
294                         n++;
295                 }
296                 t = t->next_tap;
297         }
298         return n;
299 }
300
301 jtag_tap_t *jtag_TapByString( const char *s )
302 {
303         jtag_tap_t *t;
304         char *cp;
305
306         t = jtag_AllTaps();
307         /* try name first */
308         while(t){
309                 if( 0 == strcmp( t->dotted_name, s ) ){
310                         break;
311                 } else {
312                         t = t->next_tap;
313                 }
314         }
315         /* backup plan is by number */
316         if( t == NULL ){
317                 /* ok - is "s" a number? */
318                 int n;
319                 n = strtol( s, &cp, 0 );
320                 if( (s != cp) && (*cp == 0) ){
321                         /* Then it is... */
322                         t = jtag_TapByAbsPosition(n);
323                 }
324         }
325         return t;
326 }
327
328 jtag_tap_t * jtag_TapByJimObj( Jim_Interp *interp, Jim_Obj *o )
329 {
330         jtag_tap_t *t;
331         const char *cp;
332
333         cp = Jim_GetString( o, NULL );
334         if(cp == NULL){
335                 cp = "(unknown)";
336                 t = NULL;
337         }  else {
338                 t = jtag_TapByString( cp );
339         }
340         if( t == NULL ){
341                 Jim_SetResult_sprintf(interp,"Tap: %s is unknown", cp );
342         }
343         return t;
344 }
345
346 /* returns a pointer to the n-th device in the scan chain */
347 jtag_tap_t * jtag_TapByAbsPosition( int n )
348 {
349         int orig_n;
350         jtag_tap_t *t;
351
352         orig_n = n;
353         t = jtag_AllTaps();
354
355         while( t && (n > 0)) {
356                 n--;
357                 t = t->next_tap;
358         }
359         return t;
360 }
361
362 int jtag_register_event_callback(int (*callback)(enum jtag_event event, void *priv), void *priv)
363 {
364         jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
365
366         if (callback == NULL)
367         {
368                 return ERROR_INVALID_ARGUMENTS;
369         }
370
371         if (*callbacks_p)
372         {
373                 while ((*callbacks_p)->next)
374                         callbacks_p = &((*callbacks_p)->next);
375                 callbacks_p = &((*callbacks_p)->next);
376         }
377
378         (*callbacks_p) = malloc(sizeof(jtag_event_callback_t));
379         (*callbacks_p)->callback = callback;
380         (*callbacks_p)->priv = priv;
381         (*callbacks_p)->next = NULL;
382
383         return ERROR_OK;
384 }
385
386 int jtag_unregister_event_callback(int (*callback)(enum jtag_event event, void *priv))
387 {
388         jtag_event_callback_t **callbacks_p = &jtag_event_callbacks;
389
390         if (callback == NULL)
391         {
392                 return ERROR_INVALID_ARGUMENTS;
393         }
394
395         while (*callbacks_p)
396         {
397                 jtag_event_callback_t **next = &((*callbacks_p)->next);
398                 if ((*callbacks_p)->callback == callback)
399                 {
400                         free(*callbacks_p);
401                         *callbacks_p = *next;
402                 }
403                 callbacks_p = next;
404         }
405
406         return ERROR_OK;
407 }
408
409 int jtag_call_event_callbacks(enum jtag_event event)
410 {
411         jtag_event_callback_t *callback = jtag_event_callbacks;
412
413         LOG_DEBUG("jtag event: %s", jtag_event_strings[event]);
414
415         while (callback)
416         {
417                 callback->callback(event, callback->priv);
418                 callback = callback->next;
419         }
420
421         return ERROR_OK;
422 }
423
424 /* returns a pointer to the pointer of the last command in queue
425  * this may be a pointer to the root pointer (jtag_command_queue)
426  * or to the next member of the last but one command
427  */
428 jtag_command_t** jtag_get_last_command_p(void)
429 {
430 /*      jtag_command_t *cmd = jtag_command_queue;
431
432         if (cmd)
433                 while (cmd->next)
434                         cmd = cmd->next;
435         else
436                 return &jtag_command_queue;
437
438         return &cmd->next;*/
439
440         return last_command_pointer;
441 }
442
443
444 void jtag_queue_command(jtag_command_t * cmd)
445 {
446         jtag_command_t **last_cmd;
447
448         last_cmd = jtag_get_last_command_p();
449
450         *last_cmd = cmd;
451
452         (*last_cmd)->next = NULL;
453
454         last_command_pointer = &((*last_cmd)->next);
455 }
456
457
458 void* cmd_queue_alloc(size_t size)
459 {
460         cmd_queue_page_t **p_page = &cmd_queue_pages;
461         int offset;
462         u8 *t;
463
464         /*
465          * WARNING:
466          *    We align/round the *SIZE* per below
467          *    so that all pointers returned by
468          *    this function are reasonably well
469          *    aligned.
470          *
471          * If we did not, then an "odd-length" request would cause the
472          * *next* allocation to be at an *odd* address, and because
473          * this function has the same type of api as malloc() - we
474          * must also return pointers that have the same type of
475          * alignment.
476          *
477          * What I do not/have is a reasonable portable means
478          * to align by...
479          *
480          * The solution here, is based on these suggestions.
481          * http://gcc.gnu.org/ml/gcc-help/2008-12/msg00041.html
482          *
483          */
484         union worse_case_align {
485                 int i;
486                 long l;
487                 float f;
488                 void *v;
489         };
490 #define ALIGN_SIZE  (sizeof(union worse_case_align))
491
492         /* The alignment process. */
493         size = (size + ALIGN_SIZE -1) & (~(ALIGN_SIZE-1));
494         /* Done... */
495
496         if (*p_page)
497         {
498                 while ((*p_page)->next)
499                         p_page = &((*p_page)->next);
500                 if (CMD_QUEUE_PAGE_SIZE - (*p_page)->used < size)
501                         p_page = &((*p_page)->next);
502         }
503
504         if (!*p_page)
505         {
506                 *p_page = malloc(sizeof(cmd_queue_page_t));
507                 (*p_page)->used = 0;
508                 (*p_page)->address = malloc(CMD_QUEUE_PAGE_SIZE);
509                 (*p_page)->next = NULL;
510         }
511
512         offset = (*p_page)->used;
513         (*p_page)->used += size;
514
515         t=(u8 *)((*p_page)->address);
516         return t + offset;
517 }
518
519 void cmd_queue_free(void)
520 {
521         cmd_queue_page_t *page = cmd_queue_pages;
522
523         while (page)
524         {
525                 cmd_queue_page_t *last = page;
526                 free(page->address);
527                 page = page->next;
528                 free(last);
529         }
530
531         cmd_queue_pages = NULL;
532 }
533
534 /**
535  * Copy a scan_field_t for insertion into the queue.
536  *
537  * This allocates a new copy of out_value using cmd_queue_alloc.
538  */
539 static void cmd_queue_scan_field_clone(scan_field_t * dst, const scan_field_t * src)
540 {
541         dst->tap                = src->tap;
542         dst->num_bits   = src->num_bits;
543         dst->out_value  = buf_cpy(src->out_value, cmd_queue_alloc(CEIL(src->num_bits, 8)), src->num_bits);
544         dst->in_value   = src->in_value;
545 }
546
547
548 static void jtag_prelude1(void)
549 {
550         if (jtag_trst == 1)
551         {
552                 LOG_WARNING("JTAG command queued, while TRST is low (TAP in reset)");
553                 jtag_error=ERROR_JTAG_TRST_ASSERTED;
554                 return;
555         }
556
557         if (cmd_queue_end_state == TAP_RESET)
558                 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
559 }
560
561 static void jtag_prelude(tap_state_t state)
562 {
563         jtag_prelude1();
564
565         if (state != TAP_INVALID)
566                 jtag_add_end_state(state);
567
568         cmd_queue_cur_state = cmd_queue_end_state;
569 }
570
571 void jtag_add_ir_scan_noverify(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
572 {
573         int retval;
574         jtag_prelude(state);
575
576         retval=interface_jtag_add_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
577         if (retval!=ERROR_OK)
578                 jtag_error=retval;
579
580 }
581
582
583 /**
584  * Generate an IR SCAN with a list of scan fields with one entry for each enabled TAP.
585  *
586  * If the input field list contains an instruction value for a TAP then that is used
587  * otherwise the TAP is set to bypass.
588  *
589  * TAPs for which no fields are passed are marked as bypassed for subsequent DR SCANs.
590  *
591  */
592 void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
593 {
594         if (jtag_verify&&jtag_verify_capture_ir)
595         {
596                 /* 8 x 32 bit id's is enough for all invoations */
597
598                 for (int j = 0; j < in_num_fields; j++)
599                 {
600                         in_fields[j].check_value=NULL;
601                         in_fields[j].check_mask=NULL;
602                         /* if we are to run a verification of the ir scan, we need to get the input back.
603                          * We may have to allocate space if the caller didn't ask for the input back.
604                          */
605                         in_fields[j].check_value=in_fields[j].tap->expected;
606                         in_fields[j].check_mask=in_fields[j].tap->expected_mask;
607                 }
608                 jtag_add_scan_check(jtag_add_ir_scan_noverify, in_num_fields, in_fields, state);
609         } else
610         {
611                 jtag_add_ir_scan_noverify(in_num_fields, in_fields, state);
612         }
613 }
614
615 /**
616  * see jtag_add_ir_scan()
617  *
618  */
619 int MINIDRIVER(interface_jtag_add_ir_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
620 {
621         size_t num_taps = jtag_NumEnabledTaps();
622
623         jtag_command_t * cmd            = cmd_queue_alloc(sizeof(jtag_command_t));
624         scan_command_t * scan           = cmd_queue_alloc(sizeof(scan_command_t));
625         scan_field_t * out_fields       = cmd_queue_alloc(num_taps  * sizeof(scan_field_t));
626
627         jtag_queue_command(cmd);
628
629         cmd->type                               = JTAG_SCAN;
630         cmd->cmd.scan                   = scan;
631
632         scan->ir_scan                   = true;
633         scan->num_fields                = num_taps;     /* one field per device */
634         scan->fields                    = out_fields;
635         scan->end_state                 = state;
636
637
638         scan_field_t * field = out_fields;      /* keep track where we insert data */
639
640         /* loop over all enabled TAPs */
641
642         for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap))
643         {
644                 int found = 0;
645
646                 for (int j = 0; j < in_num_fields; j++)
647                 {
648                         if (tap != in_fields[j].tap)
649                                 continue;
650
651                         found = 1;
652
653                         tap->bypass = 0;
654
655                         assert(in_fields[j].num_bits == tap->ir_length); /* input fields must have the same length as the TAP's IR */
656
657                         cmd_queue_scan_field_clone(field, in_fields + j);
658
659                         break;
660                 }
661
662                 if (!found)
663                 {
664                         /* if a TAP isn't listed in input fields, set it to BYPASS */
665                         tap->bypass = 1;
666
667                         field->tap                      = tap;
668                         field->num_bits         = tap->ir_length;
669                         field->out_value        = buf_set_ones(cmd_queue_alloc(CEIL(tap->ir_length, 8)), tap->ir_length);
670                         field->in_value         = NULL; /* do not collect input for tap's in bypass */
671                 }
672
673                 /* update device information */
674                 buf_cpy(field->out_value, tap->cur_instr, tap->ir_length);
675
676                 field++;
677         }
678
679         assert(field == out_fields + num_taps); /* paranoia: jtag_NumEnabledTaps() and jtag_NextEnabledTap() not in sync */
680
681         return ERROR_OK;
682 }
683
684 /**
685  * Duplicate the scan fields passed into the function into an IR SCAN command
686  *
687  * This function assumes that the caller handles extra fields for bypassed TAPs
688  *
689  */
690 void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
691 {
692         int retval;
693
694         jtag_prelude(state);
695
696         retval=interface_jtag_add_plain_ir_scan(in_num_fields, in_fields, cmd_queue_end_state);
697         if (retval!=ERROR_OK)
698                 jtag_error=retval;
699 }
700
701
702 /**
703  * see jtag_add_plain_ir_scan()
704  *
705  */
706 int MINIDRIVER(interface_jtag_add_plain_ir_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
707 {
708
709         jtag_command_t * cmd            = cmd_queue_alloc(sizeof(jtag_command_t));
710         scan_command_t * scan           = cmd_queue_alloc(sizeof(scan_command_t));
711         scan_field_t * out_fields       = cmd_queue_alloc(in_num_fields * sizeof(scan_field_t));
712         
713         jtag_queue_command(cmd);
714
715         cmd->type                               = JTAG_SCAN;
716         cmd->cmd.scan                   = scan;
717
718         scan->ir_scan                   = true;
719         scan->num_fields                = in_num_fields;
720         scan->fields                    = out_fields;
721         scan->end_state                 = state;
722
723         for (int i = 0; i < in_num_fields; i++)
724                 cmd_queue_scan_field_clone(out_fields + i, in_fields + i);
725
726         return ERROR_OK;
727 }
728
729
730
731 int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits);
732
733 static int jtag_check_value_mask_callback(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
734 {
735         return jtag_check_value_inner(in, (u8 *)data1, (u8 *)data2, (int)data3);
736 }
737
738 static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state),
739                 int in_num_fields, scan_field_t *in_fields, tap_state_t state)
740 {
741         for (int i = 0; i < in_num_fields; i++)
742         {
743                 in_fields[i].allocated = 0;
744                 in_fields[i].modified = 0;
745                 if ((in_fields[i].check_value != NULL) && (in_fields[i].in_value == NULL))
746                 {
747                         in_fields[i].modified = 1;
748                         /* we need storage space... */
749 #ifdef HAVE_JTAG_MINIDRIVER_H
750                         if (in_fields[i].num_bits <= 32)
751                         {
752                                 /* This is enough space and we're executing this synchronously */
753                                 in_fields[i].in_value = in_fields[i].intmp;
754                         } else
755                         {
756                                 in_fields[i].in_value = (u8 *)malloc(CEIL(in_fields[i].num_bits, 8));
757                                 in_fields[i].allocated = 1;
758                         }
759 #else
760                         in_fields[i].in_value = (u8 *)cmd_queue_alloc(CEIL(in_fields[i].num_bits, 8));
761 #endif
762                 }
763         }
764
765         jtag_add_scan(in_num_fields, in_fields, state);
766
767         for (int i = 0; i < in_num_fields; i++)
768         {
769                 if ((in_fields[i].check_value != NULL) && (in_fields[i].in_value != NULL))
770                 {
771                         /* this is synchronous for a minidriver */
772                         jtag_add_callback4(jtag_check_value_mask_callback, in_fields[i].in_value,
773                                 (jtag_callback_data_t)in_fields[i].check_value,
774                                 (jtag_callback_data_t)in_fields[i].check_mask,
775                                 (jtag_callback_data_t)in_fields[i].num_bits);
776                 }
777                 if (in_fields[i].allocated)
778                 {
779                         free(in_fields[i].in_value);
780                 }
781                 if (in_fields[i].modified)
782                 {
783                         in_fields[i].in_value = NULL;
784                 }
785         }
786 }
787
788 void jtag_add_dr_scan_check(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
789 {
790         if (jtag_verify)
791         {
792                 jtag_add_scan_check(jtag_add_dr_scan, in_num_fields, in_fields, state);
793         } else
794         {
795                 jtag_add_dr_scan(in_num_fields, in_fields, state);
796         }
797 }
798
799
800 /**
801  * Generate a DR SCAN using the fields passed to the function
802  *
803  * For not bypassed TAPs the function checks in_fields and uses fields specified there.
804  * For bypassed TAPs the function generates a dummy 1bit field.
805  *
806  * The bypass status of TAPs is set by jtag_add_ir_scan().
807  *
808  */
809 void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
810 {
811         int retval;
812
813         jtag_prelude(state);
814
815         retval=interface_jtag_add_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
816         if (retval!=ERROR_OK)
817                 jtag_error=retval;
818 }
819
820
821 /**
822  * see jtag_add_dr_scan()
823  *
824  */
825 int MINIDRIVER(interface_jtag_add_dr_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
826 {
827         /* count devices in bypass */
828
829         size_t bypass_devices = 0;
830
831         for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap))
832         {
833                 if (tap->bypass)
834                         bypass_devices++;
835         }
836
837         jtag_command_t * cmd            = cmd_queue_alloc(sizeof(jtag_command_t));
838         scan_command_t * scan           = cmd_queue_alloc(sizeof(scan_command_t));
839         scan_field_t * out_fields       = cmd_queue_alloc((in_num_fields + bypass_devices) * sizeof(scan_field_t));
840         
841         jtag_queue_command(cmd);
842         
843         cmd->type                               = JTAG_SCAN;
844         cmd->cmd.scan                   = scan;
845
846         scan->ir_scan                   = false;
847         scan->num_fields                = in_num_fields + bypass_devices;
848         scan->fields                    = out_fields;
849         scan->end_state                 = state;
850
851
852         scan_field_t * field = out_fields;      /* keep track where we insert data */
853
854         /* loop over all enabled TAPs */
855
856         for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap))
857         {
858                 /* if TAP is not bypassed insert matching input fields */
859
860                 if (!tap->bypass)
861                 {
862                         scan_field_t * start_field = field;     /* keep initial position for assert() */
863
864                         for (int j = 0; j < in_num_fields; j++)
865                         {
866                                 if (tap != in_fields[j].tap)
867                                         continue;
868
869                                 cmd_queue_scan_field_clone(field, in_fields + j);
870
871                                 field++;
872                         }
873
874                         assert(field > start_field);    /* must have at least one input field per not bypassed TAP */
875                 }
876                 
877                 /* if a TAP is bypassed, generated a dummy bit*/
878                 else
879                 {
880                         field->tap                      = tap;
881                         field->num_bits         = 1;
882                         field->out_value        = NULL;
883                         field->in_value         = NULL;
884
885                         field++;
886                 }
887         }
888
889         assert(field == out_fields + scan->num_fields); /* no superfluous input fields permitted */
890
891         return ERROR_OK;
892 }
893
894
895
896 /**
897  * Generate a DR SCAN using the array of output values passed to the function
898  *
899  * This function assumes that the parameter target_tap specifies the one TAP
900  * that is not bypassed. All other TAPs must be bypassed and the function will
901  * generate a dummy 1bit field for them.
902  *
903  * For the target_tap a sequence of output-only fields will be generated where
904  * each field has the size num_bits and the field's values are taken from
905  * the array value.
906  *
907  * The bypass status of TAPs is set by jtag_add_ir_scan().
908  *
909  */
910 void MINIDRIVER(interface_jtag_add_dr_out)(jtag_tap_t *target_tap,
911                 int in_num_fields,
912                 const int *num_bits,
913                 const u32 *value,
914                 tap_state_t end_state)
915 {
916         /* count devices in bypass */
917
918         size_t bypass_devices = 0;
919
920         for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap))
921         {
922                 if (tap->bypass)
923                         bypass_devices++;
924         }
925
926
927         jtag_command_t * cmd            = cmd_queue_alloc(sizeof(jtag_command_t));
928         scan_command_t * scan           = cmd_queue_alloc(sizeof(scan_command_t));
929         scan_field_t * out_fields       = cmd_queue_alloc((in_num_fields + bypass_devices) * sizeof(scan_field_t));
930
931         jtag_queue_command(cmd);
932
933         cmd->type                               = JTAG_SCAN;
934         cmd->cmd.scan                   = scan;
935
936         scan->ir_scan                   = false;
937         scan->num_fields                = in_num_fields + bypass_devices;
938         scan->fields                    = out_fields;
939         scan->end_state                 = end_state;
940
941
942         bool target_tap_match   = false;
943
944         scan_field_t * field = out_fields;      /* keep track where we insert data */
945
946         /* loop over all enabled TAPs */
947
948         for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap))
949         {
950                 /* if TAP is not bypassed insert matching input fields */
951
952                 if (!tap->bypass)
953                 {
954                         assert(tap == target_tap); /* target_tap must match the one not bypassed TAP */
955
956                         target_tap_match = true;
957
958                         for (int j = 0; j < in_num_fields; j++)
959                         {
960                                 u8 out_value[4];
961                                 size_t scan_size = num_bits[j];
962                                 buf_set_u32(out_value, 0, scan_size, value[j]);
963
964                                 field->tap                      = tap;
965                                 field->num_bits         = scan_size;
966                                 field->out_value        = buf_cpy(out_value, cmd_queue_alloc(CEIL(scan_size, 8)), scan_size);
967                                 field->in_value         = NULL;
968
969                                 field++;
970                         }
971                 }
972
973                 /* if a TAP is bypassed, generated a dummy bit*/
974                 else
975                 {
976
977                         field->tap                              = tap;
978                         field->num_bits                 = 1;
979                         field->out_value                = NULL;
980                         field->in_value                 = NULL;
981
982                         field++;
983                 }
984         }
985
986         assert(target_tap_match);       /* target_tap should be enabled and not bypassed */
987 }
988
989
990 /**
991  * Duplicate the scan fields passed into the function into a DR SCAN command
992  *
993  * This function assumes that the caller handles extra fields for bypassed TAPs
994  *
995  */
996 void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
997 {
998         int retval;
999
1000         jtag_prelude(state);
1001
1002         retval=interface_jtag_add_plain_dr_scan(in_num_fields, in_fields, cmd_queue_end_state);
1003         if (retval!=ERROR_OK)
1004                 jtag_error=retval;
1005 }
1006
1007
1008 /**
1009  * see jtag_add_plain_dr_scan()
1010  *
1011  */
1012 int MINIDRIVER(interface_jtag_add_plain_dr_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state)
1013 {
1014         jtag_command_t * cmd            = cmd_queue_alloc(sizeof(jtag_command_t));
1015         scan_command_t * scan           = cmd_queue_alloc(sizeof(scan_command_t));
1016         scan_field_t * out_fields       = cmd_queue_alloc(in_num_fields * sizeof(scan_field_t));
1017
1018         jtag_queue_command(cmd);
1019
1020         cmd->type                               = JTAG_SCAN;
1021         cmd->cmd.scan                   = scan;
1022
1023         scan->ir_scan                   = false;
1024         scan->num_fields                = in_num_fields;
1025         scan->fields                    = out_fields;
1026         scan->end_state                 = state;
1027
1028         for (int i = 0; i < in_num_fields; i++)
1029                 cmd_queue_scan_field_clone(out_fields + i, in_fields + i);
1030
1031         return ERROR_OK;
1032 }
1033
1034
1035 void jtag_add_tlr(void)
1036 {
1037         jtag_prelude(TAP_RESET);
1038
1039         int retval;
1040         retval=interface_jtag_add_tlr();
1041         if (retval!=ERROR_OK)
1042                 jtag_error=retval;
1043 }
1044
1045 int MINIDRIVER(interface_jtag_add_tlr)(void)
1046 {
1047         tap_state_t state = TAP_RESET;
1048
1049         /* allocate memory for a new list member */
1050         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1051
1052         jtag_queue_command(cmd);
1053
1054         cmd->type = JTAG_STATEMOVE;
1055
1056         cmd->cmd.statemove = cmd_queue_alloc(sizeof(statemove_command_t));
1057         cmd->cmd.statemove->end_state = state;
1058
1059         return ERROR_OK;
1060 }
1061
1062 void jtag_add_pathmove(int num_states, const tap_state_t *path)
1063 {
1064         tap_state_t cur_state = cmd_queue_cur_state;
1065         int i;
1066         int retval;
1067
1068         /* the last state has to be a stable state */
1069         if (!tap_is_state_stable(path[num_states - 1]))
1070         {
1071                 LOG_ERROR("BUG: TAP path doesn't finish in a stable state");
1072                 exit(-1);
1073         }
1074
1075         for (i=0; i<num_states; i++)
1076         {
1077                 if (path[i] == TAP_RESET)
1078                 {
1079                         LOG_ERROR("BUG: TAP_RESET is not a valid state for pathmove sequences");
1080                         exit(-1);
1081                 }
1082
1083                 if ( tap_state_transition(cur_state, true)  != path[i]
1084                   && tap_state_transition(cur_state, false) != path[i])
1085                 {
1086                         LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[i]));
1087                         exit(-1);
1088                 }
1089                 cur_state = path[i];
1090         }
1091
1092         jtag_prelude1();
1093
1094         retval = interface_jtag_add_pathmove(num_states, path);
1095         cmd_queue_cur_state = path[num_states - 1];
1096         if (retval!=ERROR_OK)
1097                 jtag_error=retval;
1098 }
1099
1100 int MINIDRIVER(interface_jtag_add_pathmove)(int num_states, const tap_state_t *path)
1101 {
1102         /* allocate memory for a new list member */
1103         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1104
1105         jtag_queue_command(cmd);
1106
1107         cmd->type = JTAG_PATHMOVE;
1108
1109         cmd->cmd.pathmove = cmd_queue_alloc(sizeof(pathmove_command_t));
1110         cmd->cmd.pathmove->num_states = num_states;
1111         cmd->cmd.pathmove->path = cmd_queue_alloc(sizeof(tap_state_t) * num_states);
1112
1113         for (int i = 0; i < num_states; i++)
1114                 cmd->cmd.pathmove->path[i] = path[i];
1115
1116         return ERROR_OK;
1117 }
1118
1119 int MINIDRIVER(interface_jtag_add_runtest)(int num_cycles, tap_state_t state)
1120 {
1121         /* allocate memory for a new list member */
1122         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1123
1124         jtag_queue_command(cmd);
1125
1126         cmd->type = JTAG_RUNTEST;
1127
1128         cmd->cmd.runtest = cmd_queue_alloc(sizeof(runtest_command_t));
1129         cmd->cmd.runtest->num_cycles = num_cycles;
1130         cmd->cmd.runtest->end_state = state;
1131
1132         return ERROR_OK;
1133 }
1134
1135 void jtag_add_runtest(int num_cycles, tap_state_t state)
1136 {
1137         int retval;
1138
1139         jtag_prelude(state);
1140
1141         /* executed by sw or hw fifo */
1142         retval=interface_jtag_add_runtest(num_cycles, cmd_queue_end_state);
1143         if (retval!=ERROR_OK)
1144                 jtag_error=retval;
1145 }
1146
1147
1148 int MINIDRIVER(interface_jtag_add_clocks)( int num_cycles )
1149 {
1150         /* allocate memory for a new list member */
1151         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1152
1153         jtag_queue_command(cmd);
1154
1155         cmd->type = JTAG_STABLECLOCKS;
1156
1157         cmd->cmd.stableclocks = cmd_queue_alloc(sizeof(stableclocks_command_t));
1158         cmd->cmd.stableclocks->num_cycles = num_cycles;
1159
1160         return ERROR_OK;
1161 }
1162
1163 void jtag_add_clocks( int num_cycles )
1164 {
1165         int retval;
1166
1167         if( !tap_is_state_stable(cmd_queue_cur_state) )
1168         {
1169                  LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
1170                                  tap_state_name(cmd_queue_cur_state) );
1171                  jtag_error = ERROR_JTAG_NOT_STABLE_STATE;
1172                  return;
1173         }
1174
1175         if( num_cycles > 0 )
1176         {
1177                 jtag_prelude1();
1178
1179                 retval = interface_jtag_add_clocks(num_cycles);
1180                 if (retval != ERROR_OK)
1181                         jtag_error=retval;
1182         }
1183 }
1184
1185 void jtag_add_reset(int req_tlr_or_trst, int req_srst)
1186 {
1187         int trst_with_tlr = 0;
1188         int retval;
1189
1190         /* FIX!!! there are *many* different cases here. A better
1191          * approach is needed for legal combinations of transitions...
1192          */
1193         if ((jtag_reset_config & RESET_HAS_SRST)&&
1194                         (jtag_reset_config & RESET_HAS_TRST)&&
1195                         ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0))
1196         {
1197                 if (((req_tlr_or_trst&&!jtag_trst)||
1198                                 (!req_tlr_or_trst&&jtag_trst))&&
1199                                 ((req_srst&&!jtag_srst)||
1200                                                 (!req_srst&&jtag_srst)))
1201                 {
1202                         /* FIX!!! srst_pulls_trst allows 1,1 => 0,0 transition.... */
1203                         //LOG_ERROR("BUG: transition of req_tlr_or_trst and req_srst in the same jtag_add_reset() call is undefined");
1204                 }
1205         }
1206
1207         /* Make sure that jtag_reset_config allows the requested reset */
1208         /* if SRST pulls TRST, we can't fulfill srst == 1 with trst == 0 */
1209         if (((jtag_reset_config & RESET_SRST_PULLS_TRST) && (req_srst == 1)) && (!req_tlr_or_trst))
1210         {
1211                 LOG_ERROR("BUG: requested reset would assert trst");
1212                 jtag_error=ERROR_FAIL;
1213                 return;
1214         }
1215
1216         /* if TRST pulls SRST, we reset with TAP T-L-R */
1217         if (((jtag_reset_config & RESET_TRST_PULLS_SRST) && (req_tlr_or_trst)) && (req_srst == 0))
1218         {
1219                 trst_with_tlr = 1;
1220         }
1221
1222         if (req_srst && !(jtag_reset_config & RESET_HAS_SRST))
1223         {
1224                 LOG_ERROR("BUG: requested SRST assertion, but the current configuration doesn't support this");
1225                 jtag_error=ERROR_FAIL;
1226                 return;
1227         }
1228
1229         if (req_tlr_or_trst)
1230         {
1231                 if (!trst_with_tlr && (jtag_reset_config & RESET_HAS_TRST))
1232                 {
1233                         jtag_trst = 1;
1234                 } else
1235                 {
1236                         trst_with_tlr = 1;
1237                 }
1238         } else
1239         {
1240                 jtag_trst = 0;
1241         }
1242
1243         jtag_srst = req_srst;
1244
1245         retval = interface_jtag_add_reset(jtag_trst, jtag_srst);
1246         if (retval!=ERROR_OK)
1247         {
1248                 jtag_error=retval;
1249                 return;
1250         }
1251
1252         if (jtag_srst)
1253         {
1254                 LOG_DEBUG("SRST line asserted");
1255         }
1256         else
1257         {
1258                 LOG_DEBUG("SRST line released");
1259                 if (jtag_nsrst_delay)
1260                         jtag_add_sleep(jtag_nsrst_delay * 1000);
1261         }
1262
1263         if (trst_with_tlr)
1264         {
1265                 LOG_DEBUG("JTAG reset with RESET instead of TRST");
1266                 jtag_add_end_state(TAP_RESET);
1267                 jtag_add_tlr();
1268                 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1269                 return;
1270         }
1271
1272         if (jtag_trst)
1273         {
1274                 /* we just asserted nTRST, so we're now in Test-Logic-Reset,
1275                  * and inform possible listeners about this
1276                  */
1277                 LOG_DEBUG("TRST line asserted");
1278                 cmd_queue_cur_state = TAP_RESET;
1279                 jtag_call_event_callbacks(JTAG_TRST_ASSERTED);
1280         }
1281         else
1282         {
1283                 if (jtag_ntrst_delay)
1284                         jtag_add_sleep(jtag_ntrst_delay * 1000);
1285         }
1286 }
1287
1288 int MINIDRIVER(interface_jtag_add_reset)(int req_trst, int req_srst)
1289 {
1290         /* allocate memory for a new list member */
1291         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1292
1293         jtag_queue_command(cmd);
1294
1295         cmd->type = JTAG_RESET;
1296
1297         cmd->cmd.reset = cmd_queue_alloc(sizeof(reset_command_t));
1298         cmd->cmd.reset->trst = req_trst;
1299         cmd->cmd.reset->srst = req_srst;
1300
1301         return ERROR_OK;
1302 }
1303
1304 void jtag_add_end_state(tap_state_t state)
1305 {
1306         cmd_queue_end_state = state;
1307         if ((cmd_queue_end_state == TAP_DRSHIFT)||(cmd_queue_end_state == TAP_IRSHIFT))
1308         {
1309                 LOG_ERROR("BUG: TAP_DRSHIFT/IRSHIFT can't be end state. Calling code should use a larger scan field");
1310         }
1311 }
1312
1313 int MINIDRIVER(interface_jtag_add_sleep)(u32 us)
1314 {
1315         /* allocate memory for a new list member */
1316         jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t));
1317
1318         jtag_queue_command(cmd);
1319
1320         cmd->type = JTAG_SLEEP;
1321
1322         cmd->cmd.sleep = cmd_queue_alloc(sizeof(sleep_command_t));
1323         cmd->cmd.sleep->us = us;
1324
1325         return ERROR_OK;
1326 }
1327
1328 void jtag_add_sleep(u32 us)
1329 {
1330         keep_alive(); /* we might be running on a very slow JTAG clk */
1331         int retval=interface_jtag_add_sleep(us);
1332         if (retval!=ERROR_OK)
1333                 jtag_error=retval;
1334         return;
1335 }
1336
1337 int jtag_scan_size(const scan_command_t *cmd)
1338 {
1339         int bit_count = 0;
1340         int i;
1341
1342         /* count bits in scan command */
1343         for (i = 0; i < cmd->num_fields; i++)
1344         {
1345                 bit_count += cmd->fields[i].num_bits;
1346         }
1347
1348         return bit_count;
1349 }
1350
1351 int jtag_build_buffer(const scan_command_t *cmd, u8 **buffer)
1352 {
1353         int bit_count = 0;
1354         int i;
1355
1356         bit_count = jtag_scan_size(cmd);
1357         *buffer = calloc(1,CEIL(bit_count, 8));
1358
1359         bit_count = 0;
1360
1361 #ifdef _DEBUG_JTAG_IO_
1362         LOG_DEBUG("%s num_fields: %i", cmd->ir_scan ? "IRSCAN" : "DRSCAN", cmd->num_fields);
1363 #endif
1364
1365         for (i = 0; i < cmd->num_fields; i++)
1366         {
1367                 if (cmd->fields[i].out_value)
1368                 {
1369 #ifdef _DEBUG_JTAG_IO_
1370                         char* char_buf = buf_to_str(cmd->fields[i].out_value, (cmd->fields[i].num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : cmd->fields[i].num_bits, 16);
1371 #endif
1372                         buf_set_buf(cmd->fields[i].out_value, 0, *buffer, bit_count, cmd->fields[i].num_bits);
1373 #ifdef _DEBUG_JTAG_IO_
1374                         LOG_DEBUG("fields[%i].out_value[%i]: 0x%s", i, cmd->fields[i].num_bits, char_buf);
1375                         free(char_buf);
1376 #endif
1377                 }
1378                 else
1379                 {
1380 #ifdef _DEBUG_JTAG_IO_
1381                         LOG_DEBUG("fields[%i].out_value[%i]: NULL", i, cmd->fields[i].num_bits);
1382 #endif
1383                 }
1384
1385                 bit_count += cmd->fields[i].num_bits;
1386         }
1387
1388 #ifdef _DEBUG_JTAG_IO_
1389         //LOG_DEBUG("bit_count totalling: %i",  bit_count );
1390 #endif
1391
1392         return bit_count;
1393 }
1394
1395 int jtag_read_buffer(u8 *buffer, const scan_command_t *cmd)
1396 {
1397         int i;
1398         int bit_count = 0;
1399         int retval;
1400
1401         /* we return ERROR_OK, unless a check fails, or a handler reports a problem */
1402         retval = ERROR_OK;
1403
1404         for (i = 0; i < cmd->num_fields; i++)
1405         {
1406                 /* if neither in_value nor in_handler
1407                  * are specified we don't have to examine this field
1408                  */
1409                 if (cmd->fields[i].in_value)
1410                 {
1411                         int num_bits = cmd->fields[i].num_bits;
1412                         u8 *captured = buf_set_buf(buffer, bit_count, malloc(CEIL(num_bits, 8)), 0, num_bits);
1413
1414 #ifdef _DEBUG_JTAG_IO_
1415                         char *char_buf = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1416                         LOG_DEBUG("fields[%i].in_value[%i]: 0x%s", i, num_bits, char_buf);
1417                         free(char_buf);
1418 #endif
1419
1420                         if (cmd->fields[i].in_value)
1421                         {
1422                                 buf_cpy(captured, cmd->fields[i].in_value, num_bits);
1423                         }
1424
1425                         free(captured);
1426                 }
1427                 bit_count += cmd->fields[i].num_bits;
1428         }
1429
1430         return retval;
1431 }
1432
1433 static const char *jtag_tap_name(const jtag_tap_t *tap)
1434 {
1435         return (tap == NULL) ? "(unknown)" : tap->dotted_name;
1436 }
1437
1438 int jtag_check_value_inner(u8 *captured, u8 *in_check_value, u8 *in_check_mask, int num_bits)
1439 {
1440         int retval = ERROR_OK;
1441
1442         int compare_failed = 0;
1443
1444         if (in_check_mask)
1445                 compare_failed = buf_cmp_mask(captured, in_check_value, in_check_mask, num_bits);
1446         else
1447                 compare_failed = buf_cmp(captured, in_check_value, num_bits);
1448
1449         if (compare_failed){
1450                 /* An error handler could have caught the failing check
1451                  * only report a problem when there wasn't a handler, or if the handler
1452                  * acknowledged the error
1453                  */
1454                 /*
1455                 LOG_WARNING("TAP %s:",
1456                                         jtag_tap_name(field->tap));
1457                                         */
1458                 if (compare_failed)
1459                 {
1460                         char *captured_char = buf_to_str(captured, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1461                         char *in_check_value_char = buf_to_str(in_check_value, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1462
1463                         if (in_check_mask)
1464                         {
1465                                 char *in_check_mask_char;
1466                                 in_check_mask_char = buf_to_str(in_check_mask, (num_bits > DEBUG_JTAG_IOZ) ? DEBUG_JTAG_IOZ : num_bits, 16);
1467                                 LOG_WARNING("value captured during scan didn't pass the requested check:");
1468                                 LOG_WARNING("captured: 0x%s check_value: 0x%s check_mask: 0x%s",
1469                                                         captured_char, in_check_value_char, in_check_mask_char);
1470                                 free(in_check_mask_char);
1471                         }
1472                         else
1473                         {
1474                                 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);
1475                         }
1476
1477                         free(captured_char);
1478                         free(in_check_value_char);
1479
1480                         retval = ERROR_JTAG_QUEUE_FAILED;
1481                 }
1482
1483         }
1484         return retval;
1485 }
1486
1487 void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask)
1488 {
1489         assert(field->in_value != NULL);
1490
1491         if (value==NULL)
1492         {
1493                 /* no checking to do */
1494                 return;
1495         }
1496
1497         jtag_execute_queue_noclear();
1498
1499         int retval=jtag_check_value_inner(field->in_value, value, mask, field->num_bits);
1500         jtag_set_error(retval);
1501 }
1502
1503
1504
1505 enum scan_type jtag_scan_type(const scan_command_t *cmd)
1506 {
1507         int i;
1508         int type = 0;
1509
1510         for (i = 0; i < cmd->num_fields; i++)
1511         {
1512                 if (cmd->fields[i].in_value)
1513                         type |= SCAN_IN;
1514                 if (cmd->fields[i].out_value)
1515                         type |= SCAN_OUT;
1516         }
1517
1518         return type;
1519 }
1520
1521
1522 #ifndef HAVE_JTAG_MINIDRIVER_H
1523 /* add callback to end of queue */
1524 void jtag_add_callback4(jtag_callback_t callback, u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
1525 {
1526         struct jtag_callback_entry *entry=cmd_queue_alloc(sizeof(struct jtag_callback_entry));
1527
1528         entry->next=NULL;
1529         entry->callback=callback;
1530         entry->in=in;
1531         entry->data1=data1;
1532         entry->data2=data2;
1533         entry->data3=data3;
1534
1535         if (jtag_callback_queue_head==NULL)
1536         {
1537                 jtag_callback_queue_head=entry;
1538                 jtag_callback_queue_tail=entry;
1539         } else
1540         {
1541                 jtag_callback_queue_tail->next=entry;
1542                 jtag_callback_queue_tail=entry;
1543         }
1544 }
1545
1546
1547 static int jtag_convert_to_callback4(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3)
1548 {
1549         ((jtag_callback1_t)data1)(in);
1550         return ERROR_OK;
1551 }
1552
1553 void jtag_add_callback(jtag_callback1_t callback, u8 *in)
1554 {
1555         jtag_add_callback4(jtag_convert_to_callback4, in, (jtag_callback_data_t)callback, 0, 0);
1556 }
1557 #endif
1558
1559 #ifndef HAVE_JTAG_MINIDRIVER_H
1560
1561 int interface_jtag_execute_queue(void)
1562 {
1563         int retval;
1564
1565         if (jtag==NULL)
1566         {
1567                 LOG_ERROR("No JTAG interface configured yet. Issue 'init' command in startup scripts before communicating with targets.");
1568                 return ERROR_FAIL;
1569         }
1570
1571         retval = jtag->execute_queue();
1572
1573         if (retval == ERROR_OK)
1574         {
1575                 struct jtag_callback_entry *entry;
1576                 for (entry=jtag_callback_queue_head; entry!=NULL; entry=entry->next)
1577                 {
1578                         retval=entry->callback(entry->in, entry->data1, entry->data2, entry->data3);
1579                         if (retval!=ERROR_OK)
1580                                 break;
1581                 }
1582         }
1583
1584         cmd_queue_free();
1585
1586         jtag_callback_queue_head = NULL;
1587         jtag_callback_queue_tail = NULL;
1588
1589         jtag_command_queue = NULL;
1590         last_command_pointer = &jtag_command_queue;
1591
1592         return retval;
1593 }
1594 #endif
1595
1596 void jtag_execute_queue_noclear(void)
1597 {
1598         /* each flush can take as much as 1-2ms on high bandwidth low latency interfaces.
1599          * E.g. a JTAG over TCP/IP or USB....
1600          */
1601         jtag_flush_queue_count++;
1602
1603         int retval=interface_jtag_execute_queue();
1604         /* we keep the first error */
1605         if ((jtag_error==ERROR_OK)&&(retval!=ERROR_OK))
1606         {
1607                 jtag_error=retval;
1608         }
1609 }
1610
1611 int jtag_execute_queue(void)
1612 {
1613         int retval;
1614         jtag_execute_queue_noclear();
1615         retval=jtag_error;
1616         jtag_error=ERROR_OK;
1617         return retval;
1618 }
1619
1620 int jtag_reset_callback(enum jtag_event event, void *priv)
1621 {
1622         jtag_tap_t *tap = priv;
1623
1624         LOG_DEBUG("-");
1625
1626         if (event == JTAG_TRST_ASSERTED)
1627         {
1628                 buf_set_ones(tap->cur_instr, tap->ir_length);
1629                 tap->bypass = 1;
1630         }
1631
1632         return ERROR_OK;
1633 }
1634
1635 void jtag_sleep(u32 us)
1636 {
1637         alive_sleep(us/1000);
1638 }
1639
1640 /* Try to examine chain layout according to IEEE 1149.1 Â§12
1641  */
1642 int jtag_examine_chain(void)
1643 {
1644         jtag_tap_t *tap;
1645         scan_field_t field;
1646         u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
1647         int i;
1648         int bit_count;
1649         int device_count = 0;
1650         u8 zero_check = 0x0;
1651         u8 one_check = 0xff;
1652
1653         field.tap = NULL;
1654         field.num_bits = sizeof(idcode_buffer) * 8;
1655         field.out_value = idcode_buffer;
1656
1657         field.in_value = idcode_buffer;
1658
1659
1660
1661
1662         for (i = 0; i < JTAG_MAX_CHAIN_SIZE; i++)
1663         {
1664                 buf_set_u32(idcode_buffer, i * 32, 32, 0x000000FF);
1665         }
1666
1667         jtag_add_plain_dr_scan(1, &field, TAP_RESET);
1668         jtag_execute_queue();
1669
1670         for (i = 0; i < JTAG_MAX_CHAIN_SIZE * 4; i++)
1671         {
1672                 zero_check |= idcode_buffer[i];
1673                 one_check &= idcode_buffer[i];
1674         }
1675
1676         /* if there wasn't a single non-zero bit or if all bits were one, the scan isn't valid */
1677         if ((zero_check == 0x00) || (one_check == 0xff))
1678         {
1679                 LOG_ERROR("JTAG communication failure, check connection, JTAG interface, target power etc.");
1680                 return ERROR_JTAG_INIT_FAILED;
1681         }
1682
1683         /* point at the 1st tap */
1684         tap = jtag_NextEnabledTap(NULL);
1685         if( tap == NULL ){
1686                 LOG_ERROR("JTAG: No taps enabled?");
1687                 return ERROR_JTAG_INIT_FAILED;
1688         }
1689
1690         for (bit_count = 0; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;)
1691         {
1692                 u32 idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1693                 if ((idcode & 1) == 0)
1694                 {
1695                         /* LSB must not be 0, this indicates a device in bypass */
1696                         LOG_WARNING("Tap/Device does not have IDCODE");
1697                         idcode=0;
1698
1699                         bit_count += 1;
1700                 }
1701                 else
1702                 {
1703                         u32 manufacturer;
1704                         u32 part;
1705                         u32 version;
1706
1707                         /* some devices, such as AVR will output all 1's instead of TDI
1708                         input value at end of chain. */
1709                         if ((idcode == 0x000000FF)||(idcode == 0xFFFFFFFF))
1710                         {
1711                                 int unexpected=0;
1712                                 /* End of chain (invalid manufacturer ID)
1713                                  *
1714                                  * The JTAG examine is the very first thing that happens
1715                                  *
1716                                  * A single JTAG device requires only 64 bits to be read back correctly.
1717                                  *
1718                                  * The code below adds a check that the rest of the data scanned (640 bits)
1719                                  * are all as expected. This helps diagnose/catch problems with the JTAG chain
1720                                  *
1721                                  * earlier and gives more helpful/explicit error messages.
1722                                  */
1723                                 for (bit_count += 32; bit_count < (JTAG_MAX_CHAIN_SIZE * 32) - 31;bit_count += 32)
1724                                 {
1725                                         idcode = buf_get_u32(idcode_buffer, bit_count, 32);
1726                                         if (unexpected||((idcode != 0x000000FF)&&(idcode != 0xFFFFFFFF)))
1727                                         {
1728                                                 LOG_WARNING("Unexpected idcode after end of chain! %d 0x%08x", bit_count, idcode);
1729                                                 unexpected = 1;
1730                                         }
1731                                 }
1732
1733                                 break;
1734                         }
1735
1736 #define EXTRACT_MFG(X)  (((X) & 0xffe) >> 1)
1737                         manufacturer = EXTRACT_MFG(idcode);
1738 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
1739                         part = EXTRACT_PART(idcode);
1740 #define EXTRACT_VER(X)  (((X) & 0xf0000000) >> 28)
1741                         version = EXTRACT_VER(idcode);
1742
1743                         LOG_INFO("JTAG tap: %s tap/device found: 0x%8.8x (Manufacturer: 0x%3.3x, Part: 0x%4.4x, Version: 0x%1.1x)",
1744                                          ((tap != NULL) ? (tap->dotted_name) : "(not-named)"),
1745                                 idcode, manufacturer, part, version);
1746
1747                         bit_count += 32;
1748                 }
1749                 if (tap)
1750                 {
1751                         tap->idcode = idcode;
1752
1753                         if (tap->expected_ids_cnt > 0) {
1754                                 /* Loop over the expected identification codes and test for a match */
1755                                 u8 ii;
1756                                 for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1757                                         if( tap->idcode == tap->expected_ids[ii] ){
1758                                                 break;
1759                                         }
1760                                 }
1761
1762                                 /* If none of the expected ids matched, log an error */
1763                                 if (ii == tap->expected_ids_cnt) {
1764                                         LOG_ERROR("JTAG tap: %s             got: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1765                                                           tap->dotted_name,
1766                                                           idcode,
1767                                                           EXTRACT_MFG( tap->idcode ),
1768                                                           EXTRACT_PART( tap->idcode ),
1769                                                           EXTRACT_VER( tap->idcode ) );
1770                                         for (ii = 0; ii < tap->expected_ids_cnt; ii++) {
1771                                                 LOG_ERROR("JTAG tap: %s expected %hhu of %hhu: 0x%08x (mfg: 0x%3.3x, part: 0x%4.4x, ver: 0x%1.1x)",
1772                                                                   tap->dotted_name,
1773                                                                   ii + 1,
1774                                                                   tap->expected_ids_cnt,
1775                                                                   tap->expected_ids[ii],
1776                                                                   EXTRACT_MFG( tap->expected_ids[ii] ),
1777                                                                   EXTRACT_PART( tap->expected_ids[ii] ),
1778                                                                   EXTRACT_VER( tap->expected_ids[ii] ) );
1779                                         }
1780
1781                                         return ERROR_JTAG_INIT_FAILED;
1782                                 } else {
1783                                         LOG_INFO("JTAG Tap/device matched");
1784                                 }
1785                         } else {
1786 #if 0
1787                                 LOG_INFO("JTAG TAP ID: 0x%08x - Unknown - please report (A) chipname and (B) idcode to the openocd project",
1788                                                  tap->idcode);
1789 #endif
1790                         }
1791                         tap = jtag_NextEnabledTap(tap);
1792                 }
1793                 device_count++;
1794         }
1795
1796         /* see if number of discovered devices matches configuration */
1797         if (device_count != jtag_NumEnabledTaps())
1798         {
1799                 LOG_ERROR("number of discovered devices in JTAG chain (%i) doesn't match (enabled) configuration (%i), total taps: %d",
1800                                   device_count, jtag_NumEnabledTaps(), jtag_NumTotalTaps());
1801                 LOG_ERROR("check the config file and ensure proper JTAG communication (connections, speed, ...)");
1802                 return ERROR_JTAG_INIT_FAILED;
1803         }
1804
1805         return ERROR_OK;
1806 }
1807
1808 int jtag_validate_chain(void)
1809 {
1810         jtag_tap_t *tap;
1811         int total_ir_length = 0;
1812         u8 *ir_test = NULL;
1813         scan_field_t field;
1814         int chain_pos = 0;
1815
1816         tap = NULL;
1817         total_ir_length = 0;
1818         for(;;){
1819                 tap = jtag_NextEnabledTap(tap);
1820                 if( tap == NULL ){
1821                         break;
1822                 }
1823                 total_ir_length += tap->ir_length;
1824         }
1825
1826         total_ir_length += 2;
1827         ir_test = malloc(CEIL(total_ir_length, 8));
1828         buf_set_ones(ir_test, total_ir_length);
1829
1830         field.tap = NULL;
1831         field.num_bits = total_ir_length;
1832         field.out_value = ir_test;
1833         field.in_value = ir_test;
1834
1835
1836         jtag_add_plain_ir_scan(1, &field, TAP_RESET);
1837         jtag_execute_queue();
1838
1839         tap = NULL;
1840         chain_pos = 0;
1841         int val;
1842         for(;;){
1843                 tap = jtag_NextEnabledTap(tap);
1844                 if( tap == NULL ){
1845                         break;
1846                 }
1847
1848                 val = buf_get_u32(ir_test, chain_pos, 2);
1849                 if (val != 0x1)
1850                 {
1851                         char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1852                         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);
1853                         free(cbuf);
1854                         free(ir_test);
1855                         return ERROR_JTAG_INIT_FAILED;
1856                 }
1857                 chain_pos += tap->ir_length;
1858         }
1859
1860         val = buf_get_u32(ir_test, chain_pos, 2);
1861         if (val != 0x3)
1862         {
1863                 char *cbuf = buf_to_str(ir_test, total_ir_length, 16);
1864                 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);
1865                 free(cbuf);
1866                 free(ir_test);
1867                 return ERROR_JTAG_INIT_FAILED;
1868         }
1869
1870         free(ir_test);
1871
1872         return ERROR_OK;
1873 }
1874
1875 enum jtag_tap_cfg_param {
1876         JCFG_EVENT
1877 };
1878
1879 static Jim_Nvp nvp_config_opts[] = {
1880         { .name = "-event",      .value = JCFG_EVENT },
1881
1882         { .name = NULL,          .value = -1 }
1883 };
1884
1885 static int jtag_tap_configure_cmd( Jim_GetOptInfo *goi, jtag_tap_t * tap)
1886 {
1887         Jim_Nvp *n;
1888         Jim_Obj *o;
1889         int e;
1890
1891         /* parse config or cget options */
1892         while (goi->argc > 0) {
1893                 Jim_SetEmptyResult (goi->interp);
1894
1895                 e = Jim_GetOpt_Nvp(goi, nvp_config_opts, &n);
1896                 if (e != JIM_OK) {
1897                         Jim_GetOpt_NvpUnknown(goi, nvp_config_opts, 0);
1898                         return e;
1899                 }
1900
1901                 switch (n->value) {
1902                         case JCFG_EVENT:
1903                                 if (goi->argc == 0) {
1904                                         Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ..." );
1905                                         return JIM_ERR;
1906                                 }
1907
1908                                 e = Jim_GetOpt_Nvp( goi, nvp_jtag_tap_event, &n );
1909                                 if (e != JIM_OK) {
1910                                         Jim_GetOpt_NvpUnknown(goi, nvp_jtag_tap_event, 1);
1911                                         return e;
1912                                 }
1913
1914                                 if (goi->isconfigure) {
1915                                         if (goi->argc != 1) {
1916                                                 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?");
1917                                                 return JIM_ERR;
1918                                         }
1919                                 } else {
1920                                         if (goi->argc != 0) {
1921                                                 Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?");
1922                                                 return JIM_ERR;
1923                                         }
1924                                 }
1925
1926                                 {
1927                                         jtag_tap_event_action_t *jteap;
1928
1929                                         jteap = tap->event_action;
1930                                         /* replace existing? */
1931                                         while (jteap) {
1932                                                 if (jteap->event == (enum jtag_tap_event)n->value) {
1933                                                         break;
1934                                                 }
1935                                                 jteap = jteap->next;
1936                                         }
1937
1938                                         if (goi->isconfigure) {
1939                                                 if (jteap == NULL) {
1940                                                         /* create new */
1941                                                         jteap = calloc(1, sizeof (*jteap));
1942                                                 }
1943                                                 jteap->event = n->value;
1944                                                 Jim_GetOpt_Obj( goi, &o);
1945                                                 if (jteap->body) {
1946                                                         Jim_DecrRefCount(interp, jteap->body);
1947                                                 }
1948                                                 jteap->body = Jim_DuplicateObj(goi->interp, o);
1949                                                 Jim_IncrRefCount(jteap->body);
1950
1951                                                 /* add to head of event list */
1952                                                 jteap->next = tap->event_action;
1953                                                 tap->event_action = jteap;
1954                                                 Jim_SetEmptyResult(goi->interp);
1955                                         } else {
1956                                                 /* get */
1957                                                 if (jteap == NULL) {
1958                                                         Jim_SetEmptyResult(goi->interp);
1959                                                 } else {
1960                                                         Jim_SetResult(goi->interp, Jim_DuplicateObj(goi->interp, jteap->body));
1961                                                 }
1962                                         }
1963                                 }
1964                                 /* loop for more */
1965                                 break;
1966                 }
1967         } /* while (goi->argc) */
1968
1969         return JIM_OK;
1970 }
1971
1972 static int jim_newtap_cmd( Jim_GetOptInfo *goi )
1973 {
1974         jtag_tap_t *pTap;
1975         jtag_tap_t **ppTap;
1976         jim_wide w;
1977         int x;
1978         int e;
1979         int reqbits;
1980         Jim_Nvp *n;
1981         char *cp;
1982         const Jim_Nvp opts[] = {
1983 #define NTAP_OPT_IRLEN     0
1984                 { .name = "-irlen"                      ,       .value = NTAP_OPT_IRLEN },
1985 #define NTAP_OPT_IRMASK    1
1986                 { .name = "-irmask"                     ,       .value = NTAP_OPT_IRMASK },
1987 #define NTAP_OPT_IRCAPTURE 2
1988                 { .name = "-ircapture"          ,       .value = NTAP_OPT_IRCAPTURE },
1989 #define NTAP_OPT_ENABLED   3
1990                 { .name = "-enable"                     ,       .value = NTAP_OPT_ENABLED },
1991 #define NTAP_OPT_DISABLED  4
1992                 { .name = "-disable"            ,       .value = NTAP_OPT_DISABLED },
1993 #define NTAP_OPT_EXPECTED_ID 5
1994                 { .name = "-expected-id"        ,       .value = NTAP_OPT_EXPECTED_ID },
1995                 { .name = NULL                          ,       .value = -1 },
1996         };
1997
1998         pTap = malloc( sizeof(jtag_tap_t) );
1999         memset( pTap, 0, sizeof(*pTap) );
2000         if( !pTap ){
2001                 Jim_SetResult_sprintf( goi->interp, "no memory");
2002                 return JIM_ERR;
2003         }
2004         /*
2005          * we expect CHIP + TAP + OPTIONS
2006          * */
2007         if( goi->argc < 3 ){
2008                 Jim_SetResult_sprintf(goi->interp, "Missing CHIP TAP OPTIONS ....");
2009                 return JIM_ERR;
2010         }
2011         Jim_GetOpt_String( goi, &cp, NULL );
2012         pTap->chip = strdup(cp);
2013
2014         Jim_GetOpt_String( goi, &cp, NULL );
2015         pTap->tapname = strdup(cp);
2016
2017         /* name + dot + name + null */
2018         x = strlen(pTap->chip) + 1 + strlen(pTap->tapname) + 1;
2019         cp = malloc( x );
2020         sprintf( cp, "%s.%s", pTap->chip, pTap->tapname );
2021         pTap->dotted_name = cp;
2022
2023         LOG_DEBUG("Creating New Tap, Chip: %s, Tap: %s, Dotted: %s, %d params",
2024                           pTap->chip, pTap->tapname, pTap->dotted_name, goi->argc);
2025
2026         /* default is enabled */
2027         pTap->enabled = 1;
2028
2029         /* deal with options */
2030 #define NTREQ_IRLEN      1
2031 #define NTREQ_IRCAPTURE  2
2032 #define NTREQ_IRMASK     4
2033
2034         /* clear them as we find them */
2035         reqbits = (NTREQ_IRLEN | NTREQ_IRCAPTURE | NTREQ_IRMASK);
2036
2037         while( goi->argc ){
2038                 e = Jim_GetOpt_Nvp( goi, opts, &n );
2039                 if( e != JIM_OK ){
2040                         Jim_GetOpt_NvpUnknown( goi, opts, 0 );
2041                         return e;
2042                 }
2043                 LOG_DEBUG("Processing option: %s", n->name );
2044                 switch( n->value ){
2045                 case NTAP_OPT_ENABLED:
2046                         pTap->enabled = 1;
2047                         break;
2048                 case NTAP_OPT_DISABLED:
2049                         pTap->enabled = 0;
2050                         break;
2051                 case NTAP_OPT_EXPECTED_ID:
2052                 {
2053                         u32 *new_expected_ids;
2054
2055                         e = Jim_GetOpt_Wide( goi, &w );
2056                         if( e != JIM_OK) {
2057                                 Jim_SetResult_sprintf(goi->interp, "option: %s bad parameter", n->name);
2058                                 return e;
2059                         }
2060
2061                         new_expected_ids = malloc(sizeof(u32) * (pTap->expected_ids_cnt + 1));
2062                         if (new_expected_ids == NULL) {
2063                                 Jim_SetResult_sprintf( goi->interp, "no memory");
2064                                 return JIM_ERR;
2065                         }
2066
2067                         memcpy(new_expected_ids, pTap->expected_ids, sizeof(u32) * pTap->expected_ids_cnt);
2068
2069                         new_expected_ids[pTap->expected_ids_cnt] = w;
2070
2071                         free(pTap->expected_ids);
2072                         pTap->expected_ids = new_expected_ids;
2073                         pTap->expected_ids_cnt++;
2074                         break;
2075                 }
2076                 case NTAP_OPT_IRLEN:
2077                 case NTAP_OPT_IRMASK:
2078                 case NTAP_OPT_IRCAPTURE:
2079                         e = Jim_GetOpt_Wide( goi, &w );
2080                         if( e != JIM_OK ){
2081                                 Jim_SetResult_sprintf( goi->interp, "option: %s bad parameter", n->name );
2082                                 return e;
2083                         }
2084                         if( (w < 0) || (w > 0xffff) ){
2085                                 /* wacky value */
2086                                 Jim_SetResult_sprintf( goi->interp, "option: %s - wacky value: %d (0x%x)",
2087                                                                            n->name, (int)(w), (int)(w));
2088                                 return JIM_ERR;
2089                         }
2090                         switch(n->value){
2091                         case NTAP_OPT_IRLEN:
2092                                 pTap->ir_length = w;
2093                                 reqbits &= (~(NTREQ_IRLEN));
2094                                 break;
2095                         case NTAP_OPT_IRMASK:
2096                                 pTap->ir_capture_mask = w;
2097                                 reqbits &= (~(NTREQ_IRMASK));
2098                                 break;
2099                         case NTAP_OPT_IRCAPTURE:
2100                                 pTap->ir_capture_value = w;
2101                                 reqbits &= (~(NTREQ_IRCAPTURE));
2102                                 break;
2103                         }
2104                 } /* switch(n->value) */
2105         } /* while( goi->argc ) */
2106
2107         /* Did we get all the options? */
2108         if( reqbits ){
2109                 // no
2110                 Jim_SetResult_sprintf( goi->interp,
2111                                                            "newtap: %s missing required parameters",
2112                                                            pTap->dotted_name);
2113                 /* TODO: Tell user what is missing :-( */
2114                 /* no memory leaks pelase */
2115                 free(((void *)(pTap->expected_ids)));
2116                 free(((void *)(pTap->chip)));
2117                 free(((void *)(pTap->tapname)));
2118                 free(((void *)(pTap->dotted_name)));
2119                 free(((void *)(pTap)));
2120                 return JIM_ERR;
2121         }
2122
2123         pTap->expected      = malloc( pTap->ir_length );
2124         pTap->expected_mask = malloc( pTap->ir_length );
2125         pTap->cur_instr     = malloc( pTap->ir_length );
2126
2127         buf_set_u32( pTap->expected,
2128                                  0,
2129                                  pTap->ir_length,
2130                                  pTap->ir_capture_value );
2131         buf_set_u32( pTap->expected_mask,
2132                                  0,
2133                                  pTap->ir_length,
2134                                  pTap->ir_capture_mask );
2135         buf_set_ones( pTap->cur_instr,
2136                                   pTap->ir_length );
2137
2138         pTap->bypass = 1;
2139
2140         jtag_register_event_callback(jtag_reset_callback, pTap );
2141
2142         ppTap = &(jtag_all_taps);
2143         while( (*ppTap) != NULL ){
2144                 ppTap = &((*ppTap)->next_tap);
2145         }
2146         *ppTap = pTap;
2147         {
2148                 static int n_taps = 0;
2149                 pTap->abs_chain_position = n_taps++;
2150         }
2151         LOG_DEBUG( "Created Tap: %s @ abs position %d, irlen %d, capture: 0x%x mask: 0x%x",
2152                                 (*ppTap)->dotted_name,
2153                                 (*ppTap)->abs_chain_position,
2154                                 (*ppTap)->ir_length,
2155                                 (*ppTap)->ir_capture_value,
2156                                 (*ppTap)->ir_capture_mask );
2157
2158         return ERROR_OK;
2159 }
2160
2161 static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
2162 {
2163         Jim_GetOptInfo goi;
2164         int e;
2165         Jim_Nvp *n;
2166         Jim_Obj *o;
2167         struct command_context_s *context;
2168
2169         enum {
2170                 JTAG_CMD_INTERFACE,
2171                 JTAG_CMD_INIT_RESET,
2172                 JTAG_CMD_NEWTAP,
2173                 JTAG_CMD_TAPENABLE,
2174                 JTAG_CMD_TAPDISABLE,
2175                 JTAG_CMD_TAPISENABLED,
2176                 JTAG_CMD_CONFIGURE,
2177                 JTAG_CMD_CGET
2178         };
2179
2180         const Jim_Nvp jtag_cmds[] = {
2181                 { .name = "interface"     , .value = JTAG_CMD_INTERFACE },
2182                 { .name = "arp_init-reset", .value = JTAG_CMD_INIT_RESET },
2183                 { .name = "newtap"        , .value = JTAG_CMD_NEWTAP },
2184                 { .name = "tapisenabled"     , .value = JTAG_CMD_TAPISENABLED },
2185                 { .name = "tapenable"     , .value = JTAG_CMD_TAPENABLE },
2186                 { .name = "tapdisable"    , .value = JTAG_CMD_TAPDISABLE },
2187                 { .name = "configure"     , .value = JTAG_CMD_CONFIGURE },
2188                 { .name = "cget"          , .value = JTAG_CMD_CGET },
2189
2190                 { .name = NULL, .value = -1 },
2191         };
2192
2193         context = Jim_GetAssocData(interp, "context");
2194         /* go past the command */
2195         Jim_GetOpt_Setup( &goi, interp, argc-1, argv+1 );
2196
2197         e = Jim_GetOpt_Nvp( &goi, jtag_cmds, &n );
2198         if( e != JIM_OK ){
2199                 Jim_GetOpt_NvpUnknown( &goi, jtag_cmds, 0 );
2200                 return e;
2201         }
2202                 Jim_SetEmptyResult( goi.interp );
2203         switch( n->value ){
2204         case JTAG_CMD_INTERFACE:
2205                 /* return the name of the interface */
2206                 /* TCL code might need to know the exact type... */
2207                 /* FUTURE: we allow this as a means to "set" the interface. */
2208                 if( goi.argc != 0 ){
2209                         Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2210                         return JIM_ERR;
2211                 }
2212                 Jim_SetResultString( goi.interp, jtag_interface->name, -1 );
2213                 return JIM_OK;
2214         case JTAG_CMD_INIT_RESET:
2215                 if( goi.argc != 0 ){
2216                         Jim_WrongNumArgs( goi.interp, 1, goi.argv-1, "(no params)");
2217                         return JIM_ERR;
2218                 }
2219                 e = jtag_init_reset(context);
2220                 if( e != ERROR_OK ){
2221                         Jim_SetResult_sprintf( goi.interp, "error: %d", e);
2222                         return JIM_ERR;
2223                 }
2224                 return JIM_OK;
2225         case JTAG_CMD_NEWTAP:
2226                 return jim_newtap_cmd( &goi );
2227                 break;
2228         case JTAG_CMD_TAPISENABLED:
2229         case JTAG_CMD_TAPENABLE:
2230         case JTAG_CMD_TAPDISABLE:
2231                 if( goi.argc != 1 ){
2232                         Jim_SetResultString( goi.interp, "Too many parameters",-1 );
2233                         return JIM_ERR;
2234                 }
2235
2236                 {
2237                         jtag_tap_t *t;
2238                         t = jtag_TapByJimObj( goi.interp, goi.argv[0] );
2239                         if( t == NULL ){
2240                                 return JIM_ERR;
2241                         }
2242                         switch( n->value ){
2243                         case JTAG_CMD_TAPISENABLED:
2244                                 e = t->enabled;
2245                                 break;
2246                         case JTAG_CMD_TAPENABLE:
2247                                 jtag_tap_handle_event( t, JTAG_TAP_EVENT_ENABLE);
2248                                 e = 1;
2249                                 t->enabled = e;
2250                                 break;
2251                         case JTAG_CMD_TAPDISABLE:
2252                                 jtag_tap_handle_event( t, JTAG_TAP_EVENT_DISABLE);
2253                                 e = 0;
2254                                 t->enabled = e;
2255                                 break;
2256                         }
2257                         Jim_SetResult( goi.interp, Jim_NewIntObj( goi.interp, e ) );
2258                         return JIM_OK;
2259                 }
2260                 break;
2261
2262         case JTAG_CMD_CGET:
2263                 if( goi.argc < 2 ){
2264                         Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ...");
2265                         return JIM_ERR;
2266                 }
2267
2268                 {
2269                         jtag_tap_t *t;
2270
2271                         Jim_GetOpt_Obj(&goi, &o);
2272                         t = jtag_TapByJimObj( goi.interp, o );
2273                         if( t == NULL ){
2274                                 return JIM_ERR;
2275                         }
2276
2277                         goi.isconfigure = 0;
2278                         return jtag_tap_configure_cmd( &goi, t);
2279                 }
2280                 break;
2281
2282         case JTAG_CMD_CONFIGURE:
2283                 if( goi.argc < 3 ){
2284                         Jim_WrongNumArgs( goi.interp, 0, NULL, "?tap-name? -option ?VALUE? ...");
2285                         return JIM_ERR;
2286                 }
2287
2288                 {
2289                         jtag_tap_t *t;
2290
2291                         Jim_GetOpt_Obj(&goi, &o);
2292                         t = jtag_TapByJimObj( goi.interp, o );
2293                         if( t == NULL ){
2294                                 return JIM_ERR;
2295                         }
2296
2297                         goi.isconfigure = 1;
2298                         return jtag_tap_configure_cmd( &goi, t);
2299                 }
2300         }
2301
2302         return JIM_ERR;
2303 }
2304
2305 int jtag_register_commands(struct command_context_s *cmd_ctx)
2306 {
2307         register_jim( cmd_ctx, "jtag", jim_jtag_command, "perform jtag tap actions");
2308
2309         register_command(cmd_ctx, NULL, "interface", handle_interface_command,
2310                 COMMAND_CONFIG, "try to configure interface");
2311         register_command(cmd_ctx, NULL, "jtag_speed", handle_jtag_speed_command,
2312                 COMMAND_ANY, "set jtag speed (if supported)");
2313         register_command(cmd_ctx, NULL, "jtag_khz", handle_jtag_khz_command,
2314                 COMMAND_ANY, "same as jtag_speed, except it takes maximum khz as arguments. 0 KHz = RTCK.");
2315         register_command(cmd_ctx, NULL, "jtag_device", handle_jtag_device_command,
2316                 COMMAND_CONFIG, "jtag_device <ir_length> <ir_expected> <ir_mask>");
2317         register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command,
2318                 COMMAND_ANY,
2319                 "[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]");
2320         register_command(cmd_ctx, NULL, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command,
2321                 COMMAND_ANY, "jtag_nsrst_delay <ms> - delay after deasserting srst in ms");
2322         register_command(cmd_ctx, NULL, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command,
2323                 COMMAND_ANY, "jtag_ntrst_delay <ms> - delay after deasserting trst in ms");
2324
2325         register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command,
2326                 COMMAND_EXEC, "print current scan chain configuration");
2327
2328         register_command(cmd_ctx, NULL, "endstate", handle_endstate_command,
2329                 COMMAND_EXEC, "finish JTAG operations in <tap_state>");
2330         register_command(cmd_ctx, NULL, "jtag_reset", handle_jtag_reset_command,
2331                 COMMAND_EXEC, "toggle reset lines <trst> <srst>");
2332         register_command(cmd_ctx, NULL, "runtest", handle_runtest_command,
2333                 COMMAND_EXEC, "move to Run-Test/Idle, and execute <num_cycles>");
2334         register_command(cmd_ctx, NULL, "irscan", handle_irscan_command,
2335                 COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ...");
2336         register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ...");
2337         register_jim(cmd_ctx, "flush_count", Jim_Command_flush_count, "returns number of times the JTAG queue has been flushed");
2338
2339         register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command,
2340                 COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>");
2341         register_command(cmd_ctx, NULL, "verify_jtag", handle_verify_jtag_command,
2342                 COMMAND_ANY, "verify value capture <enable|disable>");
2343         register_command(cmd_ctx, NULL, "tms_sequence", handle_tms_sequence_command,
2344                 COMMAND_ANY, "choose short(default) or long tms_sequence <short|long>");
2345         return ERROR_OK;
2346 }
2347
2348 int jtag_interface_init(struct command_context_s *cmd_ctx)
2349 {
2350         if (jtag)
2351                 return ERROR_OK;
2352
2353         if (!jtag_interface)
2354         {
2355                 /* nothing was previously specified by "interface" command */
2356                 LOG_ERROR("JTAG interface has to be specified, see \"interface\" command");
2357                 return ERROR_JTAG_INVALID_INTERFACE;
2358         }
2359         if(hasKHz)
2360         {
2361                 jtag_interface->khz(speed_khz, &jtag_speed);
2362                 hasKHz = 0;
2363         }
2364
2365         if (jtag_interface->init() != ERROR_OK)
2366                 return ERROR_JTAG_INIT_FAILED;
2367
2368         jtag = jtag_interface;
2369         return ERROR_OK;
2370 }
2371
2372 static int jtag_init_inner(struct command_context_s *cmd_ctx)
2373 {
2374         jtag_tap_t *tap;
2375         int retval;
2376
2377         LOG_DEBUG("Init JTAG chain");
2378
2379         tap = jtag_NextEnabledTap(NULL);
2380         if( tap == NULL ){
2381                 LOG_ERROR("There are no enabled taps?");
2382                 return ERROR_JTAG_INIT_FAILED;
2383         }
2384
2385         jtag_add_tlr();
2386         if ((retval=jtag_execute_queue())!=ERROR_OK)
2387                 return retval;
2388
2389         /* examine chain first, as this could discover the real chain layout */
2390         if (jtag_examine_chain() != ERROR_OK)
2391         {
2392                 LOG_ERROR("trying to validate configured JTAG chain anyway...");
2393         }
2394
2395         if (jtag_validate_chain() != ERROR_OK)
2396         {
2397                 LOG_WARNING("Could not validate JTAG chain, continuing anyway...");
2398         }
2399
2400         return ERROR_OK;
2401 }
2402
2403 int jtag_init_reset(struct command_context_s *cmd_ctx)
2404 {
2405         int retval;
2406
2407         if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2408                 return retval;
2409
2410         LOG_DEBUG("Trying to bring the JTAG controller to life by asserting TRST / RESET");
2411
2412         /* Reset can happen after a power cycle.
2413          *
2414          * Ideally we would only assert TRST or run RESET before the target reset.
2415          *
2416          * However w/srst_pulls_trst, trst is asserted together with the target
2417          * reset whether we want it or not.
2418          *
2419          * NB! Some targets have JTAG circuitry disabled until a
2420          * trst & srst has been asserted.
2421          *
2422          * NB! here we assume nsrst/ntrst delay are sufficient!
2423          *
2424          * NB! order matters!!!! srst *can* disconnect JTAG circuitry
2425          *
2426          */
2427         jtag_add_reset(1, 0); /* RESET or TRST */
2428         if (jtag_reset_config & RESET_HAS_SRST)
2429         {
2430                 jtag_add_reset(1, 1);
2431                 if ((jtag_reset_config & RESET_SRST_PULLS_TRST)==0)
2432                         jtag_add_reset(0, 1);
2433         }
2434         jtag_add_reset(0, 0);
2435         if ((retval = jtag_execute_queue()) != ERROR_OK)
2436                 return retval;
2437
2438         /* Check that we can communication on the JTAG chain + eventually we want to
2439          * be able to perform enumeration only after OpenOCD has started
2440          * telnet and GDB server
2441          *
2442          * That would allow users to more easily perform any magic they need to before
2443          * reset happens.
2444          */
2445         return jtag_init_inner(cmd_ctx);
2446 }
2447
2448 int jtag_init(struct command_context_s *cmd_ctx)
2449 {
2450         int retval;
2451         if ((retval=jtag_interface_init(cmd_ctx)) != ERROR_OK)
2452                 return retval;
2453         if (jtag_init_inner(cmd_ctx)==ERROR_OK)
2454         {
2455                 return ERROR_OK;
2456         }
2457         return jtag_init_reset(cmd_ctx);
2458 }
2459
2460 static int default_khz(int khz, int *jtag_speed)
2461 {
2462         LOG_ERROR("Translation from khz to jtag_speed not implemented");
2463         return ERROR_FAIL;
2464 }
2465
2466 static int default_speed_div(int speed, int *khz)
2467 {
2468         LOG_ERROR("Translation from jtag_speed to khz not implemented");
2469         return ERROR_FAIL;
2470 }
2471
2472 static int default_power_dropout(int *dropout)
2473 {
2474         *dropout=0; /* by default we can't detect power dropout */
2475         return ERROR_OK;
2476 }
2477
2478 static int default_srst_asserted(int *srst_asserted)
2479 {
2480         *srst_asserted=0; /* by default we can't detect srst asserted */
2481         return ERROR_OK;
2482 }
2483
2484 static int handle_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2485 {
2486         int i;
2487         int retval;
2488
2489         /* check whether the interface is already configured */
2490         if (jtag_interface)
2491         {
2492                 LOG_WARNING("Interface already configured, ignoring");
2493                 return ERROR_OK;
2494         }
2495
2496         /* interface name is a mandatory argument */
2497         if (argc < 1 || args[0][0] == '\0')
2498         {
2499                 return ERROR_COMMAND_SYNTAX_ERROR;
2500         }
2501
2502         for (i=0; jtag_interfaces[i]; i++)
2503         {
2504                 if (strcmp(args[0], jtag_interfaces[i]->name) == 0)
2505                 {
2506                         if ((retval = jtag_interfaces[i]->register_commands(cmd_ctx)) != ERROR_OK)
2507                         {
2508                                 return retval;
2509                         }
2510
2511                         jtag_interface = jtag_interfaces[i];
2512
2513                         if (jtag_interface->khz == NULL)
2514                         {
2515                                 jtag_interface->khz = default_khz;
2516                         }
2517                         if (jtag_interface->speed_div == NULL)
2518                         {
2519                                 jtag_interface->speed_div = default_speed_div;
2520                         }
2521                         if (jtag_interface->power_dropout == NULL)
2522                         {
2523                                 jtag_interface->power_dropout = default_power_dropout;
2524                         }
2525                         if (jtag_interface->srst_asserted == NULL)
2526                         {
2527                                 jtag_interface->srst_asserted = default_srst_asserted;
2528                         }
2529
2530                         return ERROR_OK;
2531                 }
2532         }
2533
2534         /* no valid interface was found (i.e. the configuration option,
2535          * didn't match one of the compiled-in interfaces
2536          */
2537         LOG_ERROR("No valid jtag interface found (%s)", args[0]);
2538         LOG_ERROR("compiled-in jtag interfaces:");
2539         for (i = 0; jtag_interfaces[i]; i++)
2540         {
2541                 LOG_ERROR("%i: %s", i, jtag_interfaces[i]->name);
2542         }
2543
2544         return ERROR_JTAG_INVALID_INTERFACE;
2545 }
2546
2547 static int handle_jtag_device_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2548 {
2549         int e;
2550         char buf[1024];
2551         Jim_Obj *newargs[ 10 ];
2552         /*
2553          * CONVERT SYNTAX
2554          * argv[-1] = command
2555          * argv[ 0] = ir length
2556          * argv[ 1] = ir capture
2557          * argv[ 2] = ir mask
2558          * argv[ 3] = not actually used by anything but in the docs
2559          */
2560
2561         if( argc < 4 ){
2562                 command_print( cmd_ctx, "OLD DEPRECATED SYNTAX: Please use the NEW syntax");
2563                 return ERROR_OK;
2564         }
2565         command_print( cmd_ctx, "OLD SYNTAX: DEPRECATED - translating to new syntax");
2566         command_print( cmd_ctx, "jtag newtap CHIP TAP -irlen %s -ircapture %s -irvalue %s",
2567                                    args[0],
2568                                    args[1],
2569                                    args[2] );
2570         command_print( cmd_ctx, "Example: STM32 has 2 taps, the cortexM3(len4) + boundaryscan(len5)");
2571         command_print( cmd_ctx, "jtag newtap stm32 cortexm3 ....., thus creating the tap: \"stm32.cortexm3\"");
2572         command_print( cmd_ctx, "jtag newtap stm32 boundary ....., and the tap: \"stm32.boundary\"");
2573         command_print( cmd_ctx, "And then refer to the taps by the dotted name.");
2574
2575         newargs[0] = Jim_NewStringObj( interp, "jtag", -1   );
2576         newargs[1] = Jim_NewStringObj( interp, "newtap", -1 );
2577         sprintf( buf, "chip%d", jtag_NumTotalTaps() );
2578         newargs[2] = Jim_NewStringObj( interp, buf, -1 );
2579         sprintf( buf, "tap%d", jtag_NumTotalTaps() );
2580         newargs[3] = Jim_NewStringObj( interp, buf, -1  );
2581         newargs[4] = Jim_NewStringObj( interp, "-irlen", -1  );
2582         newargs[5] = Jim_NewStringObj( interp, args[0], -1  );
2583         newargs[6] = Jim_NewStringObj( interp, "-ircapture", -1  );
2584         newargs[7] = Jim_NewStringObj( interp, args[1], -1  );
2585         newargs[8] = Jim_NewStringObj( interp, "-irmask", -1  );
2586         newargs[9] = Jim_NewStringObj( interp, args[2], -1  );
2587
2588         command_print( cmd_ctx, "NEW COMMAND:");
2589         sprintf( buf, "%s %s %s %s %s %s %s %s %s %s",
2590                          Jim_GetString( newargs[0], NULL ),
2591                          Jim_GetString( newargs[1], NULL ),
2592                          Jim_GetString( newargs[2], NULL ),
2593                          Jim_GetString( newargs[3], NULL ),
2594                          Jim_GetString( newargs[4], NULL ),
2595                          Jim_GetString( newargs[5], NULL ),
2596                          Jim_GetString( newargs[6], NULL ),
2597                          Jim_GetString( newargs[7], NULL ),
2598                          Jim_GetString( newargs[8], NULL ),
2599                          Jim_GetString( newargs[9], NULL ) );
2600
2601         e = jim_jtag_command( interp, 10, newargs );
2602         if( e != JIM_OK ){
2603                 command_print( cmd_ctx, "%s", Jim_GetString( Jim_GetResult(interp), NULL ) );
2604         }
2605         return e;
2606 }
2607
2608 static int handle_scan_chain_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2609 {
2610         jtag_tap_t *tap;
2611
2612         tap = jtag_all_taps;
2613         command_print(cmd_ctx, "     TapName            | Enabled |   IdCode      Expected    IrLen IrCap  IrMask Instr     ");
2614         command_print(cmd_ctx, "---|--------------------|---------|------------|------------|------|------|------|---------");
2615
2616         while( tap ){
2617                 u32 expected, expected_mask, cur_instr, ii;
2618                 expected = buf_get_u32(tap->expected, 0, tap->ir_length);
2619                 expected_mask = buf_get_u32(tap->expected_mask, 0, tap->ir_length);
2620                 cur_instr = buf_get_u32(tap->cur_instr, 0, tap->ir_length);
2621
2622                 command_print(cmd_ctx,
2623                                           "%2d | %-18s |    %c    | 0x%08x | 0x%08x | 0x%02x | 0x%02x | 0x%02x | 0x%02x",
2624                                           tap->abs_chain_position,
2625                                           tap->dotted_name,
2626                                           tap->enabled ? 'Y' : 'n',
2627                                           tap->idcode,
2628                                           (tap->expected_ids_cnt > 0 ? tap->expected_ids[0] : 0),
2629                                           tap->ir_length,
2630                                           expected,
2631                                           expected_mask,
2632                                           cur_instr);
2633
2634                 for (ii = 1; ii < tap->expected_ids_cnt; ii++) {
2635                         command_print(cmd_ctx, "   |                    |         |            | 0x%08x |      |      |      |         ",
2636                                                   tap->expected_ids[ii]);
2637                 }
2638
2639                 tap = tap->next_tap;
2640         }
2641
2642         return ERROR_OK;
2643 }
2644
2645 static int handle_reset_config_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2646 {
2647         if (argc < 1)
2648                 return ERROR_COMMAND_SYNTAX_ERROR;
2649
2650         if (argc >= 1)
2651         {
2652                 if (strcmp(args[0], "none") == 0)
2653                         jtag_reset_config = RESET_NONE;
2654                 else if (strcmp(args[0], "trst_only") == 0)
2655                         jtag_reset_config = RESET_HAS_TRST;
2656                 else if (strcmp(args[0], "srst_only") == 0)
2657                         jtag_reset_config = RESET_HAS_SRST;
2658                 else if (strcmp(args[0], "trst_and_srst") == 0)
2659                         jtag_reset_config = RESET_TRST_AND_SRST;
2660                 else
2661                 {
2662                         LOG_ERROR("(1) invalid reset_config argument (%s), defaulting to none", args[0]);
2663                         jtag_reset_config = RESET_NONE;
2664                         return ERROR_INVALID_ARGUMENTS;
2665                 }
2666         }
2667
2668         if (argc >= 2)
2669         {
2670                 if (strcmp(args[1], "separate") == 0)
2671                 {
2672                         /* seperate reset lines - default */
2673                 } else
2674                 {
2675                         if (strcmp(args[1], "srst_pulls_trst") == 0)
2676                                 jtag_reset_config |= RESET_SRST_PULLS_TRST;
2677                         else if (strcmp(args[1], "trst_pulls_srst") == 0)
2678                                 jtag_reset_config |= RESET_TRST_PULLS_SRST;
2679                         else if (strcmp(args[1], "combined") == 0)
2680                                 jtag_reset_config |= RESET_SRST_PULLS_TRST | RESET_TRST_PULLS_SRST;
2681                         else
2682                         {
2683                                 LOG_ERROR("(2) invalid reset_config argument (%s), defaulting to none", args[1]);
2684                                 jtag_reset_config = RESET_NONE;
2685                                 return ERROR_INVALID_ARGUMENTS;
2686                         }
2687                 }
2688         }
2689
2690         if (argc >= 3)
2691         {
2692                 if (strcmp(args[2], "trst_open_drain") == 0)
2693                         jtag_reset_config |= RESET_TRST_OPEN_DRAIN;
2694                 else if (strcmp(args[2], "trst_push_pull") == 0)
2695                         jtag_reset_config &= ~RESET_TRST_OPEN_DRAIN;
2696                 else
2697                 {
2698                         LOG_ERROR("(3) invalid reset_config argument (%s) defaulting to none", args[2] );
2699                         jtag_reset_config = RESET_NONE;
2700                         return ERROR_INVALID_ARGUMENTS;
2701                 }
2702         }
2703
2704         if (argc >= 4)
2705         {
2706                 if (strcmp(args[3], "srst_push_pull") == 0)
2707                         jtag_reset_config |= RESET_SRST_PUSH_PULL;
2708                 else if (strcmp(args[3], "srst_open_drain") == 0)
2709                         jtag_reset_config &= ~RESET_SRST_PUSH_PULL;
2710                 else
2711                 {
2712                         LOG_ERROR("(4) invalid reset_config argument (%s), defaulting to none", args[3]);
2713                         jtag_reset_config = RESET_NONE;
2714                         return ERROR_INVALID_ARGUMENTS;
2715                 }
2716         }
2717
2718         return ERROR_OK;
2719 }
2720
2721 static int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2722 {
2723         if (argc < 1)
2724         {
2725                 LOG_ERROR("jtag_nsrst_delay <ms> command takes one required argument");
2726                 exit(-1);
2727         }
2728         else
2729         {
2730                 jtag_nsrst_delay = strtoul(args[0], NULL, 0);
2731         }
2732
2733         return ERROR_OK;
2734 }
2735
2736 static int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2737 {
2738         if (argc < 1)
2739         {
2740                 LOG_ERROR("jtag_ntrst_delay <ms> command takes one required argument");
2741                 exit(-1);
2742         }
2743         else
2744         {
2745                 jtag_ntrst_delay = strtoul(args[0], NULL, 0);
2746         }
2747
2748         return ERROR_OK;
2749 }
2750
2751 static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2752 {
2753         int retval=ERROR_OK;
2754
2755         if (argc == 1)
2756         {
2757                 LOG_DEBUG("handle jtag speed");
2758
2759                 int cur_speed = 0;
2760                 cur_speed = jtag_speed = strtoul(args[0], NULL, 0);
2761
2762                 /* this command can be called during CONFIG,
2763                  * in which case jtag isn't initialized */
2764                 if (jtag)
2765                 {
2766                         retval=jtag->speed(cur_speed);
2767                 }
2768         } else if (argc == 0)
2769         {
2770         } else
2771         {
2772                 return ERROR_COMMAND_SYNTAX_ERROR;
2773         }
2774         command_print(cmd_ctx, "jtag_speed: %d", jtag_speed);
2775
2776         return retval;
2777 }
2778
2779 static int handle_jtag_khz_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2780 {
2781         int retval=ERROR_OK;
2782         LOG_DEBUG("handle jtag khz");
2783
2784         if(argc == 1)
2785         {
2786                 speed_khz = strtoul(args[0], NULL, 0);
2787                 if (jtag != NULL)
2788                 {
2789                         int cur_speed = 0;
2790                         LOG_DEBUG("have interface set up");
2791                         int speed_div1;
2792                         if ((retval=jtag->khz(speed_khz, &speed_div1))!=ERROR_OK)
2793                         {
2794                                 speed_khz = 0;
2795                                 return retval;
2796                         }
2797
2798                         cur_speed = jtag_speed = speed_div1;
2799
2800                         retval=jtag->speed(cur_speed);
2801                 } else
2802                 {
2803                         hasKHz = 1;
2804                 }
2805         } else if (argc==0)
2806         {
2807         } else
2808         {
2809                 return ERROR_COMMAND_SYNTAX_ERROR;
2810         }
2811
2812         if (jtag!=NULL)
2813         {
2814                 if ((retval=jtag->speed_div(jtag_speed, &speed_khz))!=ERROR_OK)
2815                         return retval;
2816         }
2817
2818         if (speed_khz==0)
2819         {
2820                 command_print(cmd_ctx, "RCLK - adaptive");
2821         } else
2822         {
2823                 command_print(cmd_ctx, "%d kHz", speed_khz);
2824         }
2825         return retval;
2826
2827 }
2828
2829 static int handle_endstate_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2830 {
2831         tap_state_t state;
2832
2833         if (argc < 1)
2834         {
2835                 return ERROR_COMMAND_SYNTAX_ERROR;
2836         }
2837         else
2838         {
2839                 state = tap_state_by_name( args[0] );
2840                 if( state < 0 ){
2841                         command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
2842                         return ERROR_COMMAND_SYNTAX_ERROR;
2843                 }
2844                 jtag_add_end_state(state);
2845                 jtag_execute_queue();
2846         }
2847         command_print(cmd_ctx, "current endstate: %s", tap_state_name(cmd_queue_end_state));
2848
2849         return ERROR_OK;
2850 }
2851
2852 static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2853 {
2854         int trst = -1;
2855         int srst = -1;
2856
2857         if (argc < 2)
2858         {
2859                 return ERROR_COMMAND_SYNTAX_ERROR;
2860         }
2861
2862         if (args[0][0] == '1')
2863                 trst = 1;
2864         else if (args[0][0] == '0')
2865                 trst = 0;
2866         else
2867         {
2868                 return ERROR_COMMAND_SYNTAX_ERROR;
2869         }
2870
2871         if (args[1][0] == '1')
2872                 srst = 1;
2873         else if (args[1][0] == '0')
2874                 srst = 0;
2875         else
2876         {
2877                 return ERROR_COMMAND_SYNTAX_ERROR;
2878         }
2879
2880         if (jtag_interface_init(cmd_ctx) != ERROR_OK)
2881                 return ERROR_JTAG_INIT_FAILED;
2882
2883         jtag_add_reset(trst, srst);
2884         jtag_execute_queue();
2885
2886         return ERROR_OK;
2887 }
2888
2889 static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2890 {
2891         if (argc < 1)
2892         {
2893                 return ERROR_COMMAND_SYNTAX_ERROR;
2894         }
2895
2896         jtag_add_runtest(strtol(args[0], NULL, 0), TAP_INVALID);
2897         jtag_execute_queue();
2898
2899         return ERROR_OK;
2900
2901 }
2902
2903 static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
2904 {
2905         int i;
2906         scan_field_t *fields;
2907         jtag_tap_t *tap;
2908         tap_state_t endstate;
2909
2910         if ((argc < 2) || (argc % 2))
2911         {
2912                 return ERROR_COMMAND_SYNTAX_ERROR;
2913         }
2914
2915         /* optional "-endstate" */
2916         /*          "statename" */
2917         /* at the end of the arguments. */
2918         /* assume none. */
2919         endstate = cmd_queue_end_state;
2920         if( argc >= 4 ){
2921                 /* have at least one pair of numbers. */
2922                 /* is last pair the magic text? */
2923                 if( 0 == strcmp( "-endstate", args[ argc - 2 ] ) ){
2924                         const char *cpA;
2925                         const char *cpS;
2926                         cpA = args[ argc-1 ];
2927                         for( endstate = 0 ; endstate < TAP_NUM_STATES ; endstate++ ){
2928                                 cpS = tap_state_name( endstate );
2929                                 if( 0 == strcmp( cpA, cpS ) ){
2930                                         break;
2931                                 }
2932                         }
2933                         if( endstate >= TAP_NUM_STATES ){
2934                                 return ERROR_COMMAND_SYNTAX_ERROR;
2935                         } else {
2936                                 /* found - remove the last 2 args */
2937                                 argc -= 2;
2938                         }
2939                 }
2940         }
2941
2942         int num_fields = argc / 2;
2943
2944         fields = malloc(sizeof(scan_field_t) * num_fields);
2945
2946         for (i = 0; i < num_fields; i++)
2947         {
2948                 tap = jtag_TapByString( args[i*2] );
2949                 if (tap==NULL)
2950                 {
2951                         command_print( cmd_ctx, "Tap: %s unknown", args[i*2] );
2952                         return ERROR_FAIL;
2953                 }
2954                 int field_size = tap->ir_length;
2955                 fields[i].tap = tap;
2956                 fields[i].num_bits = field_size;
2957                 fields[i].out_value = malloc(CEIL(field_size, 8));
2958                 buf_set_u32(fields[i].out_value, 0, field_size, strtoul(args[i*2+1], NULL, 0));
2959                 fields[i].in_value = NULL;
2960         }
2961
2962         /* did we have an endstate? */
2963         jtag_add_ir_scan(num_fields, fields, endstate);
2964
2965         int retval=jtag_execute_queue();
2966
2967         for (i = 0; i < num_fields; i++)
2968                 free(fields[i].out_value);
2969
2970         free (fields);
2971
2972         return retval;
2973 }
2974
2975 static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args)
2976 {
2977         int retval;
2978         scan_field_t *fields;
2979         int num_fields;
2980         int field_count = 0;
2981         int i, e;
2982         jtag_tap_t *tap;
2983         tap_state_t endstate;
2984
2985         /* args[1] = device
2986          * args[2] = num_bits
2987          * args[3] = hex string
2988          * ... repeat num bits and hex string ...
2989          *
2990          * .. optionally:
2991         *     args[N-2] = "-endstate"
2992          *     args[N-1] = statename
2993          */
2994         if ((argc < 4) || ((argc % 2)!=0))
2995         {
2996                 Jim_WrongNumArgs(interp, 1, args, "wrong arguments");
2997                 return JIM_ERR;
2998         }
2999
3000         /* assume no endstate */
3001         endstate = cmd_queue_end_state;
3002         /* validate arguments as numbers */
3003         e = JIM_OK;
3004         for (i = 2; i < argc; i+=2)
3005         {
3006                 long bits;
3007                 const char *cp;
3008
3009                 e = Jim_GetLong(interp, args[i], &bits);
3010                 /* If valid - try next arg */
3011                 if( e == JIM_OK ){
3012                         continue;
3013                 }
3014
3015                 /* Not valid.. are we at the end? */
3016                 if ( ((i+2) != argc) ){
3017                         /* nope, then error */
3018                         return e;
3019                 }
3020
3021                 /* it could be: "-endstate FOO" */
3022
3023                 /* get arg as a string. */
3024                 cp = Jim_GetString( args[i], NULL );
3025                 /* is it the magic? */
3026                 if( 0 == strcmp( "-endstate", cp ) ){
3027                         /* is the statename valid? */
3028                         cp = Jim_GetString( args[i+1], NULL );
3029
3030                         /* see if it is a valid state name */
3031                         endstate = tap_state_by_name(cp);
3032                         if( endstate < 0 ){
3033                                 /* update the error message */
3034                                 Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp );
3035                         } else {
3036                                 /* valid - so clear the error */
3037                                 e = JIM_OK;
3038                                 /* and remove the last 2 args */
3039                                 argc -= 2;
3040                         }
3041                 }
3042
3043                 /* Still an error? */
3044                 if( e != JIM_OK ){
3045                         return e; /* too bad */
3046                 }
3047         } /* validate args */
3048
3049         tap = jtag_TapByJimObj( interp, args[1] );
3050         if( tap == NULL ){
3051                 return JIM_ERR;
3052         }
3053
3054         num_fields=(argc-2)/2;
3055         fields = malloc(sizeof(scan_field_t) * num_fields);
3056         for (i = 2; i < argc; i+=2)
3057         {
3058                 long bits;
3059                 int len;
3060                 const char *str;
3061
3062                 Jim_GetLong(interp, args[i], &bits);
3063                 str = Jim_GetString(args[i+1], &len);
3064
3065                 fields[field_count].tap = tap;
3066                 fields[field_count].num_bits = bits;
3067                 fields[field_count].out_value = malloc(CEIL(bits, 8));
3068                 str_to_buf(str, len, fields[field_count].out_value, bits, 0);
3069                 fields[field_count].in_value = fields[field_count].out_value;
3070                 field_count++;
3071         }
3072
3073         jtag_add_dr_scan(num_fields, fields, endstate);
3074
3075         retval = jtag_execute_queue();
3076         if (retval != ERROR_OK)
3077         {
3078                 Jim_SetResultString(interp, "drscan: jtag execute failed",-1);
3079                 return JIM_ERR;
3080         }
3081
3082         field_count=0;
3083         Jim_Obj *list = Jim_NewListObj(interp, NULL, 0);
3084         for (i = 2; i < argc; i+=2)
3085         {
3086                 long bits;
3087                 char *str;
3088
3089                 Jim_GetLong(interp, args[i], &bits);
3090                 str = buf_to_str(fields[field_count].in_value, bits, 16);
3091                 free(fields[field_count].out_value);
3092
3093                 Jim_ListAppendElement(interp, list, Jim_NewStringObj(interp, str, strlen(str)));
3094                 free(str);
3095                 field_count++;
3096         }
3097
3098         Jim_SetResult(interp, list);
3099
3100         free(fields);
3101
3102         return JIM_OK;
3103 }
3104
3105
3106 static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args)
3107 {
3108         Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_flush_queue_count));
3109
3110         return JIM_OK;
3111 }
3112
3113
3114 static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
3115 {
3116         if (argc == 1)
3117         {
3118                 if (strcmp(args[0], "enable") == 0)
3119                 {
3120                         jtag_verify_capture_ir = 1;
3121                 }
3122                 else if (strcmp(args[0], "disable") == 0)
3123                 {
3124                         jtag_verify_capture_ir = 0;
3125                 } else
3126                 {
3127                         return ERROR_COMMAND_SYNTAX_ERROR;
3128                 }
3129         } else if (argc != 0)
3130         {
3131                 return ERROR_COMMAND_SYNTAX_ERROR;
3132         }
3133
3134         command_print(cmd_ctx, "verify Capture-IR is %s", (jtag_verify_capture_ir) ? "enabled": "disabled");
3135
3136         return ERROR_OK;
3137 }
3138
3139 static int handle_verify_jtag_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
3140 {
3141         if (argc == 1)
3142         {
3143                 if (strcmp(args[0], "enable") == 0)
3144                 {
3145                         jtag_verify = 1;
3146                 }
3147                 else if (strcmp(args[0], "disable") == 0)
3148                 {
3149                         jtag_verify = 0;
3150                 } else
3151                 {
3152                         return ERROR_COMMAND_SYNTAX_ERROR;
3153                 }
3154         } else if (argc != 0)
3155         {
3156                 return ERROR_COMMAND_SYNTAX_ERROR;
3157         }
3158
3159         command_print(cmd_ctx, "verify jtag capture is %s", (jtag_verify) ? "enabled": "disabled");
3160
3161         return ERROR_OK;
3162 }
3163
3164
3165 int jtag_power_dropout(int *dropout)
3166 {
3167         return jtag->power_dropout(dropout);
3168 }
3169
3170 int jtag_srst_asserted(int *srst_asserted)
3171 {
3172         return jtag->srst_asserted(srst_asserted);
3173 }
3174
3175 void jtag_tap_handle_event( jtag_tap_t * tap, enum jtag_tap_event e)
3176 {
3177         jtag_tap_event_action_t * jteap;
3178         int done;
3179
3180         jteap = tap->event_action;
3181
3182         done = 0;
3183         while (jteap) {
3184                 if (jteap->event == e) {
3185                         done = 1;
3186                         LOG_DEBUG( "JTAG tap: %s event: %d (%s) action: %s\n",
3187                                         tap->dotted_name,
3188                                         e,
3189                                         Jim_Nvp_value2name_simple(nvp_jtag_tap_event, e)->name,
3190                                         Jim_GetString(jteap->body, NULL) );
3191                         if (Jim_EvalObj(interp, jteap->body) != JIM_OK) {
3192                                 Jim_PrintErrorMessage(interp);
3193                         }
3194                 }
3195
3196                 jteap = jteap->next;
3197         }
3198
3199         if (!done) {
3200                 LOG_DEBUG( "event %d %s - no action",
3201                                 e,
3202                                 Jim_Nvp_value2name_simple( nvp_jtag_tap_event, e)->name);
3203         }
3204 }
3205
3206 /*-----<Cable Helper API>---------------------------------------*/
3207
3208 /*  these Cable Helper API functions are all documented in the jtag.h header file,
3209         using a Doxygen format.  And since Doxygen's configuration file "Doxyfile",
3210         is setup to prefer its docs in the header file, no documentation is here, for
3211         if it were, it would have to be doubly maintained.
3212 */
3213
3214 /**
3215  * @see tap_set_state() and tap_get_state() accessors.
3216  * Actual name is not important since accessors hide it.
3217  */
3218 static tap_state_t state_follower = TAP_RESET;
3219
3220 void tap_set_state_impl( tap_state_t new_state )
3221 {
3222         /* this is the state we think the TAPs are in now, was cur_state */
3223         state_follower = new_state;
3224 }
3225
3226 tap_state_t tap_get_state()
3227 {
3228         return state_follower;
3229 }
3230
3231 /**
3232  * @see tap_set_end_state() and tap_get_end_state() accessors.
3233  * Actual name is not important because accessors hide it.
3234  */
3235 static tap_state_t end_state_follower = TAP_RESET;
3236
3237 void tap_set_end_state( tap_state_t new_end_state )
3238 {
3239         /* this is the state we think the TAPs will be in at completion of the
3240            current TAP operation, was end_state
3241         */
3242         end_state_follower = new_end_state;
3243 }
3244
3245 tap_state_t tap_get_end_state()
3246 {
3247         return end_state_follower;
3248 }
3249
3250
3251 int tap_move_ndx( tap_state_t astate )
3252 {
3253         /* given a stable state, return the index into the tms_seqs[] array within tap_get_tms_path() */
3254
3255         int ndx;
3256
3257         switch( astate )
3258         {
3259         case TAP_RESET:         ndx = 0;                        break;
3260         case TAP_DRSHIFT:       ndx = 2;                        break;
3261         case TAP_DRPAUSE:       ndx = 3;                        break;
3262         case TAP_IDLE:          ndx = 1;                        break;
3263         case TAP_IRSHIFT:       ndx = 4;                        break;
3264         case TAP_IRPAUSE:       ndx = 5;                        break;
3265         default:
3266                 LOG_ERROR( "fatal: unstable state \"%s\" used in tap_move_ndx()", tap_state_name(astate) );
3267                 exit(1);
3268         }
3269
3270         return ndx;
3271 }
3272
3273
3274 /* tap_move[i][j]: tap movement command to go from state i to state j
3275  * 0: Test-Logic-Reset
3276  * 1: Run-Test/Idle
3277  * 2: Shift-DR
3278  * 3: Pause-DR
3279  * 4: Shift-IR
3280  * 5: Pause-IR
3281  *
3282  * DRSHIFT->DRSHIFT and IRSHIFT->IRSHIFT have to be caught in interface specific code
3283  */
3284 struct tms_sequences
3285 {
3286         u8      bits;
3287         u8      bit_count;
3288
3289 };
3290
3291 /*
3292  * These macros allow us to specify TMS state transitions by bits rather than hex bytes.
3293  * Read the bits from LSBit first to MSBit last (right-to-left).
3294  */
3295 #define HEX__(n) 0x##n##LU
3296
3297 #define B8__(x) \
3298          (((x) & 0x0000000FLU)?(1<<0):0) \
3299         +(((x) & 0x000000F0LU)?(1<<1):0) \
3300         +(((x) & 0x00000F00LU)?(1<<2):0) \
3301         +(((x) & 0x0000F000LU)?(1<<3):0) \
3302         +(((x) & 0x000F0000LU)?(1<<4):0) \
3303         +(((x) & 0x00F00000LU)?(1<<5):0) \
3304         +(((x) & 0x0F000000LU)?(1<<6):0) \
3305         +(((x) & 0xF0000000LU)?(1<<7):0)
3306
3307 #define B8(bits,count)          { ((u8)B8__(HEX__(bits))), (count) }
3308
3309 static const struct tms_sequences old_tms_seqs[6][6] =          /*  [from_state_ndx][to_state_ndx] */
3310 {
3311         /* value clocked to TMS to move from one of six stable states to another.
3312          * N.B. OOCD clocks TMS from LSB first, so read these right-to-left.
3313          * N.B. These values are tightly bound to the table in tap_get_tms_path_len().
3314          * N.B. Reset only needs to be 0b11111, but in JLink an even byte of 1's is more stable.
3315          *              These extra ones cause no TAP state problem, because we go into reset and stay in reset.
3316          */
3317
3318
3319
3320         /* to state: */
3321         /*      RESET                   IDLE                    DRSHIFT                 DRPAUSE                 IRSHIFT                 IRPAUSE         */              /* from state: */
3322         {       B8(1111111,7),  B8(0000000,7),  B8(0010111,7),  B8(0001010,7),  B8(0011011,7),  B8(0010110,7) },        /* RESET */
3323         {       B8(1111111,7),  B8(0000000,7),  B8(0100101,7),  B8(0000101,7),  B8(0101011,7),  B8(0001011,7) },        /* IDLE */
3324         {       B8(1111111,7),  B8(0110001,7),  B8(0000000,7),  B8(0000001,7),  B8(0001111,7),  B8(0101111,7) },        /* DRSHIFT */
3325         {       B8(1111111,7),  B8(0110000,7),  B8(0100000,7),  B8(0010111,7),  B8(0011110,7),  B8(0101111,7) },        /* DRPAUSE */
3326         {       B8(1111111,7),  B8(0110001,7),  B8(0000111,7),  B8(0010111,7),  B8(0000000,7),  B8(0000001,7) },        /* IRSHIFT */
3327         {       B8(1111111,7),  B8(0110000,7),  B8(0011100,7),  B8(0010111,7),  B8(0011110,7),  B8(0101111,7) },        /* IRPAUSE */
3328 };
3329
3330
3331
3332 static const struct tms_sequences short_tms_seqs[6][6] =                /*  [from_state_ndx][to_state_ndx] */
3333 {
3334         /*      this is the table submitted by Jeff Williams on 3/30/2009 with this comment:
3335
3336                 OK, I added Peter's version of the state table, and it works OK for
3337                 me on MC1322x. I've recreated the jlink portion of patch with this
3338                 new state table. His changes to my state table are pretty minor in
3339                 terms of total transitions, but Peter feels that his version fixes
3340                 some long-standing problems.
3341                 Jeff
3342
3343                 I added the bit count into the table, reduced RESET column to 7 bits from 8.
3344                 Dick
3345
3346                 state specific comments:
3347                 ------------------------
3348                 *->RESET                   tried the 5 bit reset and it gave me problems, 7 bits seems to
3349                                            work better on ARM9 with ft2232 driver.  (Dick)
3350
3351                 RESET->DRSHIFT add 1 extra clock cycles in the RESET state before advancing.
3352                                                 needed on ARM9 with ft2232 driver.  (Dick)
3353
3354                 RESET->IRSHIFT add 1 extra clock cycles in the RESET state before advancing.
3355                                                 needed on ARM9 with ft2232 driver.  (Dick)
3356         */
3357
3358         /* to state: */
3359         /*      RESET                   IDLE                            DRSHIFT                 DRPAUSE                 IRSHIFT                 IRPAUSE */                      /* from state: */
3360         {       B8(1111111,7),  B8(0000000,7),  B8(0010111,7),          B8(0001010,7),  B8(0011011,7),  B8(0010110,7) },        /* RESET */
3361         {       B8(1111111,7),  B8(0000000,7),  B8(001,3),                      B8(0101,4),             B8(0011,4),     B8(01011,5) },          /* IDLE */
3362         {       B8(1111111,7),  B8(011,3),              B8(00111,5),            B8(01,2),               B8(001111,6),   B8(0101111,7) },        /* DRSHIFT */
3363         {       B8(1111111,7),  B8(011,3),              B8(01,2),               B8(0,1),                B8(001111,6),   B8(0101111,7) },        /* DRPAUSE */
3364         {       B8(1111111,7),  B8(011,3),              B8(00111,5),            B8(010111,6),   B8(001111,6),   B8(01,2) },                     /* IRSHIFT */
3365         {       B8(1111111,7),  B8(011,3),              B8(00111,5),            B8(010111,6),   B8(01,2),               B8(0,1) }                       /* IRPAUSE */
3366
3367 };
3368
3369 typedef const struct tms_sequences tms_table[6][6];
3370
3371 static tms_table *tms_seqs=&short_tms_seqs;
3372
3373 int tap_get_tms_path( tap_state_t from, tap_state_t to )
3374 {
3375         return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bits;
3376 }
3377
3378
3379 int tap_get_tms_path_len( tap_state_t from, tap_state_t to )
3380 {
3381         return (*tms_seqs)[tap_move_ndx(from)][tap_move_ndx(to)].bit_count;
3382 }
3383
3384
3385 bool tap_is_state_stable(tap_state_t astate)
3386 {
3387         bool is_stable;
3388
3389         /*      A switch() is used because it is symbol dependent
3390                 (not value dependent like an array), and can also check bounds.
3391         */
3392         switch( astate )
3393         {
3394         case TAP_RESET:
3395         case TAP_IDLE:
3396         case TAP_DRSHIFT:
3397         case TAP_DRPAUSE:
3398         case TAP_IRSHIFT:
3399         case TAP_IRPAUSE:
3400                 is_stable = true;
3401                 break;
3402         default:
3403                 is_stable = false;
3404         }
3405
3406         return is_stable;
3407 }
3408
3409 tap_state_t tap_state_transition(tap_state_t cur_state, bool tms)
3410 {
3411         tap_state_t new_state;
3412
3413         /*      A switch is used because it is symbol dependent and not value dependent
3414                 like an array.  Also it can check for out of range conditions.
3415         */
3416
3417         if (tms)
3418         {
3419                 switch (cur_state)
3420                 {
3421                 case TAP_RESET:
3422                         new_state = cur_state;
3423                         break;
3424                 case TAP_IDLE:
3425                 case TAP_DRUPDATE:
3426                 case TAP_IRUPDATE:
3427                         new_state = TAP_DRSELECT;
3428                         break;
3429                 case TAP_DRSELECT:
3430                         new_state = TAP_IRSELECT;
3431                         break;
3432                 case TAP_DRCAPTURE:
3433                 case TAP_DRSHIFT:
3434                         new_state = TAP_DREXIT1;
3435                         break;
3436                 case TAP_DREXIT1:
3437                 case TAP_DREXIT2:
3438                         new_state = TAP_DRUPDATE;
3439                         break;
3440                 case TAP_DRPAUSE:
3441                         new_state = TAP_DREXIT2;
3442                         break;
3443                 case TAP_IRSELECT:
3444                         new_state = TAP_RESET;
3445                         break;
3446                 case TAP_IRCAPTURE:
3447                 case TAP_IRSHIFT:
3448                         new_state = TAP_IREXIT1;
3449                         break;
3450                 case TAP_IREXIT1:
3451                 case TAP_IREXIT2:
3452                         new_state = TAP_IRUPDATE;
3453                         break;
3454                 case TAP_IRPAUSE:
3455                         new_state = TAP_IREXIT2;
3456                         break;
3457                 default:
3458                         LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3459                         exit(1);
3460                         break;
3461                 }
3462         }
3463         else
3464         {
3465                 switch (cur_state)
3466                 {
3467                 case TAP_RESET:
3468                 case TAP_IDLE:
3469                 case TAP_DRUPDATE:
3470                 case TAP_IRUPDATE:
3471                         new_state = TAP_IDLE;
3472                         break;
3473                 case TAP_DRSELECT:
3474                         new_state = TAP_DRCAPTURE;
3475                         break;
3476                 case TAP_DRCAPTURE:
3477                 case TAP_DRSHIFT:
3478                 case TAP_DREXIT2:
3479                         new_state = TAP_DRSHIFT;
3480                         break;
3481                 case TAP_DREXIT1:
3482                 case TAP_DRPAUSE:
3483                         new_state = TAP_DRPAUSE;
3484                         break;
3485                 case TAP_IRSELECT:
3486                         new_state = TAP_IRCAPTURE;
3487                         break;
3488                 case TAP_IRCAPTURE:
3489                 case TAP_IRSHIFT:
3490                 case TAP_IREXIT2:
3491                         new_state = TAP_IRSHIFT;
3492                         break;
3493                 case TAP_IREXIT1:
3494                 case TAP_IRPAUSE:
3495                         new_state = TAP_IRPAUSE;
3496                         break;
3497                 default:
3498                         LOG_ERROR( "fatal: invalid argument cur_state=%d", cur_state );
3499                         exit(1);
3500                         break;
3501                 }
3502         }
3503
3504         return new_state;
3505 }
3506
3507 const char* tap_state_name(tap_state_t state)
3508 {
3509         const char* ret;
3510
3511         switch( state )
3512         {
3513         case TAP_RESET:         ret = "RESET";                  break;
3514         case TAP_IDLE:          ret = "RUN/IDLE";               break;
3515         case TAP_DRSELECT:      ret = "DRSELECT";               break;
3516         case TAP_DRCAPTURE: ret = "DRCAPTURE";          break;
3517         case TAP_DRSHIFT:       ret = "DRSHIFT";                        break;
3518         case TAP_DREXIT1:       ret = "DREXIT1";                        break;
3519         case TAP_DRPAUSE:       ret = "DRPAUSE";                        break;
3520         case TAP_DREXIT2:       ret = "DREXIT2";                        break;
3521         case TAP_DRUPDATE:      ret = "DRUPDATE";               break;
3522         case TAP_IRSELECT:      ret = "IRSELECT";               break;
3523         case TAP_IRCAPTURE: ret = "IRCAPTURE";          break;
3524         case TAP_IRSHIFT:       ret = "IRSHIFT";                        break;
3525         case TAP_IREXIT1:       ret = "IREXIT1";                        break;
3526         case TAP_IRPAUSE:       ret = "IRPAUSE";                        break;
3527         case TAP_IREXIT2:       ret = "IREXIT2";                        break;
3528         case TAP_IRUPDATE:      ret = "IRUPDATE";               break;
3529         default:                                ret = "???";
3530         }
3531
3532         return ret;
3533 }
3534
3535 static tap_state_t tap_state_by_name( const char *name )
3536 {
3537         tap_state_t x;
3538
3539         for( x = 0 ; x < TAP_NUM_STATES ; x++ ){
3540                 /* be nice to the human */
3541                 if( 0 == strcasecmp( name, tap_state_name(x) ) ){
3542                         return x;
3543                 }
3544         }
3545         /* not found */
3546         return TAP_INVALID;
3547 }
3548
3549 #ifdef _DEBUG_JTAG_IO_
3550
3551 #define JTAG_DEBUG_STATE_APPEND(buf, len, bit) \
3552                 do { buf[len] = bit ? '1' : '0'; } while(0)
3553 #define JTAG_DEBUG_STATE_PRINT(a, b, astr, bstr) \
3554                 DEBUG_JTAG_IO("TAP/SM: %9s -> %5s\tTMS: %s\tTDI: %s", \
3555                         tap_state_name(a), tap_state_name(b), astr, bstr)
3556
3557 tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf,
3558                 unsigned tap_bits, tap_state_t next_state)
3559 {
3560         const u8 *tms_buffer;
3561         const u8 *tdi_buffer;
3562         unsigned tap_bytes;
3563         unsigned cur_byte;
3564         unsigned cur_bit;
3565
3566         unsigned tap_out_bits;
3567         char tms_str[33];
3568         char tdi_str[33];
3569
3570         tap_state_t last_state;
3571
3572         // set startstate (and possibly last, if tap_bits == 0)
3573         last_state = next_state;
3574         DEBUG_JTAG_IO("TAP/SM: START state: %s", tap_state_name(next_state));
3575
3576         tms_buffer = (const u8 *)tms_buf;
3577         tdi_buffer = (const u8 *)tdi_buf;
3578
3579         tap_bytes = TAP_SCAN_BYTES(tap_bits);
3580         DEBUG_JTAG_IO("TAP/SM: TMS bits: %u (bytes: %u)", tap_bits, tap_bytes);
3581
3582         tap_out_bits = 0;
3583         for(cur_byte = 0; cur_byte < tap_bytes; cur_byte++)
3584         {
3585                 for(cur_bit = 0; cur_bit < 8; cur_bit++)
3586                 {
3587                         // make sure we do not run off the end of the buffers
3588                         unsigned tap_bit = cur_byte * 8 + cur_bit;
3589                         if (tap_bit == tap_bits)
3590                                 break;
3591
3592                         // check and save TMS bit
3593                         tap_bit = !!(tms_buffer[cur_byte] & (1 << cur_bit));
3594                         JTAG_DEBUG_STATE_APPEND(tms_str, tap_out_bits, tap_bit);
3595
3596                         // use TMS bit to find the next TAP state
3597                         next_state = tap_state_transition(last_state, tap_bit);
3598
3599                         // check and store TDI bit
3600                         tap_bit = !!(tdi_buffer[cur_byte] & (1 << cur_bit));
3601                         JTAG_DEBUG_STATE_APPEND(tdi_str, tap_out_bits, tap_bit);
3602
3603                         // increment TAP bits
3604                         tap_out_bits++;
3605
3606                         // Only show TDO bits on state transitions, or
3607                         // after some number of bits in the same state.
3608                         if ((next_state == last_state) && (tap_out_bits < 32))
3609                                 continue;
3610
3611                         // terminate strings and display state transition
3612                         tms_str[tap_out_bits] = tdi_str[tap_out_bits] = 0;
3613                         JTAG_DEBUG_STATE_PRINT(last_state, next_state, tms_str, tdi_str);
3614
3615                         // reset state
3616                         last_state = next_state;
3617                         tap_out_bits = 0;
3618                 }
3619         }
3620
3621         if (tap_out_bits)
3622         {
3623                 // terminate strings and display state transition
3624                 tms_str[tap_out_bits] = tdi_str[tap_out_bits] = 0;
3625                 JTAG_DEBUG_STATE_PRINT(last_state, next_state, tms_str, tdi_str);
3626         }
3627
3628         DEBUG_JTAG_IO("TAP/SM: FINAL state: %s", tap_state_name(next_state));
3629
3630         return next_state;
3631 }
3632 #endif // _DEBUG_JTAG_IO_
3633
3634 #ifndef HAVE_JTAG_MINIDRIVER_H
3635 void jtag_alloc_in_value32(scan_field_t *field)
3636 {
3637         field->in_value=(u8 *)cmd_queue_alloc(4);
3638 }
3639 #endif
3640
3641 static int handle_tms_sequence_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
3642 {
3643         if (argc == 1)
3644         {
3645                 if (strcmp(args[0], "short") == 0)
3646                 {
3647                         tms_seqs=&short_tms_seqs;
3648                 }
3649                 else if (strcmp(args[0], "long") == 0)
3650                 {
3651                         tms_seqs=&old_tms_seqs;
3652                 } else
3653                 {
3654                         return ERROR_COMMAND_SYNTAX_ERROR;
3655                 }
3656         } else if (argc != 0)
3657         {
3658                 return ERROR_COMMAND_SYNTAX_ERROR;
3659         }
3660
3661         command_print(cmd_ctx, "tms sequence is  %s", (tms_seqs==&short_tms_seqs) ? "short": "long");
3662
3663         return ERROR_OK;
3664 }
3665
3666 /*-----</Cable Helper API>--------------------------------------*/