X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fjtag%2Fgw16012.c;h=7845e778892c7c14e679fdfd01cc63438bd4adf3;hb=7c7fed0283e5c6e434de94af443218ef78175e87;hp=8454c32cf66b6bde968156232f5b05cea9cab5f4;hpb=7372da95be777faad07244fd2d10968fae527e50;p=openocd.git diff --git a/src/jtag/gw16012.c b/src/jtag/gw16012.c index 8454c32cf6..7845e77889 100644 --- a/src/jtag/gw16012.c +++ b/src/jtag/gw16012.c @@ -21,10 +21,9 @@ #include "config.h" #endif -#include "replacements.h" - #include "jtag.h" + #if 1 #define _DEBUG_GW16012_IO_ #endif @@ -33,7 +32,6 @@ /* -ino: 060521-1036 */ #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) -#include #include #include #define ioperm(startport,length,enable)\ @@ -41,14 +39,8 @@ #else -#ifdef _WIN32 -#include "errno.h" -#endif /* _WIN32 */ - #endif /* __FreeBSD__, __FreeBSD_kernel__ */ -#include -#include #if PARPORT_USE_PPDEV == 1 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) @@ -68,14 +60,10 @@ #endif #endif -#if PARPORT_USE_GIVEIO == 1 -#if IS_CYGWIN == 1 +#if PARPORT_USE_GIVEIO == 1 && IS_CYGWIN == 1 #include -#include -#endif #endif -#include "log.h" /* configuration */ u16 gw16012_port; @@ -461,65 +449,83 @@ static int gw16012_get_giveio_access(void) } #endif -static int gw16012_init(void) -{ -#if PARPORT_USE_PPDEV == 1 - char buffer[256]; - int i = 0; -#endif - u8 status_port; - #if PARPORT_USE_PPDEV == 1 - if (device_handle>0) - { - LOG_ERROR("device is already opened"); - return ERROR_JTAG_INIT_FAILED; - } #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - LOG_DEBUG("opening /dev/ppi%d...", gw16012_port); - snprintf(buffer, 256, "/dev/ppi%d", gw16012_port); - device_handle = open(buffer, O_WRONLY); -#else - LOG_DEBUG("opening /dev/parport%d...", gw16012_port); +#define GW16012_PPDEV_NAME "ppi" - snprintf(buffer, 256, "/dev/parport%d", gw16012_port); - device_handle = open(buffer, O_WRONLY); -#endif - if (device_handle<0) +static int gw16012_init_ioctls(void) +{ + int temp = 0; + temp = ioctl(device_handle, PPCLAIM); + if (temp < 0) { - LOG_ERROR("cannot open device. check it exists and that user read and write rights are set"); + LOG_ERROR("cannot claim device"); return ERROR_JTAG_INIT_FAILED; } - LOG_DEBUG("...open"); + temp = PARPORT_MODE_COMPAT; + temp = ioctl(device_handle, PPSETMODE, &temp); + if (temp < 0) + { + LOG_ERROR(" cannot set compatible mode to device"); + return ERROR_JTAG_INIT_FAILED; + } -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) - i=ioctl(device_handle, PPCLAIM); - if (i<0) + temp = IEEE1284_MODE_COMPAT; + temp = ioctl(device_handle, PPNEGOT, &temp); + if (temp < 0) { - LOG_ERROR("cannot claim device"); + LOG_ERROR("cannot set compatible 1284 mode to device"); return ERROR_JTAG_INIT_FAILED; } + return ERROR_OK; +} +#else + +#define GW16012_PPDEV_NAME "parport" - i = PARPORT_MODE_COMPAT; - i= ioctl(device_handle, PPSETMODE, & i); - if (i<0) +static int gw16012_init_ioctls(void) +{ + return ERROR_OK; +} + +#endif // defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + +static int gw16012_init_device(void) +{ + const char *device_name = GW16012_PPDEV_NAME; + char buffer[256]; + + if (device_handle > 0) { - LOG_ERROR(" cannot set compatible mode to device"); + LOG_ERROR("device is already opened"); return ERROR_JTAG_INIT_FAILED; } - i = IEEE1284_MODE_COMPAT; - i = ioctl(device_handle, PPNEGOT, & i); - if (i<0) + snprintf(buffer, 256, "/dev/%s%d", device_name, gw16012_port); + LOG_DEBUG("opening %s...", buffer); + + device_handle = open(buffer, O_WRONLY); + if (device_handle<0) { - LOG_ERROR("cannot set compatible 1284 mode to device"); + LOG_ERROR("cannot open device. check it exists and that user read and write rights are set"); return ERROR_JTAG_INIT_FAILED; } -#endif -#else + + LOG_DEBUG("...open"); + + if (gw16012_init_ioctls() != ERROR_OK) + return ERROR_JTAG_INIT_FAILED; + + return ERROR_OK; +} + +#else // PARPORT_USE_PPDEV + +static int gw16012_init_device(void) +{ if (gw16012_port == 0) { gw16012_port = 0x378; @@ -544,7 +550,17 @@ static int gw16012_init(void) #else outb(0x0, gw16012_port + 2); #endif -#endif /* PARPORT_USE_PPDEV */ + return ERROR_OK; +} + +#endif // PARPORT_USE_PPDEV + +static int gw16012_init(void) +{ + u8 status_port; + + if (gw16012_init_device() != ERROR_OK) + return ERROR_JTAG_INIT_FAILED; gw16012_input(&status_port); gw16012_msb = (status_port & 0x80) ^ 0x80;