ath9k: move ath9k_process_rssi to common.c
we can reuse this fucntion on ath9k_htc. Now we will need to use common version last_rssi, so switch it too. Signed-off-by: Oleksij Rempel <linux@rempel-privat.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
2f2cb326f9
commit
32efb0cc5b
|
@ -758,7 +758,6 @@ struct ath_softc {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct ath9k_hw_cal_data caldata;
|
struct ath9k_hw_cal_data caldata;
|
||||||
int last_rssi;
|
|
||||||
|
|
||||||
#ifdef CONFIG_ATH9K_DEBUGFS
|
#ifdef CONFIG_ATH9K_DEBUGFS
|
||||||
struct ath9k_debug debug;
|
struct ath9k_debug debug;
|
||||||
|
|
|
@ -27,6 +27,68 @@ MODULE_AUTHOR("Atheros Communications");
|
||||||
MODULE_DESCRIPTION("Shared library for Atheros wireless 802.11n LAN cards.");
|
MODULE_DESCRIPTION("Shared library for Atheros wireless 802.11n LAN cards.");
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
MODULE_LICENSE("Dual BSD/GPL");
|
||||||
|
|
||||||
|
void ath9k_cmn_process_rssi(struct ath_common *common,
|
||||||
|
struct ieee80211_hw *hw,
|
||||||
|
struct ath_rx_status *rx_stats,
|
||||||
|
struct ieee80211_rx_status *rxs)
|
||||||
|
{
|
||||||
|
struct ath_hw *ah = common->ah;
|
||||||
|
int last_rssi;
|
||||||
|
int rssi = rx_stats->rs_rssi;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RSSI is not available for subframes in an A-MPDU.
|
||||||
|
*/
|
||||||
|
if (rx_stats->rs_moreaggr) {
|
||||||
|
rxs->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the RSSI for the last subframe in an A-MPDU
|
||||||
|
* or an unaggregated frame is valid.
|
||||||
|
*/
|
||||||
|
if (rx_stats->rs_rssi == ATH9K_RSSI_BAD) {
|
||||||
|
rxs->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
|
||||||
|
s8 rssi;
|
||||||
|
|
||||||
|
if (!(ah->rxchainmask & BIT(i)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
rssi = rx_stats->rs_rssi_ctl[i];
|
||||||
|
if (rssi != ATH9K_RSSI_BAD) {
|
||||||
|
rxs->chains |= BIT(j);
|
||||||
|
rxs->chain_signal[j] = ah->noise + rssi;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Update Beacon RSSI, this is used by ANI.
|
||||||
|
*/
|
||||||
|
if (rx_stats->is_mybeacon &&
|
||||||
|
((ah->opmode == NL80211_IFTYPE_STATION) ||
|
||||||
|
(ah->opmode == NL80211_IFTYPE_ADHOC))) {
|
||||||
|
ATH_RSSI_LPF(common->last_rssi, rx_stats->rs_rssi);
|
||||||
|
last_rssi = common->last_rssi;
|
||||||
|
|
||||||
|
if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
|
||||||
|
rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
|
||||||
|
if (rssi < 0)
|
||||||
|
rssi = 0;
|
||||||
|
|
||||||
|
ah->stats.avgbrssi = rssi;
|
||||||
|
}
|
||||||
|
|
||||||
|
rxs->signal = ah->noise + rx_stats->rs_rssi;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ath9k_cmn_process_rssi);
|
||||||
|
|
||||||
int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb)
|
int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
|
@ -42,6 +42,10 @@
|
||||||
#define ATH_EP_RND(x, mul) \
|
#define ATH_EP_RND(x, mul) \
|
||||||
(((x) + ((mul)/2)) / (mul))
|
(((x) + ((mul)/2)) / (mul))
|
||||||
|
|
||||||
|
void ath9k_cmn_process_rssi(struct ath_common *common,
|
||||||
|
struct ieee80211_hw *hw,
|
||||||
|
struct ath_rx_status *rx_stats,
|
||||||
|
struct ieee80211_rx_status *rxs);
|
||||||
int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb);
|
int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb);
|
||||||
struct ath9k_channel *ath9k_cmn_get_channel(struct ieee80211_hw *hw,
|
struct ath9k_channel *ath9k_cmn_get_channel(struct ieee80211_hw *hw,
|
||||||
struct ath_hw *ah,
|
struct ath_hw *ah,
|
||||||
|
|
|
@ -534,7 +534,7 @@ static void ath9k_init_misc(struct ath_softc *sc)
|
||||||
|
|
||||||
setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
|
setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
|
||||||
|
|
||||||
sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
common->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||||
sc->config.txpowlimit = ATH_TXPOWER_MAX;
|
sc->config.txpowlimit = ATH_TXPOWER_MAX;
|
||||||
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
||||||
sc->beacon.slottime = ATH9K_SLOT_TIME_9;
|
sc->beacon.slottime = ATH9K_SLOT_TIME_9;
|
||||||
|
|
|
@ -1606,7 +1606,7 @@ static void ath9k_set_assoc_state(struct ath_softc *sc,
|
||||||
common->curaid = bss_conf->aid;
|
common->curaid = bss_conf->aid;
|
||||||
ath9k_hw_write_associd(sc->sc_ah);
|
ath9k_hw_write_associd(sc->sc_ah);
|
||||||
|
|
||||||
sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
common->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||||
sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
|
sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
|
||||||
|
|
||||||
spin_lock_irqsave(&sc->sc_pm_lock, flags);
|
spin_lock_irqsave(&sc->sc_pm_lock, flags);
|
||||||
|
|
|
@ -891,68 +891,6 @@ static int ath9k_process_rate(struct ath_common *common,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath9k_process_rssi(struct ath_common *common,
|
|
||||||
struct ieee80211_hw *hw,
|
|
||||||
struct ath_rx_status *rx_stats,
|
|
||||||
struct ieee80211_rx_status *rxs)
|
|
||||||
{
|
|
||||||
struct ath_softc *sc = hw->priv;
|
|
||||||
struct ath_hw *ah = common->ah;
|
|
||||||
int last_rssi;
|
|
||||||
int rssi = rx_stats->rs_rssi;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* RSSI is not available for subframes in an A-MPDU.
|
|
||||||
*/
|
|
||||||
if (rx_stats->rs_moreaggr) {
|
|
||||||
rxs->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the RSSI for the last subframe in an A-MPDU
|
|
||||||
* or an unaggregated frame is valid.
|
|
||||||
*/
|
|
||||||
if (rx_stats->rs_rssi == ATH9K_RSSI_BAD) {
|
|
||||||
rxs->flag |= RX_FLAG_NO_SIGNAL_VAL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) {
|
|
||||||
s8 rssi;
|
|
||||||
|
|
||||||
if (!(ah->rxchainmask & BIT(i)))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
rssi = rx_stats->rs_rssi_ctl[i];
|
|
||||||
if (rssi != ATH9K_RSSI_BAD) {
|
|
||||||
rxs->chains |= BIT(j);
|
|
||||||
rxs->chain_signal[j] = ah->noise + rssi;
|
|
||||||
}
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Update Beacon RSSI, this is used by ANI.
|
|
||||||
*/
|
|
||||||
if (rx_stats->is_mybeacon &&
|
|
||||||
((ah->opmode == NL80211_IFTYPE_STATION) ||
|
|
||||||
(ah->opmode == NL80211_IFTYPE_ADHOC))) {
|
|
||||||
ATH_RSSI_LPF(sc->last_rssi, rx_stats->rs_rssi);
|
|
||||||
last_rssi = sc->last_rssi;
|
|
||||||
|
|
||||||
if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
|
|
||||||
rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER);
|
|
||||||
if (rssi < 0)
|
|
||||||
rssi = 0;
|
|
||||||
|
|
||||||
ah->stats.avgbrssi = rssi;
|
|
||||||
}
|
|
||||||
|
|
||||||
rxs->signal = ah->noise + rx_stats->rs_rssi;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath9k_process_tsf(struct ath_rx_status *rs,
|
static void ath9k_process_tsf(struct ath_rx_status *rs,
|
||||||
struct ieee80211_rx_status *rxs,
|
struct ieee80211_rx_status *rxs,
|
||||||
u64 tsf)
|
u64 tsf)
|
||||||
|
@ -1074,7 +1012,7 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
ath9k_process_rssi(common, hw, rx_stats, rx_status);
|
ath9k_cmn_process_rssi(common, hw, rx_stats, rx_status);
|
||||||
|
|
||||||
rx_status->band = ah->curchan->chan->band;
|
rx_status->band = ah->curchan->chan->band;
|
||||||
rx_status->freq = ah->curchan->chan->center_freq;
|
rx_status->freq = ah->curchan->chan->center_freq;
|
||||||
|
|
Loading…
Reference in New Issue