This is an automated email from Gerrit. Evan Hunter ([email protected]) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/946
-- gerrit commit 64a8055da4ceb9e312f34171495fd6f98a37c63e Author: Evan Hunter <[email protected]> Date: Wed Oct 31 12:19:27 2012 +1100 jtag: Start moving jtag transport to separate driver To allow other transports such as SWD Signed-off-by: Evan Hunter <[email protected]> Change-Id: Iad7d9e627b659a1b5f2298ef3b88aadf626411b0 diff --git a/src/jtag/core.c b/src/jtag/core.c index 0bb18dd..d577618 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -505,7 +505,7 @@ int jtag_add_tms_seq(unsigned nbits, const uint8_t *seq, enum tap_state state) { int retval; - if (!(current_adapter_driver->supported & DEBUG_CAP_TMS_SEQ)) + if (!(current_adapter_driver->jtag.supported & DEBUG_CAP_TMS_SEQ)) return ERROR_JTAG_NOT_IMPLEMENTED; jtag_checks(); @@ -832,7 +832,7 @@ int default_interface_jtag_execute_queue(void) return ERROR_FAIL; } - return current_adapter_driver->execute_queue(jtag_command_queue_get()); + return current_adapter_driver->jtag.execute_queue(jtag_command_queue_get()); } void jtag_execute_queue_noclear(void) @@ -1601,8 +1601,8 @@ static int adapter_khz_to_speed(unsigned khz, int *speed) LOG_DEBUG("have interface set up"); int speed_div1; int retval; - if (current_adapter_driver->khz != NULL) - retval = current_adapter_driver->khz(jtag_get_speed_khz(), &speed_div1); + if (current_adapter_driver->jtag.khz != NULL) + retval = current_adapter_driver->jtag.khz(jtag_get_speed_khz(), &speed_div1); else retval = default_khz(jtag_get_speed_khz(), &speed_div1); @@ -1675,8 +1675,8 @@ int jtag_get_speed_readable(int *khz) if (!adapter_inited) return ERROR_OK; - if (current_adapter_driver->speed_div != NULL) - return current_adapter_driver->speed_div(jtag_speed_var, khz); + if (current_adapter_driver->jtag.speed_div != NULL) + return current_adapter_driver->jtag.speed_div(jtag_speed_var, khz); else return default_speed_div(jtag_speed_var, khz); } diff --git a/src/jtag/drivers/amt_jtagaccel.c b/src/jtag/drivers/amt_jtagaccel.c index 574fbe2..4d91851 100644 --- a/src/jtag/drivers/amt_jtagaccel.c +++ b/src/jtag/drivers/amt_jtagaccel.c @@ -600,5 +600,5 @@ const struct adapter_driver amt_jtagaccel_driver = { .init = amt_jtagaccel_init, .quit = amt_jtagaccel_quit, .speed = amt_jtagaccel_speed, - .execute_queue = amt_jtagaccel_execute_queue, + .jtag.execute_queue = amt_jtagaccel_execute_queue, }; diff --git a/src/jtag/drivers/arm-jtag-ew.c b/src/jtag/drivers/arm-jtag-ew.c index a438591..ba23221 100644 --- a/src/jtag/drivers/arm-jtag-ew.c +++ b/src/jtag/drivers/arm-jtag-ew.c @@ -497,10 +497,10 @@ const struct adapter_driver armjtagew_driver = { .name = "arm-jtag-ew", .commands = armjtagew_command_handlers, .transports = jtag_only, - .execute_queue = armjtagew_execute_queue, + .jtag.execute_queue = armjtagew_execute_queue, .speed = armjtagew_speed, - .speed_div = armjtagew_speed_div, - .khz = armjtagew_khz, + .jtag.speed_div = armjtagew_speed_div, + .jtag.khz = armjtagew_khz, .init = armjtagew_init, .quit = armjtagew_quit, }; diff --git a/src/jtag/drivers/at91rm9200.c b/src/jtag/drivers/at91rm9200.c index a7bf3d9..c3a1e62 100644 --- a/src/jtag/drivers/at91rm9200.c +++ b/src/jtag/drivers/at91rm9200.c @@ -195,7 +195,7 @@ static const struct command_registration at91rm9200_command_handlers[] = { const struct adapter_driver at91rm9200_driver = { .name = "at91rm9200", - .execute_queue = bitbang_execute_queue, + .jtag.execute_queue = bitbang_execute_queue, .speed = at91rm9200_speed, .commands = at91rm9200_command_handlers, .init = at91rm9200_init, diff --git a/src/jtag/drivers/buspirate.c b/src/jtag/drivers/buspirate.c index 2c4e653..c94c0d7 100644 --- a/src/jtag/drivers/buspirate.c +++ b/src/jtag/drivers/buspirate.c @@ -425,9 +425,9 @@ static const struct command_registration buspirate_command_handlers[] = { const struct adapter_driver buspirate_driver = { .name = "buspirate", - .execute_queue = buspirate_execute_queue, + .jtag.execute_queue = buspirate_execute_queue, .speed = buspirate_speed, - .khz = buspirate_khz, + .jtag.khz = buspirate_khz, .commands = buspirate_command_handlers, .init = buspirate_init, .quit = buspirate_quit diff --git a/src/jtag/drivers/dummy.c b/src/jtag/drivers/dummy.c index d69fbfb..aab55ff 100644 --- a/src/jtag/drivers/dummy.c +++ b/src/jtag/drivers/dummy.c @@ -147,15 +147,15 @@ static const struct command_registration dummy_command_handlers[] = { const struct adapter_driver dummy_driver = { .name = "dummy", - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, .commands = dummy_command_handlers, .transports = jtag_only, - .execute_queue = &bitbang_execute_queue, + .jtag.execute_queue = &bitbang_execute_queue, .speed = &dummy_speed, - .khz = &dummy_khz, - .speed_div = &dummy_speed_div, + .jtag.khz = &dummy_khz, + .jtag.speed_div = &dummy_speed_div, .init = &dummy_init, .quit = &dummy_quit, diff --git a/src/jtag/drivers/ep93xx.c b/src/jtag/drivers/ep93xx.c index 52a3478..eee7785 100644 --- a/src/jtag/drivers/ep93xx.c +++ b/src/jtag/drivers/ep93xx.c @@ -56,8 +56,8 @@ struct timespec ep93xx_zzzz; const struct adapter_driver ep93xx_driver = { .name = "ep93xx", - .supported = DEBUG_CAP_TMS_SEQ, - .execute_queue = bitbang_execute_queue, + .jtag.supported = DEBUG_CAP_TMS_SEQ, + .jtag.execute_queue = bitbang_execute_queue, .speed = ep93xx_speed, .init = ep93xx_init, diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c index e0ec9e2..6467441 100644 --- a/src/jtag/drivers/ft2232.c +++ b/src/jtag/drivers/ft2232.c @@ -4263,14 +4263,14 @@ static const struct command_registration ft2232_command_handlers[] = { const struct adapter_driver ft2232_driver = { .name = "ft2232", - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, .commands = ft2232_command_handlers, .transports = jtag_only, .init = ft2232_init, .quit = ft2232_quit, .speed = ft2232_speed, - .speed_div = ft2232_speed_div, - .khz = ft2232_khz, - .execute_queue = ft2232_execute_queue, + .jtag.speed_div = ft2232_speed_div, + .jtag.khz = ft2232_khz, + .jtag.execute_queue = ft2232_execute_queue, }; diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index 347a410..8ff629b 100644 --- a/src/jtag/drivers/ftdi.c +++ b/src/jtag/drivers/ftdi.c @@ -872,14 +872,14 @@ static const struct command_registration ftdi_command_handlers[] = { const struct adapter_driver ftdi_driver = { .name = "ftdi", - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, .commands = ftdi_command_handlers, .transports = jtag_only, .init = ftdi_initialize, .quit = ftdi_quit, .speed = ftdi_speed, - .speed_div = ftdi_speed_div, - .khz = ftdi_khz, - .execute_queue = ftdi_execute_queue, + .jtag.speed_div = ftdi_speed_div, + .jtag.khz = ftdi_khz, + .jtag.execute_queue = ftdi_execute_queue, }; diff --git a/src/jtag/drivers/gw16012.c b/src/jtag/drivers/gw16012.c index 8418b97..950404e 100644 --- a/src/jtag/drivers/gw16012.c +++ b/src/jtag/drivers/gw16012.c @@ -548,5 +548,5 @@ const struct adapter_driver gw16012_driver = { .init = gw16012_init, .quit = gw16012_quit, .speed = gw16012_speed, - .execute_queue = gw16012_execute_queue, + .jtag.execute_queue = gw16012_execute_queue, }; diff --git a/src/jtag/drivers/jlink.c b/src/jtag/drivers/jlink.c index 39c3f60..997d48a 100644 --- a/src/jtag/drivers/jlink.c +++ b/src/jtag/drivers/jlink.c @@ -1300,10 +1300,10 @@ const struct adapter_driver jlink_driver = { .commands = jlink_command_handlers, .transports = jtag_only, - .execute_queue = jlink_execute_queue, + .jtag.execute_queue = jlink_execute_queue, .speed = jlink_speed, - .speed_div = jlink_speed_div, - .khz = jlink_khz, + .jtag.speed_div = jlink_speed_div, + .jtag.khz = jlink_khz, .init = jlink_init, .quit = jlink_quit, }; diff --git a/src/jtag/drivers/opendous.c b/src/jtag/drivers/opendous.c index 6f07d8b..cdd2992 100644 --- a/src/jtag/drivers/opendous.c +++ b/src/jtag/drivers/opendous.c @@ -193,10 +193,10 @@ static const struct command_registration opendous_command_handlers[] = { const struct adapter_driver opendous_driver = { .name = "opendous", .commands = opendous_command_handlers, - .execute_queue = opendous_execute_queue, + .jtag.execute_queue = opendous_execute_queue, .speed = opendous_speed, - .speed_div = opendous_speed_div, - .khz = opendous_khz, + .jtag.speed_div = opendous_speed_div, + .jtag.khz = opendous_khz, .init = opendous_init, .quit = opendous_quit, }; diff --git a/src/jtag/drivers/osbdm.c b/src/jtag/drivers/osbdm.c index 0a9ed85..35c4794 100644 --- a/src/jtag/drivers/osbdm.c +++ b/src/jtag/drivers/osbdm.c @@ -711,11 +711,11 @@ const struct adapter_driver osbdm_driver = { .name = "osbdm", .transports = jtag_only, - .execute_queue = osbdm_execute_queue, + .jtag.execute_queue = osbdm_execute_queue, - .khz = osbdm_khz, + .jtag.khz = osbdm_khz, .speed = osbdm_speed, - .speed_div = osbdm_speed_div, + .jtag.speed_div = osbdm_speed_div, .init = osbdm_init, .quit = osbdm_quit diff --git a/src/jtag/drivers/parport.c b/src/jtag/drivers/parport.c index dde7385..b5ca1a0 100644 --- a/src/jtag/drivers/parport.c +++ b/src/jtag/drivers/parport.c @@ -502,13 +502,13 @@ static const struct command_registration parport_command_handlers[] = { const struct adapter_driver parport_driver = { .name = "parport", - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, .commands = parport_command_handlers, .init = parport_init, .quit = parport_quit, - .khz = parport_khz, - .speed_div = parport_speed_div, + .jtag.khz = parport_khz, + .jtag.speed_div = parport_speed_div, .speed = parport_speed, - .execute_queue = bitbang_execute_queue, + .jtag.execute_queue = bitbang_execute_queue, }; diff --git a/src/jtag/drivers/presto.c b/src/jtag/drivers/presto.c index 5a12628..d1def82 100644 --- a/src/jtag/drivers/presto.c +++ b/src/jtag/drivers/presto.c @@ -787,10 +787,10 @@ const struct adapter_driver presto_driver = { .name = "presto", .commands = presto_command_handlers, - .execute_queue = bitq_execute_queue, + .jtag.execute_queue = bitq_execute_queue, .speed = presto_jtag_speed, - .khz = presto_adapter_khz, - .speed_div = presto_jtag_speed_div, + .jtag.khz = presto_adapter_khz, + .jtag.speed_div = presto_jtag_speed_div, .init = presto_jtag_init, .quit = presto_jtag_quit, }; diff --git a/src/jtag/drivers/remote_bitbang.c b/src/jtag/drivers/remote_bitbang.c index f29da42..ade0297 100644 --- a/src/jtag/drivers/remote_bitbang.c +++ b/src/jtag/drivers/remote_bitbang.c @@ -289,11 +289,11 @@ static const struct command_registration remote_bitbang_command_handlers[] = { const struct adapter_driver remote_bitbang_driver = { .name = "remote_bitbang", - .execute_queue = &bitbang_execute_queue, + .jtag.execute_queue = &bitbang_execute_queue, .speed = &remote_bitbang_speed, .commands = remote_bitbang_command_handlers, .init = &remote_bitbang_init, .quit = &remote_bitbang_quit, - .khz = &remote_bitbang_khz, - .speed_div = &remote_bitbang_speed_div, + .jtag.khz = &remote_bitbang_khz, + .jtag.speed_div = &remote_bitbang_speed_div, }; diff --git a/src/jtag/drivers/rlink.c b/src/jtag/drivers/rlink.c index 247d8ab..dddbe7c 100644 --- a/src/jtag/drivers/rlink.c +++ b/src/jtag/drivers/rlink.c @@ -1679,7 +1679,7 @@ const struct adapter_driver rlink_driver = { .init = rlink_init, .quit = rlink_quit, .speed = rlink_speed, - .speed_div = rlink_speed_div, - .khz = rlink_khz, - .execute_queue = rlink_execute_queue, + .jtag.speed_div = rlink_speed_div, + .jtag.khz = rlink_khz, + .jtag.execute_queue = rlink_execute_queue, }; diff --git a/src/jtag/drivers/sysfsgpio.c b/src/jtag/drivers/sysfsgpio.c index 61b6080..6fd6888 100644 --- a/src/jtag/drivers/sysfsgpio.c +++ b/src/jtag/drivers/sysfsgpio.c @@ -412,12 +412,12 @@ static int sysfsgpio_quit(void); const struct adapter_driver sysfsgpio_driver = { .name = "sysfsgpio", - .supported = DEBUG_CAP_TMS_SEQ, - .execute_queue = bitbang_execute_queue, + .jtag.supported = DEBUG_CAP_TMS_SEQ, + .jtag.execute_queue = bitbang_execute_queue, .transports = jtag_only, .speed = sysfsgpio_speed, - .khz = sysfsgpio_khz, - .speed_div = sysfsgpio_speed_div, + .jtag.khz = sysfsgpio_khz, + .jtag.speed_div = sysfsgpio_speed_div, .commands = sysfsgpio_command_handlers, .init = sysfsgpio_init, .quit = sysfsgpio_quit, diff --git a/src/jtag/drivers/ulink.c b/src/jtag/drivers/ulink.c index fc85d59..ef5f9d1 100644 --- a/src/jtag/drivers/ulink.c +++ b/src/jtag/drivers/ulink.c @@ -2293,10 +2293,10 @@ const struct adapter_driver ulink_driver = { .commands = ulink_command_handlers, .transports = jtag_only, - .execute_queue = ulink_execute_queue, - .khz = ulink_khz, + .jtag.execute_queue = ulink_execute_queue, + .jtag.khz = ulink_khz, .speed = ulink_speed, - .speed_div = ulink_speed_div, + .jtag.speed_div = ulink_speed_div, .init = ulink_init, .quit = ulink_quit diff --git a/src/jtag/drivers/usb_blaster.c b/src/jtag/drivers/usb_blaster.c index 07cc577..33849b9 100644 --- a/src/jtag/drivers/usb_blaster.c +++ b/src/jtag/drivers/usb_blaster.c @@ -584,9 +584,9 @@ static const struct command_registration usb_blaster_command_handlers[] = { const struct adapter_driver usb_blaster_driver = { .name = "usb_blaster", .commands = usb_blaster_command_handlers, - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, - .execute_queue = bitbang_execute_queue, + .jtag.execute_queue = bitbang_execute_queue, .speed = usb_blaster_speed, .init = usb_blaster_init, diff --git a/src/jtag/drivers/vsllink.c b/src/jtag/drivers/vsllink.c index 3bfb4c3..09dd03e 100644 --- a/src/jtag/drivers/vsllink.c +++ b/src/jtag/drivers/vsllink.c @@ -836,14 +836,14 @@ static const char *vsllink_transports[] = {"jtag", "swd", NULL}; const struct adapter_driver vsllink_driver = { .name = "vsllink", - .supported = DEBUG_CAP_TMS_SEQ, + .jtag.supported = DEBUG_CAP_TMS_SEQ, .commands = vsllink_command_handlers, .transports = vsllink_transports, .init = vsllink_init, .quit = vsllink_quit, - .khz = vsllink_khz, + .jtag.khz = vsllink_khz, .speed = vsllink_speed, - .speed_div = vsllink_speed_div, - .execute_queue = vsllink_execute_queue, + .jtag.speed_div = vsllink_speed_div, + .jtag.execute_queue = vsllink_execute_queue, }; diff --git a/src/jtag/interface.h b/src/jtag/interface.h index ebaf6b6..5b7486d 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -184,6 +184,46 @@ static inline tap_state_t jtag_debug_state_machine(const void *tms_buf, } #endif /* _DEBUG_JTAG_IO_ */ + + +struct jtag_driver { + /** + * Bit vector listing capabilities exposed by this driver. + */ + unsigned supported; +#define DEBUG_CAP_TMS_SEQ (1 << 0) + + /** + * Execute commands in the supplied queue + * @param cmd_queue - a linked list of commands to execute + * @returns ERROR_OK on success, or an error code on failure. + */ + int (*execute_queue)(struct jtag_command *cmd_queue); + + /** + * Returns JTAG maxium speed for KHz. 0 = RTCK. The function returns + * a failure if it can't support the KHz/RTCK. + * + * WARNING!!!! if RTCK is *slow* then think carefully about + * whether you actually want to support this in the driver. + * Many target scripts are written to handle the absence of RTCK + * and use a fallback kHz TCK. + * @returns ERROR_OK on success, or an error code on failure. + */ + int (*khz)(int khz, int *jtag_speed); + + /** + * Calculate the clock frequency (in KHz) for the given @a speed. + * @param speed The desired interface speed setting. + * @param khz On return, contains the speed in KHz (0 for RTCK). + * @returns ERROR_OK on success, or an error code if the + * interface cannot support the specified speed (KHz or RTCK). + */ + int (*speed_div)(int speed, int *khz); + +}; + + /** * Represents a driver for a debugging adapter. * @@ -197,23 +237,11 @@ struct adapter_driver { /** The name of the JTAG interface driver. */ char *name; - /** - * Bit vector listing capabilities exposed by this driver. - */ - unsigned supported; -#define DEBUG_CAP_TMS_SEQ (1 << 0) - /** transports supported in C code (NULL terminated vector) */ const char **transports; const struct swd_driver *swd; - - /** - * Execute commands in the supplied queue - * @param cmd_queue - a linked list of commands to execute - * @returns ERROR_OK on success, or an error code on failure. - */ - int (*execute_queue)(struct jtag_command *cmd_queue); + const struct jtag_driver jtag; /** * Set the interface speed. @@ -249,26 +277,7 @@ struct adapter_driver { */ int (*quit)(void); - /** - * Returns JTAG maxium speed for KHz. 0 = RTCK. The function returns - * a failure if it can't support the KHz/RTCK. - * - * WARNING!!!! if RTCK is *slow* then think carefully about - * whether you actually want to support this in the driver. - * Many target scripts are written to handle the absence of RTCK - * and use a fallback kHz TCK. - * @returns ERROR_OK on success, or an error code on failure. - */ - int (*khz)(int khz, int *jtag_speed); - /** - * Calculate the clock frequency (in KHz) for the given @a speed. - * @param speed The desired interface speed setting. - * @param khz On return, contains the speed in KHz (0 for RTCK). - * @returns ERROR_OK on success, or an error code if the - * interface cannot support the specified speed (KHz or RTCK). - */ - int (*speed_div)(int speed, int *khz); /** * Read and clear the power dropout flag. Note that a power dropout diff --git a/src/jtag/minidummy/minidummy.c b/src/jtag/minidummy/minidummy.c index 6368cdc..e77ca24 100644 --- a/src/jtag/minidummy/minidummy.c +++ b/src/jtag/minidummy/minidummy.c @@ -28,13 +28,13 @@ const struct adapter_driver minidummy_driver = { .name = "minidummy", - .execute_queue = NULL, + .jtag.execute_queue = NULL, .speed = NULL, .commands = NULL, .init = NULL, .quit = NULL, - .khz = NULL, - .speed_div = NULL, + .jtag.khz = NULL, + .jtag.speed_div = NULL, .power_dropout = NULL, .srst_asserted = NULL, }; diff --git a/src/jtag/stlink/stlink_interface.c b/src/jtag/stlink/stlink_interface.c index c84b0ca..4d080fb 100644 --- a/src/jtag/stlink/stlink_interface.c +++ b/src/jtag/stlink/stlink_interface.c @@ -256,13 +256,13 @@ static const struct command_registration stlink_interface_command_handlers[] = { const struct adapter_driver stlink_driver = { .name = "stlink", - .supported = 0, + .jtag.supported = 0, .commands = stlink_interface_command_handlers, .transports = stlink_transports, .init = stlink_interface_init, .quit = stlink_interface_quit, .speed = stlink_interface_speed, - .speed_div = stlink_speed_div, - .khz = stlink_khz, - .execute_queue = stlink_interface_execute_queue, + .jtag.speed_div = stlink_speed_div, + .jtag.khz = stlink_khz, + .jtag.execute_queue = stlink_interface_execute_queue, }; diff --git a/src/jtag/zy1000/zy1000.c b/src/jtag/zy1000/zy1000.c index e761a0d..89b9026 100644 --- a/src/jtag/zy1000/zy1000.c +++ b/src/jtag/zy1000/zy1000.c @@ -1253,14 +1253,14 @@ int zy1000_init(void) const struct adapter_driver zy1000_driver = { .name = "ZY1000", - .supported = DEBUG_CAP_TMS_SEQ, - .execute_queue = NULL, + .jtag.supported = DEBUG_CAP_TMS_SEQ, + .jtag.execute_queue = NULL, .speed = zy1000_speed, .commands = zy1000_commands, .init = zy1000_init, .quit = zy1000_quit, - .khz = zy1000_khz, - .speed_div = zy1000_speed_div, + .jtag.khz = zy1000_khz, + .jtag.speed_div = zy1000_speed_div, .power_dropout = zy1000_power_dropout, .srst_asserted = zy1000_srst_asserted, }; -- ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_sfd2d_oct _______________________________________________ OpenOCD-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openocd-devel
