Include the channel utilization (busy, rx, tx) in the survey results.

Signed-off-by: Bruno Randolf <[email protected]>
---
 drivers/net/wireless/ath/ath5k/base.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/ath/ath5k/base.c 
b/drivers/net/wireless/ath/ath5k/base.c
index c158f2e..a33d9f2 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -3008,6 +3008,7 @@ static int ath5k_get_survey(struct ieee80211_hw *hw, int 
idx,
 {
        struct ath5k_softc *sc = hw->priv;
        struct ieee80211_conf *conf = &hw->conf;
+       struct ath_common *common = ath5k_hw_common(sc->ah);
 
         if (idx != 0)
                return -ENOENT;
@@ -3016,6 +3017,22 @@ static int ath5k_get_survey(struct ieee80211_hw *hw, int 
idx,
        survey->filled = SURVEY_INFO_NOISE_DBM;
        survey->noise = sc->ah->ah_noise_floor;
 
+       ath_hw_cycle_counters_lock(common);
+       ath_hw_cycle_counters_update(common);
+       if (common->cc_survey.cycles > 0) {
+               survey->filled |= SURVEY_INFO_BUSY |
+                               SURVEY_INFO_BUSY_TX | SURVEY_INFO_BUSY_RX;
+               survey->busy = common->cc_survey.rx_busy * 255 /
+                                       common->cc_survey.cycles;
+               survey->busy_tx = common->cc_survey.tx_frame * 255 /
+                                       common->cc_survey.cycles;
+               survey->busy_rx = common->cc_survey.rx_frame * 255 /
+                                       common->cc_survey.cycles;
+       }
+
+       memset(&common->cc_survey, 0, sizeof(struct ath_cycle_counters));
+       ath_hw_cycle_counters_unlock(common);
+
        return 0;
 }
 

_______________________________________________
ath5k-devel mailing list
[email protected]
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to