mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
mt76: mt7615: enable survey support
Introduce channel survey support for mt7615 driver Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
fc98e670ad
commit
863c15a14e
@ -1155,6 +1155,29 @@ mt7615_mac_scs_check(struct mt7615_dev *dev)
|
||||
mt7615_mac_set_default_sensitivity(dev);
|
||||
}
|
||||
|
||||
void mt7615_update_channel(struct mt76_dev *mdev)
|
||||
{
|
||||
struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
|
||||
struct mt76_channel_state *state;
|
||||
ktime_t cur_time;
|
||||
u32 busy;
|
||||
|
||||
if (!test_bit(MT76_STATE_RUNNING, &mdev->state))
|
||||
return;
|
||||
|
||||
state = mt76_channel_state(mdev, mdev->chandef.chan);
|
||||
/* TODO: add DBDC support */
|
||||
busy = mt76_get_field(dev, MT_MIB_SDR16(0), MT_MIB_BUSY_MASK);
|
||||
|
||||
spin_lock_bh(&mdev->cc_lock);
|
||||
cur_time = ktime_get_boottime();
|
||||
state->cc_busy += busy;
|
||||
state->cc_active += ktime_to_us(ktime_sub(cur_time,
|
||||
mdev->survey_time));
|
||||
mdev->survey_time = cur_time;
|
||||
spin_unlock_bh(&mdev->cc_lock);
|
||||
}
|
||||
|
||||
void mt7615_mac_work(struct work_struct *work)
|
||||
{
|
||||
struct mt7615_dev *dev;
|
||||
@ -1163,6 +1186,7 @@ void mt7615_mac_work(struct work_struct *work)
|
||||
mac_work.work);
|
||||
|
||||
mutex_lock(&dev->mt76.mutex);
|
||||
mt7615_update_channel(&dev->mt76);
|
||||
if (++dev->mac_work_count == 5) {
|
||||
mt7615_mac_scs_check(dev);
|
||||
dev->mac_work_count = 0;
|
||||
|
@ -16,6 +16,7 @@ static int mt7615_start(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct mt7615_dev *dev = hw->priv;
|
||||
|
||||
dev->mt76.survey_time = ktime_get_boottime();
|
||||
set_bit(MT76_STATE_RUNNING, &dev->mt76.state);
|
||||
ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mt76.mac_work,
|
||||
MT7615_WATCHDOG_TIME);
|
||||
@ -149,6 +150,9 @@ static int mt7615_set_channel(struct mt7615_dev *dev)
|
||||
|
||||
ret = mt7615_dfs_init_radar_detector(dev);
|
||||
mt7615_mac_cca_stats_reset(dev);
|
||||
dev->mt76.survey_time = ktime_get_boottime();
|
||||
/* TODO: add DBDC support */
|
||||
mt76_rr(dev, MT_MIB_SDR16(0));
|
||||
|
||||
out:
|
||||
clear_bit(MT76_RESET, &dev->mt76.state);
|
||||
@ -521,4 +525,5 @@ const struct ieee80211_ops mt7615_ops = {
|
||||
.release_buffered_frames = mt76_release_buffered_frames,
|
||||
.get_txpower = mt76_get_txpower,
|
||||
.channel_switch_beacon = mt7615_channel_switch_beacon,
|
||||
.get_survey = mt76_get_survey,
|
||||
};
|
||||
|
@ -228,6 +228,7 @@ static inline void mt7615_irq_disable(struct mt7615_dev *dev, u32 mask)
|
||||
mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
|
||||
}
|
||||
|
||||
void mt7615_update_channel(struct mt76_dev *mdev);
|
||||
void mt7615_mac_cca_stats_reset(struct mt7615_dev *dev);
|
||||
void mt7615_mac_set_scs(struct mt7615_dev *dev, bool enable);
|
||||
int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
|
||||
|
@ -81,6 +81,7 @@ static int mt7615_pci_probe(struct pci_dev *pdev,
|
||||
.sta_add = mt7615_sta_add,
|
||||
.sta_assoc = mt7615_sta_assoc,
|
||||
.sta_remove = mt7615_sta_remove,
|
||||
.update_survey = mt7615_update_channel,
|
||||
};
|
||||
struct mt7615_dev *dev;
|
||||
struct mt76_dev *mdev;
|
||||
|
@ -255,6 +255,9 @@
|
||||
#define MT_MIB_RTS_RETRIES_COUNT_MASK GENMASK(31, 16)
|
||||
#define MT_MIB_RTS_COUNT_MASK GENMASK(15, 0)
|
||||
|
||||
#define MT_MIB_SDR16(n) MT_WF_MIB(0x48 + ((n) << 9))
|
||||
#define MT_MIB_BUSY_MASK GENMASK(23, 0)
|
||||
|
||||
#define MT_EFUSE_BASE 0x81070000
|
||||
#define MT_EFUSE_BASE_CTRL 0x000
|
||||
#define MT_EFUSE_BASE_CTRL_EMPTY BIT(30)
|
||||
|
Loading…
Reference in New Issue
Block a user