Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1364 → Rev 1365

/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);