Lines Matching refs:wcn

42 /* The wcn firmware expects channel values to matching
214 static void wcn36xx_feat_caps_info(struct wcn36xx *wcn)
219 if (get_feat_caps(wcn->fw_feat_caps, i))
224 static void wcn36xx_detect_chip_version(struct wcn36xx *wcn)
226 if (get_feat_caps(wcn->fw_feat_caps, DOT11AC)) {
228 wcn->chip_version = WCN36XX_CHIP_3680;
231 wcn->chip_version = WCN36XX_CHIP_3660;
237 struct wcn36xx *wcn = hw->priv;
243 ret = wcn36xx_smd_open(wcn);
250 ret = wcn36xx_dxe_allocate_mem_pools(wcn);
256 ret = wcn36xx_dxe_alloc_ctl_blks(wcn);
262 wcn->hal_buf = kmalloc(WCN36XX_HAL_BUF_SIZE, GFP_KERNEL);
263 if (!wcn->hal_buf) {
269 ret = wcn36xx_smd_load_nv(wcn);
275 ret = wcn36xx_smd_start(wcn);
281 if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) {
282 ret = wcn36xx_smd_feature_caps_exchange(wcn);
286 wcn36xx_feat_caps_info(wcn);
289 wcn36xx_detect_chip_version(wcn);
292 ret = wcn36xx_dxe_init(wcn);
298 wcn36xx_debugfs_init(wcn);
300 INIT_LIST_HEAD(&wcn->vif_list);
304 wcn36xx_smd_stop(wcn);
306 kfree(wcn->hal_buf);
308 wcn36xx_dxe_free_mem_pools(wcn);
310 wcn36xx_dxe_free_ctl_blks(wcn);
312 wcn36xx_smd_close(wcn);
319 struct wcn36xx *wcn = hw->priv;
323 wcn36xx_debugfs_exit(wcn);
324 wcn36xx_smd_stop(wcn);
325 wcn36xx_dxe_deinit(wcn);
326 wcn36xx_smd_close(wcn);
328 wcn36xx_dxe_free_mem_pools(wcn);
329 wcn36xx_dxe_free_ctl_blks(wcn);
331 kfree(wcn->hal_buf);
336 struct wcn36xx *wcn = hw->priv;
343 int ch = WCN36XX_HW_CHANNEL(wcn);
346 list_for_each_entry(tmp, &wcn->vif_list, list) {
350 wcn36xx_smd_switch_channel(wcn, vif, ch);
372 struct wcn36xx *wcn = hw->priv;
378 if (wcn36xx_start_tx(wcn, sta_priv, skb))
379 ieee80211_free_txskb(wcn->hw, skb);
387 struct wcn36xx *wcn = hw->priv;
442 wcn36xx_smd_config_bss(wcn,
448 wcn36xx_smd_set_stakey(wcn,
455 wcn36xx_smd_set_bsskey(wcn,
463 wcn36xx_smd_set_stakey(wcn,
474 wcn36xx_smd_remove_bsskey(wcn,
481 wcn36xx_smd_remove_stakey(wcn,
499 struct wcn36xx *wcn = hw->priv;
501 wcn36xx_smd_init_scan(wcn, HAL_SYS_MODE_SCAN);
502 wcn36xx_smd_start_scan(wcn);
507 struct wcn36xx *wcn = hw->priv;
509 wcn36xx_smd_end_scan(wcn);
510 wcn36xx_smd_finish_scan(wcn, HAL_SYS_MODE_SCAN);
584 struct wcn36xx *wcn = hw->priv;
606 wcn36xx_pmc_enter_bmps_state(wcn, vif);
608 wcn36xx_pmc_exit_bmps_state(wcn, vif);
619 wcn36xx_smd_join(wcn, bss_conf->bssid,
620 vif->addr, WCN36XX_HW_CHANNEL(wcn));
621 wcn36xx_smd_config_bss(wcn, vif, NULL,
625 wcn36xx_smd_delete_bss(wcn, vif);
663 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn));
665 wcn36xx_smd_set_link_st(wcn, bss_conf->bssid,
668 wcn36xx_smd_config_bss(wcn, vif, sta,
676 wcn36xx_smd_config_sta(wcn, vif, sta);
684 wcn36xx_smd_set_link_st(wcn,
699 wcn36xx_smd_update_proberesp_tmpl(wcn, vif, skb);
712 wcn36xx_smd_config_bss(wcn, vif, NULL,
720 wcn36xx_smd_send_beacon(wcn, vif, skb, tim_off, 0);
729 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr,
732 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr,
734 wcn36xx_smd_delete_bss(wcn, vif);
744 struct wcn36xx *wcn = hw->priv;
747 wcn36xx_smd_update_cfg(wcn, WCN36XX_HAL_CFG_RTS_THRESHOLD, value);
754 struct wcn36xx *wcn = hw->priv;
759 wcn36xx_smd_delete_sta_self(wcn, vif->addr);
765 struct wcn36xx *wcn = hw->priv;
780 list_add(&vif_priv->list, &wcn->vif_list);
781 wcn36xx_smd_add_sta_self(wcn, vif);
789 struct wcn36xx *wcn = hw->priv;
802 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn));
804 wcn36xx_smd_config_sta(wcn, vif, sta);
813 struct wcn36xx *wcn = hw->priv;
820 wcn36xx_smd_delete_sta(wcn, sta_priv->sta_index);
830 struct wcn36xx *wcn = hw->priv;
834 flush_workqueue(wcn->hal_ind_wq);
835 wcn36xx_smd_set_power_params(wcn, true);
841 struct wcn36xx *wcn = hw->priv;
845 flush_workqueue(wcn->hal_ind_wq);
846 wcn36xx_smd_set_power_params(wcn, false);
858 struct wcn36xx *wcn = hw->priv;
869 wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 0,
871 wcn36xx_smd_add_ba(wcn);
872 wcn36xx_smd_trigger_ba(wcn, get_sta_index(vif, sta_priv));
876 wcn36xx_smd_del_ba(wcn, tid, get_sta_index(vif, sta_priv));
882 wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 1,
919 static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
930 wcn->hw->flags = IEEE80211_HW_SIGNAL_DBM |
937 wcn->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
942 wcn->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wcn_band_2ghz;
943 wcn->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wcn_band_5ghz;
945 wcn->hw->wiphy->cipher_suites = cipher_suites;
946 wcn->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
948 wcn->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
951 wcn->hw->wiphy->wowlan = &wowlan_support;
954 wcn->hw->max_listen_interval = 200;
956 wcn->hw->queues = 4;
958 SET_IEEE80211_DEV(wcn->hw, wcn->dev);
960 wcn->hw->sta_data_size = sizeof(struct wcn36xx_sta);
961 wcn->hw->vif_data_size = sizeof(struct wcn36xx_vif);
966 static int wcn36xx_platform_get_resources(struct wcn36xx *wcn,
977 wcn->tx_irq = res->start;
986 wcn->rx_irq = res->start;
995 wcn->mmio = ioremap(res->start, resource_size(res));
996 if (!wcn->mmio) {
1006 struct wcn36xx *wcn;
1019 wcn = hw->priv;
1020 wcn->hw = hw;
1021 wcn->dev = &pdev->dev;
1022 wcn->ctrl_ops = pdev->dev.platform_data;
1024 mutex_init(&wcn->hal_mutex);
1026 if (!wcn->ctrl_ops->get_hw_mac(addr)) {
1028 SET_IEEE80211_PERM_ADDR(wcn->hw, addr);
1031 ret = wcn36xx_platform_get_resources(wcn, pdev);
1035 wcn36xx_init_ieee80211(wcn);
1036 ret = ieee80211_register_hw(wcn->hw);
1043 iounmap(wcn->mmio);
1052 struct wcn36xx *wcn = hw->priv;
1055 release_firmware(wcn->nv);
1056 mutex_destroy(&wcn->hal_mutex);
1059 iounmap(wcn->mmio);