1*1f5a2479SJohn Stultz #ifndef _LINUX_TIMERQUEUE_H 2*1f5a2479SJohn Stultz #define _LINUX_TIMERQUEUE_H 3*1f5a2479SJohn Stultz 4*1f5a2479SJohn Stultz #include <linux/rbtree.h> 5*1f5a2479SJohn Stultz #include <linux/ktime.h> 6*1f5a2479SJohn Stultz 7*1f5a2479SJohn Stultz 8*1f5a2479SJohn Stultz struct timerqueue_node { 9*1f5a2479SJohn Stultz struct rb_node node; 10*1f5a2479SJohn Stultz ktime_t expires; 11*1f5a2479SJohn Stultz }; 12*1f5a2479SJohn Stultz 13*1f5a2479SJohn Stultz struct timerqueue_head { 14*1f5a2479SJohn Stultz struct rb_root head; 15*1f5a2479SJohn Stultz struct timerqueue_node *next; 16*1f5a2479SJohn Stultz }; 17*1f5a2479SJohn Stultz 18*1f5a2479SJohn Stultz 19*1f5a2479SJohn Stultz extern void timerqueue_add(struct timerqueue_head *head, 20*1f5a2479SJohn Stultz struct timerqueue_node *node); 21*1f5a2479SJohn Stultz extern void timerqueue_del(struct timerqueue_head *head, 22*1f5a2479SJohn Stultz struct timerqueue_node *node); 23*1f5a2479SJohn Stultz extern struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head); 24*1f5a2479SJohn Stultz extern struct timerqueue_node *timerqueue_iterate_next( 25*1f5a2479SJohn Stultz struct timerqueue_node *node); 26*1f5a2479SJohn Stultz 27*1f5a2479SJohn Stultz static inline void timerqueue_init(struct timerqueue_node *node) 28*1f5a2479SJohn Stultz { 29*1f5a2479SJohn Stultz RB_CLEAR_NODE(&node->node); 30*1f5a2479SJohn Stultz } 31*1f5a2479SJohn Stultz 32*1f5a2479SJohn Stultz static inline void timerqueue_init_head(struct timerqueue_head *head) 33*1f5a2479SJohn Stultz { 34*1f5a2479SJohn Stultz head->head = RB_ROOT; 35*1f5a2479SJohn Stultz head->next = NULL; 36*1f5a2479SJohn Stultz } 37*1f5a2479SJohn Stultz #endif /* _LINUX_TIMERQUEUE_H */ 38