Skip to content

Commit a500b2c

Browse files
committed
adapter: use bitmask for driver's transports
In every driver, replace the array of strings with a bitmask that lists the supported transports. Add an extra field to carry the former first listed transport as a "preferred" transport. It would be used as default when no command 'transport select' is used. This keeps backward compatibility with scripts that do not define the transport, relying on such default. Change-Id: I4976583f1a38fdcc1f85045023dc7c629001f743 Signed-off-by: Antonio Borneo <[email protected]> Reviewed-on: https://review.openocd.org/c/openocd/+/8675 Tested-by: jenkins Reviewed-by: zapb <[email protected]>
1 parent 236208a commit a500b2c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+129
-113
lines changed

src/jtag/adapter.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "minidriver.h"
1717
#include "interface.h"
1818
#include "interfaces.h"
19+
#include <helper/bits.h>
1920
#include <transport/transport.h>
2021

2122
/**
@@ -24,7 +25,6 @@
2425
*/
2526

2627
struct adapter_driver *adapter_driver;
27-
const char * const jtag_only[] = { "jtag", NULL };
2828

2929
enum adapter_clk_mode {
3030
CLOCK_MODE_UNSELECTED = 0,
@@ -402,11 +402,12 @@ COMMAND_HANDLER(dump_adapter_driver_list)
402402

403403
for (unsigned int i = 0; adapter_drivers[i]; i++) {
404404
const char *name = adapter_drivers[i]->name;
405-
const char * const *transports = adapter_drivers[i]->transports;
405+
unsigned int transport_ids = adapter_drivers[i]->transport_ids;
406406

407407
command_print_sameline(CMD, "%-*s {", max_len, name);
408-
for (unsigned int j = 0; transports[j]; j++)
409-
command_print_sameline(CMD, " %s", transports[j]);
408+
for (unsigned int j = BIT(0); j & TRANSPORT_VALID_MASK; j <<= 1)
409+
if (j & transport_ids)
410+
command_print_sameline(CMD, " %s", transport_name(j));
410411
command_print(CMD, " }");
411412
}
412413

@@ -447,7 +448,8 @@ COMMAND_HANDLER(handle_adapter_driver_command)
447448

448449
adapter_driver = adapter_drivers[i];
449450

450-
return allow_transports(CMD_CTX, adapter_driver->transports);
451+
return allow_transports(CMD_CTX, adapter_driver->transport_ids,
452+
adapter_driver->transport_preferred_id);
451453
}
452454

