Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 32 additions & 7 deletions mt7925/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -993,18 +993,29 @@ mt7925_mac_set_links(struct mt76_dev *mdev, struct ieee80211_vif *vif)
{
struct mt792x_dev *dev = container_of(mdev, struct mt792x_dev, mt76);
struct mt792x_vif *mvif = (struct mt792x_vif *)vif->drv_priv;
struct ieee80211_bss_conf *link_conf =
mt792x_vif_to_bss_conf(vif, mvif->deflink_id);
struct cfg80211_chan_def *chandef = &link_conf->chanreq.oper;
enum nl80211_band band = chandef->chan->band, secondary_band;
struct ieee80211_bss_conf *link_conf;
struct cfg80211_chan_def *chandef;
enum nl80211_band band, secondary_band;
u16 sel_links;
u8 secondary_link_id;

link_conf = mt792x_vif_to_bss_conf(vif, mvif->deflink_id);
if (!link_conf)
return;

chandef = &link_conf->chanreq.oper;
band = chandef->chan->band;

u16 sel_links = mt76_select_links(vif, 2);
u8 secondary_link_id = __ffs(~BIT(mvif->deflink_id) & sel_links);
sel_links = mt76_select_links(vif, 2);
secondary_link_id = __ffs(~BIT(mvif->deflink_id) & sel_links);

if (!ieee80211_vif_is_mld(vif) || hweight16(sel_links) < 2)
return;

link_conf = mt792x_vif_to_bss_conf(vif, secondary_link_id);
if (!link_conf)
return;

secondary_band = link_conf->chanreq.oper.chan->band;

if (band == NL80211_BAND_2GHZ ||
Expand Down Expand Up @@ -1897,7 +1908,12 @@ static void mt7925_link_info_changed(struct ieee80211_hw *hw,
struct ieee80211_bss_conf *link_conf;

mconf = mt792x_vif_to_link(mvif, info->link_id);
if (!mconf)
return;

link_conf = mt792x_vif_to_bss_conf(vif, mconf->link_id);
if (!link_conf)
return;

mt792x_mutex_acquire(dev);

Expand Down Expand Up @@ -2101,9 +2117,14 @@ static int mt7925_assign_vif_chanctx(struct ieee80211_hw *hw,

if (ieee80211_vif_is_mld(vif)) {
mconf = mt792x_vif_to_link(mvif, link_conf->link_id);
if (!mconf) {
mutex_unlock(&dev->mt76.mutex);
return -EINVAL;
}

pri_link_conf = mt792x_vif_to_bss_conf(vif, mvif->deflink_id);

if (vif->type == NL80211_IFTYPE_STATION &&
if (pri_link_conf && vif->type == NL80211_IFTYPE_STATION &&
mconf == &mvif->bss_conf)
mt7925_mcu_add_bss_info(&dev->phy, NULL, pri_link_conf,
NULL, true);
Expand Down Expand Up @@ -2132,6 +2153,10 @@ static void mt7925_unassign_vif_chanctx(struct ieee80211_hw *hw,

if (ieee80211_vif_is_mld(vif)) {
mconf = mt792x_vif_to_link(mvif, link_conf->link_id);
if (!mconf) {
mutex_unlock(&dev->mt76.mutex);
return;
}

if (vif->type == NL80211_IFTYPE_STATION &&
mconf == &mvif->bss_conf)
Expand Down