Skip to content

Commit d107501

Browse files
LorenzoBianconinbd168
authored andcommitted
wifi: mt76: move aggr_stats array in mt76_phy
Move aggregation stats array per-phy instead of share it between multiple interfaces. This is a preliminary patch to add mt7996 driver support. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
1 parent 1b9ba30 commit d107501

File tree

13 files changed

+35
-45
lines changed

13 files changed

+35
-45
lines changed

drivers/net/wireless/mediatek/mt76/mt76.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,8 @@ struct mt76_phy {
693693
enum mt76_dfs_state dfs_state;
694694
ktime_t survey_time;
695695

696+
u32 aggr_stats[32];
697+
696698
struct mt76_hw_cap cap;
697699
struct mt76_sband sband_2g;
698700
struct mt76_sband sband_5g;
@@ -781,8 +783,6 @@ struct mt76_dev {
781783

782784
u32 rev;
783785

784-
u32 aggr_stats[32];
785-
786786
struct tasklet_struct pre_tbtt_tasklet;
787787
int beacon_int;
788788
u8 beacon_mask;

drivers/net/wireless/mediatek/mt76/mt7603/debugfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ mt7603_ampdu_stat_show(struct seq_file *file, void *data)
8585
bound[i], bound[i + 1]);
8686
seq_puts(file, "\nCount: ");
8787
for (i = 0; i < ARRAY_SIZE(bound); i++)
88-
seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i]);
88+
seq_printf(file, "%8d | ", dev->mphy.aggr_stats[i]);
8989
seq_puts(file, "\n");
9090

9191
return 0;

drivers/net/wireless/mediatek/mt76/mt7603/mac.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void mt7603_mac_reset_counters(struct mt7603_dev *dev)
3939
for (i = 0; i < 2; i++)
4040
mt76_rr(dev, MT_TX_AGG_CNT(i));
4141

42-
memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
42+
memset(dev->mphy.aggr_stats, 0, sizeof(dev->mphy.aggr_stats));
4343
}
4444

4545
void mt7603_mac_set_timing(struct mt7603_dev *dev)
@@ -1827,8 +1827,8 @@ void mt7603_mac_work(struct work_struct *work)
18271827
for (i = 0, idx = 0; i < 2; i++) {
18281828
u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));
18291829

1830-
dev->mt76.aggr_stats[idx++] += val & 0xffff;
1831-
dev->mt76.aggr_stats[idx++] += val >> 16;
1830+
dev->mphy.aggr_stats[idx++] += val & 0xffff;
1831+
dev->mphy.aggr_stats[idx++] += val >> 16;
18321832
}
18331833

18341834
if (dev->mphy.mac_work_count == 10)

drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ mt7615_ampdu_stat_read_phy(struct mt7615_phy *phy,
278278
{
279279
struct mt7615_dev *dev = file->private;
280280
u32 reg = is_mt7663(&dev->mt76) ? MT_MIB_ARNG(0) : MT_AGG_ASRCR0;
281-
bool ext_phy = phy != &dev->phy;
282281
int bound[7], i, range;
283282

284283
if (!phy)
@@ -292,17 +291,16 @@ mt7615_ampdu_stat_read_phy(struct mt7615_phy *phy,
292291
for (i = 0; i < 3; i++)
293292
bound[i + 4] = MT_AGG_ASRCR_RANGE(range, i) + 1;
294293

295-
seq_printf(file, "\nPhy %d\n", ext_phy);
294+
seq_printf(file, "\nPhy %d\n", phy != &dev->phy);
296295

297296
seq_printf(file, "Length: %8d | ", bound[0]);
298297
for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
299298
seq_printf(file, "%3d -%3d | ",
300299
bound[i], bound[i + 1]);
301300
seq_puts(file, "\nCount: ");
302301

303-
range = ext_phy ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
304302
for (i = 0; i < ARRAY_SIZE(bound); i++)
305-
seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i + range]);
303+
seq_printf(file, "%8d | ", phy->mt76->aggr_stats[i]);
306304
seq_puts(file, "\n");
307305

308306
seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);

drivers/net/wireless/mediatek/mt76/mt7615/mac.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ void mt7615_mac_reset_counters(struct mt7615_phy *phy)
117117
mt76_rr(dev, MT_TX_AGG_CNT(1, i));
118118
}
119119

120-
memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
120+
memset(phy->mt76->aggr_stats, 0, sizeof(phy->mt76->aggr_stats));
121121
phy->mt76->survey_time = ktime_get_boottime();
122122

