Rev 2071 | Rev 2098 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2071 | Rev 2089 | ||
|---|---|---|---|
| Line 156... | Line 156... | ||
| 156 | /* User methods */ |
156 | /* User methods */ |
| 157 | #define FIRST_USER_METHOD 1024 |
157 | #define FIRST_USER_METHOD 1024 |
| 158 | 158 | ||
| 159 | #ifdef KERNEL |
159 | #ifdef KERNEL |
| 160 | 160 | ||
| 161 | #include <synch/waitq.h> |
- | |
| 162 | #include <adt/list.h> |
161 | #include <proc/task.h> |
| 163 | 162 | ||
| 164 | #define IPC_MAX_PHONES 16 |
- | |
| 165 | - | ||
| 166 | typedef struct answerbox_s answerbox_t; |
- | |
| 167 | typedef struct phone_s phone_t; |
- | |
| 168 | typedef struct { |
163 | typedef struct { |
| 169 | unative_t args[IPC_CALL_LEN]; |
164 | unative_t args[IPC_CALL_LEN]; |
| 170 | phone_t *phone; |
165 | phone_t *phone; |
| 171 | } ipc_data_t; |
166 | } ipc_data_t; |
| 172 | 167 | ||
| 173 | struct answerbox_s { |
- | |
| 174 | SPINLOCK_DECLARE(lock); |
- | |
| 175 | - | ||
| 176 | task_t *task; |
- | |
| 177 | - | ||
| 178 | waitq_t wq; |
- | |
| 179 | - | ||
| 180 | link_t connected_phones; /**< Phones connected to this answerbox */ |
- | |
| 181 | link_t calls; /**< Received calls */ |
- | |
| 182 | link_t dispatched_calls; /* Should be hash table in the future */ |
- | |
| 183 | - | ||
| 184 | link_t answers; /**< Answered calls */ |
- | |
| 185 | - | ||
| 186 | SPINLOCK_DECLARE(irq_lock); |
- | |
| 187 | link_t irq_notifs; /**< Notifications from IRQ handlers */ |
- | |
| 188 | link_t irq_head; /**< IRQs with notifications to this answerbox. */ |
- | |
| 189 | }; |
- | |
| 190 | - | ||
| 191 | typedef enum { |
- | |
| 192 | IPC_PHONE_FREE = 0, /**< Phone is free and can be allocated */ |
- | |
| 193 | IPC_PHONE_CONNECTING, /**< Phone is connecting somewhere */ |
- | |
| 194 | IPC_PHONE_CONNECTED, /**< Phone is connected */ |
- | |
| 195 | IPC_PHONE_HUNGUP, /**< Phone is hung up, waiting for answers to come */ |
- | |
| 196 | IPC_PHONE_SLAMMED /**< Phone was hungup from server */ |
- | |
| 197 | } ipc_phone_state_t; |
- | |
| 198 | - | ||
| 199 | /** Structure identifying phone (in TASK structure) */ |
- | |
| 200 | struct phone_s { |
- | |
| 201 | SPINLOCK_DECLARE(lock); |
- | |
| 202 | link_t link; |
- | |
| 203 | answerbox_t *callee; |
- | |
| 204 | ipc_phone_state_t state; |
- | |
| 205 | atomic_t active_calls; |
- | |
| 206 | }; |
- | |
| 207 | - | ||
| 208 | typedef struct { |
168 | typedef struct { |
| 209 | link_t link; |
169 | link_t link; |
| 210 | 170 | ||
| 211 | int flags; |
171 | int flags; |
| 212 | 172 | ||