X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fjtag%2Fjtag.h;h=4f94e991357a57a90727ffd217696671156ccf1d;hb=de99836cf639b63dc357a34c13825669af841f17;hp=0fe3a4a509f89cc468ddcc43ae2e3879da09f6d3;hpb=517ba0690dcc9e859a05df2113ce32401a5ab254;p=fw%2Fopenocd diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 0fe3a4a50..4f94e9913 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -1,39 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + /*************************************************************************** * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * * Copyright (C) 2007-2010 Øyvind Harboe * * oyvind.harboe@zylin.com * -* * -* 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., * -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * ***************************************************************************/ -#ifndef JTAG_H -#define JTAG_H +#ifndef OPENOCD_JTAG_JTAG_H +#define OPENOCD_JTAG_JTAG_H #include #include - -#ifdef _DEBUG_JTAG_IO_ -#define DEBUG_JTAG_IO(expr ...) \ - do { if (1) LOG_DEBUG(expr); } while (0) -#else -#define DEBUG_JTAG_IO(expr ...) \ - do { if (0) LOG_DEBUG(expr); } while (0) -#endif +#include #ifndef DEBUG_JTAG_IOZ #define DEBUG_JTAG_IOZ 64 @@ -56,15 +36,6 @@ typedef enum tap_state { TAP_INVALID = -1, -#if BUILD_ZY1000 - /* These are the old numbers. Leave as-is for now... */ - TAP_RESET = 0, TAP_IDLE = 8, - TAP_DRSELECT = 1, TAP_DRCAPTURE = 2, TAP_DRSHIFT = 3, TAP_DREXIT1 = 4, - TAP_DRPAUSE = 5, TAP_DREXIT2 = 6, TAP_DRUPDATE = 7, - TAP_IRSELECT = 9, TAP_IRCAPTURE = 10, TAP_IRSHIFT = 11, TAP_IREXIT1 = 12, - TAP_IRPAUSE = 13, TAP_IREXIT2 = 14, TAP_IRUPDATE = 15, - -#else /* Proper ARM recommended numbers */ TAP_DREXIT2 = 0x0, TAP_DREXIT1 = 0x1, @@ -82,10 +53,16 @@ typedef enum tap_state { TAP_IRUPDATE = 0xd, TAP_IRCAPTURE = 0xe, TAP_RESET = 0x0f, - -#endif } tap_state_t; +/** + * Defines arguments for reset functions + */ +#define SRST_DEASSERT 0 +#define SRST_ASSERT 1 +#define TRST_DEASSERT 0 +#define TRST_ASSERT 1 + /** * Function tap_state_name * Returns a string suitable for display representing the JTAG tap_state @@ -107,7 +84,7 @@ extern tap_state_t cmd_queue_cur_state; * jtag_add_dr_scan_check() to validate the value that was scanned out. */ struct scan_field { - /** The number of bits this field specifies (up to 32) */ + /** The number of bits this field specifies */ int num_bits; /** A pointer to value to be scanned into the device */ const uint8_t *out_value; @@ -147,6 +124,9 @@ struct jtag_tap { /** Flag saying whether to ignore version field in expected_ids[] */ bool ignore_version; + /** Flag saying whether to ignore the bypass bit in the code */ + bool ignore_bypass; + /** current instruction */ uint8_t *cur_instr; /** Bypass register selected */ @@ -155,8 +135,6 @@ struct jtag_tap { struct jtag_tap_event_action *event_action; struct jtag_tap *next_tap; - /* dap instance if some null if no instance , initialized to 0 by calloc*/ - struct adiv5_dap *dap; /* private pointer to support none-jtag specific functions */ void *priv; }; @@ -166,8 +144,8 @@ void jtag_tap_free(struct jtag_tap *tap); struct jtag_tap *jtag_all_taps(void); const char *jtag_tap_name(const struct jtag_tap *tap); -struct jtag_tap *jtag_tap_by_string(const char* dotted_name); -struct jtag_tap *jtag_tap_by_jim_obj(Jim_Interp* interp, Jim_Obj *obj); +struct jtag_tap *jtag_tap_by_string(const char *dotted_name); +struct jtag_tap *jtag_tap_by_jim_obj(Jim_Interp *interp, Jim_Obj *obj); struct jtag_tap *jtag_tap_by_position(unsigned abs_position); struct jtag_tap *jtag_tap_next_enabled(struct jtag_tap *p); unsigned jtag_tap_count_enabled(void); @@ -214,11 +192,11 @@ struct jtag_tap_event_action { }; /** - * Defines the function signature requide for JTAG event callback + * Defines the function signature required for JTAG event callback * functions, which are added with jtag_register_event_callback() * and removed jtag_unregister_event_callback(). * @param event The event to handle. - * @param prive A pointer to data that was passed to + * @param priv A pointer to data that was passed to * jtag_register_event_callback(). * @returns Must return ERROR_OK on success, or an error code on failure. * @@ -231,31 +209,6 @@ int jtag_unregister_event_callback(jtag_event_handler_t f, void *x); int jtag_call_event_callbacks(enum jtag_event event); - -/** @returns The current JTAG speed setting. */ -int jtag_get_speed(int *speed); - -/** - * Given a @a speed setting, use the interface @c speed_div callback to - * adjust the setting. - * @param speed The speed setting to convert back to readable KHz. - * @returns ERROR_OK if the interface has not been initialized or on success; - * otherwise, the error code produced by the @c speed_div callback. - */ -int jtag_get_speed_readable(int *speed); - -/** Attempt to configure the interface for the specified KHz. */ -int jtag_config_khz(unsigned khz); - -/** - * Attempt to enable RTCK/RCLK. If that fails, fallback to the - * specified frequency. - */ -int jtag_config_rclk(unsigned fallback_speed_khz); - -/** Retreives the clock speed of the JTAG interface in KHz. */ -unsigned jtag_get_speed_khz(void); - enum reset_types { RESET_NONE = 0x0, RESET_HAS_TRST = 0x1, @@ -299,12 +252,6 @@ void jtag_set_verify_capture_ir(bool enable); /** @returns True if IR scan verification will be performed. */ bool jtag_will_verify_capture_ir(void); -/** Initialize debug adapter upon startup. */ -int adapter_init(struct command_context *cmd_ctx); - -/** Shutdown the debug adapter upon program exit. */ -int adapter_quit(void); - /** Set ms to sleep after jtag_execute_queue() flushes queue. Debug purposes. */ void jtag_set_flush_queue_sleep(int ms); @@ -396,7 +343,7 @@ typedef intptr_t jtag_callback_data_t; typedef void (*jtag_callback1_t)(jtag_callback_data_t data0); /** A simpler version of jtag_add_callback4(). */ -void jtag_add_callback(jtag_callback1_t, jtag_callback_data_t data0); +void jtag_add_callback(jtag_callback1_t f, jtag_callback_data_t data0); /** @@ -411,7 +358,7 @@ void jtag_add_callback(jtag_callback1_t, jtag_callback_data_t data0); * assumptions about what the callback does or what its arguments are. * These callbacks are typically executed *after* the *entire* JTAG * queue has been executed for e.g. USB interfaces, and they are - * guaranteeed to be invoked in the order that they were queued. + * guaranteed to be invoked in the order that they were queued. * * If the execution of the queue fails before the callbacks, then -- * depending on driver implementation -- the callbacks may or may not be @@ -461,7 +408,7 @@ void jtag_add_tlr(void); * path when transitioning to/from end * state. * - * A list of unambigious single clock state transitions, not + * A list of unambiguous single clock state transitions, not * all drivers can support this, but it is required for e.g. * XScale and Xilinx support * @@ -588,7 +535,8 @@ int jtag_srst_asserted(int *srst_asserted); * @param field Pointer to scan field. * @param value Pointer to scan value. * @param mask Pointer to scan mask; may be NULL. - * @returns Nothing, but calls jtag_set_error() on any error. + * + * returns Nothing, but calls jtag_set_error() on any error. */ void jtag_check_value_mask(struct scan_field *field, uint8_t *value, uint8_t *mask); @@ -609,33 +557,6 @@ void jtag_sleep(uint32_t us); #define ERROR_JTAG_TRANSITION_INVALID (-109) #define ERROR_JTAG_INIT_SOFT_FAIL (-110) -/** - * jtag_add_dr_out() is a version of jtag_add_dr_scan() which - * only scans data out. It operates on 32 bit integers instead - * of 8 bit, which makes it a better impedance match with - * the calling code which often operate on 32 bit integers. - * - * Current or end_state can not be TAP_RESET. end_state can be TAP_INVALID - * - * num_bits[i] is the number of bits to clock out from value[i] LSB first. - * - * If the device is in bypass, then that is an error condition in - * the caller code that is not detected by this fn, whereas - * jtag_add_dr_scan() does detect it. Similarly if the device is not in - * bypass, data must be passed to it. - * - * If anything fails, then jtag_error will be set and jtag_execute() will - * return an error. There is no way to determine if there was a failure - * during this function call. - * - * This is an inline fn to speed up embedded hosts. Also note that - * interface_jtag_add_dr_out() can be a *small* inline function for - * embedded hosts. - * - * There is no jtag_add_dr_outin() version of this fn that also allows - * clocking data back in. Patches gladly accepted! - */ - /** * Set the current JTAG core execution error, unless one was set * by a previous call previously. Driver or application code must @@ -666,13 +587,21 @@ bool jtag_poll_get_enabled(void); */ void jtag_poll_set_enabled(bool value); +/** + * Mask (disable) polling and return the current mask status that should be + * feed to jtag_poll_unmask() to restore it. + * Multiple nested calls to jtag_poll_mask() are allowed, each balanced with + * its call to jtag_poll_unmask(). + */ +bool jtag_poll_mask(void); + +/** + * Restore saved mask for polling. + */ +void jtag_poll_unmask(bool saved); -/* The minidriver may have inline versions of some of the low - * level APIs that are used in inner loops. */ #include -bool transport_is_jtag(void); - int jim_jtag_newtap(Jim_Interp *interp, int argc, Jim_Obj *const *argv); -#endif /* JTAG_H */ +#endif /* OPENOCD_JTAG_JTAG_H */