diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-03-06 11:29:59 +0100 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-03-08 08:12:26 +0100 |
commit | 50dc56a488c6e4d5acdfd73f12e3502e1586c51e (patch) | |
tree | 4a7d9fbaa62d442eb8bb968903f85b9c0b959e31 /src/jtag/drivers | |
parent | 57d7743639d5092770d79f7c4b12ae694c482750 (diff) |
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>
Diffstat (limited to 'src/jtag/drivers')
-rw-r--r-- | src/jtag/drivers/driver.c | 59 |
1 files changed, 19 insertions, 40 deletions
diff --git a/src/jtag/drivers/driver.c b/src/jtag/drivers/driver.c index 57bc28d1..7f7f8791 100644 --- a/src/jtag/drivers/driver.c +++ b/src/jtag/drivers/driver.c @@ -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 * @@ -130,35 +130,6 @@ int interface_jtag_add_ir_scan(struct jtag_tap* active, const struct scan_field } /** - * 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; |