123123
/* reset airtime counters */
@@ -2012,7 +2012,7 @@ mt7615_mac_update_mib_stats(struct mt7615_phy *phy)
20122012
struct mt7615_dev *dev = phy->dev;
20132013
struct mib_stats *mib = &phy->mib;
20142014
bool ext_phy = phy != &dev->phy;
2015-
int i, aggr;
2015+
int i, aggr = 0;
20162016
u32 val, val2;
20172017

20182018
mib->fcs_err_cnt += mt76_get_field(dev, MT_MIB_SDR3(ext_phy),
@@ -2026,7 +2026,6 @@ mt7615_mac_update_mib_stats(struct mt7615_phy *phy)
20262026
mib->aggr_per = 1000 * (val - val2) / val;
20272027
}
20282028

2029-
aggr = ext_phy ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
20302029
for (i = 0; i < 4; i++) {
20312030
val = mt76_rr(dev, MT_MIB_MB_SDR1(ext_phy, i));
20322031
mib->ba_miss_cnt += FIELD_GET(MT_MIB_BA_MISS_COUNT_MASK, val);
@@ -2039,8 +2038,8 @@ mt7615_mac_update_mib_stats(struct mt7615_phy *phy)
20392038
val);
20402039

20412040
val = mt76_rr(dev, MT_TX_AGG_CNT(ext_phy, i));
2042-
dev->mt76.aggr_stats[aggr++] += val & 0xffff;
2043-
dev->mt76.aggr_stats[aggr++] += val >> 16;
2041+
phy->mt76->aggr_stats[aggr++] += val & 0xffff;
2042+
phy->mt76->aggr_stats[aggr++] += val >> 16;
20442043
}
20452044
}
20462045

drivers/net/wireless/mediatek/mt76/mt76x02_debugfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ mt76x02_ampdu_stat_show(struct seq_file *file, void *data)
2020
seq_puts(file, "Count: ");
2121
for (j = 0; j < 8; j++)
2222
seq_printf(file, "%8d | ",
23-
dev->mt76.aggr_stats[i * 8 + j]);
23+
dev->mphy.aggr_stats[i * 8 + j]);
2424
seq_puts(file, "\n");
2525
seq_puts(file, "--------");
2626
for (j = 0; j < 8; j++)

drivers/net/wireless/mediatek/mt76/mt76x02_mac.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void mt76x02_mac_reset_counters(struct mt76x02_dev *dev)
2525
for (i = 0; i < 16; i++)
2626
mt76_rr(dev, MT_TX_STAT_FIFO);
2727

28-
memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
28+
memset(dev->mphy.aggr_stats, 0, sizeof(dev->mphy.aggr_stats));
2929
}
3030
EXPORT_SYMBOL_GPL(mt76x02_mac_reset_counters);
3131

@@ -1191,8 +1191,8 @@ void mt76x02_mac_work(struct work_struct *work)
11911191
for (i = 0, idx = 0; i < 16; i++) {
11921192
u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));
11931193

1194-
dev->mt76.aggr_stats[idx++] += val & 0xffff;
1195-
dev->mt76.aggr_stats[idx++] += val >> 16;
1194+
dev->mphy.aggr_stats[idx++] += val & 0xffff;
1195+
dev->mphy.aggr_stats[idx++] += val >> 16;
11961196
}
11971197

11981198
mt76x02_check_mac_err(dev);

drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
639639
{
640640
struct mt7915_dev *dev = phy->dev;
641641
bool ext_phy = phy != &dev->phy;
642-
int bound[15], range[4], i, n;
642+
int bound[15], range[4], i;
643643

644644
/* Tx ampdu stat */
645645
for (i = 0; i < ARRAY_SIZE(range); i++)
@@ -656,9 +656,8 @@ mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
656656
bound[i] + 1, bound[i + 1]);
657657

658658
seq_puts(file, "\nCount: ");
659-
n = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
660659
for (i = 0; i < ARRAY_SIZE(bound); i++)
661-
seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i + n]);
660+
seq_printf(file, "%8d | ", phy->mt76->aggr_stats[i]);
662661
seq_puts(file, "\n");
663662

664663
seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);

drivers/net/wireless/mediatek/mt76/mt7915/mac.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,12 +1159,8 @@ void mt7915_mac_reset_counters(struct mt7915_phy *phy)
11591159
mt76_rr(dev, MT_TX_AGG_CNT2(phy->band_idx, i));
11601160
}
11611161

