change add_dev_info from a UNI cmd to an EXT cmd. This fixed the timeout from the UNI cmd and allowed the card to scan networks. But I am not sure if this is the correct solution. Signed-off-by: tnguy3333 <tnguy3333@xxxxxxxxx> --- .../net/wireless/mediatek/mt76/mt7902/mac.c | 5 +-- .../net/wireless/mediatek/mt76/mt7902/main.c | 5 +-- .../net/wireless/mediatek/mt76/mt7902/mcu.c | 41 +++++++++++++++++++ .../wireless/mediatek/mt76/mt7902/mt7902.h | 3 ++ 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt7902/mac.c b/drivers/net/wireless/mediatek/mt76/mt7902/mac.c index d36b3c480..eca1d314d 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7902/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7902/mac.c @@ -635,9 +635,8 @@ mt7902_vif_connect_iter(void *priv, u8 *mac, if (vif->type == NL80211_IFTYPE_STATION) ieee80211_disconnect(vif, true); - mt76_connac_mcu_uni_add_dev(&dev->mphy, &vif->bss_conf, - &mvif->bss_conf.mt76, - &mvif->sta.deflink.wcid, true); + mt7902_mcu_add_dev_info(&dev->mphy, &vif->bss_conf, &mvif->bss_conf.mt76, true); + mt7902_mcu_set_tx(dev, vif); if (vif->type == NL80211_IFTYPE_AP) { diff --git a/drivers/net/wireless/mediatek/mt76/mt7902/main.c b/drivers/net/wireless/mediatek/mt76/mt7902/main.c index 841b3309a..bea0c6d85 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7902/main.c +++ b/drivers/net/wireless/mediatek/mt76/mt7902/main.c @@ -317,9 +317,8 @@ mt7902_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) mvif->bss_conf.mt76.band_idx = 0; mvif->bss_conf.mt76.wmm_idx = mvif->bss_conf.mt76.idx % MT76_CONNAC_MAX_WMM_SETS; - ret = mt76_connac_mcu_uni_add_dev(&dev->mphy, &vif->bss_conf, - &mvif->bss_conf.mt76, - &mvif->sta.deflink.wcid, true); + ret = mt7902_mcu_add_dev_info(&dev->mphy, &vif->bss_conf, &mvif->bss_conf.mt76, true); + if (ret) goto out; diff --git a/drivers/net/wireless/mediatek/mt76/mt7902/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7902/mcu.c index 677c2c165..8b49834e3 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7902/mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt7902/mcu.c @@ -1550,3 +1550,44 @@ int mt7902_mcu_set_rssimonitor(struct mt792x_dev *dev, struct ieee80211_vif *vif return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(RSSI_MONITOR), &data, sizeof(data), false); } + +int mt7902_mcu_add_dev_info(struct mt76_phy *phy, + struct ieee80211_bss_conf *bss_conf, + struct mt76_vif_link *mvif, bool enable) +{ + struct mt76_dev *dev = phy->dev; + struct { + struct req_hdr { + u8 omac_idx; + u8 band_idx; + __le16 tlv_num; + u8 is_tlv_append; + u8 rsv[3]; + } __packed hdr; + struct req_tlv { + __le16 tag; + __le16 len; + u8 active; + u8 band_idx; + u8 omac_addr[ETH_ALEN]; + } __packed tlv; + } data = { + .hdr = { + .omac_idx = mvif->omac_idx, + .band_idx = mvif->band_idx, + .tlv_num = cpu_to_le16(1), + .is_tlv_append = 1, + }, + .tlv = { + .tag = cpu_to_le16(DEV_INFO_ACTIVE), + .len = cpu_to_le16(sizeof(struct req_tlv)), + .active = enable, + .band_idx = mvif->band_idx, + }, + }; + + memcpy(data.tlv.omac_addr, bss_conf->addr, ETH_ALEN); + + return mt76_mcu_send_msg(dev, MCU_EXT_CMD(DEV_INFO_UPDATE), + &data, sizeof(data), true); +} diff --git a/drivers/net/wireless/mediatek/mt76/mt7902/mt7902.h b/drivers/net/wireless/mediatek/mt76/mt7902/mt7902.h index debd18034..f93d7c14b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7902/mt7902.h +++ b/drivers/net/wireless/mediatek/mt76/mt7902/mt7902.h @@ -337,4 +337,7 @@ int mt7902_mcu_abort_roc(struct mt792x_phy *phy, struct mt792x_vif *vif, u8 token_id); void mt7902_roc_abort_sync(struct mt792x_dev *dev); int mt7902_mcu_set_rssimonitor(struct mt792x_dev *dev, struct ieee80211_vif *vif); +int mt7902_mcu_add_dev_info(struct mt76_phy *phy, + struct ieee80211_bss_conf *bss_conf, + struct mt76_vif_link *mvif, bool enable); #endif -- 2.39.5