Subversion Repositories HelenOS

Rev

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

Rev 2676 Rev 2677
Line 664... Line 664...
664
{
664
{
665
    return __SYSCALL6(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1,
665
    return __SYSCALL6(SYS_IPC_FORWARD_FAST, callid, phoneid, method, arg1,
666
        arg2, mode);
666
        arg2, mode);
667
}
667
}
668
 
668
 
-
 
669
/** Wrapper for making IPC_M_SHARE_IN calls.
-
 
670
 *
-
 
671
 * @param phoneid   Phone that will be used to contact the receiving side.
-
 
672
 * @param dst       Destination address space area base.
-
 
673
 * @param size      Size of the destination address space area.
-
 
674
 * @param arg       User defined argument.
-
 
675
 * @param flags     Storage where the received flags will be stored. Can be
-
 
676
 *          NULL.
-
 
677
 *
-
 
678
 * @return      Zero on success or a negative error code from errno.h.
-
 
679
 */
-
 
680
int ipc_share_in_send(int phoneid, void *dst, size_t size, ipcarg_t arg,
-
 
681
    int *flags)
-
 
682
{
-
 
683
    int res;
-
 
684
    sysarg_t tmp_flags;
-
 
685
    res = ipc_call_sync_3_2(phoneid, IPC_M_SHARE_IN, (ipcarg_t) dst,
-
 
686
        (ipcarg_t) size, arg, NULL, &tmp_flags);
-
 
687
    if (flags)
-
 
688
        *flags = tmp_flags;
-
 
689
    return res;
-
 
690
}
-
 
691
 
-
 
692
/** Wrapper for receiving the IPC_M_SHARE_IN calls.
-
 
693
 *
-
 
694
 * This wrapper only makes it more comfortable to receive IPC_M_SHARE_IN calls
-
 
695
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
696
 *
-
 
697
 * So far, this wrapper is to be used from within a connection fibril.
-
 
698
 *
-
 
699
 * @param callid    Storage where the hash of the IPC_M_SHARE_IN call will
-
 
700
 *          be stored.
-
 
701
 * @param size      Destination address space area size.   
-
 
702
 *
-
 
703
 * @return      Non-zero on success, zero on failure.
-
 
704
 */
-
 
705
int ipc_share_in_receive(ipc_callid_t *callid, size_t *size)
-
 
706
{
-
 
707
    ipc_call_t data;
-
 
708
   
-
 
709
    assert(callid);
-
 
710
    assert(size);
-
 
711
 
-
 
712
    *callid = async_get_call(&data);
-
 
713
    if (IPC_GET_METHOD(data) != IPC_M_SHARE_IN)
-
 
714
        return 0;
-
 
715
    *size = (size_t) IPC_GET_ARG2(data);
-
 
716
    return 1;
-
 
717
}
-
 
718
 
-
 
719
/** Wrapper for answering the IPC_M_SHARE_IN calls.
-
 
720
 *
-
 
721
 * This wrapper only makes it more comfortable to answer IPC_M_DATA_READ calls
-
 
722
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
723
 *
-
 
724
 * @param callid    Hash of the IPC_M_DATA_READ call to answer.
-
 
725
 * @param src       Source address space base.
-
 
726
 * @param flags     Flags to be used for sharing. Bits can be only cleared.
-
 
727
 *
-
 
728
 * @return      Zero on success or a value from @ref errno.h on failure.
-
 
729
 */
-
 
730
int ipc_share_in_deliver(ipc_callid_t callid, void *src, int flags)
-
 
731
{
-
 
732
    return ipc_answer_2(callid, EOK, (ipcarg_t) src, (ipcarg_t) flags);
-
 
733
}
-
 
734
 
-
 
735
/** Wrapper for making IPC_M_SHARE_OUT calls.
-
 
736
 *
-
 
737
 * @param phoneid   Phone that will be used to contact the receiving side.
-
 
738
 * @param src       Source address space area base address.
-
 
739
 * @param flags     Flags to be used for sharing. Bits can be only cleared.
-
 
740
 *
-
 
741
 * @return      Zero on success or a negative error code from errno.h.
-
 
742
 */
-
 
743
int ipc_share_out_send(int phoneid, void *src, int flags)
-
 
744
{
-
 
745
    return ipc_call_sync_3_0(phoneid, IPC_M_SHARE_OUT, (ipcarg_t) src, 0,
-
 
746
        (ipcarg_t) flags);
-
 
747
}
-
 
748
 
-
 
749
/** Wrapper for receiving the IPC_M_SHARE_OUT calls.
-
 
750
 *
-
 
751
 * This wrapper only makes it more comfortable to receive IPC_M_SHARE_OUT calls
-
 
752
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
753
 *
-
 
754
 * So far, this wrapper is to be used from within a connection fibril.
-
 
755
 *
-
 
756
 * @param callid    Storage where the hash of the IPC_M_SHARE_OUT call will
-
 
757
 *          be stored.
-
 
758
 * @param size      Storage where the source address space area size will be
-
 
759
 *          stored.
-
 
760
 * @param flags     Storage where the sharing flags will be stored.
-
 
761
 *
-
 
762
 * @return      Non-zero on success, zero on failure.
-
 
763
 */
-
 
764
int ipc_share_out_receive(ipc_callid_t *callid, size_t *size, int *flags)
-
 
765
{
-
 
766
    ipc_call_t data;
-
 
767
   
-
 
768
    assert(callid);
-
 
769
    assert(size);
-
 
770
    assert(flags);
-
 
771
 
-
 
772
    *callid = async_get_call(&data);
-
 
773
    if (IPC_GET_METHOD(data) != IPC_M_DATA_WRITE)
-
 
774
        return 0;
-
 
775
    *size = (size_t) IPC_GET_ARG2(data);
-
 
776
    *flags = (int) IPC_GET_ARG3(data);
-
 
777
    return 1;
-
 
778
}
-
 
779
 
-
 
780
/** Wrapper for answering the IPC_M_SHARE_OUT calls.
-
 
781
 *
-
 
782
 * This wrapper only makes it more comfortable to answer IPC_M_SHARE_OUT calls
-
 
783
 * so that the user doesn't have to remember the meaning of each IPC argument.
-
 
784
 *
-
 
785
 * @param callid    Hash of the IPC_M_DATA_WRITE call to answer.
-
 
786
 * @param dst       Destination address space area base address.   
-
 
787
 *
-
 
788
 * @return      Zero on success or a value from @ref errno.h on failure.
-
 
789
 */
-
 
790
int ipc_share_out_deliver(ipc_callid_t callid, void *dst)
-
 
791
{
-
 
792
    return ipc_answer_1(callid, EOK, (ipcarg_t) dst);
-
 
793
}
-
 
794
 
-
 
795
 
669
/** Wrapper for making IPC_M_DATA_READ calls.
796
/** Wrapper for making IPC_M_DATA_READ calls.
670
 *
797
 *
671
 * @param phoneid   Phone that will be used to contact the receiving side.
798
 * @param phoneid   Phone that will be used to contact the receiving side.
672
 * @param dst       Address of the beginning of the destination buffer.
799
 * @param dst       Address of the beginning of the destination buffer.
673
 * @param size      Size of the destination buffer.
800
 * @param size      Size of the destination buffer.