mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 21:36:52 +00:00
mt76: mt7615: report tx_time, bss_rx and busy time to mac80211
Report tx time/rx time and obss time from hw mib counters to fill survey info requested by mac80211 Co-developed-by: Felix Fietkau <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
committed by
Felix Fietkau
parent
0e5050ee79
commit
028071d959
@@ -505,6 +505,7 @@ int mt76_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
survey->time = div_u64(state->cc_active, 1000);
|
||||
survey->time_busy = div_u64(state->cc_busy, 1000);
|
||||
survey->time_bss_rx = div_u64(state->cc_bss_rx, 1000);
|
||||
survey->time_rx = div_u64(state->cc_rx, 1000);
|
||||
survey->time_tx = div_u64(state->cc_tx, 1000);
|
||||
spin_unlock_bh(&dev->cc_lock);
|
||||
|
||||
|
||||
@@ -321,6 +321,7 @@ struct mt76_driver_ops {
|
||||
struct mt76_channel_state {
|
||||
u64 cc_active;
|
||||
u64 cc_busy;
|
||||
u64 cc_rx;
|
||||
u64 cc_bss_rx;
|
||||
u64 cc_tx;
|
||||
};
|
||||
|
||||
@@ -96,6 +96,8 @@ static void mt7615_mac_init(struct mt7615_dev *dev)
|
||||
FIELD_PREP(MT_DMA_RCFR0_RX_DROPPED_MCAST, 2);
|
||||
mt76_rmw(dev, MT_DMA_BN0RCFR0, mask, set);
|
||||
mt76_rmw(dev, MT_DMA_BN1RCFR0, mask, set);
|
||||
|
||||
mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_EN);
|
||||
}
|
||||
|
||||
static int mt7615_init_hardware(struct mt7615_dev *dev)
|
||||
|
||||
+24
-2
@@ -49,6 +49,14 @@ void mt7615_mac_reset_counters(struct mt7615_dev *dev)
|
||||
mt76_rr(dev, MT_TX_AGG_CNT(i));
|
||||
|
||||
memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
|
||||
|
||||
/* TODO: add DBDC support */
|
||||
|
||||
/* reset airtime counters */
|
||||
mt76_rr(dev, MT_MIB_SDR16(0));
|
||||
mt76_rr(dev, MT_MIB_SDR36(0));
|
||||
mt76_rr(dev, MT_MIB_SDR37(0));
|
||||
mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_CLR);
|
||||
}
|
||||
|
||||
int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)
|
||||
@@ -1263,11 +1271,25 @@ void mt7615_update_channel(struct mt76_dev *mdev)
|
||||
{
|
||||
struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
|
||||
struct mt76_channel_state *state;
|
||||
u64 busy_time, tx_time, rx_time, obss_time;
|
||||
|
||||
/* TODO: add DBDC support */
|
||||
busy_time = mt76_get_field(dev, MT_MIB_SDR16(0), MT_MIB_BUSY_MASK);
|
||||
tx_time = mt76_get_field(dev, MT_MIB_SDR36(0),
|
||||
MT_MIB_SDR36_TXTIME_MASK);
|
||||
rx_time = mt76_get_field(dev, MT_MIB_SDR37(0),
|
||||
MT_MIB_SDR37_RXTIME_MASK);
|
||||
obss_time = mt76_get_field(dev, MT_WF_RMAC_MIB_TIME5,
|
||||
MT_MIB_OBSSTIME_MASK);
|
||||
|
||||
state = mdev->chan_state;
|
||||
state->cc_busy += mt76_get_field(dev, MT_MIB_SDR16(0),
|
||||
MT_MIB_BUSY_MASK);
|
||||
state->cc_busy += busy_time;
|
||||
state->cc_tx += tx_time;
|
||||
state->cc_rx += rx_time + obss_time;
|
||||
state->cc_bss_rx += rx_time;
|
||||
|
||||
/* reset obss airtime */
|
||||
mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_CLR);
|
||||
}
|
||||
|
||||
void mt7615_mac_work(struct work_struct *work)
|
||||
|
||||
+2
-2
@@ -153,8 +153,8 @@ 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));
|
||||
|
||||
mt7615_mac_reset_counters(dev);
|
||||
|
||||
out:
|
||||
clear_bit(MT76_RESET, &dev->mt76.state);
|
||||
|
||||
@@ -73,6 +73,9 @@ static int mt7615_pci_probe(struct pci_dev *pdev,
|
||||
/* txwi_size = txd size + txp size */
|
||||
.txwi_size = MT_TXD_SIZE + sizeof(struct mt7615_txp),
|
||||
.drv_flags = MT_DRV_TXWI_NO_FREE,
|
||||
.survey_flags = SURVEY_INFO_TIME_TX |
|
||||
SURVEY_INFO_TIME_RX |
|
||||
SURVEY_INFO_TIME_BSS_RX,
|
||||
.tx_prepare_skb = mt7615_tx_prepare_skb,
|
||||
.tx_complete_skb = mt7615_tx_complete_skb,
|
||||
.rx_skb = mt7615_queue_rx_skb,
|
||||
|
||||
@@ -198,6 +198,13 @@
|
||||
#define MT_WF_RFCR1_DROP_CFEND BIT(7)
|
||||
#define MT_WF_RFCR1_DROP_CFACK BIT(8)
|
||||
|
||||
#define MT_WF_RMAC_MIB_TIME0 MT_WF_RMAC(0x03c4)
|
||||
#define MT_WF_RMAC_MIB_RXTIME_CLR BIT(31)
|
||||
#define MT_WF_RMAC_MIB_RXTIME_EN BIT(30)
|
||||
|
||||
#define MT_WF_RMAC_MIB_TIME5 MT_WF_RMAC(0x03d8)
|
||||
#define MT_MIB_OBSSTIME_MASK GENMASK(23, 0)
|
||||
|
||||
#define MT_WF_DMA_BASE 0x21800
|
||||
#define MT_WF_DMA(ofs) (MT_WF_DMA_BASE + (ofs))
|
||||
|
||||
@@ -289,6 +296,11 @@
|
||||
#define MT_MIB_SDR16(n) MT_WF_MIB(0x48 + ((n) << 9))
|
||||
#define MT_MIB_BUSY_MASK GENMASK(23, 0)
|
||||
|
||||
#define MT_MIB_SDR36(n) MT_WF_MIB(0x098 + ((n) << 9))
|
||||
#define MT_MIB_SDR36_TXTIME_MASK GENMASK(23, 0)
|
||||
#define MT_MIB_SDR37(n) MT_WF_MIB(0x09c + ((n) << 9))
|
||||
#define MT_MIB_SDR37_RXTIME_MASK GENMASK(23, 0)
|
||||
|
||||
#define MT_TX_AGG_CNT(n) MT_WF_MIB(0xa8 + ((n) << 2))
|
||||
|
||||
#define MT_EFUSE_BASE 0x81070000
|
||||
|
||||
Reference in New Issue
Block a user