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. |