AS_HELP_STRING([--enable-ecosboard], [Enable building support for eCosBoard based JTAG debugger]),
[build_ecosboard=$enableval], [build_ecosboard=no])
+AC_ARG_ENABLE(minidummy,
+ AS_HELP_STRING([--enable-minidummy], [Enable building support for minidummy driver]),
+ [build_minidummy=$enableval], [build_minidummy=no])
+
AC_ARG_ENABLE(ioutil,
AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]),
[build_ioutil=$enableval], [build_ioutil=no])
AC_DEFINE(BUILD_ECOSBOARD, 0, [0 if you don't want eCosBoard.])
fi
+if test $build_minidummy = yes; then
+ AC_DEFINE(BUILD_MINIDUMMY, 1, [1 if you want minidummy.])
+else
+ AC_DEFINE(BUILD_MINIDUMMY, 0, [0 if you don't want minidummy.])
+fi
+
if test $build_ioutil = yes; then
AC_DEFINE(BUILD_IOUTIL, 1, [1 if you want ioutils.])
else
AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes)
AM_CONDITIONAL(EP93XX, test $build_ep93xx = yes)
AM_CONDITIONAL(ECOSBOARD, test $build_ecosboard = yes)
+AM_CONDITIONAL(MINIDUMMY, test $build_minidummy = yes)
AM_CONDITIONAL(IOUTIL, test $build_ioutil = yes)
AM_CONDITIONAL(HTTPD, test $build_httpd = yes)
AM_CONDITIONAL(AT91RM9200, test $build_at91rm9200 = yes)
ECOSBOARDFILES =
endif
+if MINIDUMMY
+MINIDUMMYFILES = minidummy.c
+else
+MINIDUMMYFILES =
+endif
+
if MINIDRIVER
DRIVERFILES =
else
$(PRESTOFILES) \
$(USBPROGFILES) \
$(ECOSBOARDFILES) \
+ $(MINIDUMMYFILES) \
$(JLINKFILES) \
$(RLINKFILES) \
$(VSLLINKFILES) \
extern jtag_interface_t zy1000_interface;
#endif
+#if BUILD_MINIDUMMY == 1
+ extern jtag_interface_t minidummy_interface;
+#endif
#if BUILD_PARPORT == 1
extern jtag_interface_t parport_interface;
#endif
#if BUILD_ECOSBOARD == 1
&zy1000_interface,
#endif
+#if BUILD_MINIDUMMY == 1
+ &minidummy_interface,
+#endif
#if BUILD_PARPORT == 1
&parport_interface,
#endif
int jtag_tap_count(void)
{
return jtag_num_taps;
-}
+ }
unsigned jtag_tap_count_enabled(void)
{
tap->dotted_name, tap->expected_ids[ii]);
}
return false;
-}
+ }
/* Try to examine chain layout according to IEEE 1149.1 §12
*/
static int jtag_examine_chain(void)
-{
+ {
u8 idcode_buffer[JTAG_MAX_CHAIN_SIZE * 4];
unsigned device_count = 0;
{
/* LSB must not be 0, this indicates a device in bypass */
LOG_WARNING("Tap/Device does not have IDCODE");
- idcode = 0;
+ idcode=0;
bit_count += 1;
}
* End of chain (invalid manufacturer ID) some devices, such
* as AVR will output all 1's instead of TDI input value at
* end of chain.
- */
+ */
if (jtag_idcode_is_final(idcode))
- {
+ {
jtag_examine_chain_end(idcode_buffer,
bit_count + 32, JTAG_MAX_CHAIN_SIZE * 32);
break;
if (!tap)
continue;
- tap->idcode = idcode;
+ tap->idcode = idcode;
// ensure the TAP ID does matches what was expected
if (!jtag_examine_chain_match_tap(tap))
return ERROR_OK;
}
- Jim_SetResult_sprintf(goi->interp,
- "newtap: %s missing required parameters",
- pTap->dotted_name);
+ Jim_SetResult_sprintf( goi->interp,
+ "newtap: %s missing required parameters",
+ pTap->dotted_name);
jtag_tap_free(pTap);
- return JIM_ERR;
-}
+ return JIM_ERR;
+ }
static int jim_jtag_command( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
{
return ERROR_OK;
}
-
static int handle_jtag_speed_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
int retval=ERROR_OK;
tap_state_t state = tap_state_by_name(args[0]);
if (state < 0)
{
- command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
- return ERROR_COMMAND_SYNTAX_ERROR;
- }
- jtag_set_end_state(state);
- jtag_execute_queue();
+ command_print( cmd_ctx, "Invalid state name: %s\n", args[0] );
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+ jtag_set_end_state(state);
+ jtag_execute_queue();
command_print(cmd_ctx, "current endstate: %s",
tap_state_name(cmd_queue_end_state));
jtag_set_verify(false);
else
return ERROR_COMMAND_SYNTAX_ERROR;
- }
+ }
const char *status = jtag_will_verify() ? "enabled": "disabled";
command_print(cmd_ctx, "verify jtag capture is %s", status);
--- /dev/null
+/***************************************************************************\r
+ * Copyright (C) 2007-2008 by Øyvind Harboe *\r
+ * *\r
+ * This program is free software; you can redistribute it and/or modify *\r
+ * it under the terms of the GNU General Public License as published by *\r
+ * the Free Software Foundation; either version 2 of the License, or *\r
+ * (at your option) any later version. *\r
+ * *\r
+ * This program is distributed in the hope that it will be useful, *\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *\r
+ * GNU General Public License for more details. *\r
+ * *\r
+ * You should have received a copy of the GNU General Public License *\r
+ * along with this program; if not, write to the *\r
+ * Free Software Foundation, Inc., *\r
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *\r
+ ***************************************************************************/\r
+#ifdef HAVE_CONFIG_H\r
+#include "config.h"\r
+#endif\r
+\r
+#include "embeddedice.h"\r
+#include "minidriver.h"\r
+#include "interface.h"\r
+\r
+\r
+\r
+\r
+jtag_interface_t minidummy_interface =\r
+{\r
+ .name = "minidummy",\r
+ .execute_queue = NULL,\r
+ .speed = NULL,\r
+ .register_commands = NULL,\r
+ .init = NULL,\r
+ .quit = NULL,\r
+ .khz = NULL,\r
+ .speed_div = NULL,\r
+ .power_dropout = NULL,\r
+ .srst_asserted = NULL,\r
+};\r
+\r
+\r
+\r
+\r
+\r
+\r
+int interface_jtag_execute_queue(void)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+extern int jtag_check_value(u8 *captured, void *priv);\r
+\r
+int interface_jtag_set_end_state(tap_state_t state)\r
+{\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+\r
+}\r
+\r
+\r
+\r
+\r
+\r
+int interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+/*extern jtag_command_t **jtag_get_last_command_p(void);*/\r
+\r
+int interface_jtag_add_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t *fields, tap_state_t state)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_tlr()\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+int interface_jtag_add_reset(int req_trst, int req_srst)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+int interface_jtag_add_runtest(int num_cycles, tap_state_t state)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_clocks(int num_cycles)\r
+{\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_sleep(u32 us)\r
+{\r
+ jtag_sleep(us);\r
+ return ERROR_OK;\r
+}\r
+\r
+int interface_jtag_add_pathmove(int num_states, const tap_state_t *path)\r
+{\r
+ int state_count;\r
+ int tms = 0;\r
+\r
+ state_count = 0;\r
+\r
+ tap_state_t cur_state=cmd_queue_cur_state;\r
+\r
+ while (num_states)\r
+ {\r
+ if (tap_state_transition(cur_state, false) == path[state_count])\r
+ {\r
+ tms = 0;\r
+ }\r
+ else if (tap_state_transition(cur_state, true) == path[state_count])\r
+ {\r
+ tms = 1;\r
+ }\r
+ else\r
+ {\r
+ LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name(cur_state), tap_state_name(path[state_count]));\r
+ exit(-1);\r
+ }\r
+\r
+ /* synchronously do the operation here */\r
+\r
+ cur_state = path[state_count];\r
+ state_count++;\r
+ num_states--;\r
+ }\r
+\r
+\r
+ /* synchronously do the operation here */\r
+\r
+ return ERROR_OK;\r
+}\r
+\r
+\r
+\r
+void embeddedice_write_dcc(jtag_tap_t *tap, int reg_addr, u8 *buffer, int little, int count)\r
+{\r
+ int i;\r
+ for (i = 0; i < count; i++)\r
+ {\r
+ embeddedice_write_reg_inner(tap, reg_addr, fast_target_buffer_get_u32(buffer, little));\r
+ buffer += 4;\r
+ }\r
+}\r
+\r
--- /dev/null
+/***************************************************************************\r
+ * Copyright (C) 2007-2008 by Øyvind Harboe *\r
+ * *\r
+ * This program is free software; you can redistribute it and/or modify *\r
+ * it under the terms of the GNU General Public License as published by *\r
+ * the Free Software Foundation; either version 2 of the License, or *\r
+ * (at your option) any later version. *\r
+ * *\r
+ * This program is distributed in the hope that it will be useful, *\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *\r
+ * GNU General Public License for more details. *\r
+ * *\r
+ * You should have received a copy of the GNU General Public License *\r
+ * along with this program; if not, write to the *\r
+ * Free Software Foundation, Inc., *\r
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *\r
+ ***************************************************************************/\r
+\r
+\r
+\r
+\r
+static __inline__ void interface_jtag_add_dr_out_core(jtag_tap_t *target_tap,\r
+ int num_fields,\r
+ const int *num_bits,\r
+ const u32 *value,\r
+ enum tap_state end_state)\r
+{\r
+ /* synchronously do the operation here */\r
+}\r
+\r
+static __inline__ void interface_jtag_add_dr_out(jtag_tap_t *target_tap,\r
+ int num_fields,\r
+ const int *num_bits,\r
+ const u32 *value,\r
+ enum tap_state end_state)\r
+{\r
+ /* synchronously do the operation here */\r
+}\r
+\r
+#define interface_jtag_add_callback(callback, in) callback(in)\r
+\r
+#define interface_jtag_add_callback4(callback, in, data1, data2, data3) jtag_set_error(callback(in, data1, data2, data3))\r