* The number of TAPs in the __jtag_all_taps list, used to track the
* assigned chain position to new TAPs
*/
-static int jtag_num_taps = 0;
+static unsigned jtag_num_taps = 0;
enum reset_types jtag_reset_config = RESET_NONE;
tap_state_t cmd_queue_end_state = TAP_RESET;
return __jtag_all_taps;
};
-int jtag_tap_count(void)
+unsigned jtag_tap_count(void)
{
return jtag_num_taps;
}
*tap = t;
}
-jtag_tap_t *jtag_tap_by_string( const char *s )
+jtag_tap_t *jtag_tap_by_string(const char *s)
{
- jtag_tap_t *t;
+ /* try by name first */
+ jtag_tap_t *t = jtag_all_taps();
+ while (t)
+ {
+ if (0 == strcmp(t->dotted_name, s))
+ return t;
+ t = t->next_tap;
+ }
+
+ /* no tap found by name, so try to parse the name as a number */
char *cp;
+ unsigned n = strtoul(s, &cp, 0);
+ if ((s == cp) || (*cp != 0))
+ return NULL;
- t = jtag_all_taps();
- /* try name first */
- while(t){
- if( 0 == strcmp( t->dotted_name, s ) ){
- break;
- } else {
- t = t->next_tap;
- }
- }
- /* backup plan is by number */
- if( t == NULL ){
- /* ok - is "s" a number? */
- int n;
- n = strtol( s, &cp, 0 );
- if( (s != cp) && (*cp == 0) ){
- /* Then it is... */
- t = jtag_tap_by_abs_position(n);
- }
- }
- return t;
+ return jtag_tap_by_position(n);
}
-jtag_tap_t * jtag_tap_by_jim_obj( Jim_Interp *interp, Jim_Obj *o )
+jtag_tap_t *jtag_tap_by_jim_obj(Jim_Interp *interp, Jim_Obj *o)
{
- jtag_tap_t *t;
- const char *cp;
-
- cp = Jim_GetString( o, NULL );
- if(cp == NULL){
+ const char *cp = Jim_GetString(o, NULL);
+ jtag_tap_t *t = cp ? jtag_tap_by_string(cp) : NULL;
+ if (NULL == cp)
cp = "(unknown)";
- t = NULL;
- } else {
- t = jtag_tap_by_string( cp );
- }
- if( t == NULL ){
- Jim_SetResult_sprintf(interp,"Tap: %s is unknown", cp );
- }
+ if (NULL == t)
+ Jim_SetResult_sprintf(interp, "Tap '%s' could not be found", cp);
return t;
}
/* returns a pointer to the n-th device in the scan chain */
-jtag_tap_t * jtag_tap_by_abs_position( int n )
+jtag_tap_t *jtag_tap_by_position(unsigned n)
{
- int orig_n;
- jtag_tap_t *t;
-
- orig_n = n;
- t = jtag_all_taps();
+ jtag_tap_t *t = jtag_all_taps();
- while( t && (n > 0)) {
- n--;
+ while (t && n-- > 0)
t = t->next_tap;
- }
+
return t;
}
}
-/**
- * Generate an IR SCAN with a list of scan fields with one entry for each enabled TAP.
- *
- * If the input field list contains an instruction value for a TAP then that is used
- * otherwise the TAP is set to bypass.
- *
- * TAPs for which no fields are passed are marked as bypassed for subsequent DR SCANs.
- *
- */
void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t state)
{
if (jtag_verify&&jtag_verify_capture_ir)
}
}
-/**
- * Duplicate the scan fields passed into the function into an IR SCAN command
- *
- * This function assumes that the caller handles extra fields for bypassed TAPs
- *
- */
void jtag_add_plain_ir_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{
}
-/**
- * Generate a DR SCAN using the fields passed to the function.
- * For connected TAPs, the function checks in_fields and uses fields
- * specified there. For bypassed TAPs, the function generates a dummy
- * 1-bit field. The bypass status of TAPs is set by jtag_add_ir_scan().
- */
void jtag_add_dr_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{
jtag_set_error(retval);
}
-/**
- * Duplicate the scan fields passed into the function into a DR SCAN
- * command. Unlike jtag_add_dr_scan(), this function assumes that the
- * caller handles extra fields for bypassed TAPs.
- */
void jtag_add_plain_dr_scan(int in_num_fields, const scan_field_t *in_fields,
tap_state_t state)
{