X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fdrivers%2Frlink.c;h=d0b18b1ba94b0013c9ce4d29c6df859e7f8959f1;hp=ae3431bee55e092a5ee388f7c9c71c8bbccb971b;hb=5812ef2b73db2f513f9c42d6cf4b695268d04d69;hpb=6f1641a5cc132fa88fa18f5571d2d29330308a55 diff --git a/src/jtag/drivers/rlink.c b/src/jtag/drivers/rlink.c index ae3431bee5..d0b18b1ba9 100644 --- a/src/jtag/drivers/rlink.c +++ b/src/jtag/drivers/rlink.c @@ -678,6 +678,10 @@ dtc_queue_run(void) { uint8_t dtc_mask, tdo_mask; uint8_t reply_buffer[USB_EP2IN_SIZE]; + assert((dtc_queue.rq_head != 0) == (dtc_queue.reply_index > 0)); + assert(dtc_queue.cmd_index < USB_EP2BANK_SIZE); + assert(dtc_queue.reply_index <= USB_EP2IN_SIZE); + retval = ERROR_OK; if (dtc_queue.cmd_index < 1) return(retval); @@ -807,8 +811,6 @@ dtc_queue_run(void) { return(retval); } - - static int tap_state_queue_init(void) { @@ -1232,6 +1234,7 @@ rlink_scan( LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno)); exit(1); } + dtc_queue.reply_index += (chunk_bits + 7) / 8; tdi_bit_offset += chunk_bits; } @@ -1264,7 +1267,6 @@ rlink_scan( dtc_mask >>= 1; if (dtc_mask == 0) { dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x; - dtc_queue.reply_index++; x = 0; dtc_mask = 1 << (8 - 1); } @@ -1298,6 +1300,8 @@ rlink_scan( exit(1); } + dtc_queue.reply_index++; + tdi_bit_offset += extra_bits; if (type == SCAN_IN) { @@ -1327,8 +1331,6 @@ rlink_scan( dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x; } - - dtc_queue.reply_index++; } /* Schedule the last bit into the DTC command buffer */ @@ -1355,10 +1357,10 @@ rlink_scan( exit(1); } + dtc_queue.reply_index++; + dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1); - - dtc_queue.reply_index++; } /* Move to pause state */