if (params->ht_capa)
                ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
-                                                 params->ht_capa, sta);
+                                                 params->ht_capa, sta, 0);
 
        /* VHT can override some HT caps such as the A-MSDU max length */
        if (params->vht_capa)
 
 bool ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata,
                                       struct ieee80211_supported_band *sband,
                                       const struct ieee80211_ht_cap *ht_cap_ie,
-                                      struct sta_info *sta)
+                                      struct sta_info *sta, unsigned int link_id)
 {
        struct ieee80211_sta_ht_cap ht_cap, own_cap;
        u8 ampdu_info, tx_mcs_set_cap;
                sta->sta.max_amsdu_len = IEEE80211_MAX_MPDU_LEN_HT_3839;
 
  apply:
-       changed = memcmp(&sta->sta.deflink.ht_cap, &ht_cap, sizeof(ht_cap));
+       changed = memcmp(&sta->sta.link[link_id]->ht_cap,
+                        &ht_cap, sizeof(ht_cap));
 
-       memcpy(&sta->sta.deflink.ht_cap, &ht_cap, sizeof(ht_cap));
+       memcpy(&sta->sta.link[link_id]->ht_cap, &ht_cap, sizeof(ht_cap));
 
-       switch (sdata->vif.bss_conf.chandef.width) {
+       switch (sdata->vif.link_conf[link_id]->chandef.width) {
        default:
                WARN_ON_ONCE(1);
                fallthrough;
                break;
        }
 
-       sta->sta.deflink.bandwidth = bw;
+       sta->sta.link[link_id]->bandwidth = bw;
 
-       sta->deflink.cur_max_bandwidth =
+       sta->link[link_id]->cur_max_bandwidth =
                ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40 ?
                                IEEE80211_STA_RX_BW_40 : IEEE80211_STA_RX_BW_20;
 
 
                memcpy(&htcap_ie, elems->ht_cap_elem, sizeof(htcap_ie));
                rates_updated |= ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
                                                                   &htcap_ie,
-                                                                  sta);
+                                                                  sta, 0);
 
                if (elems->vht_operation && elems->vht_cap_elem &&
                    sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_20 &&
 
 bool ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_sub_if_data *sdata,
                                       struct ieee80211_supported_band *sband,
                                       const struct ieee80211_ht_cap *ht_cap_ie,
-                                      struct sta_info *sta);
+                                      struct sta_info *sta, unsigned int link_id);
 void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
                          const u8 *da, u16 tid,
                          u16 initiator, u16 reason_code);
 
        sta->sta.deflink.supp_rates[sband->band] = rates;
 
        if (ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
-                                             elems->ht_cap_elem, sta))
+                                             elems->ht_cap_elem, sta, 0))
                changed |= IEEE80211_RC_BW_CHANGED;
 
        ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
 
        /* Set up internal HT/VHT capabilities */
        if (elems->ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_HT))
                ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
-                                                 elems->ht_cap_elem, sta);
+                                                 elems->ht_cap_elem, sta, 0);
 
        if (elems->vht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT))
                ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,