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);
 
-       if (enabled)
-               set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->deflink.wcid.flags);
-       else
-               clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->deflink.wcid.flags);
+       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;
 
-       mt7925_mcu_wtbl_update_hdr_trans(dev, vif, sta);
+               mlink = mt792x_sta_to_link(msta, i);
+
+               if (enabled)
+                       set_bit(MT_WCID_FLAG_HDR_TRANS, &mlink->wcid.flags);
+               else
+                       clear_bit(MT_WCID_FLAG_HDR_TRANS, &mlink->wcid.flags);
+
+               mt7925_mcu_wtbl_update_hdr_trans(dev, vif, sta, i);
+       }
 
        mt792x_mutex_release(dev);
 }
 
        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;
 
 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);
 
 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