/***************************************************************************
- * Copyright (C) 2007-2008 by Øyvind Harboe *
+ * Copyright (C) 2007-2008 by Øyvind Harboe *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#include "embeddedice.h"
#include "minidriver.h"
#include "interface.h"
+#include "zy1000_version.h"
#include <cyg/hal/hal_io.h> // low level i/o
#include <cyg/hal/hal_diag.h>
-
-#define ZYLIN_VERSION "1.52"
+#define ZYLIN_VERSION GIT_ZY1000_VERSION
#define ZYLIN_DATE __DATE__
#define ZYLIN_TIME __TIME__
-#define ZYLIN_OPENOCD "$Revision$"
-#define ZYLIN_OPENOCD_VERSION "Zylin JTAG ZY1000 " ZYLIN_VERSION " " ZYLIN_DATE " " ZYLIN_TIME
+#define ZYLIN_OPENOCD GIT_OPENOCD_VERSION
+#define ZYLIN_OPENOCD_VERSION "ZY1000 " ZYLIN_VERSION " " ZYLIN_DATE
/* low level command set
*/
int zy1000_speed(int speed);
-int zy1000_register_commands(struct command_context_s *cmd_ctx);
+int zy1000_register_commands(struct command_context *cmd_ctx);
int zy1000_init(void);
int zy1000_quit(void);
/* interface commands */
-int zy1000_handle_zy1000_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
+int zy1000_handle_zy1000_port_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc);
static int zy1000_khz(int khz, int *jtag_speed)
{
}
-jtag_interface_t zy1000_interface =
+struct jtag_interface zy1000_interface =
{
.name = "ZY1000",
.execute_queue = NULL,
}
}
-int handle_power_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+int handle_power_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc)
{
if (argc > 1)
{
const char *str = Jim_GetString(argv[1], NULL);
if (strcmp("openocd", str) == 0)
{
- int revision;
- revision = atol(ZYLIN_OPENOCD + strlen("XRevision: "));
- sprintf(buff, "%d", revision);
- version_str = buff;
+ version_str = ZYLIN_OPENOCD;
}
else if (strcmp("zy1000", str) == 0)
{
{
version_str = ZYLIN_DATE;
}
+ else if (strcmp("time", str) == 0)
+ {
+ version_str = ZYLIN_TIME;
+ }
else if (strcmp("pcb", str) == 0)
{
#ifdef CYGPKG_HAL_NIOS2
return JIM_OK;
}
-int zy1000_register_commands(struct command_context_s *cmd_ctx)
+int zy1000_register_commands(struct command_context *cmd_ctx)
{
register_command(cmd_ctx, NULL, "power", handle_power_command, COMMAND_ANY,
"power <on/off> - turn power switch to target on/off. No arguments - print status.");
extern int jtag_check_value(uint8_t *captured, void *priv);
-static __inline void scanFields(int num_fields, const scan_field_t *fields, tap_state_t shiftState, tap_state_t end_state)
+static void gotoEndState(tap_state_t end_state)
+{
+ setCurrentState(end_state);
+}
+
+static __inline void scanFields(int num_fields, const struct scan_field *fields, tap_state_t shiftState, int pause)
{
int i;
int j;
{
k = 32;
/* we have more to shift out */
- } else if (i == num_fields-1)
+ } else if (pause&&(i == num_fields-1))
{
/* this was the last to shift out this time */
- pause_state = end_state;
+ pause_state = (shiftState==TAP_DRSHIFT)?TAP_DRPAUSE:TAP_IRPAUSE;
}
// we have (num_bits + 7)/8 bytes of bits to toggle out.
}
}
-int interface_jtag_set_end_state(tap_state_t state)
-{
- return ERROR_OK;
-}
-
-
-int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_ir_scan(int num_fields, const struct scan_field *fields, tap_state_t state)
{
int j;
int scan_size = 0;
- jtag_tap_t *tap, *nextTap;
+ struct jtag_tap *tap, *nextTap;
for (tap = jtag_tap_next_enabled(NULL); tap!= NULL; tap = nextTap)
{
nextTap = jtag_tap_next_enabled(tap);
- tap_state_t end_state;
- if (nextTap == NULL)
- {
- end_state = state;
- } else
- {
- end_state = TAP_IRSHIFT;
- }
+ int pause = (nextTap==NULL);
int found = 0;
{
found = 1;
- scanFields(1, fields + j, TAP_IRSHIFT, end_state);
+ scanFields(1, fields + j, TAP_IRSHIFT, pause);
/* update device information */
buf_cpy(fields[j].out_value, tap->cur_instr, scan_size);
/* if a device isn't listed, set it to BYPASS */
uint8_t ones[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
- scan_field_t tmp;
+ struct scan_field tmp;
memset(&tmp, 0, sizeof(tmp));
tmp.out_value = ones;
tmp.num_bits = scan_size;
- scanFields(1, &tmp, TAP_IRSHIFT, end_state);
+ scanFields(1, &tmp, TAP_IRSHIFT, pause);
/* update device information */
buf_cpy(tmp.out_value, tap->cur_instr, scan_size);
tap->bypass = 1;
}
}
+ gotoEndState(state);
return ERROR_OK;
}
-int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_plain_ir_scan(int num_fields, const struct scan_field *fields, tap_state_t state)
{
- scanFields(num_fields, fields, TAP_IRSHIFT, state);
+ scanFields(num_fields, fields, TAP_IRSHIFT, 1);
+ gotoEndState(state);
return ERROR_OK;
}
/*extern jtag_command_t **jtag_get_last_command_p(void);*/
-int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_dr_scan(int num_fields, const struct scan_field *fields, tap_state_t state)
{
int j;
- jtag_tap_t *tap, *nextTap;
+ struct jtag_tap *tap, *nextTap;
for (tap = jtag_tap_next_enabled(NULL); tap!= NULL; tap = nextTap)
{
nextTap = jtag_tap_next_enabled(tap);
int found = 0;
- tap_state_t end_state;
- if (nextTap == NULL)
- {
- end_state = state;
- } else
- {
- end_state = TAP_DRSHIFT;
- }
+ int pause = (nextTap==NULL);
for (j = 0; j < num_fields; j++)
{
{
found = 1;
- scanFields(1, fields + j, TAP_DRSHIFT, end_state);
+ scanFields(1, fields+j, TAP_DRSHIFT, pause);
}
}
if (!found)
{
- scan_field_t tmp;
+ struct scan_field tmp;
/* program the scan field to 1 bit length, and ignore it's value */
tmp.num_bits = 1;
tmp.out_value = NULL;
tmp.in_value = NULL;
- scanFields(1, &tmp, TAP_DRSHIFT, end_state);
+ scanFields(1, &tmp, TAP_DRSHIFT, pause);
}
else
{
}
}
+ gotoEndState(state);
return ERROR_OK;
}
-int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)
+int interface_jtag_add_plain_dr_scan(int num_fields, const struct scan_field *fields, tap_state_t state)
{
- scanFields(num_fields, fields, TAP_DRSHIFT, state);
+ scanFields(num_fields, fields, TAP_DRSHIFT, 1);
+ gotoEndState(state);
return ERROR_OK;
}
-extern int jtag_nsrst_delay;
-extern int jtag_ntrst_delay;
-
int interface_jtag_add_reset(int req_trst, int req_srst)
{
zy1000_reset(req_trst, req_srst);
-void embeddedice_write_dcc(jtag_tap_t *tap, int reg_addr, uint8_t *buffer, int little, int count)
+void embeddedice_write_dcc(struct jtag_tap *tap, int reg_addr, uint8_t *buffer, int little, int count)
{
// static int const reg_addr = 0x5;
tap_state_t end_state = jtag_get_end_state();