Subversion Repositories HelenOS

Rev

Rev 2676 | Rev 2745 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2676 Rev 2677
Line 110... Line 110...
110
 *          Otherwise return 0.
110
 *          Otherwise return 0.
111
 */
111
 */
112
static inline int method_is_immutable(unative_t method)
112
static inline int method_is_immutable(unative_t method)
113
{
113
{
114
    switch (method) {
114
    switch (method) {
115
    case IPC_M_AS_AREA_SEND:
115
    case IPC_M_SHARE_OUT:
116
    case IPC_M_AS_AREA_RECV:
116
    case IPC_M_SHARE_IN:
117
    case IPC_M_DATA_WRITE:
117
    case IPC_M_DATA_WRITE:
118
    case IPC_M_DATA_READ:
118
    case IPC_M_DATA_READ:
119
        return 1;
119
        return 1;
120
        break;
120
        break;
121
    default:
121
    default:
Line 139... Line 139...
139
static inline int answer_need_old(call_t *call)
139
static inline int answer_need_old(call_t *call)
140
{
140
{
141
    switch (IPC_GET_METHOD(call->data)) {
141
    switch (IPC_GET_METHOD(call->data)) {
142
    case IPC_M_CONNECT_TO_ME:
142
    case IPC_M_CONNECT_TO_ME:
143
    case IPC_M_CONNECT_ME_TO:
143
    case IPC_M_CONNECT_ME_TO:
144
    case IPC_M_AS_AREA_SEND:
144
    case IPC_M_SHARE_OUT:
145
    case IPC_M_AS_AREA_RECV:
145
    case IPC_M_SHARE_IN:
146
    case IPC_M_DATA_WRITE:
146
    case IPC_M_DATA_WRITE:
147
    case IPC_M_DATA_READ:
147
    case IPC_M_DATA_READ:
148
        return 1;
148
        return 1;
149
    default:
149
    default:
150
        return 0;
150
        return 0;
Line 197... Line 197...
197
        /* If the users accepted call, connect */
197
        /* If the users accepted call, connect */
198
        if (!IPC_GET_RETVAL(answer->data)) {
198
        if (!IPC_GET_RETVAL(answer->data)) {
199
            ipc_phone_connect((phone_t *) IPC_GET_ARG5(*olddata),
199
            ipc_phone_connect((phone_t *) IPC_GET_ARG5(*olddata),
200
                &TASK->answerbox);
200
                &TASK->answerbox);
201
        }
201
        }
202
    } else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_SEND) {
202
    } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_OUT) {
203
        if (!IPC_GET_RETVAL(answer->data)) {
203
        if (!IPC_GET_RETVAL(answer->data)) {
204
            /* Accepted, handle as_area receipt */
204
            /* Accepted, handle as_area receipt */
205
            ipl_t ipl;
205
            ipl_t ipl;
206
            int rc;
206
            int rc;
207
            as_t *as;
207
            as_t *as;
Line 216... Line 216...
216
                IPC_GET_ARG2(*olddata), AS,
216
                IPC_GET_ARG2(*olddata), AS,
217
                IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
217
                IPC_GET_ARG1(answer->data), IPC_GET_ARG3(*olddata));
218
            IPC_SET_RETVAL(answer->data, rc);
218
            IPC_SET_RETVAL(answer->data, rc);
219
            return rc;
219
            return rc;
220
        }
220
        }
221
    } else if (IPC_GET_METHOD(*olddata) == IPC_M_AS_AREA_RECV) {
221
    } else if (IPC_GET_METHOD(*olddata) == IPC_M_SHARE_IN) {
222
        if (!IPC_GET_RETVAL(answer->data)) {
222
        if (!IPC_GET_RETVAL(answer->data)) {
223
            ipl_t ipl;
223
            ipl_t ipl;
224
            as_t *as;
224
            as_t *as;
225
            int rc;
225
            int rc;
226
           
226
           
Line 311... Line 311...
311
        /* Set arg5 for server */
311
        /* Set arg5 for server */
312
        IPC_SET_ARG5(call->data, (unative_t) &TASK->phones[newphid]);
312
        IPC_SET_ARG5(call->data, (unative_t) &TASK->phones[newphid]);
313
        call->flags |= IPC_CALL_CONN_ME_TO;
313
        call->flags |= IPC_CALL_CONN_ME_TO;
314
        call->priv = newphid;
314
        call->priv = newphid;
315
        break;
315
        break;
316
    case IPC_M_AS_AREA_SEND:
316
    case IPC_M_SHARE_OUT:
317
        size = as_area_get_size(IPC_GET_ARG1(call->data));
317
        size = as_area_get_size(IPC_GET_ARG1(call->data));
318
        if (!size)
318
        if (!size)
319
            return EPERM;
319
            return EPERM;
320
        IPC_SET_ARG2(call->data, size);
320
        IPC_SET_ARG2(call->data, size);
321
        break;
321
        break;