Lines Matching refs:event

75 	struct sdei_event *event;  member
80 #define CROSSCALL_INIT(arg, event) (arg.event = event, \ argument
84 static inline int sdei_do_cross_call(void *fn, struct sdei_event * event) in sdei_do_cross_call() argument
88 CROSSCALL_INIT(arg, event); in sdei_do_cross_call()
193 static int sdei_api_event_get_info(u32 event, u32 info, u64 *result) in sdei_api_event_get_info() argument
195 return invoke_sdei_fn(SDEI_1_0_FN_SDEI_EVENT_GET_INFO, event, info, 0, in sdei_api_event_get_info()
205 struct sdei_event *event; in sdei_event_create() local
210 event = kzalloc(sizeof(*event), GFP_KERNEL); in sdei_event_create()
211 if (!event) in sdei_event_create()
214 INIT_LIST_HEAD(&event->list); in sdei_event_create()
215 event->event_num = event_num; in sdei_event_create()
220 kfree(event); in sdei_event_create()
223 event->priority = result; in sdei_event_create()
228 kfree(event); in sdei_event_create()
231 event->type = result; in sdei_event_create()
233 if (event->type == SDEI_EVENT_TYPE_SHARED) { in sdei_event_create()
236 kfree(event); in sdei_event_create()
241 reg->priority = event->priority; in sdei_event_create()
245 event->registered = reg; in sdei_event_create()
252 kfree(event); in sdei_event_create()
259 reg->event_num = event->event_num; in sdei_event_create()
260 reg->priority = event->priority; in sdei_event_create()
265 event->private_registered = regs; in sdei_event_create()
269 kfree(event->registered); in sdei_event_create()
270 kfree(event); in sdei_event_create()
271 event = ERR_PTR(-EBUSY); in sdei_event_create()
274 list_add(&event->list, &sdei_list); in sdei_event_create()
278 return event; in sdei_event_create()
281 static void sdei_event_destroy(struct sdei_event *event) in sdei_event_destroy() argument
286 list_del(&event->list); in sdei_event_destroy()
289 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_destroy()
290 kfree(event->registered); in sdei_event_destroy()
292 free_percpu(event->private_registered); in sdei_event_destroy()
294 kfree(event); in sdei_event_destroy()
396 err = sdei_api_event_enable(arg->event->event_num); in _local_event_enable()
404 struct sdei_event *event; in sdei_event_enable() local
407 event = sdei_event_find(event_num); in sdei_event_enable()
408 if (!event) { in sdei_event_enable()
414 event->reenable = true; in sdei_event_enable()
417 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_enable()
418 err = sdei_api_event_enable(event->event_num); in sdei_event_enable()
420 err = sdei_do_cross_call(_local_event_enable, event); in sdei_event_enable()
438 err = sdei_api_event_disable(arg->event->event_num); in _ipi_event_disable()
446 struct sdei_event *event; in sdei_event_disable() local
449 event = sdei_event_find(event_num); in sdei_event_disable()
450 if (!event) { in sdei_event_disable()
456 event->reenable = false; in sdei_event_disable()
459 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_event_disable()
460 err = sdei_api_event_disable(event->event_num); in sdei_event_disable()
462 err = sdei_do_cross_call(_ipi_event_disable, event); in sdei_event_disable()
483 err = sdei_api_event_unregister(arg->event->event_num); in _local_event_unregister()
488 static int _sdei_event_unregister(struct sdei_event *event) in _sdei_event_unregister() argument
493 event->reregister = false; in _sdei_event_unregister()
494 event->reenable = false; in _sdei_event_unregister()
497 if (event->type == SDEI_EVENT_TYPE_SHARED) in _sdei_event_unregister()
498 return sdei_api_event_unregister(event->event_num); in _sdei_event_unregister()
500 return sdei_do_cross_call(_local_event_unregister, event); in _sdei_event_unregister()
506 struct sdei_event *event; in sdei_event_unregister() local
511 event = sdei_event_find(event_num); in sdei_event_unregister()
513 if (!event) { in sdei_event_unregister()
519 err = _sdei_event_unregister(event); in sdei_event_unregister()
523 sdei_event_destroy(event); in sdei_event_unregister()
538 struct sdei_event *event; in sdei_unregister_shared() local
542 list_for_each_entry(event, &sdei_list, list) { in sdei_unregister_shared()
543 if (event->type != SDEI_EVENT_TYPE_SHARED) in sdei_unregister_shared()
546 err = _sdei_event_unregister(event); in sdei_unregister_shared()
573 reg = per_cpu_ptr(arg->event->private_registered, smp_processor_id()); in _local_event_register()
574 err = sdei_api_event_register(arg->event->event_num, sdei_entry_point, in _local_event_register()
580 static int _sdei_event_register(struct sdei_event *event) in _sdei_event_register() argument
587 event->reregister = true; in _sdei_event_register()
590 if (event->type == SDEI_EVENT_TYPE_SHARED) in _sdei_event_register()
591 return sdei_api_event_register(event->event_num, in _sdei_event_register()
593 event->registered, in _sdei_event_register()
597 err = sdei_do_cross_call(_local_event_register, event); in _sdei_event_register()
600 event->reregister = false; in _sdei_event_register()
601 event->reenable = false; in _sdei_event_register()
604 sdei_do_cross_call(_local_event_unregister, event); in _sdei_event_register()
613 struct sdei_event *event; in sdei_event_register() local
625 event = sdei_event_create(event_num, cb, arg); in sdei_event_register()
626 if (IS_ERR(event)) { in sdei_event_register()
627 err = PTR_ERR(event); in sdei_event_register()
633 err = _sdei_event_register(event); in sdei_event_register()
635 sdei_event_destroy(event); in sdei_event_register()
646 static int sdei_reregister_event(struct sdei_event *event) in sdei_reregister_event() argument
652 err = _sdei_event_register(event); in sdei_reregister_event()
654 pr_err("Failed to re-register event %u\n", event->event_num); in sdei_reregister_event()
655 sdei_event_destroy(event); in sdei_reregister_event()
659 if (event->reenable) { in sdei_reregister_event()
660 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_reregister_event()
661 err = sdei_api_event_enable(event->event_num); in sdei_reregister_event()
663 err = sdei_do_cross_call(_local_event_enable, event); in sdei_reregister_event()
667 pr_err("Failed to re-enable event %u\n", event->event_num); in sdei_reregister_event()
675 struct sdei_event *event; in sdei_reregister_shared() local
679 list_for_each_entry(event, &sdei_list, list) { in sdei_reregister_shared()
680 if (event->type != SDEI_EVENT_TYPE_SHARED) in sdei_reregister_shared()
683 if (event->reregister) { in sdei_reregister_shared()
684 err = sdei_reregister_event(event); in sdei_reregister_shared()
697 struct sdei_event *event; in sdei_cpuhp_down() local
702 list_for_each_entry(event, &sdei_list, list) { in sdei_cpuhp_down()
703 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_cpuhp_down()
706 CROSSCALL_INIT(arg, event); in sdei_cpuhp_down()
711 event->event_num, arg.first_error); in sdei_cpuhp_down()
720 struct sdei_event *event; in sdei_cpuhp_up() local
725 list_for_each_entry(event, &sdei_list, list) { in sdei_cpuhp_up()
726 if (event->type == SDEI_EVENT_TYPE_SHARED) in sdei_cpuhp_up()
729 if (event->reregister) { in sdei_cpuhp_up()
730 CROSSCALL_INIT(arg, event); in sdei_cpuhp_up()
735 event->event_num, arg.first_error); in sdei_cpuhp_up()
738 if (event->reenable) { in sdei_cpuhp_up()
739 CROSSCALL_INIT(arg, event); in sdei_cpuhp_up()
743 event->event_num, arg.first_error); in sdei_cpuhp_up()