Changeset 8e7c9fe in mainline for kernel/generic/src/ipc/event.c
- Timestamp:
- 2014-09-12T03:45:25Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c53b58e
- Parents:
- 3eb0c85 (diff), 105d8d6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/event.c
r3eb0c85 r8e7c9fe 58 58 } 59 59 60 static event_t *evno2event(int evno, task_t *t )60 static event_t *evno2event(int evno, task_t *task) 61 61 { 62 62 ASSERT(evno < EVENT_TASK_END); 63 63 64 64 event_t *event; 65 65 66 66 if (evno < EVENT_END) 67 67 event = &events[(event_type_t) evno]; 68 68 else 69 event = &t ->events[(event_task_type_t) evno - EVENT_END];70 69 event = &task->events[(event_task_type_t) evno - EVENT_END]; 70 71 71 return event; 72 72 } … … 86 86 event_initialize(evno2event(i, task)); 87 87 } 88 89 88 90 89 /** Unsubscribe kernel events associated with an answerbox … … 260 259 { 261 260 int res; 262 261 263 262 spinlock_lock(&event->lock); 264 263 … … 277 276 } 278 277 278 /** Unsubscribe event notifications 279 * 280 * @param evno Event type. 281 * @param answerbox Answerbox used to send the notifications to. 282 * 283 * @return EOK if the subscription was successful. 284 * @return EEXISTS if the notifications of the given type are 285 * already subscribed. 286 * 287 */ 288 static int event_unsubscribe(event_t *event, answerbox_t *answerbox) 289 { 290 int res; 291 292 spinlock_lock(&event->lock); 293 294 if (event->answerbox == answerbox) { 295 event->answerbox = NULL; 296 event->counter = 0; 297 event->imethod = 0; 298 event->masked = false; 299 res = EOK; 300 } else 301 res = ENOENT; 302 303 spinlock_unlock(&event->lock); 304 305 return res; 306 } 307 279 308 /** Unmask event notifications 280 309 * … … 297 326 } 298 327 299 /** Event notification s yscall wrapper328 /** Event notification subscription syscall wrapper 300 329 * 301 330 * @param evno Event type to subscribe. … … 309 338 * 310 339 */ 311 sysarg_t sys_ event_subscribe(sysarg_t evno, sysarg_t imethod)340 sysarg_t sys_ipc_event_subscribe(sysarg_t evno, sysarg_t imethod) 312 341 { 313 342 if (evno >= EVENT_TASK_END) … … 316 345 return (sysarg_t) event_subscribe(evno2event(evno, TASK), 317 346 (sysarg_t) imethod, &TASK->answerbox); 347 } 348 349 /** Event notification unsubscription syscall wrapper 350 * 351 * @param evno Event type to unsubscribe. 352 * 353 * @return EOK on success. 354 * @return ELIMIT on unknown event type. 355 * @return ENOENT if the notification of the given type is not 356 subscribed. 357 * 358 */ 359 sysarg_t sys_ipc_event_unsubscribe(sysarg_t evno) 360 { 361 if (evno >= EVENT_TASK_END) 362 return ELIMIT; 363 364 return (sysarg_t) event_unsubscribe(evno2event(evno, TASK), 365 &TASK->answerbox); 318 366 } 319 367 … … 331 379 * 332 380 */ 333 sysarg_t sys_ event_unmask(sysarg_t evno)381 sysarg_t sys_ipc_event_unmask(sysarg_t evno) 334 382 { 335 383 if (evno >= EVENT_TASK_END)
Note:
See TracChangeset
for help on using the changeset viewer.