X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fft2232.c;h=14ee7d142602120730a98614dfbb60bf97f9c123;hp=4bc2f3fe43e6f4dbaab6354c756da8ada641a1af;hb=53d605e12c3765aeedabf2bfe0c5cc338dc95d5a;hpb=6dc2c2ce970863a079f101d84a0c47b37b682c76 diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c index 4bc2f3fe43..14ee7d1426 100644 --- a/src/jtag/ft2232.c +++ b/src/jtag/ft2232.c @@ -52,7 +52,7 @@ #if (BUILD_FT2232_FTD2XX==1 && BUILD_FT2232_LIBFTDI==1) #error "BUILD_FT2232_FTD2XX && BUILD_FT2232_LIBFTDI are mutually exclusive" -#elif (BUILD_FT2232_FTD2XX!=1 && BUILD_FT2232_LIBFTDI!=1) +#elif (BUILD_FT2232_FTD2XX != 1 && BUILD_FT2232_LIBFTDI != 1) #error "BUILD_FT2232_FTD2XX || BUILD_FT2232_LIBFTDI must be chosen" #endif @@ -101,14 +101,14 @@ static char * ft2232_device_desc_A = NULL; static char* ft2232_device_desc = NULL; static char* ft2232_serial = NULL; static char* ft2232_layout = NULL; -static u8 ft2232_latency = 2; +static uint8_t ft2232_latency = 2; static unsigned ft2232_max_tck = 6000; #define MAX_USB_IDS 8 /* vid = pid = 0 marks the end of the list */ -static u16 ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 }; -static u16 ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 }; +static uint16_t ft2232_vid[MAX_USB_IDS + 1] = { 0x0403, 0 }; +static uint16_t ft2232_pid[MAX_USB_IDS + 1] = { 0x6010, 0 }; typedef struct ft2232_layout_s { @@ -168,13 +168,13 @@ static const ft2232_layout_t ft2232_layouts[] = { NULL, NULL, NULL, NULL }, }; -static u8 nTRST, nTRSTnOE, nSRST, nSRSTnOE; +static uint8_t nTRST, nTRSTnOE, nSRST, nSRSTnOE; static const ft2232_layout_t *layout; -static u8 low_output = 0x0; -static u8 low_direction = 0x0; -static u8 high_output = 0x0; -static u8 high_direction = 0x0; +static uint8_t low_output = 0x0; +static uint8_t low_direction = 0x0; +static uint8_t high_output = 0x0; +static uint8_t high_direction = 0x0; #if BUILD_FT2232_FTD2XX == 1 static FT_HANDLE ftdih = NULL; @@ -203,7 +203,7 @@ static int require_send; #define FT2232_BUFFER_SIZE 131072 -static u8* ft2232_buffer = NULL; +static uint8_t* ft2232_buffer = NULL; static int ft2232_buffer_size = 0; static int ft2232_read_pointer = 0; static int ft2232_expect_read = 0; @@ -213,7 +213,7 @@ static int ft2232_expect_read = 0; * writes a byte into the byte buffer, "ft2232_buffer", which must be sent later. * @param val is the byte to send. */ -static inline void buffer_write(u8 val) +static inline void buffer_write(uint8_t val) { assert(ft2232_buffer); assert((unsigned) ft2232_buffer_size < (unsigned) FT2232_BUFFER_SIZE); @@ -224,7 +224,7 @@ static inline void buffer_write(u8 val) * Function buffer_read * returns a byte from the byte buffer. */ -static inline u8 buffer_read(void) +static inline uint8_t buffer_read(void) { assert(ft2232_buffer); assert(ft2232_read_pointer < ft2232_buffer_size); @@ -249,9 +249,9 @@ static inline u8 buffer_read(void) * * See the MPSSE spec referenced above. */ -static void clock_tms(u8 mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit) +static void clock_tms(uint8_t mpsse_cmd, int tms_bits, int tms_count, bool tdi_bit) { - u8 tms_byte; + uint8_t tms_byte; int i; int tms_ndx; /* bit index into tms_byte */ @@ -338,7 +338,7 @@ jtag_interface_t ft2232_interface = .quit = ft2232_quit, }; -static int ft2232_write(u8* buf, int size, u32* bytes_written) +static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written) { #if BUILD_FT2232_FTD2XX == 1 FT_STATUS status; @@ -371,7 +371,7 @@ static int ft2232_write(u8* buf, int size, u32* bytes_written) } -static int ft2232_read(u8* buf, u32 size, u32* bytes_read) +static int ft2232_read(uint8_t* buf, uint32_t size, uint32_t* bytes_read) { #if BUILD_FT2232_FTD2XX == 1 DWORD dw_bytes_read; @@ -411,7 +411,9 @@ static int ft2232_read(u8* buf, u32 size, u32* bytes_read) if (*bytes_read < size) { - LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", *bytes_read, size); + LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", + (unsigned int)(*bytes_read), + (unsigned int)size); return ERROR_JTAG_DEVICE_ERROR; } @@ -438,10 +440,10 @@ static int ft2232_adaptive_clocking(int speed) } } - u8 buf = use_adaptive_clocking ? 0x96 : 0x97; + uint8_t buf = use_adaptive_clocking ? 0x96 : 0x97; LOG_DEBUG("%2.2x", buf); - u32 bytes_written; + uint32_t bytes_written; int retval = ft2232_write(&buf, 1, &bytes_written); if (ERROR_OK != retval || bytes_written != 1) { @@ -461,9 +463,9 @@ static int ft2232_adaptive_clocking(int speed) static int ft2232_speed(int speed) { - u8 buf[3]; + uint8_t buf[3]; int retval; - u32 bytes_written; + uint32_t bytes_written; ft2232_adaptive_clocking(speed); @@ -569,7 +571,7 @@ static void ft2232_end_state(tap_state_t state) } } -static void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size) +static void ft2232_read_scan(enum scan_type type, uint8_t* buffer, int scan_size) { int num_bytes = (scan_size + 7) / 8; int bits_left = scan_size; @@ -617,12 +619,12 @@ static void ft2232_debug_dump_buffer(void) static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last) { jtag_command_t* cmd; - u8* buffer; + uint8_t* buffer; int scan_size; enum scan_type type; int retval; - u32 bytes_written=0; - u32 bytes_read=0; + uint32_t bytes_written=0; + uint32_t bytes_read=0; #ifdef _DEBUG_USB_IO_ struct timeval start, inter, inter2, end; @@ -775,7 +777,7 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states) } -static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int scan_size) +static void ft2232_add_scan(bool ir_scan, enum scan_type type, uint8_t* buffer, int scan_size) { int num_bytes = (scan_size + 7) / 8; int bits_left = scan_size; @@ -823,8 +825,8 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1); num_bytes -= thisrun_bytes; - buffer_write((u8) (thisrun_bytes - 1)); - buffer_write((u8) ((thisrun_bytes - 1) >> 8)); + buffer_write((uint8_t) (thisrun_bytes - 1)); + buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8)); if (type != SCAN_IN) { @@ -902,7 +904,7 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s { int tms_bits; int tms_count; - u8 mpsse_cmd; + uint8_t mpsse_cmd; /* move from Shift-IR/DR to end state */ if (type != SCAN_OUT) @@ -934,16 +936,16 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, u8* buffer, int s } -static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffer, int scan_size) +static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* buffer, int scan_size) { int num_bytes = (scan_size + 7) / 8; int bits_left = scan_size; int cur_byte = 0; int last_bit; - u8* receive_buffer = malloc(CEIL(scan_size, 8)); - u8* receive_pointer = receive_buffer; - u32 bytes_written; - u32 bytes_read; + uint8_t* receive_buffer = malloc(CEIL(scan_size, 8)); + uint8_t* receive_pointer = receive_buffer; + uint32_t bytes_written; + uint32_t bytes_read; int retval; int thisrun_read = 0; @@ -963,7 +965,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written); + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + ft2232_buffer_size, (int)bytes_written); ft2232_buffer_size = 0; /* add command for complete bytes */ @@ -993,8 +996,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe thisrun_bytes = (num_bytes > 65537) ? 65536 : (num_bytes - 1); thisrun_read = thisrun_bytes; num_bytes -= thisrun_bytes; - buffer_write((u8) (thisrun_bytes - 1)); - buffer_write((u8) ((thisrun_bytes - 1) >> 8)); + buffer_write((uint8_t) (thisrun_bytes - 1)); + buffer_write((uint8_t) ((thisrun_bytes - 1) >> 8)); if (type != SCAN_IN) { @@ -1016,7 +1019,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written); + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + ft2232_buffer_size, + (int)bytes_written); ft2232_buffer_size = 0; if (type != SCAN_OUT) @@ -1026,7 +1031,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe LOG_ERROR("couldn't read from FT2232"); exit(-1); } - LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read); + LOG_DEBUG("thisrun_read: %i, bytes_read: %i", + thisrun_read, + (int)bytes_read); receive_pointer += bytes_read; } } @@ -1095,7 +1102,7 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe { int tms_bits = tap_get_tms_path(tap_get_state(), tap_get_end_state()); int tms_count = tap_get_tms_path_len(tap_get_state(), tap_get_end_state()); - u8 mpsse_cmd; + uint8_t mpsse_cmd; /* move from Shift-IR/DR to end state */ if (type != SCAN_OUT) @@ -1122,7 +1129,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, bytes_written); + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + ft2232_buffer_size, + (int)bytes_written); ft2232_buffer_size = 0; if (type != SCAN_OUT) @@ -1132,7 +1141,9 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, u8* buffe LOG_ERROR("couldn't read from FT2232"); exit(-1); } - LOG_DEBUG("thisrun_read: %i, bytes_read: %i", thisrun_read, bytes_read); + LOG_DEBUG("thisrun_read: %i, bytes_read: %i", + thisrun_read, + (int)bytes_read); receive_pointer += bytes_read; } @@ -1599,7 +1610,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd) static int ft2232_execute_scan(jtag_command_t *cmd) { - u8* buffer; + uint8_t* buffer; int scan_size; /* size of IR or DR scan */ int predicted_size = 0; int retval = ERROR_OK; @@ -1780,7 +1791,7 @@ static int ft2232_execute_queue() #if BUILD_FT2232_FTD2XX == 1 -static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more) +static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_more) { FT_STATUS status; DWORD deviceID; @@ -1788,7 +1799,7 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more) char Description[64]; DWORD openex_flags = 0; char* openex_string = NULL; - u8 latency_timer; + uint8_t latency_timer; LOG_DEBUG("'ft2232' interface using FTD2XX with '%s' layout (%4.4x:%4.4x)", ft2232_layout, vid, pid); @@ -1860,7 +1871,7 @@ static int ft2232_init_ftd2xx(u16 vid, u16 pid, int more, int* try_more) if (status == FT_OK) { char** desc_array = malloc(sizeof(char*) * (num_devices + 1)); - u32 i; + uint32_t i; for (i = 0; i < num_devices; i++) desc_array[i] = malloc(64); @@ -1958,9 +1969,9 @@ static int ft2232_purge_ftd2xx(void) #endif /* BUILD_FT2232_FTD2XX == 1 */ #if BUILD_FT2232_LIBFTDI == 1 -static int ft2232_init_libftdi(u16 vid, u16 pid, int more, int* try_more) +static int ft2232_init_libftdi(uint16_t vid, uint16_t pid, int more, int* try_more) { - u8 latency_timer; + uint8_t latency_timer; LOG_DEBUG("'ft2232' interface using libftdi with '%s' layout (%4.4x:%4.4x)", ft2232_layout, vid, pid); @@ -2032,9 +2043,9 @@ static int ft2232_purge_libftdi(void) static int ft2232_init(void) { - u8 buf[1]; + uint8_t buf[1]; int retval; - u32 bytes_written; + uint32_t bytes_written; const ft2232_layout_t* cur_layout = ft2232_layouts; int i; @@ -2123,8 +2134,8 @@ static int ft2232_init(void) static int usbjtag_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x0b; @@ -2199,8 +2210,8 @@ static int usbjtag_init(void) static int axm0432_jtag_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x2b; @@ -2270,8 +2281,8 @@ static int axm0432_jtag_init(void) static int jtagkey_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x1b; @@ -2353,8 +2364,8 @@ static int jtagkey_init(void) static int olimex_jtag_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x1b; @@ -2421,8 +2432,8 @@ static int olimex_jtag_init(void) static int flyswatter_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x18; low_direction = 0xfb; @@ -2468,8 +2479,8 @@ static int flyswatter_init(void) static int turtle_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x5b; @@ -2509,8 +2520,8 @@ static int turtle_init(void) static int comstick_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x0b; @@ -2553,8 +2564,8 @@ static int comstick_init(void) static int stm32stick_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x88; low_direction = 0x8b; @@ -2597,8 +2608,8 @@ static int stm32stick_init(void) static int sheevaplug_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x1b; @@ -2648,8 +2659,8 @@ static int sheevaplug_init(void) static int cortino_jtag_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_output = 0x08; low_direction = 0x1b; @@ -2827,8 +2838,6 @@ static int ft2232_handle_layout_command(struct command_context_s* cmd_ctx, char* static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char* cmd, char** args, int argc) { - int i; - if (argc > MAX_USB_IDS * 2) { LOG_WARNING("ignoring extra IDs in ft2232_vid_pid " @@ -2839,13 +2848,21 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char { LOG_WARNING("incomplete ft2232_vid_pid configuration directive"); if (argc < 2) - return ERROR_OK; + return ERROR_COMMAND_SYNTAX_ERROR; + // remove the incomplete trailing id + argc -= 1; } - for (i = 0; i + 1 < argc; i += 2) + int i; + int retval = ERROR_OK; + for (i = 0; i < argc; i += 2) { - ft2232_vid[i >> 1] = strtol(args[i], NULL, 0); - ft2232_pid[i >> 1] = strtol(args[i + 1], NULL, 0); + retval = parse_u16(args[i], &ft2232_vid[i >> 1]); + if (ERROR_OK != retval) + break; + retval = parse_u16(args[i + 1], &ft2232_pid[i >> 1]); + if (ERROR_OK != retval) + break; } /* @@ -2854,7 +2871,7 @@ static int ft2232_handle_vid_pid_command(struct command_context_s* cmd_ctx, char */ ft2232_vid[i >> 1] = ft2232_pid[i >> 1] = 0; - return ERROR_OK; + return retval; } @@ -2878,7 +2895,7 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd) int retval = 0; /* 7 bits of either ones or zeros. */ - u8 tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00); + uint8_t tms = (tap_get_state() == TAP_RESET ? 0x7F : 0x00); while (num_cycles > 0) { @@ -2943,8 +2960,8 @@ static int ft2232_stableclocks(int num_cycles, jtag_command_t* cmd) * ADBUS7 - GND */ static int icebear_jtag_init(void) { - u8 buf[3]; - u32 bytes_written; + uint8_t buf[3]; + uint32_t bytes_written; low_direction = 0x0b; /* output: TCK TDI TMS; input: TDO */ low_output = 0x08; /* high: TMS; low: TCK TDI */