Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into...
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / rc.c
index 4c0d36a..ba7f36a 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2004 Video54 Technologies, Inc.
- * Copyright (c) 2004-2009 Atheros Communications, Inc.
+ * Copyright (c) 2004-2011 Atheros Communications, Inc.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -689,7 +689,8 @@ static void ath_rc_rate_set_series(const struct ath_rate_table *rate_table,
 
        if (WLAN_RC_PHY_HT(rate_table->info[rix].phy)) {
                rate->flags |= IEEE80211_TX_RC_MCS;
-               if (WLAN_RC_PHY_40(rate_table->info[rix].phy))
+               if (WLAN_RC_PHY_40(rate_table->info[rix].phy) &&
+                   conf_is_ht40(&txrc->hw->conf))
                        rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
                if (WLAN_RC_PHY_SGI(rate_table->info[rix].phy))
                        rate->flags |= IEEE80211_TX_RC_SHORT_GI;
@@ -854,14 +855,13 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
        ath_rc_rate_set_rtscts(sc, rate_table, tx_info);
 }
 
-static bool ath_rc_update_per(struct ath_softc *sc,
+static void ath_rc_update_per(struct ath_softc *sc,
                              const struct ath_rate_table *rate_table,
                              struct ath_rate_priv *ath_rc_priv,
                                  struct ieee80211_tx_info *tx_info,
                              int tx_rate, int xretries, int retries,
                              u32 now_msec)
 {
-       bool state_change = false;
        int count, n_bad_frames;
        u8 last_per;
        static const u32 nretry_to_per_lookup[10] = {
@@ -992,8 +992,6 @@ static bool ath_rc_update_per(struct ath_softc *sc,
 
                }
        }
-
-       return state_change;
 }
 
 static void ath_debug_stat_retries(struct ath_rate_priv *rc, int rix,
@@ -1017,7 +1015,6 @@ static void ath_rc_update_ht(struct ath_softc *sc,
        u32 now_msec = jiffies_to_msecs(jiffies);
        int rate;
        u8 last_per;
-       bool state_change = false;
        const struct ath_rate_table *rate_table = ath_rc_priv->rate_table;
        int size = ath_rc_priv->rate_table_size;
 
@@ -1027,9 +1024,9 @@ static void ath_rc_update_ht(struct ath_softc *sc,
        last_per = ath_rc_priv->per[tx_rate];
 
        /* Update PER first */
-       state_change = ath_rc_update_per(sc, rate_table, ath_rc_priv,
-                                        tx_info, tx_rate, xretries,
-                                        retries, now_msec);
+       ath_rc_update_per(sc, rate_table, ath_rc_priv,
+                         tx_info, tx_rate, xretries,
+                         retries, now_msec);
 
        /*
         * If this rate looks bad (high PER) then stop using it for
@@ -1092,8 +1089,7 @@ static int ath_rc_get_rateindex(const struct ath_rate_table *rate_table,
        if (!(rate->flags & IEEE80211_TX_RC_MCS))
                return rate->idx;
 
-       while (rate->idx > mcs_rix_off[i] &&
-              i < ARRAY_SIZE(mcs_rix_off)) {
+       while (i < ARRAY_SIZE(mcs_rix_off) && rate->idx > mcs_rix_off[i]) {
                rix++; i++;
        }