[syslinux:lwip] core/pxe: lwip semaphore changes

syslinux-bot for Gene Cumm gene.cumm at gmail.com
Tue May 29 16:09:05 PDT 2012


Commit-ID:  930e929b202ed292077fb14981e5c6bd4c55651e
Gitweb:     http://www.syslinux.org/commit/930e929b202ed292077fb14981e5c6bd4c55651e
Author:     Gene Cumm <gene.cumm at gmail.com>
AuthorDate: Fri, 27 Apr 2012 22:36:16 -0400
Committer:  Gene Cumm <gene.cumm at gmail.com>
CommitDate: Fri, 27 Apr 2012 22:36:16 -0400

core/pxe: lwip  semaphore changes

Upstream changed how it called back to the system implementing
semaphores/mutexes

Signed-off-by: Gene Cumm <gene.cumm at gmail.com>

---
 core/lwip/src/arch/sys_arch.c         |   98 +++++++++++++++++++++++---------
 core/lwip/src/include/arch/sys_arch.h |    7 ++-
 core/lwip/src/include/lwipopts.h      |    4 +
 3 files changed, 80 insertions(+), 29 deletions(-)

diff --git a/core/lwip/src/arch/sys_arch.c b/core/lwip/src/arch/sys_arch.c
index 65be387..5f8437e 100644
--- a/core/lwip/src/arch/sys_arch.c
+++ b/core/lwip/src/arch/sys_arch.c
@@ -8,77 +8,119 @@ void sys_init(void)
 {
 }
 
-sys_sem_t sys_sem_new(u8_t count)
+err_t sys_sem_new(sys_sem_t *sem, u8_t count)
 {
-    sys_sem_t sem = malloc(sizeof(struct semaphore));
     if (!sem)
-	return NULL;
+	return EINVAL;
+    *sem = malloc(sizeof(struct semaphore));
+    if (!*sem)
+	return ENOMEM;
 
-    sem_init(sem, count);
-    return sem;
+    sem_init(*sem, count);
+    return 0;
 }
 
-void sys_sem_free(sys_sem_t sem)
+void sys_sem_free(sys_sem_t *sem)
 {
-    free(sem);
+    if (!!sem && !!*sem) {
+	sys_sem_set_invalid(sem);
+	free(*sem);
+    }
 }
 
-u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout)
+void sys_sem_set_invalid(sys_sem_t *sem)
+{
+    if (!sem || !*sem)
+	return;
+    sem_set_invalid(*sem);
+}
+
+
+int sys_sem_valid(sys_sem_t *sem)
+{
+    if (!sem || !*sem)
+	return 0;
+    return sem_is_valid(*sem);
+}
+
+u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
 {
     mstime_t rv;
 
-    rv = sem_down(sem, timeout);
+    if (!!sem)
+	return SYS_ARCH_TIMEOUT;
+    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)
+err_t sys_mbox_new(sys_mbox_t *mbox, int size)
 {
-    struct mailbox *mbox;
-
-    mbox = malloc(MBOX_BYTES(size));
     if (!mbox)
-	return NULL;
+	return EINVAL;
+    *mbox = malloc(MBOX_BYTES(size));
+    if (!(*mbox))
+	return ENOMEM;
 
-    mbox_init(mbox, size);
-    return mbox;
+    mbox_init(*mbox, size);
+    return 0;
 }
 
-void sys_mbox_free(sys_mbox_t mbox)
+void sys_mbox_free(sys_mbox_t *mbox)
 {
-    free(mbox);
+    if (!!mbox && !!*mbox)
+	free(*mbox);
 }
 
-void sys_mbox_post(sys_mbox_t mbox, void *msg)
+void sys_mbox_post(sys_mbox_t *mbox, void *msg)
 {
-    mbox_post(mbox, msg, 0);
+    if (!!mbox)
+	mbox_post(*mbox, msg, 0);
 }
 
-err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg)
+err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
 {
-    return mbox_post(mbox, msg, -1);
+    if (!mbox)
+	return EINVAL;
+    return mbox_post(*mbox, msg, -1);
 }
 
-u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout)
+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 (!mbox)
+	return SYS_MBOX_EMPTY;
+    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)
+u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
+{
+    if (!mbox)
+	return SYS_MBOX_EMPTY;
+    return mbox_fetch(*mbox, msg, -1);
+}
+
+void sys_mbox_set_invalid(sys_mbox_t *mbox)
 {
-    return mbox_fetch(mbox, msg, -1);
+    if (!!mbox)
+	mbox_set_invalid(*mbox);
 }
 
-sys_thread_t sys_thread_new(char *name, void (*thread)(void *),
-			     void *arg, int stacksize, int prio)
+int sys_mbox_valid(sys_mbox_t *mbox)
+{
+    return ((!!mbox) && mbox_is_valid(*mbox));
+}
+
+
+sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread,
+			    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 8912620..732a19c 100644
--- a/core/lwip/src/include/arch/sys_arch.h
+++ b/core/lwip/src/include/arch/sys_arch.h
@@ -10,7 +10,12 @@ 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)
+static inline void sys_sem_signal(sys_sem_t *sem)
+{
+    if (!!sem)
+	sem_up(*sem);
+}
+
 #define sys_now ms_timer
 
 #define SYS_MBOX_NULL	NULL
diff --git a/core/lwip/src/include/lwipopts.h b/core/lwip/src/include/lwipopts.h
index 5778fe5..5f2ea20 100644
--- a/core/lwip/src/include/lwipopts.h
+++ b/core/lwip/src/include/lwipopts.h
@@ -2,6 +2,7 @@
 #define __LWIPOPTS_H__
 
 #include <byteswap.h>
+#include <netinet/in.h>
 
 #define SYS_LIGHTWEIGHT_PROT	1
 #define LWIP_NETIF_API		1
@@ -64,5 +65,8 @@
 #define LWIP_PLATFORM_HTONS(x)	bswap_16(x)
 #define LWIP_PLATFORM_HTONL(x)	bswap_32(x)
 
+#define LWIP_PREFIX_BYTEORDER_FUNCS	0
+#define LWIP_COMPAT_MUTEX	1
+
 void undiarp_tmr(void);
 #endif /* __LWIPOPTS_H__ */


More information about the Syslinux-commits mailing list