Ignore:
File:
1 edited

Legend:

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

    rab34cc9 r4e5dabf  
    111111        switch (imethod) {
    112112        case IPC_M_CONNECTION_CLONE:
    113         case IPC_M_CONNECT_ME:
     113        case IPC_M_CLONE_ESTABLISH:
    114114        case IPC_M_PHONE_HUNGUP:
    115115                /* This message is meant only for the original recipient. */
     
    160160        switch (IPC_GET_IMETHOD(call->data)) {
    161161        case IPC_M_CONNECTION_CLONE:
    162         case IPC_M_CONNECT_ME:
     162        case IPC_M_CLONE_ESTABLISH:
    163163        case IPC_M_CONNECT_TO_ME:
    164164        case IPC_M_CONNECT_ME_TO:
     
    225225                        mutex_unlock(&phone->lock);
    226226                }
    227         } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CONNECT_ME) {
     227        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CLONE_ESTABLISH) {
    228228                phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata);
    229229               
     
    271271                        irq_spinlock_unlock(&answer->sender->lock, true);
    272272                       
     273                        uintptr_t dst_base = (uintptr_t) -1;
    273274                        int rc = as_area_share(as, IPC_GET_ARG1(*olddata),
    274                             IPC_GET_ARG2(*olddata), AS,
    275                             IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
     275                            IPC_GET_ARG2(*olddata), AS, IPC_GET_ARG3(*olddata),
     276                            &dst_base, IPC_GET_ARG1(answer->data));
     277                       
     278                        if (rc == EOK)
     279                                rc = copy_to_uspace((void *) IPC_GET_ARG2(answer->data),
     280                                    &dst_base, sizeof(dst_base));
     281                       
    276282                        IPC_SET_RETVAL(answer->data, rc);
    277283                        return rc;
    278284                }
    279285        } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_IN) {
    280                 if (!IPC_GET_RETVAL(answer->data)) { 
     286                if (!IPC_GET_RETVAL(answer->data)) {
    281287                        irq_spinlock_lock(&answer->sender->lock, true);
    282288                        as_t *as = answer->sender->as;
    283289                        irq_spinlock_unlock(&answer->sender->lock, true);
    284290                       
     291                        uintptr_t dst_base = (uintptr_t) -1;
    285292                        int rc = as_area_share(AS, IPC_GET_ARG1(answer->data),
    286                             IPC_GET_ARG2(*olddata), as, IPC_GET_ARG1(*olddata),
    287                             IPC_GET_ARG2(answer->data));
     293                            IPC_GET_ARG1(*olddata), as, IPC_GET_ARG2(answer->data),
     294                            &dst_base, IPC_GET_ARG3(answer->data));
     295                        IPC_SET_ARG4(answer->data, dst_base);
    288296                        IPC_SET_RETVAL(answer->data, rc);
    289297                }
     
    451459                break;
    452460        }
    453         case IPC_M_CONNECT_ME:
     461        case IPC_M_CLONE_ESTABLISH:
    454462                IPC_SET_ARG5(call->data, (sysarg_t) phone);
    455463                break;
     
    589597        if (IPC_GET_IMETHOD(call->data) == IPC_M_CONNECT_TO_ME) {
    590598                int phoneid = phone_alloc(TASK);
    591                 if (phoneid < 0) { /* Failed to allocate phone */
     599                if (phoneid < 0) {  /* Failed to allocate phone */
    592600                        IPC_SET_RETVAL(call->data, ELIMIT);
    593601                        ipc_answer(box, call);
     
    875883       
    876884        /*
    877          * Userspace is not allowed to change interface and method of system
     885         * User space is not allowed to change interface and method of system
    878886         * methods on forward, allow changing ARG1, ARG2, ARG3 and ARG4 by
    879          * means of method, arg1, arg2 and arg3.
     887         * means of imethod, arg1, arg2 and arg3.
    880888         * If the interface and method is immutable, don't change anything.
    881889         */
     
    889897                        IPC_SET_ARG3(call->data, arg2);
    890898                       
    891                         if (slow) {
     899                        if (slow)
    892900                                IPC_SET_ARG4(call->data, arg3);
    893                                 /*
    894                                  * For system methods we deliberately don't
    895                                  * overwrite ARG5.
    896                                  */
    897                         }
     901                       
     902                        /*
     903                         * For system methods we deliberately don't
     904                         * overwrite ARG5.
     905                         */
    898906                } else {
    899907                        IPC_SET_IMETHOD(call->data, imethod);
     
    11851193 *
    11861194 */
    1187 sysarg_t sys_register_irq(inr_t inr, devno_t devno, sysarg_t imethod,
     1195sysarg_t sys_irq_register(inr_t inr, devno_t devno, sysarg_t imethod,
    11881196    irq_code_t *ucode)
    11891197{
     
    12021210 *
    12031211 */
    1204 sysarg_t sys_unregister_irq(inr_t inr, devno_t devno)
     1212sysarg_t sys_irq_unregister(inr_t inr, devno_t devno)
    12051213{
    12061214        if (!(cap_get(TASK) & CAP_IRQ_REG))
Note: See TracChangeset for help on using the changeset viewer.