adapter: switch from struct jtag_interface to adapter_driver 00/4900/8
authorAntonio Borneo <borneo.antonio@gmail.com>
Tue, 22 Jan 2019 15:31:18 +0000 (16:31 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Tue, 14 Jan 2020 11:39:37 +0000 (11:39 +0000)
To reorganize the adapters code, introduce an adapter_driver
struct that contains all the adapter generic part, while
keeping in two separate struct the specific API jtag_ops and
swd_ops.
Move the allocation of *adapter_driver from the JTAG-specific
file core.c to the more adapter-specific file adapter.c
While splitting the old jtag_interface for every driver, put
the fields in the same order as in the struct declaration so
we keep a consistent code across all the drivers.

While other transport specific API could/would be added as
separate ops, nothing is done here for HLA.

Change-Id: I2d60f97ac514c0dd2d93a6ec9be66fd9d388dad5
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4900
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
39 files changed:
src/jtag/adapter.c
src/jtag/aice/aice_interface.c
src/jtag/core.c
src/jtag/drivers/amt_jtagaccel.c
src/jtag/drivers/arm-jtag-ew.c
src/jtag/drivers/at91rm9200.c
src/jtag/drivers/bcm2835gpio.c
src/jtag/drivers/buspirate.c
src/jtag/drivers/cmsis_dap_usb.c
src/jtag/drivers/dummy.c
src/jtag/drivers/ep93xx.c
src/jtag/drivers/ft232r.c
src/jtag/drivers/ftdi.c
src/jtag/drivers/gw16012.c
src/jtag/drivers/imx_gpio.c
src/jtag/drivers/jlink.c
src/jtag/drivers/jtag_vpi.c
src/jtag/drivers/kitprog.c
src/jtag/drivers/opendous.c
src/jtag/drivers/openjtag.c
src/jtag/drivers/osbdm.c
src/jtag/drivers/parport.c
src/jtag/drivers/presto.c
src/jtag/drivers/remote_bitbang.c
src/jtag/drivers/rlink.c
src/jtag/drivers/sysfsgpio.c
src/jtag/drivers/ulink.c
src/jtag/drivers/usb_blaster/usb_blaster.c
src/jtag/drivers/usbprog.c
src/jtag/drivers/vsllink.c
src/jtag/drivers/xds110.c
src/jtag/hla/hla_interface.c
src/jtag/interface.h
src/jtag/interfaces.c
src/jtag/interfaces.h
src/jtag/minidummy/minidummy.c
src/jtag/zy1000/zy1000.c
src/target/adi_v5_swd.c
src/target/arm_dap.c

index d23f79ec41f36228e18700764a17e6288c6976cb..e2782a7779d10bada5beb59d33365de0b3eae3a0 100644 (file)
@@ -46,7 +46,7 @@
  * Holds support for configuring debug adapters from TCl scripts.
  */
 
-extern struct jtag_interface *jtag_interface;
+struct adapter_driver *adapter_driver;
 const char * const jtag_only[] = { "jtag", NULL };
 
 static int jim_adapter_name(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
@@ -61,7 +61,7 @@ static int jim_adapter_name(Jim_Interp *interp, int argc, Jim_Obj * const *argv)
                Jim_WrongNumArgs(goi.interp, 1, goi.argv-1, "(no params)");
                return JIM_ERR;
        }
-       const char *name = jtag_interface ? jtag_interface->name : NULL;
+       const char *name = adapter_driver ? adapter_driver->name : NULL;
        Jim_SetResultString(goi.interp, name ? : "undefined", -1);
        return JIM_OK;
 }
@@ -91,8 +91,8 @@ COMMAND_HANDLER(handle_interface_list_command)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
        command_print(CMD, "The following debug interfaces are available:");
