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 <stallion@squareup.com> Reviewed-on: http://openocd.zylin.com/4082 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
This commit is contained in:
parent
e65acd889c
commit
e72b2601e7
|
@ -1,6 +1,6 @@
|
||||||
noinst_LTLIBRARIES += %D%/libjtag.la
|
noinst_LTLIBRARIES += %D%/libjtag.la
|
||||||
|
|
||||||
JTAG_SRCS =
|
JTAG_SRCS = %D%/commands.c
|
||||||
%C%_libjtag_la_LIBADD =
|
%C%_libjtag_la_LIBADD =
|
||||||
|
|
||||||
BUILT_SOURCES += %D%/minidriver_imp.h
|
BUILT_SOURCES += %D%/minidriver_imp.h
|
||||||
|
@ -13,7 +13,7 @@ JTAG_SRCS += %D%/zy1000/zy1000.c
|
||||||
JTAG_MINIDRIVER_DIR = %D%/zy1000
|
JTAG_MINIDRIVER_DIR = %D%/zy1000
|
||||||
endif
|
endif
|
||||||
if MINIDRIVER_DUMMY
|
if MINIDRIVER_DUMMY
|
||||||
JTAG_SRCS += %D%/minidummy/minidummy.c %D%/commands.c
|
JTAG_SRCS += %D%/minidummy/minidummy.c
|
||||||
JTAG_MINIDRIVER_DIR = %D%/minidummy
|
JTAG_MINIDRIVER_DIR = %D%/minidummy
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@ CLEANFILES += %D%/jtag_minidriver.h
|
||||||
else
|
else
|
||||||
|
|
||||||
MINIDRIVER_IMP_DIR = %D%/drivers
|
MINIDRIVER_IMP_DIR = %D%/drivers
|
||||||
JTAG_SRCS += %D%/commands.c
|
|
||||||
|
|
||||||
if HLADAPTER
|
if HLADAPTER
|
||||||
include %D%/hla/Makefile.am
|
include %D%/hla/Makefile.am
|
||||||
|
|
|
@ -144,6 +144,18 @@ void jtag_command_queue_reset(void)
|
||||||
next_command_pointer = &jtag_command_queue;
|
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)
|
enum scan_type jtag_scan_type(const struct scan_command *cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -168,6 +168,7 @@ void *cmd_queue_alloc(size_t size);
|
||||||
void jtag_queue_command(struct jtag_command *cmd);
|
void jtag_queue_command(struct jtag_command *cmd);
|
||||||
void jtag_command_queue_reset(void);
|
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);
|
enum scan_type jtag_scan_type(const struct scan_command *cmd);
|
||||||
int jtag_scan_size(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);
|
int jtag_read_buffer(uint8_t *buffer, const struct scan_command *cmd);
|
||||||
|
|
|
@ -55,18 +55,6 @@ static void jtag_callback_queue_reset(void)
|
||||||
jtag_callback_queue_tail = NULL;
|
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()
|
* 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 */
|
/* if TAP is listed in input fields, copy the value */
|
||||||
tap->bypass = 0;
|
tap->bypass = 0;
|
||||||
|
|
||||||
cmd_queue_scan_field_clone(field, in_fields);
|
jtag_scan_field_clone(field, in_fields);
|
||||||
} else {
|
} else {
|
||||||
/* if a TAP isn't listed in input fields, set it to BYPASS */
|
/* 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 */
|
#endif /* NDEBUG */
|
||||||
|
|
||||||
for (int j = 0; j < in_num_fields; j++) {
|
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++;
|
field++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue