X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fbitq.c;h=56cc31e4f64ff92a8ae008a7eb4e03426e620450;hb=ff3150922b676223ad1acc4bcd127aa9fe03fa31;hp=47654a2df0a31faaaa5caa6923dcb6d657ddc40f;hpb=f90d8fa45f2d4c9d4b7990f198b232ee55cbb4e1;p=openocd.git diff --git a/src/jtag/bitq.c b/src/jtag/bitq.c index 47654a2df0..56cc31e4f6 100644 --- a/src/jtag/bitq.c +++ b/src/jtag/bitq.c @@ -27,7 +27,14 @@ bitq_interface_t* bitq_interface; /* low level bit queue interface */ -static bitq_state_t bitq_in_state; /* state of input queue */ +/* state of input queue */ +struct bitq_state { + jtag_command_t *cmd; /* command currently processed */ + int field_idx; /* index of field currently being processed */ + int bit_pos; /* position of bit curently being processed */ + int status; /* processing status */ +}; +static struct bitq_state bitq_in_state; static uint8_t* bitq_in_buffer; /* buffer dynamically reallocated as needed */ static int bitq_in_bufsize = 32; /* min. buffer size */ @@ -44,7 +51,7 @@ void bitq_in_proc(void) static int in_idx; /* index of byte being scanned */ static uint8_t in_mask; /* mask of next bit to be scanned */ - scan_field_t* field; + struct scan_field* field; int tdo; /* loop through the queue */ @@ -83,7 +90,7 @@ void bitq_in_proc(void) bitq_in_bufsize *= 2; } /* if necessary, allocate buffer and check for malloc error */ - if (bitq_in_buffer == NULL && (bitq_in_buffer = malloc(bitq_in_bufsize) ) == NULL) + if (bitq_in_buffer == NULL && (bitq_in_buffer = malloc(bitq_in_bufsize)) == NULL) { LOG_ERROR("malloc error"); exit(-1); @@ -95,7 +102,7 @@ void bitq_in_proc(void) /* field scanning */ while (bitq_in_state.bit_pos < field->num_bits) { - if ((tdo = bitq_interface->in() ) < 0 ) + if ((tdo = bitq_interface->in()) < 0) { #ifdef _DEBUG_JTAG_IO_ LOG_DEBUG("bitq in EOF"); @@ -131,7 +138,7 @@ void bitq_io(int tms, int tdi, int tdo_req) { bitq_interface->out(tms, tdi, tdo_req); /* check and process the input queue */ - if (bitq_interface->in_rdy() ) + if (bitq_interface->in_rdy()) bitq_in_proc(); } @@ -184,14 +191,14 @@ void bitq_path_move(pathmove_command_t* cmd) else { LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", tap_state_name( - tap_get_state() ), tap_state_name(cmd->path[i]) ); + tap_get_state()), tap_state_name(cmd->path[i])); exit(-1); } tap_set_state(cmd->path[i]); } - tap_set_end_state(tap_get_state() ); + tap_set_end_state(tap_get_state()); } @@ -208,12 +215,12 @@ void bitq_runtest(int num_cycles) bitq_io(0, 0, 0); /* finish in end_state */ - if (tap_get_state() != tap_get_end_state() ) - bitq_state_move(tap_get_end_state() ); + if (tap_get_state() != tap_get_end_state()) + bitq_state_move(tap_get_end_state()); } -void bitq_scan_field(scan_field_t* field, int pause) +void bitq_scan_field(struct scan_field* field, int pause) { int bit_cnt; int tdo_req; @@ -241,7 +248,7 @@ void bitq_scan_field(scan_field_t* field, int pause) out_ptr = field->out_value; for (bit_cnt = field->num_bits; bit_cnt > 1; bit_cnt--) { - bitq_io(0, ((*out_ptr) & out_mask ) != 0, tdo_req); + bitq_io(0, ((*out_ptr) & out_mask) != 0, tdo_req); if (out_mask == 0x80) { out_mask = 0x01; @@ -251,7 +258,7 @@ void bitq_scan_field(scan_field_t* field, int pause) out_mask <<= 1; } - bitq_io(pause, ((*out_ptr) & out_mask ) != 0, tdo_req); + bitq_io(pause, ((*out_ptr) & out_mask) != 0, tdo_req); } if (pause) @@ -298,12 +305,12 @@ int bitq_execute_queue(void) #ifdef _DEBUG_JTAG_IO_ LOG_DEBUG("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst); #endif - if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST) ) ) + if ((cmd->cmd.reset->trst == 1) || (cmd->cmd.reset->srst && (jtag_get_reset_config() & RESET_SRST_PULLS_TRST))) { tap_set_state(TAP_RESET); } bitq_interface->reset(cmd->cmd.reset->trst, cmd->cmd.reset->srst); - if (bitq_interface->in_rdy() ) + if (bitq_interface->in_rdy()) bitq_in_proc(); break; @@ -320,7 +327,7 @@ int bitq_execute_queue(void) LOG_DEBUG("statemove end in %i", cmd->cmd.statemove->end_state); #endif bitq_end_state(cmd->cmd.statemove->end_state); - bitq_state_move(tap_get_end_state() ); /* uncoditional TAP move */ + bitq_state_move(tap_get_end_state()); /* uncoditional TAP move */ break; case JTAG_PATHMOVE: @@ -341,8 +348,8 @@ int bitq_execute_queue(void) #endif bitq_end_state(cmd->cmd.scan->end_state); bitq_scan(cmd->cmd.scan); - if (tap_get_state() != tap_get_end_state() ) - bitq_state_move(tap_get_end_state() ); + if (tap_get_state() != tap_get_end_state()) + bitq_state_move(tap_get_end_state()); break; case JTAG_SLEEP: @@ -350,7 +357,7 @@ int bitq_execute_queue(void) LOG_DEBUG("sleep %i", cmd->cmd.sleep->us); #endif bitq_interface->sleep(cmd->cmd.sleep->us); - if (bitq_interface->in_rdy() ) + if (bitq_interface->in_rdy()) bitq_in_proc(); break;