/trunk/kernel/generic/include/ipc/sysipc.h |
---|
52,7 → 52,7 |
unative_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec, |
int nonblocking); |
unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1); |
unative_t method, unative_t arg1, int mode); |
unative_t sys_ipc_hangup(int phoneid); |
unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method, |
irq_code_t *ucode); |
/trunk/kernel/generic/include/ipc/ipc.h |
---|
97,6 → 97,9 |
/* Well known phone descriptors */ |
#define PHONE_NS 0 |
/* Forwarding flags. */ |
#define IPC_FF_NONE 0 |
/* System-specific methods - only through special syscalls |
* These methods have special behaviour |
*/ |
275,7 → 278,8 |
extern void ipc_answerbox_init(answerbox_t *box); |
extern void ipc_call_static_init(call_t *call); |
extern void task_print_list(void); |
extern int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox); |
extern int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox, |
int mode); |
extern void ipc_cleanup(void); |
extern int ipc_phone_hangup(phone_t *phone); |
extern void ipc_backsend_err(phone_t *phone, call_t *call, unative_t err); |
/trunk/kernel/generic/src/ipc/sysipc.c |
---|
537,6 → 537,7 |
* @param phoneid Phone handle to use for forwarding. |
* @param method New method to use for the forwarded call. |
* @param arg1 New value of the first argument for the forwarded call. |
* @param mode Flags that specify mode of the forward operation. |
* |
* @return Return 0 on succes, otherwise return an error code. |
* |
546,11 → 547,12 |
* respectively. Also note there is a set of immutable methods, for which the |
* new method and argument is not set and these values are ignored. |
* |
* Warning: If implementing non-fast version, make sure that |
* ARG3 is not rewritten for certain system IPC |
* Warning: When implementing support for changing additional payload |
* arguments, make sure that ARG3 is not rewritten for certain |
* system IPC |
*/ |
unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1) |
unative_t method, unative_t arg1, int mode) |
{ |
call_t *call; |
phone_t *phone; |
591,7 → 593,7 |
} |
} |
return ipc_forward(call, phone, &TASK->answerbox); |
return ipc_forward(call, phone, &TASK->answerbox, mode); |
} |
/** Answer an IPC call - fast version. |
/trunk/kernel/generic/src/ipc/ipc.c |
---|
329,6 → 329,7 |
* @param call Call structure to be redirected. |
* @param newphone Phone structure to target answerbox. |
* @param oldbox Old answerbox structure. |
* @param mode Flags that specify mode of the forward operation. |
* |
* @return Return 0 if forwarding succeeded or an error code if |
* there was error. |
336,7 → 337,7 |
* The return value serves only as an information for the forwarder, |
* the original caller is notified automatically with EFORWARD. |
*/ |
int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox) |
int ipc_forward(call_t *call, phone_t *newphone, answerbox_t *oldbox, int mode) |
{ |
spinlock_lock(&oldbox->lock); |
list_remove(&call->link); |