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


Ignore:
Timestamp:
2011-02-04T21:00:56Z (13 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
474afc9, 960ff451
Parents:
400575c5 (diff), 17aca1c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes

File:
1 edited

Legend:

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

    r400575c5 re29e09cf  
    3333 */
    3434
     35#if ((defined(LIBC_IPC_H_)) && (!defined(LIBC_ASYNC_C_)))
     36        #error Do not intermix low-level IPC interface and async framework
     37#endif
     38
    3539#ifndef LIBC_ASYNC_H_
    3640#define LIBC_ASYNC_H_
    3741
    38 #include <ipc/ipc.h>
     42#include <ipc/common.h>
    3943#include <async_sess.h>
    4044#include <fibril.h>
     
    4246#include <atomic.h>
    4347#include <bool.h>
     48#include <task.h>
    4449
    4550typedef ipc_callid_t aid_t;
     
    5055typedef void (*async_client_conn_t)(ipc_callid_t, ipc_call_t *);
    5156
    52 extern atomic_t async_futex;
    53 
    5457extern atomic_t threads_in_ipc_wait;
    5558
    56 extern int __async_init(void);
     59#define async_manager() \
     60        fibril_switch(FIBRIL_TO_MANAGER)
     61
     62#define async_get_call(data) \
     63        async_get_call_timeout(data, 0)
     64
    5765extern ipc_callid_t async_get_call_timeout(ipc_call_t *, suseconds_t);
    58 
    59 static inline ipc_callid_t async_get_call(ipc_call_t *data)
    60 {
    61         return async_get_call_timeout(data, 0);
    62 }
    63 
    64 static inline void async_manager(void)
    65 {
    66         fibril_switch(FIBRIL_TO_MANAGER);
    67 }
    6866
    6967/*
     
    110108extern void async_set_interrupt_received(async_client_conn_t);
    111109
    112 /* Wrappers for simple communication */
    113 #define async_msg_0(phone, method) \
    114         ipc_call_async_0((phone), (method), NULL, NULL, true)
    115 #define async_msg_1(phone, method, arg1) \
    116         ipc_call_async_1((phone), (method), (arg1), NULL, NULL, \
    117             true)
    118 #define async_msg_2(phone, method, arg1, arg2) \
    119         ipc_call_async_2((phone), (method), (arg1), (arg2), NULL, NULL, \
    120             true)
    121 #define async_msg_3(phone, method, arg1, arg2, arg3) \
    122         ipc_call_async_3((phone), (method), (arg1), (arg2), (arg3), NULL, NULL, \
    123             true)
    124 #define async_msg_4(phone, method, arg1, arg2, arg3, arg4) \
    125         ipc_call_async_4((phone), (method), (arg1), (arg2), (arg3), (arg4), NULL, \
    126             NULL, true)
    127 #define async_msg_5(phone, method, arg1, arg2, arg3, arg4, arg5) \
    128         ipc_call_async_5((phone), (method), (arg1), (arg2), (arg3), (arg4), \
    129             (arg5), NULL, NULL, true)
     110/*
     111 * Wrappers for simple communication.
     112 */
     113
     114extern void async_msg_0(int, sysarg_t);
     115extern void async_msg_1(int, sysarg_t, sysarg_t);
     116extern void async_msg_2(int, sysarg_t, sysarg_t, sysarg_t);
     117extern void async_msg_3(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t);
     118extern void async_msg_4(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t);
     119extern void async_msg_5(int, sysarg_t, sysarg_t, sysarg_t, sysarg_t, sysarg_t,
     120    sysarg_t);
     121
     122/*
     123 * Wrappers for answer routines.
     124 */
     125
     126extern sysarg_t async_answer_0(ipc_callid_t, sysarg_t);
     127extern sysarg_t async_answer_1(ipc_callid_t, sysarg_t, sysarg_t);
     128extern sysarg_t async_answer_2(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t);
     129extern sysarg_t async_answer_3(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     130    sysarg_t);
     131extern sysarg_t async_answer_4(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     132    sysarg_t, sysarg_t);
     133extern sysarg_t async_answer_5(ipc_callid_t, sysarg_t, sysarg_t, sysarg_t,
     134    sysarg_t, sysarg_t, sysarg_t);
     135
     136/*
     137 * Wrappers for forwarding routines.
     138 */
     139
     140extern int async_forward_fast(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,
     141    unsigned int);
     142extern int async_forward_slow(ipc_callid_t, int, sysarg_t, sysarg_t, sysarg_t,
     143    sysarg_t, sysarg_t, sysarg_t, unsigned int);
    130144
    131145/*
     
    135149 * and slow verion based on m.
    136150 */
     151
    137152#define async_req_0_0(phoneid, method) \
    138153        async_req_fast((phoneid), (method), 0, 0, 0, 0, NULL, NULL, NULL, NULL, \
     
    266281}
    267282
     283extern int async_connect_to_me(int, sysarg_t, sysarg_t, sysarg_t,
     284    async_client_conn_t);
    268285extern int async_connect_me_to(int, sysarg_t, sysarg_t, sysarg_t);
    269286extern int async_connect_me_to_blocking(int, sysarg_t, sysarg_t, sysarg_t);
     287extern int async_connect_kbox(task_id_t);
     288extern int async_hangup(int);
     289extern void async_poke(void);
    270290
    271291/*
    272292 * User-friendly wrappers for async_share_in_start().
    273293 */
     294
    274295#define async_share_in_start_0_0(phoneid, dst, size) \
    275296        async_share_in_start((phoneid), (dst), (size), 0, NULL)
     
    281302        async_share_in_start((phoneid), (dst), (size), (arg), (flags))
    282303
    283 extern int async_share_in_start(int, void *, size_t, sysarg_t, int *);
    284 extern int async_share_in_receive(ipc_callid_t *, size_t *);
    285 extern int async_share_in_finalize(ipc_callid_t, void *, int );
    286 extern int async_share_out_start(int, void *, int);
    287 extern int async_share_out_receive(ipc_callid_t *, size_t *, int *);
     304extern int async_share_in_start(int, void *, size_t, sysarg_t, unsigned int *);
     305extern bool async_share_in_receive(ipc_callid_t *, size_t *);
     306extern int async_share_in_finalize(ipc_callid_t, void *, unsigned int);
     307
     308extern int async_share_out_start(int, void *, unsigned int);
     309extern bool async_share_out_receive(ipc_callid_t *, size_t *, unsigned int *);
    288310extern int async_share_out_finalize(ipc_callid_t, void *);
    289311
     
    291313 * User-friendly wrappers for async_data_read_forward_fast().
    292314 */
     315
    293316#define async_data_read_forward_0_0(phoneid, method, answer) \
    294317        async_data_read_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL)
     
    318341
    319342extern int async_data_read_start(int, void *, size_t);
    320 extern int async_data_read_receive(ipc_callid_t *, size_t *);
     343extern bool async_data_read_receive(ipc_callid_t *, size_t *);
    321344extern int async_data_read_finalize(ipc_callid_t, const void *, size_t);
    322345
     
    327350 * User-friendly wrappers for async_data_write_forward_fast().
    328351 */
     352
    329353#define async_data_write_forward_0_0(phoneid, method, answer) \
    330354        async_data_write_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL)
     
    356380
    357381extern int async_data_write_start(int, const void *, size_t);
    358 extern int async_data_write_receive(ipc_callid_t *, size_t *);
     382extern bool async_data_write_receive(ipc_callid_t *, size_t *);
    359383extern int async_data_write_finalize(ipc_callid_t, void *, size_t);
    360384
    361385extern int async_data_write_accept(void **, const bool, const size_t,
    362386    const size_t, const size_t, size_t *);
    363 extern void async_data_write_void(const int);
     387extern void async_data_write_void(sysarg_t);
    364388
    365389extern int async_data_write_forward_fast(int, sysarg_t, sysarg_t, sysarg_t,
Note: See TracChangeset for help on using the changeset viewer.