transport: use helper/list.h for the list of transports
No behavioral change, just use the list's helpers. Change-Id: I69712648ef77689bfe6acc4811adad7293fb9009 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/8684 Reviewed-by: zapb <dev@zapb.de> Tested-by: jenkins
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
#include <helper/align.h>
|
#include <helper/align.h>
|
||||||
#include <helper/bits.h>
|
#include <helper/bits.h>
|
||||||
|
#include <helper/list.h>
|
||||||
#include <helper/log.h>
|
#include <helper/log.h>
|
||||||
#include <helper/replacements.h>
|
#include <helper/replacements.h>
|
||||||
#include <transport/transport.h>
|
#include <transport/transport.h>
|
||||||
@@ -59,7 +60,7 @@ static const struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** List of transports registered in OpenOCD. */
|
/** List of transports registered in OpenOCD. */
|
||||||
static struct transport *transport_list;
|
static OOCD_LIST_HEAD(transport_list);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bitmask of transport IDs which the currently selected debug adapter supports.
|
* Bitmask of transport IDs which the currently selected debug adapter supports.
|
||||||
@@ -98,7 +99,8 @@ static int transport_select(struct command_context *ctx, const char *name)
|
|||||||
{
|
{
|
||||||
/* name may only identify a known transport;
|
/* name may only identify a known transport;
|
||||||
* caller guarantees session's transport isn't yet set.*/
|
* caller guarantees session's transport isn't yet set.*/
|
||||||
for (struct transport *t = transport_list; t; t = t->next) {
|
struct transport *t;
|
||||||
|
list_for_each_entry(t, &transport_list, lh) {
|
||||||
if (!strcmp(transport_name(t->id), name)) {
|
if (!strcmp(transport_name(t->id), name)) {
|
||||||
int retval = t->select(ctx);
|
int retval = t->select(ctx);
|
||||||
/* select() registers commands specific to this
|
/* select() registers commands specific to this
|
||||||
@@ -193,7 +195,7 @@ int transport_register(struct transport *new_transport)
|
|||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (t = transport_list; t; t = t->next) {
|
list_for_each_entry(t, &transport_list, lh) {
|
||||||
if (t->id == new_transport->id) {
|
if (t->id == new_transport->id) {
|
||||||
LOG_ERROR("transport '%s' already registered",
|
LOG_ERROR("transport '%s' already registered",
|
||||||
transport_name(t->id));
|
transport_name(t->id));
|
||||||
@@ -206,8 +208,7 @@ int transport_register(struct transport *new_transport)
|
|||||||
transport_name(new_transport->id));
|
transport_name(new_transport->id));
|
||||||
|
|
||||||
/* splice this into the list */
|
/* splice this into the list */
|
||||||
new_transport->next = transport_list;
|
list_add(&new_transport->lh, &transport_list);
|
||||||
transport_list = new_transport;
|
|
||||||
LOG_DEBUG("register '%s' (ID %d)",
|
LOG_DEBUG("register '%s' (ID %d)",
|
||||||
transport_name(new_transport->id), new_transport->id);
|
transport_name(new_transport->id), new_transport->id);
|
||||||
|
|
||||||
@@ -270,7 +271,8 @@ COMMAND_HANDLER(handle_transport_list)
|
|||||||
|
|
||||||
command_print(CMD, "The following transports are available:");
|
command_print(CMD, "The following transports are available:");
|
||||||
|
|
||||||
for (struct transport *t = transport_list; t; t = t->next)
|
struct transport *t;
|
||||||
|
list_for_each_entry(t, &transport_list, lh)
|
||||||
command_print(CMD, "\t%s", transport_name(t->id));
|
command_print(CMD, "\t%s", transport_name(t->id));
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include "helper/bits.h"
|
#include "helper/bits.h"
|
||||||
#include "helper/command.h"
|
#include "helper/command.h"
|
||||||
|
#include "helper/list.h"
|
||||||
|
|
||||||
#define TRANSPORT_JTAG BIT(0)
|
#define TRANSPORT_JTAG BIT(0)
|
||||||
#define TRANSPORT_SWD BIT(1)
|
#define TRANSPORT_SWD BIT(1)
|
||||||
@@ -84,9 +85,9 @@ struct transport {
|
|||||||
int (*override_target)(const char **targetname);
|
int (*override_target)(const char **targetname);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transports are stored in a singly linked list.
|
* Transports are stored in a linked list.
|
||||||
*/
|
*/
|
||||||
struct transport *next;
|
struct list_head lh;
|
||||||
};
|
};
|
||||||
|
|
||||||
int transport_register(struct transport *new_transport);
|
int transport_register(struct transport *new_transport);
|
||||||
|
|||||||
Reference in New Issue
Block a user