Rev 3536 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3536 | Rev 4377 | ||
---|---|---|---|
Line 45... | Line 45... | ||
45 | ipcarg_t args[IPC_CALL_LEN]; |
45 | ipcarg_t args[IPC_CALL_LEN]; |
46 | ipcarg_t in_phone_hash; |
46 | ipcarg_t in_phone_hash; |
47 | } ipc_call_t; |
47 | } ipc_call_t; |
48 | typedef sysarg_t ipc_callid_t; |
48 | typedef sysarg_t ipc_callid_t; |
49 | 49 | ||
50 | typedef void (* ipc_async_callback_t)(void *private, int retval, |
50 | typedef void (* ipc_async_callback_t)(void *, int, ipc_call_t *); |
51 | ipc_call_t *data); |
- | |
52 | 51 | ||
53 | /* |
52 | /* |
54 | * User-friendly wrappers for ipc_call_sync_fast() and ipc_call_sync_slow(). |
53 | * User-friendly wrappers for ipc_call_sync_fast() and ipc_call_sync_slow(). |
55 | * They are in the form ipc_call_sync_m_n(), where m denotes the number of |
54 | * They are in the form ipc_call_sync_m_n(), where m denotes the number of |
56 | * arguments of payload and n denotes number of return values. Whenever |
55 | * arguments of payload and n denotes number of return values. Whenever |
Line 171... | Line 170... | ||
171 | #define ipc_call_sync_5_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \ |
170 | #define ipc_call_sync_5_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, res1, \ |
172 | res2, res3, res4, res5) \ |
171 | res2, res3, res4, res5) \ |
173 | ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
172 | ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
174 | (arg4), (arg5), (res1), (res2), (res3), (res4), (res5)) |
173 | (arg4), (arg5), (res1), (res2), (res3), (res4), (res5)) |
175 | 174 | ||
176 | extern int ipc_call_sync_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
175 | extern int ipc_call_sync_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
177 | ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2, |
- | |
178 | ipcarg_t *result3, ipcarg_t *result4, ipcarg_t *result5); |
- | |
179 | - | ||
180 | extern int ipc_call_sync_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
- | |
181 | ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, |
176 | ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *); |
182 | ipcarg_t *result1, ipcarg_t *result2, ipcarg_t *result3, ipcarg_t *result4, |
- | |
183 | ipcarg_t *result5); |
- | |
184 | 177 | ||
- | 178 | extern int ipc_call_sync_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
|
- | 179 | ipcarg_t, ipcarg_t, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *, |
|
- | 180 | ipcarg_t *); |
|
- | 181 | ||
185 | extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags); |
182 | extern ipc_callid_t ipc_wait_cycle(ipc_call_t *, uint32_t, int); |
186 | extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec); |
183 | extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *, uint32_t); |
187 | static inline ipc_callid_t ipc_wait_for_call(ipc_call_t *data) |
184 | static inline ipc_callid_t ipc_wait_for_call(ipc_call_t *data) |
188 | { |
185 | { |
189 | return ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT); |
186 | return ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT); |
190 | } |
187 | } |
191 | extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *data); |
188 | extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *); |
192 | 189 | ||
193 | /* |
190 | /* |
194 | * User-friendly wrappers for ipc_answer_fast() and ipc_answer_slow(). |
191 | * User-friendly wrappers for ipc_answer_fast() and ipc_answer_slow(). |
195 | * They are in the form of ipc_answer_m(), where m is the number of return |
192 | * They are in the form of ipc_answer_m(), where m is the number of return |
196 | * arguments. The macros decide between the fast and the slow version according |
193 | * arguments. The macros decide between the fast and the slow version according |
Line 207... | Line 204... | ||
207 | #define ipc_answer_4(callid, retval, arg1, arg2, arg3, arg4) \ |
204 | #define ipc_answer_4(callid, retval, arg1, arg2, arg3, arg4) \ |
208 | ipc_answer_fast((callid), (retval), (arg1), (arg2), (arg3), (arg4)) |
205 | ipc_answer_fast((callid), (retval), (arg1), (arg2), (arg3), (arg4)) |
209 | #define ipc_answer_5(callid, retval, arg1, arg2, arg3, arg4, arg5) \ |
206 | #define ipc_answer_5(callid, retval, arg1, arg2, arg3, arg4, arg5) \ |
210 | ipc_answer_slow((callid), (retval), (arg1), (arg2), (arg3), (arg4), (arg5)) |
207 | ipc_answer_slow((callid), (retval), (arg1), (arg2), (arg3), (arg4), (arg5)) |
211 | 208 | ||
212 | extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, |
209 | extern ipcarg_t ipc_answer_fast(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t, |
213 | ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4); |
210 | ipcarg_t, ipcarg_t); |
214 | extern ipcarg_t ipc_answer_slow(ipc_callid_t callid, ipcarg_t retval, |
211 | extern ipcarg_t ipc_answer_slow(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t, |
215 | ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5); |
212 | ipcarg_t, ipcarg_t, ipcarg_t); |
216 | 213 | ||
217 | /* |
214 | /* |
218 | * User-friendly wrappers for ipc_call_async_fast() and ipc_call_async_slow(). |
215 | * User-friendly wrappers for ipc_call_async_fast() and ipc_call_async_slow(). |
219 | * They are in the form of ipc_call_async_m(), where m is the number of payload |
216 | * They are in the form of ipc_call_async_m(), where m is the number of payload |
220 | * arguments. The macros decide between the fast and the slow version according |
217 | * arguments. The macros decide between the fast and the slow version according |
221 | * to m. |
218 | * to m. |
222 | */ |
219 | */ |
223 | #define ipc_call_async_0(phoneid, method, private, callback, \ |
220 | #define ipc_call_async_0(phoneid, method, private, callback, can_preempt) \ |
224 | can_preempt) \ |
- | |
225 | ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \ |
221 | ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \ |
226 | (callback), (can_preempt)) |
222 | (callback), (can_preempt)) |
227 | #define ipc_call_async_1(phoneid, method, arg1, private, callback, \ |
223 | #define ipc_call_async_1(phoneid, method, arg1, private, callback, \ |
228 | can_preempt) \ |
224 | can_preempt) \ |
229 | ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \ |
225 | ipc_call_async_fast((phoneid), (method), (arg1), 0, 0, 0, (private), \ |
Line 243... | Line 239... | ||
243 | #define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \ |
239 | #define ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, \ |
244 | private, callback, can_preempt) \ |
240 | private, callback, can_preempt) \ |
245 | ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
241 | ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
246 | (arg4), (arg5), (private), (callback), (can_preempt)) |
242 | (arg4), (arg5), (private), (callback), (can_preempt)) |
247 | 243 | ||
248 | extern void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
244 | extern void ipc_call_async_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
249 | ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private, |
245 | ipcarg_t, void *, ipc_async_callback_t, int); |
250 | ipc_async_callback_t callback, int can_preempt); |
- | |
251 | extern void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
246 | extern void ipc_call_async_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
252 | ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private, |
247 | ipcarg_t, ipcarg_t, void *, ipc_async_callback_t, int); |
- | 248 | ||
253 | ipc_async_callback_t callback, int can_preempt); |
249 | #define IPC_FLAG_BLOCKING 0x01 |
254 | 250 | ||
255 | extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, int arg3, |
251 | extern int ipc_connect_to_me(int, int, int, int, ipcarg_t *); |
256 | ipcarg_t *phone); |
252 | extern int ipc_connect_me_to(int, int, int, int); |
257 | extern int ipc_connect_me_to(int phoneid, int arg1, int arg2, int arg3); |
253 | extern int ipc_connect_me_to_blocking(int, int, int, int); |
258 | extern int ipc_hangup(int phoneid); |
254 | extern int ipc_hangup(int); |
259 | extern int ipc_register_irq(int inr, int devno, int method, irq_code_t *code); |
255 | extern int ipc_register_irq(int, int, int, irq_code_t *); |
260 | extern int ipc_unregister_irq(int inr, int devno); |
256 | extern int ipc_unregister_irq(int, int); |
261 | extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, |
257 | extern int ipc_forward_fast(ipc_callid_t, int, int, ipcarg_t, ipcarg_t, int); |
- | 258 | extern int ipc_forward_slow(ipc_callid_t, int, int, ipcarg_t, ipcarg_t, |
|
262 | ipcarg_t arg1, ipcarg_t arg2, int mode); |
259 | ipcarg_t, ipcarg_t, ipcarg_t, int); |
263 | 260 | ||
264 | 261 | ||
265 | /* |
262 | /* |
266 | * User-friendly wrappers for ipc_share_in_start(). |
263 | * User-friendly wrappers for ipc_share_in_start(). |
267 | */ |
264 | */ |
Line 272... | Line 269... | ||
272 | #define ipc_share_in_start_1_0(phoneid, dst, size, arg) \ |
269 | #define ipc_share_in_start_1_0(phoneid, dst, size, arg) \ |
273 | ipc_share_in_start((phoneid), (dst), (size), (arg), NULL) |
270 | ipc_share_in_start((phoneid), (dst), (size), (arg), NULL) |
274 | #define ipc_share_in_start_1_1(phoneid, dst, size, arg, flags) \ |
271 | #define ipc_share_in_start_1_1(phoneid, dst, size, arg, flags) \ |
275 | ipc_share_in_start((phoneid), (dst), (size), (arg), (flags)) |
272 | ipc_share_in_start((phoneid), (dst), (size), (arg), (flags)) |
276 | 273 | ||
277 | extern int ipc_share_in_start(int phoneid, void *dst, size_t size, ipcarg_t arg, |
274 | extern int ipc_share_in_start(int, void *, size_t, ipcarg_t, int *); |
278 | int *flags); |
- | |
279 | extern int ipc_share_in_receive(ipc_callid_t *callid, size_t *size); |
275 | extern int ipc_share_in_receive(ipc_callid_t *, size_t *); |
280 | extern int ipc_share_in_finalize(ipc_callid_t callid, void *src, int flags); |
276 | extern int ipc_share_in_finalize(ipc_callid_t, void *, int ); |
281 | extern int ipc_share_out_start(int phoneid, void *src, int flags); |
277 | extern int ipc_share_out_start(int, void *, int); |
282 | extern int ipc_share_out_receive(ipc_callid_t *callid, size_t *size, int *flags); |
278 | extern int ipc_share_out_receive(ipc_callid_t *, size_t *, int *); |
283 | extern int ipc_share_out_finalize(ipc_callid_t callid, void *dst); |
279 | extern int ipc_share_out_finalize(ipc_callid_t, void *); |
284 | extern int ipc_data_read_start(int phoneid, void *dst, size_t size); |
280 | extern int ipc_data_read_start(int, void *, size_t); |
285 | extern int ipc_data_read_receive(ipc_callid_t *callid, size_t *size); |
281 | extern int ipc_data_read_receive(ipc_callid_t *, size_t *); |
286 | extern int ipc_data_read_finalize(ipc_callid_t callid, const void *src, |
282 | extern int ipc_data_read_finalize(ipc_callid_t, const void *, size_t); |
287 | size_t size); |
- | |
288 | extern int ipc_data_write_start(int phoneid, const void *src, size_t size); |
283 | extern int ipc_data_write_start(int, const void *, size_t); |
289 | extern int ipc_data_write_receive(ipc_callid_t *callid, size_t *size); |
284 | extern int ipc_data_write_receive(ipc_callid_t *, size_t *); |
290 | extern int ipc_data_write_finalize(ipc_callid_t callid, void *dst, size_t size); |
285 | extern int ipc_data_write_finalize(ipc_callid_t, void *, size_t); |
291 | 286 | ||
292 | #include <task.h> |
287 | #include <task.h> |
293 | 288 | ||
294 | extern int ipc_connect_kbox(task_id_t id); |
289 | extern int ipc_connect_kbox(task_id_t); |
295 | 290 | ||
296 | #endif |
291 | #endif |
297 | 292 | ||
298 | /** @} |
293 | /** @} |
299 | */ |
294 | */ |