summaryrefslogtreecommitdiff
path: root/core/lwip/src/arch
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2011-04-08 15:57:11 -0700
committerEric W. Biederman <ebiederm@xmission.com>2011-04-09 18:27:07 -0700
commit6e7fa271784a1fe3cf8d3350c605d56fb6ba5c54 (patch)
tree8acac1f1a769900d902a03a1873ef9b809dc555f /core/lwip/src/arch
parenta100261df05a228f8590328c12d60ca0c7a03198 (diff)
downloadsyslinux-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.c85
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);
+}
+