mirror of https://gitee.com/openkylin/linux.git
mt76: move mt76x02_phy_get_min_avg_rssi in mt76x02_phy.c
Move mt76x02_phy_get_min_avg_rssi in mt76x02-lib module since it will be used by mt76x0 driver in order to unify rxwi parsing Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
5e6c49eca9
commit
50b9e8d55a
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "mt76.h"
|
||||
#include "mt76x02_phy.h"
|
||||
#include "mt76x02_mac.h"
|
||||
|
||||
void mt76x02_phy_set_rxpath(struct mt76_dev *dev)
|
||||
{
|
||||
|
@ -133,3 +134,50 @@ void mt76x02_phy_set_txpower(struct mt76_dev *dev, int txp_0, int txp_1)
|
|||
mt76x02_tx_power_mask(t->ht[7], 0, t->stbc[8], t->stbc[9]));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_phy_set_txpower);
|
||||
|
||||
int mt76x02_phy_get_min_avg_rssi(struct mt76_dev *dev)
|
||||
{
|
||||
struct mt76x02_sta *sta;
|
||||
struct mt76_wcid *wcid;
|
||||
int i, j, min_rssi = 0;
|
||||
s8 cur_rssi;
|
||||
|
||||
local_bh_disable();
|
||||
rcu_read_lock();
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dev->wcid_mask); i++) {
|
||||
unsigned long mask = dev->wcid_mask[i];
|
||||
|
||||
if (!mask)
|
||||
continue;
|
||||
|
||||
for (j = i * BITS_PER_LONG; mask; j++, mask >>= 1) {
|
||||
if (!(mask & 1))
|
||||
continue;
|
||||
|
||||
wcid = rcu_dereference(dev->wcid[j]);
|
||||
if (!wcid)
|
||||
continue;
|
||||
|
||||
sta = container_of(wcid, struct mt76x02_sta, wcid);
|
||||
spin_lock(&dev->rx_lock);
|
||||
if (sta->inactive_count++ < 5)
|
||||
cur_rssi = ewma_signal_read(&sta->rssi);
|
||||
else
|
||||
cur_rssi = 0;
|
||||
spin_unlock(&dev->rx_lock);
|
||||
|
||||
if (cur_rssi < min_rssi)
|
||||
min_rssi = cur_rssi;
|
||||
}
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
local_bh_enable();
|
||||
|
||||
if (!min_rssi)
|
||||
return -75;
|
||||
|
||||
return min_rssi;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x02_phy_get_min_avg_rssi);
|
||||
|
|
|
@ -25,5 +25,6 @@ void mt76x02_limit_rate_power(struct mt76_rate_power *r, int limit);
|
|||
int mt76x02_get_max_rate_power(struct mt76_rate_power *r);
|
||||
void mt76x02_phy_set_rxpath(struct mt76_dev *dev);
|
||||
void mt76x02_phy_set_txdac(struct mt76_dev *dev);
|
||||
int mt76x02_phy_get_min_avg_rssi(struct mt76_dev *dev);
|
||||
|
||||
#endif /* __MT76x02_PHY_H */
|
||||
|
|
|
@ -202,7 +202,6 @@ void mt76x2_configure_tx_delay(struct mt76x2_dev *dev,
|
|||
enum nl80211_band band, u8 bw);
|
||||
void mt76x2_phy_set_bw(struct mt76x2_dev *dev, int width, u8 ctrl);
|
||||
void mt76x2_phy_set_band(struct mt76x2_dev *dev, int band, bool primary_upper);
|
||||
int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev);
|
||||
void mt76x2_apply_gain_adj(struct mt76x2_dev *dev);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "mt76x2.h"
|
||||
#include "mcu.h"
|
||||
#include "eeprom.h"
|
||||
#include "../mt76x02_phy.h"
|
||||
|
||||
static bool
|
||||
mt76x2_phy_tssi_init_cal(struct mt76x2_dev *dev)
|
||||
|
@ -209,7 +210,7 @@ mt76x2_phy_update_channel_gain(struct mt76x2_dev *dev)
|
|||
int low_gain;
|
||||
u32 val;
|
||||
|
||||
dev->cal.avg_rssi_all = mt76x2_phy_get_min_avg_rssi(dev);
|
||||
dev->cal.avg_rssi_all = mt76x02_phy_get_min_avg_rssi(&dev->mt76);
|
||||
|
||||
low_gain = (dev->cal.avg_rssi_all > mt76x2_get_rssi_gain_thresh(dev)) +
|
||||
(dev->cal.avg_rssi_all > mt76x2_get_low_rssi_gain_thresh(dev));
|
||||
|
|
|
@ -254,53 +254,6 @@ void mt76x2_phy_set_band(struct mt76x2_dev *dev, int band, bool primary_upper)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x2_phy_set_band);
|
||||
|
||||
int mt76x2_phy_get_min_avg_rssi(struct mt76x2_dev *dev)
|
||||
{
|
||||
struct mt76x02_sta *sta;
|
||||
struct mt76_wcid *wcid;
|
||||
int i, j, min_rssi = 0;
|
||||
s8 cur_rssi;
|
||||
|
||||
local_bh_disable();
|
||||
rcu_read_lock();
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dev->mt76.wcid_mask); i++) {
|
||||
unsigned long mask = dev->mt76.wcid_mask[i];
|
||||
|
||||
if (!mask)
|
||||
continue;
|
||||
|
||||
for (j = i * BITS_PER_LONG; mask; j++, mask >>= 1) {
|
||||
if (!(mask & 1))
|
||||
continue;
|
||||
|
||||
wcid = rcu_dereference(dev->mt76.wcid[j]);
|
||||
if (!wcid)
|
||||
continue;
|
||||
|
||||
sta = container_of(wcid, struct mt76x02_sta, wcid);
|
||||
spin_lock(&dev->mt76.rx_lock);
|
||||
if (sta->inactive_count++ < 5)
|
||||
cur_rssi = ewma_signal_read(&sta->rssi);
|
||||
else
|
||||
cur_rssi = 0;
|
||||
spin_unlock(&dev->mt76.rx_lock);
|
||||
|
||||
if (cur_rssi < min_rssi)
|
||||
min_rssi = cur_rssi;
|
||||
}
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
local_bh_enable();
|
||||
|
||||
if (!min_rssi)
|
||||
return -75;
|
||||
|
||||
return min_rssi;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76x2_phy_get_min_avg_rssi);
|
||||
|
||||
void mt76x2_phy_tssi_compensate(struct mt76x2_dev *dev, bool wait)
|
||||
{
|
||||
struct ieee80211_channel *chan = dev->mt76.chandef.chan;
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "mt76x2u.h"
|
||||
#include "eeprom.h"
|
||||
#include "../mt76x02_phy.h"
|
||||
|
||||
void mt76x2u_phy_channel_calibrate(struct mt76x2_dev *dev)
|
||||
{
|
||||
|
@ -68,7 +69,7 @@ mt76x2u_phy_update_channel_gain(struct mt76x2_dev *dev)
|
|||
break;
|
||||
}
|
||||
|
||||
dev->cal.avg_rssi_all = mt76x2_phy_get_min_avg_rssi(dev);
|
||||
dev->cal.avg_rssi_all = mt76x02_phy_get_min_avg_rssi(&dev->mt76);
|
||||
false_cca = FIELD_GET(MT_RX_STAT_1_CCA_ERRORS,
|
||||
mt76_rr(dev, MT_RX_STAT_1));
|
||||
|
||||
|
|
Loading…
Reference in New Issue