00001 #ifndef _ddekit_lock_h 00002 #define _ddekit_lock_h 00003 00004 struct ddekit_lock; 00005 00006 /** Initialize a DDEKit lock. 00007 * 00008 * \ingroup DDEKit_synchronization 00009 */ 00010 void _ddekit_lock_init (struct ddekit_lock **mtx); 00011 00012 /** Uninitialize a DDEKit lock. 00013 * 00014 * \ingroup DDEKit_synchronization 00015 */ 00016 void _ddekit_lock_deinit (struct ddekit_lock **mtx); 00017 00018 /** Acquire a lock. 00019 * 00020 * \ingroup DDEKit_synchronization 00021 */ 00022 void _ddekit_lock_lock (struct ddekit_lock **mtx); 00023 00024 /** Acquire a lock, non-blocking. 00025 * 00026 * \ingroup DDEKit_synchronization 00027 */ 00028 int _ddekit_lock_try_lock(struct ddekit_lock **mtx); 00029 00030 /** Unlock function. 00031 * 00032 * \ingroup DDEKit_synchronization 00033 */ 00034 void _ddekit_lock_unlock (struct ddekit_lock **mtx); 00035 00036 /** Get lock owner. 00037 * 00038 * \ingroup DDEKit_synchronization 00039 */ 00040 int _ddekit_lock_owner(struct ddekit_lock **mtx); 00041 00042 // definition of ddekit_lock_t 00043 typedef struct ddekit_lock *ddekit_lock_t; 00044 00045 // common prototypes 00046 static void ddekit_lock_init_locked(ddekit_lock_t *mtx); 00047 static void ddekit_lock_init_unlocked(ddekit_lock_t *mtx); 00048 #define ddekit_lock_init ddekit_lock_init_unlocked 00049 static void ddekit_lock_deinit (ddekit_lock_t *mtx); 00050 static void ddekit_lock_lock (ddekit_lock_t *mtx); 00051 static int ddekit_lock_try_lock(ddekit_lock_t *mtx); // returns 0 on success, != 0 if it would block 00052 static void ddekit_lock_unlock (ddekit_lock_t *mtx); 00053 00054 // inline implementation or inline call to non-inline implementation 00055 #include <l4/dde/ddekit/inline.h> 00056 00057 static INLINE void ddekit_lock_init_unlocked(ddekit_lock_t *mtx) { 00058 _ddekit_lock_init(mtx); 00059 } 00060 00061 static INLINE void ddekit_lock_init_locked(ddekit_lock_t *mtx) { 00062 _ddekit_lock_init(mtx); 00063 _ddekit_lock_lock(mtx); 00064 } 00065 00066 static INLINE void ddekit_lock_deinit(ddekit_lock_t *mtx) { 00067 _ddekit_lock_deinit(mtx); 00068 } 00069 static INLINE void ddekit_lock_lock(ddekit_lock_t *mtx) { 00070 _ddekit_lock_lock(mtx); 00071 } 00072 static INLINE int ddekit_lock_try_lock(ddekit_lock_t *mtx) { 00073 return _ddekit_lock_try_lock(mtx); 00074 } 00075 static INLINE void ddekit_lock_unlock(ddekit_lock_t *mtx) { 00076 _ddekit_lock_unlock(mtx); 00077 } 00078 00079 static INLINE int ddekit_lock_owner(ddekit_lock_t *mtx) { 00080 return _ddekit_lock_owner(mtx); 00081 } 00082 00083 #endif
1.5.6