Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/sysipc.c

    r8add9ca5 rfa3b8e4  
    4949#include <syscall/copy.h>
    5050#include <security/cap.h>
    51 #include <console/console.h>
    5251#include <mm/as.h>
    5352#include <print.h>
     
    6968 *
    7069 */
    71 static int phone_get(sysarg_t phoneid, phone_t **phone)
     70static int phone_get(unative_t phoneid, phone_t **phone)
    7271{
    7372        if (phoneid >= IPC_MAX_PHONES)
     
    7877}
    7978
    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 */
     86static inline bool method_is_system(unative_t method)
     87{
     88        if (method <= IPC_M_LAST_SYSTEM)
    9189                return true;
    9290       
     
    9492}
    9593
    96 /** Decide if the message with this interface and method is forwardable.
    97  *
    98  * Some system messages may be forwarded, for some of them
    99  * it is useless.
    100  *
    101  * @param imethod Interface and method to be decided.
    102  *
    103  * @return True if the interface and method 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 */
     104static inline bool method_is_forwardable(unative_t method)
     105{
     106        switch (method) {
    109107        case IPC_M_CONNECTION_CLONE:
    110108        case IPC_M_CONNECT_ME:
     
    117115}
    118116
    119 /** Decide if the message with this interface and method 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 and method 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 */
     126static inline bool method_is_immutable(unative_t method)
     127{
     128        switch (method) {
    131129        case IPC_M_SHARE_OUT:
    132130        case IPC_M_SHARE_IN:
     
    154152static inline bool answer_need_old(call_t *call)
    155153{
    156         switch (IPC_GET_IMETHOD(call->data)) {
     154        switch (IPC_GET_METHOD(call->data)) {
    157155        case IPC_M_CONNECTION_CLONE:
    158156        case IPC_M_CONNECT_ME:
     
    198196                return 0;
    199197       
    200         if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECTION_CLONE) {
     198        if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECTION_CLONE) {
    201199                int phoneid = IPC_GET_ARG1(*olddata);
    202200                phone_t *phone = &TASK->phones[phoneid];
     
    220218                        mutex_unlock(&phone->lock);
    221219                }
    222         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_ME) {
     220        } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_ME) {
    223221                phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata);
    224222               
     
    239237                        mutex_unlock(&phone->lock);
    240238                }
    241         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_TO_ME) {
     239        } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_TO_ME) {
    242240                int phoneid = IPC_GET_ARG5(*olddata);
    243241               
     
    248246                        /* The connection was accepted */
    249247                        phone_connect(phoneid, &answer->sender->answerbox);
    250                         /* Set 'task hash' as arg4 of response */
    251                         IPC_SET_ARG4(answer->data, (sysarg_t) TASK);
    252248                        /* Set 'phone hash' as arg5 of response */
    253249                        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) {
    257253                /* If the users accepted call, connect */
    258254                if (IPC_GET_RETVAL(answer->data) == EOK) {
     
    260256                            &TASK->answerbox);
    261257                }
    262         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_OUT) {
     258        } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_OUT) {
    263259                if (!IPC_GET_RETVAL(answer->data)) {
    264260                        /* Accepted, handle as_area receipt */
     
    274270                        return rc;
    275271                }
    276         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_IN) {
     272        } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_IN) {
    277273                if (!IPC_GET_RETVAL(answer->data)) {
    278274                        irq_spinlock_lock(&answer->sender->lock, true);
     
    285281                        IPC_SET_RETVAL(answer->data, rc);
    286282                }
    287         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_DATA_READ) {
     283        } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_READ) {
    288284                ASSERT(!answer->buffer);
    289285                if (!IPC_GET_RETVAL(answer->data)) {
     
    314310                        }
    315311                }
    316         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_DATA_WRITE) {
     312        } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_WRITE) {
    317313                ASSERT(answer->buffer);
    318314                if (!IPC_GET_RETVAL(answer->data)) {
     
    367363static int request_preprocess(call_t *call, phone_t *phone)
    368364{
    369         switch (IPC_GET_IMETHOD(call->data)) {
     365        switch (IPC_GET_METHOD(call->data)) {
    370366        case IPC_M_CONNECTION_CLONE: {
    371367                phone_t *cloned_phone;
     
    403399        }
    404400        case IPC_M_CONNECT_ME:
    405                 IPC_SET_ARG5(call->data, (sysarg_t) phone);
     401                IPC_SET_ARG5(call->data, (unative_t) phone);
    406402                break;
    407403        case IPC_M_CONNECT_ME_TO: {
     
    411407               
    412408                /* 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]);
    414410                call->flags |= IPC_CALL_CONN_ME_TO;
    415411                call->priv = newphid;
     
    507503static int process_request(answerbox_t *box, call_t *call)
    508504{
    509         if (IPC_GET_IMETHOD(call->data) == IPC_M_CONNECT_TO_ME) {
     505        if (IPC_GET_METHOD(call->data) == IPC_M_CONNECT_TO_ME) {
    510506                int phoneid = phone_alloc(TASK);
    511507                if (phoneid < 0) { /* Failed to allocate phone */
     
    518514        }
    519515       
    520         switch (IPC_GET_IMETHOD(call->data)) {
     516        switch (IPC_GET_METHOD(call->data)) {
    521517        case IPC_M_DEBUG_ALL:
    522518                return -1;
     
    534530 *
    535531 * @param phoneid Phone handle for the call.
    536  * @param imethod Interface and method of the call.
     532 * @param method  Method of the call.
    537533 * @param arg1    Service-defined payload argument.
    538534 * @param arg2    Service-defined payload argument.
    539535 * @param arg3    Service-defined payload argument.
    540  * @param data    Address of user-space structure where the reply call will
     536 * @param data    Address of userspace structure where the reply call will
    541537 *                be stored.
    542538 *
     
    545541 *
    546542 */
    547 sysarg_t sys_ipc_call_sync_fast(sysarg_t phoneid, sysarg_t imethod,
    548     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, ipc_data_t *data)
     543unative_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)
    549545{
    550546        phone_t *phone;
    551547        if (phone_get(phoneid, &phone) != EOK)
    552548                return ENOENT;
    553        
     549
    554550        call_t *call = ipc_call_alloc(0);
    555         IPC_SET_IMETHOD(call->data, imethod);
     551        IPC_SET_METHOD(call->data, method);
    556552        IPC_SET_ARG1(call->data, arg1);
    557553        IPC_SET_ARG2(call->data, arg2);
     
    583579               
    584580                process_answer(call);
     581               
    585582        } else
    586583                IPC_SET_RETVAL(call->data, res);
     
    596593/** Make a synchronous IPC call allowing to transmit the entire payload.
    597594 *
    598  * @param phoneid Phone handle for the call.
    599  * @param request User-space address of call data with the request.
    600  * @param reply   User-space address of call data where to store the
    601  *                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.
    602599 *
    603600 * @return Zero on success or an error code.
    604601 *
    605602 */
    606 sysarg_t sys_ipc_call_sync_slow(sysarg_t phoneid, ipc_data_t *request,
     603unative_t sys_ipc_call_sync_slow(unative_t phoneid, ipc_data_t *question,
    607604    ipc_data_t *reply)
    608605{
     
    610607        if (phone_get(phoneid, &phone) != EOK)
    611608                return ENOENT;
    612        
     609
    613610        call_t *call = ipc_call_alloc(0);
    614         int rc = copy_from_uspace(&call->data.args, &request->args,
     611        int rc = copy_from_uspace(&call->data.args, &question->args,
    615612            sizeof(call->data.args));
    616613        if (rc != 0) {
    617614                ipc_call_free(call);
    618                 return (sysarg_t) rc;
     615                return (unative_t) rc;
    619616        }
    620617       
     
    647644}
    648645
    649 /** Check that the task did not exceed the allowed limit of asynchronous calls
    650  * made over a phone.
    651  *
    652  * @param phone Phone to check the limit against.
     646/** Check that the task did not exceed the allowed limit of asynchronous calls.
    653647 *
    654648 * @return 0 if limit not reached or -1 if limit exceeded.
    655649 *
    656650 */
    657 static int check_call_limit(phone_t *phone)
    658 {
    659         if (atomic_get(&phone->active_calls) >= IPC_MAX_ASYNC_CALLS)
     651static int check_call_limit(void)
     652{
     653        if (atomic_preinc(&TASK->active_calls) > IPC_MAX_ASYNC_CALLS) {
     654                atomic_dec(&TASK->active_calls);
    660655                return -1;
     656        }
    661657       
    662658        return 0;
     
    669665 *
    670666 * @param phoneid Phone handle for the call.
    671  * @param imethod Interface and method of the call.
     667 * @param method  Method of the call.
    672668 * @param arg1    Service-defined payload argument.
    673669 * @param arg2    Service-defined payload argument.
     
    681677 *
    682678 */
    683 sysarg_t sys_ipc_call_async_fast(sysarg_t phoneid, sysarg_t imethod,
    684     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
    685 {
     679unative_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       
    686685        phone_t *phone;
    687686        if (phone_get(phoneid, &phone) != EOK)
    688687                return IPC_CALLRET_FATAL;
    689688       
    690         if (check_call_limit(phone))
    691                 return IPC_CALLRET_TEMPORARY;
    692        
    693689        call_t *call = ipc_call_alloc(0);
    694         IPC_SET_IMETHOD(call->data, imethod);
     690        IPC_SET_METHOD(call->data, method);
    695691        IPC_SET_ARG1(call->data, arg1);
    696692        IPC_SET_ARG2(call->data, arg2);
     
    711707                ipc_backsend_err(phone, call, res);
    712708       
    713         return (sysarg_t) call;
     709        return (unative_t) call;
    714710}
    715711
     
    722718 *
    723719 */
    724 sysarg_t sys_ipc_call_async_slow(sysarg_t phoneid, ipc_data_t *data)
    725 {
     720unative_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       
    726725        phone_t *phone;
    727726        if (phone_get(phoneid, &phone) != EOK)
    728727                return IPC_CALLRET_FATAL;
    729 
    730         if (check_call_limit(phone))
    731                 return IPC_CALLRET_TEMPORARY;
    732728
    733729        call_t *call = ipc_call_alloc(0);
     
    736732        if (rc != 0) {
    737733                ipc_call_free(call);
    738                 return (sysarg_t) rc;
     734                return (unative_t) rc;
    739735        }
    740736       
     
    746742                ipc_backsend_err(phone, call, res);
    747743       
    748         return (sysarg_t) call;
     744        return (unative_t) call;
    749745}
    750746
     
    755751 * @param callid  Hash of the call to forward.
    756752 * @param phoneid Phone handle to use for forwarding.
    757  * @param imethod New interface and method to use for the forwarded call.
     753 * @param method  New method to use for the forwarded call.
    758754 * @param arg1    New value of the first argument for the forwarded call.
    759755 * @param arg2    New value of the second argument for the forwarded call.
     
    771767 *
    772768 */
    773 static sysarg_t sys_ipc_forward_common(sysarg_t callid, sysarg_t phoneid,
    774     sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, sysarg_t arg3,
    775     sysarg_t arg4, sysarg_t arg5, unsigned int mode, bool slow)
     769static 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)
    776772{
    777773        call_t *call = get_call(callid);
     
    788784        }
    789785       
    790         if (!method_is_forwardable(IPC_GET_IMETHOD(call->data))) {
     786        if (!method_is_forwardable(IPC_GET_METHOD(call->data))) {
    791787                IPC_SET_RETVAL(call->data, EFORWARD);
    792788                ipc_answer(&TASK->answerbox, call);
     
    795791       
    796792        /*
    797          * Userspace is not allowed to change interface and method of system
    798          * methods on forward, allow changing ARG1, ARG2, ARG3 and ARG4 by
    799          * means of method, arg1, arg2 and arg3.
    800          * If the interface and method 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.
    801797         */
    802         if (!method_is_immutable(IPC_GET_IMETHOD(call->data))) {
    803                 if (method_is_system(IPC_GET_IMETHOD(call->data))) {
    804                         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)
    805801                                phone_dealloc(IPC_GET_ARG5(call->data));
    806802                       
    807                         IPC_SET_ARG1(call->data, imethod);
     803                        IPC_SET_ARG1(call->data, method);
    808804                        IPC_SET_ARG2(call->data, arg1);
    809805                        IPC_SET_ARG3(call->data, arg2);
     
    817813                        }
    818814                } else {
    819                         IPC_SET_IMETHOD(call->data, imethod);
     815                        IPC_SET_METHOD(call->data, method);
    820816                        IPC_SET_ARG1(call->data, arg1);
    821817                        IPC_SET_ARG2(call->data, arg2);
     
    833829/** Forward a received call to another destination - fast version.
    834830 *
    835  * In case the original interface and method is a system method, ARG1, ARG2
    836  * and ARG3 are overwritten in the forwarded message with the new method and
    837  * the new arg1 and arg2, respectively. Otherwise the IMETHOD, ARG1 and ARG2
    838  * are rewritten with the new interface and method, arg1 and arg2, respectively.
    839  * Also note there is a set of immutable methods, for which the new method and
    840  * arguments are not set 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.
    841837 *
    842838 * @param callid  Hash of the call to forward.
    843839 * @param phoneid Phone handle to use for forwarding.
    844  * @param imethod New interface and method to use for the forwarded call.
     840 * @param method  New method to use for the forwarded call.
    845841 * @param arg1    New value of the first argument for the forwarded call.
    846842 * @param arg2    New value of the second argument for the forwarded call.
     
    850846 *
    851847 */
    852 sysarg_t sys_ipc_forward_fast(sysarg_t callid, sysarg_t phoneid,
    853     sysarg_t imethod, sysarg_t arg1, sysarg_t arg2, unsigned int mode)
    854 {
    855         return sys_ipc_forward_common(callid, phoneid, imethod, arg1, arg2, 0, 0,
     848unative_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,
    856852            0, mode, false);
    857853}
     
    860856 *
    861857 * This function is the slow verision of the sys_ipc_forward_fast interface.
    862  * It can copy all five new arguments and the new interface and method from
    863  * the userspace. It naturally extends the functionality of the fast version.
    864  * For system methods, it additionally stores the new value of arg3 to ARG4.
    865  * For non-system methods, it additionally stores the new value of arg3, arg4
    866  * 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.
    867863 *
    868864 * @param callid  Hash of the call to forward.
     
    874870 *
    875871 */
    876 sysarg_t sys_ipc_forward_slow(sysarg_t callid, sysarg_t phoneid,
     872unative_t sys_ipc_forward_slow(unative_t callid, unative_t phoneid,
    877873    ipc_data_t *data, unsigned int mode)
    878874{
     
    881877            sizeof(newdata.args));
    882878        if (rc != 0)
    883                 return (sysarg_t) rc;
     879                return (unative_t) rc;
    884880       
    885881        return sys_ipc_forward_common(callid, phoneid,
    886             IPC_GET_IMETHOD(newdata), IPC_GET_ARG1(newdata),
     882            IPC_GET_METHOD(newdata), IPC_GET_ARG1(newdata),
    887883            IPC_GET_ARG2(newdata), IPC_GET_ARG3(newdata),
    888884            IPC_GET_ARG4(newdata), IPC_GET_ARG5(newdata), mode, true);
     
    904900 *
    905901 */
    906 sysarg_t sys_ipc_answer_fast(sysarg_t callid, sysarg_t retval,
    907     sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
     902unative_t sys_ipc_answer_fast(unative_t callid, unative_t retval,
     903    unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4)
    908904{
    909905        /* Do not answer notification callids */
     
    949945 *
    950946 */
    951 sysarg_t sys_ipc_answer_slow(sysarg_t callid, ipc_data_t *data)
     947unative_t sys_ipc_answer_slow(unative_t callid, ipc_data_t *data)
    952948{
    953949        /* Do not answer notification callids */
     
    986982 *
    987983 */
    988 sysarg_t sys_ipc_hangup(sysarg_t phoneid)
     984unative_t sys_ipc_hangup(unative_t phoneid)
    989985{
    990986        phone_t *phone;
     
    10121008 *
    10131009 */
    1014 sysarg_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,
     1010unative_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,
    10151011    unsigned int flags)
    10161012{
     
    10411037                ipc_call_free(call);
    10421038               
    1043                 return ((sysarg_t) call) | IPC_CALLID_NOTIFICATION;
     1039                return ((unative_t) call) | IPC_CALLID_NOTIFICATION;
    10441040        }
    10451041       
     
    10501046                        ipc_call_free(call);
    10511047                        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);
    10521055                }
    10531056               
     
    10551058                ipc_call_free(call);
    10561059               
    1057                 return ((sysarg_t) call) | IPC_CALLID_ANSWERED;
     1060                return ((unative_t) call) | IPC_CALLID_ANSWERED;
    10581061        }
    10591062       
     
    10831086        }
    10841087       
    1085         return (sysarg_t) call;
     1088        return (unative_t) call;
    10861089}
    10871090
     
    10891092 *
    10901093 */
    1091 sysarg_t sys_ipc_poke(void)
     1094unative_t sys_ipc_poke(void)
    10921095{
    10931096        waitq_unsleep(&TASK->answerbox.wq);
     
    10971100/** Connect an IRQ handler to a task.
    10981101 *
    1099  * @param inr     IRQ number.
    1100  * @param devno   Device number.
    1101  * @param imethod Interface and method to be associated with the notification.
    1102  * @param ucode   Uspace pointer to the top-half pseudocode.
     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.
    11031106 *
    11041107 * @return EPERM or a return code returned by ipc_irq_register().
    11051108 *
    11061109 */
    1107 sysarg_t sys_register_irq(inr_t inr, devno_t devno, sysarg_t imethod,
     1110unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method,
    11081111    irq_code_t *ucode)
    11091112{
     
    11111114                return EPERM;
    11121115       
    1113         return ipc_irq_register(&TASK->answerbox, inr, devno, imethod, ucode);
     1116        return ipc_irq_register(&TASK->answerbox, inr, devno, method, ucode);
    11141117}
    11151118
     
    11221125 *
    11231126 */
    1124 sysarg_t sys_unregister_irq(inr_t inr, devno_t devno)
     1127unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno)
    11251128{
    11261129        if (!(cap_get(TASK) & CAP_IRQ_REG))
     
    11321135}
    11331136
    1134 #ifdef __32_BITS__
    1135 
    1136 /** Syscall connect to a task by ID (32 bits)
     1137#include <console/console.h>
     1138
     1139/** Syscall connect to a task by id.
    11371140 *
    11381141 * @return Phone id on success, or negative error code.
    11391142 *
    11401143 */
    1141 sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid)
     1144unative_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid_arg)
    11421145{
    11431146#ifdef CONFIG_UDEBUG
    1144         sysarg64_t taskid;
    1145         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));
    11461149        if (rc != 0)
    1147                 return (sysarg_t) rc;
    1148        
    1149         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);
    11501155#else
    1151         return (sysarg_t) ENOTSUP;
     1156        return (unative_t) ENOTSUP;
    11521157#endif
    11531158}
    11541159
    1155 #endif  /* __32_BITS__ */
    1156 
    1157 #ifdef __64_BITS__
    1158 
    1159 /** Syscall connect to a task by ID (64 bits)
    1160  *
    1161  * @return Phone id on success, or negative error code.
    1162  *
    1163  */
    1164 sysarg_t sys_ipc_connect_kbox(sysarg_t taskid)
    1165 {
    1166 #ifdef CONFIG_UDEBUG
    1167         return ipc_connect_kbox((task_id_t) taskid);
    1168 #else
    1169         return (sysarg_t) ENOTSUP;
    1170 #endif
    1171 }
    1172 
    1173 #endif  /* __64_BITS__ */
    1174 
    11751160/** @}
    11761161 */
Note: See TracChangeset for help on using the changeset viewer.