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 2a40532..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;
@@ -792,7 +793,7 @@ static void ath_get_rate(void *priv, struct ieee80211_sta *sta, void *priv_sta,
 
                tx_info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE;
        } else {
-               /* Set the choosen rate. No RTS for first series entry. */
+               /* Set the chosen rate. No RTS for first series entry. */
                ath_rc_rate_set_series(rate_table, &rates[i++], txrc,
                                       try_per_rate, rix, 0);
        }
@@ -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