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 |