/uspace/trunk/libipc/include/ipc.h |
---|
36,7 → 36,7 |
typedef sysarg_t ipc_callid_t; |
extern int ipc_call_sync(int phoneid, int arg1, int arg2); |
extern int ipc_call_sync(int phoneid, int arg1, int arg2, ipc_data_t *resdata); |
extern int ipc_wait_for_call(ipc_data_t *data, int flags); |
/uspace/trunk/libipc/generic/ipc.c |
---|
29,19 → 29,12 |
#include <ipc.h> |
#include <libc.h> |
static inline ipc_callid_t _ipc_call(int phoneid, int arg1, int arg2) |
int ipc_call_sync(int phoneid, int arg1, int arg2, ipc_data_t *resdata) |
{ |
__SYSCALL3(SYS_IPC_CALL, phoneid, arg1, arg2); |
return __SYSCALL4(SYS_IPC_CALL_SYNC, phoneid, arg1, arg2, |
(sysarg_t)resdata); |
} |
int ipc_call_sync(int phoneid, int arg1, int arg2) |
{ |
ipc_data_t resdata; |
_ipc_call(phoneid, arg1, arg2); |
ipc_wait_for_call(&resdata,0); |
} |
/* |
int ipc_call_async() |
{ |
/uspace/trunk/init/init.c |
---|
31,9 → 31,11 |
int main(int argc, char *argv[]) |
{ |
ipc_data_t ipcdata; |
version_print(); |
ipc_call_sync(0, 1, 2); |
ipc_call_sync(0, 1, 2, &ipcdata); |
return 0; |
} |
/uspace/trunk/libc/include/libc.h |
---|
33,15 → 33,17 |
#include <kernel/syscall/syscall.h> |
#define __SYSCALL0(id) __syscall(0, 0, 0, id) |
#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, id) |
#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, id) |
#define __SYSCALL3(id, p1, p2, p3) __syscall(p1,p2,p3,id) |
#define __SYSCALL0(id) __syscall(0, 0, 0, 0, id) |
#define __SYSCALL1(id, p1) __syscall(p1, 0, 0, 0, id) |
#define __SYSCALL2(id, p1, p2) __syscall(p1, p2, 0, 0, id) |
#define __SYSCALL3(id, p1, p2, p3) __syscall(p1,p2,p3, 0, id) |
#define __SYSCALL4(id, p1, p2, p3, p4) __syscall(p1,p2,p3,p4,id) |
extern void __main(void); |
extern void __exit(void); |
extern sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, |
const sysarg_t p3, const syscall_t id); |
const sysarg_t p3, const sysarg_t p4, |
const syscall_t id); |
#endif |
/uspace/trunk/libc/arch/mips32/src/syscall.c |
---|
29,12 → 29,14 |
#include <libc.h> |
sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, |
const sysarg_t p3, const syscall_t id) |
const sysarg_t p3, const sysarg_t p4, |
const syscall_t id) |
{ |
register sysarg_t __mips_reg_a0 asm("$4") = p1; |
register sysarg_t __mips_reg_a1 asm("$5") = p2; |
register sysarg_t __mips_reg_a2 asm("$6") = p3; |
register sysarg_t __mips_reg_a3 asm("$7") = id; |
register sysarg_t __mips_reg_a3 asm("$7") = p4; |
register sysarg_t __mips_reg_t0 asm("$8") = id; |
register sysarg_t __mips_reg_v0 asm("$2"); |
asm volatile ( |
43,7 → 45,8 |
: "r" (__mips_reg_a0), |
"r" (__mips_reg_a1), |
"r" (__mips_reg_a2), |
"r" (__mips_reg_a3) |
"r" (__mips_reg_a3), |
"r" (__mips_reg_t0) |
); |
return __mips_reg_v0; |
/uspace/trunk/libc/arch/ia32/src/syscall.c |
---|
28,7 → 28,8 |
#include <libc.h> |
sysarg_t __syscall(const syscall_t id, const sysarg_t p1, const sysarg_t p2, const sysarg_t p3) |
sysarg_t __syscall(const sysarg_t p1, const sysarg_t p2, const sysarg_t p3, |
const sysarg_t p4, const syscall_t id) |
{ |
sysarg_t ret; |
35,10 → 36,11 |
asm volatile ( |
"int $0x30\n" |
: "=a" (ret) |
: "a" (id), |
"b" (p1), |
"c" (p2), |
"d" (p3) |
: "a" (p1), |
"b" (p2), |
"c" (p3), |
"d" (p4), |
"S" (id) |
); |
return ret; |