Rev 2662 | Rev 3020 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2662 | Rev 2802 | ||
|---|---|---|---|
| Line 115... | Line 115... | ||
| 115 | } |
115 | } |
| 116 | 116 | ||
| 117 | /** Initialize an answerbox structure. |
117 | /** Initialize an answerbox structure. |
| 118 | * |
118 | * |
| 119 | * @param box Answerbox structure to be initialized. |
119 | * @param box Answerbox structure to be initialized. |
| - | 120 | * @param task Task to which the answerbox belongs. |
|
| 120 | */ |
121 | */ |
| 121 | void ipc_answerbox_init(answerbox_t *box) |
122 | void ipc_answerbox_init(answerbox_t *box, task_t *task) |
| 122 | { |
123 | { |
| 123 | spinlock_initialize(&box->lock, "ipc_box_lock"); |
124 | spinlock_initialize(&box->lock, "ipc_box_lock"); |
| 124 | spinlock_initialize(&box->irq_lock, "ipc_box_irqlock"); |
125 | spinlock_initialize(&box->irq_lock, "ipc_box_irqlock"); |
| 125 | waitq_initialize(&box->wq); |
126 | waitq_initialize(&box->wq); |
| 126 | list_initialize(&box->connected_phones); |
127 | list_initialize(&box->connected_phones); |
| 127 | list_initialize(&box->calls); |
128 | list_initialize(&box->calls); |
| 128 | list_initialize(&box->dispatched_calls); |
129 | list_initialize(&box->dispatched_calls); |
| 129 | list_initialize(&box->answers); |
130 | list_initialize(&box->answers); |
| 130 | list_initialize(&box->irq_notifs); |
131 | list_initialize(&box->irq_notifs); |
| 131 | list_initialize(&box->irq_head); |
132 | list_initialize(&box->irq_head); |
| 132 | box->task = TASK; |
133 | box->task = task; |
| 133 | } |
134 | } |
| 134 | 135 | ||
| 135 | /** Connect a phone to an answerbox. |
136 | /** Connect a phone to an answerbox. |
| 136 | * |
137 | * |
| 137 | * @param phone Initialized phone structure. |
138 | * @param phone Initialized phone structure. |
| Line 170... | Line 171... | ||
| 170 | */ |
171 | */ |
| 171 | void ipc_call_sync(phone_t *phone, call_t *request) |
172 | void ipc_call_sync(phone_t *phone, call_t *request) |
| 172 | { |
173 | { |
| 173 | answerbox_t sync_box; |
174 | answerbox_t sync_box; |
| 174 | 175 | ||
| 175 | ipc_answerbox_init(&sync_box); |
176 | ipc_answerbox_init(&sync_box, TASK); |
| 176 | 177 | ||
| 177 | /* We will receive data in a special box. */ |
178 | /* We will receive data in a special box. */ |
| 178 | request->callerbox = &sync_box; |
179 | request->callerbox = &sync_box; |
| 179 | 180 | ||
| 180 | ipc_call(phone, request); |
181 | ipc_call(phone, request); |