From cbe6c66638efddd36b0bb71f46dd5f5689a3e045 Mon Sep 17 00:00:00 2001 From: nbd Date: Sat, 16 Oct 2010 02:30:30 +0000 Subject: mac80211: update to wireless-testing 2010-10-15, add a few ath9k fixes and performance enhancements git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23470 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches/541-ath9k_rc_rate_table_cleanup.patch | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch (limited to 'package/mac80211/patches/541-ath9k_rc_rate_table_cleanup.patch') 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 000000000..b3c041317 --- /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]; + } + } + } -- cgit v1.2.3