diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-3945.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-rx.c | 48 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl3945-base.c | 41 |
5 files changed, 5 insertions, 97 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index e413bd35bc41..234891d8cc10 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -681,19 +681,13 @@ static void iwl3945_rx_reply_rx(struct iwl_priv *priv, | |||
681 | snr = rx_stats_sig_avg / rx_stats_noise_diff; | 681 | snr = rx_stats_sig_avg / rx_stats_noise_diff; |
682 | rx_status.noise = rx_status.signal - | 682 | rx_status.noise = rx_status.signal - |
683 | iwl3945_calc_db_from_ratio(snr); | 683 | iwl3945_calc_db_from_ratio(snr); |
684 | rx_status.qual = iwl3945_calc_sig_qual(rx_status.signal, | ||
685 | rx_status.noise); | ||
686 | |||
687 | /* If noise info not available, calculate signal quality indicator (%) | ||
688 | * using just the dBm signal level. */ | ||
689 | } else { | 684 | } else { |
690 | rx_status.noise = priv->last_rx_noise; | 685 | rx_status.noise = priv->last_rx_noise; |
691 | rx_status.qual = iwl3945_calc_sig_qual(rx_status.signal, 0); | ||
692 | } | 686 | } |
693 | 687 | ||
694 | 688 | ||
695 | IWL_DEBUG_STATS(priv, "Rssi %d noise %d qual %d sig_avg %d noise_diff %d\n", | 689 | IWL_DEBUG_STATS(priv, "Rssi %d noise %d sig_avg %d noise_diff %d\n", |
696 | rx_status.signal, rx_status.noise, rx_status.qual, | 690 | rx_status.signal, rx_status.noise, |
697 | rx_stats_sig_avg, rx_stats_noise_diff); | 691 | rx_stats_sig_avg, rx_stats_noise_diff); |
698 | 692 | ||
699 | header = (struct ieee80211_hdr *)IWL_RX_DATA(pkt); | 693 | header = (struct ieee80211_hdr *)IWL_RX_DATA(pkt); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h index ecc23ec1f6a4..531fa125f5a6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945.h | |||
@@ -222,7 +222,6 @@ struct iwl3945_ibss_seq { | |||
222 | * | 222 | * |
223 | *****************************************************************************/ | 223 | *****************************************************************************/ |
224 | extern int iwl3945_calc_db_from_ratio(int sig_ratio); | 224 | extern int iwl3945_calc_db_from_ratio(int sig_ratio); |
225 | extern int iwl3945_calc_sig_qual(int rssi_dbm, int noise_dbm); | ||
226 | extern void iwl3945_rx_replenish(void *data); | 225 | extern void iwl3945_rx_replenish(void *data); |
227 | extern void iwl3945_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq); | 226 | extern void iwl3945_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq); |
228 | extern unsigned int iwl3945_fill_beacon_frame(struct iwl_priv *priv, | 227 | extern unsigned int iwl3945_fill_beacon_frame(struct iwl_priv *priv, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index fe511cbf012e..b93e49158196 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c | |||
@@ -150,7 +150,7 @@ static s32 expected_tpt_mimo3_40MHz[4][IWL_RATE_COUNT] = { | |||
150 | }; | 150 | }; |
151 | 151 | ||
152 | /* mbps, mcs */ | 152 | /* mbps, mcs */ |
153 | const static struct iwl_rate_mcs_info iwl_rate_mcs[IWL_RATE_COUNT] = { | 153 | static const struct iwl_rate_mcs_info iwl_rate_mcs[IWL_RATE_COUNT] = { |
154 | { "1", "BPSK DSSS"}, | 154 | { "1", "BPSK DSSS"}, |
155 | { "2", "QPSK DSSS"}, | 155 | { "2", "QPSK DSSS"}, |
156 | {"5.5", "BPSK CCK"}, | 156 | {"5.5", "BPSK CCK"}, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index f5c87e72660a..6f36b6e79f5e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c | |||
@@ -650,47 +650,6 @@ void iwl_reply_statistics(struct iwl_priv *priv, | |||
650 | } | 650 | } |
651 | EXPORT_SYMBOL(iwl_reply_statistics); | 651 | EXPORT_SYMBOL(iwl_reply_statistics); |
652 | 652 | ||
653 | #define PERFECT_RSSI (-20) /* dBm */ | ||
654 | #define WORST_RSSI (-95) /* dBm */ | ||
655 | #define RSSI_RANGE (PERFECT_RSSI - WORST_RSSI) | ||
656 | |||
657 | /* Calculate an indication of rx signal quality (a percentage, not dBm!). | ||
658 | * See http://www.ces.clemson.edu/linux/signal_quality.shtml for info | ||
659 | * about formulas used below. */ | ||
660 | static int iwl_calc_sig_qual(int rssi_dbm, int noise_dbm) | ||
661 | { | ||
662 | int sig_qual; | ||
663 | int degradation = PERFECT_RSSI - rssi_dbm; | ||
664 | |||
665 | /* If we get a noise measurement, use signal-to-noise ratio (SNR) | ||
666 | * as indicator; formula is (signal dbm - noise dbm). | ||
667 | * SNR at or above 40 is a great signal (100%). | ||
668 | * Below that, scale to fit SNR of 0 - 40 dB within 0 - 100% indicator. | ||
669 | * Weakest usable signal is usually 10 - 15 dB SNR. */ | ||
670 | if (noise_dbm) { | ||
671 | if (rssi_dbm - noise_dbm >= 40) | ||
672 | return 100; | ||
673 | else if (rssi_dbm < noise_dbm) | ||
674 | return 0; | ||
675 | sig_qual = ((rssi_dbm - noise_dbm) * 5) / 2; | ||
676 | |||
677 | /* Else use just the signal level. | ||
678 | * This formula is a least squares fit of data points collected and | ||
679 | * compared with a reference system that had a percentage (%) display | ||
680 | * for signal quality. */ | ||
681 | } else | ||
682 | sig_qual = (100 * (RSSI_RANGE * RSSI_RANGE) - degradation * | ||
683 | (15 * RSSI_RANGE + 62 * degradation)) / | ||
684 | (RSSI_RANGE * RSSI_RANGE); | ||
685 | |||
686 | if (sig_qual > 100) | ||
687 | sig_qual = 100; | ||
688 | else if (sig_qual < 1) | ||
689 | sig_qual = 0; | ||
690 | |||
691 | return sig_qual; | ||
692 | } | ||
693 | |||
694 | /* Calc max signal level (dBm) among 3 possible receivers */ | 653 | /* Calc max signal level (dBm) among 3 possible receivers */ |
695 | static inline int iwl_calc_rssi(struct iwl_priv *priv, | 654 | static inline int iwl_calc_rssi(struct iwl_priv *priv, |
696 | struct iwl_rx_phy_res *rx_resp) | 655 | struct iwl_rx_phy_res *rx_resp) |
@@ -1101,11 +1060,8 @@ void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
1101 | if (iwl_is_associated(priv) && | 1060 | if (iwl_is_associated(priv) && |
1102 | !test_bit(STATUS_SCANNING, &priv->status)) { | 1061 | !test_bit(STATUS_SCANNING, &priv->status)) { |
1103 | rx_status.noise = priv->last_rx_noise; | 1062 | rx_status.noise = priv->last_rx_noise; |
1104 | rx_status.qual = iwl_calc_sig_qual(rx_status.signal, | ||
1105 | rx_status.noise); | ||
1106 | } else { | 1063 | } else { |
1107 | rx_status.noise = IWL_NOISE_MEAS_NOT_AVAILABLE; | 1064 | rx_status.noise = IWL_NOISE_MEAS_NOT_AVAILABLE; |
1108 | rx_status.qual = iwl_calc_sig_qual(rx_status.signal, 0); | ||
1109 | } | 1065 | } |
1110 | 1066 | ||
1111 | /* Reset beacon noise level if not associated. */ | 1067 | /* Reset beacon noise level if not associated. */ |
@@ -1118,8 +1074,8 @@ void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
1118 | iwl_dbg_report_frame(priv, phy_res, len, header, 1); | 1074 | iwl_dbg_report_frame(priv, phy_res, len, header, 1); |
1119 | #endif | 1075 | #endif |
1120 | iwl_dbg_log_rx_data_frame(priv, len, header); | 1076 | iwl_dbg_log_rx_data_frame(priv, len, header); |
1121 | IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, noise %d, qual %d, TSF %llu\n", | 1077 | IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, noise %d, TSF %llu\n", |
1122 | rx_status.signal, rx_status.noise, rx_status.qual, | 1078 | rx_status.signal, rx_status.noise, |
1123 | (unsigned long long)rx_status.mactime); | 1079 | (unsigned long long)rx_status.mactime); |
1124 | 1080 | ||
1125 | /* | 1081 | /* |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index e5d8fa38432e..f8e4e4b18d02 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -1299,47 +1299,6 @@ int iwl3945_calc_db_from_ratio(int sig_ratio) | |||
1299 | return (int)ratio2dB[sig_ratio]; | 1299 | return (int)ratio2dB[sig_ratio]; |
1300 | } | 1300 | } |
1301 | 1301 | ||
1302 | #define PERFECT_RSSI (-20) /* dBm */ | ||
1303 | #define WORST_RSSI (-95) /* dBm */ | ||
1304 | #define RSSI_RANGE (PERFECT_RSSI - WORST_RSSI) | ||
1305 | |||
1306 | /* Calculate an indication of rx signal quality (a percentage, not dBm!). | ||
1307 | * See http://www.ces.clemson.edu/linux/signal_quality.shtml for info | ||
1308 | * about formulas used below. */ | ||
1309 | int iwl3945_calc_sig_qual(int rssi_dbm, int noise_dbm) | ||
1310 | { | ||
1311 | int sig_qual; | ||
1312 | int degradation = PERFECT_RSSI - rssi_dbm; | ||
1313 | |||
1314 | /* If we get a noise measurement, use signal-to-noise ratio (SNR) | ||
1315 | * as indicator; formula is (signal dbm - noise dbm). | ||
1316 | * SNR at or above 40 is a great signal (100%). | ||
1317 | * Below that, scale to fit SNR of 0 - 40 dB within 0 - 100% indicator. | ||
1318 | * Weakest usable signal is usually 10 - 15 dB SNR. */ | ||
1319 | if (noise_dbm) { | ||
1320 | if (rssi_dbm - noise_dbm >= 40) | ||
1321 | return 100; | ||
1322 | else if (rssi_dbm < noise_dbm) | ||
1323 | return 0; | ||
1324 | sig_qual = ((rssi_dbm - noise_dbm) * 5) / 2; | ||
1325 | |||
1326 | /* Else use just the signal level. | ||
1327 | * This formula is a least squares fit of data points collected and | ||
1328 | * compared with a reference system that had a percentage (%) display | ||
1329 | * for signal quality. */ | ||
1330 | } else | ||
1331 | sig_qual = (100 * (RSSI_RANGE * RSSI_RANGE) - degradation * | ||
1332 | (15 * RSSI_RANGE + 62 * degradation)) / | ||
1333 | (RSSI_RANGE * RSSI_RANGE); | ||
1334 | |||
1335 | if (sig_qual > 100) | ||
1336 | sig_qual = 100; | ||
1337 | else if (sig_qual < 1) | ||
1338 | sig_qual = 0; | ||
1339 | |||
1340 | return sig_qual; | ||
1341 | } | ||
1342 | |||
1343 | /** | 1302 | /** |
1344 | * iwl3945_rx_handle - Main entry function for receiving responses from uCode | 1303 | * iwl3945_rx_handle - Main entry function for receiving responses from uCode |
1345 | * | 1304 | * |