mac80211: backport latest version from trunk as of r27395
[openwrt-10.03/.git] / package / mac80211 / patches / 530-ath9k_noise_dbm_fixup.patch
similarity index 64%
rename from package/mac80211/patches/570-ath9k_noise_dbm_fixup.patch
rename to package/mac80211/patches/530-ath9k_noise_dbm_fixup.patch
index 2ba2c566f77fece727fdbbfc3199c58c84d2e4de..7e41b2cb63a353eefa6ced22c5117f38672ad20a 100644 (file)
@@ -1,6 +1,26 @@
 --- a/drivers/net/wireless/ath/ath9k/calib.c
 +++ b/drivers/net/wireless/ath/ath9k/calib.c
-@@ -378,6 +378,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
+@@ -63,6 +63,19 @@ static s16 ath9k_hw_get_default_nf(struc
+       return ath9k_hw_get_nf_limits(ah, chan)->nominal;
+ }
++s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
++{
++      s8 noise = ATH_DEFAULT_NOISE_FLOOR;
++
++      if (chan && chan->noisefloor) {
++              s8 delta = chan->noisefloor -
++                         ath9k_hw_get_default_nf(ah, chan);
++              if (delta > 0)
++                      noise += delta;
++      }
++      return noise;
++}
++EXPORT_SYMBOL(ath9k_hw_getchan_noise);
+ static void ath9k_hw_update_nfcal_hist_buffer(struct ath_hw *ah,
+                                             struct ath9k_hw_cal_data *cal,
+@@ -378,6 +391,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
  
        if (!caldata) {
                chan->noisefloor = nf;
@@ -8,7 +28,7 @@
                return false;
        }
  
-@@ -385,6 +386,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
+@@ -385,6 +399,7 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
        caldata->nfcal_pending = false;
        ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray);
        chan->noisefloor = h[0].privNF;
        return true;
  }
  
-@@ -411,10 +413,15 @@ void ath9k_init_nfcal_hist_buffer(struct
- s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
- {
--      if (!ah->curchan || !ah->curchan->noisefloor)
--              return ath9k_hw_get_default_nf(ah, chan);
-+      s8 noise = ATH_DEFAULT_NOISE_FLOOR;
--      return ah->curchan->noisefloor;
-+      if (chan && chan->noisefloor) {
-+              s8 delta = chan->noisefloor -
-+                         ath9k_hw_get_default_nf(ah, chan);
-+              if (delta > 0)
-+                      noise += delta;
-+      }
-+      return noise;
- }
- EXPORT_SYMBOL(ath9k_hw_getchan_noise);
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1286,6 +1286,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1427,6 +1427,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
                memset(caldata, 0, sizeof(*caldata));
                ath9k_init_nfcal_hist_buffer(ah, chan);
        }
@@ -47,7 +48,7 @@
            (ah->chip_fullsleep != true) &&
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -677,6 +677,7 @@ struct ath_hw {
+@@ -688,6 +688,7 @@ struct ath_hw {
        enum nl80211_iftype opmode;
        enum ath9k_power_mode power_mode;
  
@@ -57,7 +58,7 @@
        struct ar5416Stats stats;
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -165,7 +165,7 @@ static void ath_update_survey_nf(struct 
+@@ -163,7 +163,7 @@ static void ath_update_survey_nf(struct 
  
        if (chan->noisefloor) {
                survey->filled |= SURVEY_INFO_NOISE_DBM;
@@ -68,7 +69,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/recv.c
 +++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -956,6 +956,8 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -986,6 +986,8 @@ static int ath9k_rx_skb_preprocess(struc
                                   struct ieee80211_rx_status *rx_status,
                                   bool *decrypt_error)
  {
@@ -77,7 +78,7 @@
        memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
  
        /*
-@@ -976,7 +978,7 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -1006,7 +1008,7 @@ static int ath9k_rx_skb_preprocess(struc
  
        rx_status->band = hw->conf.channel->band;
        rx_status->freq = hw->conf.channel->center_freq;
        rx_status->antenna = rx_stats->rs_antenna;
        rx_status->flag |= RX_FLAG_MACTIME_MPDU;
  
+--- a/drivers/net/wireless/ath/ath9k/calib.h
++++ b/drivers/net/wireless/ath/ath9k/calib.h
+@@ -108,6 +108,7 @@ void ath9k_init_nfcal_hist_buffer(struct
+ void ath9k_hw_bstuck_nfcal(struct ath_hw *ah);
+ void ath9k_hw_reset_calibration(struct ath_hw *ah,
+                               struct ath9k_cal_list *currCal);
++s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan);
+ #endif /* CALIB_H */