Index: api/tcpip.c =================================================================== RCS file: /sources/lwip/lwip/src/api/tcpip.c,v retrieving revision 1.88 diff -u -r1.88 tcpip.c --- api/tcpip.c 14 Apr 2010 07:02:26 -0000 1.88 +++ api/tcpip.c 22 Jan 2011 22:46:39 -0000 @@ -89,14 +89,14 @@ LOCK_TCPIP_CORE(); switch (msg->type) { #if LWIP_NETCONN - case TCPIP_MSG_API: + case TCPIP_STATMSG_API: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: API message %p\n", (void *)msg)); msg->msg.apimsg->function(&(msg->msg.apimsg->msg)); break; #endif /* LWIP_NETCONN */ #if !LWIP_TCPIP_CORE_LOCKING_INPUT - case TCPIP_MSG_INPKT: + case TCPIP_POOLMSG_INPKT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: PACKET %p\n", (void *)msg)); #if LWIP_ETHERNET if (msg->msg.inp.netif->flags & (NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET)) { @@ -111,25 +111,28 @@ #endif /* LWIP_TCPIP_CORE_LOCKING_INPUT */ #if LWIP_NETIF_API - case TCPIP_MSG_NETIFAPI: + case TCPIP_STATMSG_NETIFAPI: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: Netif API message %p\n", (void *)msg)); msg->msg.netifapimsg->function(&(msg->msg.netifapimsg->msg)); break; #endif /* LWIP_NETIF_API */ - case TCPIP_MSG_CALLBACK: + case TCPIP_POOLMSG_CALLBACK: + case TCPIP_STATMSG_CALLBACK: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: CALLBACK %p\n", (void *)msg)); msg->msg.cb.function(msg->msg.cb.ctx); - memp_free(MEMP_TCPIP_MSG_API, msg); + if (msg->type == TCPIP_POOLMSG_CALLBACK) { + memp_free(MEMP_TCPIP_MSG_API, msg); + } break; #if LWIP_TCPIP_TIMEOUT - case TCPIP_MSG_TIMEOUT: + case TCPIP_POOLMSG_TIMEOUT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: TIMEOUT %p\n", (void *)msg)); sys_timeout(msg->msg.tmo.msecs, msg->msg.tmo.h, msg->msg.tmo.arg); memp_free(MEMP_TCPIP_MSG_API, msg); break; - case TCPIP_MSG_UNTIMEOUT: + case TCPIP_POOLMSG_UNTIMEOUT: LWIP_DEBUGF(TCPIP_DEBUG, ("tcpip_thread: UNTIMEOUT %p\n", (void *)msg)); sys_untimeout(msg->msg.tmo.h, msg->msg.tmo.arg); memp_free(MEMP_TCPIP_MSG_API, msg); @@ -178,7 +181,7 @@ return ERR_MEM; } - msg->type = TCPIP_MSG_INPKT; + msg->type = TCPIP_POOLMSG_INPKT; msg->msg.inp.p = p; msg->msg.inp.netif = inp; if (sys_mbox_trypost(&mbox, msg) != ERR_OK) { @@ -213,7 +216,7 @@ return ERR_MEM; } - msg->type = TCPIP_MSG_CALLBACK; + msg->type = TCPIP_POOLMSG_CALLBACK; msg->msg.cb.function = function; msg->msg.cb.ctx = ctx; if (block) { @@ -249,7 +252,7 @@ return ERR_MEM; } - msg->type = TCPIP_MSG_TIMEOUT; + msg->type = TCPIP_POOLMSG_TIMEOUT; msg->msg.tmo.msecs = msecs; msg->msg.tmo.h = h; msg->msg.tmo.arg = arg; @@ -278,7 +281,7 @@ return ERR_MEM; } - msg->type = TCPIP_MSG_UNTIMEOUT; + msg->type = TCPIP_POOLMSG_UNTIMEOUT; msg->msg.tmo.h = h; msg->msg.tmo.arg = arg; sys_mbox_post(&mbox, msg); @@ -307,7 +310,7 @@ #endif if (sys_mbox_valid(&mbox)) { - msg.type = TCPIP_MSG_API; + msg.type = TCPIP_STATMSG_API; msg.msg.apimsg = apimsg; sys_mbox_post(&mbox, &msg); sys_arch_sem_wait(&apimsg->msg.conn->op_completed, 0); @@ -363,7 +366,7 @@ return err; } - msg.type = TCPIP_MSG_NETIFAPI; + msg.type = TCPIP_STATMSG_NETIFAPI; msg.msg.netifapimsg = netifapimsg; sys_mbox_post(&mbox, &msg); sys_sem_wait(&netifapimsg->msg.sem); @@ -393,6 +396,19 @@ #endif /* LWIP_NETIF_API */ /** + * Try to post a message to the tcpip_thread mbox + * This is intended to be used to send "static" messages from interrupt context. + * + * @param msg pointer to the message to post + * @return sys_mbox_trypost() return code + */ +err_t +tcpip_trypost(struct tcpip_msg* msg) +{ + return sys_mbox_trypost(&mbox, msg); +} + +/** * Initialize this module: * - initialize all sub modules * - start the tcpip_thread Index: include/lwip/tcpip.h =================================================================== RCS file: /sources/lwip/lwip/src/include/lwip/tcpip.h,v retrieving revision 1.37 diff -u -r1.37 tcpip.h --- include/lwip/tcpip.h 14 Apr 2010 07:02:26 -0000 1.37 +++ include/lwip/tcpip.h 22 Jan 2011 22:49:23 -0000 @@ -95,6 +95,9 @@ #endif /* LWIP_TCPIP_CORE_LOCKING */ #endif /* LWIP_NETIF_API */ +struct tcpip_msg; +err_t tcpip_trypost(struct tcpip_msg* msg); + err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block); #define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) @@ -109,17 +112,18 @@ enum tcpip_msg_type { #if LWIP_NETCONN - TCPIP_MSG_API, + TCPIP_STATMSG_API, #endif /* LWIP_NETCONN */ - TCPIP_MSG_INPKT, + TCPIP_POOLMSG_INPKT, #if LWIP_NETIF_API - TCPIP_MSG_NETIFAPI, + TCPIP_STATMSG_NETIFAPI, #endif /* LWIP_NETIF_API */ #if LWIP_TCPIP_TIMEOUT - TCPIP_MSG_TIMEOUT, - TCPIP_MSG_UNTIMEOUT, + TCPIP_POOLMSG_TIMEOUT, + TCPIP_POOLMSG_UNTIMEOUT, #endif /* LWIP_TCPIP_TIMEOUT */ - TCPIP_MSG_CALLBACK + TCPIP_POOLMSG_CALLBACK, + TCPIP_STATMSG_CALLBACK }; struct tcpip_msg {