mac80211: set short_slot for 6 GHz band
[linux-2.6-microblaze.git] / net / mac80211 / cfg.c
index ae3e063..9b36054 100644 (file)
@@ -994,7 +994,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
                      BSS_CHANGED_TWT |
                      BSS_CHANGED_HE_OBSS_PD |
                      BSS_CHANGED_HE_BSS_COLOR;
-       int err;
+       int i, err;
        int prev_beacon_int;
 
        old = sdata_dereference(sdata->u.ap.beacon, sdata);
@@ -1085,6 +1085,17 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
                sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
                                        IEEE80211_P2P_OPPPS_ENABLE_BIT;
 
+       sdata->beacon_rate_set = false;
+       if (wiphy_ext_feature_isset(local->hw.wiphy,
+                                   NL80211_EXT_FEATURE_BEACON_RATE_LEGACY)) {
+               for (i = 0; i < NUM_NL80211_BANDS; i++) {
+                       sdata->beacon_rateidx_mask[i] =
+                               params->beacon_rate.control[i].legacy;
+                       if (sdata->beacon_rateidx_mask[i])
+                               sdata->beacon_rate_set = true;
+               }
+       }
+
        err = ieee80211_assign_beacon(sdata, &params->beacon, NULL);
        if (err < 0) {
                ieee80211_vif_release_channel(sdata);
@@ -1189,6 +1200,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev)
        ieee80211_free_keys(sdata, true);
 
        sdata->vif.bss_conf.enable_beacon = false;
+       sdata->beacon_rate_set = false;
        sdata->vif.bss_conf.ssid_len = 0;
        clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state);
        ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
@@ -1508,7 +1520,9 @@ static int sta_apply_parameters(struct ieee80211_local *local,
        if (params->he_capa)
                ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
                                                  (void *)params->he_capa,
-                                                 params->he_capa_len, sta);
+                                                 params->he_capa_len,
+                                                 (void *)params->he_6ghz_capa,
+                                                 sta);
 
        if (params->opmode_notif_used) {
                /* returned value is only needed for rc update, but the
@@ -1949,6 +1963,7 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
        const u8 *old_ie;
        struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
                                        struct ieee80211_sub_if_data, u.mesh);
+       int i;
 
        /* allocate information elements */
        new_ie = NULL;
@@ -1987,6 +2002,17 @@ static int copy_mesh_setup(struct ieee80211_if_mesh *ifmsh,
        sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
        sdata->vif.bss_conf.dtim_period = setup->dtim_period;
 
+       sdata->beacon_rate_set = false;
+       if (wiphy_ext_feature_isset(sdata->local->hw.wiphy,
+                                   NL80211_EXT_FEATURE_BEACON_RATE_LEGACY)) {
+               for (i = 0; i < NUM_NL80211_BANDS; i++) {
+                       sdata->beacon_rateidx_mask[i] =
+                               setup->beacon_rate.control[i].legacy;
+                       if (sdata->beacon_rateidx_mask[i])
+                               sdata->beacon_rate_set = true;
+               }
+       }
+
        return 0;
 }
 
@@ -2172,7 +2198,8 @@ static int ieee80211_change_bss(struct wiphy *wiphy,
        }
 
        if (!sdata->vif.bss_conf.use_short_slot &&
-           sband->band == NL80211_BAND_5GHZ) {
+           (sband->band == NL80211_BAND_5GHZ ||
+            sband->band == NL80211_BAND_6GHZ)) {
                sdata->vif.bss_conf.use_short_slot = true;
                changed |= BSS_CHANGED_ERP_SLOT;
        }
@@ -3933,7 +3960,7 @@ static int ieee80211_set_tid_config(struct wiphy *wiphy,
 
 static int ieee80211_reset_tid_config(struct wiphy *wiphy,
                                      struct net_device *dev,
-                                     const u8 *peer, u8 tid)
+                                     const u8 *peer, u8 tids)
 {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct sta_info *sta;
@@ -3943,7 +3970,7 @@ static int ieee80211_reset_tid_config(struct wiphy *wiphy,
                return -EOPNOTSUPP;
 
        if (!peer)
-               return drv_reset_tid_config(sdata->local, sdata, NULL, tid);
+               return drv_reset_tid_config(sdata->local, sdata, NULL, tids);
 
        mutex_lock(&sdata->local->sta_mtx);
        sta = sta_info_get_bss(sdata, peer);
@@ -3952,7 +3979,7 @@ static int ieee80211_reset_tid_config(struct wiphy *wiphy,
                return -ENOENT;
        }
 
-       ret = drv_reset_tid_config(sdata->local, sdata, &sta->sta, tid);
+       ret = drv_reset_tid_config(sdata->local, sdata, &sta->sta, tids);
        mutex_unlock(&sdata->local->sta_mtx);
 
        return ret;