summaryrefslogtreecommitdiff
path: root/src/jtag/transport.h
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2010-07-02 16:45:28 -0400
committerDavid Brownell <db@helium.(none)>2010-07-02 16:45:28 -0400
commit93f2afa45f4cfcb8afd08dae5a17996dba5c7a9c (patch)
tree0c03935bd09e77c5edd98e1b356f0ffbc3df239b /src/jtag/transport.h
parentdeb176d33514eb6b702b14043c338b2d0053f11d (diff)
downloadopenocd+libswd-93f2afa45f4cfcb8afd08dae5a17996dba5c7a9c.tar.gz
openocd+libswd-93f2afa45f4cfcb8afd08dae5a17996dba5c7a9c.tar.bz2
openocd+libswd-93f2afa45f4cfcb8afd08dae5a17996dba5c7a9c.tar.xz
openocd+libswd-93f2afa45f4cfcb8afd08dae5a17996dba5c7a9c.zip
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)>
Diffstat (limited to 'src/jtag/transport.h')
-rw-r--r--src/jtag/transport.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/jtag/transport.h b/src/jtag/transport.h
new file mode 100644
index 00000000..d2d38ec2
--- /dev/null
+++ b/src/jtag/transport.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 by David Brownell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include "helper/command.h"
+
+/**
+ * Wrapper for transport lifecycle operations.
+ *
+ * OpenOCD talks to targets through some kind of debugging
+ * or programming adapter, using some protocol that probably
+ * has target-specific aspects.
+ *
+ * A "transport" reflects electrical protocol to the target,
+ * e..g jtag, swd, spi, uart, ... NOT the messaging protocols
+ * layered over it (e.g. JTAG has eICE, CoreSight, Nexus, OnCE,
+ * and more).
+ *
+ * In addition to the lifecycle operations packaged by this
+ * structure, a transport also involves an interface supported
+ * by debug adapters and used by components such as debug targets.
+ * For non-debug transports, there may be interfaces used to
+ * write to flash chips.
+ */
+struct transport {
+ /**
+ * Each transport has a unique name, used to select it
+ * from among the alternatives. Examples might include
+ * "jtag", * "swd", "AVR_ISP" and more.
+ */
+ const char *name;
+
+ /**
+ * When a transport is selected, this method registers
+ * its commands and activates the transport (e.g. resets
+ * the link).
+ *
+ * After those commands are registered, they will often
+ * be used for further configuration of the debug link.
+ */
+ int (*select)(struct command_context *ctx);
+
+ /**
+ * server startup uses this method to validate transport
+ * configuration. (For example, with JTAG this interrogates
+ * the scan chain against the list of expected TAPs.)
+ */
+ int (*init)(struct command_context *ctx);
+
+ /**
+ * Transports are stored in a singly linked list.
+ */
+ struct transport *next;
+};
+
+int transport_register(struct transport *new_transport);
+
+struct transport *get_current_transport(void);
+
+int transport_register_commands(struct command_context *ctx);
+
+COMMAND_HELPER(transport_list_parse, char ***vector);
+
+int allow_transports(struct command_context *ctx, const char **vector);
+
+bool transports_are_declared(void);