diff options
| author | Bernard Xiong <[email protected]> | 2018-06-26 11:19:38 +0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2018-06-26 11:19:38 +0800 |
| commit | a1a56ce1d1161ad361d421077472f922fe8fb7a7 (patch) | |
| tree | e05cf7dc63115cd87e5b2b0486da07e24c077397 /components/drivers/include/ipc/waitqueue.h | |
| parent | 6ecdfca2cde50e2974bdb5cda2995a64407c8818 (diff) | |
[Kernel] Add flag in wait queue and fix wakeup issue.
Diffstat (limited to 'components/drivers/include/ipc/waitqueue.h')
| -rw-r--r-- | components/drivers/include/ipc/waitqueue.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/components/drivers/include/ipc/waitqueue.h b/components/drivers/include/ipc/waitqueue.h index 1746d0f1cd..11c3e6609e 100644 --- a/components/drivers/include/ipc/waitqueue.h +++ b/components/drivers/include/ipc/waitqueue.h @@ -3,9 +3,10 @@ #include <rtthread.h> -struct rt_wqueue_node; +#define RT_WQ_FLAG_CLEAN 0x00 +#define RT_WQ_FLAG_WAKEUP 0x01 -typedef rt_list_t rt_wqueue_t; +struct rt_wqueue_node; typedef int (*rt_wqueue_func_t)(struct rt_wqueue_node *wait, void *key); struct rt_wqueue_node @@ -20,6 +21,14 @@ typedef struct rt_wqueue_node rt_wqueue_node_t; int __wqueue_default_wake(struct rt_wqueue_node *wait, void *key); +rt_inline void rt_wqueue_init(rt_wqueue_t *queue) +{ + RT_ASSERT(queue != RT_NULL); + + queue->flag = RT_WQ_FLAG_CLEAN; + rt_list_init(&(queue->waiting_list)); +} + void rt_wqueue_add(rt_wqueue_t *queue, struct rt_wqueue_node *node); void rt_wqueue_remove(struct rt_wqueue_node *node); int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int timeout); @@ -37,3 +46,4 @@ void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key); #define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, __wqueue_default_wake) #endif + |
