summaryrefslogtreecommitdiff
path: root/src/jtag/drivers/driver.c
diff options
context:
space:
mode:
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
commit50dc56a488c6e4d5acdfd73f12e3502e1586c51e (patch)
tree4a7d9fbaa62d442eb8bb968903f85b9c0b959e31 /src/jtag/drivers/driver.c
parent57d7743639d5092770d79f7c4b12ae694c482750 (diff)
downloadopenocd+libswd-50dc56a488c6e4d5acdfd73f12e3502e1586c51e.tar.gz
openocd+libswd-50dc56a488c6e4d5acdfd73f12e3502e1586c51e.tar.bz2
openocd+libswd-50dc56a488c6e4d5acdfd73f12e3502e1586c51e.tar.xz
openocd+libswd-50dc56a488c6e4d5acdfd73f12e3502e1586c51e.zip
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/driver.c')
-rw-r--r--src/jtag/drivers/driver.c59
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;