1 #ifndef _SYS_CONDVAR_H_
2 #define _SYS_CONDVAR_H_
4 #include <sys/spinlock.h>
10 struct spinlock cv_lock;
15 void cv_init(struct cv *, const char *desc);
16 void cv_destroy(struct cv *);
18 int _cv_timedwait(struct cv *, struct lock *, int timo, int wakesig);
19 int _cv_mtx_timedwait(struct cv *, struct mtx *, int timo, int wakesig);
20 void _cv_signal(struct cv *, int broadcast);
22 int cv_has_waiters(const struct cv *);
24 #define cv_wait(cv, lock) \
25 _cv_timedwait((cv), (lock), 0, 0)
26 #define cv_wait_sig(cv, lock) \
27 _cv_timedwait((cv), (lock), 0, 1)
28 #define cv_timedwait(cv, lock, timeo) \
29 _cv_timedwait((cv), (lock), (timeo), 0)
30 #define cv_timedwait_sig(cv, lock, timeo) \
31 _cv_timedwait((cv), (lock), (timeo), 1)
33 #define cv_mtx_wait(cv, mtx) \
34 _cv_mtx_timedwait((cv), (mtx), 0, 0)
35 #define cv_mtx_wait_sig(cv, mtx) \
36 _cv_mtx_timedwait((cv), (mtx), 0, 1)
37 #define cv_mtx_timedwait(cv, mtx, timeo) \
38 _cv_mtx_timedwait((cv), (mtx), (timeo), 0)
39 #define cv_mtx_timedwait_sig(cv, mtx, timeo) \
40 _cv_mtx_timedwait((cv), (mtx), (timeo), 1)
42 #define cv_signal(cv) \
44 #define cv_broadcast(cv) \
46 #define cv_broadcastpri(cv, pri) \
49 #endif /* _SYS_CONDVAR_H_ */