-       for (unsigned i = 0; NULL != jtag_interfaces[i]; i++) {
-               const char *name = jtag_interfaces[i]->name;
+       for (unsigned i = 0; NULL != adapter_drivers[i]; i++) {
+               const char *name = adapter_drivers[i]->name;
                command_print(CMD, "%u: %s", i + 1, name);
        }
 
@@ -104,7 +104,7 @@ COMMAND_HANDLER(handle_interface_command)
        int retval;
 
        /* check whether the interface is already configured */
-       if (jtag_interface) {
+       if (adapter_driver) {
                LOG_WARNING("Interface already configured, ignoring");
                return ERROR_OK;
        }
@@ -113,20 +113,20 @@ COMMAND_HANDLER(handle_interface_command)
        if (CMD_ARGC != 1 || CMD_ARGV[0][0] == '\0')
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       for (unsigned i = 0; NULL != jtag_interfaces[i]; i++) {
-               if (strcmp(CMD_ARGV[0], jtag_interfaces[i]->name) != 0)
+       for (unsigned i = 0; NULL != adapter_drivers[i]; i++) {
+               if (strcmp(CMD_ARGV[0], adapter_drivers[i]->name) != 0)
                        continue;
 
-               if (NULL != jtag_interfaces[i]->commands) {
+               if (NULL != adapter_drivers[i]->commands) {
                        retval = register_commands(CMD_CTX, NULL,
-                                       jtag_interfaces[i]->commands);
+                                       adapter_drivers[i]->commands);
                        if (ERROR_OK != retval)
                                return retval;
                }
 
-               jtag_interface = jtag_interfaces[i];
+               adapter_driver = adapter_drivers[i];
 
-               return allow_transports(CMD_CTX, jtag_interface->transports);
+               return allow_transports(CMD_CTX, adapter_driver->transports);
        }
 
        /* no valid interface was found (i.e. the configuration option,
index c83b8c298c74db882c01a048c28b62249ae3b2f8..f9bd87eeb370348c6b9f0adbeae21213c34fc00a 100644 (file)
@@ -518,14 +518,20 @@ static const struct command_registration aice_command_handlers[] = {
 /***************************************************************************/
 /* End of Command handlers */
 
-struct jtag_interface aice_interface = {
+static struct jtag_interface aice_interface = {
+       .execute_queue = aice_execute_queue,
+};
+
+struct adapter_driver aice_adapter_driver = {
        .name = "aice",
-       .commands = aice_command_handlers,
        .transports = aice_transports,
+       .commands = aice_command_handlers,
+
        .init = aice_init,
        .quit = aice_quit,
-       .execute_queue = aice_execute_queue,
        .speed = aice_speed,            /* set interface speed */
-       .speed_div = aice_speed_div,    /* return readable value */
        .khz = aice_khz,                /* convert khz to interface speed value */
+       .speed_div = aice_speed_div,    /* return readable value */
+
+       .jtag_ops = &aice_interface,
 };
index 5e9777e74145d796ebe9f4cc03d411bfe04ef19d..6239573d105ebf881cbefa3b1d7e059a6c235f85 100644 (file)
@@ -126,10 +126,10 @@ static int rclk_fallback_speed_khz;
 static enum {CLOCK_MODE_UNSELECTED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode;
 static int jtag_speed;
 
-static struct jtag_interface *jtag;
+/* FIXME: change name to this variable, it is not anymore JTAG only */
+static struct adapter_driver *jtag;
 
-/* configuration */
-struct jtag_interface *jtag_interface;
+extern struct adapter_driver *adapter_driver;
 
 void jtag_set_flush_queue_sleep(int ms)
 {
@@ -503,7 +503,7 @@ int jtag_add_tms_seq(unsigned nbits, const uint8_t *seq, enum tap_state state)
 {
        int retval;
 
-       if (!(jtag->supported & DEBUG_CAP_TMS_SEQ))
+       if (!(jtag->jtag_ops->supported & DEBUG_CAP_TMS_SEQ))
                return ERROR_JTAG_NOT_IMPLEMENTED;
 
        jtag_checks();
@@ -946,11 +946,11 @@ int default_interface_jtag_execute_queue(void)
                 * The fix can be applied immediately after next release (v0.11.0 ?)
                 */
                LOG_ERROR("JTAG API jtag_execute_queue() called on non JTAG interface");
-               if (!jtag->execute_queue)
+               if (!jtag->jtag_ops || !jtag->jtag_ops->execute_queue)
                        return ERROR_OK;
        }
 
-       int result = jtag->execute_queue();
+       int result = jtag->jtag_ops->execute_queue();
 
 #if !BUILD_ZY1000
        /* Only build this if we use a regular driver with a command queue.
@@ -1518,7 +1518,7 @@ int adapter_init(struct command_context *cmd_ctx)
        if (jtag)
                return ERROR_OK;
 
-       if (!jtag_interface) {
+       if (!adapter_driver) {
                /* nothing was previously specified by "interface" command */
                LOG_ERROR("Debug Adapter has to be specified, "
                        "see \"interface\" command");
@@ -1526,10 +1526,10 @@ int adapter_init(struct command_context *cmd_ctx)
        }
 
        int retval;
-       retval = jtag_interface->init();
+       retval = adapter_driver->init();
        if (retval != ERROR_OK)
                return retval;
-       jtag = jtag_interface;
+       jtag = adapter_driver;
 
        if (jtag->speed == NULL) {
                LOG_INFO("This adapter doesn't support configurable speed");
index 045672f0ed5790a41802c06a4b7808421d7fe9aa..db106bb052a5bf1edbaab61d5dea483eef334e5d 100644 (file)
@@ -584,7 +584,11 @@ static const struct command_registration amtjtagaccel_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface amt_jtagaccel_interface = {
+static struct jtag_interface amt_jtagaccel_interface = {
+       .execute_queue = amt_jtagaccel_execute_queue,
+};
+
+struct adapter_driver amt_jtagaccel_adapter_driver = {
        .name = "amt_jtagaccel",
        .transports = jtag_only,
        .commands = amtjtagaccel_command_handlers,
@@ -592,5 +596,6 @@ struct jtag_interface amt_jtagaccel_interface = {
        .init = amt_jtagaccel_init,
        .quit = amt_jtagaccel_quit,
        .speed = amt_jtagaccel_speed,
-       .execute_queue = amt_jtagaccel_execute_queue,
+
+       .jtag_ops = &amt_jtagaccel_interface,
 };
index 285bf9b7f9ccdc1ce6e82c11f30ca6ed6b3a0711..c81f8043b23bb61f15990cb672d8003fdb5bba40 100644 (file)
@@ -495,16 +495,22 @@ static const struct command_registration armjtagew_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface armjtagew_interface = {
+static struct jtag_interface armjtagew_interface = {
+       .execute_queue = armjtagew_execute_queue,
+};
+
+struct adapter_driver armjtagew_adapter_driver = {
        .name = "arm-jtag-ew",
-       .commands = armjtagew_command_handlers,
        .transports = jtag_only,
-       .execute_queue = armjtagew_execute_queue,
-       .speed = armjtagew_speed,
-       .speed_div = armjtagew_speed_div,
-       .khz = armjtagew_khz,
+       .commands = armjtagew_command_handlers,
+
        .init = armjtagew_init,
        .quit = armjtagew_quit,
+       .speed = armjtagew_speed,
+       .khz = armjtagew_khz,
+       .speed_div = armjtagew_speed_div,
+
+       .jtag_ops = &armjtagew_interface,
 };
 
 /**************************************************************************
index e2f64f53b0af723a868ff8bc2c2aaafa0a96c843..1026847fec204ddf7621e5f1c5c44656dd88a41c 100644 (file)
@@ -187,14 +187,20 @@ static const struct command_registration at91rm9200_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface at91rm9200_interface = {
-       .name = "at91rm9200",
+static struct jtag_interface at91rm9200_interface = {
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver at91rm9200_adapter_driver = {
+       .name = "at91rm9200",
        .transports = jtag_only,
        .commands = at91rm9200_command_handlers,
+
        .init = at91rm9200_init,
        .quit = at91rm9200_quit,
        .reset = at91rm9200_reset,
+
+       .jtag_ops = &at91rm9200_interface,
 };
 
 static int at91rm9200_init(void)
index 60316f17d16dc1de8d2b9e49a3feccbdef0d37db..bbc87d3dd373c1cf67310d986e2f3084a79cbb1c 100644 (file)
@@ -405,19 +405,25 @@ static const struct command_registration bcm2835gpio_command_handlers[] = {
 
 static const char * const bcm2835_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface bcm2835gpio_interface = {
-       .name = "bcm2835gpio",
+static struct jtag_interface bcm2835gpio_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver bcm2835gpio_adapter_driver = {
+       .name = "bcm2835gpio",
        .transports = bcm2835_transports,
-       .swd = &bitbang_swd,
-       .speed = bcm2835gpio_speed,
-       .khz = bcm2835gpio_khz,
-       .speed_div = bcm2835gpio_speed_div,
        .commands = bcm2835gpio_command_handlers,
+
        .init = bcm2835gpio_init,
        .quit = bcm2835gpio_quit,
        .reset = bcm2835gpio_reset,
+       .speed = bcm2835gpio_speed,
+       .khz = bcm2835gpio_khz,
+       .speed_div = bcm2835gpio_speed_div,
+
+       .jtag_ops = &bcm2835gpio_interface,
+       .swd_ops = &bitbang_swd,
 };
 
 static bool bcm2835gpio_jtag_mode_possible(void)
index 23d1547a97c70b3bb6ff7dc344bfc3517d6f0a8f..020c4ce39025a713cde181ff59f9aa5711c7a302 100644 (file)
@@ -536,15 +536,21 @@ static const struct swd_driver buspirate_swd = {
 
 static const char * const buspirate_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface buspirate_interface = {
-       .name = "buspirate",
+static struct jtag_interface buspirate_interface = {
        .execute_queue = buspirate_execute_queue,
-       .commands = buspirate_command_handlers,
+};
+
+struct adapter_driver buspirate_adapter_driver = {
+       .name = "buspirate",
        .transports = buspirate_transports,
-       .swd = &buspirate_swd,
+       .commands = buspirate_command_handlers,
+
        .init = buspirate_init,
        .quit = buspirate_quit,
        .reset = buspirate_reset,
+
+       .jtag_ops = &buspirate_interface,
+       .swd_ops = &buspirate_swd,
 };
 
 /*************** jtag execute commands **********************/
index c54b70c7dbd29c895473054a0c27586cfc17c8a7..c0728214c5979f66118990de18f06f56616ed865 100644 (file)
@@ -1786,18 +1786,23 @@ static const struct swd_driver cmsis_dap_swd_driver = {
 
 static const char * const cmsis_dap_transport[] = { "swd", "jtag", NULL };
 
-struct jtag_interface cmsis_dap_interface = {
-       .name = "cmsis-dap",
+static struct jtag_interface cmsis_dap_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
-       .commands = cmsis_dap_command_handlers,
-       .swd = &cmsis_dap_swd_driver,
+       .execute_queue = cmsis_dap_execute_queue,
+};
+
+struct adapter_driver cmsis_dap_adapter_driver = {
+       .name = "cmsis-dap",
        .transports = cmsis_dap_transport,
+       .commands = cmsis_dap_command_handlers,
 
-       .execute_queue = cmsis_dap_execute_queue,
-       .speed = cmsis_dap_speed,
-       .speed_div = cmsis_dap_speed_div,
-       .khz = cmsis_dap_khz,
        .init = cmsis_dap_init,
        .quit = cmsis_dap_quit,
        .reset = cmsis_dap_reset,
+       .speed = cmsis_dap_speed,
+       .khz = cmsis_dap_khz,
+       .speed_div = cmsis_dap_speed_div,
+
+       .jtag_ops = &cmsis_dap_interface,
+       .swd_ops = &cmsis_dap_swd_driver,
 };
index 739213e23346b3fdc7b686fd968fbfa2b4010c3d..e66cb6bd50faec86e21be2cb3836cac4c090c141 100644 (file)
@@ -144,20 +144,22 @@ static const struct command_registration dummy_command_handlers[] = {
 /* The dummy driver is used to easily check the code path
  * where the target is unresponsive.
  */
-struct jtag_interface dummy_interface = {
-               .name = "dummy",
-
-               .supported = DEBUG_CAP_TMS_SEQ,
-               .commands = dummy_command_handlers,
-               .transports = jtag_only,
+static struct jtag_interface dummy_interface = {
+       .supported = DEBUG_CAP_TMS_SEQ,
+       .execute_queue = &bitbang_execute_queue,
+};
 
-               .execute_queue = &bitbang_execute_queue,
+struct adapter_driver dummy_adapter_driver = {
+       .name = "dummy",
+       .transports = jtag_only,
+       .commands = dummy_command_handlers,
 
-               .speed = &dummy_speed,
-               .khz = &dummy_khz,
-               .speed_div = &dummy_speed_div,
+       .init = &dummy_init,
+       .quit = &dummy_quit,
+       .reset = &dummy_reset,
+       .speed = &dummy_speed,
+       .khz = &dummy_khz,
+       .speed_div = &dummy_speed_div,
 
-               .init = &dummy_init,
-               .quit = &dummy_quit,
-               .reset = &dummy_reset,
-       };
+       .jtag_ops = &dummy_interface,
+};
index dbbfc7ac6de5946b53ff9d32c14440050b7b25d6..5e0e62afa729bd214bf41ed50e9dc2014217bcc2 100644 (file)
@@ -50,16 +50,20 @@ static int ep93xx_quit(void);
 
 struct timespec ep93xx_zzzz;
 
-struct jtag_interface ep93xx_interface = {
-       .name = "ep93xx",
-
+static struct jtag_interface ep93xx_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver ep93xx_adapter_driver = {
+       .name = "ep93xx",
        .transports = jtag_only,
 
        .init = ep93xx_init,
        .quit = ep93xx_quit,
        .reset = ep93xx_reset,
+
+       .jtag_ops = &ep93xx_interface,
 };
 
 static struct bitbang_interface ep93xx_bitbang = {
index 8cda76ed2a9970d5bfa73e1f87a3b2189f5fd474..1ef0c57ea48672a0d70bff8c983c3a05f0430123 100644 (file)
@@ -914,17 +914,21 @@ static int syncbb_execute_queue(void)
        return retval;
 }
 
-struct jtag_interface ft232r_interface = {
-       .name = "ft232r",
-       .commands = ft232r_command_handlers,
-       .transports = jtag_only,
+static struct jtag_interface ft232r_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
-
        .execute_queue = syncbb_execute_queue,
+};
+
+struct adapter_driver ft232r_adapter_driver = {
+       .name = "ft232r",
+       .transports = jtag_only,
+       .commands = ft232r_command_handlers,
 
-       .speed = ft232r_speed,
        .init = ft232r_init,
        .quit = ft232r_quit,
-       .speed_div = ft232r_speed_div,
+       .speed = ft232r_speed,
        .khz = ft232r_khz,
+       .speed_div = ft232r_speed_div,
+
+       .jtag_ops = &ft232r_interface,
 };
index e645e9fae1387bfdcca48ea14d76921847f47b9a..40d076ecfc6421c3c8b312080cd465a0537b55e3 100644 (file)
@@ -1231,18 +1231,23 @@ static const struct swd_driver ftdi_swd = {
 
 static const char * const ftdi_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface ftdi_interface = {
-       .name = "ftdi",
+static struct jtag_interface ftdi_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
-       .commands = ftdi_command_handlers,
+       .execute_queue = ftdi_execute_queue,
+};
+
+struct adapter_driver ftdi_adapter_driver = {
+       .name = "ftdi",
        .transports = ftdi_transports,
-       .swd = &ftdi_swd,
+       .commands = ftdi_command_handlers,
 
        .init = ftdi_initialize,
        .quit = ftdi_quit,
        .reset = ftdi_reset,
        .speed = ftdi_speed,
-       .speed_div = ftdi_speed_div,
        .khz = ftdi_khz,
-       .execute_queue = ftdi_execute_queue,
+       .speed_div = ftdi_speed_div,
+
+       .jtag_ops = &ftdi_interface,
+       .swd_ops = &ftdi_swd,
 };
index 6969e8b79c33d293056dbc763d36d81ced800c9c..2e8dad89608e36ac2015d3b75c66372b0f04f6db 100644 (file)
@@ -521,12 +521,17 @@ static const struct command_registration gw16012_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface gw16012_interface = {
+static struct jtag_interface gw16012_interface = {
+       .execute_queue = gw16012_execute_queue,
+};
+
+struct adapter_driver gw16012_adapter_driver = {
        .name = "gw16012",
        .transports = jtag_only,
        .commands = gw16012_command_handlers,
 
        .init = gw16012_init,
        .quit = gw16012_quit,
-       .execute_queue = gw16012_execute_queue,
+
+       .jtag_ops = &gw16012_interface,
 };
index d677e8a7e550162f4529d587d1514e9c057e4340..7dcfb6790aea862ce69df92956fccf362a4d2b69 100644 (file)
@@ -427,19 +427,25 @@ static const struct command_registration imx_gpio_command_handlers[] = {
 
 static const char * const imx_gpio_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface imx_gpio_interface = {
-       .name = "imx_gpio",
+static struct jtag_interface imx_gpio_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver imx_gpio_adapter_driver = {
+       .name = "imx_gpio",
        .transports = imx_gpio_transports,
-       .swd = &bitbang_swd,
-       .speed = imx_gpio_speed,
-       .khz = imx_gpio_khz,
-       .speed_div = imx_gpio_speed_div,
        .commands = imx_gpio_command_handlers,
+
        .init = imx_gpio_init,
        .quit = imx_gpio_quit,
        .reset = imx_gpio_reset,
+       .speed = imx_gpio_speed,
+       .khz = imx_gpio_khz,
+       .speed_div = imx_gpio_speed_div,
+
+       .jtag_ops = &imx_gpio_interface,
+       .swd_ops = &bitbang_swd,
 };
 
 static bool imx_gpio_jtag_mode_possible(void)
index 402ff9917ee5834b99f719129d72ac1483e6171b..3dcadc81361d718d65bd34677e8a63dfbdbf7bb1 100644 (file)
@@ -2267,18 +2267,24 @@ static const struct swd_driver jlink_swd = {
 
 static const char * const jlink_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface jlink_interface = {
+static struct jtag_interface jlink_interface = {
+       .execute_queue = &jlink_execute_queue,
+};
+
+struct adapter_driver jlink_adapter_driver = {
        .name = "jlink",
-       .commands = jlink_command_handlers,
        .transports = jlink_transports,
-       .swd = &jlink_swd,
-       .execute_queue = &jlink_execute_queue,
-       .speed = &jlink_speed,
-       .speed_div = &jlink_speed_div,
-       .khz = &jlink_khz,
+       .commands = jlink_command_handlers,
+
        .init = &jlink_init,
        .quit = &jlink_quit,
        .reset = &jlink_reset_safe,
+       .speed = &jlink_speed,
+       .khz = &jlink_khz,
+       .speed_div = &jlink_speed_div,
        .config_trace = &config_trace,
        .poll_trace = &poll_trace,
+
+       .jtag_ops = &jlink_interface,
+       .swd_ops = &jlink_swd,
 };
index 7ac7e962fa770e739f0ee924ab19b198bf3cb674..e5124b5b04b24c9886ab038f837ce30c2c736824 100644 (file)
@@ -627,13 +627,18 @@ static const struct command_registration jtag_vpi_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface jtag_vpi_interface = {
-       .name = "jtag_vpi",
+static struct jtag_interface jtag_vpi_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
-       .commands = jtag_vpi_command_handlers,
+       .execute_queue = jtag_vpi_execute_queue,
+};
+
+struct adapter_driver jtag_vpi_adapter_driver = {
+       .name = "jtag_vpi",
        .transports = jtag_only,
+       .commands = jtag_vpi_command_handlers,
 
        .init = jtag_vpi_init,
        .quit = jtag_vpi_quit,
-       .execute_queue = jtag_vpi_execute_queue,
+
+       .jtag_ops = &jtag_vpi_interface,
 };
index a08f03642daf472d12e404631af553e14c12a92b..489441111dec0eba31a15fd71cadf089cdb24cb8 100644 (file)
@@ -935,12 +935,14 @@ static const struct swd_driver kitprog_swd = {
 
 static const char * const kitprog_transports[] = { "swd", NULL };
 
-struct jtag_interface kitprog_interface = {
+struct adapter_driver kitprog_adapter_driver = {
        .name = "kitprog",
-       .commands = kitprog_command_handlers,
        .transports = kitprog_transports,
-       .swd = &kitprog_swd,
+       .commands = kitprog_command_handlers,
+
        .init = kitprog_init,
        .quit = kitprog_quit,
        .reset = kitprog_reset,
+
+       .swd_ops = &kitprog_swd,
 };
index 5f352af893204f24dfe1877809658579f558bacc..539f475bd16fa6ea6e1c3860e9ee80649ceef0e4 100644 (file)
@@ -234,13 +234,19 @@ static const struct command_registration opendous_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface opendous_interface = {
+static struct jtag_interface opendous_interface = {
+       .execute_queue = opendous_execute_queue,
+};
+
+struct adapter_driver opendous_adapter_driver = {
        .name = "opendous",
        .transports = jtag_only,
        .commands = opendous_command_handlers,
-       .execute_queue = opendous_execute_queue,
+
        .init = opendous_init,
        .quit = opendous_quit,
+
+       .jtag_ops = &opendous_interface,
 };
 
 static int opendous_execute_queue(void)
index 7a3aa233796c75ffeebd6c9cd3849cc12f7e56d2..24960a8d99751eba612f14e716cb9c0078edec0f 100644 (file)
@@ -892,17 +892,20 @@ static const struct command_registration openjtag_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface openjtag_interface = {
+static struct jtag_interface openjtag_interface = {
+       .execute_queue = openjtag_execute_queue,
+};
+
+struct adapter_driver openjtag_adapter_driver = {
        .name = "openjtag",
        .transports = jtag_only,
        .commands = openjtag_command_handlers,
 
-       .execute_queue = openjtag_execute_queue,
-       .speed = openjtag_speed,
-       .speed_div = openjtag_speed_div,
-       .khz = openjtag_khz,
        .init = openjtag_init,
        .quit = openjtag_quit,
-};
-
+       .speed = openjtag_speed,
+       .khz = openjtag_khz,
+       .speed_div = openjtag_speed_div,
 
+       .jtag_ops = &openjtag_interface,
+};
index 5db36a122ae943089d54656e57f1f8c9ff102da4..ed89a7946c064ed6268ba5aeb6d32f1572bf1e64 100644 (file)
@@ -688,12 +688,16 @@ static int osbdm_init(void)
        return ERROR_OK;
 }
 
-struct jtag_interface osbdm_interface = {
-       .name = "osbdm",
+static struct jtag_interface osbdm_interface = {
+       .execute_queue = osbdm_execute_queue,
+};
 
+struct adapter_driver osbdm_adapter_driver = {
+       .name = "osbdm",
        .transports = jtag_only,
-       .execute_queue = osbdm_execute_queue,
 
        .init = osbdm_init,
-       .quit = osbdm_quit
+       .quit = osbdm_quit,
+
+       .jtag_ops = &osbdm_interface,
 };
index 3a589a3a50b82d79c6230ae8a2eb746803756573..6d15203ae6e6973bcaefc6314ba937beb55c6448 100644 (file)
@@ -513,17 +513,22 @@ static const struct command_registration parport_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface parport_interface = {
-       .name = "parport",
+static struct jtag_interface parport_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
+       .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver parport_adapter_driver = {
+       .name = "parport",
        .transports = jtag_only,
        .commands = parport_command_handlers,
 
        .init = parport_init,
        .quit = parport_quit,
        .reset = parport_reset,
+       .speed = parport_speed,
        .khz = parport_khz,
        .speed_div = parport_speed_div,
-       .speed = parport_speed,
-       .execute_queue = bitbang_execute_queue,
+
+       .jtag_ops = &parport_interface,
 };
index 2a94d06186c3e6c73110510be6949cfb4fa040f3..3849a27f920f8467f874a31dc62c38ad4fd9c04b 100644 (file)
@@ -561,15 +561,20 @@ static int presto_jtag_quit(void)
        return ERROR_OK;
 }
 
-struct jtag_interface presto_interface = {
+static struct jtag_interface presto_interface = {
+       .execute_queue = bitq_execute_queue,
+};
+
+struct adapter_driver presto_adapter_driver = {
        .name = "presto",
        .transports = jtag_only,
        .commands = presto_command_handlers,
 
-       .execute_queue = bitq_execute_queue,
+       .init = presto_jtag_init,
+       .quit = presto_jtag_quit,
        .speed = presto_jtag_speed,
        .khz = presto_adapter_khz,
        .speed_div = presto_jtag_speed_div,
-       .init = presto_jtag_init,
-       .quit = presto_jtag_quit,
+
+       .jtag_ops = &presto_interface,
 };
index 70280d23e9ca065d2e19973cfc45f9821ac799e4..663795296f933df3f12b3fb3febbaf50877357d5 100644 (file)
@@ -341,12 +341,18 @@ static const struct command_registration remote_bitbang_command_handlers[] = {
        COMMAND_REGISTRATION_DONE,
 };
 
-struct jtag_interface remote_bitbang_interface = {
-       .name = "remote_bitbang",
+static struct jtag_interface remote_bitbang_interface = {
        .execute_queue = &bitbang_execute_queue,
+};
+
+struct adapter_driver remote_bitbang_adapter_driver = {
+       .name = "remote_bitbang",
        .transports = jtag_only,
        .commands = remote_bitbang_command_handlers,
+
        .init = &remote_bitbang_init,
        .quit = &remote_bitbang_quit,
        .reset = &remote_bitbang_reset,
+
+       .jtag_ops = &remote_bitbang_interface,
 };
index 317e8b808ffc6ed1d475d8924c2e0cd5ff4a6073..e0533997c2f38bc8f5f399a993a88284b86d97b0 100644 (file)
@@ -1660,13 +1660,19 @@ static int rlink_quit(void)
        return ERROR_OK;
 }
 
-struct jtag_interface rlink_interface = {
+static struct jtag_interface rlink_interface = {
+       .execute_queue = rlink_execute_queue,
+};
+
+struct adapter_driver rlink_adapter_driver = {
        .name = "rlink",
        .transports = jtag_only,
+
        .init = rlink_init,
        .quit = rlink_quit,
        .speed = rlink_speed,
-       .speed_div = rlink_speed_div,
        .khz = rlink_khz,
-       .execute_queue = rlink_execute_queue,
+       .speed_div = rlink_speed_div,
+
+       .jtag_ops = &rlink_interface,
 };
index 70630000503020d395f94cd5855f317c3acb7271..bf33767c811a0532396bbd8e75a8ceafe6d46bde 100644 (file)
@@ -551,16 +551,22 @@ static int sysfsgpio_quit(void);
 
 static const char * const sysfsgpio_transports[] = { "jtag", "swd", NULL };
 
-struct jtag_interface sysfsgpio_interface = {
-       .name = "sysfsgpio",
+static struct jtag_interface sysfsgpio_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver sysfsgpio_adapter_driver = {
+       .name = "sysfsgpio",
        .transports = sysfsgpio_transports,
-       .swd = &bitbang_swd,
        .commands = sysfsgpio_command_handlers,
+
        .init = sysfsgpio_init,
        .quit = sysfsgpio_quit,
        .reset = sysfsgpio_reset,
+
+       .jtag_ops = &sysfsgpio_interface,
+       .swd_ops = &bitbang_swd,
 };
 
 static struct bitbang_interface sysfsgpio_bitbang = {
index bbe08aae7fee30c9984df016fdf0acc5fedb673b..77fbe61933b6d9dd21c20bcb36cbbc6165b93c53 100644 (file)
@@ -235,7 +235,7 @@ int ulink_queue_stableclocks(struct ulink *device, struct jtag_command *cmd);
 int ulink_post_process_scan(struct ulink_cmd *ulink_cmd);
 int ulink_post_process_queue(struct ulink *device);
 
-/* JTAG driver functions (registered in struct jtag_interface) */
+/* adapter driver functions */
 static int ulink_execute_queue(void);
 static int ulink_khz(int khz, int *jtag_speed);
 static int ulink_speed(int speed);
@@ -2272,17 +2272,20 @@ static const struct command_registration ulink_command_handlers[] = {
        COMMAND_REGISTRATION_DONE,
 };
 
-struct jtag_interface ulink_interface = {
-       .name = "ulink",
+static struct jtag_interface ulink_interface = {
+       .execute_queue = ulink_execute_queue,
+};
 
-       .commands = ulink_command_handlers,
+struct adapter_driver ulink_adapter_driver = {
+       .name = "ulink",
        .transports = jtag_only,
+       .commands = ulink_command_handlers,
 
-       .execute_queue = ulink_execute_queue,
-       .khz = ulink_khz,
+       .init = ulink_init,
+       .quit = ulink_quit,
        .speed = ulink_speed,
+       .khz = ulink_khz,
        .speed_div = ulink_speed_div,
 
-       .init = ulink_init,
-       .quit = ulink_quit
+       .jtag_ops = &ulink_interface,
 };
index 48534a26f78bc920bf00f91f296ba0c87865ea80..fcb594f30b900789f2cb5210404c1067fa336257 100644 (file)
@@ -1071,13 +1071,18 @@ static const struct command_registration ublast_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface usb_blaster_interface = {
+static struct jtag_interface usb_blaster_interface = {
+       .supported = DEBUG_CAP_TMS_SEQ,
+       .execute_queue = ublast_execute_queue,
+};
+
+struct adapter_driver usb_blaster_adapter_driver = {
        .name = "usb_blaster",
        .transports = jtag_only,
        .commands = ublast_command_handlers,
-       .supported = DEBUG_CAP_TMS_SEQ,
 
-       .execute_queue = ublast_execute_queue,
        .init = ublast_init,
        .quit = ublast_quit,
+
+       .jtag_ops = &usb_blaster_interface,
 };
index 35a95202ea27051aa08191ba657aab202b957bfe..6517ce4ad190c70a75781cebb7a7cf920c7d3d66 100644 (file)
@@ -596,11 +596,16 @@ static void usbprog_jtag_tms_send(struct usbprog_jtag *usbprog_jtag)
        }
 }
 
-struct jtag_interface usbprog_interface = {
+static struct jtag_interface usbprog_interface = {
+       .execute_queue = usbprog_execute_queue,
+};
+
+struct adapter_driver usbprog_adapter_driver = {
        .name = "usbprog",
        .transports = jtag_only,
 
-       .execute_queue = usbprog_execute_queue,
        .init = usbprog_init,
-       .quit = usbprog_quit
+       .quit = usbprog_quit,
+
+       .jtag_ops = &usbprog_interface,
 };
index 5dd1bca40005ba268f22a5051e9c1a5b167efec4..eb43702339c0953f8c45ec5a344f7850b24748ed 100644 (file)
@@ -948,18 +948,23 @@ static const struct swd_driver vsllink_swd_driver = {
        .run = vsllink_swd_run_queue,
 };
 
-struct jtag_interface vsllink_interface = {
-       .name = "vsllink",
+static struct jtag_interface vsllink_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
-       .commands = vsllink_command_handlers,
+       .execute_queue = vsllink_execute_queue,
+};
+
+struct adapter_driver vsllink_adapter_driver = {
+       .name = "vsllink",
        .transports = vsllink_transports,
-       .swd = &vsllink_swd_driver,
+       .commands = vsllink_command_handlers,
 
        .init = vsllink_init,
        .quit = vsllink_quit,
        .reset = vsllink_reset,
-       .khz = vsllink_khz,
        .speed = vsllink_speed,
+       .khz = vsllink_khz,
        .speed_div = vsllink_speed_div,
-       .execute_queue = vsllink_execute_queue,
+
+       .jtag_ops = &vsllink_interface,
+       .swd_ops = &vsllink_swd_driver,
 };
index f0899246b4ca8fb034816228f9538f0517493f20..14bfe9c75c6aaf1a2310fb39b84afb33b442ab95 100644 (file)
@@ -2038,17 +2038,22 @@ static const struct swd_driver xds110_swd_driver = {
 
 static const char * const xds110_transport[] = { "swd", "jtag", NULL };
 
-struct jtag_interface xds110_interface = {
+static struct jtag_interface xds110_interface = {
+       .execute_queue = xds110_execute_queue,
+};
+
+struct adapter_driver xds110_adapter_driver = {
        .name = "xds110",
-       .commands = xds110_command_handlers,
-       .swd = &xds110_swd_driver,
        .transports = xds110_transport,
+       .commands = xds110_command_handlers,
 
-       .execute_queue = xds110_execute_queue,
-       .speed = xds110_speed,
-       .speed_div = xds110_speed_div,
-       .khz = xds110_khz,
        .init = xds110_init,
        .quit = xds110_quit,
        .reset = xds110_reset,
+       .speed = xds110_speed,
+       .khz = xds110_khz,
+       .speed_div = xds110_speed_div,
+
+       .jtag_ops = &xds110_interface,
+       .swd_ops = &xds110_swd_driver,
 };
index dbbebed3d50fc08b0f3cae5ddbbbfef4e61c806b..95233c0d7d3c44a265594194b53cc7efd6cf7030 100644 (file)
@@ -346,10 +346,11 @@ static const struct command_registration hl_interface_command_handlers[] = {
        COMMAND_REGISTRATION_DONE
 };
 
-struct jtag_interface hl_interface = {
+struct adapter_driver hl_adapter_driver = {
        .name = "hla",
-       .commands = hl_interface_command_handlers,
        .transports = hl_transports,
+       .commands = hl_interface_command_handlers,
+
        .init = hl_interface_init,
        .quit = hl_interface_quit,
        .reset = hl_interface_reset,
@@ -358,4 +359,6 @@ struct jtag_interface hl_interface = {
        .speed_div = &hl_interface_speed_div,
        .config_trace = &hl_interface_config_trace,
        .poll_trace = &hl_interface_poll_trace,
+
+       /* no ops for HLA, targets hla_target and stm8 intercept them all */
 };
index c5579f5e06b535c5ecd22228026ed2da121b4ad1..feda35699e92a5c998c5e9dbc256d97396e34cf6 100644 (file)
@@ -192,32 +192,34 @@ static inline tap_state_t jtag_debug_state_machine(const void *tms_buf,
  * debugging interface.
  */
 struct jtag_interface {
-       /** The name of the JTAG interface driver. */
-       const char * const 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 * const *transports;
-
-       const struct swd_driver *swd;
-
        /**
         * Execute queued commands.
         * @returns ERROR_OK on success, or an error code on failure.
         */
        int (*execute_queue)(void);
+};
 
-       /**
-        * Set the interface speed.
-        * @param speed The new interface speed setting.
-        * @returns ERROR_OK on success, or an error code on failure.
-        */
-       int (*speed)(int speed);
+/**
+ * Represents a driver for a debugging interface
+ *
+ * @todo We need a per-instance structure too, and changes to pass
+ * that structure to the driver.  Instances can for example be in
+ * either SWD or JTAG modes.  This will help remove globals, and
+ * eventually to cope with systems which have more than one such
+ * debugging interface.
+ */
+struct adapter_driver {
+       /** The name of the interface driver. */
+       const char * const name;
+
+       /** transports supported in C code (NULL terminated vector) */
+       const char * const *transports;
 
        /**
         * The interface driver may register additional commands to expose
@@ -260,6 +262,13 @@ struct jtag_interface {
         */
        int (*reset)(int srst, int trst);
 
+       /**
+        * Set the interface speed.
+        * @param speed The new interface speed setting.
+        * @returns ERROR_OK on success, or an error code on failure.
+        */
+       int (*speed)(int speed);
+
        /**
         * Returns JTAG maxium speed for KHz. 0 = RTCK. The function returns
         *  a failure if it can't support the KHz/RTCK.
@@ -336,6 +345,12 @@ struct jtag_interface {
         * @returns ERROR_OK on success, an error code on failure.
         */
        int (*poll_trace)(uint8_t *buf, size_t *size);
+
+       /** Low-level JTAG APIs */
+       struct jtag_interface *jtag_ops;
+
+       /** Low-level SWD APIs */
+       const struct swd_driver *swd_ops;
 };
 
 extern const char * const jtag_only[];
index 286a73ac67483bf30ee0b0b00ccbdb5193d4386f..c35484693c65824d4b6615d68b8b6d47b458f17e 100644 (file)
 
 /** @file
  * This file includes declarations for all built-in jtag interfaces,
- * which are then listed in the jtag_interfaces array.
+ * which are then listed in the adapter_drivers array.
  *
  * Dynamic loading can be implemented be searching for shared libraries
- * that contain a jtag_interface structure that can added to this list.
+ * that contain an adapter_driver structure that can added to this list.
  */
 
 #if BUILD_ZY1000 == 1
-extern struct jtag_interface zy1000_interface;
+extern struct adapter_driver zy1000_adapter_driver;
 #elif defined(BUILD_MINIDRIVER_DUMMY)
-extern struct jtag_interface minidummy_interface;
+extern struct adapter_driver minidummy_adapter_driver;
 #else /* standard drivers */
 #if BUILD_PARPORT == 1
-extern struct jtag_interface parport_interface;
+extern struct adapter_driver parport_adapter_driver;
 #endif
 #if BUILD_DUMMY == 1
-extern struct jtag_interface dummy_interface;
+extern struct adapter_driver dummy_adapter_driver;
 #endif
 #if BUILD_FTDI == 1
-extern struct jtag_interface ftdi_interface;
+extern struct adapter_driver ftdi_adapter_driver;
 #endif
 #if BUILD_USB_BLASTER == 1 || BUILD_USB_BLASTER_2 == 1
-extern struct jtag_interface usb_blaster_interface;
+extern struct adapter_driver usb_blaster_adapter_driver;
 #endif
 #if BUILD_JTAG_VPI == 1
-extern struct jtag_interface jtag_vpi_interface;
+extern struct adapter_driver jtag_vpi_adapter_driver;
 #endif
 #if BUILD_FT232R == 1
-extern struct jtag_interface ft232r_interface;
+extern struct adapter_driver ft232r_adapter_driver;
 #endif
 #if BUILD_AMTJTAGACCEL == 1
-extern struct jtag_interface amt_jtagaccel_interface;
+extern struct adapter_driver amt_jtagaccel_adapter_driver;
 #endif
 #if BUILD_EP93XX == 1
-extern struct jtag_interface ep93xx_interface;
+extern struct adapter_driver ep93xx_adapter_driver;
 #endif
 #if BUILD_AT91RM9200 == 1
-extern struct jtag_interface at91rm9200_interface;
+extern struct adapter_driver at91rm9200_adapter_driver;
 #endif
 #if BUILD_GW16012 == 1
-extern struct jtag_interface gw16012_interface;
+extern struct adapter_driver gw16012_adapter_driver;
 #endif
 #if BUILD_PRESTO
-extern struct jtag_interface presto_interface;
+extern struct adapter_driver presto_adapter_driver;
 #endif
 #if BUILD_USBPROG == 1
-extern struct jtag_interface usbprog_interface;
+extern struct adapter_driver usbprog_adapter_driver;
 #endif
 #if BUILD_OPENJTAG == 1
-extern struct jtag_interface openjtag_interface;
+extern struct adapter_driver openjtag_adapter_driver;
 #endif
 #if BUILD_JLINK == 1
-extern struct jtag_interface jlink_interface;
+extern struct adapter_driver jlink_adapter_driver;
 #endif
 #if BUILD_VSLLINK == 1
-extern struct jtag_interface vsllink_interface;
+extern struct adapter_driver vsllink_adapter_driver;
 #endif
 #if BUILD_RLINK == 1
-extern struct jtag_interface rlink_interface;
+extern struct adapter_driver rlink_adapter_driver;
 #endif
 #if BUILD_ULINK == 1
-extern struct jtag_interface ulink_interface;
+extern struct adapter_driver ulink_adapter_driver;
 #endif
 #if BUILD_ARMJTAGEW == 1
-extern struct jtag_interface armjtagew_interface;
+extern struct adapter_driver armjtagew_adapter_driver;
 #endif
 #if BUILD_BUSPIRATE == 1
-extern struct jtag_interface buspirate_interface;
+extern struct adapter_driver buspirate_adapter_driver;
 #endif
 #if BUILD_REMOTE_BITBANG == 1
-extern struct jtag_interface remote_bitbang_interface;
+extern struct adapter_driver remote_bitbang_adapter_driver;
 #endif
 #if BUILD_HLADAPTER == 1
-extern struct jtag_interface hl_interface;
+extern struct adapter_driver hl_adapter_driver;
 #endif
 #if BUILD_OSBDM == 1
-extern struct jtag_interface osbdm_interface;
+extern struct adapter_driver osbdm_adapter_driver;
 #endif
 #if BUILD_OPENDOUS == 1
-extern struct jtag_interface opendous_interface;
+extern struct adapter_driver opendous_adapter_driver;
 #endif
 #if BUILD_SYSFSGPIO == 1
-extern struct jtag_interface sysfsgpio_interface;
+extern struct adapter_driver sysfsgpio_adapter_driver;
 #endif
 #if BUILD_AICE == 1
-extern struct jtag_interface aice_interface;
+extern struct adapter_driver aice_adapter_driver;
 #endif
 #if BUILD_BCM2835GPIO == 1
-extern struct jtag_interface bcm2835gpio_interface;
+extern struct adapter_driver bcm2835gpio_adapter_driver;
 #endif
 #if BUILD_CMSIS_DAP == 1
-extern struct jtag_interface cmsis_dap_interface;
+extern struct adapter_driver cmsis_dap_adapter_driver;
 #endif
 #if BUILD_KITPROG == 1
-extern struct jtag_interface kitprog_interface;
+extern struct adapter_driver kitprog_adapter_driver;
 #endif
 #if BUILD_IMX_GPIO == 1
-extern struct jtag_interface imx_gpio_interface;
+extern struct adapter_driver imx_gpio_adapter_driver;
 #endif
 #if BUILD_XDS110 == 1
-extern struct jtag_interface xds110_interface;
+extern struct adapter_driver xds110_adapter_driver;
 #endif
 #endif /* standard drivers */
 
@@ -144,107 +144,107 @@ extern struct jtag_interface xds110_interface;
  * The list should be defined to contain either one minidriver interface
  * or some number of standard driver interfaces, never both.
  */
-struct jtag_interface *jtag_interfaces[] = {
+struct adapter_driver *adapter_drivers[] = {
 #if BUILD_ZY1000 == 1
-               &zy1000_interface,
+               &zy1000_adapter_driver,
 #elif defined(BUILD_MINIDRIVER_DUMMY)
-               &minidummy_interface,
+               &minidummy_adapter_driver,
 #else /* standard drivers */
 #if BUILD_PARPORT == 1
-               &parport_interface,
+               &parport_adapter_driver,
 #endif
 #if BUILD_DUMMY == 1
-               &dummy_interface,
+               &dummy_adapter_driver,
 #endif
 #if BUILD_FTDI == 1
-               &ftdi_interface,
+               &ftdi_adapter_driver,
 #endif
 #if BUILD_USB_BLASTER || BUILD_USB_BLASTER_2 == 1
-               &usb_blaster_interface,
+               &usb_blaster_adapter_driver,
 #endif
 #if BUILD_JTAG_VPI == 1
-               &jtag_vpi_interface,
+               &jtag_vpi_adapter_driver,
 #endif
 #if BUILD_FT232R == 1
-               &ft232r_interface,
+               &ft232r_adapter_driver,
 #endif
 #if BUILD_AMTJTAGACCEL == 1
-               &amt_jtagaccel_interface,
+               &amt_jtagaccel_adapter_driver,
 #endif
 #if BUILD_EP93XX == 1
-               &ep93xx_interface,
+               &ep93xx_adapter_driver,
 #endif
 #if BUILD_AT91RM9200 == 1
-               &at91rm9200_interface,
+               &at91rm9200_adapter_driver,
 #endif
 #if BUILD_GW16012 == 1
-               &gw16012_interface,
+               &gw16012_adapter_driver,
 #endif
 #if BUILD_PRESTO
-               &presto_interface,
+               &presto_adapter_driver,
 #endif
 #if BUILD_USBPROG == 1
-               &usbprog_interface,
+               &usbprog_adapter_driver,
 #endif
 #if BUILD_OPENJTAG == 1
-               &openjtag_interface,
+               &openjtag_adapter_driver,
 #endif
 #if BUILD_JLINK == 1
-               &jlink_interface,
+               &jlink_adapter_driver,
 #endif
 #if BUILD_VSLLINK == 1
-               &vsllink_interface,
+               &vsllink_adapter_driver,
 #endif
 #if BUILD_RLINK == 1
-               &rlink_interface,
+               &rlink_adapter_driver,
 #endif
 #if BUILD_ULINK == 1
-               &ulink_interface,
+               &ulink_adapter_driver,
 #endif
 #if BUILD_ARMJTAGEW == 1
-               &armjtagew_interface,
+               &armjtagew_adapter_driver,
 #endif
 #if BUILD_BUSPIRATE == 1
-               &buspirate_interface,
+               &buspirate_adapter_driver,
 #endif
 #if BUILD_REMOTE_BITBANG == 1
-               &remote_bitbang_interface,
+               &remote_bitbang_adapter_driver,
 #endif
 #if BUILD_HLADAPTER == 1
-               &hl_interface,
+               &hl_adapter_driver,
 #endif
 #if BUILD_OSBDM == 1
-               &osbdm_interface,
+               &osbdm_adapter_driver,
 #endif
 #if BUILD_OPENDOUS == 1
-               &opendous_interface,
+               &opendous_adapter_driver,
 #endif
 #if BUILD_SYSFSGPIO == 1
-               &sysfsgpio_interface,
+               &sysfsgpio_adapter_driver,
 #endif
 #if BUILD_AICE == 1
-               &aice_interface,
+               &aice_adapter_driver,
 #endif
 #if BUILD_BCM2835GPIO == 1
-               &bcm2835gpio_interface,
+               &bcm2835gpio_adapter_driver,
 #endif
 #if BUILD_CMSIS_DAP == 1
-               &cmsis_dap_interface,
+               &cmsis_dap_adapter_driver,
 #endif
 #if BUILD_KITPROG == 1
-               &kitprog_interface,
+               &kitprog_adapter_driver,
 #endif
 #if BUILD_IMX_GPIO == 1
-               &imx_gpio_interface,
+               &imx_gpio_adapter_driver,
 #endif
 #if BUILD_XDS110 == 1
-               &xds110_interface,
+               &xds110_adapter_driver,
 #endif
 #endif /* standard drivers */
                NULL,
        };
 
-void jtag_interface_modules_load(const char *path)
+void adapter_driver_modules_load(const char *path)
 {
-       /* @todo: implement dynamic module loading for JTAG interface drivers */
+       /* @todo: implement dynamic module loading for adapter drivers */
 }
index 02d201b1faa0362a0dd2415da588de16bb01d966..f85865a24daf619f02c1af10f9444b2666aa285d 100644 (file)
@@ -36,9 +36,9 @@
 
 #include <jtag/interface.h>
 
-/** Dynamically load all JTAG interface modules from specified directory. */
-void jtag_interface_modules_load(const char *path);
+/** Dynamically load all adapter driver modules from specified directory. */
+void adapter_driver_modules_load(const char *path);
 
-extern struct jtag_interface *jtag_interfaces[];
+extern struct adapter_driver *adapter_drivers[];
 
 #endif /* OPENOCD_JTAG_INTERFACES_H */
index 2f260040d73819d507770604d0b85f20a01482e3..1fce317f08f14a5feff7a99ae0130e414c130c19 100644 (file)
 #include <jtag/minidriver.h>
 #include <jtag/interface.h>
 
-struct jtag_interface minidummy_interface = {
-       .name = "minidummy",
+static struct jtag_interface minidummy_interface = {
        .execute_queue = NULL,
-       .speed = NULL,
+};
+
+struct adapter_driver minidummy_adapter_driver = {
+       .name = "minidummy",
        .transports = jtag_only,
        .commands = NULL,
+
        .init = NULL,
        .quit = NULL,
+       .speed = NULL,
        .khz = NULL,
        .speed_div = NULL,
        .power_dropout = NULL,
        .srst_asserted = NULL,
+
+       .jtag_ops = &minidummy_interface,
 };
 
 int interface_jtag_execute_queue(void)
index 1734983982218c5fa82bc49af78ba54afb72d52e..48a3d4d039dbc295874f8e5a620ce24919e313a1 100644 (file)
@@ -1237,17 +1237,23 @@ int zy1000_init(void)
        return ERROR_OK;
 }
 
-struct jtag_interface zy1000_interface = {
-       .name = "ZY1000",
+static struct jtag_interface zy1000_interface = {
        .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = NULL,
-       .speed = zy1000_speed,
+};
+
+struct adapter_driver zy1000_adapter_driver = {
+       .name = "ZY1000",
        .transports = jtag_only,
        .commands = zy1000_commands,
+
        .init = zy1000_init,
        .quit = zy1000_quit,
+       .speed = zy1000_speed,
        .khz = zy1000_khz,
        .speed_div = zy1000_speed_div,
        .power_dropout = zy1000_power_dropout,
        .srst_asserted = zy1000_srst_asserted,
+
+       .jtag_ops = &zy1000_interface,
 };
index 68a50b1893fcee5c04d71f036661b3f025138dba..8d11537338156302aa58420b1d76f3fb81fdc315 100644 (file)
@@ -368,9 +368,9 @@ static const struct command_registration swd_handlers[] = {
 
 static int swd_select(struct command_context *ctx)
 {
-       /* FIXME: only place where global 'jtag_interface' is still needed */
-       extern struct jtag_interface *jtag_interface;
-       const struct swd_driver *swd = jtag_interface->swd;
+       /* FIXME: only place where global 'adapter_driver' is still needed */
+       extern struct adapter_driver *adapter_driver;
+       const struct swd_driver *swd = adapter_driver->swd_ops;
        int retval;
 
        retval = register_commands(ctx, NULL, swd_handlers);
index 0f2957804c97bd0ace0b94b328b33e79bcfa0218..4be94b41bd2abaaf03fc3832da848196161df0f9 100644 (file)
@@ -34,7 +34,7 @@ static LIST_HEAD(all_dap);
 
 extern const struct dap_ops swd_dap_ops;
 extern const struct dap_ops jtag_dp_ops;
-extern struct jtag_interface *jtag_interface;
+extern struct adapter_driver *adapter_driver;
 
 /* DAP command support */
 struct arm_dap_object {
@@ -118,7 +118,7 @@ static int dap_init_all(void)
 
                if (transport_is_swd()) {
                        dap->ops = &swd_dap_ops;
-                       obj->swd = jtag_interface->swd;
+                       obj->swd = adapter_driver->swd_ops;
                } else
                        dap->ops = &jtag_dp_ops;
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)