#define VSLLINK_MODE_NORMAL 0
#define VSLLINK_MODE_DMA 1
-static u16 vsllink_usb_vid;
-static u16 vsllink_usb_pid;
-static u8 vsllink_usb_bulkout;
-static u8 vsllink_usb_bulkin;
-static u8 vsllink_usb_interface;
-static u8 vsllink_mode = VSLLINK_MODE_NORMAL;
+static uint16_t vsllink_usb_vid;
+static uint16_t vsllink_usb_pid;
+static uint8_t vsllink_usb_bulkout;
+static uint8_t vsllink_usb_bulkin;
+static uint8_t vsllink_usb_interface;
+static uint8_t vsllink_mode = VSLLINK_MODE_NORMAL;
static int VSLLINK_USB_TIMEOUT = 10000;
static int VSLLINK_BufferSize = 1024;
/* Global USB buffers */
static int vsllink_usb_out_buffer_idx;
static int vsllink_usb_in_want_length;
-static u8* vsllink_usb_in_buffer = NULL;
-static u8* vsllink_usb_out_buffer = NULL;
+static uint8_t* vsllink_usb_in_buffer = NULL;
+static uint8_t* vsllink_usb_out_buffer = NULL;
/* Constants for VSLLink command */
#define VSLLINK_CMD_CONN 0x80
*
* SD->SD and SI->SI have to be caught in interface specific code
*/
-static u8 VSLLINK_tap_move[6][6] =
+static uint8_t VSLLINK_tap_move[6][6] =
{
/* TLR RTI SD PD SI PI */
{0xff, 0x7f, 0x2f, 0x0a, 0x37, 0x16}, /* TLR */
{0, 0,}}, /* PI */
};
-static u8 VSLLINK_BIT_MSK[8] =
+static uint8_t VSLLINK_BIT_MSK[8] =
{
0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f
};
int offset;
int length; /* Number of bits to read */
scan_command_t *command; /* Corresponding scan command */
- u8 *buffer;
+ uint8_t *buffer;
} pending_scan_result_t;
#define MAX_PENDING_SCAN_RESULTS 256
static int pending_scan_results_length;
static pending_scan_result_t pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS];
-/* External interface functions */
-static int vsllink_execute_queue(void);
-static int vsllink_speed(int speed);
-static int vsllink_khz(int khz, int *jtag_speed);
-static int vsllink_speed_div(int jtag_speed, int *khz);
-static int vsllink_register_commands(struct command_context_s *cmd_ctx);
-static int vsllink_init(void);
-static int vsllink_quit(void);
-
-/* CLI command handler functions */
-static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_mode_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
/* Queue command functions */
static void vsllink_end_state(tap_state_t state);
static void vsllink_state_move_dma(void);
static void vsllink_stableclocks_dma(int num_cycles, int tms);
static void vsllink_stableclocks_normal(int num_cycles, int tms);
static void (*vsllink_stableclocks)(int num_cycles, int tms);
-static void vsllink_scan_dma(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command);
-static void vsllink_scan_normal(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command);
-static void (*vsllink_scan)(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command);
+static void vsllink_scan_dma(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, scan_command_t *command);
+static void vsllink_scan_normal(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, scan_command_t *command);
+static void (*vsllink_scan)(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, scan_command_t *command);
static void vsllink_reset(int trst, int srst);
-static void vsllink_simple_command(u8 command);
+static void vsllink_simple_command(uint8_t command);
static int vsllink_connect(void);
static int vsllink_disconnect(void);
static void vsllink_tap_ensure_space_dma(int scans, int length);
static void vsllink_tap_ensure_space_normal(int scans, int length);
static void (*vsllink_tap_ensure_space)(int scans, int length);
-static void vsllink_tap_append_scan_dma(int length, u8 *buffer, scan_command_t *command);
-static void vsllink_tap_append_scan_normal(int length, u8 *buffer, scan_command_t *command, int offset);
+static void vsllink_tap_append_scan_dma(int length, uint8_t *buffer, scan_command_t *command);
+static void vsllink_tap_append_scan_normal(int length, uint8_t *buffer, scan_command_t *command, int offset);
/* VSLLink lowlevel functions */
typedef struct vsllink_jtag
static int vsllink_usb_read(vsllink_jtag_t *vsllink_jtag);
#if defined _DEBUG_USB_COMMS_ || defined _DEBUG_JTAG_IO_
-static void vsllink_debug_buffer(u8 *buffer, int length);
+static void vsllink_debug_buffer(uint8_t *buffer, int length);
#endif
static int vsllink_tms_data_len = 0;
-static u8* vsllink_tms_cmd_pos;
+static uint8_t* vsllink_tms_cmd_pos;
static int tap_length = 0;
static int tap_buffer_size = 0;
-static u8 *tms_buffer = NULL;
-static u8 *tdi_buffer = NULL;
-static u8 *tdo_buffer = NULL;
+static uint8_t *tms_buffer = NULL;
+static uint8_t *tdi_buffer = NULL;
+static uint8_t *tdo_buffer = NULL;
static int last_tms;
static vsllink_jtag_t* vsllink_jtag_handle = NULL;
-/***************************************************************************/
-/* External interface implementation */
-
-jtag_interface_t vsllink_interface =
-{
- .name = "vsllink",
- .execute_queue = vsllink_execute_queue,
- .speed = vsllink_speed,
- .khz = vsllink_khz,
- .speed_div = vsllink_speed_div,
- .register_commands = vsllink_register_commands,
- .init = vsllink_init,
- .quit = vsllink_quit
-};
-
static void reset_command_pointer(void)
{
if (vsllink_mode == VSLLINK_MODE_NORMAL)
jtag_command_t *cmd = jtag_command_queue;
int scan_size;
enum scan_type type;
- u8 *buffer;
+ uint8_t *buffer;
DEBUG_JTAG_IO("--------------------------------- vsllink -------------------------------------");
switch (cmd->type)
{
case JTAG_RUNTEST:
- DEBUG_JTAG_IO( "runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, \
+ DEBUG_JTAG_IO("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, \
tap_state_name(cmd->cmd.runtest->end_state));
vsllink_end_state(cmd->cmd.runtest->end_state);
case JTAG_STABLECLOCKS:
DEBUG_JTAG_IO("add %d clocks", cmd->cmd.stableclocks->num_cycles);
- switch(tap_get_state())
+ switch (tap_get_state())
{
case TAP_RESET:
// tms should be '1' to stay in TAP_RESET mode
scan_size = 0;
break; /* above stable states are OK */
default:
- LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
- tap_state_name(tap_get_state()) );
+ LOG_ERROR("jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
+ tap_state_name(tap_get_state()));
exit(-1);
}
vsllink_stableclocks(cmd->cmd.stableclocks->num_cycles, scan_size);
if (vsllink_mode == VSLLINK_MODE_DMA)
{
tap_buffer_size = (VSLLINK_BufferSize - 3) / 2;
- tms_buffer = (u8*)malloc(tap_buffer_size);
- tdi_buffer = (u8*)malloc(tap_buffer_size);
- tdo_buffer = (u8*)malloc(tap_buffer_size);
+ tms_buffer = (uint8_t*)malloc(tap_buffer_size);
+ tdi_buffer = (uint8_t*)malloc(tap_buffer_size);
+ tdo_buffer = (uint8_t*)malloc(tap_buffer_size);
if ((tms_buffer == NULL) || (tdi_buffer == NULL) || (tdo_buffer == NULL))
{
LOG_ERROR("Not enough memory");
// length of VSLLINK_CMDJTAGSEQ_TMSBYTE has been set, no need to set it here.
static void vsllink_append_tms(void)
{
- u8 tms_scan = VSLLINK_TAP_MOVE(tap_get_state(), tap_get_end_state());
- u16 tms2;
+ uint8_t tms_scan = VSLLINK_TAP_MOVE(tap_get_state(), tap_get_end_state());
+ uint16_t tms2;
insert_insignificant_operation_t *insert = \
&VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())];
int i, insert_length = (tap_length % 8) ? (8 - (tap_length % 8)) : 0;
insert_insignificant_operation_t *insert = \
&VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_ndx(tap_get_state())][tap_move_ndx(tap_get_end_state())];
- u8 tms_scan = VSLLINK_TAP_MOVE(tap_get_state(), tap_get_end_state());
+ uint8_t tms_scan = VSLLINK_TAP_MOVE(tap_get_state(), tap_get_end_state());
if (tap_get_state() == TAP_RESET)
{
static void vsllink_stableclocks_normal(int num_cycles, int tms)
{
int tms_len;
- u16 tms_append_byte;
+ uint16_t tms_append_byte;
if (vsllink_tms_data_len > 0)
{
if (tms > 0)
{
// append '1' for tms
- tms_append_byte = (u16)((((1 << num_cycles) - 1) << vsllink_tms_data_len) & 0xFFFF);
+ tms_append_byte = (uint16_t)((((1 << num_cycles) - 1) << vsllink_tms_data_len) & 0xFFFF);
}
else
{
// just add to vsllink_tms_data_len
// same result if tun through
//vsllink_tms_data_len += num_cycles;
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] |= (u8)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] |= (uint8_t)(tms_append_byte & 0xFF);
}
else if (tms_len == 8)
{
// end last tms shift command
// just reduce it, and append last tms byte
(*vsllink_tms_cmd_pos)--;
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (uint8_t)(tms_append_byte & 0xFF);
}
else if (tms_len < 16)
{
// there is enought tms length in the current tms shift command
// increase the tms byte length by 1 and set the last byte to 0
(*vsllink_tms_cmd_pos)++;
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF);
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (u8)(tms_append_byte >> 8);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (uint8_t)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (uint8_t)(tms_append_byte >> 8);
}
else
{
// first decrease byte length of last tms shift command
(*vsllink_tms_cmd_pos)--;
// append last tms byte and move the command pointer to the next empty position
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (uint8_t)(tms_append_byte & 0xFF);
// add new command(3 bytes)
vsllink_tap_ensure_space(0, 3);
vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx];
vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1;
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (u8)(tms_append_byte >> 8);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = (uint8_t)(tms_append_byte >> 8);
}
}
else if (tms_len == 16)
{
// end last tms shift command
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF);
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (u8)(tms_append_byte >> 8);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (uint8_t)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (uint8_t)(tms_append_byte >> 8);
}
vsllink_tms_data_len = tms_len & 7;
else
{
// more shifts will be needed
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (u8)(tms_append_byte & 0xFF);
- vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (u8)(tms_append_byte >> 8);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (uint8_t)(tms_append_byte & 0xFF);
+ vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (uint8_t)(tms_append_byte >> 8);
num_cycles -= 16 - vsllink_tms_data_len;
vsllink_tms_data_len = 0;
}
}
-static void vsllink_scan_normal(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command)
+static void vsllink_scan_normal(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, scan_command_t *command)
{
tap_state_t saved_end_state;
- u8 bits_left, tms_tmp, tdi_len;
+ uint8_t bits_left, tms_tmp, tdi_len;
int i;
- if (0 == scan_size )
+ if (0 == scan_size)
{
return;
}
{
// already in IRSHIFT or DRSHIFT state
// merge tms data in the last tms shift command into next scan command
- if(*vsllink_tms_cmd_pos < 1)
+ if (*vsllink_tms_cmd_pos < 1)
{
LOG_ERROR("There MUST be some bugs in the driver");
exit(-1);
}
- else if(*vsllink_tms_cmd_pos < 2)
+ else if (*vsllink_tms_cmd_pos < 2)
{
tms_tmp = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx];
vsllink_usb_out_buffer_idx--;
tap_set_state(tap_get_end_state());
}
-static void vsllink_scan_dma(bool ir_scan, enum scan_type type, u8 *buffer, int scan_size, scan_command_t *command)
+static void vsllink_scan_dma(bool ir_scan, enum scan_type type, uint8_t *buffer, int scan_size, scan_command_t *command)
{
tap_state_t saved_end_state;
}
}
-static void vsllink_simple_command(u8 command)
+static void vsllink_simple_command(uint8_t command)
{
int result;
}
}
-static int vsllink_register_commands(struct command_context_s *cmd_ctx)
-{
- register_command(cmd_ctx, NULL, "vsllink_usb_vid", vsllink_handle_usb_vid_command,
- COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "vsllink_usb_pid", vsllink_handle_usb_pid_command,
- COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "vsllink_usb_bulkin", vsllink_handle_usb_bulkin_command,
- COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "vsllink_usb_bulkout", vsllink_handle_usb_bulkout_command,
- COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "vsllink_usb_interface", vsllink_handle_usb_interface_command,
- COMMAND_CONFIG, NULL);
- register_command(cmd_ctx, NULL, "vsllink_mode", vsllink_handle_mode_command,
- COMMAND_CONFIG, NULL);
-
- return ERROR_OK;
-}
-
-static int vsllink_handle_mode_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_mode_command)
{
if (argc != 1) {
LOG_ERROR("parameter error, should be one parameter for VID");
return ERROR_OK;
}
-static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_vid_command)
{
if (argc != 1)
{
return ERROR_OK;
}
- return parse_u16(args[0], &vsllink_usb_vid);
+ COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_vid);
+ return ERROR_OK;
}
-static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_pid_command)
{
if (argc != 1)
{
LOG_ERROR("parameter error, should be one parameter for PID");
return ERROR_OK;
}
- return parse_u16(args[0], &vsllink_usb_pid);
+ COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_pid);
+ return ERROR_OK;
}
-static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_bulkin_command)
{
if (argc != 1)
{
return ERROR_OK;
}
- int retval = parse_u8(args[0], &vsllink_usb_bulkin);
- if (ERROR_OK == retval)
- vsllink_usb_bulkin |= 0x80;
+ COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkin);
+
+ vsllink_usb_bulkin |= 0x80;
- return retval;
+ return ERROR_OK;
}
-static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_bulkout_command)
{
if (argc != 1)
{
return ERROR_OK;
}
- int retval = parse_u8(args[0], &vsllink_usb_bulkout);
- if (ERROR_OK == retval)
- vsllink_usb_bulkout &= ~0x80;
+ COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkout);
+
+ vsllink_usb_bulkout &= ~0x80;
- return retval;
+ return ERROR_OK;
}
-static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_interface_command)
{
if (argc != 1)
{
return ERROR_OK;
}
- return parse_u8(args[0], &vsllink_usb_interface);
+ COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_interface);
+ return ERROR_OK;
}
/***************************************************************************/
if (index < tap_buffer_size)
{
int bit_index = tap_length % 8;
- u8 bit = 1 << bit_index;
+ uint8_t bit = 1 << bit_index;
if (tms)
{
}
}
-static void vsllink_tap_append_scan_normal(int length, u8 *buffer, scan_command_t *command, int offset)
+static void vsllink_tap_append_scan_normal(int length, uint8_t *buffer, scan_command_t *command, int offset)
{
pending_scan_result_t *pending_scan_result = &pending_scan_results_buffer[pending_scan_results_length];
int i;
pending_scan_results_length++;
}
-static void vsllink_tap_append_scan_dma(int length, u8 *buffer, scan_command_t *command)
+static void vsllink_tap_append_scan_dma(int length, uint8_t *buffer, scan_command_t *command)
{
pending_scan_result_t *pending_scan_result;
int len_tmp, len_all, i;
for (i = 0; i < len_tmp; i++)
{
- vsllink_tap_append_step(((len_all+i) < length-1 ? 0 : 1), (buffer[(len_all+i)/8] >> ((len_all+i)%8)) & 1);
+ vsllink_tap_append_step(((len_all + i) < length-1 ? 0 : 1), (buffer[(len_all + i)/8] >> ((len_all + i)%8)) & 1);
}
pending_scan_results_length++;
if (vsllink_tms_data_len > 0)
{
- if((tap_get_state() != TAP_RESET) && (tap_get_state() != TAP_IDLE) && (tap_get_state() != TAP_IRPAUSE) && (tap_get_state() != TAP_DRPAUSE))
+ if ((tap_get_state() != TAP_RESET) && (tap_get_state() != TAP_IDLE) && (tap_get_state() != TAP_IRPAUSE) && (tap_get_state() != TAP_DRPAUSE))
{
LOG_WARNING("%s is not in RESET or IDLE or PAUSR state", tap_state_name(tap_get_state()));
}
for (i = 0; i < pending_scan_results_length; i++)
{
pending_scan_result_t *pending_scan_result = &pending_scan_results_buffer[i];
- u8 *buffer = pending_scan_result->buffer;
+ uint8_t *buffer = pending_scan_result->buffer;
int length = pending_scan_result->length;
int offset = pending_scan_result->offset;
scan_command_t *command = pending_scan_result->command;
for (i = 0; i < pending_scan_results_length; i++)
{
pending_scan_result_t *pending_scan_result = &pending_scan_results_buffer[i];
- u8 *buffer = pending_scan_result->buffer;
+ uint8_t *buffer = pending_scan_result->buffer;
int length = pending_scan_result->length;
int first = pending_scan_result->offset;
if (in_length > 0)
{
result = vsllink_usb_read(vsllink_jtag);
- if (result == in_length )
+ if (result == in_length)
{
return result;
}
#define BYTES_PER_LINE 16
#if defined _DEBUG_USB_COMMS_ || defined _DEBUG_JTAG_IO_
-static void vsllink_debug_buffer(u8 *buffer, int length)
+static void vsllink_debug_buffer(uint8_t *buffer, int length)
{
char line[81];
char s[4];
}
}
#endif // _DEBUG_USB_COMMS_ || _DEBUG_JTAG_IO_
+
+static int vsllink_register_commands(struct command_context_s *cmd_ctx)
+{
+ register_command(cmd_ctx, NULL, "vsllink_usb_vid",
+ vsllink_handle_usb_vid_command, COMMAND_CONFIG,
+ NULL);
+ register_command(cmd_ctx, NULL, "vsllink_usb_pid",
+ vsllink_handle_usb_pid_command, COMMAND_CONFIG,
+ NULL);
+ register_command(cmd_ctx, NULL, "vsllink_usb_bulkin",
+ vsllink_handle_usb_bulkin_command, COMMAND_CONFIG,
+ NULL);
+ register_command(cmd_ctx, NULL, "vsllink_usb_bulkout",
+ vsllink_handle_usb_bulkout_command, COMMAND_CONFIG,
+ NULL);
+ register_command(cmd_ctx, NULL, "vsllink_usb_interface",
+ vsllink_handle_usb_interface_command, COMMAND_CONFIG,
+ NULL);
+ register_command(cmd_ctx, NULL, "vsllink_mode",
+ vsllink_handle_mode_command, COMMAND_CONFIG,
+ NULL);
+
+ return ERROR_OK;
+}
+
+jtag_interface_t vsllink_interface = {
+ .name = "vsllink",
+ .register_commands = &vsllink_register_commands,
+ .init = &vsllink_init,
+ .quit = &vsllink_quit,
+ .khz = &vsllink_khz,
+ .speed = &vsllink_speed,
+ .speed_div = &vsllink_speed_div,
+ .execute_queue = &vsllink_execute_queue,
+ };