Rev 4377 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4377 | Rev 4692 | ||
---|---|---|---|
Line 62... | Line 62... | ||
62 | events[i].counter = 0; |
62 | events[i].counter = 0; |
63 | events[i].method = 0; |
63 | events[i].method = 0; |
64 | } |
64 | } |
65 | } |
65 | } |
66 | 66 | ||
67 | static int |
- | |
68 | event_subscribe(event_type_t evno, unative_t method, answerbox_t *answerbox) |
67 | static int event_subscribe(event_type_t evno, unative_t method, |
- | 68 | answerbox_t *answerbox) |
|
69 | { |
69 | { |
70 | if (evno >= EVENT_END) |
70 | if (evno >= EVENT_END) |
71 | return ELIMIT; |
71 | return ELIMIT; |
72 | 72 | ||
73 | spinlock_lock(&events[evno].lock); |
73 | spinlock_lock(&events[evno].lock); |
Line 120... | Line 120... | ||
120 | } |
120 | } |
121 | spinlock_unlock(&events[i].lock); |
121 | spinlock_unlock(&events[i].lock); |
122 | } |
122 | } |
123 | } |
123 | } |
124 | 124 | ||
125 | void |
- | |
126 | event_notify(event_type_t evno, unative_t a1, unative_t a2, unative_t a3, |
125 | void event_notify(event_type_t evno, unative_t a1, unative_t a2, unative_t a3, |
127 | unative_t a4, unative_t a5) |
126 | unative_t a4, unative_t a5) |
128 | { |
127 | { |
129 | ASSERT(evno < EVENT_END); |
128 | ASSERT(evno < EVENT_END); |
130 | 129 | ||
131 | spinlock_lock(&events[evno].lock); |
130 | spinlock_lock(&events[evno].lock); |
Line 139... | Line 138... | ||
139 | IPC_SET_ARG2(call->data, a2); |
138 | IPC_SET_ARG2(call->data, a2); |
140 | IPC_SET_ARG3(call->data, a3); |
139 | IPC_SET_ARG3(call->data, a3); |
141 | IPC_SET_ARG4(call->data, a4); |
140 | IPC_SET_ARG4(call->data, a4); |
142 | IPC_SET_ARG5(call->data, a5); |
141 | IPC_SET_ARG5(call->data, a5); |
143 | 142 | ||
- | 143 | ipl_t ipl = interrupts_disable(); |
|
144 | spinlock_lock(&events[evno].answerbox->irq_lock); |
144 | spinlock_lock(&events[evno].answerbox->irq_lock); |
145 | list_append(&call->link, &events[evno].answerbox->irq_notifs); |
145 | list_append(&call->link, &events[evno].answerbox->irq_notifs); |
146 | spinlock_unlock(&events[evno].answerbox->irq_lock); |
146 | spinlock_unlock(&events[evno].answerbox->irq_lock); |
- | 147 | interrupts_restore(ipl); |
|
147 | 148 | ||
148 | waitq_wakeup(&events[evno].answerbox->wq, WAKEUP_FIRST); |
149 | waitq_wakeup(&events[evno].answerbox->wq, WAKEUP_FIRST); |
149 | } |
150 | } |
150 | } |
151 | } |
151 | spinlock_unlock(&events[evno].lock); |
152 | spinlock_unlock(&events[evno].lock); |