ath9k: move qual processing into a helper
This moves the qual computing into a small helper, ath9k_compute_qual() Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9878841e13
commit
21b2273806
1 changed files with 42 additions and 32 deletions
|
@ -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,
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue