Changeset 3209923 in mainline for uspace/lib/libc/include/ipc/ipc.h


Ignore:
Timestamp:
2007-11-20T09:12:49Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b74959bd
Parents:
bc50fc42
Message:

Modify asynchronous IPC to make use of all six syscall arguments. The preferred
means of asynchronous communication is now via the set of ipc_call_async_m()
macros, where m is the number of payload arguments passed to the kernel. These
macros will automatically decide between the fast and the universal slow version
of ipc_call_async.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/include/ipc/ipc.h

    rbc50fc42 r3209923  
    3838#include <kernel/ipc/ipc.h>
    3939#include <kernel/ddi/irq.h>
    40 #include <libc.h>
    4140#include <sys/types.h>
    4241#include <kernel/synch/synch.h>
     
    184183    ipcarg_t *result5);
    185184
    186 
    187185extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags);
    188186extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec);
     
    194192
    195193#define ipc_answer_fast_0(callid, retval) \
    196         ipc_answer_fast((callid), (retval), 0, 0)
     194    ipc_answer_fast((callid), (retval), 0, 0)
    197195#define ipc_answer_fast_1(callid, retval, arg1) \
    198         ipc_answer_fast((callid), (retval), (arg1), 0)
     196    ipc_answer_fast((callid), (retval), (arg1), 0)
    199197extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval,
    200198    ipcarg_t arg1, ipcarg_t arg2);
    201199extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call);
    202200
    203 #define ipc_call_async(phoneid, method, arg1, private, callback, can_preempt) \
    204     (ipc_call_async_2(phoneid, method, arg1, 0, private, callback, can_preempt))
    205 extern void ipc_call_async_2(int phoneid, ipcarg_t method, ipcarg_t arg1,
    206     ipcarg_t arg2, void *private, ipc_async_callback_t callback,
    207     int can_preempt);
    208 extern void ipc_call_async_3(int phoneid, ipcarg_t method, ipcarg_t arg1,
    209     ipcarg_t arg2, ipcarg_t arg3, void *private, ipc_async_callback_t callback,
    210     int can_preempt);
     201/*
     202 * User-friendly wrappers for ipc_call_async_fast() and ipc_call_async_slow().
     203 * They are in the form of ipc_call_async_m(), where m is the number of payload
     204 * arguments. The macros decide between the fast and the slow version according
     205 * to m.
     206 */
     207#define ipc_call_async_0(phoneid, method, private, callback, \
     208    can_preempt) \
     209        ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \
     210            (callback), (can_preempt))
     211#define ipc_call_async_1(phoneid, method, arg1, private, callback, \
     212    can_preempt) \
     213        ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \
     214            (callback), (can_preempt))
     215#define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback, \
     216    can_preempt) \
     217        ipc_call_async_fast((phoneid), (method), (arg1), (arg2), 0, 0, \
     218            (private), (callback), (can_preempt))
     219#define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback, \
     220    can_preempt) \
     221        ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \
     222            (private), (callback), (can_preempt))
     223#define ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, private, \
     224    callback, can_preempt) \
     225        ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), \
     226            (arg4), (private), (callback), (can_preempt))
     227#define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \
     228    private, callback, can_preempt) \
     229        ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \
     230            (arg4), (arg5), (private), (callback), (can_preempt))
     231
     232extern void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1,
     233    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private,
     234    ipc_async_callback_t callback, int can_preempt);
     235extern void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1,
     236    ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private,
     237    ipc_async_callback_t callback, int can_preempt);
    211238
    212239extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, ipcarg_t *phone);
Note: See TracChangeset for help on using the changeset viewer.