453455
/* no valid adapter driver was found (i.e. the configuration option,

src/jtag/drivers/am335xgpio.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,6 @@ static const struct command_registration am335xgpio_command_handlers[] = {
350350
COMMAND_REGISTRATION_DONE
351351
};
352352

353-
static const char * const am335xgpio_transports[] = { "jtag", "swd", NULL };
354-
355353
static struct jtag_interface am335xgpio_interface = {
356354
.supported = DEBUG_CAP_TMS_SEQ,
357355
.execute_queue = bitbang_execute_queue,
@@ -494,7 +492,8 @@ static int am335xgpio_quit(void)
494492

495493
struct adapter_driver am335xgpio_adapter_driver = {
496494
.name = "am335xgpio",
497-
.transports = am335xgpio_transports,
495+
.transport_ids = TRANSPORT_JTAG | TRANSPORT_SWD,
496+
.transport_preferred_id = TRANSPORT_JTAG,
498497
.commands = am335xgpio_command_handlers,
499498

500499
.init = am335xgpio_init,

src/jtag/drivers/amt_jtagaccel.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,8 @@ static struct jtag_interface amt_jtagaccel_interface = {
579579

580580
struct adapter_driver amt_jtagaccel_adapter_driver = {
581581
.name = "amt_jtagaccel",
582-
.transports = jtag_only,
582+
.transport_ids = TRANSPORT_JTAG,
583+
.transport_preferred_id = TRANSPORT_JTAG,
583584
.commands = amtjtagaccel_command_handlers,
584585

585586
.init = amt_jtagaccel_init,

src/jtag/drivers/angie.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2388,7 +2388,8 @@ static struct jtag_interface angie_interface = {
23882388

23892389
struct adapter_driver angie_adapter_driver = {
23902390
.name = "angie",
2391-
.transports = jtag_only,
2391+
.transport_ids = TRANSPORT_JTAG,
2392+
.transport_preferred_id = TRANSPORT_JTAG,
23922393

23932394
.init = angie_init,
23942395
.quit = angie_quit,

src/jtag/drivers/arm-jtag-ew.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,8 @@ static struct jtag_interface armjtagew_interface = {
486486

487487
struct adapter_driver armjtagew_adapter_driver = {
488488
.name = "arm-jtag-ew",
489-
.transports = jtag_only,
489+
.transport_ids = TRANSPORT_JTAG,
490+
.transport_preferred_id = TRANSPORT_JTAG,
490491
.commands = armjtagew_command_handlers,
491492

492493
.init = armjtagew_init,

src/jtag/drivers/at91rm9200.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ static struct jtag_interface at91rm9200_interface = {
186186

187187
struct adapter_driver at91rm9200_adapter_driver = {
188188
.name = "at91rm9200",
189-
.transports = jtag_only,
189+
.transport_ids = TRANSPORT_JTAG,
190+
.transport_preferred_id = TRANSPORT_JTAG,
190191
.commands = at91rm9200_command_handlers,
191192

192193
.init = at91rm9200_init,

src/jtag/drivers/bcm2835gpio.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -590,15 +590,14 @@ static int bcm2835gpio_quit(void)
590590
}
591591

592592

593-
static const char * const bcm2835_transports[] = { "jtag", "swd", NULL };
594-
595593
static struct jtag_interface bcm2835gpio_interface = {
596594
.supported = DEBUG_CAP_TMS_SEQ,
597595
.execute_queue = bitbang_execute_queue,
598596
};
599597
struct adapter_driver bcm2835gpio_adapter_driver = {
600598
.name = "bcm2835gpio",
601-
.transports = bcm2835_transports,
599+
.transport_ids = TRANSPORT_JTAG | TRANSPORT_SWD,
600+
.transport_preferred_id = TRANSPORT_JTAG,
602601
.commands = bcm2835gpio_command_handlers,
603602

604603
.init = bcm2835gpio_init,

src/jtag/drivers/buspirate.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -534,15 +534,14 @@ static const struct swd_driver buspirate_swd = {
534534
.run = buspirate_swd_run_queue,
535535
};
536536

537-
static const char * const buspirate_transports[] = { "jtag", "swd", NULL };
538-
539537
static struct jtag_interface buspirate_interface = {
540538
.execute_queue = buspirate_execute_queue,
541539
};
542540

543541
struct adapter_driver buspirate_adapter_driver = {
544542
.name = "buspirate",
545-
.transports = buspirate_transports,
543+
.transport_ids = TRANSPORT_JTAG | TRANSPORT_SWD,
544+
.transport_preferred_id = TRANSPORT_JTAG,
546545
.commands = buspirate_command_handlers,
547546

548547
.init = buspirate_init,

src/jtag/drivers/cmsis_dap.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2314,16 +2314,15 @@ static const struct swd_driver cmsis_dap_swd_driver = {
23142314
.run = cmsis_dap_swd_run_queue,
23152315
};
23162316

2317-
static const char * const cmsis_dap_transport[] = { "swd", "jtag", NULL };
2318-
23192317
static struct jtag_interface cmsis_dap_interface = {
23202318
.supported = DEBUG_CAP_TMS_SEQ,
23212319
.execute_queue = cmsis_dap_execute_queue,
23222320
};
23232321

23242322
struct adapter_driver cmsis_dap_adapter_driver = {
23252323
.name = "cmsis-dap",
2326-
.transports = cmsis_dap_transport,
2324+
.transport_ids = TRANSPORT_SWD | TRANSPORT_JTAG,
2325+
.transport_preferred_id = TRANSPORT_SWD,
23272326
.commands = cmsis_dap_command_handlers,
23282327

23292328
.init = cmsis_dap_init,

src/jtag/drivers/dmem.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -604,11 +604,10 @@ static const struct dap_ops dmem_dap_ops = {
604604
.run = dmem_dp_run,
605605
};
606606

607-
static const char *const dmem_dap_transport[] = { "dapdirect_swd", NULL };
608-
609607
struct adapter_driver dmem_dap_adapter_driver = {
610608
.name = "dmem",
611-
.transports = dmem_dap_transport,
609+
.transport_ids = TRANSPORT_DAPDIRECT_SWD,
610+
.transport_preferred_id = TRANSPORT_DAPDIRECT_SWD,
612611
.commands = dmem_dap_command_handlers,
613612

614613
.init = dmem_dap_init,

0 commit comments

Comments
 (0)