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