Lines Matching full:wcn

50 /* The wcn firmware expects channel values to matching
195 static void wcn36xx_feat_caps_info(struct wcn36xx *wcn) in wcn36xx_feat_caps_info() argument
200 if (wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, i)) { in wcn36xx_feat_caps_info()
209 struct wcn36xx *wcn = hw->priv; in wcn36xx_start() local
215 ret = wcn36xx_smd_open(wcn); in wcn36xx_start()
222 ret = wcn36xx_dxe_allocate_mem_pools(wcn); in wcn36xx_start()
228 ret = wcn36xx_dxe_alloc_ctl_blks(wcn); in wcn36xx_start()
234 ret = wcn36xx_smd_load_nv(wcn); in wcn36xx_start()
240 ret = wcn36xx_smd_start(wcn); in wcn36xx_start()
246 if (!wcn36xx_is_fw_version(wcn, 1, 2, 2, 24)) { in wcn36xx_start()
247 ret = wcn36xx_smd_feature_caps_exchange(wcn); in wcn36xx_start()
251 wcn36xx_feat_caps_info(wcn); in wcn36xx_start()
255 ret = wcn36xx_dxe_init(wcn); in wcn36xx_start()
261 wcn36xx_debugfs_init(wcn); in wcn36xx_start()
263 INIT_LIST_HEAD(&wcn->vif_list); in wcn36xx_start()
264 spin_lock_init(&wcn->dxe_lock); in wcn36xx_start()
265 spin_lock_init(&wcn->survey_lock); in wcn36xx_start()
270 wcn36xx_smd_stop(wcn); in wcn36xx_start()
272 wcn36xx_dxe_free_ctl_blks(wcn); in wcn36xx_start()
274 wcn36xx_dxe_free_mem_pools(wcn); in wcn36xx_start()
276 wcn36xx_smd_close(wcn); in wcn36xx_start()
283 struct wcn36xx *wcn = hw->priv; in wcn36xx_stop() local
287 mutex_lock(&wcn->scan_lock); in wcn36xx_stop()
288 if (wcn->scan_req) { in wcn36xx_stop()
293 ieee80211_scan_completed(wcn->hw, &scan_info); in wcn36xx_stop()
295 wcn->scan_req = NULL; in wcn36xx_stop()
296 mutex_unlock(&wcn->scan_lock); in wcn36xx_stop()
298 wcn36xx_debugfs_exit(wcn); in wcn36xx_stop()
299 wcn36xx_smd_stop(wcn); in wcn36xx_stop()
300 wcn36xx_dxe_deinit(wcn); in wcn36xx_stop()
301 wcn36xx_smd_close(wcn); in wcn36xx_stop()
303 wcn36xx_dxe_free_mem_pools(wcn); in wcn36xx_stop()
304 wcn36xx_dxe_free_ctl_blks(wcn); in wcn36xx_stop()
307 static void wcn36xx_change_ps(struct wcn36xx *wcn, bool enable) in wcn36xx_change_ps() argument
312 list_for_each_entry(tmp, &wcn->vif_list, list) { in wcn36xx_change_ps()
314 if (enable && !wcn->sw_scan) { in wcn36xx_change_ps()
316 wcn36xx_pmc_enter_bmps_state(wcn, vif); in wcn36xx_change_ps()
318 wcn36xx_pmc_exit_bmps_state(wcn, vif); in wcn36xx_change_ps()
323 static void wcn36xx_change_opchannel(struct wcn36xx *wcn, int ch) in wcn36xx_change_opchannel() argument
332 for (i = 0; i < ARRAY_SIZE(wcn->hw->wiphy->bands); i++) { in wcn36xx_change_opchannel()
333 band = wcn->hw->wiphy->bands[i]; in wcn36xx_change_opchannel()
351 spin_lock_irqsave(&wcn->survey_lock, flags); in wcn36xx_change_opchannel()
352 wcn->band = band; in wcn36xx_change_opchannel()
353 wcn->channel = channel; in wcn36xx_change_opchannel()
354 spin_unlock_irqrestore(&wcn->survey_lock, flags); in wcn36xx_change_opchannel()
356 list_for_each_entry(tmp, &wcn->vif_list, list) { in wcn36xx_change_opchannel()
358 wcn36xx_smd_switch_channel(wcn, vif, ch); in wcn36xx_change_opchannel()
366 struct wcn36xx *wcn = hw->priv; in wcn36xx_config() local
371 mutex_lock(&wcn->conf_mutex); in wcn36xx_config()
374 int ch = WCN36XX_HW_CHANNEL(wcn); in wcn36xx_config()
378 if (wcn->sw_scan_opchannel == ch && wcn->sw_scan_channel) { in wcn36xx_config()
383 if (wcn->sw_scan_channel) in wcn36xx_config()
384 wcn36xx_smd_end_scan(wcn, wcn->sw_scan_channel); in wcn36xx_config()
385 if (wcn->sw_scan_init) { in wcn36xx_config()
386 wcn36xx_smd_finish_scan(wcn, HAL_SYS_MODE_SCAN, in wcn36xx_config()
387 wcn->sw_scan_vif); in wcn36xx_config()
389 } else if (wcn->sw_scan) { in wcn36xx_config()
393 if (wcn->sw_scan_channel) in wcn36xx_config()
394 wcn36xx_smd_end_scan(wcn, wcn->sw_scan_channel); in wcn36xx_config()
395 if (!wcn->sw_scan_init) { in wcn36xx_config()
399 ret = wcn36xx_smd_init_scan(wcn, in wcn36xx_config()
401 wcn->sw_scan_vif); in wcn36xx_config()
403 mutex_unlock(&wcn->conf_mutex); in wcn36xx_config()
407 wcn36xx_smd_start_scan(wcn, ch); in wcn36xx_config()
409 wcn36xx_change_opchannel(wcn, ch); in wcn36xx_config()
414 wcn36xx_change_ps(wcn, hw->conf.flags & IEEE80211_CONF_PS); in wcn36xx_config()
418 wcn36xx_smd_enter_imps(wcn); in wcn36xx_config()
420 wcn36xx_smd_exit_imps(wcn); in wcn36xx_config()
423 mutex_unlock(&wcn->conf_mutex); in wcn36xx_config()
433 struct wcn36xx *wcn = hw->priv; in wcn36xx_configure_filter() local
439 mutex_lock(&wcn->conf_mutex); in wcn36xx_configure_filter()
444 list_for_each_entry(tmp, &wcn->vif_list, list) { in wcn36xx_configure_filter()
449 wcn36xx_smd_set_mc_list(wcn, vif, NULL); in wcn36xx_configure_filter()
451 wcn36xx_smd_set_mc_list(wcn, vif, fp); in wcn36xx_configure_filter()
454 mutex_unlock(&wcn->conf_mutex); in wcn36xx_configure_filter()
489 struct wcn36xx *wcn = hw->priv; in wcn36xx_tx() local
495 if (wcn36xx_start_tx(wcn, sta_priv, skb)) in wcn36xx_tx()
496 ieee80211_free_txskb(wcn->hw, skb); in wcn36xx_tx()
504 struct wcn36xx *wcn = hw->priv; in wcn36xx_set_key() local
518 mutex_lock(&wcn->conf_mutex); in wcn36xx_set_key()
561 wcn36xx_smd_config_bss(wcn, in wcn36xx_set_key()
566 wcn36xx_smd_config_sta(wcn, vif, sta); in wcn36xx_set_key()
569 wcn36xx_smd_set_stakey(wcn, in wcn36xx_set_key()
576 wcn36xx_smd_set_bsskey(wcn, in wcn36xx_set_key()
588 wcn36xx_smd_set_stakey(wcn, in wcn36xx_set_key()
601 wcn36xx_smd_remove_bsskey(wcn, in wcn36xx_set_key()
611 wcn36xx_smd_remove_stakey(wcn, in wcn36xx_set_key()
624 mutex_unlock(&wcn->conf_mutex); in wcn36xx_set_key()
633 struct wcn36xx *wcn = hw->priv; in wcn36xx_hw_scan() local
635 if (!wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, SCAN_OFFLOAD)) { in wcn36xx_hw_scan()
649 mutex_lock(&wcn->scan_lock); in wcn36xx_hw_scan()
650 if (wcn->scan_req) { in wcn36xx_hw_scan()
651 mutex_unlock(&wcn->scan_lock); in wcn36xx_hw_scan()
655 wcn->scan_aborted = false; in wcn36xx_hw_scan()
656 wcn->scan_req = &hw_req->req; in wcn36xx_hw_scan()
658 mutex_unlock(&wcn->scan_lock); in wcn36xx_hw_scan()
660 wcn36xx_smd_update_channel_list(wcn, &hw_req->req); in wcn36xx_hw_scan()
661 return wcn36xx_smd_start_hw_scan(wcn, vif, &hw_req->req); in wcn36xx_hw_scan()
667 struct wcn36xx *wcn = hw->priv; in wcn36xx_cancel_hw_scan() local
669 mutex_lock(&wcn->scan_lock); in wcn36xx_cancel_hw_scan()
670 wcn->scan_aborted = true; in wcn36xx_cancel_hw_scan()
671 mutex_unlock(&wcn->scan_lock); in wcn36xx_cancel_hw_scan()
673 if (wcn36xx_firmware_get_feat_caps(wcn->fw_feat_caps, SCAN_OFFLOAD)) { in wcn36xx_cancel_hw_scan()
676 wcn36xx_smd_stop_hw_scan(wcn); in wcn36xx_cancel_hw_scan()
684 struct wcn36xx *wcn = hw->priv; in wcn36xx_sw_scan_start() local
689 wcn->sw_scan = true; in wcn36xx_sw_scan_start()
690 wcn->sw_scan_vif = vif; in wcn36xx_sw_scan_start()
691 wcn->sw_scan_channel = 0; in wcn36xx_sw_scan_start()
693 wcn->sw_scan_opchannel = WCN36XX_HW_CHANNEL(wcn); in wcn36xx_sw_scan_start()
695 wcn->sw_scan_opchannel = 0; in wcn36xx_sw_scan_start()
701 struct wcn36xx *wcn = hw->priv; in wcn36xx_sw_scan_complete() local
706 if (wcn->sw_scan_channel) in wcn36xx_sw_scan_complete()
707 wcn36xx_smd_end_scan(wcn, wcn->sw_scan_channel); in wcn36xx_sw_scan_complete()
708 if (wcn->sw_scan_init) { in wcn36xx_sw_scan_complete()
709 wcn36xx_smd_finish_scan(wcn, HAL_SYS_MODE_SCAN, in wcn36xx_sw_scan_complete()
710 wcn->sw_scan_vif); in wcn36xx_sw_scan_complete()
712 wcn->sw_scan = false; in wcn36xx_sw_scan_complete()
713 wcn->sw_scan_opchannel = 0; in wcn36xx_sw_scan_complete()
804 struct wcn36xx *wcn = hw->priv; in wcn36xx_bss_info_changed() local
813 mutex_lock(&wcn->conf_mutex); in wcn36xx_bss_info_changed()
830 wcn36xx_smd_set_link_st(wcn, bss_conf->bssid, vif->addr, in wcn36xx_bss_info_changed()
832 wcn36xx_smd_join(wcn, bss_conf->bssid, in wcn36xx_bss_info_changed()
833 vif->addr, WCN36XX_HW_CHANNEL(wcn)); in wcn36xx_bss_info_changed()
834 wcn36xx_smd_config_bss(wcn, vif, NULL, in wcn36xx_bss_info_changed()
838 wcn36xx_smd_delete_bss(wcn, vif); in wcn36xx_bss_info_changed()
839 wcn36xx_smd_set_link_st(wcn, bss_conf->bssid, vif->addr, in wcn36xx_bss_info_changed()
885 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn)); in wcn36xx_bss_info_changed()
887 wcn36xx_smd_set_link_st(wcn, bss_conf->bssid, in wcn36xx_bss_info_changed()
890 wcn36xx_smd_config_bss(wcn, vif, sta, in wcn36xx_bss_info_changed()
898 wcn36xx_smd_config_sta(wcn, vif, sta); in wcn36xx_bss_info_changed()
900 wcn36xx_smd_add_beacon_filter(wcn, vif); in wcn36xx_bss_info_changed()
901 wcn36xx_enable_keep_alive_null_packet(wcn, vif); in wcn36xx_bss_info_changed()
909 wcn36xx_smd_set_link_st(wcn, in wcn36xx_bss_info_changed()
924 wcn36xx_smd_update_proberesp_tmpl(wcn, vif, skb); in wcn36xx_bss_info_changed()
937 wcn36xx_smd_config_bss(wcn, vif, NULL, in wcn36xx_bss_info_changed()
945 wcn36xx_smd_send_beacon(wcn, vif, skb, tim_off, 0); in wcn36xx_bss_info_changed()
954 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr, in wcn36xx_bss_info_changed()
957 wcn36xx_smd_delete_bss(wcn, vif); in wcn36xx_bss_info_changed()
958 wcn36xx_smd_set_link_st(wcn, vif->addr, vif->addr, in wcn36xx_bss_info_changed()
964 mutex_unlock(&wcn->conf_mutex); in wcn36xx_bss_info_changed()
971 struct wcn36xx *wcn = hw->priv; in wcn36xx_set_rts_threshold() local
974 mutex_lock(&wcn->conf_mutex); in wcn36xx_set_rts_threshold()
975 wcn36xx_smd_update_cfg(wcn, WCN36XX_HAL_CFG_RTS_THRESHOLD, value); in wcn36xx_set_rts_threshold()
976 mutex_unlock(&wcn->conf_mutex); in wcn36xx_set_rts_threshold()
984 struct wcn36xx *wcn = hw->priv; in wcn36xx_remove_interface() local
988 mutex_lock(&wcn->conf_mutex); in wcn36xx_remove_interface()
991 wcn36xx_smd_delete_sta_self(wcn, vif->addr); in wcn36xx_remove_interface()
993 mutex_unlock(&wcn->conf_mutex); in wcn36xx_remove_interface()
999 struct wcn36xx *wcn = hw->priv; in wcn36xx_add_interface() local
1014 mutex_lock(&wcn->conf_mutex); in wcn36xx_add_interface()
1018 list_add(&vif_priv->list, &wcn->vif_list); in wcn36xx_add_interface()
1019 wcn36xx_smd_add_sta_self(wcn, vif); in wcn36xx_add_interface()
1021 mutex_unlock(&wcn->conf_mutex); in wcn36xx_add_interface()
1029 struct wcn36xx *wcn = hw->priv; in wcn36xx_sta_add() local
1035 mutex_lock(&wcn->conf_mutex); in wcn36xx_sta_add()
1046 wcn36xx_update_allowed_rates(sta, WCN36XX_BAND(wcn)); in wcn36xx_sta_add()
1048 wcn36xx_smd_config_sta(wcn, vif, sta); in wcn36xx_sta_add()
1051 mutex_unlock(&wcn->conf_mutex); in wcn36xx_sta_add()
1060 struct wcn36xx *wcn = hw->priv; in wcn36xx_sta_remove() local
1066 mutex_lock(&wcn->conf_mutex); in wcn36xx_sta_remove()
1069 wcn36xx_smd_delete_sta(wcn, sta_priv->sta_index); in wcn36xx_sta_remove()
1072 mutex_unlock(&wcn->conf_mutex); in wcn36xx_sta_remove()
1079 static struct ieee80211_vif *wcn36xx_get_first_assoc_vif(struct wcn36xx *wcn) in wcn36xx_get_first_assoc_vif() argument
1084 list_for_each_entry(vif_priv, &wcn->vif_list, list) { in wcn36xx_get_first_assoc_vif()
1095 struct wcn36xx *wcn = hw->priv; in wcn36xx_suspend() local
1101 mutex_lock(&wcn->conf_mutex); in wcn36xx_suspend()
1103 vif = wcn36xx_get_first_assoc_vif(wcn); in wcn36xx_suspend()
1105 ret = wcn36xx_smd_arp_offload(wcn, vif, true); in wcn36xx_suspend()
1108 ret = wcn36xx_smd_ipv6_ns_offload(wcn, vif, true); in wcn36xx_suspend()
1111 ret = wcn36xx_smd_gtk_offload(wcn, vif, true); in wcn36xx_suspend()
1114 ret = wcn36xx_smd_set_power_params(wcn, true); in wcn36xx_suspend()
1117 ret = wcn36xx_smd_wlan_host_suspend_ind(wcn); in wcn36xx_suspend()
1123 disable_irq(wcn->tx_irq); in wcn36xx_suspend()
1124 disable_irq(wcn->rx_irq); in wcn36xx_suspend()
1127 mutex_unlock(&wcn->conf_mutex); in wcn36xx_suspend()
1133 struct wcn36xx *wcn = hw->priv; in wcn36xx_resume() local
1138 mutex_lock(&wcn->conf_mutex); in wcn36xx_resume()
1139 vif = wcn36xx_get_first_assoc_vif(wcn); in wcn36xx_resume()
1141 wcn36xx_smd_host_resume(wcn); in wcn36xx_resume()
1142 wcn36xx_smd_set_power_params(wcn, false); in wcn36xx_resume()
1143 wcn36xx_smd_gtk_offload_get_info(wcn, vif); in wcn36xx_resume()
1144 wcn36xx_smd_gtk_offload(wcn, vif, false); in wcn36xx_resume()
1145 wcn36xx_smd_ipv6_ns_offload(wcn, vif, false); in wcn36xx_resume()
1146 wcn36xx_smd_arp_offload(wcn, vif, false); in wcn36xx_resume()
1149 enable_irq(wcn->tx_irq); in wcn36xx_resume()
1150 enable_irq(wcn->rx_irq); in wcn36xx_resume()
1152 mutex_unlock(&wcn->conf_mutex); in wcn36xx_resume()
1161 struct wcn36xx *wcn = hw->priv; in wcn36xx_set_rekey_data() local
1164 mutex_lock(&wcn->conf_mutex); in wcn36xx_set_rekey_data()
1172 mutex_unlock(&wcn->conf_mutex); in wcn36xx_set_rekey_data()
1181 struct wcn36xx *wcn = hw->priv; in wcn36xx_ampdu_action() local
1193 mutex_lock(&wcn->conf_mutex); in wcn36xx_ampdu_action()
1198 session = wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 0, in wcn36xx_ampdu_action()
1204 wcn36xx_smd_add_ba(wcn, session); in wcn36xx_ampdu_action()
1207 wcn36xx_smd_del_ba(wcn, tid, 0, get_sta_index(vif, sta_priv)); in wcn36xx_ampdu_action()
1216 wcn36xx_smd_trigger_ba(wcn, get_sta_index(vif, sta_priv), tid, ssn); in wcn36xx_ampdu_action()
1220 session = wcn36xx_smd_add_ba_session(wcn, sta, tid, ssn, 1, in wcn36xx_ampdu_action()
1241 wcn36xx_smd_del_ba(wcn, tid, 1, get_sta_index(vif, sta_priv)); in wcn36xx_ampdu_action()
1249 mutex_unlock(&wcn->conf_mutex); in wcn36xx_ampdu_action()
1285 struct wcn36xx *wcn = hw->priv; in wcn36xx_flush() local
1287 if (wcn36xx_dxe_tx_flush(wcn)) { in wcn36xx_flush()
1295 struct wcn36xx *wcn = hw->priv; in wcn36xx_get_survey() local
1301 sband = wcn->hw->wiphy->bands[NL80211_BAND_2GHZ]; in wcn36xx_get_survey()
1305 sband = wcn->hw->wiphy->bands[NL80211_BAND_5GHZ]; in wcn36xx_get_survey()
1311 spin_lock_irqsave(&wcn->survey_lock, flags); in wcn36xx_get_survey()
1313 chan_survey = &wcn->chan_survey[idx]; in wcn36xx_get_survey()
1321 if (survey->channel == wcn->channel) in wcn36xx_get_survey()
1324 spin_unlock_irqrestore(&wcn->survey_lock, flags); in wcn36xx_get_survey()
1338 struct wcn36xx *wcn; in wcn36xx_sta_statistics() local
1342 wcn = hw->priv; in wcn36xx_sta_statistics()
1344 status = wcn36xx_smd_get_stats(wcn, sta_index, HAL_GLOBAL_CLASS_A_STATS_INFO, sinfo); in wcn36xx_sta_statistics()
1418 static int wcn36xx_init_ieee80211(struct wcn36xx *wcn) in wcn36xx_init_ieee80211() argument
1427 ieee80211_hw_set(wcn->hw, TIMING_BEACON_ONLY); in wcn36xx_init_ieee80211()
1428 ieee80211_hw_set(wcn->hw, AMPDU_AGGREGATION); in wcn36xx_init_ieee80211()
1429 ieee80211_hw_set(wcn->hw, SUPPORTS_PS); in wcn36xx_init_ieee80211()
1430 ieee80211_hw_set(wcn->hw, SIGNAL_DBM); in wcn36xx_init_ieee80211()
1431 ieee80211_hw_set(wcn->hw, HAS_RATE_CONTROL); in wcn36xx_init_ieee80211()
1432 ieee80211_hw_set(wcn->hw, SINGLE_SCAN_ON_ALL_BANDS); in wcn36xx_init_ieee80211()
1433 ieee80211_hw_set(wcn->hw, REPORTS_TX_ACK_STATUS); in wcn36xx_init_ieee80211()
1435 wcn->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | in wcn36xx_init_ieee80211()
1440 wcn->hw->wiphy->bands[NL80211_BAND_2GHZ] = &wcn_band_2ghz; in wcn36xx_init_ieee80211()
1441 if (wcn->rf_id != RF_IRIS_WCN3620) in wcn36xx_init_ieee80211()
1442 wcn->hw->wiphy->bands[NL80211_BAND_5GHZ] = &wcn_band_5ghz; in wcn36xx_init_ieee80211()
1444 if (wcn->rf_id == RF_IRIS_WCN3680) in wcn36xx_init_ieee80211()
1447 wcn->hw->wiphy->max_scan_ssids = WCN36XX_MAX_SCAN_SSIDS; in wcn36xx_init_ieee80211()
1448 wcn->hw->wiphy->max_scan_ie_len = WCN36XX_MAX_SCAN_IE_LEN; in wcn36xx_init_ieee80211()
1450 wcn->hw->wiphy->cipher_suites = cipher_suites; in wcn36xx_init_ieee80211()
1451 wcn->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); in wcn36xx_init_ieee80211()
1454 wcn->hw->wiphy->wowlan = &wowlan_support; in wcn36xx_init_ieee80211()
1457 wcn->hw->max_listen_interval = 200; in wcn36xx_init_ieee80211()
1459 wcn->hw->queues = 4; in wcn36xx_init_ieee80211()
1461 SET_IEEE80211_DEV(wcn->hw, wcn->dev); in wcn36xx_init_ieee80211()
1463 wcn->hw->sta_data_size = sizeof(struct wcn36xx_sta); in wcn36xx_init_ieee80211()
1464 wcn->hw->vif_data_size = sizeof(struct wcn36xx_vif); in wcn36xx_init_ieee80211()
1466 wiphy_ext_feature_set(wcn->hw->wiphy, in wcn36xx_init_ieee80211()
1472 static int wcn36xx_platform_get_resources(struct wcn36xx *wcn, in wcn36xx_platform_get_resources() argument
1484 wcn->tx_irq = ret; in wcn36xx_platform_get_resources()
1490 wcn->rx_irq = ret; in wcn36xx_platform_get_resources()
1493 wcn->tx_enable_state = qcom_smem_state_get(&pdev->dev, in wcn36xx_platform_get_resources()
1494 "tx-enable", &wcn->tx_enable_state_bit); in wcn36xx_platform_get_resources()
1495 if (IS_ERR(wcn->tx_enable_state)) { in wcn36xx_platform_get_resources()
1497 return PTR_ERR(wcn->tx_enable_state); in wcn36xx_platform_get_resources()
1501 wcn->tx_rings_empty_state = qcom_smem_state_get(&pdev->dev, in wcn36xx_platform_get_resources()
1502 "tx-rings-empty", &wcn->tx_rings_empty_state_bit); in wcn36xx_platform_get_resources()
1503 if (IS_ERR(wcn->tx_rings_empty_state)) { in wcn36xx_platform_get_resources()
1505 return PTR_ERR(wcn->tx_rings_empty_state); in wcn36xx_platform_get_resources()
1514 wcn->is_pronto = !!of_device_is_compatible(mmio_node, "qcom,pronto"); in wcn36xx_platform_get_resources()
1515 wcn->is_pronto_v3 = !!of_device_is_compatible(mmio_node, "qcom,pronto-v3-pil"); in wcn36xx_platform_get_resources()
1519 wcn->ccu_base = of_iomap(mmio_node, index); in wcn36xx_platform_get_resources()
1520 if (!wcn->ccu_base) { in wcn36xx_platform_get_resources()
1528 wcn->dxe_base = of_iomap(mmio_node, index); in wcn36xx_platform_get_resources()
1529 if (!wcn->dxe_base) { in wcn36xx_platform_get_resources()
1539 wcn->rf_id = RF_IRIS_WCN3620; in wcn36xx_platform_get_resources()
1542 wcn->rf_id = RF_IRIS_WCN3660; in wcn36xx_platform_get_resources()
1544 wcn->rf_id = RF_IRIS_WCN3680; in wcn36xx_platform_get_resources()
1552 iounmap(wcn->ccu_base); in wcn36xx_platform_get_resources()
1561 struct wcn36xx *wcn; in wcn36xx_probe() local
1578 wcn = hw->priv; in wcn36xx_probe()
1579 wcn->hw = hw; in wcn36xx_probe()
1580 wcn->dev = &pdev->dev; in wcn36xx_probe()
1581 wcn->first_boot = true; in wcn36xx_probe()
1582 mutex_init(&wcn->conf_mutex); in wcn36xx_probe()
1583 mutex_init(&wcn->hal_mutex); in wcn36xx_probe()
1584 mutex_init(&wcn->scan_lock); in wcn36xx_probe()
1585 __skb_queue_head_init(&wcn->amsdu); in wcn36xx_probe()
1587 wcn->hal_buf = devm_kmalloc(wcn->dev, WCN36XX_HAL_BUF_SIZE, GFP_KERNEL); in wcn36xx_probe()
1588 if (!wcn->hal_buf) { in wcn36xx_probe()
1594 wcn->chan_survey = devm_kcalloc(wcn->dev, in wcn36xx_probe()
1598 if (!wcn->chan_survey) { in wcn36xx_probe()
1603 ret = dma_set_mask_and_coherent(wcn->dev, DMA_BIT_MASK(32)); in wcn36xx_probe()
1609 wcn->nv_file = WLAN_NV_FILE; in wcn36xx_probe()
1610 ret = of_property_read_string(wcn->dev->parent->of_node, "firmware-name", &wcn->nv_file); in wcn36xx_probe()
1616 wcn->smd_channel = qcom_wcnss_open_channel(wcnss, "WLAN_CTRL", wcn36xx_smd_rsp_process, hw); in wcn36xx_probe()
1617 if (IS_ERR(wcn->smd_channel)) { in wcn36xx_probe()
1619 ret = PTR_ERR(wcn->smd_channel); in wcn36xx_probe()
1630 SET_IEEE80211_PERM_ADDR(wcn->hw, addr); in wcn36xx_probe()
1633 ret = wcn36xx_platform_get_resources(wcn, pdev); in wcn36xx_probe()
1637 wcn36xx_init_ieee80211(wcn); in wcn36xx_probe()
1638 ret = ieee80211_register_hw(wcn->hw); in wcn36xx_probe()
1645 iounmap(wcn->ccu_base); in wcn36xx_probe()
1646 iounmap(wcn->dxe_base); in wcn36xx_probe()
1648 rpmsg_destroy_ept(wcn->smd_channel); in wcn36xx_probe()
1658 struct wcn36xx *wcn = hw->priv; in wcn36xx_remove() local
1661 release_firmware(wcn->nv); in wcn36xx_remove()
1665 qcom_smem_state_put(wcn->tx_enable_state); in wcn36xx_remove()
1666 qcom_smem_state_put(wcn->tx_rings_empty_state); in wcn36xx_remove()
1668 rpmsg_destroy_ept(wcn->smd_channel); in wcn36xx_remove()
1670 iounmap(wcn->dxe_base); in wcn36xx_remove()
1671 iounmap(wcn->ccu_base); in wcn36xx_remove()
1673 __skb_queue_purge(&wcn->amsdu); in wcn36xx_remove()
1675 mutex_destroy(&wcn->hal_mutex); in wcn36xx_remove()