aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-3945.c36
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c20
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rs.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-rx.c7
5 files changed, 11 insertions, 56 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index 21ae61dd3d51..6b7201551ca7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -622,7 +622,6 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
622 struct iwl3945_rx_frame_stats *rx_stats = IWL_RX_STATS(pkt); 622 struct iwl3945_rx_frame_stats *rx_stats = IWL_RX_STATS(pkt);
623 struct iwl3945_rx_frame_hdr *rx_hdr = IWL_RX_HDR(pkt); 623 struct iwl3945_rx_frame_hdr *rx_hdr = IWL_RX_HDR(pkt);
624 struct iwl3945_rx_frame_end *rx_end = IWL_RX_END(pkt); 624 struct iwl3945_rx_frame_end *rx_end = IWL_RX_END(pkt);
625 int snr;
626 u16 rx_stats_sig_avg = le16_to_cpu(rx_stats->sig_avg); 625 u16 rx_stats_sig_avg = le16_to_cpu(rx_stats->sig_avg);
627 u16 rx_stats_noise_diff = le16_to_cpu(rx_stats->noise_diff); 626 u16 rx_stats_noise_diff = le16_to_cpu(rx_stats->noise_diff);
628 u8 network_packet; 627 u8 network_packet;
@@ -662,43 +661,19 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
662 /* Convert 3945's rssi indicator to dBm */ 661 /* Convert 3945's rssi indicator to dBm */
663 rx_status.signal = rx_stats->rssi - IWL39_RSSI_OFFSET; 662 rx_status.signal = rx_stats->rssi - IWL39_RSSI_OFFSET;
664 663
665 /* Set default noise value to -127 */ 664 IWL_DEBUG_STATS(priv, "Rssi %d sig_avg %d noise_diff %d\n",
666 if (priv->last_rx_noise == 0) 665 rx_status.signal, rx_stats_sig_avg,
667 priv->last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE; 666 rx_stats_noise_diff);
668
669 /* 3945 provides noise info for OFDM frames only.
670 * sig_avg and noise_diff are measured by the 3945's digital signal
671 * processor (DSP), and indicate linear levels of signal level and
672 * distortion/noise within the packet preamble after
673 * automatic gain control (AGC). sig_avg should stay fairly
674 * constant if the radio's AGC is working well.
675 * Since these values are linear (not dB or dBm), linear
676 * signal-to-noise ratio (SNR) is (sig_avg / noise_diff).
677 * Convert linear SNR to dB SNR, then subtract that from rssi dBm
678 * to obtain noise level in dBm.
679 * Calculate rx_status.signal (quality indicator in %) based on SNR. */
680 if (rx_stats_noise_diff) {
681 snr = rx_stats_sig_avg / rx_stats_noise_diff;
682 rx_status.noise = rx_status.signal -
683 iwl3945_calc_db_from_ratio(snr);
684 } else {
685 rx_status.noise = priv->last_rx_noise;
686 }
687
688
689 IWL_DEBUG_STATS(priv, "Rssi %d noise %d sig_avg %d noise_diff %d\n",
690 rx_status.signal, rx_status.noise,
691 rx_stats_sig_avg, rx_stats_noise_diff);
692 667
693 header = (struct ieee80211_hdr *)IWL_RX_DATA(pkt); 668 header = (struct ieee80211_hdr *)IWL_RX_DATA(pkt);
694 669
695 network_packet = iwl3945_is_network_packet(priv, header); 670 network_packet = iwl3945_is_network_packet(priv, header);
696 671
697 IWL_DEBUG_STATS_LIMIT(priv, "[%c] %d RSSI:%d Signal:%u, Noise:%u, Rate:%u\n", 672 IWL_DEBUG_STATS_LIMIT(priv, "[%c] %d RSSI:%d Signal:%u, Rate:%u\n",
698 network_packet ? '*' : ' ', 673 network_packet ? '*' : ' ',
699 le16_to_cpu(rx_hdr->channel), 674 le16_to_cpu(rx_hdr->channel),
700 rx_status.signal, rx_status.signal, 675 rx_status.signal, rx_status.signal,
701 rx_status.noise, rx_status.rate_idx); 676 rx_status.rate_idx);
702 677
703 /* Set "1" to report good data frames in groups of 100 */ 678 /* Set "1" to report good data frames in groups of 100 */
704 iwl3945_dbg_report_frame(priv, pkt, header, 1); 679 iwl3945_dbg_report_frame(priv, pkt, header, 1);
@@ -709,7 +684,6 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv,
709 le32_to_cpu(rx_end->beacon_timestamp); 684 le32_to_cpu(rx_end->beacon_timestamp);
710 priv->_3945.last_tsf = le64_to_cpu(rx_end->timestamp); 685 priv->_3945.last_tsf = le64_to_cpu(rx_end->timestamp);
711 priv->_3945.last_rx_rssi = rx_status.signal; 686 priv->_3945.last_rx_rssi = rx_status.signal;
712 priv->last_rx_noise = rx_status.noise;
713 } 687 }
714 688
715 iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status); 689 iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status);
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 226862d3d5ac..e8e3118ec0ad 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -1071,30 +1071,14 @@ void iwlagn_rx_reply_rx(struct iwl_priv *priv,
1071 /* Find max signal strength (dBm) among 3 antenna/receiver chains */ 1071 /* Find max signal strength (dBm) among 3 antenna/receiver chains */
1072 rx_status.signal = iwlagn_calc_rssi(priv, phy_res); 1072 rx_status.signal = iwlagn_calc_rssi(priv, phy_res);
1073 1073
1074 /* Meaningful noise values are available only from beacon statistics,
1075 * which are gathered only when associated, and indicate noise
1076 * only for the associated network channel ...
1077 * Ignore these noise values while scanning (other channels) */
1078 if (iwl_is_associated(priv) &&
1079 !test_bit(STATUS_SCANNING, &priv->status)) {
1080 rx_status.noise = priv->last_rx_noise;
1081 } else {
1082 rx_status.noise = IWL_NOISE_MEAS_NOT_AVAILABLE;
1083 }
1084
1085 /* Reset beacon noise level if not associated. */
1086 if (!iwl_is_associated(priv))
1087 priv->last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE;
1088
1089#ifdef CONFIG_IWLWIFI_DEBUG 1074#ifdef CONFIG_IWLWIFI_DEBUG
1090 /* Set "1" to report good data frames in groups of 100 */ 1075 /* Set "1" to report good data frames in groups of 100 */
1091 if (unlikely(iwl_get_debug_level(priv) & IWL_DL_RX)) 1076 if (unlikely(iwl_get_debug_level(priv) & IWL_DL_RX))
1092 iwlagn_dbg_report_frame(priv, phy_res, len, header, 1); 1077 iwlagn_dbg_report_frame(priv, phy_res, len, header, 1);
1093#endif 1078#endif
1094 iwl_dbg_log_rx_data_frame(priv, len, header); 1079 iwl_dbg_log_rx_data_frame(priv, len, header);
1095 IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, noise %d, TSF %llu\n", 1080 IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, TSF %llu\n",
1096 rx_status.signal, rx_status.noise, 1081 rx_status.signal, (unsigned long long)rx_status.mactime);
1097 (unsigned long long)rx_status.mactime);
1098 1082
1099 /* 1083 /*
1100 * "antenna number" 1084 * "antenna number"
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index 5155b1a027eb..bcae6a088106 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -2940,8 +2940,6 @@ static ssize_t rs_sta_dbgfs_rate_scale_data_read(struct file *file,
2940 desc += sprintf(buff+desc, 2940 desc += sprintf(buff+desc,
2941 "Bit Rate= %d Mb/s\n", 2941 "Bit Rate= %d Mb/s\n",
2942 iwl_rates[lq_sta->last_txrate_idx].ieee >> 1); 2942 iwl_rates[lq_sta->last_txrate_idx].ieee >> 1);
2943 desc += sprintf(buff+desc, "Noise Level= %d dBm\n",
2944 priv->last_rx_noise);
2945 2943
2946 ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc); 2944 ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc);
2947 return ret; 2945 return ret;
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index 07d865fd57ed..bff182ffeac9 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -1167,8 +1167,6 @@ struct iwl_priv {
1167 1167
1168 unsigned long status; 1168 unsigned long status;
1169 1169
1170 int last_rx_noise; /* From beacon statistics */
1171
1172 /* counts mgmt, ctl, and data packets */ 1170 /* counts mgmt, ctl, and data packets */
1173 struct traffic_stats tx_stats; 1171 struct traffic_stats tx_stats;
1174 struct traffic_stats rx_stats; 1172 struct traffic_stats rx_stats;
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index 3a4313841fe7..1dff14a67b2c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -259,6 +259,7 @@ static void iwl_rx_calc_noise(struct iwl_priv *priv)
259 le32_to_cpu(rx_info->beacon_silence_rssi_b) & IN_BAND_FILTER; 259 le32_to_cpu(rx_info->beacon_silence_rssi_b) & IN_BAND_FILTER;
260 int bcn_silence_c = 260 int bcn_silence_c =
261 le32_to_cpu(rx_info->beacon_silence_rssi_c) & IN_BAND_FILTER; 261 le32_to_cpu(rx_info->beacon_silence_rssi_c) & IN_BAND_FILTER;
262 int last_rx_noise;
262 263
263 if (bcn_silence_a) { 264 if (bcn_silence_a) {
264 total_silence += bcn_silence_a; 265 total_silence += bcn_silence_a;
@@ -275,13 +276,13 @@ static void iwl_rx_calc_noise(struct iwl_priv *priv)
275 276
276 /* Average among active antennas */ 277 /* Average among active antennas */
277 if (num_active_rx) 278 if (num_active_rx)
278 priv->last_rx_noise = (total_silence / num_active_rx) - 107; 279 last_rx_noise = (total_silence / num_active_rx) - 107;
279 else 280 else
280 priv->last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE; 281 last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE;
281 282
282 IWL_DEBUG_CALIB(priv, "inband silence a %u, b %u, c %u, dBm %d\n", 283 IWL_DEBUG_CALIB(priv, "inband silence a %u, b %u, c %u, dBm %d\n",
283 bcn_silence_a, bcn_silence_b, bcn_silence_c, 284 bcn_silence_a, bcn_silence_b, bcn_silence_c,
284 priv->last_rx_noise); 285 last_rx_noise);
285} 286}
286 287
287#ifdef CONFIG_IWLWIFI_DEBUG 288#ifdef CONFIG_IWLWIFI_DEBUG