]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/include/ddekit/lock.h
Inital import
[l4.git] / l4 / pkg / dde / include / ddekit / lock.h
1 #pragma once
2
3 #include <l4/sys/compiler.h>
4
5 EXTERN_C_BEGIN
6
7 struct ddekit_lock;
8 typedef struct ddekit_lock *ddekit_lock_t;
9
10 /** Initialize a DDEKit lock. 
11  *
12  * \ingroup DDEKit_synchronization
13  */
14 void ddekit_lock_init    (ddekit_lock_t *mtx);
15
16 L4_INLINE void ddekit_lock_init_unlocked(ddekit_lock_t *mtx);
17
18 /** Uninitialize a DDEKit lock.
19  *
20  * \ingroup DDEKit_synchronization
21  */
22 void ddekit_lock_deinit  (ddekit_lock_t *mtx);
23
24 /** Acquire a lock.
25  *
26  * \ingroup DDEKit_synchronization
27  */
28 void ddekit_lock_lock    (ddekit_lock_t *mtx);
29
30 /** Acquire a lock, non-blocking.
31  *
32  * \return 0 on success
33  *         <0 error code
34  *
35  * \ingroup DDEKit_synchronization
36  */
37 int  ddekit_lock_try_lock(ddekit_lock_t *mtx);
38
39 /** Unlock function.
40  *
41  * \ingroup DDEKit_synchronization
42  */
43 void ddekit_lock_unlock  (ddekit_lock_t *mtx);
44
45 /** Get lock owner.
46  *
47  *  \return 0 unlocked
48  *          !=0 owner
49  * \ingroup DDEKit_synchronization
50  */
51 int ddekit_lock_owner(ddekit_lock_t *mtx);
52
53 L4_INLINE void ddekit_lock_init_unlocked(ddekit_lock_t *mtx)
54 {
55         ddekit_lock_init(mtx);
56 }
57
58 EXTERN_C_END