wifi: mt76: mt7925: fix the wrong link_idx when has p2p_device

When the p2p device and MLO station concurrent, the p2p device
will occupy the wrong link_idx when the MLO secondary link is added.

Fixes: e38a82d25b08 ("wifi: mt76: connac: Extend mt76_connac_mcu_uni_add_dev for MLO")
Cc: [email protected]
Co-developed-by: Sean Wang <[email protected]>
Signed-off-by: Sean Wang <[email protected]>
Tested-by: Caleb Jorden <[email protected]>
Signed-off-by: Ming Yen Hsieh <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Ming Yen Hsieh
2025-03-10 13:07:19 +01:00
committed by Felix Fietkau
parent 11bacfcce3
commit 2823c50b1c
3 changed files with 13 additions and 6 deletions
+1
View File
@@ -776,6 +776,7 @@ struct mt76_testmode_data {
struct mt76_vif_link { struct mt76_vif_link {
u8 idx; u8 idx;
u8 link_idx;
u8 omac_idx; u8 omac_idx;
u8 band_idx; u8 band_idx;
u8 wmm_idx; u8 wmm_idx;
+2 -2
View File
@@ -1168,7 +1168,7 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
.tag = cpu_to_le16(DEV_INFO_ACTIVE), .tag = cpu_to_le16(DEV_INFO_ACTIVE),
.len = cpu_to_le16(sizeof(struct req_tlv)), .len = cpu_to_le16(sizeof(struct req_tlv)),
.active = enable, .active = enable,
.link_idx = mvif->idx, .link_idx = mvif->link_idx,
}, },
}; };
struct { struct {
@@ -1191,7 +1191,7 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
.bmc_tx_wlan_idx = cpu_to_le16(wcid->idx), .bmc_tx_wlan_idx = cpu_to_le16(wcid->idx),
.sta_idx = cpu_to_le16(wcid->idx), .sta_idx = cpu_to_le16(wcid->idx),
.conn_state = 1, .conn_state = 1,
.link_idx = mvif->idx, .link_idx = mvif->link_idx,
}, },
}; };
int err, idx, cmd, len; int err, idx, cmd, len;
+10 -4
View File
@@ -360,10 +360,15 @@ static int mt7925_mac_link_bss_add(struct mt792x_dev *dev,
struct mt76_txq *mtxq; struct mt76_txq *mtxq;
int idx, ret = 0; int idx, ret = 0;
mconf->mt76.idx = __ffs64(~dev->mt76.vif_mask); if (vif->type == NL80211_IFTYPE_P2P_DEVICE) {
if (mconf->mt76.idx >= MT792x_MAX_INTERFACES) { mconf->mt76.idx = MT792x_MAX_INTERFACES;
ret = -ENOSPC; } else {
goto out; mconf->mt76.idx = __ffs64(~dev->mt76.vif_mask);
if (mconf->mt76.idx >= MT792x_MAX_INTERFACES) {
ret = -ENOSPC;
goto out;
}
} }
mconf->mt76.omac_idx = ieee80211_vif_is_mld(vif) ? mconf->mt76.omac_idx = ieee80211_vif_is_mld(vif) ?
@@ -371,6 +376,7 @@ static int mt7925_mac_link_bss_add(struct mt792x_dev *dev,
mconf->mt76.band_idx = 0xff; mconf->mt76.band_idx = 0xff;
mconf->mt76.wmm_idx = ieee80211_vif_is_mld(vif) ? mconf->mt76.wmm_idx = ieee80211_vif_is_mld(vif) ?
0 : mconf->mt76.idx % MT76_CONNAC_MAX_WMM_SETS; 0 : mconf->mt76.idx % MT76_CONNAC_MAX_WMM_SETS;
mconf->mt76.link_idx = hweight16(mvif->valid_links);
if (mvif->phy->mt76->chandef.chan->band != NL80211_BAND_2GHZ) if (mvif->phy->mt76->chandef.chan->band != NL80211_BAND_2GHZ)
mconf->mt76.basic_rates_idx = MT792x_BASIC_RATES_TBL + 4; mconf->mt76.basic_rates_idx = MT792x_BASIC_RATES_TBL + 4;