simplifies the API and there is only one remaining user at this point.
Is the implementation busted where the check does not actually happen
now?
Change-Id: I776a43766f5576a08df320f6fe41a2750d101bde
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Reviewed-on: http://openocd.zylin.com/264
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
for (int i = 0; i < in_num_fields; i++)
{
struct scan_field *field = &in_fields[i];
- field->allocated = 0;
- field->modified = 0;
- if (field->check_value || field->in_value)
- continue;
- interface_jtag_add_scan_check_alloc(field);
- field->modified = 1;
+ /* caller must provide in_buffer if needed for callback */
+ assert((field->check_value == NULL) || (field->in_value != NULL));
}
jtag_add_scan(active, in_num_fields, in_fields, state);
(jtag_callback_data_t)in_fields[i].check_mask,
(jtag_callback_data_t)in_fields[i].num_bits);
}
- if (in_fields[i].allocated)
- {
- free(in_fields[i].in_value);
- }
- if (in_fields[i].modified)
- {
- in_fields[i].in_value = NULL;
- }
}
}
*
* In addition, this structure includes a value and mask that is used by
* jtag_add_dr_scan_check() to validate the value that was scanned out.
- *
- * The allocated, modified, and intmp fields are internal work space.
*/
struct scan_field {
/// The number of bits this field specifies (up to 32)
uint8_t* check_value;
/// The mask to go with check_value
uint8_t* check_mask;
-
- /// in_value has been allocated for the queue
- int allocated;
- /// Indicates we modified the in_value.
- int modified;
- /// temporary storage for performing value checks synchronously
- uint8_t intmp[4];
};
struct jtag_tap {
#include <jtag/jtag_minidriver.h>
-static inline void interface_jtag_alloc_in_value32(struct scan_field *field)
-{
- field->in_value = field->intmp;
-}
-
-static inline void interface_jtag_add_scan_check_alloc(struct scan_field *field)
-{
- /* We're executing this synchronously, so try to use local storage. */
- if (field->num_bits > 32)
- {
- unsigned num_bytes = DIV_ROUND_UP(field->num_bits, 8);
- field->in_value = (uint8_t *)malloc(num_bytes);
- field->allocated = 1;
- }
- else
- field->in_value = field->intmp;
-}
-
static inline void jtag_add_dr_out(struct jtag_tap* tap,
int num_fields, const int* num_bits, const uint32_t* value,
tap_state_t end_state)