Lines Matching refs:wl

285 static void brcms_free(struct brcms_info *wl)  in brcms_free()  argument
290 if (wl->fw.fw_cnt) in brcms_free()
291 brcms_ucode_data_free(&wl->ucode); in brcms_free()
292 if (wl->irq) in brcms_free()
293 free_irq(wl->irq, wl); in brcms_free()
296 tasklet_kill(&wl->tasklet); in brcms_free()
298 if (wl->pub) { in brcms_free()
299 brcms_debugfs_detach(wl->pub); in brcms_free()
300 brcms_c_module_unregister(wl->pub, "linux", wl); in brcms_free()
304 if (wl->wlc) { in brcms_free()
305 brcms_c_detach(wl->wlc); in brcms_free()
306 wl->wlc = NULL; in brcms_free()
307 wl->pub = NULL; in brcms_free()
313 while (atomic_read(&wl->callbacks) > 0) in brcms_free()
317 for (t = wl->timers; t; t = next) { in brcms_free()
333 struct brcms_info *wl = hw->priv; in brcms_remove() local
335 if (wl->wlc) { in brcms_remove()
336 brcms_led_unregister(wl); in brcms_remove()
337 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false); in brcms_remove()
338 wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy); in brcms_remove()
342 brcms_free(wl); in brcms_remove()
352 static void brcms_release_fw(struct brcms_info *wl) in brcms_release_fw() argument
356 release_firmware(wl->fw.fw_bin[i]); in brcms_release_fw()
357 release_firmware(wl->fw.fw_hdr[i]); in brcms_release_fw()
365 static int brcms_request_fw(struct brcms_info *wl, struct bcma_device *pdev) in brcms_request_fw() argument
372 memset(&wl->fw, 0, sizeof(struct brcms_firmware)); in brcms_request_fw()
378 status = request_firmware(&wl->fw.fw_bin[i], fw_name, device); in brcms_request_fw()
380 wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n", in brcms_request_fw()
386 status = request_firmware(&wl->fw.fw_hdr[i], fw_name, device); in brcms_request_fw()
388 wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n", in brcms_request_fw()
392 wl->fw.hdr_num_entries[i] = in brcms_request_fw()
393 wl->fw.fw_hdr[i]->size / (sizeof(struct firmware_hdr)); in brcms_request_fw()
395 wl->fw.fw_cnt = i; in brcms_request_fw()
396 status = brcms_ucode_data_init(wl, &wl->ucode); in brcms_request_fw()
397 brcms_release_fw(wl); in brcms_request_fw()
405 struct brcms_info *wl = hw->priv; in brcms_ops_tx() local
408 spin_lock_bh(&wl->lock); in brcms_ops_tx()
409 if (!wl->pub->up) { in brcms_ops_tx()
410 brcms_err(wl->wlc->hw->d11core, "ops->tx called while down\n"); in brcms_ops_tx()
414 if (brcms_c_sendpkt_mac80211(wl->wlc, skb, hw)) in brcms_ops_tx()
417 spin_unlock_bh(&wl->lock); in brcms_ops_tx()
422 struct brcms_info *wl = hw->priv; in brcms_ops_start() local
426 if (!wl->ucode.bcm43xx_bomminor) { in brcms_ops_start()
427 err = brcms_request_fw(wl, wl->wlc->hw->d11core); in brcms_ops_start()
433 spin_lock_bh(&wl->lock); in brcms_ops_start()
434 blocked = brcms_rfkill_set_hw_state(wl); in brcms_ops_start()
435 spin_unlock_bh(&wl->lock); in brcms_ops_start()
437 wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy); in brcms_ops_start()
439 spin_lock_bh(&wl->lock); in brcms_ops_start()
441 wl->mute_tx = true; in brcms_ops_start()
443 if (!wl->pub->up) in brcms_ops_start()
445 err = brcms_up(wl); in brcms_ops_start()
450 spin_unlock_bh(&wl->lock); in brcms_ops_start()
453 brcms_err(wl->wlc->hw->d11core, "%s: brcms_up() returned %d\n", in brcms_ops_start()
456 bcma_core_pci_power_save(wl->wlc->hw->d11core->bus, true); in brcms_ops_start()
462 struct brcms_info *wl = hw->priv; in brcms_ops_stop() local
467 if (wl->wlc == NULL) in brcms_ops_stop()
470 spin_lock_bh(&wl->lock); in brcms_ops_stop()
471 status = brcms_c_chipmatch(wl->wlc->hw->d11core); in brcms_ops_stop()
472 spin_unlock_bh(&wl->lock); in brcms_ops_stop()
474 brcms_err(wl->wlc->hw->d11core, in brcms_ops_stop()
479 bcma_core_pci_power_save(wl->wlc->hw->d11core->bus, false); in brcms_ops_stop()
482 spin_lock_bh(&wl->lock); in brcms_ops_stop()
483 brcms_down(wl); in brcms_ops_stop()
484 spin_unlock_bh(&wl->lock); in brcms_ops_stop()
490 struct brcms_info *wl = hw->priv; in brcms_ops_add_interface() local
496 brcms_err(wl->wlc->hw->d11core, in brcms_ops_add_interface()
502 spin_lock_bh(&wl->lock); in brcms_ops_add_interface()
503 wl->wlc->vif = vif; in brcms_ops_add_interface()
504 wl->mute_tx = false; in brcms_ops_add_interface()
505 brcms_c_mute(wl->wlc, false); in brcms_ops_add_interface()
507 brcms_c_start_station(wl->wlc, vif->addr); in brcms_ops_add_interface()
509 brcms_c_start_ap(wl->wlc, vif->addr, vif->bss_conf.bssid, in brcms_ops_add_interface()
512 brcms_c_start_adhoc(wl->wlc, vif->addr); in brcms_ops_add_interface()
513 spin_unlock_bh(&wl->lock); in brcms_ops_add_interface()
521 struct brcms_info *wl = hw->priv; in brcms_ops_remove_interface() local
523 spin_lock_bh(&wl->lock); in brcms_ops_remove_interface()
524 wl->wlc->vif = NULL; in brcms_ops_remove_interface()
525 spin_unlock_bh(&wl->lock); in brcms_ops_remove_interface()
531 struct brcms_info *wl = hw->priv; in brcms_ops_config() local
532 struct bcma_device *core = wl->wlc->hw->d11core; in brcms_ops_config()
536 spin_lock_bh(&wl->lock); in brcms_ops_config()
538 brcms_c_set_beacon_listen_interval(wl->wlc, in brcms_ops_config()
551 err = brcms_c_set_tx_power(wl->wlc, conf->power_level); in brcms_ops_config()
557 new_int = brcms_c_get_tx_power(wl->wlc); in brcms_ops_config()
567 err = brcms_c_set_channel(wl->wlc, in brcms_ops_config()
573 err = brcms_c_set_rate_limit(wl->wlc, in brcms_ops_config()
578 spin_unlock_bh(&wl->lock); in brcms_ops_config()
587 struct brcms_info *wl = hw->priv; in brcms_ops_bss_info_changed() local
588 struct bcma_device *core = wl->wlc->hw->d11core; in brcms_ops_bss_info_changed()
596 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
597 brcms_c_associate_upd(wl->wlc, vif->cfg.assoc); in brcms_ops_bss_info_changed()
598 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
608 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
609 brcms_c_set_shortslot_override(wl->wlc, val); in brcms_ops_bss_info_changed()
610 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
617 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
618 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_CFG, in brcms_ops_bss_info_changed()
620 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_NONGF, in brcms_ops_bss_info_changed()
622 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_OBSS, in brcms_ops_bss_info_changed()
624 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
634 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
635 brcms_c_get_current_rateset(wl->wlc, &rs); in brcms_ops_bss_info_changed()
636 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
639 bi = hw->wiphy->bands[brcms_c_get_curband(wl->wlc)]; in brcms_ops_bss_info_changed()
650 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
651 error = brcms_c_set_rateset(wl->wlc, &rs); in brcms_ops_bss_info_changed()
652 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
659 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
660 brcms_c_set_beacon_period(wl->wlc, info->beacon_int); in brcms_ops_bss_info_changed()
661 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
665 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
666 brcms_c_set_addrmatch(wl->wlc, RCM_BSSID_OFFSET, info->bssid); in brcms_ops_bss_info_changed()
667 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
671 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
672 brcms_c_set_ssid(wl->wlc, vif->cfg.ssid, vif->cfg.ssid_len); in brcms_ops_bss_info_changed()
673 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
680 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
682 brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset, in brcms_ops_bss_info_changed()
684 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
690 spin_lock_bh(&wl->lock); in brcms_ops_bss_info_changed()
692 brcms_c_set_new_probe_resp(wl->wlc, probe_resp); in brcms_ops_bss_info_changed()
693 spin_unlock_bh(&wl->lock); in brcms_ops_bss_info_changed()
702 brcms_c_enable_probe_resp(wl->wlc, true); in brcms_ops_bss_info_changed()
704 brcms_c_enable_probe_resp(wl->wlc, false); in brcms_ops_bss_info_changed()
743 struct brcms_info *wl = hw->priv; in brcms_ops_configure_filter() local
744 struct bcma_device *core = wl->wlc->hw->d11core; in brcms_ops_configure_filter()
762 spin_lock_bh(&wl->lock); in brcms_ops_configure_filter()
763 brcms_c_mac_promisc(wl->wlc, *total_flags); in brcms_ops_configure_filter()
764 spin_unlock_bh(&wl->lock); in brcms_ops_configure_filter()
772 struct brcms_info *wl = hw->priv; in brcms_ops_sw_scan_start() local
773 spin_lock_bh(&wl->lock); in brcms_ops_sw_scan_start()
774 brcms_c_scan_start(wl->wlc); in brcms_ops_sw_scan_start()
775 spin_unlock_bh(&wl->lock); in brcms_ops_sw_scan_start()
782 struct brcms_info *wl = hw->priv; in brcms_ops_sw_scan_complete() local
783 spin_lock_bh(&wl->lock); in brcms_ops_sw_scan_complete()
784 brcms_c_scan_stop(wl->wlc); in brcms_ops_sw_scan_complete()
785 spin_unlock_bh(&wl->lock); in brcms_ops_sw_scan_complete()
794 struct brcms_info *wl = hw->priv; in brcms_ops_conf_tx() local
796 spin_lock_bh(&wl->lock); in brcms_ops_conf_tx()
797 brcms_c_wme_setparams(wl->wlc, queue, params, true); in brcms_ops_conf_tx()
798 spin_unlock_bh(&wl->lock); in brcms_ops_conf_tx()
807 struct brcms_info *wl = hw->priv; in brcms_ops_sta_add() local
808 struct scb *scb = &wl->wlc->pri_scb; in brcms_ops_sta_add()
812 wl->pub->global_ampdu = &(scb->scb_ampdu); in brcms_ops_sta_add()
813 wl->pub->global_ampdu->scb = scb; in brcms_ops_sta_add()
814 wl->pub->global_ampdu->max_pdu = 16; in brcms_ops_sta_add()
828 struct brcms_info *wl = hw->priv; in brcms_ops_ampdu_action() local
829 struct scb *scb = &wl->wlc->pri_scb; in brcms_ops_ampdu_action()
844 spin_lock_bh(&wl->lock); in brcms_ops_ampdu_action()
845 status = brcms_c_aggregatable(wl->wlc, tid); in brcms_ops_ampdu_action()
846 spin_unlock_bh(&wl->lock); in brcms_ops_ampdu_action()
848 brcms_dbg_ht(wl->wlc->hw->d11core, in brcms_ops_ampdu_action()
857 spin_lock_bh(&wl->lock); in brcms_ops_ampdu_action()
858 brcms_c_ampdu_flush(wl->wlc, sta, tid); in brcms_ops_ampdu_action()
859 spin_unlock_bh(&wl->lock); in brcms_ops_ampdu_action()
869 spin_lock_bh(&wl->lock); in brcms_ops_ampdu_action()
870 brcms_c_ampdu_tx_operational(wl->wlc, tid, buf_size, in brcms_ops_ampdu_action()
873 spin_unlock_bh(&wl->lock); in brcms_ops_ampdu_action()
877 brcms_err(wl->wlc->hw->d11core, in brcms_ops_ampdu_action()
886 struct brcms_info *wl = hw->priv; in brcms_ops_rfkill_poll() local
889 spin_lock_bh(&wl->lock); in brcms_ops_rfkill_poll()
890 blocked = brcms_c_check_radio_disabled(wl->wlc); in brcms_ops_rfkill_poll()
891 spin_unlock_bh(&wl->lock); in brcms_ops_rfkill_poll()
893 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked); in brcms_ops_rfkill_poll()
896 static bool brcms_tx_flush_completed(struct brcms_info *wl) in brcms_tx_flush_completed() argument
900 spin_lock_bh(&wl->lock); in brcms_tx_flush_completed()
901 result = brcms_c_tx_flush_completed(wl->wlc); in brcms_tx_flush_completed()
902 spin_unlock_bh(&wl->lock); in brcms_tx_flush_completed()
909 struct brcms_info *wl = hw->priv; in brcms_ops_flush() local
914 ret = wait_event_timeout(wl->tx_flush_wq, in brcms_ops_flush()
915 brcms_tx_flush_completed(wl), in brcms_ops_flush()
918 brcms_dbg_mac80211(wl->wlc->hw->d11core, in brcms_ops_flush()
924 struct brcms_info *wl = hw->priv; in brcms_ops_get_tsf() local
927 spin_lock_bh(&wl->lock); in brcms_ops_get_tsf()
928 tsf = brcms_c_tsf_get(wl->wlc); in brcms_ops_get_tsf()
929 spin_unlock_bh(&wl->lock); in brcms_ops_get_tsf()
937 struct brcms_info *wl = hw->priv; in brcms_ops_set_tsf() local
939 spin_lock_bh(&wl->lock); in brcms_ops_set_tsf()
940 brcms_c_tsf_set(wl->wlc, tsf); in brcms_ops_set_tsf()
941 spin_unlock_bh(&wl->lock); in brcms_ops_set_tsf()
947 struct brcms_info *wl = hw->priv; in brcms_ops_beacon_set_tim() local
951 spin_lock_bh(&wl->lock); in brcms_ops_beacon_set_tim()
952 if (wl->wlc->vif) in brcms_ops_beacon_set_tim()
953 beacon = ieee80211_beacon_get_tim(hw, wl->wlc->vif, in brcms_ops_beacon_set_tim()
956 brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset, in brcms_ops_beacon_set_tim()
957 wl->wlc->vif->bss_conf.dtim_period); in brcms_ops_beacon_set_tim()
958 spin_unlock_bh(&wl->lock); in brcms_ops_beacon_set_tim()
987 struct brcms_info *wl; in brcms_dpc() local
989 wl = from_tasklet(wl, t, tasklet); in brcms_dpc()
991 spin_lock_bh(&wl->lock); in brcms_dpc()
994 if (wl->pub->up) { in brcms_dpc()
995 if (wl->resched) { in brcms_dpc()
998 spin_lock_irqsave(&wl->isr_lock, flags); in brcms_dpc()
999 brcms_c_intrsupd(wl->wlc); in brcms_dpc()
1000 spin_unlock_irqrestore(&wl->isr_lock, flags); in brcms_dpc()
1003 wl->resched = brcms_c_dpc(wl->wlc, true); in brcms_dpc()
1007 if (!wl->pub->up) in brcms_dpc()
1011 if (wl->resched) in brcms_dpc()
1012 tasklet_schedule(&wl->tasklet); in brcms_dpc()
1015 brcms_intrson(wl); in brcms_dpc()
1018 spin_unlock_bh(&wl->lock); in brcms_dpc()
1019 wake_up(&wl->tx_flush_wq); in brcms_dpc()
1024 struct brcms_info *wl; in brcms_isr() local
1027 wl = (struct brcms_info *) dev_id; in brcms_isr()
1029 spin_lock(&wl->isr_lock); in brcms_isr()
1032 if (brcms_c_isr(wl->wlc)) { in brcms_isr()
1034 tasklet_schedule(&wl->tasklet); in brcms_isr()
1038 spin_unlock(&wl->isr_lock); in brcms_isr()
1048 struct brcms_info *wl = hw->priv; in ieee_hw_rate_init() local
1049 struct brcms_c_info *wlc = wl->wlc; in ieee_hw_rate_init()
1057 phy_type = brcms_c_get_phy_type(wl->wlc, 0); in ieee_hw_rate_init()
1072 if (wl->pub->_nbands > 1) { in ieee_hw_rate_init()
1128 struct brcms_info *wl = NULL; in brcms_attach() local
1142 wl = hw->priv; in brcms_attach()
1143 if (WARN_ON(hw == NULL) || WARN_ON(wl == NULL)) in brcms_attach()
1145 wl->wiphy = hw->wiphy; in brcms_attach()
1147 atomic_set(&wl->callbacks, 0); in brcms_attach()
1149 init_waitqueue_head(&wl->tx_flush_wq); in brcms_attach()
1152 tasklet_setup(&wl->tasklet, brcms_dpc); in brcms_attach()
1154 spin_lock_init(&wl->lock); in brcms_attach()
1155 spin_lock_init(&wl->isr_lock); in brcms_attach()
1158 wl->wlc = brcms_c_attach((void *)wl, pdev, unit, false, &err); in brcms_attach()
1159 if (!wl->wlc) { in brcms_attach()
1160 wiphy_err(wl->wiphy, "%s: attach() failed with code %d\n", in brcms_attach()
1164 wl->pub = brcms_c_pub(wl->wlc); in brcms_attach()
1166 wl->pub->ieee_hw = hw; in brcms_attach()
1170 IRQF_SHARED, KBUILD_MODNAME, wl)) { in brcms_attach()
1171 wiphy_err(wl->wiphy, "wl%d: request_irq() failed\n", unit); in brcms_attach()
1174 wl->irq = pdev->irq; in brcms_attach()
1177 brcms_c_module_register(wl->pub, "linux", wl, NULL); in brcms_attach()
1180 wiphy_err(wl->wiphy, "wl%d: %s: ieee_hw_init failed!\n", unit, in brcms_attach()
1185 brcms_c_regd_init(wl->wlc); in brcms_attach()
1187 memcpy(perm, &wl->pub->cur_etheraddr, ETH_ALEN); in brcms_attach()
1194 wiphy_err(wl->wiphy, "%s: ieee80211_register_hw failed, status" in brcms_attach()
1197 if (wl->pub->srom_ccode[0] && in brcms_attach()
1198 regulatory_hint(wl->wiphy, wl->pub->srom_ccode)) in brcms_attach()
1199 wiphy_err(wl->wiphy, "%s: regulatory hint failed\n", __func__); in brcms_attach()
1201 brcms_debugfs_attach(wl->pub); in brcms_attach()
1202 brcms_debugfs_create_files(wl->pub); in brcms_attach()
1204 return wl; in brcms_attach()
1207 brcms_free(wl); in brcms_attach()
1223 struct brcms_info *wl; in brcms_bcma_probe() local
1245 memset(hw->priv, 0, sizeof(*wl)); in brcms_bcma_probe()
1247 wl = brcms_attach(pdev); in brcms_bcma_probe()
1248 if (!wl) { in brcms_bcma_probe()
1253 brcms_led_register(wl); in brcms_bcma_probe()
1264 struct brcms_info *wl; in brcms_suspend() local
1268 wl = hw->priv; in brcms_suspend()
1269 if (!wl) { in brcms_suspend()
1276 spin_lock_bh(&wl->lock); in brcms_suspend()
1277 wl->pub->hw_up = false; in brcms_suspend()
1278 spin_unlock_bh(&wl->lock); in brcms_suspend()
1280 brcms_dbg_info(wl->wlc->hw->d11core, "brcms_suspend ok\n"); in brcms_suspend()
1346 void brcms_txflowcontrol(struct brcms_info *wl, struct brcms_if *wlif, in brcms_txflowcontrol() argument
1349 brcms_err(wl->wlc->hw->d11core, "Shouldn't be here %s\n", __func__); in brcms_txflowcontrol()
1355 void brcms_init(struct brcms_info *wl) in brcms_init() argument
1357 brcms_dbg_info(wl->wlc->hw->d11core, "Initializing wl%d\n", in brcms_init()
1358 wl->pub->unit); in brcms_init()
1359 brcms_reset(wl); in brcms_init()
1360 brcms_c_init(wl->wlc, wl->mute_tx); in brcms_init()
1366 uint brcms_reset(struct brcms_info *wl) in brcms_reset() argument
1368 brcms_dbg_info(wl->wlc->hw->d11core, "Resetting wl%d\n", wl->pub->unit); in brcms_reset()
1369 brcms_c_reset(wl->wlc); in brcms_reset()
1372 wl->resched = false; in brcms_reset()
1375 wl->pub->up = false; in brcms_reset()
1380 void brcms_fatal_error(struct brcms_info *wl) in brcms_fatal_error() argument
1382 brcms_err(wl->wlc->hw->d11core, "wl%d: fatal error, reinitializing\n", in brcms_fatal_error()
1383 wl->wlc->pub->unit); in brcms_fatal_error()
1384 brcms_reset(wl); in brcms_fatal_error()
1385 ieee80211_restart_hw(wl->pub->ieee_hw); in brcms_fatal_error()
1392 void brcms_intrson(struct brcms_info *wl) in brcms_intrson() argument
1396 spin_lock_irqsave(&wl->isr_lock, flags); in brcms_intrson()
1397 brcms_c_intrson(wl->wlc); in brcms_intrson()
1398 spin_unlock_irqrestore(&wl->isr_lock, flags); in brcms_intrson()
1401 u32 brcms_intrsoff(struct brcms_info *wl) in brcms_intrsoff() argument
1406 spin_lock_irqsave(&wl->isr_lock, flags); in brcms_intrsoff()
1407 status = brcms_c_intrsoff(wl->wlc); in brcms_intrsoff()
1408 spin_unlock_irqrestore(&wl->isr_lock, flags); in brcms_intrsoff()
1412 void brcms_intrsrestore(struct brcms_info *wl, u32 macintmask) in brcms_intrsrestore() argument
1416 spin_lock_irqsave(&wl->isr_lock, flags); in brcms_intrsrestore()
1417 brcms_c_intrsrestore(wl->wlc, macintmask); in brcms_intrsrestore()
1418 spin_unlock_irqrestore(&wl->isr_lock, flags); in brcms_intrsrestore()
1424 int brcms_up(struct brcms_info *wl) in brcms_up() argument
1428 if (wl->pub->up) in brcms_up()
1431 error = brcms_c_up(wl->wlc); in brcms_up()
1439 void brcms_down(struct brcms_info *wl) in brcms_down() argument
1440 __must_hold(&wl->lock) in brcms_down()
1445 ret_val = brcms_c_down(wl->wlc); in brcms_down()
1446 callbacks = atomic_read(&wl->callbacks) - ret_val; in brcms_down()
1449 spin_unlock_bh(&wl->lock); in brcms_down()
1454 SPINWAIT((atomic_read(&wl->callbacks) > callbacks), 100 * 1000); in brcms_down()
1456 spin_lock_bh(&wl->lock); in brcms_down()
1467 spin_lock_bh(&t->wl->lock); in _brcms_timer()
1471 atomic_inc(&t->wl->callbacks); in _brcms_timer()
1472 ieee80211_queue_delayed_work(t->wl->pub->ieee_hw, in _brcms_timer()
1482 atomic_dec(&t->wl->callbacks); in _brcms_timer()
1484 spin_unlock_bh(&t->wl->lock); in _brcms_timer()
1493 struct brcms_timer *brcms_init_timer(struct brcms_info *wl, in brcms_init_timer() argument
1504 t->wl = wl; in brcms_init_timer()
1507 t->next = wl->timers; in brcms_init_timer()
1508 wl->timers = t; in brcms_init_timer()
1525 struct ieee80211_hw *hw = t->wl->pub->ieee_hw; in brcms_add_timer()
1529 brcms_dbg_info(t->wl->wlc->hw->d11core, in brcms_add_timer()
1537 atomic_inc(&t->wl->callbacks); in brcms_add_timer()
1555 atomic_dec(&t->wl->callbacks); in brcms_del_timer()
1566 struct brcms_info *wl = t->wl; in brcms_free_timer() local
1572 if (wl->timers == t) { in brcms_free_timer()
1573 wl->timers = wl->timers->next; in brcms_free_timer()
1582 tmp = wl->timers; in brcms_free_timer()
1600 int brcms_ucode_init_buf(struct brcms_info *wl, void **pbuf, u32 idx) in brcms_ucode_init_buf() argument
1605 for (i = 0; i < wl->fw.fw_cnt; i++) { in brcms_ucode_init_buf()
1606 hdr = (struct firmware_hdr *)wl->fw.fw_hdr[i]->data; in brcms_ucode_init_buf()
1607 for (entry = 0; entry < wl->fw.hdr_num_entries[i]; in brcms_ucode_init_buf()
1611 pdata = wl->fw.fw_bin[i]->data + in brcms_ucode_init_buf()
1621 brcms_err(wl->wlc->hw->d11core, in brcms_ucode_init_buf()
1632 int brcms_ucode_init_uint(struct brcms_info *wl, size_t *n_bytes, u32 idx) in brcms_ucode_init_uint() argument
1637 for (i = 0; i < wl->fw.fw_cnt; i++) { in brcms_ucode_init_uint()
1638 hdr = (struct firmware_hdr *)wl->fw.fw_hdr[i]->data; in brcms_ucode_init_uint()
1639 for (entry = 0; entry < wl->fw.hdr_num_entries[i]; in brcms_ucode_init_uint()
1642 pdata = wl->fw.fw_bin[i]->data + in brcms_ucode_init_uint()
1645 brcms_err(wl->wlc->hw->d11core, in brcms_ucode_init_uint()
1654 brcms_err(wl->wlc->hw->d11core, in brcms_ucode_init_uint()
1673 int brcms_check_firmwares(struct brcms_info *wl) in brcms_check_firmwares() argument
1682 fw = wl->fw.fw_bin[i]; in brcms_check_firmwares()
1683 fw_hdr = wl->fw.fw_hdr[i]; in brcms_check_firmwares()
1687 wiphy_err(wl->wiphy, "%s: invalid bin/hdr fw\n", in brcms_check_firmwares()
1691 wiphy_err(wl->wiphy, "%s: non integral fw hdr file " in brcms_check_firmwares()
1696 wiphy_err(wl->wiphy, "%s: out of bounds fw file size %zu\n", in brcms_check_firmwares()
1702 for (entry = 0; entry < wl->fw.hdr_num_entries[i] && in brcms_check_firmwares()
1707 wiphy_err(wl->wiphy, in brcms_check_firmwares()
1715 if (rc == 0 && wl->fw.fw_cnt != i) { in brcms_check_firmwares()
1716 wiphy_err(wl->wiphy, "%s: invalid fw_cnt=%d\n", __func__, in brcms_check_firmwares()
1717 wl->fw.fw_cnt); in brcms_check_firmwares()
1726 bool brcms_rfkill_set_hw_state(struct brcms_info *wl) in brcms_rfkill_set_hw_state() argument
1727 __must_hold(&wl->lock) in brcms_rfkill_set_hw_state()
1729 bool blocked = brcms_c_check_radio_disabled(wl->wlc); in brcms_rfkill_set_hw_state()
1731 spin_unlock_bh(&wl->lock); in brcms_rfkill_set_hw_state()
1732 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked); in brcms_rfkill_set_hw_state()
1734 wiphy_rfkill_start_polling(wl->pub->ieee_hw->wiphy); in brcms_rfkill_set_hw_state()
1735 spin_lock_bh(&wl->lock); in brcms_rfkill_set_hw_state()