Branch data Line data Source code
1 : : /* wait queue for multiple threads on kernel objects */ 2 : : 3 : : /* 4 : : * Copyright (c) 2015 Wind River Systems, Inc. 5 : : * 6 : : * SPDX-License-Identifier: Apache-2.0 7 : : */ 8 : : 9 : : #ifndef ZEPHYR_KERNEL_INCLUDE_WAIT_Q_H_ 10 : : #define ZEPHYR_KERNEL_INCLUDE_WAIT_Q_H_ 11 : : 12 : : #include <zephyr/kernel_structs.h> 13 : : #include <zephyr/sys/dlist.h> 14 : : #include <zephyr/sys/rb.h> 15 : : #include <timeout_q.h> 16 : : #include <priority_q.h> 17 : : 18 : : #ifdef __cplusplus 19 : : extern "C" { 20 : : #endif 21 : : 22 : : #ifdef CONFIG_WAITQ_SCALABLE 23 : : 24 : : #define _WAIT_Q_FOR_EACH(wq, thread_ptr) \ 25 : : RB_FOR_EACH_CONTAINER(&(wq)->waitq.tree, thread_ptr, base.qnode_rb) 26 : : 27 : : static inline void z_waitq_init(_wait_q_t *w) 28 : : { 29 : : w->waitq = (struct _priq_rb) { 30 : : .tree = { 31 : : .lessthan_fn = z_priq_rb_lessthan 32 : : } 33 : : }; 34 : : } 35 : : 36 : : static inline struct k_thread *z_waitq_head(_wait_q_t *w) 37 : : { 38 : : return (struct k_thread *)rb_get_min(&w->waitq.tree); 39 : : } 40 : : 41 : : #else /* !CONFIG_WAITQ_SCALABLE: */ 42 : : 43 : : #define _WAIT_Q_FOR_EACH(wq, thread_ptr) \ 44 : : SYS_DLIST_FOR_EACH_CONTAINER(&((wq)->waitq), thread_ptr, \ 45 : : base.qnode_dlist) 46 : : 47 : 48 : static inline void z_waitq_init(_wait_q_t *w) 48 : : { 49 : 48 : sys_dlist_init(&w->waitq); 50 : 48 : } 51 : : 52 : 52 : static inline struct k_thread *z_waitq_head(_wait_q_t *w) 53 : : { 54 : 52 : return (struct k_thread *)sys_dlist_peek_head(&w->waitq); 55 : : } 56 : : 57 : : #endif /* !CONFIG_WAITQ_SCALABLE */ 58 : : 59 : : #ifdef __cplusplus 60 : : } 61 : : #endif 62 : : 63 : : #endif /* ZEPHYR_KERNEL_INCLUDE_WAIT_Q_H_ */