From: Eric W. Biederman Date: Fri, 8 Apr 2011 22:57:11 +0000 (-0700) Subject: lwip: Enable thread support X-Git-Tag: syslinux-4.10-pre1~65 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6e7fa271784a1fe3cf8d3350c605d56fb6ba5c54;p=platform%2Fupstream%2Fsyslinux.git lwip: Enable thread support Now that all of the syslinux support code has been built for threads enable using that support in lwip. Signed-off-by: Eric W. Biederman --- diff --git a/core/lwip/src/arch/sys_arch.c b/core/lwip/src/arch/sys_arch.c new file mode 100644 index 0000000..b0bc0b6 --- /dev/null +++ b/core/lwip/src/arch/sys_arch.c @@ -0,0 +1,85 @@ +#include "arch/sys_arch.h" +#include "lwip/sys.h" +#include "lwip/mem.h" +#include +#include + +void sys_init(void) +{ +} + +sys_sem_t sys_sem_new(u8_t count) +{ + sys_sem_t sem = malloc(sizeof(struct semaphore)); + if (!sem) + return NULL; + + sem_init(sem, count); + return sem; +} + +void sys_sem_free(sys_sem_t sem) +{ + free(sem); +} + +u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout) +{ + mstime_t rv; + + rv = sem_down(sem, timeout); + if (rv == (mstime_t)-1) + return SYS_ARCH_TIMEOUT; + else + return rv; +} + +sys_mbox_t sys_mbox_new(int size) +{ + struct mailbox *mbox; + + mbox = malloc(sizeof(struct mailbox) + size*sizeof(void *)); + if (!mbox) + return NULL; + + mbox_init(mbox, size); + return mbox; +} + +void sys_mbox_free(sys_mbox_t mbox) +{ + free(mbox); +} + +void sys_mbox_post(sys_mbox_t mbox, void *msg) +{ + mbox_post(mbox, msg, 0); +} + +err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg) +{ + return mbox_post(mbox, msg, -1); +} + +u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout) +{ + mstime_t rv; + + rv = mbox_fetch(mbox, msg, timeout); + if (rv == (mstime_t)-1) + return SYS_ARCH_TIMEOUT; + else + return rv; +} + +u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg) +{ + return mbox_fetch(mbox, msg, -1); +} + +sys_thread_t sys_thread_new(char *name, void (*thread)(void *), + void *arg, int stacksize, int prio) +{ + return start_thread(name, stacksize, prio, thread, arg); +} + diff --git a/core/lwip/src/include/arch/sys_arch.h b/core/lwip/src/include/arch/sys_arch.h index f5ab07e..7bae904 100644 --- a/core/lwip/src/include/arch/sys_arch.h +++ b/core/lwip/src/include/arch/sys_arch.h @@ -3,5 +3,77 @@ #include #include "arch/cc.h" +#include +#include + +typedef struct semaphore *sys_sem_t; +typedef struct mailbox *sys_mbox_t; +typedef struct thread *sys_thread_t; + +#define sys_sem_signal(x) sem_up(x) + +#define SYS_MBOX_NULL NULL +#define SYS_SEM_NULL NULL + +extern void __compile_time_error(void); + +#define SYS_ARCH_OP(var, val, inc, add) \ +do { \ + if (__builtin_constant_p(val) && (val) == 1) { \ + switch (sizeof(var)) { \ + case 1: \ + asm volatile(inc "b %0" : "+m" (var)); \ + break; \ + case 2: \ + asm volatile(inc "w %0" : "+m" (var)); \ + break; \ + case 4: \ + asm volatile(inc "l %0" : "+m" (var)); \ + break; \ + default: \ + __compile_time_error(); \ + break; \ + } \ + } else { \ + switch (sizeof(var)) { \ + case 1: \ + asm volatile(add "b %1,%0" : "+m" (var) : "ri" (val)); \ + break; \ + case 2: \ + asm volatile(add "w %1,%0" : "+m" (var) : "ri" (val)); \ + break; \ + case 4: \ + asm volatile(add "l %1,%0" : "+m" (var) : "ri" (val)); \ + break; \ + default: \ + __compile_time_error(); \ + break; \ + } \ + } \ +} while (0) + +static inline struct sys_timeouts *sys_arch_timeouts(void) +{ + return (struct sys_timeouts *)¤t()->pvt; +} + +#define SYS_ARCH_INC(var, val) SYS_ARCH_OP(var, val, "inc", "add") +#define SYS_ARCH_DEC(var, val) SYS_ARCH_OP(var, val, "dec", "sub") + +#define SYS_ARCH_GET(var, ret) \ + do { \ + volatile __typeof__(var) * const __varp = &(var); \ + ret = *__varp; \ + } while (0) + +#define SYS_ARCH_SET(var, val) \ + do { \ + volatile __typeof__(var) * const __varp = &(var); \ + *__varp = val; \ + } while (0) + +#define SYS_ARCH_DECL_PROTECT(VAR) irq_state_t VAR +#define SYS_ARCH_PROTECT(VAR) VAR = irq_save() +#define SYS_ARCH_UNPROTECT(VAR) irq_restore(VAR) #endif /* __LWIP_ARCH_SYS_ARCH_H__ */ diff --git a/core/lwip/src/include/lwipopts.h b/core/lwip/src/include/lwipopts.h index 656c45f..0c67968 100644 --- a/core/lwip/src/include/lwipopts.h +++ b/core/lwip/src/include/lwipopts.h @@ -1,9 +1,6 @@ #ifndef __LWIPOPTS_H__ #define __LWIPOPTS_H__ -/* Disable most things so I can get lwip to build */ -#define NO_SYS 1 -#define LWIP_NETCONN 0 -#define LWIP_SOCKET 0 +#define SYS_LIGHTWEIGHT_PROT 1 #endif /* __LWIPOPTS_H__ */