#include "config.h"
#endif
-
-#include "log.h"
-#include "jtag.h"
+#define INCLUDE_JTAG_INTERFACE_H
+#include "embeddedice.h"
+#include "minidriver.h"
#include "bitbang.h"
-#include "../target/embeddedice.h"
-
#include <cyg/hal/hal_io.h> // low level i/o
#include <cyg/hal/hal_diag.h>
-#include <stdlib.h>
-#define ZYLIN_VERSION "1.51"
+#define ZYLIN_VERSION "1.52"
#define ZYLIN_DATE __DATE__
#define ZYLIN_TIME __TIME__
#define ZYLIN_OPENOCD "$Revision$"
-
int interface_jtag_execute_queue(void)
{
cyg_uint32 empty;
setCurrentState(cmd_queue_end_state);
}
-static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, int pause)
+static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_t shiftState, tap_state_t end_state)
{
int i;
int j;
{
k=32;
/* we have more to shift out */
- } else if (pause&&(i == num_fields-1))
+ } else if (i == num_fields-1)
{
/* this was the last to shift out this time */
- pause_state=(shiftState==TAP_DRSHIFT)?TAP_DRPAUSE:TAP_IRPAUSE;
+ pause_state=end_state;
}
// we have (num_bits+7)/8 bytes of bits to toggle out.
}
-int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
{
int j;
for(tap = jtag_NextEnabledTap(NULL); tap!= NULL; tap=nextTap)
{
nextTap=jtag_NextEnabledTap(tap);
- int pause=(nextTap==NULL);
+ tap_state_t end_state;
+ if (nextTap==NULL)
+ {
+ end_state = cmd_queue_end_state;
+ } else
+ {
+ end_state = TAP_IRSHIFT;
+ }
int found = 0;
{
found = 1;
- scanFields(1, fields+j, TAP_IRSHIFT, pause);
+ scanFields(1, fields+j, TAP_IRSHIFT, end_state);
/* update device information */
buf_cpy(fields[j].out_value, tap->cur_instr, scan_size);
memset(&tmp, 0, sizeof(tmp));
tmp.out_value = ones;
tmp.num_bits = scan_size;
- scanFields(1, &tmp, TAP_IRSHIFT, pause);
+ scanFields(1, &tmp, TAP_IRSHIFT, end_state);
/* update device information */
buf_cpy(tmp.out_value, tap->cur_instr, scan_size);
tap->bypass = 1;
}
}
- gotoEndState();
return ERROR_OK;
}
-int interface_jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
{
- scanFields(num_fields, fields, TAP_IRSHIFT, 1);
- gotoEndState();
+ scanFields(num_fields, fields, TAP_IRSHIFT, cmd_queue_end_state);
return ERROR_OK;
}
/*extern jtag_command_t **jtag_get_last_command_p(void);*/
-int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
{
int j;
{
nextTap=jtag_NextEnabledTap(tap);
int found=0;
- int pause=(nextTap==NULL);
+ tap_state_t end_state;
+ if (nextTap==NULL)
+ {
+ end_state = cmd_queue_end_state;
+ } else
+ {
+ end_state = TAP_DRSHIFT;
+ }
for (j=0; j < num_fields; j++)
{
{
found = 1;
- scanFields(1, fields+j, TAP_DRSHIFT, pause);
+ scanFields(1, fields+j, TAP_DRSHIFT, end_state);
}
}
if (!found)
tmp.out_value = NULL;
tmp.in_value = NULL;
- scanFields(1, &tmp, TAP_DRSHIFT, pause);
+ scanFields(1, &tmp, TAP_DRSHIFT, end_state);
}
else
{
}
}
- gotoEndState();
return ERROR_OK;
}
-int interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
{
- scanFields(num_fields, fields, TAP_DRSHIFT, 1);
- gotoEndState();
+ scanFields(num_fields, fields, TAP_DRSHIFT, cmd_queue_end_state);
return ERROR_OK;
}
/* test manual drive code on any target */
int tms;
u8 tms_scan = tap_get_tms_path(t, state);
+ int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state());
- for (i = 0; i < 7; i++)
+ for (i = 0; i < tms_count; i++)
{
tms = (tms_scan >> i) & 1;
waitIdle();
return ERROR_OK;
}
-int interface_jtag_add_pathmove(int num_states, tap_state_t *path)
+int interface_jtag_add_pathmove(int num_states, const tap_state_t *path)
{
int state_count;
int tms = 0;