]> git.sur5r.net Git - openocd/blobdiff - src/jtag/core.c
zy1000: switch to pthread
[openocd] / src / jtag / core.c
index dfedc172df342d8d8e9fac199ff6fa3e69cf5239..68c125707bbbf92bcb7b1f5f2450175d946928cb 100644 (file)
@@ -129,6 +129,9 @@ static int jtag_speed = 0;
 
 static struct jtag_interface *jtag = NULL;
 
+
+const struct swd_driver *swd = NULL;
+
 /* configuration */
 struct jtag_interface *jtag_interface = NULL;
 
@@ -213,7 +216,7 @@ void jtag_tap_add(struct jtag_tap *t)
 }
 
 /* returns a pointer to the n-th device in the scan chain */
-static inline struct jtag_tap *jtag_tap_by_position(unsigned n)
+struct jtag_tap *jtag_tap_by_position(unsigned n)
 {
        struct jtag_tap *t = jtag_all_taps();
 
@@ -692,7 +695,7 @@ void jtag_add_reset(int req_tlr_or_trst, int req_srst)
                        retval = jtag_execute_queue();
 
                if (retval != ERROR_OK) {
-                       LOG_ERROR("TRST/SRST error %d", retval);
+                       LOG_ERROR("TRST/SRST error");
                        return;
                }
        }
@@ -868,9 +871,16 @@ static int jtag_reset_callback(enum jtag_event event, void *priv)
        return ERROR_OK;
 }
 
+/* sleep at least us microseconds. When we sleep more than 1000ms we
+ * do an alive sleep, i.e. keep GDB alive. Note that we could starve
+ * GDB if we slept for <1000ms many times.
+ */
 void jtag_sleep(uint32_t us)
 {
-       alive_sleep(us/1000);
+       if (us < 1000)
+               usleep(us);
+       else
+               alive_sleep((us+999)/1000);
 }
 
 /* Maximum number of enabled JTAG devices we expect in the scan chain,