1 
2 #ifndef THREADING_SEMAPHORE_T
3 #define THREADING_SEMAPHORE_T
4 
5 #include <threading/preempt.h>
6 #include <sys/compiler.h>
7 #include <sys/types.h>
8 
9 typedef struct {
10     int             value;                 /**< Value of the semaphore */
11     u8_t            waiters_num;           /**< Number of waiters */
12     int             waiters[MAX_THREADS];  /**< Number of waiting threads */
13 } sem_t;
14 
15 #asm
16 DEFVARS 0
17 {
18     semaphore_value         ds.w 1
19     semaphore_waiters_num   ds.b 1
20     semaphore_waiters       ds.w MAX_THREADS
21 }
22 #endasm
23 
24 extern int __LIB__ sem_init(sem_t *sempahore, int shared, int value) __smallc;
25 extern int __LIB__ sem_wait(sem_t *semaphore);
26 extern int __LIB__ sem_post(sem_t *semaphore);
27 extern int __LIB__ sem_getvalue(sem_t *semaphore, int *value) __smallc;
28 extern int __LIB__ sem_destroy(sem_t *semaphore);
29 
30 
31 #endif
32