jtag: simplify jtag_add_plain_ir/dr_scan

These fn's now clearly just clock out/in bits. No mystical
fields are involved.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
This commit is contained in:
Øyvind Harboe
2010-03-06 11:29:59 +01:00
parent 57d7743639
commit 50dc56a488
10 changed files with 69 additions and 93 deletions

View File

@@ -2,7 +2,7 @@
* Copyright (C) 2005 by Dominic Rath *
* Dominic.Rath@gmx.de *
* *
* Copyright (C) 2007-2009 Øyvind Harboe *
* Copyright (C) 2007-2010 Øyvind Harboe *
* oyvind.harboe@zylin.com *
* *
* Copyright (C) 2009 SoftPLC Corporation *
@@ -129,35 +129,6 @@ int interface_jtag_add_ir_scan(struct jtag_tap* active, const struct scan_field
return ERROR_OK;
}
/**
* see jtag_add_plain_ir_scan()
*
*/
int interface_jtag_add_plain_ir_scan(int in_num_fields, const struct scan_field *in_fields, tap_state_t state)
{
struct jtag_command * cmd = cmd_queue_alloc(sizeof(struct jtag_command));
struct scan_command * scan = cmd_queue_alloc(sizeof(struct scan_command));
struct scan_field * out_fields = cmd_queue_alloc(in_num_fields * sizeof(struct scan_field));
jtag_queue_command(cmd);
cmd->type = JTAG_SCAN;
cmd->cmd.scan = scan;
scan->ir_scan = true;
scan->num_fields = in_num_fields;
scan->fields = out_fields;
scan->end_state = state;
for (int i = 0; i < in_num_fields; i++)
cmd_queue_scan_field_clone(out_fields + i, in_fields + i);
return ERROR_OK;
}
/**
* see jtag_add_dr_scan()
*
@@ -324,32 +295,40 @@ void interface_jtag_add_dr_out(struct jtag_tap *target_tap,
assert(target_tap_match); /* target_tap should be enabled and not bypassed */
}
/**
* see jtag_add_plain_dr_scan()
*
*/
int interface_jtag_add_plain_dr_scan(int in_num_fields, const struct scan_field *in_fields, tap_state_t state)
static int jtag_add_plain_scan(int num_bits, const uint8_t *out_bits,
uint8_t *in_bits, tap_state_t state, bool ir_scan)
{
struct jtag_command * cmd = cmd_queue_alloc(sizeof(struct jtag_command));
struct scan_command * scan = cmd_queue_alloc(sizeof(struct scan_command));
struct scan_field * out_fields = cmd_queue_alloc(in_num_fields * sizeof(struct scan_field));
struct scan_field * out_fields = cmd_queue_alloc(sizeof(struct scan_field));
jtag_queue_command(cmd);
cmd->type = JTAG_SCAN;
cmd->cmd.scan = scan;
scan->ir_scan = false;
scan->num_fields = in_num_fields;
scan->ir_scan = ir_scan;
scan->num_fields = 1;
scan->fields = out_fields;
scan->end_state = state;
for (int i = 0; i < in_num_fields; i++)
cmd_queue_scan_field_clone(out_fields + i, in_fields + i);
out_fields->num_bits = num_bits;
out_fields->out_value = buf_cpy(out_bits, cmd_queue_alloc(DIV_ROUND_UP(num_bits, 8)), num_bits);
out_fields->in_value = in_bits;
return ERROR_OK;
}
int interface_jtag_add_plain_dr_scan(int num_bits, const uint8_t *out_bits, uint8_t *in_bits, tap_state_t state)
{
return jtag_add_plain_scan(num_bits, out_bits, in_bits, state, false);
}
int interface_jtag_add_plain_ir_scan(int num_bits, const uint8_t *out_bits, uint8_t *in_bits, tap_state_t state)
{
return jtag_add_plain_scan(num_bits, out_bits, in_bits, state, true);
}
int interface_jtag_add_tlr(void)
{
tap_state_t state = TAP_RESET;