diff options
| -rw-r--r-- | src/jtag/jtag.c | 10 | ||||
| -rw-r--r-- | src/jtag/jtag.h | 22 | 
2 files changed, 30 insertions, 2 deletions
| diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index 27fe5248..d66a779d 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -718,7 +718,7 @@ static void jtag_add_scan_check(void (*jtag_add_scan)(int num_fields, scan_field  			if (fields[i].num_bits<=32)  			{  				/* This is enough space and we're executing this synchronously */ -				fields[i].in_value=(u8 *)&fields[i].intmp; +				fields[i].in_value=fields[i].intmp;  			} else  			{  				fields[i].in_value=(u8 *)malloc(CEIL(fields[i].num_bits, 8)); @@ -3562,4 +3562,12 @@ tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf,  }  #endif // _DEBUG_JTAG_IO_ +#ifndef HAVE_JTAG_MINIDRIVER_H +void jtag_alloc_in_value32(scan_field_t *field) +{ +	field->in_value=(u8 *)cmd_queue_alloc(4); +} +#endif + +  /*-----</Cable Helper API>--------------------------------------*/ diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index e2c8df47..84290ca7 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -277,7 +277,7 @@ typedef struct scan_field_s  	/* internal work space */  	int			allocated;			/* in_value has been allocated for the queue */  	int			modified;			/* did we modify the in_value? */ -	u32			intmp;				/* temporary storage for checking synchronously */ +	u8			intmp[4];			/* temporary storage for checking synchronously */  } scan_field_t;  enum scan_type { @@ -565,6 +565,26 @@ extern void jtag_add_ir_scan_noverify(int num_fields, scan_field_t *fields, tap_  extern int  interface_jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate);  extern void jtag_add_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); +/* set in_value to point to 32 bits of memory to scan into. This function + * is a way to handle the case of synchronous and asynchronous + * JTAG queues. + * + * In the event of an asynchronous queue execution the queue buffer + * allocation method is used, for the synchronous case the temporary 32 bits come + * from the input field itself. + */ + +#ifndef HAVE_JTAG_MINIDRIVER_H +extern void jtag_alloc_in_value32(scan_field_t *field); +#else +static __inline__ void jtag_alloc_in_value32(scan_field_t *field) +{ +	field->in_value=field->intmp; +} +#endif + + +  /* This version of jtag_add_dr_scan() uses the check_value/mask fields */  extern void jtag_add_dr_scan_check(int num_fields, scan_field_t* fields, tap_state_t endstate);  extern int  interface_jtag_add_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); | 
