Changeset 01c3bb4 in mainline for uspace/lib/c/include/async.h


Ignore:
Timestamp:
2017-11-25T15:43:25Z (6 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.

File:
1 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 *);
Note: See TracChangeset for help on using the changeset viewer.