Subversion Repositories HelenOS

Rev

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