Changeset bc117a5 in mainline for kernel/generic/src/ipc/sysipc.c


Ignore:
Timestamp:
2016-08-29T12:43:10Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c32b6f0
Parents:
6d351e6
Message:

Partially revert jakub@…

This changeset reintroduces portions of the synchronous IPC mechanism for
internal use by the kernel / user_backend. The synchronous IPC is not
exported to user space and is simpler than in its original form.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/sysipc.c

    r6d351e6 rbc117a5  
    257257{
    258258        return SYSIPC_OP(request_process, call, box);
     259}
     260
     261/** Make a call over IPC and wait for reply.
     262 *
     263 * @param phoneid     Phone handle for the call.
     264 * @param data[inout] Structure with request/reply data.
     265 *
     266 * @return EOK on success.
     267 * @return ENOENT if there is no such phone handle.
     268 *
     269 */
     270int ipc_req_internal(int phoneid, ipc_data_t *data)
     271{
     272        phone_t *phone;
     273        if (phone_get(phoneid, &phone) != EOK)
     274                return ENOENT;
     275       
     276        call_t *call = ipc_call_alloc(0);
     277        memcpy(call->data.args, data->args, sizeof(data->args));
     278       
     279        int rc = request_preprocess(call, phone);
     280        if (!rc) {
     281#ifdef CONFIG_UDEBUG
     282                udebug_stoppable_begin();
     283#endif
     284
     285                rc = ipc_call_sync(phone, call);
     286
     287#ifdef CONFIG_UDEBUG
     288                udebug_stoppable_end();
     289#endif
     290
     291                if (rc != EOK)
     292                        return EINTR;
     293
     294                process_answer(call);
     295        } else
     296                IPC_SET_RETVAL(call->data, rc);
     297       
     298        memcpy(data->args, call->data.args, sizeof(data->args));
     299        ipc_call_free(call);
     300       
     301        return EOK;
    259302}
    260303
Note: See TracChangeset for help on using the changeset viewer.