Rev 2619 | Rev 2622 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2619 | Rev 2620 | ||
|---|---|---|---|
| Line 318... | Line 318... | ||
| 318 | IPC_SET_METHOD(call->u.msg.data, method); |
318 | IPC_SET_METHOD(call->u.msg.data, method); |
| 319 | IPC_SET_ARG1(call->u.msg.data, arg1); |
319 | IPC_SET_ARG1(call->u.msg.data, arg1); |
| 320 | IPC_SET_ARG2(call->u.msg.data, arg2); |
320 | IPC_SET_ARG2(call->u.msg.data, arg2); |
| 321 | IPC_SET_ARG3(call->u.msg.data, arg3); |
321 | IPC_SET_ARG3(call->u.msg.data, arg3); |
| 322 | IPC_SET_ARG4(call->u.msg.data, arg4); |
322 | IPC_SET_ARG4(call->u.msg.data, arg4); |
| - | 323 | /* |
|
| - | 324 | * To achieve deterministic behavior, we always zero out the |
|
| - | 325 | * arguments that are beyond the limits of the fast version. |
|
| - | 326 | */ |
|
| - | 327 | IPC_SET_ARG5(call->u.msg.data, 0); |
|
| 323 | } |
328 | } |
| 324 | ipc_finish_async(callid, phoneid, call, can_preempt); |
329 | ipc_finish_async(callid, phoneid, call, can_preempt); |
| 325 | } |
330 | } |
| 326 | 331 | ||
| 327 | /** Make an asynchronous call transmitting the entire payload. |
332 | /** Make an asynchronous call transmitting the entire payload. |
| Line 433... | Line 438... | ||
| 433 | * ipc_call_async_*(), until it is added to dispatched_calls. |
438 | * ipc_call_async_*(), until it is added to dispatched_calls. |
| 434 | */ |
439 | */ |
| 435 | futex_down(&async_futex); |
440 | futex_down(&async_futex); |
| 436 | while (!list_empty(&queued_calls)) { |
441 | while (!list_empty(&queued_calls)) { |
| 437 | call = list_get_instance(queued_calls.next, async_call_t, list); |
442 | call = list_get_instance(queued_calls.next, async_call_t, list); |
| 438 | callid = _ipc_call_async(call->u.msg.phoneid, &call->u.msg.data); |
443 | callid = _ipc_call_async(call->u.msg.phoneid, |
| - | 444 | &call->u.msg.data); |
|
| 439 | if (callid == IPC_CALLRET_TEMPORARY) { |
445 | if (callid == IPC_CALLRET_TEMPORARY) { |
| 440 | break; |
446 | break; |
| 441 | } |
447 | } |
| 442 | list_remove(&call->list); |
448 | list_remove(&call->list); |
| 443 | 449 | ||
| Line 643... | Line 649... | ||
| 643 | * |
649 | * |
| 644 | * @return Zero on success or an error code. |
650 | * @return Zero on success or an error code. |
| 645 | * |
651 | * |
| 646 | * For non-system methods, the old method and arg1 are rewritten by the new |
652 | * For non-system methods, the old method and arg1 are rewritten by the new |
| 647 | * values. For system methods, the new method and arg1 are written to the old |
653 | * values. For system methods, the new method and arg1 are written to the old |
| 648 | * arg1 and arg2, respectivelly. |
654 | * arg1 and arg2, respectivelly. Calls with immutable methods are forwarded |
| - | 655 | * verbatim. |
|
| 649 | */ |
656 | */ |
| 650 | int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1) |
657 | int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, |
| - | 658 | ipcarg_t arg1) |
|
| 651 | { |
659 | { |
| 652 | return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1); |
660 | return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1); |
| 653 | } |
661 | } |
| 654 | 662 | ||
| 655 | /** Wrapper for making IPC_M_DATA_SEND calls. |
663 | /** Wrapper for making IPC_M_DATA_SEND calls. |