Changeset 631ca4d in mainline for generic/src
- Timestamp:
- 2006-03-13T20:51:35Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5c089c3a
- Parents:
- 25d7709
- Location:
- generic/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/src/ipc/ipc.c
r25d7709 r631ca4d 106 106 } 107 107 108 109 /** Send a request using phone to answerbox 108 /** Helper function to facilitate synchronous calls */ 109 void ipc_call_sync(phone_t *phone, call_t *request) 110 { 111 answerbox_t sync_box; 112 113 ipc_answerbox_init(&sync_box); 114 115 /* We will receive data on special box */ 116 request->callerbox = &sync_box; 117 118 ipc_call(phone, request); 119 ipc_wait_for_call(&sync_box, 0); 120 } 121 122 /** Send a asynchronous request using phone to answerbox 110 123 * 111 124 * @param phone Phone connected to answerbox … … 200 213 printf("Received phone call - %P %P\n", 201 214 call->data[0], call->data[1]); 215 call->data[0] = 0xbabaaaee;; 216 call->data[1] = 0xaaaaeeee; 202 217 ipc_answer(&TASK->answerbox, call); 203 218 printf("Call answered.\n"); -
generic/src/syscall/syscall.c
r25d7709 r631ca4d 56 56 } 57 57 58 /** Send a call over syscall58 /** Send a call over IPC, wait for reply, return to user 59 59 * 60 60 * @return Call identification, returns -1 on fatal error, 61 61 -2 on 'Too many async request, handle answers first 62 62 */ 63 static __native sys_ipc_call(__native phoneid, __native arg1, __native arg2) 63 static __native sys_ipc_call_sync(__native phoneid, __native arg1, 64 __native arg2, __native *respdata) 65 { 66 call_t *call; 67 phone_t *phone; 68 /* Special answerbox for synchronous messages */ 69 70 if (phoneid >= IPC_MAX_PHONES) 71 return -ENOENT; 72 73 phone = &TASK->phones[phoneid]; 74 if (!phone->callee) 75 return -ENOENT; 76 77 call = ipc_call_alloc(); 78 call->data[0] = arg1; 79 call->data[1] = arg2; 80 81 ipc_call_sync(phone, call); 82 83 copy_to_uspace(respdata, &call->data, sizeof(__native) * IPC_CALL_LEN); 84 85 return 0; 86 } 87 88 /** Send an asynchronous call over ipc 89 * 90 * @return Call identification, returns -1 on fatal error, 91 -2 on 'Too many async request, handle answers first 92 */ 93 static __native sys_ipc_call_async(__native phoneid, __native arg1, 94 __native arg2) 64 95 { 65 96 call_t *call; … … 125 156 sys_ctl, 126 157 sys_io, 127 sys_ipc_call, 158 sys_ipc_call_sync, 159 sys_ipc_call_async, 128 160 sys_ipc_answer, 129 161 sys_ipc_wait_for_call
Note:
See TracChangeset
for help on using the changeset viewer.