From d7087fdd3b998192afb03b34fd8034071d06bde7 Mon Sep 17 00:00:00 2001 From: bernard Date: Sun, 15 Oct 2017 22:56:46 +0800 Subject: [DeviceDrivers] change cmd type. 1. Change 'rt_uint8_t' type of cmd to 'int'; 2. Add waitqueue; 3. Split device ipc header files; --- components/drivers/include/ipc/waitqueue.h | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 components/drivers/include/ipc/waitqueue.h (limited to 'components/drivers/include/ipc/waitqueue.h') diff --git a/components/drivers/include/ipc/waitqueue.h b/components/drivers/include/ipc/waitqueue.h new file mode 100644 index 0000000000..1746d0f1cd --- /dev/null +++ b/components/drivers/include/ipc/waitqueue.h @@ -0,0 +1,39 @@ +#ifndef WAITQUEUE_H__ +#define WAITQUEUE_H__ + +#include + +struct rt_wqueue_node; + +typedef rt_list_t rt_wqueue_t; +typedef int (*rt_wqueue_func_t)(struct rt_wqueue_node *wait, void *key); + +struct rt_wqueue_node +{ + rt_thread_t polling_thread; + rt_list_t list; + + rt_wqueue_func_t wakeup; + rt_uint32_t key; +}; +typedef struct rt_wqueue_node rt_wqueue_node_t; + +int __wqueue_default_wake(struct rt_wqueue_node *wait, void *key); + +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); +void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key); + +#define DEFINE_WAIT_FUNC(name, function) \ + struct rt_wqueue_node name = { \ + rt_current_thread, \ + RT_LIST_OBJECT_INIT(((name).list)), \ + \ + function, \ + 0 \ + } + +#define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, __wqueue_default_wake) + +#endif -- cgit v1.3.1