Rev 3192 | Rev 3391 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3297 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | #ifndef _LINUX_WAIT_H |
1 | #ifndef _LINUX_WAIT_H |
2 | #define _LINUX_WAIT_H |
2 | #define _LINUX_WAIT_H |
Line -... | Line 3... | ||
- | 3 | ||
3 | 4 | #include |
|
Line 4... | Line 5... | ||
4 | #include |
5 | #include |
5 | 6 | ||
Line 37... | Line 38... | ||
37 | finish_wait(&wq, &__wait); \ |
38 | finish_wait(&wq, &__wait); \ |
38 | } while (0) |
39 | } while (0) |
Line 39... | Line -... | ||
39 | - | ||
40 | 40 | ||
41 | 41 | ||
42 | 42 | ||
43 | #define wait_event_timeout(wq, condition, timeout) \ |
43 | #define wait_event_timeout(wq, condition, timeout) \ |
44 | ({ \ |
44 | ({ \ |
45 | long __ret = timeout; \ |
45 | long __ret = timeout; \ |
46 | do{ \ |
46 | do{ \ |
47 | wait_queue_t __wait = { \ |
47 | wait_queue_t __wait = { \ |
48 | .task_list = LIST_HEAD_INIT(__wait.task_list), \ |
48 | .task_list = LIST_HEAD_INIT(__wait.task_list), \ |
49 | .evnt = CreateEvent(NULL, MANUAL_DESTROY), \ |
49 | .evnt = CreateEvent(NULL, MANUAL_DESTROY), \ |
50 | }; \ |
50 | }; \ |
51 | u32 flags; \ |
51 | unsigned long flags; \ |
52 | \ |
52 | \ |
53 | spin_lock_irqsave(&wq.lock, flags); \ |
53 | spin_lock_irqsave(&wq.lock, flags); \ |
Line 58... | Line 58... | ||
58 | for(;;){ \ |
58 | for(;;){ \ |
59 | if (condition) \ |
59 | if (condition) \ |
60 | break; \ |
60 | break; \ |
61 | WaitEvent(__wait.evnt); \ |
61 | WaitEvent(__wait.evnt); \ |
62 | }; \ |
62 | }; \ |
63 | if (!list_empty_careful(&__wait.task_list)) { \ |
63 | if (!list_empty(&__wait.task_list)) { \ |
64 | spin_lock_irqsave(&wq.lock, flags); \ |
64 | spin_lock_irqsave(&wq.lock, flags); \ |
65 | list_del_init(&__wait.task_list); \ |
65 | list_del_init(&__wait.task_list); \ |
66 | spin_unlock_irqrestore(&wq.lock, flags); \ |
66 | spin_unlock_irqrestore(&wq.lock, flags); \ |
67 | }; \ |
67 | }; \ |
68 | DestroyEvent(__wait.evnt); \ |
68 | DestroyEvent(__wait.evnt); \ |
Line 78... | Line 78... | ||
78 | do{ \ |
78 | do{ \ |
79 | wait_queue_t __wait = { \ |
79 | wait_queue_t __wait = { \ |
80 | .task_list = LIST_HEAD_INIT(__wait.task_list), \ |
80 | .task_list = LIST_HEAD_INIT(__wait.task_list), \ |
81 | .evnt = CreateEvent(NULL, MANUAL_DESTROY), \ |
81 | .evnt = CreateEvent(NULL, MANUAL_DESTROY), \ |
82 | }; \ |
82 | }; \ |
83 | u32 flags; \ |
83 | unsigned long flags; \ |
84 | \ |
84 | \ |
85 | spin_lock_irqsave(&wq.lock, flags); \ |
85 | spin_lock_irqsave(&wq.lock, flags); \ |
86 | if (list_empty(&__wait.task_list)) \ |
86 | if (list_empty(&__wait.task_list)) \ |
87 | __add_wait_queue(&wq, &__wait); \ |
87 | __add_wait_queue(&wq, &__wait); \ |
88 | spin_unlock_irqrestore(&wq.lock, flags); \ |
88 | spin_unlock_irqrestore(&wq.lock, flags); \ |
Line 110... | Line 110... | ||
110 | unsigned long flags; |
110 | unsigned long flags; |
Line 111... | Line 111... | ||
111 | 111 | ||
112 | spin_lock_irqsave(&q->lock, flags); |
112 | spin_lock_irqsave(&q->lock, flags); |
113 | list_for_each_entry(curr, &q->task_list, task_list) |
113 | list_for_each_entry(curr, &q->task_list, task_list) |
- | 114 | { |
|
- | 115 | // printf("raise event \n"); |
|
114 | { |
116 | |
115 | kevent_t event; |
117 | kevent_t event; |
116 | event.code = -1; |
118 | event.code = -1; |
117 | RaiseEvent(curr->evnt, 0, &event); |
119 | RaiseEvent(curr->evnt, 0, &event); |
118 | } |
120 | } |