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:
David Brownell
2010-07-02 16:45:28 -04:00
committed by David Brownell
parent deb176d335
commit 93f2afa45f
10 changed files with 632 additions and 29 deletions

View File

@@ -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,