--- 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;
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);
}
(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;
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;
--- 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)
{
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 */