提交 18399524 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

More lwIP sys_mbox implementation.

上级 a6a56669
......@@ -12,15 +12,16 @@ typedef struct sys_mbox {
#define MBOXSLOTS 32
struct spinlock s;
struct condvar c;
int head;
int tail;
volatile int invalid;
volatile int head;
volatile int tail;
void *msg[MBOXSLOTS];
} sys_mbox_t;
typedef struct sys_sem {
struct spinlock s;
struct condvar c;
u8 count;
volatile u8 count;
} sys_sem_t;
#define SYS_ARCH_NOWAIT 0xfffffffe
......
......@@ -26,6 +26,7 @@ sys_mbox_new(sys_mbox_t *mbox, int size)
}
mbox->head = 0;
mbox->tail = 0;
mbox->invalid = 0;
initlock(&mbox->s, "lwIP mbox");
initcondvar(&mbox->c, "lwIP mbox");
......@@ -35,7 +36,7 @@ sys_mbox_new(sys_mbox_t *mbox, int size)
void
sys_mbox_set_invalid(sys_mbox_t *mbox)
{
DIE;
mbox->invalid = 1;
}
err_t
......@@ -47,13 +48,18 @@ sys_mbox_trypost(sys_mbox_t *mbox, void *msg)
int
sys_mbox_valid(sys_mbox_t *mbox)
{
DIE;
return !mbox->invalid;
}
void
sys_mbox_post(sys_mbox_t *mbox, void *msg)
{
DIE;
acquire(&mbox->s);
while (mbox->head - mbox->tail == MBOXSLOTS)
cv_sleep(&mbox->c, &mbox->s);
mbox->msg[mbox->head % MBOXSLOTS] = msg;
mbox->head++;
release(&mbox->s);
}
void
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论