diff options
author | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2006-08-01 09:45:22 +0000 |
---|---|---|
committer | drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2006-08-01 09:45:22 +0000 |
commit | 7d244761461701e1161df32c2f1d4cd50ae2bb26 (patch) | |
tree | 9adfc28cb669a838c338af1f5d6203ca92cc4c7b /src/jtag/amt_jtagaccel.c | |
parent | 1341eb3b0aea74b939a5d7702f696b175d032647 (diff) |
- 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
Diffstat (limited to 'src/jtag/amt_jtagaccel.c')
-rw-r--r-- | src/jtag/amt_jtagaccel.c | 51 |
1 files changed, 49 insertions, 2 deletions
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 <sys/io.h> +#else +#include "errno.h" +#endif /* _WIN32 */ + #include <string.h> #include <stdlib.h> @@ -40,6 +47,16 @@ #include <unistd.h> #endif +#if PARPORT_USE_GIVEIO == 1 +#if IS_CYGWIN == 1 +#include <windows.h> +#include <errno.h> +#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; } |