Ignore:
File:
1 edited

Legend:

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

    rfa3b8e4 r8add9ca5  
    4949#include <syscall/copy.h>
    5050#include <security/cap.h>
     51#include <console/console.h>
    5152#include <mm/as.h>
    5253#include <print.h>
     
    6869 *
    6970 */
    70 static int phone_get(unative_t phoneid, phone_t **phone)
     71static int phone_get(sysarg_t phoneid, phone_t **phone)
    7172{
    7273        if (phoneid >= IPC_MAX_PHONES)
     
    7778}
    7879
    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)
     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 */
     88static inline bool method_is_system(sysarg_t imethod)
     89{
     90        if (imethod <= IPC_M_LAST_SYSTEM)
    8991                return true;
    9092       
     
    9294}
    9395
    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) {
     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 */
     106static inline bool method_is_forwardable(sysarg_t imethod)
     107{
     108        switch (imethod) {
    107109        case IPC_M_CONNECTION_CLONE:
    108110        case IPC_M_CONNECT_ME:
     
    115117}
    116118
    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) {
     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 */
     128static inline bool method_is_immutable(sysarg_t imethod)
     129{
     130        switch (imethod) {
    129131        case IPC_M_SHARE_OUT:
    130132        case IPC_M_SHARE_IN:
     
    152154static inline bool answer_need_old(call_t *call)
    153155{
    154         switch (IPC_GET_METHOD(call->data)) {
     156        switch (IPC_GET_IMETHOD(call->data)) {
    155157        case IPC_M_CONNECTION_CLONE:
    156158        case IPC_M_CONNECT_ME:
     
    196198                return 0;
    197199       
    198         if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECTION_CLONE) {
     200        if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECTION_CLONE) {
    199201                int phoneid = IPC_GET_ARG1(*olddata);
    200202                phone_t *phone = &TASK->phones[phoneid];
     
    218220                        mutex_unlock(&phone->lock);
    219221                }
    220         } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_ME) {
     222        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_ME) {
    221223                phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata);
    222224               
     
    237239                        mutex_unlock(&phone->lock);
    238240                }
    239         } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_TO_ME) {
     241        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_TO_ME) {
    240242                int phoneid = IPC_GET_ARG5(*olddata);
    241243               
     
    246248                        /* The connection was accepted */
    247249                        phone_connect(phoneid, &answer->sender->answerbox);
     250                        /* Set 'task hash' as arg4 of response */
     251                        IPC_SET_ARG4(answer->data, (sysarg_t) TASK);
    248252                        /* Set 'phone hash' as arg5 of response */
    249253                        IPC_SET_ARG5(answer->data,
    250                             (unative_t) &TASK->phones[phoneid]);
    251                 }
    252         } else if (IPC_GET_METHOD(*olddata) == IPC_M_CONNECT_ME_TO) {
     254                            (sysarg_t) &TASK->phones[phoneid]);
     255                }
     256        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_ME_TO) {
    253257                /* If the users accepted call, connect */
    254258                if (IPC_GET_RETVAL(answer->data) == EOK) {
     
    256260                            &TASK->answerbox);
    257261                }
    258         } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_OUT) {
     262        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_OUT) {
    259263                if (!IPC_GET_RETVAL(answer->data)) {
    260264                        /* Accepted, handle as_area receipt */
     
    270274                        return rc;
    271275                }
    272         } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_IN) {
     276        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_IN) {
    273277                if (!IPC_GET_RETVAL(answer->data)) {
    274278                        irq_spinlock_lock(&answer->sender->lock, true);
     
    281285                        IPC_SET_RETVAL(answer->data, rc);
    282286                }
    283         } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_READ) {
     287        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_DATA_READ) {
    284288                ASSERT(!answer->buffer);
    285289                if (!IPC_GET_RETVAL(answer->data)) {
     
    310314                        }
    311315                }
    312         } else if (IPC_GET_METHOD(*olddata) == IPC_M_DATA_WRITE) {
     316        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_DATA_WRITE) {
    313317                ASSERT(answer->buffer);
    314318                if (!IPC_GET_RETVAL(answer->data)) {
     
    363367static int request_preprocess(call_t *call, phone_t *phone)
    364368{
    365         switch (IPC_GET_METHOD(call->data)) {
     369        switch (IPC_GET_IMETHOD(call->data)) {
    366370        case IPC_M_CONNECTION_CLONE: {
    367371                phone_t *cloned_phone;
     
    399403        }
    400404        case IPC_M_CONNECT_ME:
    401                 IPC_SET_ARG5(call->data, (unative_t) phone);
     405                IPC_SET_ARG5(call->data, (sysarg_t) phone);
    402406                break;
    403407        case IPC_M_CONNECT_ME_TO: {
     
    407411               
    408412                /* Set arg5 for server */
    409                 IPC_SET_ARG5(call->data, (unative_t) &TASK->phones[newphid]);
     413                IPC_SET_ARG5(call->data, (sysarg_t) &TASK->phones[newphid]);
    410414                call->flags |= IPC_CALL_CONN_ME_TO;
    411415                call->priv = newphid;
     
    503507static int process_request(answerbox_t *box, call_t *call)
    504508{
    505         if (IPC_GET_METHOD(call->data) == IPC_M_CONNECT_TO_ME) {
     509        if (IPC_GET_IMETHOD(call->data) == IPC_M_CONNECT_TO_ME) {
    506510                int phoneid = phone_alloc(TASK);
    507511                if (phoneid < 0) { /* Failed to allocate phone */
     
    514518        }
    515519       
    516         switch (IPC_GET_METHOD(call->data)) {
     520        switch (IPC_GET_IMETHOD(call->data)) {
    517521        case IPC_M_DEBUG_ALL:
    518522                return -1;
     
    530534 *
    531535 * @param phoneid Phone handle for the call.
    532  * @param method  Method of the call.
     536 * @param imethod Interface and method of the call.
    533537 * @param arg1    Service-defined payload argument.
    534538 * @param arg2    Service-defined payload argument.
    535539 * @param arg3    Service-defined payload argument.
    536  * @param data    Address of userspace structure where the reply call will
     540 * @param data    Address of user-space structure where the reply call will
    537541 *                be stored.
    538542 *
     
    541545 *
    542546 */
    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)
     547sysarg_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)
    545549{
    546550        phone_t *phone;
    547551        if (phone_get(phoneid, &phone) != EOK)
    548552                return ENOENT;
    549 
     553       
    550554        call_t *call = ipc_call_alloc(0);
    551         IPC_SET_METHOD(call->data, method);
     555        IPC_SET_IMETHOD(call->data, imethod);
    552556        IPC_SET_ARG1(call->data, arg1);
    553557        IPC_SET_ARG2(call->data, arg2);
     
    579583               
    580584                process_answer(call);
    581                
    582585        } else
    583586                IPC_SET_RETVAL(call->data, res);
     
    593596/** Make a synchronous IPC call allowing to transmit the entire payload.
    594597 *
    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.
     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.
    599602 *
    600603 * @return Zero on success or an error code.
    601604 *
    602605 */
    603 unative_t sys_ipc_call_sync_slow(unative_t phoneid, ipc_data_t *question,
     606sysarg_t sys_ipc_call_sync_slow(sysarg_t phoneid, ipc_data_t *request,
    604607    ipc_data_t *reply)
    605608{
     
    607610        if (phone_get(phoneid, &phone) != EOK)
    608611                return ENOENT;
    609 
     612       
    610613        call_t *call = ipc_call_alloc(0);
    611         int rc = copy_from_uspace(&call->data.args, &question->args,
     614        int rc = copy_from_uspace(&call->data.args, &request->args,
    612615            sizeof(call->data.args));
    613616        if (rc != 0) {
    614617                ipc_call_free(call);
    615                 return (unative_t) rc;
     618                return (sysarg_t) rc;
    616619        }
    617620       
     
    644647}
    645648
    646 /** Check that the task did not exceed the allowed limit of asynchronous calls.
     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.
    647653 *
    648654 * @return 0 if limit not reached or -1 if limit exceeded.
    649655 *
    650656 */
    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);
     657static int check_call_limit(phone_t *phone)
     658{
     659        if (atomic_get(&phone->active_calls) >= IPC_MAX_ASYNC_CALLS)
    655660                return -1;
    656         }
    657661       
    658662        return 0;
     
    665669 *
    666670 * @param phoneid Phone handle for the call.
    667  * @param method  Method of the call.
     671 * @param imethod Interface and method of the call.
    668672 * @param arg1    Service-defined payload argument.
    669673 * @param arg2    Service-defined payload argument.
     
    677681 *
    678682 */
    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        
     683sysarg_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{
    685686        phone_t *phone;
    686687        if (phone_get(phoneid, &phone) != EOK)
    687688                return IPC_CALLRET_FATAL;
    688689       
     690        if (check_call_limit(phone))
     691                return IPC_CALLRET_TEMPORARY;
     692       
    689693        call_t *call = ipc_call_alloc(0);
    690         IPC_SET_METHOD(call->data, method);
     694        IPC_SET_IMETHOD(call->data, imethod);
    691695        IPC_SET_ARG1(call->data, arg1);
    692696        IPC_SET_ARG2(call->data, arg2);
     
    707711                ipc_backsend_err(phone, call, res);
    708712       
    709         return (unative_t) call;
     713        return (sysarg_t) call;
    710714}
    711715
     
    718722 *
    719723 */
    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        
     724sysarg_t sys_ipc_call_async_slow(sysarg_t phoneid, ipc_data_t *data)
     725{
    725726        phone_t *phone;
    726727        if (phone_get(phoneid, &phone) != EOK)
    727728                return IPC_CALLRET_FATAL;
     729
     730        if (check_call_limit(phone))
     731                return IPC_CALLRET_TEMPORARY;
    728732
    729733        call_t *call = ipc_call_alloc(0);
     
    732736        if (rc != 0) {
    733737                ipc_call_free(call);
    734                 return (unative_t) rc;
     738                return (sysarg_t) rc;
    735739        }
    736740       
     
    742746                ipc_backsend_err(phone, call, res);
    743747       
    744         return (unative_t) call;
     748        return (sysarg_t) call;
    745749}
    746750
     
    751755 * @param callid  Hash of the call to forward.
    752756 * @param phoneid Phone handle to use for forwarding.
    753  * @param method  New method to use for the forwarded call.
     757 * @param imethod New interface and method to use for the forwarded call.
    754758 * @param arg1    New value of the first argument for the forwarded call.
    755759 * @param arg2    New value of the second argument for the forwarded call.
     
    767771 *
    768772 */
    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)
     773static 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)
    772776{
    773777        call_t *call = get_call(callid);
     
    784788        }
    785789       
    786         if (!method_is_forwardable(IPC_GET_METHOD(call->data))) {
     790        if (!method_is_forwardable(IPC_GET_IMETHOD(call->data))) {
    787791                IPC_SET_RETVAL(call->data, EFORWARD);
    788792                ipc_answer(&TASK->answerbox, call);
     
    791795       
    792796        /*
    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.
     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.
    797801         */
    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)
     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)
    801805                                phone_dealloc(IPC_GET_ARG5(call->data));
    802806                       
    803                         IPC_SET_ARG1(call->data, method);
     807                        IPC_SET_ARG1(call->data, imethod);
    804808                        IPC_SET_ARG2(call->data, arg1);
    805809                        IPC_SET_ARG3(call->data, arg2);
     
    813817                        }
    814818                } else {
    815                         IPC_SET_METHOD(call->data, method);
     819                        IPC_SET_IMETHOD(call->data, imethod);
    816820                        IPC_SET_ARG1(call->data, arg1);
    817821                        IPC_SET_ARG2(call->data, arg2);
     
    829833/** Forward a received call to another destination - fast version.
    830834 *
    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.
     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.
    837841 *
    838842 * @param callid  Hash of the call to forward.
    839843 * @param phoneid Phone handle to use for forwarding.
    840  * @param method  New method to use for the forwarded call.
     844 * @param imethod New interface and method to use for the forwarded call.
    841845 * @param arg1    New value of the first argument for the forwarded call.
    842846 * @param arg2    New value of the second argument for the forwarded call.
     
    846850 *
    847851 */
    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,
     852sysarg_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,
    852856            0, mode, false);
    853857}
     
    856860 *
    857861 * This function is the slow verision of the sys_ipc_forward_fast interface.
    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.
     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.
    863867 *
    864868 * @param callid  Hash of the call to forward.
     
    870874 *
    871875 */
    872 unative_t sys_ipc_forward_slow(unative_t callid, unative_t phoneid,
     876sysarg_t sys_ipc_forward_slow(sysarg_t callid, sysarg_t phoneid,
    873877    ipc_data_t *data, unsigned int mode)
    874878{
     
    877881            sizeof(newdata.args));
    878882        if (rc != 0)
    879                 return (unative_t) rc;
     883                return (sysarg_t) rc;
    880884       
    881885        return sys_ipc_forward_common(callid, phoneid,
    882             IPC_GET_METHOD(newdata), IPC_GET_ARG1(newdata),
     886            IPC_GET_IMETHOD(newdata), IPC_GET_ARG1(newdata),
    883887            IPC_GET_ARG2(newdata), IPC_GET_ARG3(newdata),
    884888            IPC_GET_ARG4(newdata), IPC_GET_ARG5(newdata), mode, true);
     
    900904 *
    901905 */
    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)
     906sysarg_t sys_ipc_answer_fast(sysarg_t callid, sysarg_t retval,
     907    sysarg_t arg1, sysarg_t arg2, sysarg_t arg3, sysarg_t arg4)
    904908{
    905909        /* Do not answer notification callids */
     
    945949 *
    946950 */
    947 unative_t sys_ipc_answer_slow(unative_t callid, ipc_data_t *data)
     951sysarg_t sys_ipc_answer_slow(sysarg_t callid, ipc_data_t *data)
    948952{
    949953        /* Do not answer notification callids */
     
    982986 *
    983987 */
    984 unative_t sys_ipc_hangup(unative_t phoneid)
     988sysarg_t sys_ipc_hangup(sysarg_t phoneid)
    985989{
    986990        phone_t *phone;
     
    10081012 *
    10091013 */
    1010 unative_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,
     1014sysarg_t sys_ipc_wait_for_call(ipc_data_t *calldata, uint32_t usec,
    10111015    unsigned int flags)
    10121016{
     
    10371041                ipc_call_free(call);
    10381042               
    1039                 return ((unative_t) call) | IPC_CALLID_NOTIFICATION;
     1043                return ((sysarg_t) call) | IPC_CALLID_NOTIFICATION;
    10401044        }
    10411045       
     
    10461050                        ipc_call_free(call);
    10471051                        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);
    10551052                }
    10561053               
     
    10581055                ipc_call_free(call);
    10591056               
    1060                 return ((unative_t) call) | IPC_CALLID_ANSWERED;
     1057                return ((sysarg_t) call) | IPC_CALLID_ANSWERED;
    10611058        }
    10621059       
     
    10861083        }
    10871084       
    1088         return (unative_t) call;
     1085        return (sysarg_t) call;
    10891086}
    10901087
     
    10921089 *
    10931090 */
    1094 unative_t sys_ipc_poke(void)
     1091sysarg_t sys_ipc_poke(void)
    10951092{
    10961093        waitq_unsleep(&TASK->answerbox.wq);
     
    11001097/** Connect an IRQ handler to a task.
    11011098 *
    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.
     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.
    11061103 *
    11071104 * @return EPERM or a return code returned by ipc_irq_register().
    11081105 *
    11091106 */
    1110 unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method,
     1107sysarg_t sys_register_irq(inr_t inr, devno_t devno, sysarg_t imethod,
    11111108    irq_code_t *ucode)
    11121109{
     
    11141111                return EPERM;
    11151112       
    1116         return ipc_irq_register(&TASK->answerbox, inr, devno, method, ucode);
     1113        return ipc_irq_register(&TASK->answerbox, inr, devno, imethod, ucode);
    11171114}
    11181115
     
    11251122 *
    11261123 */
    1127 unative_t sys_ipc_unregister_irq(inr_t inr, devno_t devno)
     1124sysarg_t sys_unregister_irq(inr_t inr, devno_t devno)
    11281125{
    11291126        if (!(cap_get(TASK) & CAP_IRQ_REG))
     
    11351132}
    11361133
    1137 #include <console/console.h>
    1138 
    1139 /** Syscall connect to a task by id.
     1134#ifdef __32_BITS__
     1135
     1136/** Syscall connect to a task by ID (32 bits)
    11401137 *
    11411138 * @return Phone id on success, or negative error code.
    11421139 *
    11431140 */
    1144 unative_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid_arg)
     1141sysarg_t sys_ipc_connect_kbox(sysarg64_t *uspace_taskid)
    11451142{
    11461143#ifdef CONFIG_UDEBUG
    1147         sysarg64_t taskid_arg;
    1148         int rc = copy_from_uspace(&taskid_arg, uspace_taskid_arg, sizeof(sysarg64_t));
     1144        sysarg64_t taskid;
     1145        int rc = copy_from_uspace(&taskid, uspace_taskid, sizeof(sysarg64_t));
    11491146        if (rc != 0)
    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);
     1147                return (sysarg_t) rc;
     1148       
     1149        return ipc_connect_kbox((task_id_t) taskid);
    11551150#else
    1156         return (unative_t) ENOTSUP;
     1151        return (sysarg_t) ENOTSUP;
    11571152#endif
    11581153}
    11591154
     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 */
     1164sysarg_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
    11601175/** @}
    11611176 */
Note: See TracChangeset for help on using the changeset viewer.