if (ieee80211_vif_is_mld(vif) &&
link_sta == mlink->pri_link) {
- ret = mt7925_mcu_sta_update(dev, link_sta, vif, true,
+ ret = mt7925_mcu_sta_update(dev, link_sta, vif,
+ mlink, true,
MT76_STA_INFO_STATE_NONE);
if (ret)
return ret;
} else if (ieee80211_vif_is_mld(vif) &&
link_sta != mlink->pri_link) {
+ struct mt792x_link_sta *pri_mlink;
+
+ pri_mlink = mt792x_sta_to_link(msta, mlink->pri_link->link_id);
+
ret = mt7925_mcu_sta_update(dev, mlink->pri_link, vif,
- true, MT76_STA_INFO_STATE_ASSOC);
+ pri_mlink, true,
+ MT76_STA_INFO_STATE_ASSOC);
if (ret)
return ret;
- ret = mt7925_mcu_sta_update(dev, link_sta, vif, true,
+ ret = mt7925_mcu_sta_update(dev, link_sta, vif,
+ mlink, true,
MT76_STA_INFO_STATE_ASSOC);
if (ret)
return ret;
} else {
- ret = mt7925_mcu_sta_update(dev, link_sta, vif, true,
+ ret = mt7925_mcu_sta_update(dev, link_sta, vif,
+ mlink, true,
MT76_STA_INFO_STATE_NONE);
if (ret)
return ret;
MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
memset(mlink->airtime_ac, 0, sizeof(mlink->airtime_ac));
- mt7925_mcu_sta_update(dev, link_sta, vif, true, MT76_STA_INFO_STATE_ASSOC);
+ mt7925_mcu_sta_update(dev, link_sta, vif, mlink, true,
+ MT76_STA_INFO_STATE_ASSOC);
mt792x_mutex_release(dev);
}
mt76_connac_free_pending_tx_skbs(&dev->pm, &mlink->wcid);
mt76_connac_pm_wake(&dev->mphy, &dev->pm);
- mt7925_mcu_sta_update(dev, link_sta, vif, false,
+ mt7925_mcu_sta_update(dev, link_sta, vif, mlink, false,
MT76_STA_INFO_STATE_NONE);
mt7925_mac_wtbl_update(dev, mlink->wcid.idx,
MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
if (err)
goto out;
- err = mt7925_mcu_sta_update(dev, NULL, vif, true,
+ err = mt7925_mcu_sta_update(dev, NULL, vif,
+ &mvif->sta.deflink, true,
MT76_STA_INFO_STATE_NONE);
out:
mt792x_mutex_release(dev);
mt792x_mutex_acquire(dev);
if (changed & BSS_CHANGED_ASSOC) {
- mt7925_mcu_sta_update(dev, NULL, vif, true,
+ mt7925_mcu_sta_update(dev, NULL, vif,
+ &mvif->sta.deflink, true,
MT76_STA_INFO_STATE_ASSOC);
mt7925_mcu_set_beacon_filter(dev, vif, vif->cfg.assoc);
int mt7925_mcu_sta_update(struct mt792x_dev *dev,
struct ieee80211_link_sta *link_sta,
- struct ieee80211_vif *vif, bool enable,
+ struct ieee80211_vif *vif,
+ struct mt792x_link_sta *mlink,
+ bool enable,
enum mt76_sta_info_state state)
{
struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;
.offload_fw = true,
.rcpi = to_rcpi(rssi),
};
- struct mt792x_sta *msta;
- struct mt792x_link_sta *mlink;
- if (link_sta) {
- msta = (struct mt792x_sta *)link_sta->sta->drv_priv;
- mlink = mt792x_sta_to_link(msta, link_sta->link_id);
- }
- info.wcid = link_sta ? &mlink->wcid : &mvif->sta.deflink.wcid;
+ info.wcid = &mlink->wcid;
info.newly = state != MT76_STA_INFO_STATE_ASSOC;
return mt7925_mcu_sta_cmd(&dev->mphy, &info);