diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2011-04-08 15:57:11 -0700 |
|---|---|---|
| committer | Eric W. Biederman <ebiederm@xmission.com> | 2011-04-09 18:27:07 -0700 |
| commit | 6e7fa271784a1fe3cf8d3350c605d56fb6ba5c54 (patch) | |
| tree | 8acac1f1a769900d902a03a1873ef9b809dc555f /core/lwip/src/arch | |
| parent | a100261df05a228f8590328c12d60ca0c7a03198 (diff) | |
| download | syslinux-6e7fa271784a1fe3cf8d3350c605d56fb6ba5c54.tar.gz | |
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 <ebiederm@xmission.com>
Diffstat (limited to 'core/lwip/src/arch')
| -rw-r--r-- | core/lwip/src/arch/sys_arch.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/core/lwip/src/arch/sys_arch.c b/core/lwip/src/arch/sys_arch.c new file mode 100644 index 00000000..b0bc0b6f --- /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 <stdlib.h> +#include <thread.h> + +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); +} + |
