|
@@ -2755,57 +2755,6 @@ struct ath6kl *ath6kl_core_alloc(struct device *dev)
|
|
|
return ar;
|
|
|
}
|
|
|
|
|
|
-int ath6kl_register_ieee80211_hw(struct ath6kl *ar)
|
|
|
-{
|
|
|
- struct wiphy *wiphy = ar->wiphy;
|
|
|
- int ret;
|
|
|
-
|
|
|
- wiphy->mgmt_stypes = ath6kl_mgmt_stypes;
|
|
|
-
|
|
|
- wiphy->max_remain_on_channel_duration = 5000;
|
|
|
-
|
|
|
- /* set device pointer for wiphy */
|
|
|
- set_wiphy_dev(wiphy, ar->dev);
|
|
|
-
|
|
|
- wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
|
|
- BIT(NL80211_IFTYPE_ADHOC) |
|
|
|
- BIT(NL80211_IFTYPE_AP);
|
|
|
- if (ar->p2p) {
|
|
|
- wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_GO) |
|
|
|
- BIT(NL80211_IFTYPE_P2P_CLIENT);
|
|
|
- }
|
|
|
-
|
|
|
- /* max num of ssids that can be probed during scanning */
|
|
|
- wiphy->max_scan_ssids = MAX_PROBED_SSID_INDEX;
|
|
|
- wiphy->max_scan_ie_len = 1000; /* FIX: what is correct limit? */
|
|
|
- wiphy->bands[IEEE80211_BAND_2GHZ] = &ath6kl_band_2ghz;
|
|
|
- wiphy->bands[IEEE80211_BAND_5GHZ] = &ath6kl_band_5ghz;
|
|
|
- wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
|
|
|
-
|
|
|
- wiphy->cipher_suites = cipher_suites;
|
|
|
- wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
|
|
-
|
|
|
- wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
|
|
|
- WIPHY_WOWLAN_DISCONNECT |
|
|
|
- WIPHY_WOWLAN_GTK_REKEY_FAILURE |
|
|
|
- WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
|
|
|
- WIPHY_WOWLAN_EAP_IDENTITY_REQ |
|
|
|
- WIPHY_WOWLAN_4WAY_HANDSHAKE;
|
|
|
- wiphy->wowlan.n_patterns = WOW_MAX_FILTERS_PER_LIST;
|
|
|
- wiphy->wowlan.pattern_min_len = 1;
|
|
|
- wiphy->wowlan.pattern_max_len = WOW_PATTERN_SIZE;
|
|
|
-
|
|
|
- wiphy->max_sched_scan_ssids = 10;
|
|
|
-
|
|
|
- ret = wiphy_register(wiphy);
|
|
|
- if (ret < 0) {
|
|
|
- ath6kl_err("couldn't register wiphy device\n");
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int ath6kl_cfg80211_vif_init(struct ath6kl_vif *vif)
|
|
|
{
|
|
|
vif->aggr_cntxt = aggr_init(vif->ndev);
|
|
@@ -2907,8 +2856,64 @@ err:
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-void ath6kl_deinit_ieee80211_hw(struct ath6kl *ar)
|
|
|
+int ath6kl_cfg80211_init(struct ath6kl *ar)
|
|
|
+{
|
|
|
+ struct wiphy *wiphy = ar->wiphy;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ wiphy->mgmt_stypes = ath6kl_mgmt_stypes;
|
|
|
+
|
|
|
+ wiphy->max_remain_on_channel_duration = 5000;
|
|
|
+
|
|
|
+ /* set device pointer for wiphy */
|
|
|
+ set_wiphy_dev(wiphy, ar->dev);
|
|
|
+
|
|
|
+ wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
|
|
+ BIT(NL80211_IFTYPE_ADHOC) |
|
|
|
+ BIT(NL80211_IFTYPE_AP);
|
|
|
+ if (ar->p2p) {
|
|
|
+ wiphy->interface_modes |= BIT(NL80211_IFTYPE_P2P_GO) |
|
|
|
+ BIT(NL80211_IFTYPE_P2P_CLIENT);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* max num of ssids that can be probed during scanning */
|
|
|
+ wiphy->max_scan_ssids = MAX_PROBED_SSID_INDEX;
|
|
|
+ wiphy->max_scan_ie_len = 1000; /* FIX: what is correct limit? */
|
|
|
+ wiphy->bands[IEEE80211_BAND_2GHZ] = &ath6kl_band_2ghz;
|
|
|
+ wiphy->bands[IEEE80211_BAND_5GHZ] = &ath6kl_band_5ghz;
|
|
|
+ wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
|
|
|
+
|
|
|
+ wiphy->cipher_suites = cipher_suites;
|
|
|
+ wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
|
|
+
|
|
|
+ wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT |
|
|
|
+ WIPHY_WOWLAN_DISCONNECT |
|
|
|
+ WIPHY_WOWLAN_GTK_REKEY_FAILURE |
|
|
|
+ WIPHY_WOWLAN_SUPPORTS_GTK_REKEY |
|
|
|
+ WIPHY_WOWLAN_EAP_IDENTITY_REQ |
|
|
|
+ WIPHY_WOWLAN_4WAY_HANDSHAKE;
|
|
|
+ wiphy->wowlan.n_patterns = WOW_MAX_FILTERS_PER_LIST;
|
|
|
+ wiphy->wowlan.pattern_min_len = 1;
|
|
|
+ wiphy->wowlan.pattern_max_len = WOW_PATTERN_SIZE;
|
|
|
+
|
|
|
+ wiphy->max_sched_scan_ssids = 10;
|
|
|
+
|
|
|
+ ret = wiphy_register(wiphy);
|
|
|
+ if (ret < 0) {
|
|
|
+ ath6kl_err("couldn't register wiphy device\n");
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+void ath6kl_cfg80211_cleanup(struct ath6kl *ar)
|
|
|
{
|
|
|
wiphy_unregister(ar->wiphy);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * FIXME: should be removed as we remove wiphy in
|
|
|
+ * ath6kl_core_free(). Most likely this causes a use after free.
|
|
|
+ */
|
|
|
wiphy_free(ar->wiphy);
|
|
|
}
|