Subversion Repositories HelenOS

Rev

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

Rev 2490 Rev 2522
Line 48... Line 48...
48
#include <unistd.h>
48
#include <unistd.h>
49
#include <futex.h>
49
#include <futex.h>
50
#include <kernel/synch/synch.h>
50
#include <kernel/synch/synch.h>
51
#include <async.h>
51
#include <async.h>
52
#include <fibril.h>
52
#include <fibril.h>
-
 
53
#include <assert.h>
53
 
54
 
54
/**
55
/**
55
 * Structures of this type are used for keeping track of sent asynchronous calls
56
 * Structures of this type are used for keeping track of sent asynchronous calls
56
 * and queing unsent calls.
57
 * and queing unsent calls.
57
 */
58
 */
Line 592... Line 593...
592
int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1)
593
int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, ipcarg_t arg1)
593
{
594
{
594
    return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1);
595
    return __SYSCALL4(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1);
595
}
596
}
596
 
597
 
-
 
598
/** Wrapper for accepting the IPC_M_DATA_SEND calls.
-
 
599
 *
-
 
600
 * This wrapper only makes it more comfortable to accept IPC_M_DATA_SEND calls
-
 
601
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
602
 *
-
 
603
 * So far, this wrapper is to be used from within a connection fibril.
-
 
604
 *
-
 
605
 * @param callid    Storage where the hash of the IPC_M_DATA_SEND call will
-
 
606
 *          be stored.
-
 
607
 * @param call      Storage where the incoming call will be stored.
-
 
608
 * @param dst       Storage where the suggested destination address will
-
 
609
 *          be stored. May be NULL.
-
 
610
 * @param size      Storage where the suggested size will be stored. May be
-
 
611
 *          NULL
-
 
612
 *
-
 
613
 * @return      Non-zero on success, zero on failure.
-
 
614
 */
-
 
615
int ipc_data_send_accept(ipc_callid_t *callid, ipc_call_t *call, void **dst,
-
 
616
    size_t *size)
-
 
617
{
-
 
618
    assert(callid);
-
 
619
    assert(call);
-
 
620
 
-
 
621
    *callid = async_get_call(call);
-
 
622
    if (IPC_GET_METHOD(*call) != IPC_M_DATA_SEND)
-
 
623
        return 0;
-
 
624
    if (dst)
-
 
625
        *dst = (void *) IPC_GET_ARG1(*call);
-
 
626
    if (size)
-
 
627
        *size = (size_t) IPC_GET_ARG3(*call);
-
 
628
    return 1;
-
 
629
}
-
 
630
 
-
 
631
/** Wrapper for answering the IPC_M_DATA_SEND calls.
-
 
632
 *
-
 
633
 * This wrapper only makes it more comfortable to answer IPC_M_DATA_SEND calls
-
 
634
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
635
 *
-
 
636
 * @param callid    Hash of the IPC_M_DATA_SEND call to answer.
-
 
637
 * @param call      Call structure with the request.
-
 
638
 * @param dst       Final destination address for the IPC_M_DATA_SEND call.
-
 
639
 * @param size      Final size for the IPC_M_DATA_SEND call.
-
 
640
 *
-
 
641
 * @return      Zero on success or a value from @ref errno.h on failure.
-
 
642
 */
-
 
643
ipcarg_t ipc_data_send_answer(ipc_callid_t callid, ipc_call_t *call, void *dst,     size_t size)
-
 
644
{
-
 
645
    IPC_SET_RETVAL(*call, EOK);
-
 
646
    IPC_SET_ARG1(*call, (ipcarg_t) dst);
-
 
647
    IPC_SET_ARG3(*call, (ipcarg_t) size);
-
 
648
    return ipc_answer(callid, call);
-
 
649
}
-
 
650
 
597
/** @}
651
/** @}
598
 */
652
 */