Changeset eb13ef8 in mainline for kernel/generic/src/ipc/ops
- Timestamp:
- 2019-02-06T13:25:12Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- fafb8e5
- Parents:
- bb97118
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2019-02-02 14:04:02)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2019-02-06 13:25:12)
- Location:
- kernel/generic/src/ipc/ops
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/ops/conctmeto.c
rbb97118 reb13ef8 59 59 60 60 /* Remember the handle */ 61 IPC_SET_ARG5( call->data, (sysarg_t) phandle);61 IPC_SET_ARG5(&call->data, (sysarg_t) phandle); 62 62 63 63 return EOK; … … 66 66 static errno_t request_forget(call_t *call) 67 67 { 68 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5( call->data);68 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(&call->data); 69 69 70 70 if (cap_handle_raw(phandle) < 0) … … 88 88 89 89 /* Set the recipient-assigned label */ 90 pobj->phone->label = IPC_GET_ARG5( answer->data);90 pobj->phone->label = IPC_GET_ARG5(&answer->data); 91 91 92 92 /* Restore phone handle in answer's ARG5 */ 93 IPC_SET_ARG5( answer->data, IPC_GET_ARG5(*olddata));93 IPC_SET_ARG5(&answer->data, IPC_GET_ARG5(olddata)); 94 94 95 95 /* If the user accepted the call, connect */ 96 if (IPC_GET_RETVAL( answer->data) == EOK) {96 if (IPC_GET_RETVAL(&answer->data) == EOK) { 97 97 /* Hand over reference from pobj to the answerbox */ 98 98 (void) ipc_phone_connect(pobj->phone, &TASK->answerbox); … … 107 107 static errno_t answer_process(call_t *answer) 108 108 { 109 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5( answer->data);109 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(&answer->data); 110 110 /* Move the reference from answer->priv to pobj */ 111 111 kobject_t *pobj = (kobject_t *) answer->priv; 112 112 answer->priv = 0; 113 113 114 if (IPC_GET_RETVAL( answer->data)) {114 if (IPC_GET_RETVAL(&answer->data)) { 115 115 if (cap_handle_raw(phandle) >= 0) { 116 116 /* -
kernel/generic/src/ipc/ops/concttome.c
rbb97118 reb13ef8 49 49 * Set the sender-assigned label to the new phone. 50 50 */ 51 pobj->phone->label = IPC_GET_ARG5( call->data);51 pobj->phone->label = IPC_GET_ARG5(&call->data); 52 52 } 53 53 call->priv = (sysarg_t) pobj; 54 IPC_SET_ARG5( call->data, cap_handle_raw(phandle));54 IPC_SET_ARG5(&call->data, cap_handle_raw(phandle)); 55 55 return 0; 56 56 } … … 58 58 static errno_t answer_cleanup(call_t *answer, ipc_data_t *olddata) 59 59 { 60 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5( *olddata);60 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(olddata); 61 61 kobject_t *pobj = (kobject_t *) answer->priv; 62 62 … … 71 71 static errno_t answer_preprocess(call_t *answer, ipc_data_t *olddata) 72 72 { 73 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5( *olddata);73 cap_phone_handle_t phandle = (cap_handle_t) IPC_GET_ARG5(olddata); 74 74 kobject_t *pobj = (kobject_t *) answer->priv; 75 75 76 if (IPC_GET_RETVAL( answer->data) != EOK) {76 if (IPC_GET_RETVAL(&answer->data) != EOK) { 77 77 /* The connection was not accepted */ 78 78 answer_cleanup(answer, olddata); … … 94 94 } else { 95 95 /* The answerbox is shutting down. */ 96 IPC_SET_RETVAL( answer->data, ENOENT);96 IPC_SET_RETVAL(&answer->data, ENOENT); 97 97 answer_cleanup(answer, olddata); 98 98 } 99 99 } else { 100 IPC_SET_RETVAL( answer->data, ELIMIT);100 IPC_SET_RETVAL(&answer->data, ELIMIT); 101 101 } 102 102 -
kernel/generic/src/ipc/ops/dataread.c
rbb97118 reb13ef8 43 43 static errno_t request_preprocess(call_t *call, phone_t *phone) 44 44 { 45 size_t size = IPC_GET_ARG2( call->data);45 size_t size = IPC_GET_ARG2(&call->data); 46 46 47 47 if (size > DATA_XFER_LIMIT) { 48 int flags = IPC_GET_ARG3( call->data);48 int flags = IPC_GET_ARG3(&call->data); 49 49 50 50 if (flags & IPC_XF_RESTRICT) 51 IPC_SET_ARG2( call->data, DATA_XFER_LIMIT);51 IPC_SET_ARG2(&call->data, DATA_XFER_LIMIT); 52 52 else 53 53 return ELIMIT; … … 61 61 assert(!answer->buffer); 62 62 63 if (!IPC_GET_RETVAL( answer->data)) {63 if (!IPC_GET_RETVAL(&answer->data)) { 64 64 /* The recipient agreed to send data. */ 65 uintptr_t src = IPC_GET_ARG1( answer->data);66 uintptr_t dst = IPC_GET_ARG1( *olddata);67 size_t max_size = IPC_GET_ARG2( *olddata);68 size_t size = IPC_GET_ARG2( answer->data);65 uintptr_t src = IPC_GET_ARG1(&answer->data); 66 uintptr_t dst = IPC_GET_ARG1(olddata); 67 size_t max_size = IPC_GET_ARG2(olddata); 68 size_t size = IPC_GET_ARG2(&answer->data); 69 69 70 70 if (size && size <= max_size) { … … 73 73 * information is not lost. 74 74 */ 75 IPC_SET_ARG1( answer->data, dst);75 IPC_SET_ARG1(&answer->data, dst); 76 76 77 77 answer->buffer = malloc(size); 78 78 if (!answer->buffer) { 79 IPC_SET_RETVAL( answer->data, ENOMEM);79 IPC_SET_RETVAL(&answer->data, ENOMEM); 80 80 return EOK; 81 81 } … … 83 83 (void *) src, size); 84 84 if (rc) { 85 IPC_SET_RETVAL( answer->data, rc);85 IPC_SET_RETVAL(&answer->data, rc); 86 86 /* 87 87 * answer->buffer will be cleaned up in … … 91 91 } 92 92 } else if (!size) { 93 IPC_SET_RETVAL( answer->data, EOK);93 IPC_SET_RETVAL(&answer->data, EOK); 94 94 } else { 95 IPC_SET_RETVAL( answer->data, ELIMIT);95 IPC_SET_RETVAL(&answer->data, ELIMIT); 96 96 } 97 97 } … … 103 103 { 104 104 if (answer->buffer) { 105 uintptr_t dst = IPC_GET_ARG1( answer->data);106 size_t size = IPC_GET_ARG2( answer->data);105 uintptr_t dst = IPC_GET_ARG1(&answer->data); 106 size_t size = IPC_GET_ARG2(&answer->data); 107 107 errno_t rc; 108 108 109 109 rc = copy_to_uspace((void *) dst, answer->buffer, size); 110 110 if (rc) 111 IPC_SET_RETVAL( answer->data, rc);111 IPC_SET_RETVAL(&answer->data, rc); 112 112 } 113 113 -
kernel/generic/src/ipc/ops/datawrite.c
rbb97118 reb13ef8 43 43 static errno_t request_preprocess(call_t *call, phone_t *phone) 44 44 { 45 uintptr_t src = IPC_GET_ARG1( call->data);46 size_t size = IPC_GET_ARG2( call->data);45 uintptr_t src = IPC_GET_ARG1(&call->data); 46 size_t size = IPC_GET_ARG2(&call->data); 47 47 48 48 if (size > DATA_XFER_LIMIT) { 49 int flags = IPC_GET_ARG3( call->data);49 int flags = IPC_GET_ARG3(&call->data); 50 50 51 51 if (flags & IPC_XF_RESTRICT) { 52 52 size = DATA_XFER_LIMIT; 53 IPC_SET_ARG2( call->data, size);53 IPC_SET_ARG2(&call->data, size); 54 54 } else 55 55 return ELIMIT; … … 75 75 assert(answer->buffer); 76 76 77 if (!IPC_GET_RETVAL( answer->data)) {77 if (!IPC_GET_RETVAL(&answer->data)) { 78 78 /* The recipient agreed to receive data. */ 79 uintptr_t dst = (uintptr_t)IPC_GET_ARG1( answer->data);80 size_t size = (size_t)IPC_GET_ARG2( answer->data);81 size_t max_size = (size_t)IPC_GET_ARG2( *olddata);79 uintptr_t dst = (uintptr_t)IPC_GET_ARG1(&answer->data); 80 size_t size = (size_t)IPC_GET_ARG2(&answer->data); 81 size_t max_size = (size_t)IPC_GET_ARG2(olddata); 82 82 83 83 if (size <= max_size) { … … 85 85 answer->buffer, size); 86 86 if (rc) 87 IPC_SET_RETVAL( answer->data, rc);87 IPC_SET_RETVAL(&answer->data, rc); 88 88 } else { 89 IPC_SET_RETVAL( answer->data, ELIMIT);89 IPC_SET_RETVAL(&answer->data, ELIMIT); 90 90 } 91 91 } -
kernel/generic/src/ipc/ops/debug.c
rbb97118 reb13ef8 47 47 { 48 48 if (answer->buffer) { 49 uintptr_t dst = IPC_GET_ARG1( answer->data);50 size_t size = IPC_GET_ARG2( answer->data);49 uintptr_t dst = IPC_GET_ARG1(&answer->data); 50 size_t size = IPC_GET_ARG2(&answer->data); 51 51 errno_t rc; 52 52 53 53 rc = copy_to_uspace((void *) dst, answer->buffer, size); 54 54 if (rc) 55 IPC_SET_RETVAL( answer->data, rc);55 IPC_SET_RETVAL(&answer->data, rc); 56 56 } 57 57 -
kernel/generic/src/ipc/ops/pagein.c
rbb97118 reb13ef8 68 68 return EOK; 69 69 70 if (!IPC_GET_RETVAL( answer->data)) {70 if (!IPC_GET_RETVAL(&answer->data)) { 71 71 72 72 pte_t pte; … … 74 74 75 75 page_table_lock(AS, true); 76 bool found = page_mapping_find(AS, IPC_GET_ARG1( answer->data),76 bool found = page_mapping_find(AS, IPC_GET_ARG1(&answer->data), 77 77 false, &pte); 78 78 if (found & PTE_PRESENT(&pte)) { … … 86 86 frame_reference_add(ADDR2PFN(frame)); 87 87 } 88 IPC_SET_ARG1( answer->data, frame);88 IPC_SET_ARG1(&answer->data, frame); 89 89 } else { 90 IPC_SET_RETVAL( answer->data, ENOENT);90 IPC_SET_RETVAL(&answer->data, ENOENT); 91 91 } 92 92 page_table_unlock(AS, true); -
kernel/generic/src/ipc/ops/sharein.c
rbb97118 reb13ef8 43 43 static errno_t answer_preprocess(call_t *answer, ipc_data_t *olddata) 44 44 { 45 if (!IPC_GET_RETVAL( answer->data)) {45 if (!IPC_GET_RETVAL(&answer->data)) { 46 46 irq_spinlock_lock(&answer->sender->lock, true); 47 47 as_t *as = answer->sender->as; … … 49 49 50 50 uintptr_t dst_base = (uintptr_t) -1; 51 errno_t rc = as_area_share(AS, IPC_GET_ARG1( answer->data),52 IPC_GET_ARG1( *olddata), as, IPC_GET_ARG2(answer->data),53 &dst_base, IPC_GET_ARG2( *olddata));54 IPC_SET_ARG5( answer->data, dst_base);55 IPC_SET_RETVAL( answer->data, rc);51 errno_t rc = as_area_share(AS, IPC_GET_ARG1(&answer->data), 52 IPC_GET_ARG1(olddata), as, IPC_GET_ARG2(&answer->data), 53 &dst_base, IPC_GET_ARG2(olddata)); 54 IPC_SET_ARG5(&answer->data, dst_base); 55 IPC_SET_RETVAL(&answer->data, rc); 56 56 } 57 57 -
kernel/generic/src/ipc/ops/shareout.c
rbb97118 reb13ef8 44 44 static errno_t request_preprocess(call_t *call, phone_t *phone) 45 45 { 46 size_t size = as_area_get_size(IPC_GET_ARG1( call->data));46 size_t size = as_area_get_size(IPC_GET_ARG1(&call->data)); 47 47 48 48 if (!size) 49 49 return EPERM; 50 IPC_SET_ARG2( call->data, size);50 IPC_SET_ARG2(&call->data, size); 51 51 52 52 return EOK; … … 57 57 errno_t rc = EOK; 58 58 59 if (!IPC_GET_RETVAL( answer->data)) {59 if (!IPC_GET_RETVAL(&answer->data)) { 60 60 /* Accepted, handle as_area receipt */ 61 61 … … 65 65 66 66 uintptr_t dst_base = (uintptr_t) -1; 67 rc = as_area_share(as, IPC_GET_ARG1( *olddata),68 IPC_GET_ARG2( *olddata), AS, IPC_GET_ARG3(*olddata),69 &dst_base, IPC_GET_ARG1( answer->data));67 rc = as_area_share(as, IPC_GET_ARG1(olddata), 68 IPC_GET_ARG2(olddata), AS, IPC_GET_ARG3(olddata), 69 &dst_base, IPC_GET_ARG1(&answer->data)); 70 70 71 71 if (rc == EOK) { 72 rc = copy_to_uspace((void *) IPC_GET_ARG2( answer->data),72 rc = copy_to_uspace((void *) IPC_GET_ARG2(&answer->data), 73 73 &dst_base, sizeof(dst_base)); 74 74 } 75 75 76 IPC_SET_RETVAL( answer->data, rc);76 IPC_SET_RETVAL(&answer->data, rc); 77 77 } 78 78 -
kernel/generic/src/ipc/ops/stchngath.c
rbb97118 reb13ef8 46 46 47 47 kobject_t *sender_obj = kobject_get(TASK, 48 (cap_handle_t) IPC_GET_ARG5( call->data), KOBJECT_TYPE_PHONE);48 (cap_handle_t) IPC_GET_ARG5(&call->data), KOBJECT_TYPE_PHONE); 49 49 if (!sender_obj) 50 50 return ENOENT; … … 62 62 63 63 /* Remember the third party task hash. */ 64 IPC_SET_ARG5( call->data, (sysarg_t) other_task_s);64 IPC_SET_ARG5(&call->data, (sysarg_t) other_task_s); 65 65 66 66 kobject_put(sender_obj); … … 72 72 errno_t rc = EOK; 73 73 74 if (!IPC_GET_RETVAL( answer->data)) {74 if (!IPC_GET_RETVAL(&answer->data)) { 75 75 /* The recipient authorized the change of state. */ 76 76 task_t *other_task_s; … … 78 78 79 79 kobject_t *recipient_obj = kobject_get(TASK, 80 (cap_handle_t) IPC_GET_ARG1( answer->data),80 (cap_handle_t) IPC_GET_ARG1(&answer->data), 81 81 KOBJECT_TYPE_PHONE); 82 82 if (!recipient_obj) { 83 IPC_SET_RETVAL( answer->data, ENOENT);83 IPC_SET_RETVAL(&answer->data, ENOENT); 84 84 return ENOENT; 85 85 } … … 88 88 if (recipient_obj->phone->state != IPC_PHONE_CONNECTED) { 89 89 mutex_unlock(&recipient_obj->phone->lock); 90 IPC_SET_RETVAL( answer->data, EINVAL);90 IPC_SET_RETVAL(&answer->data, EINVAL); 91 91 kobject_put(recipient_obj); 92 92 return EINVAL; … … 94 94 95 95 other_task_r = recipient_obj->phone->callee->task; 96 other_task_s = (task_t *) IPC_GET_ARG5( *olddata);96 other_task_s = (task_t *) IPC_GET_ARG5(olddata); 97 97 98 98 /* … … 101 101 */ 102 102 if (other_task_r != other_task_s) { 103 IPC_SET_RETVAL( answer->data, EINVAL);103 IPC_SET_RETVAL(&answer->data, EINVAL); 104 104 rc = EINVAL; 105 105 } else { 106 106 rc = event_task_notify_5(other_task_r, 107 107 EVENT_TASK_STATE_CHANGE, false, 108 IPC_GET_ARG1( *olddata),109 IPC_GET_ARG2( *olddata),110 IPC_GET_ARG3( *olddata),108 IPC_GET_ARG1(olddata), 109 IPC_GET_ARG2(olddata), 110 IPC_GET_ARG3(olddata), 111 111 LOWER32(olddata->task_id), 112 112 UPPER32(olddata->task_id)); 113 IPC_SET_RETVAL( answer->data, rc);113 IPC_SET_RETVAL(&answer->data, rc); 114 114 } 115 115
Note:
See TracChangeset
for help on using the changeset viewer.