Lines Matching refs:ar

147 	struct ath6kl *ar = vif->ar;
154 if (ar->state == ATH6KL_STATE_RECOVERY)
157 ath6kl_wmi_enable_sched_scan_cmd(ar->wmi, vif->fw_vif_idx, false);
164 struct ath6kl *ar = vif->ar;
172 cfg80211_sched_scan_stopped(ar->wiphy, 0);
286 struct ath6kl *ar = vif->ar;
288 if (!test_bit(WMI_READY, &ar->flag)) {
324 struct ath6kl *ar = vif->ar;
334 ar->connect_ctrl_flags &= ~CONNECT_WPS_FLAG;
355 ar->connect_ctrl_flags |= CONNECT_WPS_FLAG;
361 ret = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
389 static bool ath6kl_is_valid_iftype(struct ath6kl *ar, enum nl80211_iftype type,
397 if (ar->ibss_if_active || ((type == NL80211_IFTYPE_ADHOC) &&
398 ar->num_vif))
403 for (i = 0; i < ar->vif_max; i++) {
404 if ((ar->avail_idx_map) & BIT(i)) {
413 for (i = ar->max_norm_iface; i < ar->vif_max; i++) {
414 if ((ar->avail_idx_map) & BIT(i)) {
424 static bool ath6kl_is_tx_pending(struct ath6kl *ar)
426 return ar->tx_pending[ath6kl_wmi_get_control_ep(ar->wmi)] == 0;
434 if (WARN_ON(!test_bit(WMI_READY, &vif->ar->flag)))
441 vif->ar->fw_capabilities))
447 err = ath6kl_wmi_sta_bmiss_enhance_cmd(vif->ar->wmi,
457 struct ath6kl *ar = ath6kl_priv(dev);
460 u8 nw_subtype = (ar->p2p) ? SUBTYPE_P2PDEV : SUBTYPE_NONE;
470 if (test_bit(DESTROY_IN_PROGRESS, &ar->flag)) {
475 if (test_bit(SKIP_SCAN, &ar->flag) &&
482 if (down_interruptible(&ar->sem)) {
487 if (test_bit(DESTROY_IN_PROGRESS, &ar->flag)) {
489 up(&ar->sem);
493 if (ar->tx_pending[ath6kl_wmi_get_control_ep(ar->wmi)]) {
497 wait_event_interruptible_timeout(ar->event_wq,
498 ath6kl_is_tx_pending(ar),
502 up(&ar->sem);
509 up(&ar->sem);
514 ar->connect_ctrl_flags &= ~CONNECT_WPS_FLAG;
520 status = ath6kl_wmi_reconnect_cmd(ar->wmi, vif->fw_vif_idx,
524 up(&ar->sem);
550 up(&ar->sem);
572 up(&ar->sem);
582 ath6kl_wmi_addkey_cmd(ar->wmi, vif->fw_vif_idx, sme->key_idx,
591 if (!ar->usr_bss_filter) {
593 if (ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,
596 up(&ar->sem);
623 status = ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx,
628 up(&ar->sem);
633 status = ath6kl_wmi_connect_cmd(ar->wmi, vif->fw_vif_idx, vif->nw_type,
640 ar->connect_ctrl_flags, nw_subtype);
650 ath6kl_wmi_scanparams_cmd(ar->wmi, vif->fw_vif_idx, 0, 0,
653 up(&ar->sem);
665 if ((!(ar->connect_ctrl_flags & CONNECT_DO_WPA_OFFLOAD)) &&
672 ar->connect_ctrl_flags &= ~CONNECT_DO_WPA_OFFLOAD;
686 struct ath6kl *ar = vif->ar;
700 bss = cfg80211_get_bss(ar->wiphy, chan, bssid,
719 bss = cfg80211_inform_bss(ar->wiphy, chan,
743 struct ath6kl *ar = vif->ar;
783 chan = ieee80211_get_channel(ar->wiphy, (int) channel);
796 cfg80211_put_bss(ar->wiphy, bss);
807 cfg80211_put_bss(ar->wiphy, bss);
824 struct ath6kl *ar = ath6kl_priv(dev);
835 if (test_bit(DESTROY_IN_PROGRESS, &ar->flag)) {
840 if (down_interruptible(&ar->sem)) {
850 if (!test_bit(SKIP_SCAN, &ar->flag))
853 up(&ar->sem);
862 struct ath6kl *ar = vif->ar;
913 ath6kl_wmi_disconnect_cmd(ar->wmi, vif->fw_vif_idx);
916 static int ath6kl_set_probed_ssids(struct ath6kl *ar,
942 if (ar->wiphy->max_match_sets != 0 && n_match_ssid == 0)
979 ath6kl_wmi_probedssid_cmd(ar->wmi, vif->fw_vif_idx, i,
987 ath6kl_wmi_probedssid_cmd(ar->wmi, vif->fw_vif_idx, i,
998 struct ath6kl *ar = ath6kl_priv(vif->ndev);
1009 if (!ar->usr_bss_filter) {
1011 ret = ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,
1019 ret = ath6kl_set_probed_ssids(ar, vif, request->ssids,
1025 ret = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
1059 ret = ath6kl_wmi_beginscan_cmd(ar->wmi, vif->fw_vif_idx,
1078 struct ath6kl *ar = vif->ar;
1095 ath6kl_wmi_probedssid_cmd(ar->wmi, vif->fw_vif_idx,
1116 ieee80211_get_channel(vif->ar->wiphy, freq),
1121 wiphy_lock(vif->ar->wiphy);
1123 wiphy_unlock(vif->ar->wiphy);
1131 struct ath6kl *ar = ath6kl_priv(ndev);
1144 return ath6kl_wmi_add_krk_cmd(ar->wmi, vif->fw_vif_idx,
1213 ar->ap_mode_bkey.valid = true;
1214 ar->ap_mode_bkey.key_index = key_index;
1215 ar->ap_mode_bkey.key_type = key_type;
1216 ar->ap_mode_bkey.key_len = key->key_len;
1217 memcpy(ar->ap_mode_bkey.key, key->key, key->key_len);
1244 return ath6kl_wmi_addkey_cmd(ar->wmi, vif->fw_vif_idx, key_index,
1255 struct ath6kl *ar = ath6kl_priv(ndev);
1278 return ath6kl_wmi_deletekey_cmd(ar->wmi, vif->fw_vif_idx, key_index);
1321 struct ath6kl *ar = ath6kl_priv(ndev);
1358 return ath6kl_wmi_addkey_cmd(ar->wmi, vif->fw_vif_idx,
1381 struct ath6kl *ar = (struct ath6kl *)wiphy_priv(wiphy);
1388 vif = ath6kl_vif_first(ar);
1396 ret = ath6kl_wmi_set_rts_cmd(ar->wmi, wiphy->rts_threshold);
1411 struct ath6kl *ar = (struct ath6kl *)wiphy_priv(wiphy);
1418 vif = ath6kl_vif_first(ar);
1429 ar->tx_pwr = dbm;
1437 ath6kl_wmi_set_tx_pwr_cmd(ar->wmi, vif->fw_vif_idx, dbm);
1446 struct ath6kl *ar = (struct ath6kl *)wiphy_priv(wiphy);
1449 vif = ath6kl_vif_first(ar);
1457 ar->tx_pwr = 255;
1459 if (ath6kl_wmi_get_tx_pwr_cmd(ar->wmi, vif->fw_vif_idx) != 0) {
1464 wait_event_interruptible_timeout(ar->event_wq, ar->tx_pwr != 255,
1473 *dbm = ar->tx_pwr;
1481 struct ath6kl *ar = ath6kl_priv(dev);
1499 if (ath6kl_wmi_powermode_cmd(ar->wmi, vif->fw_vif_idx,
1514 struct ath6kl *ar = wiphy_priv(wiphy);
1518 if (ar->num_vif == ar->vif_max) {
1523 if (!ath6kl_is_valid_iftype(ar, type, &if_idx, &nw_type)) {
1528 wdev = ath6kl_interface_add(ar, name, name_assign_type, type, if_idx, nw_type);
1532 ar->num_vif++;
1540 struct ath6kl *ar = wiphy_priv(wiphy);
1543 spin_lock_bh(&ar->list_lock);
1545 spin_unlock_bh(&ar->list_lock);
1547 ath6kl_cfg80211_vif_stop(vif, test_bit(WMI_READY, &ar->flag));
1572 vif->ar->fw_capabilities) &&
1575 if (vif->ar->vif_max == 1) {
1582 for (i = vif->ar->max_norm_iface; i < vif->ar->vif_max; i++) {
1587 if (i == vif->ar->vif_max) {
1623 struct ath6kl *ar = ath6kl_priv(dev);
1676 status = ath6kl_wmi_connect_cmd(ar->wmi, vif->fw_vif_idx, vif->nw_type,
1683 ar->connect_ctrl_flags, SUBTYPE_NONE);
1777 struct ath6kl *ar = ath6kl_priv(dev);
1788 if (down_interruptible(&ar->sem))
1793 ret = ath6kl_wmi_get_stats_cmd(ar->wmi, vif->fw_vif_idx);
1796 up(&ar->sem);
1800 left = wait_event_interruptible_timeout(ar->event_wq,
1805 up(&ar->sem);
1856 ath6kl_debug_war(ar, ATH6KL_WAR_INVALID_RATE);
1877 struct ath6kl *ar = ath6kl_priv(netdev);
1880 return ath6kl_wmi_setpmkid_cmd(ar->wmi, vif->fw_vif_idx, pmksa->bssid,
1887 struct ath6kl *ar = ath6kl_priv(netdev);
1890 return ath6kl_wmi_setpmkid_cmd(ar->wmi, vif->fw_vif_idx, pmksa->bssid,
1896 struct ath6kl *ar = ath6kl_priv(netdev);
1900 return ath6kl_wmi_setpmkid_cmd(ar->wmi, vif->fw_vif_idx,
1905 static int ath6kl_wow_usr(struct ath6kl *ar, struct ath6kl_vif *vif,
1933 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
1960 static int ath6kl_wow_ap(struct ath6kl *ar, struct ath6kl_vif *vif)
1993 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2003 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2016 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2026 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2038 static int ath6kl_wow_sta(struct ath6kl *ar, struct ath6kl_vif *vif)
2049 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2064 ret = ath6kl_wmi_add_wow_pattern_cmd(ar->wmi,
2082 static bool is_ctrl_ep_empty(struct ath6kl *ar)
2084 return !ar->tx_pending[ar->ctrl_ep];
2087 static int ath6kl_cfg80211_host_sleep(struct ath6kl *ar, struct ath6kl_vif *vif)
2093 ret = ath6kl_wmi_set_host_sleep_mode_cmd(ar->wmi, vif->fw_vif_idx,
2098 left = wait_event_interruptible_timeout(ar->event_wq,
2110 if (ar->tx_pending[ar->ctrl_ep]) {
2111 left = wait_event_interruptible_timeout(ar->event_wq,
2112 is_ctrl_ep_empty(ar),
2129 struct ath6kl *ar = vif->ar;
2139 ar->fw_capabilities)) {
2140 ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
2148 ath6kl_wmi_del_wow_pattern_cmd(ar->wmi, vif->fw_vif_idx,
2157 ret = ath6kl_wow_usr(ar, vif, wow, filter);
2159 ret = ath6kl_wow_ap(ar, vif);
2161 ret = ath6kl_wow_sta(ar, vif);
2169 ret = ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx,
2180 ret = ath6kl_wmi_bmisstime_cmd(ar->wmi, vif->fw_vif_idx,
2185 ret = ath6kl_wmi_scanparams_cmd(ar->wmi, vif->fw_vif_idx,
2212 ret = ath6kl_wmi_set_ip_cmd(ar->wmi, vif->fw_vif_idx, ips[0], ips[1]);
2221 static int ath6kl_wow_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
2229 first_vif = ath6kl_vif_first(ar);
2238 spin_lock_bh(&ar->list_lock);
2239 list_for_each_entry(vif, &ar->vif_list, list) {
2249 spin_unlock_bh(&ar->list_lock);
2256 ar->state = ATH6KL_STATE_SUSPENDING;
2258 ret = ath6kl_wmi_set_wow_mode_cmd(ar->wmi, first_vif->fw_vif_idx,
2265 return ath6kl_cfg80211_host_sleep(ar, first_vif);
2270 struct ath6kl *ar = vif->ar;
2274 ret = ath6kl_wmi_scanparams_cmd(ar->wmi, vif->fw_vif_idx,
2279 ret = ath6kl_wmi_listeninterval_cmd(ar->wmi, vif->fw_vif_idx,
2284 ret = ath6kl_wmi_bmisstime_cmd(ar->wmi, vif->fw_vif_idx,
2292 ar->fw_capabilities)) {
2293 ret = ath6kl_wmi_mcast_filter_cmd(vif->ar->wmi,
2304 static int ath6kl_wow_resume(struct ath6kl *ar)
2309 vif = ath6kl_vif_first(ar);
2314 ar->state = ATH6KL_STATE_RESUMING;
2316 ret = ath6kl_wmi_set_host_sleep_mode_cmd(ar->wmi, vif->fw_vif_idx,
2324 spin_lock_bh(&ar->list_lock);
2325 list_for_each_entry(vif, &ar->vif_list, list) {
2333 spin_unlock_bh(&ar->list_lock);
2338 ar->state = ATH6KL_STATE_ON;
2342 ar->state = ATH6KL_STATE_WOW;
2346 static int ath6kl_cfg80211_deepsleep_suspend(struct ath6kl *ar)
2351 vif = ath6kl_vif_first(ar);
2355 if (!test_bit(WMI_READY, &ar->flag)) {
2360 ath6kl_cfg80211_stop_all(ar);
2363 ar->wmi->saved_pwr_mode = ar->wmi->pwr_mode;
2365 ret = ath6kl_wmi_powermode_cmd(ar->wmi, 0, REC_POWER);
2370 ret = ath6kl_wmi_set_wow_mode_cmd(ar->wmi, vif->fw_vif_idx,
2377 ath6kl_tx_data_cleanup(ar);
2379 ret = ath6kl_cfg80211_host_sleep(ar, vif);
2386 static int ath6kl_cfg80211_deepsleep_resume(struct ath6kl *ar)
2391 vif = ath6kl_vif_first(ar);
2396 if (ar->wmi->pwr_mode != ar->wmi->saved_pwr_mode) {
2397 ret = ath6kl_wmi_powermode_cmd(ar->wmi, 0,
2398 ar->wmi->saved_pwr_mode);
2403 ret = ath6kl_wmi_set_host_sleep_mode_cmd(ar->wmi, vif->fw_vif_idx,
2408 ar->state = ATH6KL_STATE_ON;
2411 ret = ath6kl_wmi_scanparams_cmd(ar->wmi, vif->fw_vif_idx,
2419 int ath6kl_cfg80211_suspend(struct ath6kl *ar,
2433 ath6kl_tx_data_cleanup(ar);
2435 prev_state = ar->state;
2437 ret = ath6kl_wow_suspend(ar, wow);
2439 ar->state = prev_state;
2443 ar->state = ATH6KL_STATE_WOW;
2450 ret = ath6kl_cfg80211_deepsleep_suspend(ar);
2456 ar->state = ATH6KL_STATE_DEEPSLEEP;
2462 ath6kl_cfg80211_stop_all(ar);
2464 if (ar->state == ATH6KL_STATE_OFF) {
2472 ret = ath6kl_init_hw_stop(ar);
2478 ar->state = ATH6KL_STATE_CUTPOWER;
2486 list_for_each_entry(vif, &ar->vif_list, list)
2493 int ath6kl_cfg80211_resume(struct ath6kl *ar)
2497 switch (ar->state) {
2501 ret = ath6kl_wow_resume(ar);
2512 ret = ath6kl_cfg80211_deepsleep_resume(ar);
2522 ret = ath6kl_init_hw_start(ar);
2543 struct ath6kl *ar = wiphy_priv(wiphy);
2545 ath6kl_recovery_suspend(ar);
2547 return ath6kl_hif_suspend(ar, wow);
2552 struct ath6kl *ar = wiphy_priv(wiphy);
2555 err = ath6kl_hif_resume(ar);
2559 ath6kl_recovery_resume(ar);
2580 void ath6kl_check_wow_status(struct ath6kl *ar)
2582 if (ar->state == ATH6KL_STATE_SUSPENDING)
2585 if (ar->state == ATH6KL_STATE_WOW)
2586 ath6kl_cfg80211_resume(ar);
2591 void ath6kl_check_wow_status(struct ath6kl *ar)
2613 return ath6kl_wmi_set_htcap_cmd(vif->ar->wmi, vif->fw_vif_idx,
2619 struct wiphy *wiphy = vif->ar->wiphy;
2645 struct ath6kl *ar = vif->ar;
2672 ret = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
2681 struct ath6kl *ar = vif->ar;
2685 res = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
2699 res = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
2764 struct ath6kl *ar = ath6kl_priv(dev);
2785 ar->ap_mode_bkey.valid = false;
2787 ret = ath6kl_wmi_ap_set_beacon_intvl_cmd(ar->wmi, vif->fw_vif_idx,
2793 ret = ath6kl_wmi_ap_set_dtim_cmd(ar->wmi, vif->fw_vif_idx,
2814 res = ath6kl_wmi_ap_hidden_ssid(ar->wmi, vif->fw_vif_idx, hidden);
2897 res = ath6kl_wmi_ap_set_apsd(ar->wmi, vif->fw_vif_idx, true);
2915 ar->fw_capabilities))
2919 res = ath6kl_wmi_set_inact_period(ar->wmi, vif->fw_vif_idx,
2938 ar->fw_capabilities)) {
2939 res = ath6kl_wmi_set_ie_cmd(ar->wmi, vif->fw_vif_idx,
2949 res = ath6kl_wmi_ap_profile_commit(ar->wmi, vif->fw_vif_idx, &p);
2973 struct ath6kl *ar = ath6kl_priv(dev);
2981 ath6kl_wmi_disconnect_cmd(ar->wmi, vif->fw_vif_idx);
2994 struct ath6kl *ar = ath6kl_priv(dev);
2998 return ath6kl_wmi_ap_set_mlme(ar->wmi, vif->fw_vif_idx, WMI_AP_DEAUTH,
3006 struct ath6kl *ar = ath6kl_priv(dev);
3019 return ath6kl_wmi_ap_set_mlme(ar->wmi, vif->fw_vif_idx,
3021 return ath6kl_wmi_ap_set_mlme(ar->wmi, vif->fw_vif_idx,
3032 struct ath6kl *ar = ath6kl_priv(vif->ndev);
3044 return ath6kl_wmi_remain_on_chnl_cmd(ar->wmi, vif->fw_vif_idx,
3053 struct ath6kl *ar = ath6kl_priv(vif->ndev);
3059 return ath6kl_wmi_cancel_remain_on_chnl_cmd(ar->wmi, vif->fw_vif_idx);
3066 struct ath6kl *ar = vif->ar;
3093 ret = ath6kl_wmi_send_probe_response_cmd(ar->wmi, vif->fw_vif_idx, freq,
3113 struct ath6kl *ar = vif->ar;
3151 ath6kl_wmi_set_pvb_cmd(ar->wmi, vif->fw_vif_idx,
3188 struct ath6kl *ar = ath6kl_priv(vif->ndev);
3240 return ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx, id, freq,
3247 struct ath6kl *ar = wiphy_priv(wiphy);
3248 *tx_ant = ar->hw.tx_ant;
3249 *rx_ant = ar->hw.rx_ant;
3272 struct ath6kl *ar = ath6kl_priv(dev);
3286 if (ar->state != ATH6KL_STATE_ON)
3294 ret = ath6kl_set_probed_ssids(ar, vif, request->ssids,
3302 ret = ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,
3307 ret = ath6kl_wmi_bssfilter_cmd(ar->wmi, vif->fw_vif_idx,
3314 ar->fw_capabilities)) {
3322 ret = ath6kl_wmi_set_rssi_filter_cmd(ar->wmi, vif->fw_vif_idx,
3333 ath6kl_wmi_scanparams_cmd(ar->wmi, vif->fw_vif_idx,
3338 ret = ath6kl_wmi_set_appie_cmd(ar->wmi, vif->fw_vif_idx,
3347 ret = ath6kl_wmi_enable_sched_scan_cmd(ar->wmi, vif->fw_vif_idx, true);
3376 struct ath6kl *ar = ath6kl_priv(dev);
3379 return ath6kl_wmi_set_bitrate_mask(ar->wmi, vif->fw_vif_idx,
3387 struct ath6kl *ar = ath6kl_priv(dev);
3391 !test_bit(ATH6KL_FW_CAPABILITY_TX_ERR_NOTIFY, ar->fw_capabilities))
3400 return ath6kl_wmi_set_txe_notify(ar->wmi, vif->fw_vif_idx,
3493 if (vif->ar->state != ATH6KL_STATE_RECOVERY &&
3496 ath6kl_wmi_disconnect_cmd(vif->ar->wmi, vif->fw_vif_idx);
3507 if (vif->ar->state != ATH6KL_STATE_RECOVERY &&
3508 ath6kl_wmi_scanparams_cmd(vif->ar->wmi, vif->fw_vif_idx, 0xFFFF,
3515 void ath6kl_cfg80211_stop_all(struct ath6kl *ar)
3519 vif = ath6kl_vif_first(ar);
3520 if (!vif && ar->state != ATH6KL_STATE_RECOVERY) {
3522 ar->wmi->saved_pwr_mode = ar->wmi->pwr_mode;
3524 if (ath6kl_wmi_powermode_cmd(ar->wmi, 0, REC_POWER) != 0)
3530 * FIXME: we should take ar->list_lock to protect changes in the
3534 list_for_each_entry(vif, &ar->vif_list, list)
3541 struct ath6kl *ar = wiphy_priv(wiphy);
3555 ret = ath6kl_wmi_set_regdomain_cmd(ar->wmi, request->alpha2);
3572 ret = ath6kl_wmi_beginscan_cmd(ar->wmi, 0, WMI_LONG_SCAN, false,
3638 struct ath6kl *ar = vif->ar;
3643 ar->avail_idx_map |= BIT(vif->fw_vif_idx);
3646 ar->ibss_if_active = false;
3655 ar->num_vif--;
3702 struct ath6kl *ar = vif->ar;
3708 ath6kl_read_tgt_stats(ar, vif);
3779 struct wireless_dev *ath6kl_interface_add(struct ath6kl *ar, const char *name,
3794 vif->wdev.wiphy = ar->wiphy;
3795 vif->ar = ar;
3809 ether_addr_copy(addr, ar->mac_addr);
3813 ar->fw_capabilities))
3830 ar->avail_idx_map &= ~BIT(fw_vif_idx);
3833 ar->wlan_pwr_state = WLAN_POWER_STATE_ON;
3836 ar->ibss_if_active = true;
3838 spin_lock_bh(&ar->list_lock);
3839 list_add_tail(&vif->list, &ar->vif_list);
3840 spin_unlock_bh(&ar->list_lock);
3864 int ath6kl_cfg80211_init(struct ath6kl *ar)
3866 struct wiphy *wiphy = ar->wiphy;
3875 set_wiphy_dev(wiphy, ar->dev);
3880 if (ar->p2p) {
3886 test_bit(ATH6KL_FW_CAPABILITY_REGDOMAIN, ar->fw_capabilities)) {
3888 ar->wiphy->features |= NL80211_FEATURE_CELL_BASE_REG_HINTS;
3896 ar->fw_capabilities))
3900 switch (ar->hw.cap) {
3932 ar->fw_capabilities))) {
3943 ar->fw_capabilities)) {
3948 ar->hw.tx_ant = 0x3; /* mask, 2 antenna */
3949 ar->hw.rx_ant = 0x3;
3953 ar->hw.tx_ant = 1;
3954 ar->hw.rx_ant = 1;
3957 wiphy->available_antennas_tx = ar->hw.tx_ant;
3958 wiphy->available_antennas_rx = ar->hw.rx_ant;
3976 ar->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM |
3981 if (test_bit(ATH6KL_FW_CAPABILITY_SCHED_SCAN_V2, ar->fw_capabilities))
3982 ar->wiphy->max_sched_scan_reqs = 1;
3985 ar->fw_capabilities))
3986 ar->wiphy->features |= NL80211_FEATURE_INACTIVITY_TIMER;
3988 ar->wiphy->probe_resp_offload =
3999 ar->wiphy_registered = true;
4004 void ath6kl_cfg80211_cleanup(struct ath6kl *ar)
4006 wiphy_unregister(ar->wiphy);
4008 ar->wiphy_registered = false;
4013 struct ath6kl *ar;
4024 ar = wiphy_priv(wiphy);
4025 ar->wiphy = wiphy;
4027 return ar;
4030 /* Note: ar variable must not be accessed after calling this! */
4031 void ath6kl_cfg80211_destroy(struct ath6kl *ar)
4036 kfree(ar->sta_list[i].aggr_conn);
4038 wiphy_free(ar->wiphy);