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
|
||||
|
||||
struct ath9k_hw_cal_data caldata;
|
||||
int last_rssi;
|
||||
|
||||
#ifdef CONFIG_ATH9K_DEBUGFS
|
||||
struct ath9k_debug debug;
|
||||
|
|
|
@ -27,6 +27,68 @@ MODULE_AUTHOR("Atheros Communications");
|
|||
MODULE_DESCRIPTION("Shared library for Atheros wireless 802.11n LAN cards.");
|
||||
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)
|
||||
{
|
||||
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
||||
|
|
|
@ -42,6 +42,10 @@
|
|||
#define ATH_EP_RND(x, 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);
|
||||
struct ath9k_channel *ath9k_cmn_get_channel(struct ieee80211_hw *hw,
|
||||
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);
|
||||
|
||||
sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
common->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
sc->config.txpowlimit = ATH_TXPOWER_MAX;
|
||||
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
||||
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;
|
||||
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;
|
||||
|
||||
spin_lock_irqsave(&sc->sc_pm_lock, flags);
|
||||
|
|
|
@ -891,68 +891,6 @@ static int ath9k_process_rate(struct ath_common *common,
|
|||
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,
|
||||
struct ieee80211_rx_status *rxs,
|
||||
u64 tsf)
|
||||
|
@ -1074,7 +1012,7 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
|
|||
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->freq = ah->curchan->chan->center_freq;
|
||||
|
|
Loading…
Reference in New Issue