Changeset 9c16c36 in mainline for uspace/lib/c/include/async.h


Ignore:
Timestamp:
2018-06-07T17:00:32Z (6 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Children:
95faa4d
Parents:
8404342
git-author:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-05-25 17:07:26)
git-committer:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-06-07 17:00:32)
Message:

initial implementation of a new async call api

File:
1 edited

Legend:

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

    r8404342 r9c16c36  
    492492    sysarg_t, sysarg_t, sysarg_t);
    493493
     494struct async_call_data;
     495
     496typedef errno_t (*async_call_finalizer_t)(struct async_call_data *);
     497
     498typedef struct async_call_data {
     499        // public
     500        ipc_call_t answer;
     501
     502        // private
     503        link_t link;
     504        void *arg1;
     505        void *arg2;
     506        aid_t msgid;
     507        async_call_finalizer_t finalizer;
     508} async_call_data_t;
     509
     510typedef struct async_call {
     511        // public
     512        async_call_data_t initial;
     513
     514        // private
     515        list_t fragments;
     516        async_exch_t *exch;
     517        errno_t rc;
     518} async_call_t;
     519
     520extern void async_call_begin(async_call_t *, async_sess_t *, sysarg_t,
     521    sysarg_t, sysarg_t, sysarg_t, sysarg_t);
     522
     523// Waits for all in-flight fragments to finish, and ends the call.
     524extern errno_t async_call_finish(async_call_t *);
     525extern errno_t async_call_finish_timeout(async_call_t *, const struct timeval *);
     526
     527// Aborts the call. After this function returns, auxiliary structures
     528// and buffers are safe to deallocate.
     529// TODO: might need some extra support from kernel
     530extern void async_call_abort(async_call_t *);
     531
     532// Waits for all in-flight fragments to finish, but doesn't end the call.
     533extern errno_t async_call_wait(async_call_t *);
     534extern errno_t async_call_wait_timeout(async_call_t *, const struct timeval *);
     535
     536extern void async_call_method_with_finalizer(async_call_t *,
     537    async_call_data_t *, sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
     538    async_call_finalizer_t);
     539extern void async_call_method(async_call_t *, async_call_data_t *, sysarg_t,
     540    sysarg_t, sysarg_t, sysarg_t, sysarg_t);
     541
     542extern void async_call_read(async_call_t *, async_call_data_t *,
     543    void *, size_t, size_t *);
     544extern void async_call_write(async_call_t *, async_call_data_t *,
     545    const void *, size_t, size_t *);
     546
     547extern void async_call_share_in(async_call_t *, async_call_data_t *,
     548    size_t, sysarg_t, unsigned int *, void **);
     549extern void async_call_share_out(async_call_t *, async_call_data_t *,
     550    void *, unsigned int);
     551
     552// TODO: connect me to, connect to me, vfs handle, etc.
     553
    494554#endif
    495555
Note: See TracChangeset for help on using the changeset viewer.