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