X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fzy1000.c;h=73a40f2ed8c5910b1ec3efd0f11cb1d6e7230100;hb=a5467296097cc0a820da3aad65dcd9de196fc1be;hp=69c1ef0ab142a80347d11c372bdfbc1bf2dc82a8;hpb=39363e4e013d832a75ce159e4b547fd6e0808074;p=openocd.git diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c index 69c1ef0ab1..73a40f2ed8 100644 --- a/src/jtag/zy1000.c +++ b/src/jtag/zy1000.c @@ -20,27 +20,22 @@ #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 // low level i/o #include -#include -#define ZYLIN_VERSION "1.51" +#define ZYLIN_VERSION "1.52" #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 const char *zylin_config_dir="/config/settings"; -extern int jtag_error; - /* low level command set */ int zy1000_read(void); @@ -285,37 +280,43 @@ int handle_power_command(struct command_context_s *cmd_ctx, char *cmd, char **ar /* Give TELNET a way to find out what version this is */ -int handle_zy1000_version_command(struct command_context_s *cmd_ctx, char *cmd, - char **args, int argc) +static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - if (argc > 1) - { - return ERROR_COMMAND_SYNTAX_ERROR; - } - if (argc == 0) - { - command_print(cmd_ctx, ZYLIN_OPENOCD_VERSION); - } - else if (strcmp("openocd", args[0]) == 0) - { - int revision; - revision = atol(ZYLIN_OPENOCD+strlen("XRevision: ")); - command_print(cmd_ctx, "%d", revision); - } - else if (strcmp("zy1000", args[0]) == 0) - { - command_print(cmd_ctx, "%s", ZYLIN_VERSION); - } - else if (strcmp("date", args[0]) == 0) + if ((argc < 1) || (argc > 2)) + return JIM_ERR; + char buff[128]; + const char *version_str=NULL; + + if (argc == 1) { - command_print(cmd_ctx, "%s", ZYLIN_DATE); - } - else + version_str=ZYLIN_OPENOCD_VERSION; + } else { - return ERROR_COMMAND_SYNTAX_ERROR; + 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; + } + else if (strcmp("zy1000", str) == 0) + { + version_str=ZYLIN_VERSION; + } + else if (strcmp("date", str) == 0) + { + version_str=ZYLIN_DATE; + } + else + { + return JIM_ERR; + } } - return ERROR_OK; + Jim_SetResult(interp, Jim_NewStringObj(interp, version_str, -1)); + + return JIM_OK; } @@ -342,8 +343,9 @@ int zy1000_register_commands(struct command_context_s *cmd_ctx) { register_command(cmd_ctx, NULL, "power", handle_power_command, COMMAND_ANY, "power - turn power switch to target on/off. No arguments - print status."); - register_command(cmd_ctx, NULL, "zy1000_version", handle_zy1000_version_command, - COMMAND_EXEC, "show zy1000 version numbers"); + + Jim_CreateCommand(interp, "zy1000_version", jim_zy1000_version, NULL, NULL); + Jim_CreateCommand(interp, "powerstatus", zylinjtag_Jim_Command_powerstatus, NULL, NULL); @@ -379,7 +381,6 @@ int zy1000_quit(void) - int interface_jtag_execute_queue(void) { cyg_uint32 empty; @@ -443,7 +444,7 @@ static void gotoEndState(void) 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; @@ -463,24 +464,6 @@ static __inline void scanFields(int num_fields, scan_field_t *fields, tap_state_ if (fields[i].in_value!=NULL) { inBuffer=fields[i].in_value; - } else if (fields[i].in_handler!=NULL) - { - if (in_buff_size*8expected, tap->expected_mask, NULL); - } else if (jtag_verify_capture_ir) - { - fields[j].in_check_value = tap->expected; - fields[j].in_check_mask = tap->expected_mask; - } - - 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); @@ -599,13 +569,12 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t 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; } @@ -614,17 +583,16 @@ int interface_jtag_add_ir_scan(int num_fields, scan_field_t *fields, tap_state_t -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; @@ -633,7 +601,14 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { 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++) { @@ -641,7 +616,7 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t { found = 1; - scanFields(1, fields+j, TAP_DRSHIFT, pause); + scanFields(1, fields+j, TAP_DRSHIFT, end_state); } } if (!found) @@ -650,27 +625,20 @@ int interface_jtag_add_dr_scan(int num_fields, scan_field_t *fields, tap_state_t /* program the scan field to 1 bit length, and ignore it's value */ tmp.num_bits = 1; tmp.out_value = NULL; - tmp.out_mask = NULL; tmp.in_value = NULL; - tmp.in_check_value = NULL; - tmp.in_check_mask = NULL; - tmp.in_handler = NULL; - tmp.in_handler_priv = 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; } @@ -719,8 +687,9 @@ static int zy1000_jtag_add_clocks(int num_cycles, tap_state_t state, tap_state_t /* 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(); @@ -750,7 +719,7 @@ int interface_jtag_add_sleep(u32 us) 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;