zy1000: switch to pthread

pthreads work under Linux and eCos.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
__archive__
Øyvind Harboe 2011-03-03 10:16:17 +01:00
parent 2321bb3c42
commit 9eeb02c165
1 changed files with 13 additions and 11 deletions

View File

@ -45,6 +45,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <pthread.h>
#include <target/embeddedice.h> #include <target/embeddedice.h>
#include <jtag/minidriver.h> #include <jtag/minidriver.h>
#include <jtag/interface.h> #include <jtag/interface.h>
@ -1026,7 +1028,6 @@ static const struct command_registration zy1000_commands[] = {
}; };
#if !BUILD_ZY1000_MASTER || BUILD_ECOSBOARD
static int tcp_ip = -1; static int tcp_ip = -1;
/* Write large packets if we can */ /* Write large packets if we can */
@ -1098,7 +1099,6 @@ static bool readLong(uint32_t *out_data)
*out_data = data; *out_data = data;
return true; return true;
} }
#endif
enum ZY1000_CMD enum ZY1000_CMD
{ {
@ -1353,14 +1353,15 @@ static void writeShiftValue(uint8_t *data, int bits)
#endif #endif
#if BUILD_ECOSBOARD #if BUILD_ZY1000_MASTER
static char tcpip_stack[2048];
static cyg_thread tcpip_thread_object;
static cyg_handle_t tcpip_thread_handle;
pthread_t thread;
#if BUILD_ECOSBOARD
static char watchdog_stack[2048]; static char watchdog_stack[2048];
static cyg_thread watchdog_thread_object; static cyg_thread watchdog_thread_object;
static cyg_handle_t watchdog_thread_handle; static cyg_handle_t watchdog_thread_handle;
#endif
/* Infinite loop peeking & poking */ /* Infinite loop peeking & poking */
static void tcpipserver(void) static void tcpipserver(void)
@ -1412,7 +1413,7 @@ static void tcpipserver(void)
} }
static void tcpip_server(cyg_addrword_t data) static void *tcpip_server(void *data)
{ {
int so_reuseaddr_option = 1; int so_reuseaddr_option = 1;
@ -1474,8 +1475,10 @@ static void tcpip_server(cyg_addrword_t data)
close(tcp_ip); close(tcp_ip);
} }
/* Never reached actually */
close(fd); close(fd);
return NULL;
} }
#ifdef WATCHDOG_BASE #ifdef WATCHDOG_BASE
@ -1616,18 +1619,17 @@ int zy1000_init(void)
return retval; return retval;
zy1000_speed(jtag_speed_var); zy1000_speed(jtag_speed_var);
#if BUILD_ZY1000_MASTER
pthread_create(&thread, NULL, tcpip_server, NULL);
#if BUILD_ECOSBOARD #if BUILD_ECOSBOARD
cyg_thread_create(1, tcpip_server, (cyg_addrword_t) 0, "tcip/ip server",
(void *) tcpip_stack, sizeof(tcpip_stack),
&tcpip_thread_handle, &tcpip_thread_object);
cyg_thread_resume(tcpip_thread_handle);
#ifdef WATCHDOG_BASE #ifdef WATCHDOG_BASE
cyg_thread_create(1, watchdog_server, (cyg_addrword_t) 0, "watchdog tcip/ip server", cyg_thread_create(1, watchdog_server, (cyg_addrword_t) 0, "watchdog tcip/ip server",
(void *) watchdog_stack, sizeof(watchdog_stack), (void *) watchdog_stack, sizeof(watchdog_stack),
&watchdog_thread_handle, &watchdog_thread_object); &watchdog_thread_handle, &watchdog_thread_object);
cyg_thread_resume(watchdog_thread_handle); cyg_thread_resume(watchdog_thread_handle);
#endif #endif
#endif
#endif #endif
return ERROR_OK; return ERROR_OK;