Changes in kernel/generic/src/ipc/sysipc.c [f6bffee:fa3b8e4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
rf6bffee rfa3b8e4 49 49 #include <syscall/copy.h> 50 50 #include <security/cap.h> 51 #include <console/console.h>52 51 #include <mm/as.h> 53 52 #include <print.h> … … 69 68 * 70 69 */ 71 static int phone_get( sysarg_t phoneid, phone_t **phone)70 static int phone_get(unative_t phoneid, phone_t **phone) 72 71 { 73 72 if (phoneid >= IPC_MAX_PHONES) … … 78 77 } 79 78 80 /** Decide if the interface and method is a system method. 81 * 82 * @param imethod Interface and method to be decided. 83 * 84 * @return True if the interface and method is a system 85 * interface and method. 86 * 87 */ 88 static inline bool method_is_system(sysarg_t imethod) 89 { 90 if (imethod <= IPC_M_LAST_SYSTEM) 79 /** Decide if the method is a system method. 80 * 81 * @param method Method to be decided. 82 * 83 * @return true if the method is a system method. 84 * 85 */ 86 static inline bool method_is_system(unative_t method) 87 { 88 if (method <= IPC_M_LAST_SYSTEM) 91 89 return true; 92 90 … … 94 92 } 95 93 96 /** Decide if the message with this interface andmethod is forwardable.97 * 98 * Some system messages may be forwarded, for some of them99 * it is useless.100 * 101 * @param imethod Interface and method to be decided.102 * 103 * @return True if the interface andmethod is forwardable.104 * 105 */ 106 static inline bool method_is_forwardable( sysarg_t imethod)107 { 108 switch ( imethod) {94 /** Decide if the message with this method is forwardable. 95 * 96 * - some system messages may be forwarded, for some of them 97 * it is useless 98 * 99 * @param method Method to be decided. 100 * 101 * @return true if the method is forwardable. 102 * 103 */ 104 static inline bool method_is_forwardable(unative_t method) 105 { 106 switch (method) { 109 107 case IPC_M_CONNECTION_CLONE: 110 108 case IPC_M_CONNECT_ME: … … 117 115 } 118 116 119 /** Decide if the message with this interface andmethod is immutable on forward.120 * 121 * Some system messages may be forwarded but their content cannot be altered.122 * 123 * @param imethod Interface and method to be decided.124 * 125 * @return True if the interface andmethod is immutable on forward.126 * 127 */ 128 static inline bool method_is_immutable( sysarg_t imethod)129 { 130 switch ( imethod) {117 /** Decide if the message with this method is immutable on forward. 118 * 119 * - some system messages may be forwarded but their content cannot be altered 120 * 121 * @param method Method to be decided. 122 * 123 * @return true if the method is immutable on forward. 124 * 125 */ 126 static inline bool method_is_immutable(unative_t method) 127 { 128 switch (method) { 131 129 case IPC_M_SHARE_OUT: 132 130 case IPC_M_SHARE_IN: … … 154 152 static inline bool answer_need_old(call_t *call) 155 153 { 156 switch (IPC_GET_ IMETHOD(call->data)) {154 switch (IPC_GET_METHOD(call->data)) { 157 155 case IPC_M_CONNECTION_CLONE: 158 156 case IPC_M_CONNECT_ME: … … 198 196 return 0; 199 197 200 if (IPC_GET_ IMETHOD(*olddata) == IPC_M_CONNECTION_CLONE) {198 if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECTION_CLONE) { 201 199 int phoneid = IPC_GET_ARG1(*olddata); 202 200 phone_t *phone = &TASK->phones[phoneid]; … … 220 218 mutex_unlock(&phone->lock); 221 219 } 222 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_CONNECT_ME) {220 } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_ME) { 223 221 phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata); 224 222 … … 239 237 mutex_unlock(&phone->lock); 240 238 } 241 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_CONNECT_TO_ME) {239 } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_TO_ME) { 242 240 int phoneid = IPC_GET_ARG5(*olddata); 243 241 … … 248 246 /* The connection was accepted */ 249 247 phone_connect(phoneid, &answer->sender->answerbox); 250 /* Set 'task hash' as arg4 of response */251 IPC_SET_ARG4(answer->data, (sysarg_t) TASK);252 248 /* Set 'phone hash' as arg5 of response */ 253 249 IPC_SET_ARG5(answer->data, 254 ( sysarg_t) &TASK->phones[phoneid]);255 } 256 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_CONNECT_ME_TO) {250 (unative_t) &TASK->phones[phoneid]); 251 } 252 } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_ME_TO) { 257 253 /* If the users accepted call, connect */ 258 254 if (IPC_GET_RETVAL(answer->data) == EOK) { … … 260 256 &TASK->answerbox); 261 257 } 262 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_SHARE_OUT) {258 } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_OUT) { 263 259 if (!IPC_GET_RETVAL(answer->data)) { 264 260 /* Accepted, handle as_area receipt */ … … 274 270 return rc; 275 271 } 276 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_SHARE_IN) {272 } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_IN) { 277 273 if (!IPC_GET_RETVAL(answer->data)) { 278 274 irq_spinlock_lock(&answer->sender->lock, true); … … 285 281 IPC_SET_RETVAL(answer->data, rc); 286 282 } 287 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_DATA_READ) {283 } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_READ) { 288 284 ASSERT(!answer->buffer); 289 285 if (!IPC_GET_RETVAL(answer->data)) { … … 314 310 } 315 311 } 316 } else if (IPC_GET_ IMETHOD(*olddata) == IPC_M_DATA_WRITE) {312 } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_WRITE) { 317 313 ASSERT(answer->buffer); 318 314 if (!IPC_GET_RETVAL(answer->data)) { … … 367 363 static int request_preprocess(call_t *call, phone_t *phone) 368 364 { 369 switch (IPC_GET_ IMETHOD(call->data)) {365 switch (IPC_GET_METHOD(call->data)) { 370 366 case IPC_M_CONNECTION_CLONE: { 371 367 phone_t *cloned_phone; … … 403 399 } 404 400 case IPC_M_CONNECT_ME: 405 IPC_SET_ARG5(call->data, ( sysarg_t) phone);401 IPC_SET_ARG5(call->data, (unative_t) phone); 406 402 break; 407 403 case IPC_M_CONNECT_ME_TO: { … … 411 407 412 408 /* Set arg5 for server */ 413 IPC_SET_ARG5(call->data, ( sysarg_t) &TASK->phones[newphid]);409 IPC_SET_ARG5(call->data, (unative_t) &TASK->phones[newphid]); 414 410 call->flags |= IPC_CALL_CONN_ME_TO; 415 411 call->priv = newphid; … … 426 422 case IPC_M_DATA_READ: { 427 423 size_t size = IPC_GET_ARG2(call->data); 428 if ( size <= 0)424 if ((size <= 0 || (size > DATA_XFER_LIMIT))) 429 425 return ELIMIT; 430 if (size > DATA_XFER_LIMIT) { 431 int flags = IPC_GET_ARG3(call->data); 432 if (flags & IPC_XF_RESTRICT) 433 IPC_SET_ARG2(call->data, DATA_XFER_LIMIT); 434 else 435 return ELIMIT; 436 } 426 437 427 break; 438 428 } … … 441 431 size_t size = IPC_GET_ARG2(call->data); 442 432 443 if (size > DATA_XFER_LIMIT) { 444 int flags = IPC_GET_ARG3(call->data); 445 if (flags & IPC_XF_RESTRICT) { 446 size = DATA_XFER_LIMIT; 447 IPC_SET_ARG2(call->data, size); 448 } else 449 return ELIMIT; 450 } 433 if (size > DATA_XFER_LIMIT) 434 return ELIMIT; 451 435 452 436 call->buffer = (uint8_t *) malloc(size, 0); … … 519 503 static int process_request(answerbox_t *box, call_t *call) 520 504 { 521 if (IPC_GET_ IMETHOD(call->data) == IPC_M_CONNECT_TO_ME) {505 if (IPC_GET_METHOD(call->data) == IPC_M_CONNECT_TO_ME) { 522 506 int phoneid = phone_alloc(TASK); 523 507 if (phoneid < 0) { /* Failed to allocate phone */ … … 530 514 } 531 515 532 switch (IPC_GET_ IMETHOD(call->data)) {516 switch (IPC_GET_METHOD(call->data)) { 533 517 case IPC_M_DEBUG_ALL: 534 518 return -1; … … 546 530 * 547 531 * @param phoneid Phone handle for the call. 548 * @param imethod Interface and method of the call.532 * @param method Method of the call. 549 533 * @param arg1 Service-defined payload argument. 550 534 * @param arg2 Service-defined payload argument. 551 535 * @param arg3 Service-defined payload argument. 552 * @param data Address of user -space structure where the reply call will536 * @param data Address of userspace structure where the reply call will 553 537 * be stored. 554 538 * … … 557 541 * 558 542 */ 559 sysarg_t sys_ipc_call_sync_fast(sysarg_t phoneid, sysarg_t imethod,560 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_data_t *data)543 unative_t sys_ipc_call_sync_fast(unative_t phoneid, unative_t method, 544 unative_t arg1, unative_t arg2, unative_t arg3, ipc_data_t *data) 561 545 { 562 546 phone_t *phone; 563 547 if (phone_get(phoneid, &phone) != EOK) 564 548 return ENOENT; 565 549 566 550 call_t *call = ipc_call_alloc(0); 567 IPC_SET_ IMETHOD(call->data, imethod);551 IPC_SET_METHOD(call->data, method); 568 552 IPC_SET_ARG1(call->data, arg1); 569 553 IPC_SET_ARG2(call->data, arg2); … … 595 579 596 580 process_answer(call); 581 597 582 } else 598 583 IPC_SET_RETVAL(call->data, res); … … 608 593 /** Make a synchronous IPC call allowing to transmit the entire payload. 609 594 * 610 * @param phoneid Phone handle for the call.611 * @param request User-space address of call data with the request.612 * @param reply User-space address of call data where to store the613 * answer.595 * @param phoneid Phone handle for the call. 596 * @param question Userspace address of call data with the request. 597 * @param reply Userspace address of call data where to store the 598 * answer. 614 599 * 615 600 * @return Zero on success or an error code. 616 601 * 617 602 */ 618 sysarg_t sys_ipc_call_sync_slow(sysarg_t phoneid, ipc_data_t *request,603 unative_t sys_ipc_call_sync_slow(unative_t phoneid, ipc_data_t *question, 619 604 ipc_data_t *reply) 620 605 { … … 622 607 if (phone_get(phoneid, &phone) != EOK) 623 608 return ENOENT; 624 609 625 610 call_t *call = ipc_call_alloc(0); 626 int rc = copy_from_uspace(&call->data.args, & request->args,611 int rc = copy_from_uspace(&call->data.args, &question->args, 627 612 sizeof(call->data.args)); 628 613 if (rc != 0) { 629 614 ipc_call_free(call); 630 return ( sysarg_t) rc;615 return (unative_t) rc; 631 616 } 632 617 … … 659 644 } 660 645 661 /** Check that the task did not exceed the allowed limit of asynchronous calls 662 * made over a phone. 663 * 664 * @param phone Phone to check the limit against. 646 /** Check that the task did not exceed the allowed limit of asynchronous calls. 665 647 * 666 648 * @return 0 if limit not reached or -1 if limit exceeded. 667 649 * 668 650 */ 669 static int check_call_limit(phone_t *phone) 670 { 671 if (atomic_get(&phone->active_calls) >= IPC_MAX_ASYNC_CALLS) 651 static int check_call_limit(void) 652 { 653 if (atomic_preinc(&TASK->active_calls) > IPC_MAX_ASYNC_CALLS) { 654 atomic_dec(&TASK->active_calls); 672 655 return -1; 656 } 673 657 674 658 return 0; … … 681 665 * 682 666 * @param phoneid Phone handle for the call. 683 * @param imethod Interface and method of the call.667 * @param method Method of the call. 684 668 * @param arg1 Service-defined payload argument. 685 669 * @param arg2 Service-defined payload argument. … … 693 677 * 694 678 */ 695 sysarg_t sys_ipc_call_async_fast(sysarg_t phoneid, sysarg_t imethod, 696 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4) 697 { 679 unative_t sys_ipc_call_async_fast(unative_t phoneid, unative_t method, 680 unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4) 681 { 682 if (check_call_limit()) 683 return IPC_CALLRET_TEMPORARY; 684 698 685 phone_t *phone; 699 686 if (phone_get(phoneid, &phone) != EOK) 700 687 return IPC_CALLRET_FATAL; 701 688 702 if (check_call_limit(phone))703 return IPC_CALLRET_TEMPORARY;704 705 689 call_t *call = ipc_call_alloc(0); 706 IPC_SET_ IMETHOD(call->data, imethod);690 IPC_SET_METHOD(call->data, method); 707 691 IPC_SET_ARG1(call->data, arg1); 708 692 IPC_SET_ARG2(call->data, arg2); … … 723 707 ipc_backsend_err(phone, call, res); 724 708 725 return ( sysarg_t) call;709 return (unative_t) call; 726 710 } 727 711 … … 734 718 * 735 719 */ 736 sysarg_t sys_ipc_call_async_slow(sysarg_t phoneid, ipc_data_t *data) 737 { 720 unative_t sys_ipc_call_async_slow(unative_t phoneid, ipc_data_t *data) 721 { 722 if (check_call_limit()) 723 return IPC_CALLRET_TEMPORARY; 724 738 725 phone_t *phone; 739 726 if (phone_get(phoneid, &phone) != EOK) 740 727 return IPC_CALLRET_FATAL; 741 742 if (check_call_limit(phone))743 return IPC_CALLRET_TEMPORARY;744 728 745 729 call_t *call = ipc_call_alloc(0); … … 748 732 if (rc != 0) { 749 733 ipc_call_free(call); 750 return ( sysarg_t) rc;734 return (unative_t) rc; 751 735 } 752 736 … … 758 742 ipc_backsend_err(phone, call, res); 759 743 760 return ( sysarg_t) call;744 return (unative_t) call; 761 745 } 762 746 … … 767 751 * @param callid Hash of the call to forward. 768 752 * @param phoneid Phone handle to use for forwarding. 769 * @param imethod New interface andmethod to use for the forwarded call.753 * @param method New method to use for the forwarded call. 770 754 * @param arg1 New value of the first argument for the forwarded call. 771 755 * @param arg2 New value of the second argument for the forwarded call. … … 783 767 * 784 768 */ 785 static sysarg_t sys_ipc_forward_common(sysarg_t callid, sysarg_t phoneid,786 sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,787 sysarg_t arg4, sysarg_t arg5, unsigned int mode, bool slow)769 static unative_t sys_ipc_forward_common(unative_t callid, unative_t phoneid, 770 unative_t method, unative_t arg1, unative_t arg2, unative_t arg3, 771 unative_t arg4, unative_t arg5, unsigned int mode, bool slow) 788 772 { 789 773 call_t *call = get_call(callid); … … 800 784 } 801 785 802 if (!method_is_forwardable(IPC_GET_ IMETHOD(call->data))) {786 if (!method_is_forwardable(IPC_GET_METHOD(call->data))) { 803 787 IPC_SET_RETVAL(call->data, EFORWARD); 804 788 ipc_answer(&TASK->answerbox, call); … … 807 791 808 792 /* 809 * Userspace is not allowed to change interface and method of system810 * methods on forward, allow changing ARG1, ARG2, ARG3 and ARG4 by811 * means of method,arg1, arg2 and arg3.812 * If the interface andmethod is immutable, don't change anything.793 * Userspace is not allowed to change method of system methods on 794 * forward, allow changing ARG1, ARG2, ARG3 and ARG4 by means of method, 795 * arg1, arg2 and arg3. 796 * If the method is immutable, don't change anything. 813 797 */ 814 if (!method_is_immutable(IPC_GET_ IMETHOD(call->data))) {815 if (method_is_system(IPC_GET_ IMETHOD(call->data))) {816 if (IPC_GET_ IMETHOD(call->data) == IPC_M_CONNECT_TO_ME)798 if (!method_is_immutable(IPC_GET_METHOD(call->data))) { 799 if (method_is_system(IPC_GET_METHOD(call->data))) { 800 if (IPC_GET_METHOD(call->data) == IPC_M_CONNECT_TO_ME) 817 801 phone_dealloc(IPC_GET_ARG5(call->data)); 818 802 819 IPC_SET_ARG1(call->data, imethod);803 IPC_SET_ARG1(call->data, method); 820 804 IPC_SET_ARG2(call->data, arg1); 821 805 IPC_SET_ARG3(call->data, arg2); … … 829 813 } 830 814 } else { 831 IPC_SET_ IMETHOD(call->data, imethod);815 IPC_SET_METHOD(call->data, method); 832 816 IPC_SET_ARG1(call->data, arg1); 833 817 IPC_SET_ARG2(call->data, arg2); … … 845 829 /** Forward a received call to another destination - fast version. 846 830 * 847 * In case the original interface and method is a system method, ARG1, ARG2848 * and ARG3 are overwritten in the forwarded message with the new method and849 * the new arg1 and arg2, respectively. Otherwise the IMETHOD, ARG1 and ARG2850 * are rewritten with the new interface and method, arg1 and arg2, respectively.851 * Also note there is a set of immutable methods, for which the new method and852 * arguments are notset and these values are ignored.831 * In case the original method is a system method, ARG1, ARG2 and ARG3 are 832 * overwritten in the forwarded message with the new method and the new 833 * arg1 and arg2, respectively. Otherwise the METHOD, ARG1 and ARG2 are 834 * rewritten with the new method, arg1 and arg2, respectively. Also note there 835 * is a set of immutable methods, for which the new method and arguments are not 836 * set and these values are ignored. 853 837 * 854 838 * @param callid Hash of the call to forward. 855 839 * @param phoneid Phone handle to use for forwarding. 856 * @param imethod New interface andmethod to use for the forwarded call.840 * @param method New method to use for the forwarded call. 857 841 * @param arg1 New value of the first argument for the forwarded call. 858 842 * @param arg2 New value of the second argument for the forwarded call. … … 862 846 * 863 847 */ 864 sysarg_t sys_ipc_forward_fast(sysarg_t callid, sysarg_t phoneid,865 sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, unsigned int mode)866 { 867 return sys_ipc_forward_common(callid, phoneid, imethod, arg1, arg2, 0, 0,848 unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, 849 unative_t method, unative_t arg1, unative_t arg2, unsigned int mode) 850 { 851 return sys_ipc_forward_common(callid, phoneid, method, arg1, arg2, 0, 0, 868 852 0, mode, false); 869 853 } … … 872 856 * 873 857 * This function is the slow verision of the sys_ipc_forward_fast interface. 874 * It can copy all five new arguments and the new interface and method from875 * the userspace. It naturally extends the functionality of the fast version.876 * For system methods, it additionally stores the new value of arg3 to ARG4.877 * For non-system methods, it additionally stores the new value of arg3, arg4878 * and arg5,respectively, to ARG3, ARG4 and ARG5, respectively.858 * It can copy all five new arguments and the new method from the userspace. 859 * It naturally extends the functionality of the fast version. For system 860 * methods, it additionally stores the new value of arg3 to ARG4. For non-system 861 * methods, it additionally stores the new value of arg3, arg4 and arg5, 862 * respectively, to ARG3, ARG4 and ARG5, respectively. 879 863 * 880 864 * @param callid Hash of the call to forward. … … 886 870 * 887 871 */ 888 sysarg_t sys_ipc_forward_slow(sysarg_t callid, sysarg_t phoneid,872 unative_t sys_ipc_forward_slow(unative_t callid, unative_t phoneid, 889 873 ipc_data_t *data, unsigned int mode) 890 874 { … … 893 877 sizeof(newdata.args)); 894 878 if (rc != 0) 895 return ( sysarg_t) rc;879 return (unative_t) rc; 896 880 897 881 return sys_ipc_forward_common(callid, phoneid, 898 IPC_GET_ IMETHOD(newdata), IPC_GET_ARG1(newdata),882 IPC_GET_METHOD(newdata), IPC_GET_ARG1(newdata), 899 883 IPC_GET_ARG2(newdata), IPC_GET_ARG3(newdata), 900 884 IPC_GET_ARG4(newdata), IPC_GET_ARG5(newdata), mode, true); … … 916 900 * 917 901 */ 918 sysarg_t sys_ipc_answer_fast(sysarg_t callid, sysarg_t retval,919 sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)902 unative_t sys_ipc_answer_fast(unative_t callid, unative_t retval, 903 unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4) 920 904 { 921 905 /* Do not answer notification callids */ … … 961 945 * 962 946 */ 963 sysarg_t sys_ipc_answer_slow(sysarg_t callid, ipc_data_t *data)947 unative_t sys_ipc_answer_slow(unative_t callid, ipc_data_t *data) 964 948 { 965 949 /* Do not answer notification callids */ … … 998 982 * 999 983 */ 1000 sysarg_t sys_ipc_hangup(sysarg_t phoneid)984 unative_t sys_ipc_hangup(unative_t phoneid) 1001 985 { 1002 986 phone_t *phone; … … 1024 1008 * 1025 1009 */ 1026 sysarg_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,1010 unative_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec, 1027 1011 unsigned int flags) 1028 1012 { … … 1053 1037 ipc_call_free(call); 1054 1038 1055 return (( sysarg_t) call) | IPC_CALLID_NOTIFICATION;1039 return ((unative_t) call) | IPC_CALLID_NOTIFICATION; 1056 1040 } 1057 1041 … … 1062 1046 ipc_call_free(call); 1063 1047 goto restart; 1048 } else { 1049 /* 1050 * Decrement the counter of active calls only if the 1051 * call is not an answer to IPC_M_PHONE_HUNGUP, 1052 * which doesn't contribute to the counter. 1053 */ 1054 atomic_dec(&TASK->active_calls); 1064 1055 } 1065 1056 … … 1067 1058 ipc_call_free(call); 1068 1059 1069 return (( sysarg_t) call) | IPC_CALLID_ANSWERED;1060 return ((unative_t) call) | IPC_CALLID_ANSWERED; 1070 1061 } 1071 1062 … … 1095 1086 } 1096 1087 1097 return ( sysarg_t) call;1088 return (unative_t) call; 1098 1089 } 1099 1090 … … 1101 1092 * 1102 1093 */ 1103 sysarg_t sys_ipc_poke(void)1094 unative_t sys_ipc_poke(void) 1104 1095 { 1105 1096 waitq_unsleep(&TASK->answerbox.wq); … … 1109 1100 /** Connect an IRQ handler to a task. 1110 1101 * 1111 * @param inr 1112 * @param devno 1113 * @param imethod Interface and method to be associated with the notification.1114 * @param ucode 1102 * @param inr IRQ number. 1103 * @param devno Device number. 1104 * @param method Method to be associated with the notification. 1105 * @param ucode Uspace pointer to the top-half pseudocode. 1115 1106 * 1116 1107 * @return EPERM or a return code returned by ipc_irq_register(). 1117 1108 * 1118 1109 */ 1119 sysarg_t sys_register_irq(inr_t inr, devno_t devno, sysarg_t imethod,1110 unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method, 1120 1111 irq_code_t *ucode) 1121 1112 { … … 1123 1114 return EPERM; 1124 1115 1125 return ipc_irq_register(&TASK->answerbox, inr, devno, imethod, ucode);1116 return ipc_irq_register(&TASK->answerbox, inr, devno, method, ucode); 1126 1117 } 1127 1118 … … 1134 1125 * 1135 1126 */ 1136 sysarg_t sys_unregister_irq(inr_t inr, devno_t devno)1127 unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno) 1137 1128 { 1138 1129 if (!(cap_get(TASK) & CAP_IRQ_REG)) … … 1144 1135 } 1145 1136 1146 #i fdef __32_BITS__1147 1148 /** Syscall connect to a task by ID (32 bits)1137 #include <console/console.h> 1138 1139 /** Syscall connect to a task by id. 1149 1140 * 1150 1141 * @return Phone id on success, or negative error code. 1151 1142 * 1152 1143 */ 1153 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid)1144 unative_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid_arg) 1154 1145 { 1155 1146 #ifdef CONFIG_UDEBUG 1156 sysarg64_t taskid ;1157 int rc = copy_from_uspace(&taskid , uspace_taskid, sizeof(sysarg64_t));1147 sysarg64_t taskid_arg; 1148 int rc = copy_from_uspace(&taskid_arg, uspace_taskid_arg, sizeof(sysarg64_t)); 1158 1149 if (rc != 0) 1159 return (sysarg_t) rc; 1160 1161 return ipc_connect_kbox((task_id_t) taskid); 1150 return (unative_t) rc; 1151 1152 LOG("sys_ipc_connect_kbox(%" PRIu64 ")", taskid_arg.value); 1153 1154 return ipc_connect_kbox(taskid_arg.value); 1162 1155 #else 1163 return ( sysarg_t) ENOTSUP;1156 return (unative_t) ENOTSUP; 1164 1157 #endif 1165 1158 } 1166 1159 1167 #endif /* __32_BITS__ */1168 1169 #ifdef __64_BITS__1170 1171 /** Syscall connect to a task by ID (64 bits)1172 *1173 * @return Phone id on success, or negative error code.1174 *1175 */1176 sysarg_t sys_ipc_connect_kbox(sysarg_t taskid)1177 {1178 #ifdef CONFIG_UDEBUG1179 return ipc_connect_kbox((task_id_t) taskid);1180 #else1181 return (sysarg_t) ENOTSUP;1182 #endif1183 }1184 1185 #endif /* __64_BITS__ */1186 1187 1160 /** @} 1188 1161 */
Note:
See TracChangeset
for help on using the changeset viewer.