mpsse: check available buffer space even for discarded data scans
[openocd.git] / src / jtag / drivers / mpsse.c
index 063ef2f..d6cbc84 100644 (file)
@@ -443,8 +443,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off
 
        while (length > 0) {
                /* Guarantee buffer space enough for a minimum size transfer */
-               if (buffer_write_space(ctx) + (length < 8) < (out ? 4 : 3)
-                   || (in && buffer_read_space(ctx) < 1))
+               if (buffer_write_space(ctx) + (length < 8) < (out || (!out && !in) ? 4 : 3)
+                               || (in && buffer_read_space(ctx) < 1))
                        retval = mpsse_flush(ctx);
 
                if (length < 8) {
@@ -465,8 +465,8 @@ int mpsse_clock_data(struct mpsse_ctx *ctx, const uint8_t *out, unsigned out_off
                        if (this_bytes > 65536)
                                this_bytes = 65536;
                        /* Buffer space limit. We already made sure there's space for the minimum
-                        *transfer. */
-                       if (out && this_bytes + 3 > buffer_write_space(ctx))
+                        * transfer. */
+                       if ((out || (!out && !in)) && this_bytes + 3 > buffer_write_space(ctx))
                                this_bytes = buffer_write_space(ctx) - 3;
                        if (in && this_bytes > buffer_read_space(ctx))
                                this_bytes = buffer_read_space(ctx);