Commit 21b22738 authored by Luis R. Rodriguez's avatar Luis R. Rodriguez Committed by John W. Linville

ath9k: move qual processing into a helper

This moves the qual computing into a small helper,
ath9k_compute_qual()
Signed-off-by: default avatarLuis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 9878841e
...@@ -189,6 +189,47 @@ static u8 ath9k_process_rate(struct ath_common *common, ...@@ -189,6 +189,47 @@ static u8 ath9k_process_rate(struct ath_common *common,
return 0; return 0;
} }
/*
* Theory for reporting quality:
*
* At a hardware RSSI of 45 you will be able to use MCS 7 reliably.
* At a hardware RSSI of 45 you will be able to use MCS 15 reliably.
* At a hardware RSSI of 35 you should be able use 54 Mbps reliably.
*
* MCS 7 is the highets MCS index usable by a 1-stream device.
* MCS 15 is the highest MCS index usable by a 2-stream device.
*
* All ath9k devices are either 1-stream or 2-stream.
*
* How many bars you see is derived from the qual reporting.
*
* A more elaborate scheme can be used here but it requires tables
* of SNR/throughput for each possible mode used. For the MCS table
* you can refer to the wireless wiki:
*
* http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n
*
*/
static int ath9k_compute_qual(struct ieee80211_hw *hw,
struct ath_rx_status *rx_stats)
{
int qual;
if (conf_is_ht(&hw->conf))
qual = rx_stats->rs_rssi * 100 / 45;
else
qual = rx_stats->rs_rssi * 100 / 35;
/*
* rssi can be more than 45 though, anything above that
* should be considered at 100%
*/
if (qual > 100)
qual = 100;
return qual;
}
/* /*
* For Decrypt or Demic errors, we only mark packet status here and always push * For Decrypt or Demic errors, we only mark packet status here and always push
* up the frame up to let mac80211 handle the actual error case, be it no * up the frame up to let mac80211 handle the actual error case, be it no
...@@ -247,38 +288,7 @@ static int ath_rx_prepare(struct ath_common *common, ...@@ -247,38 +288,7 @@ static int ath_rx_prepare(struct ath_common *common,
rx_status->noise = common->ani.noise_floor; rx_status->noise = common->ani.noise_floor;
rx_status->signal = ATH_DEFAULT_NOISE_FLOOR + rx_stats->rs_rssi; rx_status->signal = ATH_DEFAULT_NOISE_FLOOR + rx_stats->rs_rssi;
rx_status->antenna = rx_stats->rs_antenna; rx_status->antenna = rx_stats->rs_antenna;
rx_status->qual = ath9k_compute_qual(hw, rx_stats);
/*
* Theory for reporting quality:
*
* At a hardware RSSI of 45 you will be able to use MCS 7 reliably.
* At a hardware RSSI of 45 you will be able to use MCS 15 reliably.
* At a hardware RSSI of 35 you should be able use 54 Mbps reliably.
*
* MCS 7 is the highets MCS index usable by a 1-stream device.
* MCS 15 is the highest MCS index usable by a 2-stream device.
*
* All ath9k devices are either 1-stream or 2-stream.
*
* How many bars you see is derived from the qual reporting.
*
* A more elaborate scheme can be used here but it requires tables
* of SNR/throughput for each possible mode used. For the MCS table
* you can refer to the wireless wiki:
*
* http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11n
*
*/
if (conf_is_ht(&hw->conf))
rx_status->qual = rx_stats->rs_rssi * 100 / 45;
else
rx_status->qual = rx_stats->rs_rssi * 100 / 35;
/* rssi can be more than 45 though, anything above that
* should be considered at 100% */
if (rx_status->qual > 100)
rx_status->qual = 100;
rx_status->flag |= RX_FLAG_TSFT; rx_status->flag |= RX_FLAG_TSFT;
return 1; return 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment