Lines Matching refs:wl

281  * by the wl parameter.
285 static void brcms_free(struct brcms_info *wl)
290 if (wl->fw.fw_cnt)
291 brcms_ucode_data_free(&wl->ucode);
292 if (wl->irq)
293 free_irq(wl->irq, wl);
296 tasklet_kill(&wl->tasklet);
298 if (wl->pub) {
299 brcms_debugfs_detach(wl->pub);
300 brcms_c_module_unregister(wl->pub, "linux", wl);
304 if (wl->wlc) {
305 brcms_c_detach(wl->wlc);
306 wl->wlc = NULL;
307 wl->pub = NULL;
313 while (atomic_read(&wl->callbacks) > 0)
317 for (t = wl->timers; t; t = next) {
333 struct brcms_info *wl = hw->priv;
335 if (wl->wlc) {
336 brcms_led_unregister(wl);
337 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false);
338 wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
342 brcms_free(wl);
352 static void brcms_release_fw(struct brcms_info *wl)
356 release_firmware(wl->fw.fw_bin[i]);
357 release_firmware(wl->fw.fw_hdr[i]);
365 static int brcms_request_fw(struct brcms_info *wl, struct bcma_device *pdev)
372 memset(&wl->fw, 0, sizeof(struct brcms_firmware));
378 status = request_firmware(&wl->fw.fw_bin[i], fw_name, device);
380 wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n",
386 status = request_firmware(&wl->fw.fw_hdr[i], fw_name, device);
388 wiphy_err(wl->wiphy, "%s: fail to load firmware %s\n",
392 wl->fw.hdr_num_entries[i] =
393 wl->fw.fw_hdr[i]->size / (sizeof(struct firmware_hdr));
395 wl->fw.fw_cnt = i;
396 status = brcms_ucode_data_init(wl, &wl->ucode);
397 brcms_release_fw(wl);
405 struct brcms_info *wl = hw->priv;
408 spin_lock_bh(&wl->lock);
409 if (!wl->pub->up) {
410 brcms_err(wl->wlc->hw->d11core, "ops->tx called while down\n");
414 if (brcms_c_sendpkt_mac80211(wl->wlc, skb, hw))
417 spin_unlock_bh(&wl->lock);
422 struct brcms_info *wl = hw->priv;
426 if (!wl->ucode.bcm43xx_bomminor) {
427 err = brcms_request_fw(wl, wl->wlc->hw->d11core);
433 spin_lock_bh(&wl->lock);
434 blocked = brcms_rfkill_set_hw_state(wl);
435 spin_unlock_bh(&wl->lock);
437 wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
439 spin_lock_bh(&wl->lock);
441 wl->mute_tx = true;
443 if (!wl->pub->up)
445 err = brcms_up(wl);
450 spin_unlock_bh(&wl->lock);
453 brcms_err(wl->wlc->hw->d11core, "%s: brcms_up() returned %d\n",
456 bcma_core_pci_power_save(wl->wlc->hw->d11core->bus, true);
462 struct brcms_info *wl = hw->priv;
467 if (wl->wlc == NULL)
470 spin_lock_bh(&wl->lock);
471 status = brcms_c_chipmatch(wl->wlc->hw->d11core);
472 spin_unlock_bh(&wl->lock);
474 brcms_err(wl->wlc->hw->d11core,
475 "wl: brcms_ops_stop: chipmatch failed\n");
479 bcma_core_pci_power_save(wl->wlc->hw->d11core->bus, false);
482 spin_lock_bh(&wl->lock);
483 brcms_down(wl);
484 spin_unlock_bh(&wl->lock);
490 struct brcms_info *wl = hw->priv;
496 brcms_err(wl->wlc->hw->d11core,
502 spin_lock_bh(&wl->lock);
503 wl->wlc->vif = vif;
504 wl->mute_tx = false;
505 brcms_c_mute(wl->wlc, false);
507 brcms_c_start_station(wl->wlc, vif->addr);
509 brcms_c_start_ap(wl->wlc, vif->addr, vif->bss_conf.bssid,
512 brcms_c_start_adhoc(wl->wlc, vif->addr);
513 spin_unlock_bh(&wl->lock);
521 struct brcms_info *wl = hw->priv;
523 spin_lock_bh(&wl->lock);
524 wl->wlc->vif = NULL;
525 spin_unlock_bh(&wl->lock);
531 struct brcms_info *wl = hw->priv;
532 struct bcma_device *core = wl->wlc->hw->d11core;
536 spin_lock_bh(&wl->lock);
538 brcms_c_set_beacon_listen_interval(wl->wlc,
551 err = brcms_c_set_tx_power(wl->wlc, conf->power_level);
557 new_int = brcms_c_get_tx_power(wl->wlc);
567 err = brcms_c_set_channel(wl->wlc,
573 err = brcms_c_set_rate_limit(wl->wlc,
578 spin_unlock_bh(&wl->lock);
587 struct brcms_info *wl = hw->priv;
588 struct bcma_device *core = wl->wlc->hw->d11core;
596 spin_lock_bh(&wl->lock);
597 brcms_c_associate_upd(wl->wlc, vif->cfg.assoc);
598 spin_unlock_bh(&wl->lock);
608 spin_lock_bh(&wl->lock);
609 brcms_c_set_shortslot_override(wl->wlc, val);
610 spin_unlock_bh(&wl->lock);
617 spin_lock_bh(&wl->lock);
618 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_CFG,
620 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_NONGF,
622 brcms_c_protection_upd(wl->wlc, BRCMS_PROT_N_OBSS,
624 spin_unlock_bh(&wl->lock);
634 spin_lock_bh(&wl->lock);
635 brcms_c_get_current_rateset(wl->wlc, &rs);
636 spin_unlock_bh(&wl->lock);
639 bi = hw->wiphy->bands[brcms_c_get_curband(wl->wlc)];
650 spin_lock_bh(&wl->lock);
651 error = brcms_c_set_rateset(wl->wlc, &rs);
652 spin_unlock_bh(&wl->lock);
659 spin_lock_bh(&wl->lock);
660 brcms_c_set_beacon_period(wl->wlc, info->beacon_int);
661 spin_unlock_bh(&wl->lock);
665 spin_lock_bh(&wl->lock);
666 brcms_c_set_addrmatch(wl->wlc, RCM_BSSID_OFFSET, info->bssid);
667 spin_unlock_bh(&wl->lock);
671 spin_lock_bh(&wl->lock);
672 brcms_c_set_ssid(wl->wlc, vif->cfg.ssid, vif->cfg.ssid_len);
673 spin_unlock_bh(&wl->lock);
680 spin_lock_bh(&wl->lock);
682 brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset,
684 spin_unlock_bh(&wl->lock);
690 spin_lock_bh(&wl->lock);
692 brcms_c_set_new_probe_resp(wl->wlc, probe_resp);
693 spin_unlock_bh(&wl->lock);
702 brcms_c_enable_probe_resp(wl->wlc, true);
704 brcms_c_enable_probe_resp(wl->wlc, false);
743 struct brcms_info *wl = hw->priv;
744 struct bcma_device *core = wl->wlc->hw->d11core;
762 spin_lock_bh(&wl->lock);
763 brcms_c_mac_promisc(wl->wlc, *total_flags);
764 spin_unlock_bh(&wl->lock);
772 struct brcms_info *wl = hw->priv;
773 spin_lock_bh(&wl->lock);
774 brcms_c_scan_start(wl->wlc);
775 spin_unlock_bh(&wl->lock);
782 struct brcms_info *wl = hw->priv;
783 spin_lock_bh(&wl->lock);
784 brcms_c_scan_stop(wl->wlc);
785 spin_unlock_bh(&wl->lock);
794 struct brcms_info *wl = hw->priv;
796 spin_lock_bh(&wl->lock);
797 brcms_c_wme_setparams(wl->wlc, queue, params, true);
798 spin_unlock_bh(&wl->lock);
807 struct brcms_info *wl = hw->priv;
808 struct scb *scb = &wl->wlc->pri_scb;
812 wl->pub->global_ampdu = &(scb->scb_ampdu);
813 wl->pub->global_ampdu->max_pdu = 16;
827 struct brcms_info *wl = hw->priv;
828 struct scb *scb = &wl->wlc->pri_scb;
842 spin_lock_bh(&wl->lock);
843 status = brcms_c_aggregatable(wl->wlc, tid);
844 spin_unlock_bh(&wl->lock);
846 brcms_dbg_ht(wl->wlc->hw->d11core,
855 spin_lock_bh(&wl->lock);
856 brcms_c_ampdu_flush(wl->wlc, sta, tid);
857 spin_unlock_bh(&wl->lock);
867 spin_lock_bh(&wl->lock);
868 brcms_c_ampdu_tx_operational(wl->wlc, tid,
871 spin_unlock_bh(&wl->lock);
875 brcms_err(wl->wlc->hw->d11core,
884 struct brcms_info *wl = hw->priv;
887 spin_lock_bh(&wl->lock);
888 blocked = brcms_c_check_radio_disabled(wl->wlc);
889 spin_unlock_bh(&wl->lock);
891 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked);
894 static bool brcms_tx_flush_completed(struct brcms_info *wl)
898 spin_lock_bh(&wl->lock);
899 result = brcms_c_tx_flush_completed(wl->wlc);
900 spin_unlock_bh(&wl->lock);
907 struct brcms_info *wl = hw->priv;
912 ret = wait_event_timeout(wl->tx_flush_wq,
913 brcms_tx_flush_completed(wl),
916 brcms_dbg_mac80211(wl->wlc->hw->d11core,
922 struct brcms_info *wl = hw->priv;
925 spin_lock_bh(&wl->lock);
926 tsf = brcms_c_tsf_get(wl->wlc);
927 spin_unlock_bh(&wl->lock);
935 struct brcms_info *wl = hw->priv;
937 spin_lock_bh(&wl->lock);
938 brcms_c_tsf_set(wl->wlc, tsf);
939 spin_unlock_bh(&wl->lock);
945 struct brcms_info *wl = hw->priv;
949 spin_lock_bh(&wl->lock);
950 if (wl->wlc->vif)
951 beacon = ieee80211_beacon_get_tim(hw, wl->wlc->vif,
954 brcms_c_set_new_beacon(wl->wlc, beacon, tim_offset,
955 wl->wlc->vif->bss_conf.dtim_period);
956 spin_unlock_bh(&wl->lock);
989 struct brcms_info *wl;
991 wl = from_tasklet(wl, t, tasklet);
993 spin_lock_bh(&wl->lock);
996 if (wl->pub->up) {
997 if (wl->resched) {
1000 spin_lock_irqsave(&wl->isr_lock, flags);
1001 brcms_c_intrsupd(wl->wlc);
1002 spin_unlock_irqrestore(&wl->isr_lock, flags);
1005 wl->resched = brcms_c_dpc(wl->wlc, true);
1009 if (!wl->pub->up)
1013 if (wl->resched)
1014 tasklet_schedule(&wl->tasklet);
1017 brcms_intrson(wl);
1020 spin_unlock_bh(&wl->lock);
1021 wake_up(&wl->tx_flush_wq);
1026 struct brcms_info *wl;
1029 wl = (struct brcms_info *) dev_id;
1031 spin_lock(&wl->isr_lock);
1034 if (brcms_c_isr(wl->wlc)) {
1036 tasklet_schedule(&wl->tasklet);
1040 spin_unlock(&wl->isr_lock);
1050 struct brcms_info *wl = hw->priv;
1051 struct brcms_c_info *wlc = wl->wlc;
1058 phy_type = brcms_c_get_phy_type(wl->wlc, 0);
1073 if (wl->pub->_nbands > 1) {
1129 struct brcms_info *wl = NULL;
1143 wl = hw->priv;
1144 if (WARN_ON(hw == NULL) || WARN_ON(wl == NULL))
1146 wl->wiphy = hw->wiphy;
1148 atomic_set(&wl->callbacks, 0);
1150 init_waitqueue_head(&wl->tx_flush_wq);
1153 tasklet_setup(&wl->tasklet, brcms_dpc);
1155 spin_lock_init(&wl->lock);
1156 spin_lock_init(&wl->isr_lock);
1159 wl->wlc = brcms_c_attach((void *)wl, pdev, unit, false, &err);
1160 if (!wl->wlc) {
1161 wiphy_err(wl->wiphy, "%s: attach() failed with code %d\n",
1165 wl->pub = brcms_c_pub(wl->wlc);
1167 wl->pub->ieee_hw = hw;
1171 IRQF_SHARED, KBUILD_MODNAME, wl)) {
1172 wiphy_err(wl->wiphy, "wl%d: request_irq() failed\n", unit);
1175 wl->irq = pdev->irq;
1178 brcms_c_module_register(wl->pub, "linux", wl, NULL);
1181 wiphy_err(wl->wiphy, "wl%d: %s: ieee_hw_init failed!\n", unit,
1186 brcms_c_regd_init(wl->wlc);
1188 memcpy(perm, &wl->pub->cur_etheraddr, ETH_ALEN);
1195 wiphy_err(wl->wiphy, "%s: ieee80211_register_hw failed, status"
1198 if (wl->pub->srom_ccode[0] &&
1199 regulatory_hint(wl->wiphy, wl->pub->srom_ccode))
1200 wiphy_err(wl->wiphy, "%s: regulatory hint failed\n", __func__);
1202 brcms_debugfs_attach(wl->pub);
1203 brcms_debugfs_create_files(wl->pub);
1205 return wl;
1208 brcms_free(wl);
1224 struct brcms_info *wl;
1246 memset(hw->priv, 0, sizeof(*wl));
1248 wl = brcms_attach(pdev);
1249 if (!wl) {
1254 brcms_led_register(wl);
1265 struct brcms_info *wl;
1269 wl = hw->priv;
1270 if (!wl) {
1277 spin_lock_bh(&wl->lock);
1278 wl->pub->hw_up = false;
1279 spin_unlock_bh(&wl->lock);
1281 brcms_dbg_info(wl->wlc->hw->d11core, "brcms_suspend ok\n");
1347 void brcms_txflowcontrol(struct brcms_info *wl, struct brcms_if *wlif,
1350 brcms_err(wl->wlc->hw->d11core, "Shouldn't be here %s\n", __func__);
1356 void brcms_init(struct brcms_info *wl)
1358 brcms_dbg_info(wl->wlc->hw->d11core, "Initializing wl%d\n",
1359 wl->pub->unit);
1360 brcms_reset(wl);
1361 brcms_c_init(wl->wlc, wl->mute_tx);
1367 uint brcms_reset(struct brcms_info *wl)
1369 brcms_dbg_info(wl->wlc->hw->d11core, "Resetting wl%d\n", wl->pub->unit);
1370 brcms_c_reset(wl->wlc);
1373 wl->resched = false;
1376 wl->pub->up = false;
1381 void brcms_fatal_error(struct brcms_info *wl)
1383 brcms_err(wl->wlc->hw->d11core, "wl%d: fatal error, reinitializing\n",
1384 wl->wlc->pub->unit);
1385 brcms_reset(wl);
1386 ieee80211_restart_hw(wl->pub->ieee_hw);
1393 void brcms_intrson(struct brcms_info *wl)
1397 spin_lock_irqsave(&wl->isr_lock, flags);
1398 brcms_c_intrson(wl->wlc);
1399 spin_unlock_irqrestore(&wl->isr_lock, flags);
1402 u32 brcms_intrsoff(struct brcms_info *wl)
1407 spin_lock_irqsave(&wl->isr_lock, flags);
1408 status = brcms_c_intrsoff(wl->wlc);
1409 spin_unlock_irqrestore(&wl->isr_lock, flags);
1413 void brcms_intrsrestore(struct brcms_info *wl, u32 macintmask)
1417 spin_lock_irqsave(&wl->isr_lock, flags);
1418 brcms_c_intrsrestore(wl->wlc, macintmask);
1419 spin_unlock_irqrestore(&wl->isr_lock, flags);
1425 int brcms_up(struct brcms_info *wl)
1429 if (wl->pub->up)
1432 error = brcms_c_up(wl->wlc);
1440 void brcms_down(struct brcms_info *wl)
1441 __must_hold(&wl->lock)
1446 ret_val = brcms_c_down(wl->wlc);
1447 callbacks = atomic_read(&wl->callbacks) - ret_val;
1450 spin_unlock_bh(&wl->lock);
1455 SPINWAIT((atomic_read(&wl->callbacks) > callbacks), 100 * 1000);
1457 spin_lock_bh(&wl->lock);
1468 spin_lock_bh(&t->wl->lock);
1472 atomic_inc(&t->wl->callbacks);
1473 ieee80211_queue_delayed_work(t->wl->pub->ieee_hw,
1483 atomic_dec(&t->wl->callbacks);
1485 spin_unlock_bh(&t->wl->lock);
1494 struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
1505 t->wl = wl;
1508 t->next = wl->timers;
1509 wl->timers = t;
1526 struct ieee80211_hw *hw = t->wl->pub->ieee_hw;
1530 brcms_dbg_info(t->wl->wlc->hw->d11core,
1538 atomic_inc(&t->wl->callbacks);
1556 atomic_dec(&t->wl->callbacks);
1567 struct brcms_info *wl = t->wl;
1573 if (wl->timers == t) {
1574 wl->timers = wl->timers->next;
1583 tmp = wl->timers;
1601 int brcms_ucode_init_buf(struct brcms_info *wl, void **pbuf, u32 idx)
1606 for (i = 0; i < wl->fw.fw_cnt; i++) {
1607 hdr = (struct firmware_hdr *)wl->fw.fw_hdr[i]->data;
1608 for (entry = 0; entry < wl->fw.hdr_num_entries[i];
1612 pdata = wl->fw.fw_bin[i]->data +
1621 brcms_err(wl->wlc->hw->d11core,
1631 int brcms_ucode_init_uint(struct brcms_info *wl, size_t *n_bytes, u32 idx)
1636 for (i = 0; i < wl->fw.fw_cnt; i++) {
1637 hdr = (struct firmware_hdr *)wl->fw.fw_hdr[i]->data;
1638 for (entry = 0; entry < wl->fw.hdr_num_entries[i];
1641 pdata = wl->fw.fw_bin[i]->data +
1644 brcms_err(wl->wlc->hw->d11core,
1653 brcms_err(wl->wlc->hw->d11core,
1672 int brcms_check_firmwares(struct brcms_info *wl)
1681 fw = wl->fw.fw_bin[i];
1682 fw_hdr = wl->fw.fw_hdr[i];
1686 wiphy_err(wl->wiphy, "%s: invalid bin/hdr fw\n",
1690 wiphy_err(wl->wiphy, "%s: non integral fw hdr file "
1695 wiphy_err(wl->wiphy, "%s: out of bounds fw file size %zu\n",
1701 for (entry = 0; entry < wl->fw.hdr_num_entries[i] &&
1706 wiphy_err(wl->wiphy,
1714 if (rc == 0 && wl->fw.fw_cnt != i) {
1715 wiphy_err(wl->wiphy, "%s: invalid fw_cnt=%d\n", __func__,
1716 wl->fw.fw_cnt);
1725 bool brcms_rfkill_set_hw_state(struct brcms_info *wl)
1726 __must_hold(&wl->lock)
1728 bool blocked = brcms_c_check_radio_disabled(wl->wlc);
1730 spin_unlock_bh(&wl->lock);
1731 wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, blocked);
1733 wiphy_rfkill_start_polling(wl->pub->ieee_hw->wiphy);
1734 spin_lock_bh(&wl->lock);