Subversion Repositories HelenOS-historic

Rev

Rev 1463 | Rev 1472 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1463 Rev 1464
Line 7... Line 7...
7
#include <atomic.h>
7
#include <atomic.h>
8
 
8
 
9
typedef ipc_callid_t aid_t;
9
typedef ipc_callid_t aid_t;
10
 
10
 
11
int async_manager(void);
11
int async_manager(void);
12
void async_create_manager(void);
-
 
13
void async_destroy_manager(void);
-
 
14
int _async_init(void);
-
 
15
ipc_callid_t async_get_call(ipc_call_t *data);
12
ipc_callid_t async_get_call(ipc_call_t *data);
16
 
13
 
-
 
14
 
17
aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
15
aid_t async_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2,
18
           ipc_call_t *dataptr);
16
           ipc_call_t *dataptr);
19
void async_wait_for(aid_t amsgid, ipcarg_t *result);
17
void async_wait_for(aid_t amsgid, ipcarg_t *result);
20
int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
18
int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout);
-
 
19
 
-
 
20
/** Pseudo-synchronous message sending
-
 
21
 *
-
 
22
 * Send message through IPC, wait in the event loop, until it is received
-
 
23
 *
-
 
24
 * @return Return code of message
-
 
25
 */
-
 
26
static inline ipcarg_t sync_send_2(int phoneid, ipcarg_t method, ipcarg_t arg1, ipcarg_t arg2, ipcarg_t *r1, ipcarg_t *r2)
-
 
27
{
-
 
28
    ipc_call_t result;
-
 
29
    ipcarg_t rc;
-
 
30
 
-
 
31
    aid_t eid = async_send_2(phoneid, method, arg1, arg2, &result);
-
 
32
    async_wait_for(eid, &rc);
-
 
33
    if (r1)
-
 
34
        *r1 = IPC_GET_ARG1(result);
-
 
35
    if (r2)
-
 
36
        *r2 = IPC_GET_ARG2(result);
-
 
37
    return rc;
-
 
38
}
-
 
39
 
-
 
40
 
21
pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid,
41
pstid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid,
22
                 ipc_call_t *call,
42
                 ipc_call_t *call,
23
                 void (*cthread)(ipc_callid_t,ipc_call_t *));
43
                 void (*cthread)(ipc_callid_t,ipc_call_t *));
24
void async_usleep(suseconds_t timeout);
44
void async_usleep(suseconds_t timeout);
-
 
45
void async_create_manager(void);
-
 
46
void async_destroy_manager(void);
-
 
47
int _async_init(void);
25
 
48
 
26
/* Should be defined by application */
49
/* Should be defined by application */
27
void client_connection(ipc_callid_t callid, ipc_call_t *call) __attribute__((weak));
50
void client_connection(ipc_callid_t callid, ipc_call_t *call) __attribute__((weak));
28
void interrupt_received(ipc_call_t *call)  __attribute__((weak));
51
void interrupt_received(ipc_call_t *call)  __attribute__((weak));
29
 
52