X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Finterface.h;h=410eef98079ac64187f59d4893afcc8e906c8882;hb=fafe6dfc9cd882f5cee4f4fa2b3971991d9e97b9;hp=c7130ccf4ff870d94058330a1d868c6e7f998f52;hpb=b675edcc95935cbdf77002db1e261536026f4cbe;p=openocd.git diff --git a/src/jtag/interface.h b/src/jtag/interface.h index c7130ccf4f..410eef9807 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -19,15 +19,14 @@ * 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., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * + * along with this program. If not, see . * ***************************************************************************/ #ifndef OPENOCD_JTAG_INTERFACE_H #define OPENOCD_JTAG_INTERFACE_H #include +#include /* @file * The "Cable Helper API" is what the cable drivers can use to help @@ -57,18 +56,11 @@ void tap_set_state_impl(tap_state_t new_state); * @param new_state The state we think the TAPs are currently in (or * are about to enter). */ -#if defined(_DEBUG_JTAG_IO_) #define tap_set_state(new_state) \ do { \ - LOG_DEBUG("tap_set_state(%s)", tap_state_name(new_state)); \ + LOG_DEBUG_IO("tap_set_state(%s)", tap_state_name(new_state)); \ tap_set_state_impl(new_state); \ } while (0) -#else -static inline void tap_set_state(tap_state_t new_state) -{ - tap_set_state_impl(new_state); -} -#endif /** * This function gets the state of the "state follower" which tracks the @@ -165,7 +157,7 @@ void tap_use_new_tms_table(bool use_new); /** @returns True if new TMS table is active; false otherwise. */ bool tap_uses_new_tms_table(void); -#ifdef _DEBUG_JTAG_IO_ + /** * @brief Prints verbose TAP state transitions for the given TMS/TDI buffers. * @param tms_buf must points to a buffer containing the TMS bitstream. @@ -174,15 +166,18 @@ bool tap_uses_new_tms_table(void); * @param start_tap_state must specify the current TAP state. * @returns the final TAP state; pass as @a start_tap_state in following call. */ -tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf, - unsigned tap_len, tap_state_t start_tap_state); -#else static inline tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf, unsigned tap_len, tap_state_t start_tap_state) { - return start_tap_state; + /* Private declaration */ + tap_state_t jtag_debug_state_machine_(const void *tms_buf, const void *tdi_buf, + unsigned tap_len, tap_state_t start_tap_state); + + if (LOG_LEVEL_IS(LOG_LVL_DEBUG_IO)) + return jtag_debug_state_machine_(tms_buf, tdi_buf, tap_len, start_tap_state); + else + return start_tap_state; } -#endif /* _DEBUG_JTAG_IO_ */ /** * Represents a driver for a debugging interface. @@ -298,11 +293,45 @@ struct jtag_interface { * @returns ERROR_OK on success, or an error code on failure. */ int (*srst_asserted)(int *srst_asserted); + + /** + * Configure trace parameters for the adapter + * + * @param enabled Whether to enable trace + * @param pin_protocol Configured pin protocol + * @param port_size Trace port width for sync mode + * @param trace_freq A pointer to the configured trace + * frequency; if it points to 0, the adapter driver must write + * its maximum supported rate there + * @param traceclkin_freq TRACECLKIN frequency provided to the TPIU in Hz + * @param prescaler Pointer to the SWO prescaler calculated by the + * adapter + * @returns ERROR_OK on success, an error code on failure. + */ + int (*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); + + /** + * Poll for new trace data + * + * @param buf A pointer to buffer to store received data + * @param size A pointer to buffer size; must be filled with + * the actual amount of bytes written + * + * @returns ERROR_OK on success, an error code on failure. + */ + int (*poll_trace)(uint8_t *buf, size_t *size); }; 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_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); +int adapter_poll_trace(uint8_t *buf, size_t *size); #endif /* OPENOCD_JTAG_INTERFACE_H */