cmd: add missing usage var
[fw/openocd] / src / jtag / interface.h
index d55782ad8574d79bb7c7c73abf092dfc26138e20..1059436e067bbe3be4d0b057d3d87ec352621bd2 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef OPENOCD_JTAG_INTERFACE_H
 #define OPENOCD_JTAG_INTERFACE_H
 
-#include "jtag.h"
+#include <jtag/jtag.h>
 
 /* @file
  * The "Cable Helper API" is what the cable drivers can use to help
@@ -184,10 +184,33 @@ static inline tap_state_t jtag_debug_state_machine(const void *tms_buf,
 }
 #endif // _DEBUG_JTAG_IO_
 
+/**
+ * Represents a driver for a debugging interface.
+ *
+ * @todo Rename; perhaps "debug_driver".  This isn't an interface,
+ * it's a driver!  Also, not all drivers support JTAG.
+ *
+ * @todo We need a per-instance structure too, and changes to pass
+ * that structure to the driver.  Instances can for example be in
+ * either SWD or JTAG modes.  This will help remove globals, and
+ * eventually to cope with systems which have more than one such
+ * debugging interface.
+ */
 struct jtag_interface {
        /// The name of the JTAG interface driver.
        char* name;
 
+       /**
+        * Bit vector listing capabilities exposed by this driver.
+        */
+       unsigned supported;
+#define DEBUG_CAP_TMS_SEQ      (1 << 0)
+
+       /** transports supported in C code (NULL terminated vector) */
+       const char **transports;
+
+       const struct swd_driver *swd;
+
        /**
         * Execute queued commands.
         * @returns ERROR_OK on success, or an error code on failure.
@@ -208,8 +231,14 @@ struct jtag_interface {
        const struct command_registration *commands;
 
        /**
-        * Interface driver must initalize any resources and connect to a
+        * Interface driver must initialize any resources and connect to a
         * JTAG device.
+        *
+        * quit() is invoked if and only if init() succeeds. quit() is always
+        * invoked if init() succeeds. Same as malloc() + free(). Always
+        * invoke free() if malloc() succeeds and do not invoke free()
+        * otherwise.
+        *
         * @returns ERROR_OK on success, or an error code on failure.
         */
        int (*init)(void);
@@ -217,6 +246,7 @@ struct jtag_interface {
        /**
         * Interface driver must tear down all resources and disconnect from
         * the JTAG device.
+        *
         * @returns ERROR_OK on success, or an error code on failure.
         */
        int (*quit)(void);
@@ -271,4 +301,8 @@ struct jtag_interface {
 };
 
 
+extern const char *jtag_only[];
+
+extern const struct swd_driver *swd;
+
 #endif // OPENOCD_JTAG_INTERFACE_H