Changes in kernel/generic/src/ipc/sysipc.c [ab34cc9:4e5dabf] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
rab34cc9 r4e5dabf 111 111 switch (imethod) { 112 112 case IPC_M_CONNECTION_CLONE: 113 case IPC_M_C ONNECT_ME:113 case IPC_M_CLONE_ESTABLISH: 114 114 case IPC_M_PHONE_HUNGUP: 115 115 /* This message is meant only for the original recipient. */ … … 160 160 switch (IPC_GET_IMETHOD(call->data)) { 161 161 case IPC_M_CONNECTION_CLONE: 162 case IPC_M_C ONNECT_ME:162 case IPC_M_CLONE_ESTABLISH: 163 163 case IPC_M_CONNECT_TO_ME: 164 164 case IPC_M_CONNECT_ME_TO: … … 225 225 mutex_unlock(&phone->lock); 226 226 } 227 } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_C ONNECT_ME) {227 } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_CLONE_ESTABLISH) { 228 228 phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata); 229 229 … … 271 271 irq_spinlock_unlock(&answer->sender->lock, true); 272 272 273 uintptr_t dst_base = (uintptr_t) -1; 273 274 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 276 282 IPC_SET_RETVAL(answer->data, rc); 277 283 return rc; 278 284 } 279 285 } else if (IPC_GET_IMETHOD(*olddata) == IPC_M_SHARE_IN) { 280 if (!IPC_GET_RETVAL(answer->data)) { 286 if (!IPC_GET_RETVAL(answer->data)) { 281 287 irq_spinlock_lock(&answer->sender->lock, true); 282 288 as_t *as = answer->sender->as; 283 289 irq_spinlock_unlock(&answer->sender->lock, true); 284 290 291 uintptr_t dst_base = (uintptr_t) -1; 285 292 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); 288 296 IPC_SET_RETVAL(answer->data, rc); 289 297 } … … 451 459 break; 452 460 } 453 case IPC_M_C ONNECT_ME:461 case IPC_M_CLONE_ESTABLISH: 454 462 IPC_SET_ARG5(call->data, (sysarg_t) phone); 455 463 break; … … 589 597 if (IPC_GET_IMETHOD(call->data) == IPC_M_CONNECT_TO_ME) { 590 598 int phoneid = phone_alloc(TASK); 591 if (phoneid < 0) { /* Failed to allocate phone */599 if (phoneid < 0) { /* Failed to allocate phone */ 592 600 IPC_SET_RETVAL(call->data, ELIMIT); 593 601 ipc_answer(box, call); … … 875 883 876 884 /* 877 * User space is not allowed to change interface and method of system885 * User space is not allowed to change interface and method of system 878 886 * 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. 880 888 * If the interface and method is immutable, don't change anything. 881 889 */ … … 889 897 IPC_SET_ARG3(call->data, arg2); 890 898 891 if (slow) {899 if (slow) 892 900 IPC_SET_ARG4(call->data, arg3); 893 /*894 * For system methods we deliberately don't895 * overwrite ARG5.896 */897 }901 902 /* 903 * For system methods we deliberately don't 904 * overwrite ARG5. 905 */ 898 906 } else { 899 907 IPC_SET_IMETHOD(call->data, imethod); … … 1185 1193 * 1186 1194 */ 1187 sysarg_t sys_ register_irq(inr_t inr, devno_t devno, sysarg_t imethod,1195 sysarg_t sys_irq_register(inr_t inr, devno_t devno, sysarg_t imethod, 1188 1196 irq_code_t *ucode) 1189 1197 { … … 1202 1210 * 1203 1211 */ 1204 sysarg_t sys_ unregister_irq(inr_t inr, devno_t devno)1212 sysarg_t sys_irq_unregister(inr_t inr, devno_t devno) 1205 1213 { 1206 1214 if (!(cap_get(TASK) & CAP_IRQ_REG))
Note:
See TracChangeset
for help on using the changeset viewer.