Lines Matching refs:fweh
86 static void brcmf_fweh_queue_event(struct brcmf_fweh_info *fweh, in brcmf_fweh_queue_event() argument
91 spin_lock_irqsave(&fweh->evt_q_lock, flags); in brcmf_fweh_queue_event()
92 list_add_tail(&event->q, &fweh->event_q); in brcmf_fweh_queue_event()
93 spin_unlock_irqrestore(&fweh->evt_q_lock, flags); in brcmf_fweh_queue_event()
94 schedule_work(&fweh->event_work); in brcmf_fweh_queue_event()
103 struct brcmf_fweh_info *fweh; in brcmf_fweh_call_event_handler() local
107 fweh = ifp->drvr->fweh; in brcmf_fweh_call_event_handler()
110 if (fweh->evt_handler[fwcode]) in brcmf_fweh_call_event_handler()
111 err = fweh->evt_handler[fwcode](ifp, emsg, data); in brcmf_fweh_call_event_handler()
147 (drvr->fweh->p2pdev_setup_ongoing)))); in brcmf_fweh_handle_if_event()
168 if (!drvr->fweh->evt_handler[BRCMF_E_IF]) in brcmf_fweh_handle_if_event()
188 static void brcmf_fweh_map_event_code(struct brcmf_fweh_info *fweh, in brcmf_fweh_map_event_code() argument
198 if (fweh->event_map) { in brcmf_fweh_map_event_code()
199 for (i = 0; i < fweh->event_map->n_items; i++) { in brcmf_fweh_map_event_code()
200 if (fweh->event_map->items[i].code == code) { in brcmf_fweh_map_event_code()
201 *fw_code = fweh->event_map->items[i].fwevt_code; in brcmf_fweh_map_event_code()
208 static void brcmf_fweh_map_fwevt_code(struct brcmf_fweh_info *fweh, u32 fw_code, in brcmf_fweh_map_fwevt_code() argument
217 if (fweh->event_map) { in brcmf_fweh_map_fwevt_code()
218 for (i = 0; i < fweh->event_map->n_items; i++) { in brcmf_fweh_map_fwevt_code()
219 if (fweh->event_map->items[i].fwevt_code == fw_code) { in brcmf_fweh_map_fwevt_code()
220 *code = fweh->event_map->items[i].code; in brcmf_fweh_map_fwevt_code()
233 brcmf_fweh_dequeue_event(struct brcmf_fweh_info *fweh) in brcmf_fweh_dequeue_event() argument
238 spin_lock_irqsave(&fweh->evt_q_lock, flags); in brcmf_fweh_dequeue_event()
239 if (!list_empty(&fweh->event_q)) { in brcmf_fweh_dequeue_event()
240 event = list_first_entry(&fweh->event_q, in brcmf_fweh_dequeue_event()
244 spin_unlock_irqrestore(&fweh->evt_q_lock, flags); in brcmf_fweh_dequeue_event()
258 struct brcmf_fweh_info *fweh; in brcmf_fweh_event_worker() local
264 fweh = container_of(work, struct brcmf_fweh_info, event_work); in brcmf_fweh_event_worker()
265 drvr = fweh->drvr; in brcmf_fweh_event_worker()
267 while ((event = brcmf_fweh_dequeue_event(fweh))) { in brcmf_fweh_event_worker()
270 brcmf_fweh_map_fwevt_code(fweh, event->code, &code); in brcmf_fweh_event_worker()
331 ifp->drvr->fweh->p2pdev_setup_ongoing = ongoing; in brcmf_fweh_p2pdev_setup()
341 struct brcmf_fweh_info *fweh; in brcmf_fweh_attach() local
348 fweh = drvr->fweh; in brcmf_fweh_attach()
349 fweh->drvr = drvr; in brcmf_fweh_attach()
351 fweh->event_mask_len = DIV_ROUND_UP(fweh->num_event_codes, 8); in brcmf_fweh_attach()
352 fweh->event_mask = kzalloc(fweh->event_mask_len, GFP_KERNEL); in brcmf_fweh_attach()
353 if (!fweh->event_mask) in brcmf_fweh_attach()
356 INIT_WORK(&fweh->event_work, brcmf_fweh_event_worker); in brcmf_fweh_attach()
357 spin_lock_init(&fweh->evt_q_lock); in brcmf_fweh_attach()
358 INIT_LIST_HEAD(&fweh->event_q); in brcmf_fweh_attach()
369 struct brcmf_fweh_info *fweh = drvr->fweh; in brcmf_fweh_detach() local
371 if (!fweh) in brcmf_fweh_detach()
375 if (fweh->event_work.func) { in brcmf_fweh_detach()
376 cancel_work_sync(&fweh->event_work); in brcmf_fweh_detach()
377 WARN_ON(!list_empty(&fweh->event_q)); in brcmf_fweh_detach()
379 drvr->fweh = NULL; in brcmf_fweh_detach()
380 kfree(fweh->event_mask); in brcmf_fweh_detach()
381 kfree(fweh); in brcmf_fweh_detach()
394 struct brcmf_fweh_info *fweh = drvr->fweh; in brcmf_fweh_register() local
397 brcmf_fweh_map_event_code(fweh, code, &evt_handler_idx); in brcmf_fweh_register()
399 if (fweh->evt_handler[evt_handler_idx]) { in brcmf_fweh_register()
404 fweh->evt_handler[evt_handler_idx] = handler; in brcmf_fweh_register()
424 brcmf_fweh_map_event_code(drvr->fweh, code, &evt_handler_idx); in brcmf_fweh_unregister()
425 drvr->fweh->evt_handler[evt_handler_idx] = NULL; in brcmf_fweh_unregister()
435 struct brcmf_fweh_info *fweh = ifp->drvr->fweh; in brcmf_fweh_activate_events() local
439 memset(fweh->event_mask, 0, fweh->event_mask_len); in brcmf_fweh_activate_events()
440 for (i = 0; i < fweh->num_event_codes; i++) { in brcmf_fweh_activate_events()
441 if (fweh->evt_handler[i]) { in brcmf_fweh_activate_events()
442 brcmf_fweh_map_fwevt_code(fweh, i, &code); in brcmf_fweh_activate_events()
445 setbit(fweh->event_mask, i); in brcmf_fweh_activate_events()
451 setbit(fweh->event_mask, BRCMF_E_IF); in brcmf_fweh_activate_events()
457 err = brcmf_fil_iovar_data_set(ifp, "event_msgs", fweh->event_mask, in brcmf_fweh_activate_events()
458 fweh->event_mask_len); in brcmf_fweh_activate_events()
460 bphy_err(fweh->drvr, "Set event_msgs error (%d)\n", err); in brcmf_fweh_activate_events()
480 struct brcmf_fweh_info *fweh = drvr->fweh; in brcmf_fweh_process_event() local
490 if (fwevt_idx >= fweh->num_event_codes) in brcmf_fweh_process_event()
493 if (fwevt_idx != BRCMF_E_IF && !fweh->evt_handler[fwevt_idx]) in brcmf_fweh_process_event()
513 brcmf_fweh_queue_event(fweh, event); in brcmf_fweh_process_event()