Commit cf88e159 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau
Browse files

wifi: mt76: mt7996: rework mt7996_sta_hw_queue_read to support MLO



Extend mt7996_sta_hw_queue_read to support multi-link setup.

Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20250312-b4-mt7996-mlo-p2-v1-10-015b3d6fd928@kernel.org


Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 01690494
Loading
Loading
Loading
Loading
+38 −16
Original line number Diff line number Diff line
@@ -616,14 +616,32 @@ static void
mt7996_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
{
	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
	struct mt7996_dev *dev = msta->vif->deflink.phy->dev;
	struct mt7996_sta_link *msta_link = &msta->deflink;
	struct mt7996_vif *mvif = msta->vif;
	struct mt7996_dev *dev = mvif->deflink.phy->dev;
	struct ieee80211_link_sta *link_sta;
	struct seq_file *s = data;
	struct ieee80211_vif *vif;
	unsigned int link_id;

	vif = container_of((void *)mvif, struct ieee80211_vif, drv_priv);

	rcu_read_lock();

	for_each_sta_active_link(vif, sta, link_sta, link_id) {
		struct mt7996_sta_link *msta_link;
		struct mt76_vif_link *mlink;
		u8 ac;

		mlink = rcu_dereference(mvif->mt76.link[link_id]);
		if (!mlink)
			continue;

		msta_link = rcu_dereference(msta->link[link_id]);
		if (!msta_link)
			continue;

		for (ac = 0; ac < 4; ac++) {
		u32 qlen, ctrl, val;
		u32 idx = msta_link->wcid.idx >> 5;
			u32 idx = msta_link->wcid.idx >> 5, qlen, ctrl, val;
			u8 offs = msta_link->wcid.idx & GENMASK(4, 0);

			ctrl = BIT(31) | BIT(11) | (ac << 24);
@@ -632,15 +650,19 @@ mt7996_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
			if (val & BIT(offs))
				continue;

		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl | msta_link->wcid.idx);
			mt76_wr(dev,
				MT_FL_Q0_CTRL, ctrl | msta_link->wcid.idx);
			qlen = mt76_get_field(dev, MT_FL_Q3_CTRL,
					      GENMASK(11, 0));
			seq_printf(s, "\tSTA %pM wcid %d: AC%d%d queued:%d\n",
				   sta->addr, msta_link->wcid.idx,
			   msta->vif->deflink.mt76.wmm_idx, ac, qlen);
				   mlink->wmm_idx, ac, qlen);
		}
	}

	rcu_read_unlock();
}

static int
mt7996_hw_queues_show(struct seq_file *file, void *data)
{