Lines Matching refs:wcn

214 static void wcn36xx_feat_caps_info(struct wcn36xx *wcn)  in wcn36xx_feat_caps_info()  argument
219 if (get_feat_caps(wcn->fw_feat_caps, i)) in wcn36xx_feat_caps_info()
224 static void wcn36xx_detect_chip_version(struct wcn36xx *wcn) in wcn36xx_detect_chip_version() argument
226 if (get_feat_caps(wcn->fw_feat_caps, DOT11AC)) { in wcn36xx_detect_chip_version()
228 wcn->chip_version = WCN36XX_CHIP_3680; in wcn36xx_detect_chip_version()
231 wcn->chip_version = WCN36XX_CHIP_3660; in wcn36xx_detect_chip_version()
237 struct wcn36xx *wcn = hw->priv; in wcn36xx_start() local
243 ret = wcn36xx_smd_open(wcn); in wcn36xx_start()
250 ret = wcn36xx_dxe_allocate_mem_pools(wcn); in wcn36xx_start()
256 ret = wcn36xx_dxe_alloc_ctl_blks(wcn); in wcn36xx_start()
262 wcn->hal_buf = kmalloc(WCN36XX_HAL_BUF_SIZE, GFP_KERNEL); in wcn36xx_start()
263 if (!wcn->hal_buf) { in wcn36xx_start()
269 ret = wcn36xx_smd_load_nv(wcn); in wcn36xx_start()
275 ret = wcn36xx_smd_start(wcn); in wcn36xx_start()
281 if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) { in wcn36xx_start()
282 ret = wcn36xx_smd_feature_caps_exchange(wcn); in wcn36xx_start()
286 wcn36xx_feat_caps_info(wcn); in wcn36xx_start()
289 wcn36xx_detect_chip_version(wcn); in wcn36xx_start()
292 ret = wcn36xx_dxe_init(wcn); in wcn36xx_start()
298 wcn36xx_debugfs_init(wcn); in wcn36xx_start()
300 INIT_LIST_HEAD(&wcn->vif_list); in wcn36xx_start()
301 spin_lock_init(&wcn->dxe_lock); in wcn36xx_start()
306 wcn36xx_smd_stop(wcn); in wcn36xx_start()
308 kfree(wcn->hal_buf); in wcn36xx_start()
310 wcn36xx_dxe_free_mem_pools(wcn); in wcn36xx_start()
312 wcn36xx_dxe_free_ctl_blks(wcn); in wcn36xx_start()
314 wcn36xx_smd_close(wcn); in wcn36xx_start()
321 struct wcn36xx *wcn = hw->priv; in wcn36xx_stop() local
325 wcn36xx_debugfs_exit(wcn); in wcn36xx_stop()
326 wcn36xx_smd_stop(wcn); in wcn36xx_stop()
327 wcn36xx_dxe_deinit(wcn); in wcn36xx_stop()
328 wcn36xx_smd_close(wcn); in wcn36xx_stop()
330 wcn36xx_dxe_free_mem_pools(wcn); in wcn36xx_stop()
331 wcn36xx_dxe_free_ctl_blks(wcn); in wcn36xx_stop()
333 kfree(wcn->hal_buf); in wcn36xx_stop()
338 struct wcn36xx *wcn = hw->priv; in wcn36xx_config() local
345 int ch = WCN36XX_HW_CHANNEL(wcn); in wcn36xx_config()
348 list_for_each_entry(tmp, &wcn->vif_list, list) { in wcn36xx_config()
352 wcn36xx_smd_switch_channel(wcn, vif, ch); in wcn36xx_config()
374 struct wcn36xx *wcn = hw->priv; in wcn36xx_tx() local
380 if (wcn36xx_start_tx(wcn, sta_priv, skb)) in wcn36xx_tx()
381 ieee80211_free_txskb(wcn->hw, skb); in wcn36xx_tx()
389 struct wcn36xx *wcn = hw->priv; in wcn36xx_set_key() local
444 wcn36xx_smd_config_bss(wcn, in wcn36xx_set_key()
450 wcn36xx_smd_set_stakey(wcn, in wcn36xx_set_key()
457 wcn36xx_smd_set_bsskey(wcn, in wcn36xx_set_key()
465 wcn36xx_smd_set_stakey(wcn, in wcn36xx_set_key()
476 wcn36xx_smd_remove_bsskey(wcn, in wcn36xx_set_key()
483 wcn36xx_smd_remove_stakey(wcn, in wcn36xx_set_key()
503 struct wcn36xx *wcn = hw->priv; in wcn36xx_sw_scan_start() local
505 wcn36xx_smd_init_scan(wcn, HAL_SYS_MODE_SCAN); in wcn36xx_sw_scan_start()
506 wcn36xx_smd_start_scan(wcn); in wcn36xx_sw_scan_start()
512 struct wcn36xx *wcn = hw->priv; in wcn36xx_sw_scan_complete() local
514 wcn36xx_smd_end_scan(wcn); in wcn36xx_sw_scan_complete()
515 wcn36xx_smd_finish_scan(wcn, HAL_SYS_MODE_SCAN); in wcn36xx_sw_scan_complete()
589 struct wcn36xx *wcn = hw->priv; in wcn36xx_bss_info_changed() local
611 wcn36xx_pmc_enter_bmps_state(wcn, vif); in wcn36xx_bss_info_changed()
613 wcn36xx_pmc_exit_bmps_state(wcn, vif); in wcn36xx_bss_info_changed()
624 wcn36xx_smd_join(wcn, bss_conf->bssid, in wcn36xx_bss_info_changed()
625 vif->addr, WCN36XX_HW_CHANNEL(wcn)); in wcn36xx_bss_info_changed()
626 wcn36xx_smd_config_bss(wcn, vif, NULL, in wcn36xx_bss_info_changed()
630 wcn36xx_smd_delete_bss(wcn, vif); in wcn36xx_bss_info_changed()
668 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn)); in wcn36xx_bss_info_changed()
670 wcn36xx_smd_set_link_st(wcn, bss_conf->bssid, in wcn36xx_bss_info_changed()
673 wcn36xx_smd_config_bss(wcn, vif, sta, in wcn36xx_bss_info_changed()
681 wcn36xx_smd_config_sta(wcn, vif, sta); in wcn36xx_bss_info_changed()
689 wcn36xx_smd_set_link_st(wcn, in wcn36xx_bss_info_changed()
704 wcn36xx_smd_update_proberesp_tmpl(wcn, vif, skb); in wcn36xx_bss_info_changed()
717 wcn36xx_smd_config_bss(wcn, vif, NULL, in wcn36xx_bss_info_changed()
725 wcn36xx_smd_send_beacon(wcn, vif, skb, tim_off, 0); in wcn36xx_bss_info_changed()
734 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr, in wcn36xx_bss_info_changed()
737 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr, in wcn36xx_bss_info_changed()
739 wcn36xx_smd_delete_bss(wcn, vif); in wcn36xx_bss_info_changed()
749 struct wcn36xx *wcn = hw->priv; in wcn36xx_set_rts_threshold() local
752 wcn36xx_smd_update_cfg(wcn, WCN36XX_HAL_CFG_RTS_THRESHOLD, value); in wcn36xx_set_rts_threshold()
759 struct wcn36xx *wcn = hw->priv; in wcn36xx_remove_interface() local
764 wcn36xx_smd_delete_sta_self(wcn, vif->addr); in wcn36xx_remove_interface()
770 struct wcn36xx *wcn = hw->priv; in wcn36xx_add_interface() local
785 list_add(&vif_priv->list, &wcn->vif_list); in wcn36xx_add_interface()
786 wcn36xx_smd_add_sta_self(wcn, vif); in wcn36xx_add_interface()
794 struct wcn36xx *wcn = hw->priv; in wcn36xx_sta_add() local
808 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn)); in wcn36xx_sta_add()
810 wcn36xx_smd_config_sta(wcn, vif, sta); in wcn36xx_sta_add()
819 struct wcn36xx *wcn = hw->priv; in wcn36xx_sta_remove() local
826 wcn36xx_smd_delete_sta(wcn, sta_priv->sta_index); in wcn36xx_sta_remove()
836 struct wcn36xx *wcn = hw->priv; in wcn36xx_suspend() local
840 flush_workqueue(wcn->hal_ind_wq); in wcn36xx_suspend()
841 wcn36xx_smd_set_power_params(wcn, true); in wcn36xx_suspend()
847 struct wcn36xx *wcn = hw->priv; in wcn36xx_resume() local
851 flush_workqueue(wcn->hal_ind_wq); in wcn36xx_resume()
852 wcn36xx_smd_set_power_params(wcn, false); in wcn36xx_resume()
864 struct wcn36xx *wcn = hw->priv; in wcn36xx_ampdu_action() local
875 wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 0, in wcn36xx_ampdu_action()
877 wcn36xx_smd_add_ba(wcn); in wcn36xx_ampdu_action()
878 wcn36xx_smd_trigger_ba(wcn, get_sta_index(vif, sta_priv)); in wcn36xx_ampdu_action()
881 wcn36xx_smd_del_ba(wcn, tid, get_sta_index(vif, sta_priv)); in wcn36xx_ampdu_action()
895 wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 1, in wcn36xx_ampdu_action()
936 static int wcn36xx_init_ieee80211(struct wcn36xx *wcn) in wcn36xx_init_ieee80211() argument
947 wcn->hw->flags = IEEE80211_HW_SIGNAL_DBM | in wcn36xx_init_ieee80211()
954 wcn->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | in wcn36xx_init_ieee80211()
959 wcn->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &wcn_band_2ghz; in wcn36xx_init_ieee80211()
960 wcn->hw->wiphy->bands[IEEE80211_BAND_5GHZ] = &wcn_band_5ghz; in wcn36xx_init_ieee80211()
962 wcn->hw->wiphy->cipher_suites = cipher_suites; in wcn36xx_init_ieee80211()
963 wcn->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); in wcn36xx_init_ieee80211()
965 wcn->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD; in wcn36xx_init_ieee80211()
968 wcn->hw->wiphy->wowlan = &wowlan_support; in wcn36xx_init_ieee80211()
971 wcn->hw->max_listen_interval = 200; in wcn36xx_init_ieee80211()
973 wcn->hw->queues = 4; in wcn36xx_init_ieee80211()
975 SET_IEEE80211_DEV(wcn->hw, wcn->dev); in wcn36xx_init_ieee80211()
977 wcn->hw->sta_data_size = sizeof(struct wcn36xx_sta); in wcn36xx_init_ieee80211()
978 wcn->hw->vif_data_size = sizeof(struct wcn36xx_vif); in wcn36xx_init_ieee80211()
983 static int wcn36xx_platform_get_resources(struct wcn36xx *wcn, in wcn36xx_platform_get_resources() argument
994 wcn->tx_irq = res->start; in wcn36xx_platform_get_resources()
1003 wcn->rx_irq = res->start; in wcn36xx_platform_get_resources()
1012 wcn->mmio = ioremap(res->start, resource_size(res)); in wcn36xx_platform_get_resources()
1013 if (!wcn->mmio) { in wcn36xx_platform_get_resources()
1023 struct wcn36xx *wcn; in wcn36xx_probe() local
1036 wcn = hw->priv; in wcn36xx_probe()
1037 wcn->hw = hw; in wcn36xx_probe()
1038 wcn->dev = &pdev->dev; in wcn36xx_probe()
1039 wcn->ctrl_ops = pdev->dev.platform_data; in wcn36xx_probe()
1041 mutex_init(&wcn->hal_mutex); in wcn36xx_probe()
1043 if (!wcn->ctrl_ops->get_hw_mac(addr)) { in wcn36xx_probe()
1045 SET_IEEE80211_PERM_ADDR(wcn->hw, addr); in wcn36xx_probe()
1048 ret = wcn36xx_platform_get_resources(wcn, pdev); in wcn36xx_probe()
1052 wcn36xx_init_ieee80211(wcn); in wcn36xx_probe()
1053 ret = ieee80211_register_hw(wcn->hw); in wcn36xx_probe()
1060 iounmap(wcn->mmio); in wcn36xx_probe()
1069 struct wcn36xx *wcn = hw->priv; in wcn36xx_remove() local
1072 release_firmware(wcn->nv); in wcn36xx_remove()
1073 mutex_destroy(&wcn->hal_mutex); in wcn36xx_remove()
1076 iounmap(wcn->mmio); in wcn36xx_remove()