From 7d244761461701e1161df32c2f1d4cd50ae2bb26 Mon Sep 17 00:00:00 2001 From: drath Date: Tue, 1 Aug 2006 09:45:22 +0000 Subject: - allow building for MinGW using either -mno-cygwin or the MinGW gcc - added GiveIO support to the amt_jtagaccel driver - explicitly disable loopback mode for FT2232 devices - changed configuration options n[st]rst_delay to jtag_n[st]rst_delay - shutdown network services on exit git-svn-id: svn://svn.berlios.de/openocd/trunk@80 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/amt_jtagaccel.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-- src/jtag/ftd2xx.c | 9 +++++++++ src/jtag/jtag.c | 8 ++++---- 3 files changed, 62 insertions(+), 6 deletions(-) (limited to 'src/jtag') diff --git a/src/jtag/amt_jtagaccel.c b/src/jtag/amt_jtagaccel.c index 113aee66..d788728b 100644 --- a/src/jtag/amt_jtagaccel.c +++ b/src/jtag/amt_jtagaccel.c @@ -21,11 +21,18 @@ #include "config.h" #endif -#include "log.h" +#include "replacements.h" + #include "jtag.h" /* system includes */ + +#ifndef _WIN32 #include +#else +#include "errno.h" +#endif /* _WIN32 */ + #include #include @@ -40,6 +47,16 @@ #include #endif +#if PARPORT_USE_GIVEIO == 1 +#if IS_CYGWIN == 1 +#include +#include +#undef ERROR +#endif +#endif + +#include "log.h" + /* configuration */ unsigned long amt_jtagaccel_port; @@ -382,6 +399,32 @@ int amt_jtagaccel_execute_queue(void) return ERROR_OK; } +#if PARPORT_USE_GIVEIO == 1 +int amt_jtagaccel_get_giveio_access() +{ + HANDLE h; + OSVERSIONINFO version; + + version.dwOSVersionInfoSize = sizeof version; + if (!GetVersionEx( &version )) { + errno = EINVAL; + return -1; + } + if (version.dwPlatformId != VER_PLATFORM_WIN32_NT) + return 0; + + h = CreateFile( "\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); + if (h == INVALID_HANDLE_VALUE) { + errno = ENODEV; + return -1; + } + + CloseHandle( h ); + + return 0; +} +#endif + int amt_jtagaccel_init(void) { #if PARPORT_USE_PPDEV == 1 @@ -435,8 +478,12 @@ int amt_jtagaccel_init(void) amt_jtagaccel_port = 0x378; WARNING("No parport port specified, using default '0x378' (LPT1)"); } - + +#if PARPORT_USE_GIVEIO == 1 + if (amt_jtagaccel_get_giveio_access() != 0) { +#else /* PARPORT_USE_GIVEIO */ if (ioperm(amt_jtagaccel_port, 5, 1) != 0) { +#endif /* PARPORT_USE_GIVEIO */ ERROR("missing privileges for direct i/o"); return ERROR_JTAG_INIT_FAILED; } diff --git a/src/jtag/ftd2xx.c b/src/jtag/ftd2xx.c index e8d29a88..050f9c04 100644 --- a/src/jtag/ftd2xx.c +++ b/src/jtag/ftd2xx.c @@ -799,6 +799,8 @@ int ftd2xx_init(void) u8 latency_timer; FT_STATUS status; DWORD num_devices; + u8 buf[1]; + DWORD bytes_written; ftd2xx_layout_t *cur_layout = ftd2xx_layouts; @@ -900,6 +902,13 @@ int ftd2xx_init(void) return ERROR_JTAG_INIT_FAILED; ftd2xx_speed(jtag_speed); + + buf[0] = 0x85; /* Disconnect TDI/DO to TDO/DI for Loopback */ + if (((status = FT_Write(ftdih, buf, 1, &bytes_written)) != FT_OK) || (bytes_written != 1)) + { + ERROR("couldn't write to ftdi device: %i", status); + return ERROR_JTAG_INIT_FAILED; + } if ((status = FT_Purge(ftdih, FT_PURGE_RX | FT_PURGE_TX)) != FT_OK) { diff --git a/src/jtag/jtag.c b/src/jtag/jtag.c index b8846f17..7c6c911a 100644 --- a/src/jtag/jtag.c +++ b/src/jtag/jtag.c @@ -1147,9 +1147,9 @@ int jtag_register_commands(struct command_context_s *cmd_ctx) COMMAND_CONFIG, NULL); register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command, COMMAND_CONFIG, NULL); - register_command(cmd_ctx, NULL, "nsrst_delay", handle_jtag_nsrst_delay_command, + register_command(cmd_ctx, NULL, "jtag_nsrst_delay", handle_jtag_nsrst_delay_command, COMMAND_CONFIG, NULL); - register_command(cmd_ctx, NULL, "ntrst_delay", handle_jtag_ntrst_delay_command, + register_command(cmd_ctx, NULL, "jtag_ntrst_delay", handle_jtag_ntrst_delay_command, COMMAND_CONFIG, NULL); register_command(cmd_ctx, NULL, "scan_chain", handle_scan_chain_command, @@ -1375,7 +1375,7 @@ int handle_jtag_nsrst_delay_command(struct command_context_s *cmd_ctx, char *cmd { if (argc < 1) { - ERROR("nsrst_delay command takes one required argument"); + ERROR("jtag_nsrst_delay command takes one required argument"); exit(-1); } else @@ -1390,7 +1390,7 @@ int handle_jtag_ntrst_delay_command(struct command_context_s *cmd_ctx, char *cmd { if (argc < 1) { - ERROR("ntrst_delay command takes one required argument"); + ERROR("jtag_ntrst_delay command takes one required argument"); exit(-1); } else -- cgit v1.2.3