summaryrefslogtreecommitdiff
path: root/src/jtag/zy1000/jtag_minidriver.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jtag/zy1000/jtag_minidriver.h')
-rw-r--r--src/jtag/zy1000/jtag_minidriver.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/jtag/zy1000/jtag_minidriver.h b/src/jtag/zy1000/jtag_minidriver.h
index f3fe5a6a..0f2b46a0 100644
--- a/src/jtag/zy1000/jtag_minidriver.h
+++ b/src/jtag/zy1000/jtag_minidriver.h
@@ -58,8 +58,14 @@ static __inline__ void waitIdle(void)
ZY1000_PEEK(ZY1000_JTAG_BASE + 0x10, empty);
} while ((empty & 0x100) == 0);
}
+
+static __inline__ void zy1000_flush_readqueue(void)
+{
+ /* Not used w/hardware fifo */
+}
#else
extern void waitIdle(void);
+void zy1000_flush_readqueue(void);
#endif
static __inline__ void waitQueue(void)
@@ -222,6 +228,6 @@ static __inline__ void interface_jtag_add_dr_out(struct jtag_tap *target_tap,
}
}
-#define interface_jtag_add_callback(callback, in) callback(in)
-
-#define interface_jtag_add_callback4(callback, in, data1, data2, data3) jtag_set_error(callback(in, data1, data2, data3))
+/* Must flush any read queue before we can invoke callback */
+#define interface_jtag_add_callback(callback, in) {zy1000_flush_readqueue(); callback(in);}
+#define interface_jtag_add_callback4(callback, in, data1, data2, data3) {zy1000_flush_readqueue(); jtag_set_error(callback(in, data1, data2, data3));}