Changeset 01c3bb4 in mainline for uspace/lib/c/include


Ignore:
Timestamp:
2017-11-25T15:43:25Z (8 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ce4a21a0
Parents:
98cb5e0d
Message:

Convert call-handling syscalls to capabilities

This commit modifies the behavior of sys_ipc_wait_for_call() to return a
capability handle for requests. This capability handle can be used
either by sys_ipc_answer*() to answer the call or by sys_ipc_forward*()
to forward it further along. Answering or forwarding the call results in
destruction of the respective capability. For requests and
notifications, sys_ipc_wait_for_call() returns CAP_NIL and sets call
flags accordingly.

Location:
uspace/lib/c/include
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/async.h

    r98cb5e0d r01c3bb4  
    4949#include <abi/ipc/event.h>
    5050#include <abi/ipc/interfaces.h>
    51 
    52 typedef ipc_callid_t aid_t;
     51#include <abi/cap.h>
     52
     53typedef sysarg_t aid_t;
    5354typedef sysarg_t port_id_t;
    5455
     
    5859/** Port connection handler
    5960 *
    60  * @param callid ID of incoming call or 0 if connection initiated from
    61  *               inside using async_create_callback_port()
    62  * @param call   Incoming call or 0 if connection initiated from inside
    63  *               using async_create_callback_port()
    64  * @param arg    Local argument.
    65  *
    66  */
    67 typedef void (*async_port_handler_t)(ipc_callid_t, ipc_call_t *, void *);
     61 * @param chandle  Handle of the incoming call or CAP_NIL if connection
     62 *                 initiated from inside using async_create_callback_port()
     63 * @param call     Incoming call or 0 if connection initiated from inside
     64 *                 using async_create_callback_port()
     65 * @param arg      Local argument.
     66 *
     67 */
     68typedef void (*async_port_handler_t)(cap_handle_t, ipc_call_t *, void *);
    6869
    6970/** Notification handler */
    70 typedef void (*async_notification_handler_t)(ipc_callid_t, ipc_call_t *,
    71     void *);
     71typedef void (*async_notification_handler_t)(ipc_call_t *, void *);
    7272
    7373/** Exchange management style
     
    119119        async_get_call_timeout(data, 0)
    120120
    121 extern ipc_callid_t async_get_call_timeout(ipc_call_t *, suseconds_t);
     121extern cap_handle_t async_get_call_timeout(ipc_call_t *, suseconds_t);
    122122
    123123/*
     
    196196 */
    197197
    198 extern sysarg_t async_answer_0(ipc_callid_t, sysarg_t);
    199 extern sysarg_t async_answer_1(ipc_callid_t, sysarg_t, sysarg_t);
    200 extern sysarg_t async_answer_2(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t);
    201 extern sysarg_t async_answer_3(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     198extern sysarg_t async_answer_0(cap_handle_t, sysarg_t);
     199extern sysarg_t async_answer_1(cap_handle_t, sysarg_t, sysarg_t);
     200extern sysarg_t async_answer_2(cap_handle_t, sysarg_t, sysarg_t, sysarg_t);
     201extern sysarg_t async_answer_3(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
    202202    sysarg_t);
    203 extern sysarg_t async_answer_4(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     203extern sysarg_t async_answer_4(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
    204204    sysarg_t, sysarg_t);
    205 extern sysarg_t async_answer_5(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     205extern sysarg_t async_answer_5(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
    206206    sysarg_t, sysarg_t, sysarg_t);
    207207
     
    210210 */
    211211
    212 extern int async_forward_fast(ipc_callid_t, async_exch_t *, sysarg_t, sysarg_t,
     212extern int async_forward_fast(cap_handle_t, async_exch_t *, sysarg_t, sysarg_t,
    213213    sysarg_t, unsigned int);
    214 extern int async_forward_slow(ipc_callid_t, async_exch_t *, sysarg_t, sysarg_t,
     214extern int async_forward_slow(cap_handle_t, async_exch_t *, sysarg_t, sysarg_t,
    215215    sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
    216216
     
    382382extern int async_share_in_start(async_exch_t *, size_t, sysarg_t,
    383383    unsigned int *, void **);
    384 extern bool async_share_in_receive(ipc_callid_t *, size_t *);
    385 extern int async_share_in_finalize(ipc_callid_t, void *, unsigned int);
     384extern bool async_share_in_receive(cap_handle_t *, size_t *);
     385extern int async_share_in_finalize(cap_handle_t, void *, unsigned int);
    386386
    387387extern int async_share_out_start(async_exch_t *, void *, unsigned int);
    388 extern bool async_share_out_receive(ipc_callid_t *, size_t *, unsigned int *);
    389 extern int async_share_out_finalize(ipc_callid_t, void **);
     388extern bool async_share_out_receive(cap_handle_t *, size_t *, unsigned int *);
     389extern int async_share_out_finalize(cap_handle_t, void **);
    390390
    391391/*
     
    421421extern aid_t async_data_read(async_exch_t *, void *, size_t, ipc_call_t *);
    422422extern int async_data_read_start(async_exch_t *, void *, size_t);
    423 extern bool async_data_read_receive(ipc_callid_t *, size_t *);
    424 extern bool async_data_read_receive_call(ipc_callid_t *, ipc_call_t *, size_t *);
    425 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t);
     423extern bool async_data_read_receive(cap_handle_t *, size_t *);
     424extern bool async_data_read_receive_call(cap_handle_t *, ipc_call_t *, size_t *);
     425extern int async_data_read_finalize(cap_handle_t, const void *, size_t);
    426426
    427427extern int async_data_read_forward_fast(async_exch_t *, sysarg_t, sysarg_t,
     
    460460
    461461extern int async_data_write_start(async_exch_t *, const void *, size_t);
    462 extern bool async_data_write_receive(ipc_callid_t *, size_t *);
    463 extern bool async_data_write_receive_call(ipc_callid_t *, ipc_call_t *, size_t *);
    464 extern int async_data_write_finalize(ipc_callid_t, void *, size_t);
     462extern bool async_data_write_receive(cap_handle_t *, size_t *);
     463extern bool async_data_write_receive_call(cap_handle_t *, ipc_call_t *, size_t *);
     464extern int async_data_write_finalize(cap_handle_t, void *, size_t);
    465465
    466466extern int async_data_write_accept(void **, const bool, const size_t,
     
    476476extern int async_state_change_start(async_exch_t *, sysarg_t, sysarg_t,
    477477    sysarg_t, async_exch_t *);
    478 extern bool async_state_change_receive(ipc_callid_t *, sysarg_t *, sysarg_t *,
     478extern bool async_state_change_receive(cap_handle_t *, sysarg_t *, sysarg_t *,
    479479    sysarg_t *);
    480 extern int async_state_change_finalize(ipc_callid_t, async_exch_t *);
     480extern int async_state_change_finalize(cap_handle_t, async_exch_t *);
    481481
    482482extern void *async_remote_state_acquire(async_sess_t *);
  • uspace/lib/c/include/ipc/common.h

    r98cb5e0d r01c3bb4  
    4040#include <abi/proc/task.h>
    4141#include <futex.h>
     42#include <abi/cap.h>
    4243
    4344#define IPC_FLAG_BLOCKING  0x01
     
    5354} ipc_call_t;
    5455
    55 typedef sysarg_t ipc_callid_t;
     56typedef cap_handle_t ipc_callid_t;
    5657
    5758extern futex_t async_futex;
  • uspace/lib/c/include/ipc/ipc.h

    r98cb5e0d r01c3bb4  
    4444#include <abi/synch.h>
    4545#include <abi/proc/task.h>
     46#include <abi/cap.h>
    4647
    4748typedef void (*ipc_async_callback_t)(void *, int, ipc_call_t *);
    4849
    49 extern ipc_callid_t ipc_wait_cycle(ipc_call_t *, sysarg_t, unsigned int);
     50extern cap_handle_t ipc_wait_cycle(ipc_call_t *, sysarg_t, unsigned int);
    5051extern void ipc_poke(void);
    5152
     
    5354        ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT);
    5455
    55 extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *, sysarg_t);
    56 extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *);
     56extern cap_handle_t ipc_wait_for_call_timeout(ipc_call_t *, sysarg_t);
     57extern cap_handle_t ipc_trywait_for_call(ipc_call_t *);
    5758
    5859/*
     
    6364 */
    6465
    65 #define ipc_answer_0(callid, retval) \
    66         ipc_answer_fast((callid), (retval), 0, 0, 0, 0)
    67 #define ipc_answer_1(callid, retval, arg1) \
    68         ipc_answer_fast((callid), (retval), (arg1), 0, 0, 0)
    69 #define ipc_answer_2(callid, retval, arg1, arg2) \
    70         ipc_answer_fast((callid), (retval), (arg1), (arg2), 0, 0)
    71 #define ipc_answer_3(callid, retval, arg1, arg2, arg3) \
    72         ipc_answer_fast((callid), (retval), (arg1), (arg2), (arg3), 0)
    73 #define ipc_answer_4(callid, retval, arg1, arg2, arg3, arg4) \
    74         ipc_answer_fast((callid), (retval), (arg1), (arg2), (arg3), (arg4))
    75 #define ipc_answer_5(callid, retval, arg1, arg2, arg3, arg4, arg5) \
    76         ipc_answer_slow((callid), (retval), (arg1), (arg2), (arg3), (arg4), (arg5))
     66#define ipc_answer_0(chandle, retval) \
     67        ipc_answer_fast((chandle), (retval), 0, 0, 0, 0)
     68#define ipc_answer_1(chandle, retval, arg1) \
     69        ipc_answer_fast((chandle), (retval), (arg1), 0, 0, 0)
     70#define ipc_answer_2(chandle, retval, arg1, arg2) \
     71        ipc_answer_fast((chandle), (retval), (arg1), (arg2), 0, 0)
     72#define ipc_answer_3(chandle, retval, arg1, arg2, arg3) \
     73        ipc_answer_fast((chandle), (retval), (arg1), (arg2), (arg3), 0)
     74#define ipc_answer_4(chandle, retval, arg1, arg2, arg3, arg4) \
     75        ipc_answer_fast((chandle), (retval), (arg1), (arg2), (arg3), (arg4))
     76#define ipc_answer_5(chandle, retval, arg1, arg2, arg3, arg4, arg5) \
     77        ipc_answer_slow((chandle), (retval), (arg1), (arg2), (arg3), (arg4), \
     78            (arg5))
    7779
    78 extern sysarg_t ipc_answer_fast(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     80extern sysarg_t ipc_answer_fast(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
    7981    sysarg_t, sysarg_t);
    80 extern sysarg_t ipc_answer_slow(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     82extern sysarg_t ipc_answer_slow(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
    8183    sysarg_t, sysarg_t, sysarg_t);
    8284
     
    8890 */
    8991
    90 #define ipc_call_async_0(phoneid, method, private, callback) \
    91         ipc_call_async_fast((phoneid), (method), 0, 0, 0, (private), (callback))
    92 #define ipc_call_async_1(phoneid, method, arg1, private, callback) \
    93         ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, (private), \
     92#define ipc_call_async_0(phandle, method, private, callback) \
     93        ipc_call_async_fast((phandle), (method), 0, 0, 0, (private), (callback))
     94#define ipc_call_async_1(phandle, method, arg1, private, callback) \
     95        ipc_call_async_fast((phandle), (method), (arg1), 0, 0, (private), \
    9496            (callback))
    95 #define ipc_call_async_2(phoneid, method, arg1, arg2, private, callback) \
    96         ipc_call_async_fast((phoneid), (method), (arg1), (arg2), 0, \
     97#define ipc_call_async_2(phandle, method, arg1, arg2, private, callback) \
     98        ipc_call_async_fast((phandle), (method), (arg1), (arg2), 0, \
    9799            (private), (callback))
    98 #define ipc_call_async_3(phoneid, method, arg1, arg2, arg3, private, callback) \
    99         ipc_call_async_fast((phoneid), (method), (arg1), (arg2), (arg3), \
     100#define ipc_call_async_3(phandle, method, arg1, arg2, arg3, private, callback) \
     101        ipc_call_async_fast((phandle), (method), (arg1), (arg2), (arg3), \
    100102            (private), (callback))
    101 #define ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, private, \
     103#define ipc_call_async_4(phandle, method, arg1, arg2, arg3, arg4, private, \
    102104    callback) \
    103         ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \
     105        ipc_call_async_slow((phandle), (method), (arg1), (arg2), (arg3), \
    104106            (arg4), 0, (private), (callback))
    105 #define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \
     107#define ipc_call_async_5(phandle, method, arg1, arg2, arg3, arg4, arg5, \
    106108    private, callback) \
    107         ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \
     109        ipc_call_async_slow((phandle), (method), (arg1), (arg2), (arg3), \
    108110            (arg4), (arg5), (private), (callback))
    109111
    110 extern void ipc_call_async_fast(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
    111     void *, ipc_async_callback_t);
    112 extern void ipc_call_async_slow(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
    113     sysarg_t, sysarg_t, void *, ipc_async_callback_t);
     112extern void ipc_call_async_fast(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
     113    sysarg_t, void *, ipc_async_callback_t);
     114extern void ipc_call_async_slow(cap_handle_t, sysarg_t, sysarg_t, sysarg_t,
     115    sysarg_t, sysarg_t, sysarg_t, void *, ipc_async_callback_t);
    114116
    115 extern int ipc_hangup(int);
     117extern int ipc_hangup(cap_handle_t);
    116118
    117 extern int ipc_forward_fast(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,
    118     unsigned int);
    119 extern int ipc_forward_slow(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,
    120     sysarg_t, sysarg_t, sysarg_t, unsigned int);
     119extern int ipc_forward_fast(cap_handle_t, cap_handle_t, sysarg_t, sysarg_t,
     120    sysarg_t, unsigned int);
     121extern int ipc_forward_slow(cap_handle_t, cap_handle_t, sysarg_t, sysarg_t,
     122    sysarg_t, sysarg_t, sysarg_t, sysarg_t, unsigned int);
    121123
    122124extern int ipc_connect_kbox(task_id_t);
Note: See TracChangeset for help on using the changeset viewer.