Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/ipc.c

    r10477601 rab34cc9  
    4747#include <futex.h>
    4848#include <fibril.h>
     49#include <macros.h>
    4950
    5051/**
     
    458459        while (!list_empty(&queued_calls)) {
    459460                async_call_t *call =
    460                     list_get_instance(queued_calls.next, async_call_t, list);
     461                    list_get_instance(list_first(&queued_calls), async_call_t, list);
    461462                ipc_callid_t callid =
    462463                    ipc_call_async_internal(call->u.msg.phoneid, &call->u.msg.data);
     
    511512       
    512513        link_t *item;
    513         for (item = dispatched_calls.next; item != &dispatched_calls;
     514        for (item = dispatched_calls.head.next; item != &dispatched_calls.head;
    514515            item = item->next) {
    515516                async_call_t *call =
     
    611612/** Request callback connection.
    612613 *
    613  * The @a taskhash and @a phonehash identifiers returned
     614 * The @a task_id and @a phonehash identifiers returned
    614615 * by the kernel can be used for connection tracking.
    615616 *
     
    618619 * @param arg2      User defined argument.
    619620 * @param arg3      User defined argument.
    620  * @param taskhash  Opaque identifier of the client task.
     621 * @param task_id   Identifier of the client task.
    621622 * @param phonehash Opaque identifier of the phone that will
    622623 *                  be used for incoming calls.
     
    626627 */
    627628int ipc_connect_to_me(int phoneid, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
    628     sysarg_t *taskhash, sysarg_t *phonehash)
    629 {
    630         return ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_TO_ME, arg1, arg2,
    631             arg3, NULL, NULL, NULL, taskhash, phonehash);
     629    task_id_t *task_id, sysarg_t *phonehash)
     630{
     631        ipc_call_t data;
     632        int rc = __SYSCALL6(SYS_IPC_CALL_SYNC_FAST, phoneid,
     633            IPC_M_CONNECT_TO_ME, arg1, arg2, arg3, (sysarg_t) &data);
     634        if (rc == EOK) {
     635                *task_id = data.in_task_id;
     636                *phonehash = IPC_GET_ARG5(data);
     637        }       
     638        return rc;
     639}
     640
     641/** Request cloned connection.
     642 *
     643 * @param phoneid Phone handle used for contacting the other side.
     644 *
     645 * @return Cloned phone handle on success or a negative error code.
     646 *
     647 */
     648int ipc_connect_me(int phoneid)
     649{
     650        sysarg_t newphid;
     651        int res = ipc_call_sync_0_5(phoneid, IPC_M_CONNECT_ME, NULL, NULL,
     652            NULL, NULL, &newphid);
     653        if (res)
     654                return res;
     655       
     656        return newphid;
    632657}
    633658
Note: See TracChangeset for help on using the changeset viewer.