jtag/core: get rid of variable 'jtag'
[openocd.git] / src / jtag / core.c
index 51c1228a329285f2f6966798f8a36b3caa1f2787..f0c000a2418657ad9bbf80fc208d745f96567158 100644 (file)
@@ -128,13 +128,16 @@ static int speed_khz;
 /* speed to fallback to when RCLK is requested but not supported */
 static int rclk_fallback_speed_khz;
 static enum {CLOCK_MODE_UNSELECTED, CLOCK_MODE_KHZ, CLOCK_MODE_RCLK} clock_mode;
-static int jtag_speed;
-
-/* FIXME: change name to this variable, it is not anymore JTAG only */
-static struct adapter_driver *jtag;
 
 extern struct adapter_driver *adapter_driver;
 
+static bool adapter_initialized;
+
+static bool is_adapter_initialized(void)
+{
+       return adapter_initialized;
+}
+
 void jtag_set_flush_queue_sleep(int ms)
 {
        jtag_flush_queue_sleep = ms;
@@ -243,7 +246,7 @@ struct jtag_tap *jtag_tap_by_string(const char *s)
        struct jtag_tap *t = jtag_all_taps();
 
        while (t) {
-               if (0 == strcmp(t->dotted_name, s))
+               if (strcmp(t->dotted_name, s) == 0)
                        return t;
                t = t->next_tap;
        }
@@ -506,7 +509,7 @@ int jtag_add_tms_seq(unsigned nbits, const uint8_t *seq, enum tap_state state)
 {
        int retval;
 
-       if (!(jtag->jtag_ops->supported & DEBUG_CAP_TMS_SEQ))
+       if (!(adapter_driver->jtag_ops->supported & DEBUG_CAP_TMS_SEQ))
                return ERROR_JTAG_NOT_IMPLEMENTED;
 
        jtag_checks();
@@ -628,7 +631,7 @@ static int adapter_system_reset(int req_srst)
 
        /* Maybe change SRST signal state */
        if (jtag_srst != req_srst) {
-               retval = jtag->reset(0, req_srst);
+               retval = adapter_driver->reset(0, req_srst);
                if (retval != ERROR_OK) {
                        LOG_ERROR("SRST error");
                        return ERROR_FAIL;
@@ -765,7 +768,7 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
        int new_srst = 0;
        int new_trst = 0;
 
-       if (!jtag->reset) {
+       if (!adapter_driver->reset) {
                legacy_jtag_add_reset(req_tlr_or_trst, req_srst);
                return;
        }
@@ -814,7 +817,7 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
                /* guarantee jtag queue empty before changing reset status */
                jtag_execute_queue();
 
-               retval = jtag->reset(new_trst, new_srst);
+               retval = adapter_driver->reset(new_trst, new_srst);
                if (retval != ERROR_OK) {
                        jtag_set_error(retval);
                        LOG_ERROR("TRST/SRST error");
@@ -934,7 +937,7 @@ void jtag_check_value_mask(struct scan_field *field, uint8_t *value, uint8_t *ma
 
 int default_interface_jtag_execute_queue(void)
 {
-       if (!jtag) {
+       if (!is_adapter_initialized()) {
                LOG_ERROR("No JTAG interface configured yet.  "
                        "Issue 'init' command in startup scripts "
                        "before communicating with targets.");
@@ -950,11 +953,11 @@ int default_interface_jtag_execute_queue(void)
                 * The fix can be applied immediately after next release (v0.11.0 ?)
                 */
                LOG_ERROR("JTAG API jtag_execute_queue() called on non JTAG interface");
-               if (!jtag->jtag_ops || !jtag->jtag_ops->execute_queue)
+               if (!adapter_driver->jtag_ops || !adapter_driver->jtag_ops->execute_queue)
                        return ERROR_OK;
        }
 
-       int result = jtag->jtag_ops->execute_queue();
+       int result = adapter_driver->jtag_ops->execute_queue();
 
        struct jtag_command *cmd = jtag_command_queue;
        while (debug_level >= LOG_LVL_DEBUG_IO && cmd) {
@@ -1072,8 +1075,6 @@ void jtag_sleep(uint32_t us)
 
 #define JTAG_MAX_AUTO_TAPS 20
 
-#define EXTRACT_JEP106_BANK(X) (((X) & 0xf00) >> 8)
-#define EXTRACT_JEP106_ID(X)   (((X) & 0xfe) >> 1)
 #define EXTRACT_MFG(X)  (((X) & 0xffe) >> 1)
 #define EXTRACT_PART(X) (((X) & 0xffff000) >> 12)
 #define EXTRACT_VER(X)  (((X) & 0xf0000000) >> 28)
@@ -1141,7 +1142,7 @@ static void jtag_examine_chain_display(enum log_levels level, const char *msg,
                name, msg,
                (unsigned int)idcode,
                (unsigned int)EXTRACT_MFG(idcode),
-               jep106_manufacturer(EXTRACT_JEP106_BANK(idcode), EXTRACT_JEP106_ID(idcode)),
+               jep106_manufacturer(EXTRACT_MFG(idcode)),
                (unsigned int)EXTRACT_PART(idcode),
                (unsigned int)EXTRACT_VER(idcode));
 }
@@ -1197,7 +1198,7 @@ static bool jtag_examine_chain_match_tap(const struct jtag_tap *tap)
                        return true;
 
                /* treat "-expected-id 0" as a "don't-warn" wildcard */
-               if (0 == tap->expected_ids[ii])
+               if (tap->expected_ids[ii] == 0)
                        return true;
        }
 
@@ -1336,19 +1337,18 @@ out:
 static int jtag_validate_ircapture(void)
 {
        struct jtag_tap *tap;
-       int total_ir_length = 0;
        uint8_t *ir_test = NULL;
        struct scan_field field;
-       uint64_t val;
        int chain_pos = 0;
        int retval;
 
        /* when autoprobing, accommodate huge IR lengths */
-       for (tap = NULL, total_ir_length = 0;
-                       (tap = jtag_tap_next_enabled(tap)) != NULL;
-                       total_ir_length += tap->ir_length) {
+       int total_ir_length = 0;
+       for (tap = jtag_tap_next_enabled(NULL); tap; tap = jtag_tap_next_enabled(tap)) {
                if (tap->ir_length == 0)
                        total_ir_length += JTAG_IRLEN_MAX;
+               else
+                       total_ir_length += tap->ir_length;
        }
 
        /* increase length to add 2 bit sentinel after scan */
@@ -1398,7 +1398,7 @@ static int jtag_validate_ircapture(void)
                 */
                if (tap->ir_length == 0) {
                        tap->ir_length = 2;
-                       while ((val = buf_get_u64(ir_test, chain_pos, tap->ir_length + 1)) == 1
+                       while (buf_get_u64(ir_test, chain_pos, tap->ir_length + 1) == 1
                                        && tap->ir_length < JTAG_IRLEN_MAX) {
                                tap->ir_length++;
                        }
@@ -1414,7 +1414,7 @@ static int jtag_validate_ircapture(void)
                 * this part of the JTAG spec, so their capture mask/value
                 * attributes might disable this test.
                 */
-               val = buf_get_u64(ir_test, chain_pos, tap->ir_length);
+               uint64_t val = buf_get_u64(ir_test, chain_pos, tap->ir_length);
                if ((val & tap->ir_capture_mask) != tap->ir_capture_value) {
                        LOG_ERROR("%s: IR capture error; saw 0x%0*" PRIx64 " not 0x%0*" PRIx32,
                                jtag_tap_name(tap),
@@ -1430,7 +1430,7 @@ static int jtag_validate_ircapture(void)
        }
 
        /* verify the '11' sentinel we wrote is returned at the end */
-       val = buf_get_u64(ir_test, chain_pos, 2);
+       uint64_t val = buf_get_u64(ir_test, chain_pos, 2);
        if (val != 0x3) {
                char *cbuf = buf_to_hex_str(ir_test, total_ir_length);
 
@@ -1512,7 +1512,7 @@ void jtag_tap_free(struct jtag_tap *tap)
  */
 int adapter_init(struct command_context *cmd_ctx)
 {
-       if (jtag)
+       if (is_adapter_initialized())
                return ERROR_OK;
 
        if (!adapter_driver) {
@@ -1526,9 +1526,9 @@ int adapter_init(struct command_context *cmd_ctx)
        retval = adapter_driver->init();
        if (retval != ERROR_OK)
                return retval;
-       jtag = adapter_driver;
+       adapter_initialized = true;
 
-       if (!jtag->speed) {
+       if (!adapter_driver->speed) {
                LOG_INFO("This adapter doesn't support configurable speed");
                return ERROR_OK;
        }
@@ -1545,7 +1545,7 @@ int adapter_init(struct command_context *cmd_ctx)
        retval = jtag_get_speed(&jtag_speed_var);
        if (retval != ERROR_OK)
                return retval;
-       retval = jtag->speed(jtag_speed_var);
+       retval = adapter_driver->speed(jtag_speed_var);
        if (retval != ERROR_OK)
                return retval;
        retval = jtag_get_speed_readable(&actual_khz);
@@ -1647,9 +1647,9 @@ int jtag_init_inner(struct command_context *cmd_ctx)
 
 int adapter_quit(void)
 {
-       if (jtag && jtag->quit) {
+       if (is_adapter_initialized() && adapter_driver->quit) {
                /* close the JTAG interface */
-               int result = jtag->quit();
+               int result = adapter_driver->quit();
                if (result != ERROR_OK)
                        LOG_ERROR("failed: %d", result);
        }
@@ -1780,15 +1780,15 @@ static int adapter_khz_to_speed(unsigned khz, int *speed)
 {
        LOG_DEBUG("convert khz to interface specific speed value");
        speed_khz = khz;
-       if (!jtag)
+       if (!is_adapter_initialized())
                return ERROR_OK;
        LOG_DEBUG("have interface set up");
-       if (!jtag->khz) {
+       if (!adapter_driver->khz) {
                LOG_ERROR("Translation from khz to jtag_speed not implemented");
                return ERROR_FAIL;
        }
        int speed_div1;
-       int retval = jtag->khz(jtag_get_speed_khz(), &speed_div1);
+       int retval = adapter_driver->khz(jtag_get_speed_khz(), &speed_div1);
        if (retval != ERROR_OK)
                return retval;
        *speed = speed_div1;
@@ -1807,10 +1807,9 @@ static int jtag_rclk_to_speed(unsigned fallback_speed_khz, int *speed)
 
 static int jtag_set_speed(int speed)
 {
-       jtag_speed = speed;
        /* this command can be called during CONFIG,
         * in which case jtag isn't initialized */
-       return jtag ? jtag->speed(speed) : ERROR_OK;
+       return is_adapter_initialized() ? adapter_driver->speed(speed) : ERROR_OK;
 }
 
 int jtag_config_khz(unsigned khz)
@@ -1854,13 +1853,13 @@ int jtag_get_speed_readable(int *khz)
        int retval = jtag_get_speed(&jtag_speed_var);
        if (retval != ERROR_OK)
                return retval;
-       if (!jtag)
+       if (!is_adapter_initialized())
                return ERROR_OK;
-       if (!jtag->speed_div) {
+       if (!adapter_driver->speed_div) {
                LOG_ERROR("Translation from jtag_speed to khz not implemented");
                return ERROR_FAIL;
        }
-       return jtag->speed_div(jtag_speed_var, khz);
+       return adapter_driver->speed_div(jtag_speed_var, khz);
 }
 
 void jtag_set_verify(bool enable)
@@ -1885,14 +1884,14 @@ bool jtag_will_verify_capture_ir(void)
 
 int jtag_power_dropout(int *dropout)
 {
-       if (!jtag) {
+       if (!is_adapter_initialized()) {
                /* TODO: as the jtag interface is not valid all
                 * we can do at the moment is exit OpenOCD */
                LOG_ERROR("No Valid JTAG Interface Configured.");
                exit(-1);
        }
-       if (jtag->power_dropout)
-               return jtag->power_dropout(dropout);
+       if (adapter_driver->power_dropout)
+               return adapter_driver->power_dropout(dropout);
 
        *dropout = 0; /* by default we can't detect power dropout */
        return ERROR_OK;
@@ -1900,8 +1899,8 @@ int jtag_power_dropout(int *dropout)
 
 int jtag_srst_asserted(int *srst_asserted)
 {
-       if (jtag->srst_asserted)
-               return jtag->srst_asserted(srst_asserted);
+       if (adapter_driver->srst_asserted)
+               return adapter_driver->srst_asserted(srst_asserted);
 
        *srst_asserted = 0; /* by default we can't detect srst asserted */
        return ERROR_OK;
@@ -2008,7 +2007,7 @@ bool transport_is_jtag(void)
 
 int adapter_resets(int trst, int srst)
 {
-       if (get_current_transport() == NULL) {
+       if (!get_current_transport()) {
                LOG_ERROR("transport is not selected");
                return ERROR_FAIL;
        }
@@ -2065,7 +2064,7 @@ int adapter_assert_reset(void)
                           transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
                           transport_is_swim())
                return adapter_system_reset(1);
-       else if (get_current_transport() != NULL)
+       else if (get_current_transport())
                LOG_ERROR("reset is not supported on %s",
                        get_current_transport()->name);
        else
@@ -2082,7 +2081,7 @@ int adapter_deassert_reset(void)
                           transport_is_dapdirect_jtag() || transport_is_dapdirect_swd() ||
                           transport_is_swim())
                return adapter_system_reset(0);
-       else if (get_current_transport() != NULL)
+       else if (get_current_transport())
                LOG_ERROR("reset is not supported on %s",
                        get_current_transport()->name);
        else
@@ -2094,8 +2093,8 @@ 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)
 {
-       if (jtag->config_trace) {
-               return jtag->config_trace(enabled, pin_protocol, port_size, trace_freq,
+       if (adapter_driver->config_trace) {
+               return adapter_driver->config_trace(enabled, pin_protocol, port_size, trace_freq,
                        traceclkin_freq, prescaler);
        } else if (enabled) {
                LOG_ERROR("The selected interface does not support tracing");
@@ -2107,8 +2106,8 @@ int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
 
 int adapter_poll_trace(uint8_t *buf, size_t *size)
 {
-       if (jtag->poll_trace)
-               return jtag->poll_trace(buf, size);
+       if (adapter_driver->poll_trace)
+               return adapter_driver->poll_trace(buf, size);
 
        return ERROR_FAIL;
 }

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)