47,18 → 47,27 |
#endif |
|
/* Flags for calls */ |
#define IPC_CALL_ANSWERED (1<<0) /**< This is answer to a call */ |
#define IPC_CALL_STATIC_ALLOC (1<<1) /**< This call will not be freed on error */ |
#define IPC_CALL_DISCARD_ANSWER (1<<2) /**< Answer will not be passed to userspace, will be discarded */ |
#define IPC_CALL_FORWARDED (1<<3) /**< Call was forwarded */ |
#define IPC_CALL_CONN_ME_TO (1<<4) /**< Identify connect_me_to answer */ |
#define IPC_CALL_NOTIF (1<<5) /**< Interrupt notification */ |
|
/** This is answer to a call */ |
#define IPC_CALL_ANSWERED (1 << 0) |
/** This call will not be freed on error */ |
#define IPC_CALL_STATIC_ALLOC (1 << 1) |
/** Answer will not be passed to userspace, will be discarded */ |
#define IPC_CALL_DISCARD_ANSWER (1 << 2) |
/** Call was forwarded */ |
#define IPC_CALL_FORWARDED (1 << 3) |
/** Identify connect_me_to answer */ |
#define IPC_CALL_CONN_ME_TO (1 << 4) |
/** Interrupt notification */ |
#define IPC_CALL_NOTIF (1 << 5) |
|
/* Flags of callid (the addresses are aligned at least to 4, |
* that is why we can use bottom 2 bits of the call address |
*/ |
#define IPC_CALLID_ANSWERED 1 /**< Type of this msg is 'answer' */ |
#define IPC_CALLID_NOTIFICATION 2 /**< Type of this msg is 'notification' */ |
/** Type of this msg is 'answer' */ |
#define IPC_CALLID_ANSWERED 1 |
/** Type of this msg is 'notification' */ |
#define IPC_CALLID_NOTIFICATION 2 |
|
/* Return values from IPC_ASYNC */ |
#define IPC_CALLRET_FATAL -1 |
166,11 → 175,16 |
struct task; |
|
typedef enum { |
IPC_PHONE_FREE = 0, /**< Phone is free and can be allocated */ |
IPC_PHONE_CONNECTING, /**< Phone is connecting somewhere */ |
IPC_PHONE_CONNECTED, /**< Phone is connected */ |
IPC_PHONE_HUNGUP, /**< Phone is hung up, waiting for answers to come */ |
IPC_PHONE_SLAMMED /**< Phone was hungup from server */ |
/** Phone is free and can be allocated */ |
IPC_PHONE_FREE = 0, |
/** Phone is connecting somewhere */ |
IPC_PHONE_CONNECTING, |
/** Phone is connected */ |
IPC_PHONE_CONNECTED, |
/** Phone is hung up, waiting for answers to come */ |
IPC_PHONE_HUNGUP, |
/** Phone was hungup from server */ |
IPC_PHONE_SLAMMED |
} ipc_phone_state_t; |
|
/** Structure identifying phone (in TASK structure) */ |
189,15 → 203,20 |
|
waitq_t wq; |
|
link_t connected_phones; /**< Phones connected to this answerbox */ |
link_t calls; /**< Received calls */ |
/** Phones connected to this answerbox */ |
link_t connected_phones; |
/** Received calls */ |
link_t calls; |
link_t dispatched_calls; /* Should be hash table in the future */ |
|
link_t answers; /**< Answered calls */ |
/** Answered calls */ |
link_t answers; |
|
SPINLOCK_DECLARE(irq_lock); |
link_t irq_notifs; /**< Notifications from IRQ handlers */ |
link_t irq_head; /**< IRQs with notifications to this answerbox. */ |
/** Notifications from IRQ handlers */ |
link_t irq_notifs; |
/** IRQs with notifications to this answerbox. */ |
link_t irq_head; |
} answerbox_t; |
|
typedef struct { |
217,9 → 236,11 |
*/ |
answerbox_t *callerbox; |
|
unative_t priv; /**< Private data to internal IPC */ |
/** Private data to internal IPC */ |
unative_t priv; |
|
ipc_data_t data; /**< Data passed from/to userspace */ |
/** Data passed from/to userspace */ |
ipc_data_t data; |
} call_t; |
|
extern void ipc_init(void); |