summaryrefslogtreecommitdiff
path: root/components/drivers/include/ipc/waitqueue.h
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-06-26 11:19:38 +0800
committerBernard Xiong <[email protected]>2018-06-26 11:19:38 +0800
commita1a56ce1d1161ad361d421077472f922fe8fb7a7 (patch)
treee05cf7dc63115cd87e5b2b0486da07e24c077397 /components/drivers/include/ipc/waitqueue.h
parent6ecdfca2cde50e2974bdb5cda2995a64407c8818 (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.h14
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
+