Lines Matching refs:timer_params
78 wl_func_lock_eq(struct wl_timer_params *timer_params) in wl_func_lock_eq() argument
82 spin_lock_irqsave(&timer_params->eq_lock, flags); in wl_func_lock_eq()
87 wl_func_unlock_eq(struct wl_timer_params *timer_params, unsigned long flags) in wl_func_unlock_eq() argument
89 spin_unlock_irqrestore(&timer_params->eq_lock, flags); in wl_func_unlock_eq()
93 wl_func_init_eq_lock(struct wl_timer_params *timer_params) in wl_func_init_eq_lock() argument
95 spin_lock_init(&timer_params->eq_lock); in wl_func_init_eq_lock()
99 wl_func_init_eq(struct wl_timer_params *timer_params) in wl_func_init_eq() argument
101 wl_func_init_eq_lock(timer_params); in wl_func_init_eq()
102 INIT_LIST_HEAD(&timer_params->eq_list); in wl_func_init_eq()
106 wl_func_flush_eq(struct wl_timer_params *timer_params) in wl_func_flush_eq() argument
111 flags = wl_func_lock_eq(timer_params); in wl_func_flush_eq()
112 while (!list_empty_careful(&timer_params->eq_list)) { in wl_func_flush_eq()
113 BCM_SET_LIST_FIRST_ENTRY(e, &timer_params->eq_list, struct wl_func_q, eq_list); in wl_func_flush_eq()
117 wl_func_unlock_eq(timer_params, flags); in wl_func_flush_eq()
121 wl_func_deq(struct wl_timer_params *timer_params) in wl_func_deq() argument
126 flags = wl_func_lock_eq(timer_params); in wl_func_deq()
127 if (likely(!list_empty(&timer_params->eq_list))) { in wl_func_deq()
128 BCM_SET_LIST_FIRST_ENTRY(e, &timer_params->eq_list, struct wl_func_q, eq_list); in wl_func_deq()
131 wl_func_unlock_eq(timer_params, flags); in wl_func_deq()
137 wl_func_enq(struct wl_timer_params *timer_params, in wl_func_enq() argument
155 flags = wl_func_lock_eq(timer_params); in wl_func_enq()
156 list_add_tail(&e->eq_list, &timer_params->eq_list); in wl_func_enq()
157 wl_func_unlock_eq(timer_params, flags); in wl_func_enq()
178 struct wl_timer_params *timer_params = NULL; in WL_FUNC_HANDLER() local
185 timer_params = (struct wl_timer_params *)tsk->parent; in WL_FUNC_HANDLER()
187 BCM_SET_CONTAINER_OF(timer_params, data, struct wl_timer_params, func_work); in WL_FUNC_HANDLER()
190 dhd = timer_params->pub; in WL_FUNC_HANDLER()
200 while ((e = wl_func_deq(timer_params))) { in WL_FUNC_HANDLER()
225 struct wl_timer_params *timer_params = params; in wl_func_send() local
227 if (timer_params == NULL) { in wl_func_send()
233 if (timer_params->func_workq == NULL) { in wl_func_send()
239 if (likely(!wl_func_enq(timer_params, cb_func, cb_argu))) { in wl_func_send()
241 queue_work(timer_params->func_workq, &timer_params->func_work); in wl_func_send()
243 if (timer_params->thr_func_ctl.thr_pid >= 0) { in wl_func_send()
244 up(&timer_params->thr_func_ctl.sema); in wl_func_send()
251 wl_func_create_handler(struct wl_timer_params *timer_params) in wl_func_create_handler() argument
257 if (!timer_params->func_workq) { in wl_func_create_handler()
258 timer_params->func_workq = alloc_workqueue("timer_funcd", in wl_func_create_handler()
261 if (!timer_params->func_workq) { in wl_func_create_handler()
265 INIT_WORK(&timer_params->func_work, wl_func_handler); in wl_func_create_handler()
268 PROC_START(wl_func_handler, timer_params, &timer_params->thr_func_ctl, 0, "timer_funcd"); in wl_func_create_handler()
269 if (timer_params->thr_func_ctl.thr_pid < 0) { in wl_func_create_handler()
278 wl_func_destroy_handler(struct wl_timer_params *timer_params) in wl_func_destroy_handler() argument
281 if (timer_params && timer_params->func_workq) { in wl_func_destroy_handler()
282 cancel_work_sync(&timer_params->func_work); in wl_func_destroy_handler()
283 destroy_workqueue(timer_params->func_workq); in wl_func_destroy_handler()
284 timer_params->func_workq = NULL; in wl_func_destroy_handler()
287 if (timer_params->thr_func_ctl.thr_pid >= 0) { in wl_func_destroy_handler()
288 PROC_STOP(&timer_params->thr_func_ctl); in wl_func_destroy_handler()
303 struct wl_timer_params *timer_params = NULL; in WL_TIMER_HANDLER() local
310 timer_params = (struct wl_timer_params *)tsk->parent; in WL_TIMER_HANDLER()
312 BCM_SET_CONTAINER_OF(timer_params, data, struct wl_timer_params, timer_work); in WL_TIMER_HANDLER()
315 dhd = timer_params->pub; in WL_TIMER_HANDLER()
333 list_for_each_entry_safe(node, next, &timer_params->timer_list, list) { in WL_TIMER_HANDLER()
336 wl_func_send(timer_params, node->cb_func, node->cb_argu); in WL_TIMER_HANDLER()
348 mod_timer(&timer_params->timer, jiffies + min_jiffies); in WL_TIMER_HANDLER()
361 wl_timer_kick_handler(wl_timer_params_t *timer_params) in wl_timer_kick_handler() argument
363 if (timer_params == NULL) { in wl_timer_kick_handler()
369 if (timer_params->timer_workq == NULL) { in wl_timer_kick_handler()
373 queue_work(timer_params->timer_workq, &timer_params->timer_work); in wl_timer_kick_handler()
375 if (timer_params->thr_timer_ctl.thr_pid >= 0) { in wl_timer_kick_handler()
376 up(&timer_params->thr_timer_ctl.sema); in wl_timer_kick_handler()
384 struct wl_timer_params *timer_params = (struct wl_timer_params *)data; in wl_timer_timeout() local
386 if (!timer_params) { in wl_timer_timeout()
392 wl_timer_kick_handler(timer_params); in wl_timer_timeout()
396 wl_timer_create_handler(struct wl_timer_params *timer_params) in wl_timer_create_handler() argument
403 if (!timer_params->timer_workq) { in wl_timer_create_handler()
404 timer_params->timer_workq = alloc_workqueue("timerd", in wl_timer_create_handler()
407 if (!timer_params->timer_workq) { in wl_timer_create_handler()
411 INIT_WORK(&timer_params->timer_work, wl_timer_handler); in wl_timer_create_handler()
414 PROC_START(wl_timer_handler, timer_params, &timer_params->thr_timer_ctl, 0, "timerd"); in wl_timer_create_handler()
415 if (timer_params->thr_timer_ctl.thr_pid < 0) { in wl_timer_create_handler()
424 wl_timer_destroy_handler(struct wl_timer_params *timer_params) in wl_timer_destroy_handler() argument
427 if (timer_params && timer_params->timer_workq) { in wl_timer_destroy_handler()
428 cancel_work_sync(&timer_params->timer_work); in wl_timer_destroy_handler()
429 destroy_workqueue(timer_params->timer_workq); in wl_timer_destroy_handler()
430 timer_params->timer_workq = NULL; in wl_timer_destroy_handler()
433 if (timer_params->thr_timer_ctl.thr_pid >= 0) { in wl_timer_destroy_handler()
434 PROC_STOP(&timer_params->thr_timer_ctl); in wl_timer_destroy_handler()
440 wl_timer_free(struct wl_timer_params *timer_params) in wl_timer_free() argument
444 list_for_each_entry_safe(node, next, &timer_params->timer_list, list) { in wl_timer_free()
454 wl_timer_params_t *timer_params = dhd->timer_params; in wl_timer_mod() local
458 list_for_each_entry_safe(node, next, &timer_params->timer_list, list) { in wl_timer_mod()
464 wl_timer_kick_handler(timer_params); in wl_timer_mod()
478 wl_timer_params_t *timer_params = dhd->timer_params; in wl_timer_register() local
481 list_for_each_entry_safe(node, next, &timer_params->timer_list, list) { in wl_timer_register()
500 list_add_tail(&leaf->list, &timer_params->timer_list); in wl_timer_register()
509 wl_timer_params_t *timer_params = dhd->timer_params; in wl_timer_deregister() local
512 list_for_each_entry_safe(node, next, &timer_params->timer_list, list) { in wl_timer_deregister()
523 wl_timer_init_priv(struct wl_timer_params *timer_params) in wl_timer_init_priv() argument
527 INIT_LIST_HEAD(&timer_params->timer_list); in wl_timer_init_priv()
528 if (wl_timer_create_handler(timer_params)) in wl_timer_init_priv()
530 wl_func_init_eq(timer_params); in wl_timer_init_priv()
531 if (wl_func_create_handler(timer_params)) in wl_timer_init_priv()
538 wl_timer_deinit_priv(struct wl_timer_params *timer_params) in wl_timer_deinit_priv() argument
540 wl_timer_free(timer_params); in wl_timer_deinit_priv()
541 wl_func_destroy_handler(timer_params); in wl_timer_deinit_priv()
542 wl_func_flush_eq(timer_params); in wl_timer_deinit_priv()
543 wl_timer_destroy_handler(timer_params); in wl_timer_deinit_priv()
549 struct wl_timer_params *timer_params = dhdp->timer_params; in wl_timer_dettach() local
551 if (timer_params) { in wl_timer_dettach()
552 if (timer_pending(&timer_params->timer)) in wl_timer_dettach()
553 del_timer_sync(&timer_params->timer); in wl_timer_dettach()
554 wl_timer_deinit_priv(timer_params); in wl_timer_dettach()
555 kfree(timer_params); in wl_timer_dettach()
556 dhdp->timer_params = NULL; in wl_timer_dettach()
564 struct wl_timer_params *timer_params = NULL; in wl_timer_attach() local
567 timer_params = kmalloc(sizeof(wl_timer_params_t), GFP_KERNEL); in wl_timer_attach()
568 if (!timer_params) { in wl_timer_attach()
573 dhdp->timer_params = timer_params; in wl_timer_attach()
574 memset(timer_params, 0, sizeof(wl_timer_params_t)); in wl_timer_attach()
575 timer_params->pub = dhdp; in wl_timer_attach()
577 err = wl_timer_init_priv(timer_params); in wl_timer_attach()
582 init_timer_compat(&timer_params->timer, wl_timer_timeout, timer_params); in wl_timer_attach()