rlink: fix reply counter to enable sending full buffers

dtc_queue.reply_index was wrongly being increased during out scans, causing
the queue to be sent before the out buffer was full. This patch increases
raw upload speed by 50% or so.

Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
This commit is contained in:
Andreas Fritiofson 2011-07-16 14:30:20 +02:00 committed by Øyvind Harboe
parent 6f1641a5cc
commit 5812ef2b73
1 changed files with 9 additions and 7 deletions

View File

@ -678,6 +678,10 @@ dtc_queue_run(void) {
uint8_t dtc_mask, tdo_mask; uint8_t dtc_mask, tdo_mask;
uint8_t reply_buffer[USB_EP2IN_SIZE]; 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; retval = ERROR_OK;
if (dtc_queue.cmd_index < 1) return(retval); if (dtc_queue.cmd_index < 1) return(retval);
@ -807,8 +811,6 @@ dtc_queue_run(void) {
return(retval); return(retval);
} }
static static
int int
tap_state_queue_init(void) { tap_state_queue_init(void) {
@ -1232,6 +1234,7 @@ rlink_scan(
LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno)); LOG_ERROR("enqueuing DTC reply entry: %s", strerror(errno));
exit(1); exit(1);
} }
dtc_queue.reply_index += (chunk_bits + 7) / 8;
tdi_bit_offset += chunk_bits; tdi_bit_offset += chunk_bits;
} }
@ -1264,7 +1267,6 @@ rlink_scan(
dtc_mask >>= 1; dtc_mask >>= 1;
if (dtc_mask == 0) { if (dtc_mask == 0) {
dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x; dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
dtc_queue.reply_index++;
x = 0; x = 0;
dtc_mask = 1 << (8 - 1); dtc_mask = 1 << (8 - 1);
} }
@ -1298,6 +1300,8 @@ rlink_scan(
exit(1); exit(1);
} }
dtc_queue.reply_index++;
tdi_bit_offset += extra_bits; tdi_bit_offset += extra_bits;
if (type == SCAN_IN) { if (type == SCAN_IN) {
@ -1327,8 +1331,6 @@ rlink_scan(
dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x; dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = x;
} }
dtc_queue.reply_index++;
} }
/* Schedule the last bit into the DTC command buffer */ /* Schedule the last bit into the DTC command buffer */
@ -1355,10 +1357,10 @@ rlink_scan(
exit(1); exit(1);
} }
dtc_queue.reply_index++;
dtc_queue.cmd_buffer[dtc_queue.cmd_index++] = dtc_queue.cmd_buffer[dtc_queue.cmd_index++] =
DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1); DTC_CMD_SHIFT_TMS_TDI_BIT_PAIR(1, (*tdi_p & tdi_mask), 1);
dtc_queue.reply_index++;
} }
/* Move to pause state */ /* Move to pause state */