bitq: remove the remaining static variables

in_mask and in_idx are just another encoding of the same state information
that is already kept in bitq_in_state.bit_pos so derive them from that
instead of maintaining them separately.

Change-Id: I4ac6bbe923698a8c1090a785b8babcbb90f82931
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/207
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Andreas Fritiofson 2011-11-16 00:10:44 +01:00 committed by Spencer Oliver
parent 287ba1888b
commit aef1fe6024
1 changed files with 6 additions and 19 deletions

View File

@ -32,7 +32,7 @@ struct bitq_interface* bitq_interface; /* low level bit queue interface */
struct bitq_state { struct bitq_state {
struct jtag_command *cmd; /* command currently processed */ struct jtag_command *cmd; /* command currently processed */
int field_idx; /* index of field currently being processed */ int field_idx; /* index of field currently being processed */
int bit_pos; /* position of bit curently being processed */ int bit_pos; /* position of bit currently being processed */
int status; /* processing status */ int status; /* processing status */
}; };
static struct bitq_state bitq_in_state; static struct bitq_state bitq_in_state;
@ -43,10 +43,6 @@ static struct bitq_state bitq_in_state;
*/ */
void bitq_in_proc(void) void bitq_in_proc(void)
{ {
/* static information preserved between calls to increase performance */
static int in_idx; /* index of byte being scanned */
static uint8_t in_mask; /* mask of next bit to be scanned */
struct scan_field* field; struct scan_field* field;
int tdo; int tdo;
@ -62,16 +58,14 @@ void bitq_in_proc(void)
field = &bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx]; field = &bitq_in_state.cmd->cmd.scan->fields[bitq_in_state.field_idx];
if (field->in_value) if (field->in_value)
{ {
if (bitq_in_state.bit_pos == 0)
{
/* initialize field scanning */
in_mask = 0x01;
in_idx = 0;
}
/* field scanning */ /* field scanning */
while (bitq_in_state.bit_pos < field->num_bits) while (bitq_in_state.bit_pos < field->num_bits)
{ {
/* index of byte being scanned */
int in_idx = bitq_in_state.bit_pos / 8;
/* mask of next bit to be scanned */
uint8_t in_mask = 1 << (bitq_in_state.bit_pos % 8);
if ((tdo = bitq_interface->in()) < 0) if ((tdo = bitq_interface->in()) < 0)
{ {
#ifdef _DEBUG_JTAG_IO_ #ifdef _DEBUG_JTAG_IO_
@ -83,13 +77,6 @@ void bitq_in_proc(void)
field->in_value[in_idx] = 0; field->in_value[in_idx] = 0;
if (tdo) if (tdo)
field->in_value[in_idx] |= in_mask; field->in_value[in_idx] |= in_mask;
if (in_mask == 0x80)
{
in_mask = 0x01;
in_idx++;
}
else
in_mask <<= 1;
bitq_in_state.bit_pos++; bitq_in_state.bit_pos++;
} }
} }