mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 11:03:43 +02:00
wifi: mt76: mt7996: fix several fields in mt7996_mcu_bss_basic_tlv()
Fix several fields in mt7996_mcu_bss_basic_tlv() that were not obtained
from the correct link. Without this patch, the MLD station interface
does not function properly.
Fixes: 34a41bfbcb ("wifi: mt76: mt7996: prepare mt7996_mcu_add_dev/bss_info for MLO support")
Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20251106064203.1000505-5-shayne.chen@mediatek.com
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
feb06d4556
commit
bb705a6067
|
|
@ -1037,7 +1037,6 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
|
|||
struct mt76_connac_bss_basic_tlv *bss;
|
||||
u32 type = CONNECTION_INFRA_AP;
|
||||
u16 sta_wlan_idx = wlan_idx;
|
||||
struct ieee80211_sta *sta;
|
||||
struct tlv *tlv;
|
||||
int idx;
|
||||
|
||||
|
|
@ -1048,14 +1047,18 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
|
|||
break;
|
||||
case NL80211_IFTYPE_STATION:
|
||||
if (enable) {
|
||||
rcu_read_lock();
|
||||
sta = ieee80211_find_sta(vif, vif->bss_conf.bssid);
|
||||
/* TODO: enable BSS_INFO_UAPSD & BSS_INFO_PM */
|
||||
if (sta) {
|
||||
struct mt76_wcid *wcid;
|
||||
struct ieee80211_sta *sta;
|
||||
|
||||
wcid = (struct mt76_wcid *)sta->drv_priv;
|
||||
sta_wlan_idx = wcid->idx;
|
||||
rcu_read_lock();
|
||||
sta = ieee80211_find_sta(vif, link_conf->bssid);
|
||||
if (sta) {
|
||||
struct mt7996_sta *msta = (void *)sta->drv_priv;
|
||||
struct mt7996_sta_link *msta_link;
|
||||
int link_id = link_conf->link_id;
|
||||
|
||||
msta_link = rcu_dereference(msta->link[link_id]);
|
||||
if (msta_link)
|
||||
sta_wlan_idx = msta_link->wcid.idx;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
|
@ -1072,8 +1075,6 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
|
|||
tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_BASIC, sizeof(*bss));
|
||||
|
||||
bss = (struct mt76_connac_bss_basic_tlv *)tlv;
|
||||
bss->bcn_interval = cpu_to_le16(link_conf->beacon_int);
|
||||
bss->dtim_period = link_conf->dtim_period;
|
||||
bss->bmc_tx_wlan_idx = cpu_to_le16(wlan_idx);
|
||||
bss->sta_idx = cpu_to_le16(sta_wlan_idx);
|
||||
bss->conn_type = cpu_to_le32(type);
|
||||
|
|
@ -1093,10 +1094,10 @@ mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
|
|||
|
||||
memcpy(bss->bssid, link_conf->bssid, ETH_ALEN);
|
||||
bss->bcn_interval = cpu_to_le16(link_conf->beacon_int);
|
||||
bss->dtim_period = vif->bss_conf.dtim_period;
|
||||
bss->dtim_period = link_conf->dtim_period;
|
||||
bss->phymode = mt76_connac_get_phy_mode(phy, vif,
|
||||
chandef->chan->band, NULL);
|
||||
bss->phymode_ext = mt76_connac_get_phy_mode_ext(phy, &vif->bss_conf,
|
||||
bss->phymode_ext = mt76_connac_get_phy_mode_ext(phy, link_conf,
|
||||
chandef->chan->band);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user