Commit b859ad65 authored by Sean Wang's avatar Sean Wang Committed by Felix Fietkau
Browse files

wifi: mt76: mt7925: add link handling in mt7925_sta_set_decap_offload

parent 9f89f05b
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -1464,16 +1464,27 @@ static void mt7925_sta_set_decap_offload(struct ieee80211_hw *hw,
					 bool enabled)
{
	struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv;
	struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;
	struct mt792x_dev *dev = mt792x_hw_dev(hw);
	unsigned long valid = mvif->valid_links;
	u8 i;

	mt792x_mutex_acquire(dev);

	valid = ieee80211_vif_is_mld(vif) ? mvif->valid_links : BIT(0);

	for_each_set_bit(i, &valid, IEEE80211_MLD_MAX_NUM_LINKS) {
		struct mt792x_link_sta *mlink;

		mlink = mt792x_sta_to_link(msta, i);

		if (enabled)
		set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->deflink.wcid.flags);
			set_bit(MT_WCID_FLAG_HDR_TRANS, &mlink->wcid.flags);
		else
		clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->deflink.wcid.flags);
			clear_bit(MT_WCID_FLAG_HDR_TRANS, &mlink->wcid.flags);

	mt7925_mcu_wtbl_update_hdr_trans(dev, vif, sta);
		mt7925_mcu_wtbl_update_hdr_trans(dev, vif, sta, i);
	}

	mt792x_mutex_release(dev);
}
+18 −6
Original line number Diff line number Diff line
@@ -887,10 +887,15 @@ mt7925_mcu_sta_hdr_trans_tlv(struct sk_buff *skb,
	else
		hdr_trans->from_ds = true;

	if (link_sta)
		wcid = (struct mt76_wcid *)link_sta->sta->drv_priv;
	else
	if (link_sta) {
		struct mt792x_sta *msta = (struct mt792x_sta *)link_sta->sta->drv_priv;
		struct mt792x_link_sta *mlink;

		mlink = mt792x_sta_to_link(msta, link_sta->link_id);
		wcid = &mlink->wcid;
	} else {
		wcid = &mvif->sta.deflink.wcid;
	}

	if (!wcid)
		return;
@@ -904,17 +909,24 @@ mt7925_mcu_sta_hdr_trans_tlv(struct sk_buff *skb,

int mt7925_mcu_wtbl_update_hdr_trans(struct mt792x_dev *dev,
				     struct ieee80211_vif *vif,
				     struct ieee80211_sta *sta)
				     struct ieee80211_sta *sta,
				     int link_id)
{
	struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;
	struct ieee80211_link_sta *link_sta = sta ? &sta->deflink : NULL;
	struct mt792x_link_sta *mlink;
	struct mt792x_bss_conf *mconf;
	struct mt792x_sta *msta;
	struct sk_buff *skb;

	msta = sta ? (struct mt792x_sta *)sta->drv_priv : &mvif->sta;

	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->bss_conf.mt76,
					      &msta->deflink.wcid,
	mlink = mt792x_sta_to_link(msta, link_id);
	link_sta = mt792x_sta_to_link_sta(vif, sta, link_id);
	mconf = mt792x_vif_to_link(mvif, link_id);

	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mconf->mt76,
					      &mlink->wcid,
					      MT7925_STA_UPDATE_MAX_SIZE);
	if (IS_ERR(skb))
		return PTR_ERR(skb);
+2 −1
Original line number Diff line number Diff line
@@ -316,6 +316,7 @@ int mt7925_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
int mt7925_mcu_set_rts_thresh(struct mt792x_phy *phy, u32 val);
int mt7925_mcu_wtbl_update_hdr_trans(struct mt792x_dev *dev,
				     struct ieee80211_vif *vif,
				     struct ieee80211_sta *sta);
				     struct ieee80211_sta *sta,
				     int link_id);

#endif