X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fjtag%2Fjtag.c;h=985cf8c2df6337040f1930da5749dd9544284cb4;hb=76ebc78358ef94dcf5d64c8738e6dd4bb1371b2c;hp=9268d3cb26428b18ed957e500ad6a40bdbd4d734;hpb=3e685d0bbec1d8cc36eabe0e5125a7fb06ddc2fa;p=openocd diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index 9268d3cb..985cf8c2 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -33,9 +33,9 @@ #include "string.h" #include -#ifndef INTERFACE +#ifndef MINIDRIVER /* this allows JTAG devices to implement the entire jtag_xxx() layer in hw/sw */ -#define INTERFACE(a) a +#define MINIDRIVER(a) a #endif @@ -417,7 +417,7 @@ int jtag_add_ir_scan(int num_fields, scan_field_t *fields, enum tap_state state) return retval; } -int INTERFACE(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields, enum tap_state state) +int MINIDRIVER(interface_jtag_add_ir_scan)(int num_fields, scan_field_t *fields, enum tap_state state) { jtag_command_t **last_cmd; jtag_device_t *device; @@ -516,7 +516,7 @@ int jtag_add_plain_ir_scan(int num_fields, scan_field_t *fields, enum tap_state return interface_jtag_add_plain_ir_scan(num_fields, fields, state); } -int INTERFACE(interface_jtag_add_plain_ir_scan)(int num_fields, scan_field_t *fields, enum tap_state state) +int MINIDRIVER(interface_jtag_add_plain_ir_scan)(int num_fields, scan_field_t *fields, enum tap_state state) { int i; jtag_command_t **last_cmd; @@ -575,7 +575,7 @@ int jtag_add_dr_scan(int num_fields, scan_field_t *fields, enum tap_state state) return interface_jtag_add_dr_scan(num_fields, fields, state); } -int INTERFACE(interface_jtag_add_dr_scan)(int num_fields, scan_field_t *fields, enum tap_state state) +int MINIDRIVER(interface_jtag_add_dr_scan)(int num_fields, scan_field_t *fields, enum tap_state state) { int i, j; int bypass_devices = 0; @@ -681,7 +681,7 @@ int jtag_add_plain_dr_scan(int num_fields, scan_field_t *fields, enum tap_state return interface_jtag_add_plain_dr_scan(num_fields, fields, state); } -int INTERFACE(interface_jtag_add_plain_dr_scan)(int num_fields, scan_field_t *fields, enum tap_state state) +int MINIDRIVER(interface_jtag_add_plain_dr_scan)(int num_fields, scan_field_t *fields, enum tap_state state) { int i; jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -738,7 +738,7 @@ int jtag_add_statemove(enum tap_state state) return interface_jtag_add_statemove(state); } -int INTERFACE(interface_jtag_add_statemove)(enum tap_state state) +int MINIDRIVER(interface_jtag_add_statemove)(enum tap_state state) { jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -782,7 +782,7 @@ int jtag_add_pathmove(int num_states, enum tap_state *path) } -int INTERFACE(interface_jtag_add_pathmove)(int num_states, enum tap_state *path) +int MINIDRIVER(interface_jtag_add_pathmove)(int num_states, enum tap_state *path) { jtag_command_t **last_cmd = jtag_get_last_command_p(); int i; @@ -803,7 +803,7 @@ int INTERFACE(interface_jtag_add_pathmove)(int num_states, enum tap_state *path) return ERROR_OK; } -int INTERFACE(interface_jtag_add_runtest)(int num_cycles, enum tap_state state) +int MINIDRIVER(interface_jtag_add_runtest)(int num_cycles, enum tap_state state) { jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -932,7 +932,7 @@ int jtag_add_reset(int req_trst, int req_srst) } -int INTERFACE(interface_jtag_add_reset)(int req_trst, int req_srst) +int MINIDRIVER(interface_jtag_add_reset)(int req_trst, int req_srst) { jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -950,7 +950,7 @@ int INTERFACE(interface_jtag_add_reset)(int req_trst, int req_srst) return ERROR_OK; } -int INTERFACE(interface_jtag_add_end_state)(enum tap_state state) +int MINIDRIVER(interface_jtag_add_end_state)(enum tap_state state) { jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -974,7 +974,7 @@ int jtag_add_end_state(enum tap_state state) return retval; } -int INTERFACE(interface_jtag_add_sleep)(u32 us) +int MINIDRIVER(interface_jtag_add_sleep)(u32 us) { jtag_command_t **last_cmd = jtag_get_last_command_p(); @@ -1178,7 +1178,7 @@ enum scan_type jtag_scan_type(scan_command_t *cmd) return type; } -int INTERFACE(interface_jtag_execute_queue)(void) +int MINIDRIVER(interface_jtag_execute_queue)(void) { int retval; @@ -1898,6 +1898,43 @@ int handle_drscan_command(struct command_context_s *cmd_ctx, char *cmd, char **a return ERROR_OK; } + + +int MINIDRIVER(interface_jtag_add_shift)(const enum tap_state shift_state, const enum tap_state end_state, int num_bits, u32 value) +{ + u8 out_buf[4]; + buf_set_u32(out_buf, 0, 32, flip_u32(value, 32)); + + /* allocate memory for a new list member */ + jtag_command_t **last_cmd; + last_cmd = jtag_get_last_command_p(); + *last_cmd = cmd_queue_alloc(sizeof(jtag_command_t)); + last_comand_pointer = &((*last_cmd)->next); + (*last_cmd)->next = NULL; + (*last_cmd)->type = JTAG_SCAN; + + /* allocate memory for scan command */ + (*last_cmd)->cmd.scan = cmd_queue_alloc(sizeof(scan_command_t)); + (*last_cmd)->cmd.scan->ir_scan = (shift_state==TAP_SI); + (*last_cmd)->cmd.scan->num_fields = 1; + (*last_cmd)->cmd.scan->fields = cmd_queue_alloc(1 * sizeof(scan_field_t)); + (*last_cmd)->cmd.scan->end_state = end_state; + + int num_bytes = CEIL(num_bits, 8); + int i=0; + (*last_cmd)->cmd.scan->fields[i].device = 0; /* not used by any drivers */ + (*last_cmd)->cmd.scan->fields[i].num_bits = num_bits; + (*last_cmd)->cmd.scan->fields[i].out_value = buf_cpy(out_buf, cmd_queue_alloc(num_bytes), num_bits); + (*last_cmd)->cmd.scan->fields[i].out_mask = NULL; + (*last_cmd)->cmd.scan->fields[i].in_value = NULL; + (*last_cmd)->cmd.scan->fields[i].in_check_value = NULL; + (*last_cmd)->cmd.scan->fields[i].in_check_mask = NULL; + (*last_cmd)->cmd.scan->fields[i].in_handler = NULL; + (*last_cmd)->cmd.scan->fields[i].in_handler_priv = NULL; + + return ERROR_OK; +} + int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { if (argc == 1)