diff options
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.c | 36 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 20 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-rx.c | 7 |
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 |