Ignore:
File:
1 edited

Legend:

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

    r5da7199 rb72efe8  
    4242#include <ipc/common.h>
    4343#include <fibril.h>
     44#include <fibril_synch.h>
    4445#include <sys/time.h>
    4546#include <atomic.h>
     
    5455/** Client connection handler
    5556 *
    56  * @param callid ID of incoming call or 0 if connection initiated from
    57  *               inside using async_connect_to_me()
    58  * @param call   Incoming call or 0 if connection initiated from inside
    59  * @param arg    Local argument passed from async_new_connection() or
    60  *               async_connect_to_me()
     57 * @param callid        ID of incoming call or 0 if connection initiated from
     58 *                      inside using async_connect_to_me()
     59 * @param call          Incoming call or 0 if connection initiated from inside
     60 * @param arg           Local argument passed from async_new_connection() or
     61 *                      async_connect_to_me()
    6162 */
    6263typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *, void *);
     
    9596} exch_mgmt_t;
    9697
    97 /** Forward declarations */
    98 struct async_exch;
    99 struct async_sess;
    100 
    101 typedef struct async_sess async_sess_t;
    102 typedef struct async_exch async_exch_t;
     98/** Session data */
     99typedef struct {
     100        /** List of inactive exchanges */
     101        list_t exch_list;
     102       
     103        /** Exchange management style */
     104        exch_mgmt_t mgmt;
     105       
     106        /** Session identification */
     107        int phone;
     108       
     109        /** First clone connection argument */
     110        sysarg_t arg1;
     111       
     112        /** Second clone connection argument */
     113        sysarg_t arg2;
     114       
     115        /** Third clone connection argument */
     116        sysarg_t arg3;
     117       
     118        /** Exchange mutex */
     119        fibril_mutex_t mutex;
     120       
     121        /** Number of opened exchanges */
     122        atomic_t refcnt;
     123} async_sess_t;
     124
     125/** Exchange data */
     126typedef struct {
     127        /** Link into list of inactive exchanges */
     128        link_t sess_link;
     129       
     130        /** Link into global list of inactive exchanges */
     131        link_t global_link;
     132       
     133        /** Session pointer */
     134        async_sess_t *sess;
     135       
     136        /** Exchange identification */
     137        int phone;
     138} async_exch_t;
    103139
    104140extern atomic_t threads_in_ipc_wait;
     
    140176extern int async_wait_timeout(aid_t, sysarg_t *, suseconds_t);
    141177
    142 extern fid_t async_new_connection(task_id_t, sysarg_t, ipc_callid_t,
     178extern fid_t async_new_connection(sysarg_t, sysarg_t, ipc_callid_t,
    143179    ipc_call_t *, async_client_conn_t, void *);
    144180
     
    150186extern void async_set_client_data_destructor(async_client_data_dtor_t);
    151187extern void *async_get_client_data(void);
    152 extern void *async_get_client_data_by_id(task_id_t);
    153 extern void async_put_client_data_by_id(task_id_t);
    154188
    155189extern void async_set_client_connection(async_client_conn_t);
     
    337371
    338372/*
    339  * FIXME These functions just work around problems with parallel exchange
    340  * management. Proper solution needs to be implemented.
    341  */
    342 void async_sess_args_set(async_sess_t *sess, sysarg_t, sysarg_t, sysarg_t);
    343 
    344 /*
    345373 * User-friendly wrappers for async_share_in_start().
    346374 */
     
    449477extern async_sess_t *async_callback_receive_start(exch_mgmt_t, ipc_call_t *);
    450478
    451 extern int async_state_change_start(async_exch_t *, sysarg_t, sysarg_t,
    452     sysarg_t, async_exch_t *);
    453 extern bool async_state_change_receive(ipc_callid_t *, sysarg_t *, sysarg_t *,
    454     sysarg_t *);
    455 extern int async_state_change_finalize(ipc_callid_t, async_exch_t *);
    456 
    457 extern void *async_remote_state_acquire(async_sess_t *);
    458 extern void async_remote_state_update(async_sess_t *, void *);
    459 extern void async_remote_state_release(async_sess_t *);
    460 extern void async_remote_state_release_exchange(async_exch_t *);
    461 
    462479#endif
    463480
Note: See TracChangeset for help on using the changeset viewer.