diff options
author | kc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-05-21 04:48:15 +0000 |
---|---|---|
committer | kc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-05-21 04:48:15 +0000 |
commit | 7e3fd48b6a7232c4a0837d19a98e5b48691dc9e4 (patch) | |
tree | f04b23972fafe132b1b7406c431be74b6bc662ff | |
parent | d7dccfbf822fba39ac52ebb871a80f276f52836f (diff) | |
download | riscv-openocd-7e3fd48b6a7232c4a0837d19a98e5b48691dc9e4.zip riscv-openocd-7e3fd48b6a7232c4a0837d19a98e5b48691dc9e4.tar.gz riscv-openocd-7e3fd48b6a7232c4a0837d19a98e5b48691dc9e4.tar.bz2 |
Author: Michael Bruck <mbruck@digenius.de>
-jtag.c, interface_jtag_add_ir_scan():
- use pointer 'field' instead of scan->fields[nth_tap]
- add assertion to ensure that input data has correct size for TAP's IR
git-svn-id: svn://svn.berlios.de/openocd/trunk@1865 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r-- | src/jtag/jtag.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index a270993..66a5fd8 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -618,9 +618,7 @@ void jtag_add_ir_scan(int in_num_fields, scan_field_t *in_fields, tap_state_t st */ int MINIDRIVER(interface_jtag_add_ir_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state) { - int nth_tap; - - int num_taps = jtag_NumEnabledTaps(); + size_t num_taps = jtag_NumEnabledTaps(); jtag_command_t * cmd = cmd_queue_alloc(sizeof(jtag_command_t)); scan_command_t * scan = cmd_queue_alloc(sizeof(scan_command_t)); @@ -636,16 +634,15 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int in_num_fields, const scan_field_t scan->fields = out_fields; scan->end_state = state; - nth_tap = -1; + + scan_field_t * field = out_fields; /* keep track where we insert data */ + + /* loop over all enabled TAPs */ for (jtag_tap_t * tap = jtag_NextEnabledTap(NULL); tap != NULL; tap = jtag_NextEnabledTap(tap)) { int found = 0; - nth_tap++; - - assert(nth_tap < num_taps); - size_t scan_size = tap->ir_length; /* search the list */ @@ -656,8 +653,10 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int in_num_fields, const scan_field_t found = 1; tap->bypass = 0; + + assert(in_fields[j].num_bits == tap->ir_length); /* input fields must have the same length as the TAP's IR */ - cmd_queue_scan_field_clone(scan->fields + nth_tap, in_fields + j); + cmd_queue_scan_field_clone(field, in_fields + j); break; } @@ -665,20 +664,22 @@ int MINIDRIVER(interface_jtag_add_ir_scan)(int in_num_fields, const scan_field_t if (!found) { - /* if a tap isn't listed, set it to BYPASS */ + /* if a TAP isn't listed in input fields, set it to BYPASS */ tap->bypass = 1; - scan->fields[nth_tap].tap = tap; - scan->fields[nth_tap].num_bits = scan_size; - scan->fields[nth_tap].out_value = buf_set_ones(cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); - scan->fields[nth_tap].in_value = NULL; /* do not collect input for tap's in bypass */ + field->tap = tap; + field->num_bits = scan_size; + field->out_value = buf_set_ones(cmd_queue_alloc(CEIL(scan_size, 8)), scan_size); + field->in_value = NULL; /* do not collect input for tap's in bypass */ } /* update device information */ - buf_cpy(scan->fields[nth_tap].out_value, tap->cur_instr, scan_size); + buf_cpy(field->out_value, tap->cur_instr, scan_size); + + field++; } - assert(nth_tap == (num_taps - 1)); + assert(field == out_fields + num_taps); /* paranoia: jtag_NumEnabledTaps() and jtag_NextEnabledTap() not in sync */ return ERROR_OK; } |