|
|
- #ifndef __KERN_SYNC_WAIT_H__
- #define __KERN_SYNC_WAIT_H__
-
- #include <list.h>
-
- typedef struct {
- list_entry_t wait_head;
- } wait_queue_t;
-
- struct proc_struct;
-
- typedef struct {
- struct proc_struct *proc;
- uint32_t wakeup_flags;
- wait_queue_t *wait_queue;
- list_entry_t wait_link;
- } wait_t;
-
- #define le2wait(le, member) \
- to_struct((le), wait_t, member)
-
- void wait_init(wait_t *wait, struct proc_struct *proc);
- void wait_queue_init(wait_queue_t *queue);
- void wait_queue_add(wait_queue_t *queue, wait_t *wait);
- void wait_queue_del(wait_queue_t *queue, wait_t *wait);
-
- wait_t *wait_queue_next(wait_queue_t *queue, wait_t *wait);
- wait_t *wait_queue_prev(wait_queue_t *queue, wait_t *wait);
- wait_t *wait_queue_first(wait_queue_t *queue);
- wait_t *wait_queue_last(wait_queue_t *queue);
-
- bool wait_queue_empty(wait_queue_t *queue);
- bool wait_in_queue(wait_t *wait);
- void wakeup_wait(wait_queue_t *queue, wait_t *wait, uint32_t wakeup_flags, bool del);
- void wakeup_first(wait_queue_t *queue, uint32_t wakeup_flags, bool del);
- void wakeup_queue(wait_queue_t *queue, uint32_t wakeup_flags, bool del);
-
- void wait_current_set(wait_queue_t *queue, wait_t *wait, uint32_t wait_state);
-
- #define wait_current_del(queue, wait) \
- do { \
- if (wait_in_queue(wait)) { \
- wait_queue_del(queue, wait); \
- } \
- } while (0)
-
- #endif /* !__KERN_SYNC_WAIT_H__ */
-
|