From 82d2633b5f550115e9e7c7d0520babb6680aa38f Mon Sep 17 00:00:00 2001 From: drath Date: Mon, 17 Jul 2006 14:13:27 +0000 Subject: - Added support for native MinGW builds (thanks to Spencer Oliver and Michael Fischer) - you still need to install GiveIO (not part of OpenOCD) - Added state-move support to ftd2xx and bitbang JTAG drivers (required for XScale, possibly useful for other targets, too) - various fixes git-svn-id: svn://svn.berlios.de/openocd/trunk@78 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/jtag/parport.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) (limited to 'src/jtag/parport.c') diff --git a/src/jtag/parport.c b/src/jtag/parport.c index 8265ada8..e78215e2 100644 --- a/src/jtag/parport.c +++ b/src/jtag/parport.c @@ -17,22 +17,34 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef HAVE_CONFIG_H #include "config.h" -#include "log.h" +#endif + +#include "replacements.h" + #include "jtag.h" #include "bitbang.h" /* system includes */ // -ino: 060521-1036 #ifdef __FreeBSD__ + #include #include #include #define ioperm(startport,length,enable)\ i386_set_ioperm((startport), (length), (enable)) + #else + +#ifndef _WIN32 #include -#endif +#else +#include "errno.h" +#endif /* _WIN32 */ + +#endif /* __FreeBSD__ */ #include #include @@ -45,6 +57,16 @@ #include #endif +#if PARPORT_USE_GIVEIO == 1 +#if IS_CYGWIN == 1 +#include +#include +#undef ERROR +#endif +#endif + +#include "log.h" + /* parallel port cable description */ typedef struct cable_s @@ -221,6 +243,32 @@ int parport_register_commands(struct command_context_s *cmd_ctx) return ERROR_OK; } +#if PARPORT_USE_GIVEIO == 1 +int parport_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 parport_init(void) { cable_t *cur_cable; @@ -303,11 +351,16 @@ int parport_init(void) dataport = parport_port; statusport = parport_port + 1; - if (ioperm(dataport, 3, 1) != 0) { +#if PARPORT_USE_GIVEIO == 1 + if (parport_get_giveio_access() != 0) +#else /* PARPORT_USE_GIVEIO */ + if (ioperm(dataport, 3, 1) != 0) +#endif /* PARPORT_USE_GIVEIO */ + { ERROR("missing privileges for direct i/o"); return ERROR_JTAG_INIT_FAILED; } -#endif +#endif /* PARPORT_USE_PPDEV */ parport_reset(0, 0); parport_write(0, 0, 0); -- cgit v1.2.3