Lines Matching refs:mbox

66 err_t sys_mbox_new(sys_mbox_t * mbox, int size)  in sys_mbox_new()  argument
68 sem_init(&mbox->empty, size); in sys_mbox_new()
69 sem_init(&mbox->full, 0); in sys_mbox_new()
70 mutex_init(&mbox->lock); in sys_mbox_new()
72 mbox->magic = MBOX_MAGIC; in sys_mbox_new()
73 mbox->head = 0; in sys_mbox_new()
74 mbox->tail = 0; in sys_mbox_new()
75 mbox->size = size; in sys_mbox_new()
77 mbox->queue = calloc(size, sizeof(void *)); in sys_mbox_new()
78 if (!mbox->queue) in sys_mbox_new()
84 void sys_mbox_free(sys_mbox_t *mbox) in sys_mbox_free() argument
86 free(mbox->queue); in sys_mbox_free()
87 mbox->queue = NULL; in sys_mbox_free()
90 void sys_mbox_post(sys_mbox_t * mbox, void *msg) in sys_mbox_post() argument
92 sem_wait(&mbox->empty); in sys_mbox_post()
93 mutex_acquire(&mbox->lock); in sys_mbox_post()
95 mbox->queue[mbox->head] = msg; in sys_mbox_post()
96 mbox->head = (mbox->head + 1) % mbox->size; in sys_mbox_post()
98 mutex_release(&mbox->lock); in sys_mbox_post()
99 sem_post(&mbox->full, true); in sys_mbox_post()
102 u32_t sys_arch_mbox_tryfetch(sys_mbox_t * mbox, void **msg) in sys_arch_mbox_tryfetch() argument
108 res = sem_trywait(&mbox->full); in sys_arch_mbox_tryfetch()
114 mutex_acquire(&mbox->lock); in sys_arch_mbox_tryfetch()
116 *msg = mbox->queue[mbox->tail]; in sys_arch_mbox_tryfetch()
117 mbox->tail = (mbox->tail + 1) % mbox->size; in sys_arch_mbox_tryfetch()
119 mutex_release(&mbox->lock); in sys_arch_mbox_tryfetch()
120 sem_post(&mbox->empty, true); in sys_arch_mbox_tryfetch()
126 u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) in sys_arch_mbox_fetch() argument
133 res = sem_timedwait(&mbox->full, timeout ? timeout : INFINITE_TIME); in sys_arch_mbox_fetch()
139 mutex_acquire(&mbox->lock); in sys_arch_mbox_fetch()
141 *msg = mbox->queue[mbox->tail]; in sys_arch_mbox_fetch()
142 mbox->tail = (mbox->tail + 1) % mbox->size; in sys_arch_mbox_fetch()
144 mutex_release(&mbox->lock); in sys_arch_mbox_fetch()
145 sem_post(&mbox->empty, true); in sys_arch_mbox_fetch()
151 err_t sys_mbox_trypost(sys_mbox_t * mbox, void *msg) in sys_mbox_trypost() argument
155 res = sem_trywait(&mbox->empty); in sys_mbox_trypost()
159 mutex_acquire(&mbox->lock); in sys_mbox_trypost()
161 mbox->queue[mbox->head] = msg; in sys_mbox_trypost()
162 mbox->head = (mbox->head + 1) % mbox->size; in sys_mbox_trypost()
164 mutex_release(&mbox->lock); in sys_mbox_trypost()
165 sem_post(&mbox->full, true); in sys_mbox_trypost()
170 int sys_mbox_valid(sys_mbox_t *mbox) in sys_mbox_valid() argument
172 return mbox->magic == MBOX_MAGIC; in sys_mbox_valid()
175 void sys_mbox_set_invalid(sys_mbox_t *mbox) in sys_mbox_set_invalid() argument
177 mbox->magic = 'xobm'; in sys_mbox_set_invalid()