1162-
i = 0;
11631162
phy->mt76->survey_time = ktime_get_boottime();
1164-
if (phy->band_idx)
1165-
i = ARRAY_SIZE(dev->mt76.aggr_stats) / 2;
1166-
1167-
memset(&dev->mt76.aggr_stats[i], 0, sizeof(dev->mt76.aggr_stats) / 2);
1163+
memset(phy->mt76->aggr_stats, 0, sizeof(phy->mt76->aggr_stats));
11681164

11691165
/* reset airtime counters */
11701166
mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(phy->band_idx),
@@ -1507,7 +1503,7 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
15071503
{
15081504
struct mt7915_dev *dev = phy->dev;
15091505
struct mib_stats *mib = &phy->mib;
1510-
int i, aggr0, aggr1, cnt;
1506+
int i, aggr0 = 0, aggr1, cnt;
15111507
u32 val;
15121508

15131509
cnt = mt76_rr(dev, MT_MIB_SDR3(phy->band_idx));
@@ -1639,7 +1635,6 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
16391635
mib->tx_amsdu_cnt += cnt;
16401636
}
16411637

1642-
aggr0 = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
16431638
if (is_mt7915(&dev->mt76)) {
16441639
for (i = 0, aggr1 = aggr0 + 8; i < 4; i++) {
16451640
val = mt76_rr(dev, MT_MIB_MB_SDR1(phy->band_idx, (i << 4)));
@@ -1654,12 +1649,12 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
16541649
FIELD_GET(MT_MIB_RTS_RETRIES_COUNT_MASK, val);
16551650

16561651
val = mt76_rr(dev, MT_TX_AGG_CNT(phy->band_idx, i));
1657-
dev->mt76.aggr_stats[aggr0++] += val & 0xffff;
1658-
dev->mt76.aggr_stats[aggr0++] += val >> 16;
1652+
phy->mt76->aggr_stats[aggr0++] += val & 0xffff;
1653+
phy->mt76->aggr_stats[aggr0++] += val >> 16;
16591654

16601655
val = mt76_rr(dev, MT_TX_AGG_CNT2(phy->band_idx, i));
1661-
dev->mt76.aggr_stats[aggr1++] += val & 0xffff;
1662-
dev->mt76.aggr_stats[aggr1++] += val >> 16;
1656+
phy->mt76->aggr_stats[aggr1++] += val & 0xffff;
1657+
phy->mt76->aggr_stats[aggr1++] += val >> 16;
16631658
}
16641659

16651660
cnt = mt76_rr(dev, MT_MIB_SDR32(phy->band_idx));
@@ -1706,8 +1701,8 @@ void mt7915_mac_update_stats(struct mt7915_phy *phy)
17061701

17071702
for (i = 0; i < 8; i++) {
17081703
val = mt76_rr(dev, MT_TX_AGG_CNT(phy->band_idx, i));
1709-
dev->mt76.aggr_stats[aggr0++] += FIELD_GET(GENMASK(15, 0), val);
1710-
dev->mt76.aggr_stats[aggr0++] += FIELD_GET(GENMASK(31, 16), val);
1704+
phy->mt76->aggr_stats[aggr0++] += FIELD_GET(GENMASK(15, 0), val);
1705+
phy->mt76->aggr_stats[aggr0++] += FIELD_GET(GENMASK(31, 16), val);
17111706
}
17121707

17131708
cnt = mt76_rr(dev, MT_MIB_SDR32(phy->band_idx));

drivers/net/wireless/mediatek/mt76/mt7915/main.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,7 +1267,7 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw,
12671267
};
12681268
struct mib_stats *mib = &phy->mib;
12691269
/* See mt7915_ampdu_stat_read_phy, etc */
1270-
int i, n, ei = 0;
1270+
int i, ei = 0;
12711271

12721272
mutex_lock(&dev->mt76.mutex);
12731273

@@ -1283,9 +1283,8 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw,
12831283
data[ei++] = mib->tx_pkt_ibf_cnt;
12841284

12851285
/* Tx ampdu stat */
1286-
n = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
12871286
for (i = 0; i < 15 /*ARRAY_SIZE(bound)*/; i++)
1288-
data[ei++] = dev->mt76.aggr_stats[i + n];
1287+
data[ei++] = phy->mt76->aggr_stats[i];
12891288

12901289
data[ei++] = phy->mib.ba_miss_cnt;
12911290

0 commit comments

Comments
 (0)