]> git.sur5r.net Git - openocd/blobdiff - src/jtag/gw16012.c
code to be used in upcoming minidriver work.
[openocd] / src / jtag / gw16012.c
index 1f1f6086833c3f62f35c2cef088ddf454ff681cb..c634df3199476a064f29d38f130c0c68b678747f 100644 (file)
 #define _DEBUG_GW16012_IO_
 #endif
 
-/* system includes */
-
 /* system includes */
 // -ino: 060521-1036
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 
 #include <sys/types.h>
 #include <machine/sysarch.h>
 
 #else
 
-#ifndef _WIN32
-#include <sys/io.h>
-#else
+#ifdef _WIN32
 #include "errno.h"
 #endif /* _WIN32 */
 
-#endif /* __FreeBSD__ */
+#endif /* __FreeBSD__, __FreeBSD_kernel__ */
 
 #include <string.h>
 #include <stdlib.h>
@@ -58,7 +54,7 @@
 #include <time.h>
 
 #if PARPORT_USE_PPDEV == 1
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include <dev/ppbus/ppi.h>
 #include <dev/ppbus/ppbconf.h>
 #define PPRSTATUS      PPIGSTATUS
 #endif
 #include <fcntl.h>
 #include <sys/ioctl.h>
+#else /* not PARPORT_USE_PPDEV */
+#ifndef _WIN32
+#include <sys/io.h>
+#endif
 #endif
 
 #if PARPORT_USE_GIVEIO == 1
@@ -82,7 +82,7 @@
 #include "log.h"
 
 /* configuration */
-unsigned long gw16012_port;
+u16 gw16012_port;
 
 /* interface variables
  */
@@ -107,8 +107,6 @@ jtag_interface_t gw16012_interface =
        
        .execute_queue = gw16012_execute_queue,
 
-       .support_pathmove = 0,
-
        .speed = gw16012_speed, 
        .register_commands = gw16012_register_commands,
        .init = gw16012_init,
@@ -135,7 +133,7 @@ void gw16012_data(u8 value)
        #if PARPORT_USE_PPDEV == 1
                ioctl(device_handle, PPWDATA, &value);
        #else
-               #ifdef __FreeBSD__
+               #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
                        outb(gw16012_port, value);
                #else
                        outb(value, gw16012_port);
@@ -156,7 +154,7 @@ void gw16012_control(u8 value)
                #if PARPORT_USE_PPDEV == 1
                        ioctl(device_handle, PPWCONTROL, &gw16012_control_value);
                #else
-                       #ifdef __FreeBSD__
+                       #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
                                outb(gw16012_port + 2, gw16012_control_value);
                        #else
                                outb(gw16012_control_value, gw16012_port + 2);
@@ -360,6 +358,12 @@ int gw16012_execute_queue(void)
        int scan_size;
        enum scan_type type;
        u8 *buffer;
+       int retval;
+       
+       /* return ERROR_OK, unless a jtag_read_buffer returns a failed check
+        * that wasn't handled by a caller-provided error handler
+        */ 
+       retval = ERROR_OK;
                
        while (cmd)
        {
@@ -415,7 +419,7 @@ int gw16012_execute_queue(void)
 #endif
                                gw16012_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
                                if (jtag_read_buffer(buffer, cmd->cmd.scan) != ERROR_OK)
-                                       return ERROR_JTAG_QUEUE_FAILED;
+                                       retval = ERROR_JTAG_QUEUE_FAILED;
                                if (buffer)
                                        free(buffer);
                                break;
@@ -432,7 +436,7 @@ int gw16012_execute_queue(void)
                cmd = cmd->next;
        }
        
-       return ERROR_OK;
+       return retval;
 }
 
 #if PARPORT_USE_GIVEIO == 1
@@ -466,7 +470,6 @@ int gw16012_init(void)
 #if PARPORT_USE_PPDEV == 1
        char buffer[256];
        int i = 0;
-       u8 control_port;
 #endif
        u8 status_port;
        
@@ -477,7 +480,7 @@ int gw16012_init(void)
                return ERROR_JTAG_INIT_FAILED;
        }
 
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        DEBUG("opening /dev/ppi%d...", gw16012_port);
 
        snprintf(buffer, 256, "/dev/ppi%d", gw16012_port);
@@ -496,7 +499,7 @@ int gw16012_init(void)
 
        DEBUG("...open");
 
-#ifndef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        i=ioctl(device_handle, PPCLAIM);
        if (i<0)
        {
@@ -540,7 +543,7 @@ int gw16012_init(void)
        DEBUG("...privileges granted");
 
        /* make sure parallel port is in right mode (clear tristate and interrupt */
-#ifdef __FreeBSD__
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        outb(gw16012_port + 2, 0x0);
 #else
        outb(0x0, gw16012_port + 2);