summaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch')
-rw-r--r--package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch158
1 files changed, 158 insertions, 0 deletions
diff --git a/package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch b/package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch
new file mode 100644
index 0000000000..b3c0413178
--- /dev/null
+++ b/package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch
@@ -0,0 +1,158 @@
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -624,8 +624,6 @@ struct ath_softc {
+ struct ath_rx rx;
+ struct ath_tx tx;
+ struct ath_beacon beacon;
+- const struct ath_rate_table *cur_rate_table;
+- enum wireless_mode cur_rate_mode;
+ struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
+
+ struct ath_led radio_led;
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -19,36 +19,6 @@
+ #include "ath9k.h"
+ #include "btcoex.h"
+
+-static void ath_cache_conf_rate(struct ath_softc *sc,
+- struct ieee80211_conf *conf)
+-{
+- switch (conf->channel->band) {
+- case IEEE80211_BAND_2GHZ:
+- if (conf_is_ht20(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NG_HT20;
+- else if (conf_is_ht40_minus(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NG_HT40MINUS;
+- else if (conf_is_ht40_plus(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NG_HT40PLUS;
+- else
+- sc->cur_rate_mode = ATH9K_MODE_11G;
+- break;
+- case IEEE80211_BAND_5GHZ:
+- if (conf_is_ht20(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NA_HT20;
+- else if (conf_is_ht40_minus(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NA_HT40MINUS;
+- else if (conf_is_ht40_plus(conf))
+- sc->cur_rate_mode = ATH9K_MODE_11NA_HT40PLUS;
+- else
+- sc->cur_rate_mode = ATH9K_MODE_11A;
+- break;
+- default:
+- BUG_ON(1);
+- break;
+- }
+-}
+-
+ static void ath_update_txpow(struct ath_softc *sc)
+ {
+ struct ath_hw *ah = sc->sc_ah;
+@@ -307,7 +277,6 @@ int ath_set_channel(struct ath_softc *sc
+ goto ps_restore;
+ }
+
+- ath_cache_conf_rate(sc, &hw->conf);
+ ath_update_txpow(sc);
+ ath9k_hw_set_interrupts(ah, ah->imask);
+
+@@ -1014,8 +983,6 @@ int ath_reset(struct ath_softc *sc, bool
+ * that changes the channel so update any state that
+ * might change as a result.
+ */
+- ath_cache_conf_rate(sc, &hw->conf);
+-
+ ath_update_txpow(sc);
+
+ if ((sc->sc_flags & SC_OP_BEACONS) || !(sc->sc_flags & (SC_OP_OFFCHANNEL)))
+@@ -1222,8 +1189,6 @@ static int ath9k_start(struct ieee80211_
+ if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
+ ah->imask |= ATH9K_INT_CST;
+
+- ath_cache_conf_rate(sc, &hw->conf);
+-
+ sc->sc_flags &= ~SC_OP_INVALID;
+
+ /* Disable BMISS interrupt when we're not associated */
+--- a/drivers/net/wireless/ath/ath9k/rc.c
++++ b/drivers/net/wireless/ath/ath9k/rc.c
+@@ -791,7 +791,7 @@ static void ath_get_rate(void *priv, str
+ */
+ try_per_rate = 4;
+
+- rate_table = sc->cur_rate_table;
++ rate_table = ath_rc_priv->rate_table;
+ rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
+
+ /*
+@@ -1048,7 +1048,7 @@ static void ath_rc_update_ht(struct ath_
+ int rate;
+ u8 last_per;
+ bool state_change = false;
+- const struct ath_rate_table *rate_table = sc->cur_rate_table;
++ const struct ath_rate_table *rate_table = ath_rc_priv->rate_table;
+ int size = ath_rc_priv->rate_table_size;
+
+ if ((tx_rate < 0) || (tx_rate > rate_table->rate_cnt))
+@@ -1150,7 +1150,7 @@ static void ath_rc_tx_status(struct ath_
+ u8 flags;
+ u32 i = 0, rix;
+
+- rate_table = sc->cur_rate_table;
++ rate_table = ath_rc_priv->rate_table;
+
+ /*
+ * If the first rate is not the final index, there
+@@ -1231,7 +1231,6 @@ struct ath_rate_table *ath_choose_rate_t
+ ath_print(common, ATH_DBG_CONFIG,
+ "Choosing rate table for mode: %d\n", mode);
+
+- sc->cur_rate_mode = mode;
+ return hw_rate_table[mode];
+ }
+
+@@ -1303,7 +1302,6 @@ static void ath_rc_init(struct ath_softc
+ ath_rc_priv->max_valid_rate = k;
+ ath_rc_sort_validrates(rate_table, ath_rc_priv);
+ ath_rc_priv->rate_max_phy = ath_rc_priv->valid_rate_index[k-4];
+- sc->cur_rate_table = rate_table;
+ ath_rc_priv->rate_table = rate_table;
+
+ ath_print(common, ATH_DBG_CONFIG,
+@@ -1439,8 +1437,9 @@ static void ath_tx_status(void *priv, st
+ }
+ }
+
+- ath_debug_stat_rc(ath_rc_priv, ath_rc_get_rateindex(sc->cur_rate_table,
+- &tx_info->status.rates[final_ts_idx]));
++ ath_debug_stat_rc(ath_rc_priv,
++ ath_rc_get_rateindex(ath_rc_priv->rate_table,
++ &tx_info->status.rates[final_ts_idx]));
+ }
+
+ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband,
+@@ -1480,14 +1479,8 @@ static void ath_rate_init(void *priv, st
+
+ /* Choose rate table first */
+
+- if ((sc->sc_ah->opmode == NL80211_IFTYPE_STATION) ||
+- (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT) ||
+- (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC)) {
+- rate_table = ath_choose_rate_table(sc, sband->band,
+- sta->ht_cap.ht_supported, is_cw40);
+- } else {
+- rate_table = hw_rate_table[sc->cur_rate_mode];
+- }
++ rate_table = ath_choose_rate_table(sc, sband->band,
++ sta->ht_cap.ht_supported, is_cw40);
+
+ ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, is_cw40, is_sgi);
+ ath_rc_init(sc, priv_sta, sband, sta, rate_table);
+@@ -1536,7 +1529,6 @@ static void ath_rate_update(void *priv,
+ ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_CONFIG,
+ "Operating HT Bandwidth changed to: %d\n",
+ sc->hw->conf.channel_type);
+- sc->cur_rate_table = hw_rate_table[sc->cur_rate_mode];
+ }
+ }
+ }