initial "transport" framework
This adds the guts of a transport framework with initialization,
which should work with current JTAG-only configurations (tested
with FT2232).
Each debug adapter can declare the transports it supports, and
exactly one transport is initialized. (with its commands) in
any given OpenOCD session.
* Define a new "struct transport with init hooks and a few
"transport" subcommands to support it:
"list" ... list the transports configured (just "jtag" for now)
"select" ... makes the debug session use that transport
"init" ... initializes the selected transport (internal)
* "interface_transports" ... declares transports the current interface
can support. (Some will do this from C code instead, when there are
no hardware versioning (or other) issues to prevent it.
Plus some FT2232 tweaks, including a few to streamline upcoming
support for an SWD transport (initially for Luminary adapters).
Eventually src/jtag should probably become src/transport, moving
jtag-specific stuff to transport/jtag.
Signed-off-by: David Brownell <db@helium.(none)>
This commit is contained in:
committed by
David Brownell
parent
deb176d335
commit
93f2afa45f
@@ -35,6 +35,7 @@
|
||||
#include "minidriver.h"
|
||||
#include "interface.h"
|
||||
#include "interfaces.h"
|
||||
#include "transport.h"
|
||||
|
||||
#ifdef HAVE_STRINGS_H
|
||||
#include <strings.h>
|
||||
@@ -92,6 +93,25 @@ static int default_srst_asserted(int *srst_asserted)
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
COMMAND_HANDLER(interface_transport_command)
|
||||
{
|
||||
char **transports;
|
||||
int retval;
|
||||
|
||||
retval = CALL_COMMAND_HANDLER(transport_list_parse, &transports);
|
||||
if (retval != ERROR_OK) {
|
||||
return retval;
|
||||
|
||||
retval = allow_transports(CMD_CTX, (const char **)transports);
|
||||
if (retval != ERROR_OK) {
|
||||
for (unsigned i = 0; transports[i]; i++)
|
||||
free(transports[i]);
|
||||
free(transports);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
COMMAND_HANDLER(handle_interface_list_command)
|
||||
{
|
||||
if (strcmp(CMD_NAME, "interface_list") == 0 && CMD_ARGC > 0)
|
||||
@@ -451,6 +471,13 @@ static const struct command_registration interface_command_handlers[] = {
|
||||
.help = "Select a debug adapter interface (driver)",
|
||||
.usage = "driver_name",
|
||||
},
|
||||
{
|
||||
.name = "interface_transports",
|
||||
.handler = interface_transport_command,
|
||||
.mode = COMMAND_CONFIG,
|
||||
.help = "Declare transports the interface supports.",
|
||||
.usage = "transport ... ",
|
||||
},
|
||||
{
|
||||
.name = "interface_list",
|
||||
.handler = handle_interface_list_command,
|
||||
|
||||
Reference in New Issue
Block a user