From: Steven Stallion Date: Sun, 26 Mar 2017 20:01:56 +0000 (-0500) Subject: jtag: make cmd_queue_scan_field_clone public X-Git-Tag: v0.11.0-rc1~977 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=e72b2601e71f49af10f72c4bb6220ee2061ef173 jtag: make cmd_queue_scan_field_clone public This patch makes the cmd_queue_scan_field_clone function public. This permits targets to insert fields without affecting the submitted scan_field list. This will be used in an upcoming target implementation that needs to insert additional padding bits. Change-Id: I8fbd3b9b4e413432471f4f1444048932c8fa189e Signed-off-by: Steven Stallion Reviewed-on: http://openocd.zylin.com/4082 Tested-by: jenkins Reviewed-by: Matthias Welwarsky --- diff --git a/src/jtag/Makefile.am b/src/jtag/Makefile.am index 50ee263d00..a764863991 100644 --- a/src/jtag/Makefile.am +++ b/src/jtag/Makefile.am @@ -1,6 +1,6 @@ noinst_LTLIBRARIES += %D%/libjtag.la -JTAG_SRCS = +JTAG_SRCS = %D%/commands.c %C%_libjtag_la_LIBADD = BUILT_SOURCES += %D%/minidriver_imp.h @@ -13,7 +13,7 @@ JTAG_SRCS += %D%/zy1000/zy1000.c JTAG_MINIDRIVER_DIR = %D%/zy1000 endif if MINIDRIVER_DUMMY -JTAG_SRCS += %D%/minidummy/minidummy.c %D%/commands.c +JTAG_SRCS += %D%/minidummy/minidummy.c JTAG_MINIDRIVER_DIR = %D%/minidummy endif @@ -29,7 +29,6 @@ CLEANFILES += %D%/jtag_minidriver.h else MINIDRIVER_IMP_DIR = %D%/drivers -JTAG_SRCS += %D%/commands.c if HLADAPTER include %D%/hla/Makefile.am diff --git a/src/jtag/commands.c b/src/jtag/commands.c index ed40755b73..e2d22cc94a 100644 --- a/src/jtag/commands.c +++ b/src/jtag/commands.c @@ -144,6 +144,18 @@ void jtag_command_queue_reset(void) next_command_pointer = &jtag_command_queue; } +/** + * Copy a struct scan_field for insertion into the queue. + * + * This allocates a new copy of out_value using cmd_queue_alloc. + */ +void jtag_scan_field_clone(struct scan_field *dst, const struct scan_field *src) +{ + dst->num_bits = src->num_bits; + dst->out_value = buf_cpy(src->out_value, cmd_queue_alloc(DIV_ROUND_UP(src->num_bits, 8)), src->num_bits); + dst->in_value = src->in_value; +} + enum scan_type jtag_scan_type(const struct scan_command *cmd) { int i; diff --git a/src/jtag/commands.h b/src/jtag/commands.h index 947c94725a..c0375964cd 100644 --- a/src/jtag/commands.h +++ b/src/jtag/commands.h @@ -168,6 +168,7 @@ void *cmd_queue_alloc(size_t size); void jtag_queue_command(struct jtag_command *cmd); void jtag_command_queue_reset(void); +void jtag_scan_field_clone(struct scan_field *dst, const struct scan_field *src); enum scan_type jtag_scan_type(const struct scan_command *cmd); int jtag_scan_size(const struct scan_command *cmd); int jtag_read_buffer(uint8_t *buffer, const struct scan_command *cmd); diff --git a/src/jtag/drivers/driver.c b/src/jtag/drivers/driver.c index daf7cd4266..4923f96eb8 100644 --- a/src/jtag/drivers/driver.c +++ b/src/jtag/drivers/driver.c @@ -55,18 +55,6 @@ static void jtag_callback_queue_reset(void) jtag_callback_queue_tail = NULL; } -/** - * Copy a struct scan_field for insertion into the queue. - * - * This allocates a new copy of out_value using cmd_queue_alloc. - */ -static void cmd_queue_scan_field_clone(struct scan_field *dst, const struct scan_field *src) -{ - dst->num_bits = src->num_bits; - dst->out_value = buf_cpy(src->out_value, cmd_queue_alloc(DIV_ROUND_UP(src->num_bits, 8)), src->num_bits); - dst->in_value = src->in_value; -} - /** * see jtag_add_ir_scan() * @@ -101,7 +89,7 @@ int interface_jtag_add_ir_scan(struct jtag_tap *active, /* if TAP is listed in input fields, copy the value */ tap->bypass = 0; - cmd_queue_scan_field_clone(field, in_fields); + jtag_scan_field_clone(field, in_fields); } else { /* if a TAP isn't listed in input fields, set it to BYPASS */ @@ -168,7 +156,7 @@ int interface_jtag_add_dr_scan(struct jtag_tap *active, int in_num_fields, #endif /* NDEBUG */ for (int j = 0; j < in_num_fields; j++) { - cmd_queue_scan_field_clone(field, in_fields + j); + jtag_scan_field_clone(field, in_fields + j); field++; }