/uspace/trunk/kbd/generic/kbd.c |
---|
78,7 → 78,7 |
}; |
while (1) { |
callid = ipc_wait_for_call(&call, 0); |
callid = ipc_wait_for_call(&call); |
// printf("%s:Call phone=%lX..", NAME, call.in_phone_hash); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
/uspace/trunk/ns/ns.c |
---|
91,7 → 91,7 |
} |
while (1) { |
callid = ipc_wait_for_call(&call, 0); |
callid = ipc_wait_for_call(&call); |
// printf("NS: Call in_phone_hash=%lX...", call.in_phone_hash); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_AS_AREA_SEND: |
/uspace/trunk/init/init.c |
---|
179,7 → 179,7 |
for (i=0; i<100;i++) |
printf("."); |
printf("\n"); |
ipc_wait_for_call(&data, NULL); |
ipc_wait_for_call(&data); |
printf("Received call???\n"); |
} |
203,7 → 203,7 |
printf("----------------\n"); |
ipc_call_async(PHONE_NS, NS_PING_SVC, 0, "prov", |
got_answer_2); |
callid = ipc_wait_for_call(&data, NULL); |
callid = ipc_wait_for_call(&data); |
printf("Received ping\n"); |
ipc_answer_fast(callid, 0, 0, 0); |
} |
243,7 → 243,7 |
phoneid = ipc_connect_me_to(PHONE_NS, 10, 20); |
printf("Newphid: %d\n", phoneid); |
for (i=0; i < 1000; i++) { |
if ((callid=ipc_wait_for_call(&data, IPC_WAIT_NONBLOCKING))) |
if ((callid=ipc_trywait_for_call(&data))) |
printf("callid: %d\n"); |
} |
printf("New new phoneid: %d\n", ipc_connect_me_to(PHONE_NS, 10, 20)); |
266,7 → 266,7 |
"Ping2", got_answer); |
for (i=0; i < 1000; i++) { |
if ((callid=ipc_wait_for_call(&data, IPC_WAIT_NONBLOCKING))) |
if ((callid=ipc_trywait_for_call(&data))) |
printf("callid: %d\n"); |
} |
ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2, |
275,7 → 275,7 |
ipc_hangup(PHONE_NS); |
ipc_call_async_2(PHONE_NS, NS_PING, 1, 0xbeefbee2, |
"Pong1", got_answer); |
ipc_wait_for_call(&data, 0); |
ipc_wait_for_call(&data); |
} |
static int ptest(void *arg) |
394,7 → 394,7 |
// test_slam(); |
// test_as_send(); |
// test_pci(); |
// test_kbd(); |
test_kbd(); |
// test_fb(); |
printf("Hello\nThis is Init\n\nBye."); |
/uspace/trunk/fb/fb.c |
---|
163,7 → 163,7 |
while (1) { |
static int vfb_no=1; |
callid = ipc_wait_for_call(&call, 0); |
callid = ipc_wait_for_call(&call); |
// printf("%s:Call phone=%lX..", NAME, call.in_phone_hash); |
switch (IPC_GET_METHOD(call)&((1<<METHOD_WIDTH)-1)) { |
case IPC_M_PHONE_HUNGUP: |
/uspace/trunk/libc/include/ipc/ipc.h |
---|
53,7 → 53,10 |
extern int ipc_call_sync(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t *result); |
extern ipc_callid_t ipc_wait_for_call(ipc_call_t *data, int flags); |
extern ipc_callid_t ipc_wait_for_call(ipc_call_t *data); |
extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec); |
extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *data); |
extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, ipcarg_t arg1, |
ipcarg_t arg2); |
extern ipcarg_t ipc_answer(ipc_callid_t callid, ipc_call_t *call); |
/uspace/trunk/libc/generic/ipc.c |
---|
34,6 → 34,7 |
#include <stdio.h> |
#include <unistd.h> |
#include <futex.h> |
#include <kernel/synch/synch.h> |
/** Structure used for keeping track of sent async msgs |
* and queing unsent msgs |
251,14 → 252,13 |
} |
/** Wait for IPC call and return |
/** Unconditionally wait for an IPC call. |
* |
* - dispatch ASYNC reoutines in the background |
* @param data Space where the message is stored |
* @return Callid or 0 if nothing available and started with |
* IPC_WAIT_NONBLOCKING |
* @param call Space where the message is stored |
* @return Callid of the answer. |
*/ |
ipc_callid_t ipc_wait_for_call(ipc_call_t *call, int flags) |
ipc_callid_t ipc_wait_for_call(ipc_call_t *call) |
{ |
ipc_callid_t callid; |
265,7 → 265,7 |
do { |
try_dispatch_queued_calls(); |
callid = __SYSCALL2(SYS_IPC_WAIT, (sysarg_t)call, flags); |
callid = __SYSCALL3(SYS_IPC_WAIT, (sysarg_t) call, SYNCH_NO_TIMEOUT, SYNCH_BLOCKING); |
/* Handle received answers */ |
if (callid & IPC_CALLID_ANSWERED) |
handle_answer(callid, call); |
274,6 → 274,51 |
return callid; |
} |
/** Wait some time for an IPC call. |
* |
* - dispatch ASYNC reoutines in the background |
* @param call Space where the message is stored |
* @param usec Timeout in microseconds. |
* @return Callid of the answer. |
*/ |
ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *call, uint32_t usec) |
{ |
ipc_callid_t callid; |
do { |
try_dispatch_queued_calls(); |
callid = __SYSCALL3(SYS_IPC_WAIT, (sysarg_t) call, usec, SYNCH_BLOCKING); |
/* Handle received answers */ |
if (callid & IPC_CALLID_ANSWERED) |
handle_answer(callid, call); |
} while (callid & IPC_CALLID_ANSWERED); |
return callid; |
} |
/** Check if there is an IPC call waiting to be picked up. |
* |
* - dispatch ASYNC reoutines in the background |
* @param call Space where the message is stored |
* @return Callid of the answer. |
*/ |
ipc_callid_t ipc_trywait_for_call(ipc_call_t *call) |
{ |
ipc_callid_t callid; |
do { |
try_dispatch_queued_calls(); |
callid = __SYSCALL3(SYS_IPC_WAIT, (sysarg_t)call, SYNCH_NO_TIMEOUT, SYNCH_NON_BLOCKING); |
/* Handle received answers */ |
if (callid & IPC_CALLID_ANSWERED) |
handle_answer(callid, call); |
} while (callid & IPC_CALLID_ANSWERED); |
return callid; |
} |
/** Ask destination to do a callback connection |
* |
* @return 0 - OK, error code |
/uspace/trunk/pci/pci.c |
---|
65,7 → 65,7 |
ipc_callid_t callid; |
int retval; |
callid = ipc_wait_for_call(&call, 0); |
callid = ipc_wait_for_call(&call); |
switch(IPC_GET_METHOD(call)) { |
case IPC_M_CONNECT_ME_TO: |
IPC_SET_RETVAL(call, 0); |