X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Finterface.h;h=58bfd02b0a4054c6eaea3dfe722f741c656714a0;hb=dc7b32ea4a00a425a71b3309f3fceb07b8467592;hp=6e4237afc50c3ce13e7d399332d387fdb91e2d0e;hpb=8850eb8f2c5142346e5a450b13d56130691cd894;p=openocd.git diff --git a/src/jtag/interface.h b/src/jtag/interface.h index 6e4237afc5..58bfd02b0a 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -26,7 +26,8 @@ #define OPENOCD_JTAG_INTERFACE_H #include -#include +#include +#include /* @file * The "Cable Helper API" is what the cable drivers can use to help @@ -192,32 +193,34 @@ static inline tap_state_t jtag_debug_state_machine(const void *tms_buf, * debugging interface. */ struct jtag_interface { - /** The name of the JTAG interface driver. */ - const char * const 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 * const *transports; - - const struct swd_driver *swd; - /** * Execute queued commands. * @returns ERROR_OK on success, or an error code on failure. */ int (*execute_queue)(void); +}; - /** - * Set the interface speed. - * @param speed The new interface speed setting. - * @returns ERROR_OK on success, or an error code on failure. - */ - int (*speed)(int speed); +/** + * Represents a driver for a debugging interface + * + * @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 adapter_driver { + /** The name of the interface driver. */ + const char * const name; + + /** transports supported in C code (NULL terminated vector) */ + const char * const *transports; /** * The interface driver may register additional commands to expose @@ -248,6 +251,8 @@ struct jtag_interface { /** * Control (assert/deassert) the signals SRST and TRST on the interface. + * This function is synchronous and should be called after the adapter + * queue has been properly flushed. * This function is optional. * Adapters that don't support resets can either not define this function * or return an error code. @@ -261,7 +266,14 @@ struct jtag_interface { int (*reset)(int srst, int trst); /** - * Returns JTAG maxium speed for KHz. 0 = RTCK. The function returns + * Set the interface speed. + * @param speed The new interface speed setting. + * @returns ERROR_OK on success, or an error code on failure. + */ + int (*speed)(int speed); + + /** + * Returns JTAG maximum speed for KHz. 0 = RTCK. The function returns * a failure if it can't support the KHz/RTCK. * * WARNING!!!! if RTCK is *slow* then think carefully about @@ -336,13 +348,28 @@ struct jtag_interface { * @returns ERROR_OK on success, an error code on failure. */ int (*poll_trace)(uint8_t *buf, size_t *size); + + /** Low-level JTAG APIs */ + struct jtag_interface *jtag_ops; + + /** Low-level SWD APIs */ + const struct swd_driver *swd_ops; + + /* DAP APIs over JTAG transport */ + const struct dap_ops *dap_jtag_ops; + + /* DAP APIs over SWD transport */ + const struct dap_ops *dap_swd_ops; + + /* SWIM APIs */ + const struct swim_driver *swim_ops; }; extern const char * const jtag_only[]; int adapter_resets(int assert_trst, int assert_srst); -void adapter_assert_reset(void); -void adapter_deassert_reset(void); +int adapter_assert_reset(void); +int adapter_deassert_reset(void); int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol, uint32_t port_size, unsigned int *trace_freq, unsigned int traceclkin_freq, uint16_t *prescaler);