libertas_tf: add get_survey callback in order to get channel noise
authorJohn W. Linville <linville@tuxdriver.com>
Wed, 28 Jul 2010 19:03:42 +0000 (15:03 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 Jul 2010 16:46:48 +0000 (12:46 -0400)
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas_tf/libertas_tf.h
drivers/net/wireless/libertas_tf/main.c

index 737eac92ef72cc83ed11ad4d427541b0ed823cb8..ad77b92d0b41e260d2df08ad483940d1e95253a1 100644 (file)
@@ -253,6 +253,9 @@ struct lbtf_private {
        u8 fw_ready;
        u8 surpriseremoved;
        struct sk_buff_head bc_ps_buf;
+
+       /* Most recently reported noise in dBm */
+       s8 noise;
 };
 
 /* 802.11-related definitions */
index 817fffc0de4b5093c869fc11a5f72aa9ca0ab3ba..9278b3c8ee306c4b59c610c156257daf14d47179 100644 (file)
@@ -525,6 +525,22 @@ static void lbtf_op_bss_info_changed(struct ieee80211_hw *hw,
        lbtf_deb_leave(LBTF_DEB_MACOPS);
 }
 
+static int lbtf_op_get_survey(struct ieee80211_hw *hw, int idx,
+                               struct survey_info *survey)
+{
+       struct lbtf_private *priv = hw->priv;
+       struct ieee80211_conf *conf = &hw->conf;
+
+       if (idx != 0)
+               return -ENOENT;
+
+       survey->channel = conf->channel;
+       survey->filled = SURVEY_INFO_NOISE_DBM;
+       survey->noise = priv->noise;
+
+       return 0;
+}
+
 static const struct ieee80211_ops lbtf_ops = {
        .tx                     = lbtf_op_tx,
        .start                  = lbtf_op_start,
@@ -535,6 +551,7 @@ static const struct ieee80211_ops lbtf_ops = {
        .prepare_multicast      = lbtf_op_prepare_multicast,
        .configure_filter       = lbtf_op_configure_filter,
        .bss_info_changed       = lbtf_op_bss_info_changed,
+       .get_survey             = lbtf_op_get_survey,
 };
 
 int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
@@ -555,6 +572,7 @@ int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
        stats.freq = priv->cur_freq;
        stats.band = IEEE80211_BAND_2GHZ;
        stats.signal = prxpd->snr;
+       priv->noise = prxpd->nf;
        /* Marvell rate index has a hole at value 4 */
        if (prxpd->rx_rate > 4)
                --prxpd->rx_rate;