Changeset d73942c in mainline


Ignore:
Timestamp:
2006-03-15T11:45:03Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
55cff86
Parents:
936351c1
Message:

Added support for taskid source identification.

Location:
libipc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libipc/generic/ipc.c

    r936351c1 rd73942c  
    8383        IPC_SET_ARG3(data, arg3);
    8484
    85         callres = __SYSCALL2(SYS_IPC_CALL_SYNC, phoneid, (sysarg_t)&data);
     85        callres = __SYSCALL3(SYS_IPC_CALL_SYNC, phoneid, (sysarg_t)&data,
     86                             (sysarg_t)&data);
    8687        if (callres)
    8788                return callres;
     
    122123        if (callid == IPC_CALLRET_FATAL) {
    123124                /* Call asynchronous handler with error code */
    124                 IPC_SET_RETVAL(call->u.msg.data, ENOENT);
    125125                callback(private, ENOENT, NULL);
    126126                free(call);
     
    151151                ipcarg_t arg2)
    152152{
    153         __SYSCALL4(SYS_IPC_ANSWER, callid, retval, arg1, arg2);
     153        __SYSCALL4(SYS_IPC_ANSWER_FAST, callid, retval, arg1, arg2);
    154154}
    155155
    156156
    157157/** Call syscall function sys_ipc_wait_for_call */
    158 static inline ipc_callid_t _ipc_wait_for_call(ipc_data_t *data, int flags)
    159 {
    160         return __SYSCALL2(SYS_IPC_WAIT, (sysarg_t)data, flags);
     158static inline ipc_callid_t _ipc_wait_for_call(ipc_call_t *call, int flags)
     159{
     160        return __SYSCALL3(SYS_IPC_WAIT, (sysarg_t)&call->data,
     161                          (sysarg_t)&call->taskid, flags);
    161162}
    162163
     
    221222 *         IPC_WAIT_NONBLOCKING
    222223 */
    223 int ipc_wait_for_call(ipc_data_t *data, int flags)
     224int ipc_wait_for_call(ipc_call_t *call, int flags)
    224225{
    225226        ipc_callid_t callid;
     
    228229                try_dispatch_queued_calls();
    229230
    230                 callid = _ipc_wait_for_call(data, flags);
     231                callid = _ipc_wait_for_call(call, flags);
    231232                /* Handle received answers */
    232233                if (callid & IPC_CALLID_ANSWERED)
    233                         handle_answer(callid, data);
     234                        handle_answer(callid, &call->data);
    234235        } while (callid & IPC_CALLID_ANSWERED);
    235236
  • libipc/include/ipc.h

    r936351c1 rd73942c  
    3232#include <kernel/ipc/ipc.h>
    3333#include <libc.h>
     34#include <types.h>
    3435
    3536typedef sysarg_t ipcarg_t;
    36 typedef ipcarg_t ipc_data_t[IPC_CALL_LEN];
     37typedef sysarg_t ipc_data_t[IPC_CALL_LEN];
     38typedef struct {
     39        unsigned long long taskid;
     40        ipc_data_t data;
     41}ipc_call_t;
    3742typedef sysarg_t ipc_callid_t;
    3843
     
    5055extern int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1,
    5156                         ipcarg_t *result);
    52 extern int ipc_wait_for_call(ipc_data_t *data, int flags);
     57extern int ipc_wait_for_call(ipc_call_t *data, int flags);
    5358extern void ipc_answer(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1,
    5459                       ipcarg_t arg2);
Note: See TracChangeset for help on using the changeset viewer.