diff options
author | Zheng Da <zhengda1936@gmail.com> | 2009-11-17 10:26:25 +0100 |
---|---|---|
committer | Zheng Da <zhengda1936@gmail.com> | 2009-11-17 10:26:25 +0100 |
commit | a3eba19470c09f42272dac5ca1a34bd8a5cbe834 (patch) | |
tree | 06a10087ad78bcf7bc112de767e95d3b0a849c10 /libddekit/semaphore.c | |
parent | e0faf22f31c48fb27b43c1825897d26e58feafc4 (diff) |
The original version of DDEKit.
Diffstat (limited to 'libddekit/semaphore.c')
-rw-r--r-- | libddekit/semaphore.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libddekit/semaphore.c b/libddekit/semaphore.c new file mode 100644 index 00000000..6fbb7f35 --- /dev/null +++ b/libddekit/semaphore.c @@ -0,0 +1,48 @@ +#include <l4/dde/ddekit/semaphore.h> +#include <l4/dde/ddekit/memory.h> + +#include <l4/semaphore/semaphore.h> + +struct ddekit_sem { + l4semaphore_t sem; +}; + +ddekit_sem_t *ddekit_sem_init(int value) { + ddekit_sem_t *sem; + + sem = (ddekit_sem_t *) ddekit_simple_malloc(sizeof(*sem)); + sem->sem = L4SEMAPHORE_INIT(value); + + return sem; +} + +void ddekit_sem_deinit(ddekit_sem_t *sem) { + ddekit_simple_free(sem); +} + +void ddekit_sem_down(ddekit_sem_t *sem) { +#if 0 + printf("%s:%d sem=%p l4sem=0x%08x\n", __FILE__, __LINE__, sem, sem->sem); + enter_kdebug(""); +#endif + l4semaphore_down(&sem->sem); +/*printf("%s:%d\n", __FILE__, __LINE__); */ +} + +/* returns 0 on success, != 0 when it would block */ +int ddekit_sem_down_try(ddekit_sem_t *sem) { + return l4semaphore_try_down(&sem->sem) ? 0 : 1; +} + +/* returns 0 on success, != 0 on timeout */ +int ddekit_sem_down_timed(ddekit_sem_t *sem, int timo) { + return l4semaphore_down_timed(&sem->sem, timo); +} + +void ddekit_sem_up(ddekit_sem_t *sem) { +#if 0 + printf("%s:%d sem=%p l4sem=0x%08x\n", __FILE__, __LINE__, sem, sem->sem); +#endif + l4semaphore_up(&sem->sem); +} + |