Search Linux Wireless

[PATCH 5/5] replace UNI add dev with EXT cmd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux