mt76: connac: move mcu_update_arp_filter in mt76_connac module
authorLorenzo Bianconi <lorenzo@kernel.org>
Sat, 17 Apr 2021 10:28:49 +0000 (12:28 +0200)
committerFelix Fietkau <nbd@nbd.name>
Wed, 21 Apr 2021 18:55:51 +0000 (20:55 +0200)
Move mt76_connac_mcu_update_arp_filter in mt76_connac module since the
code is shared between mt7615 and mt7921

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/main.c
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.c
drivers/net/wireless/mediatek/mt76/mt76_connac_mcu.h
drivers/net/wireless/mediatek/mt76/mt7921/main.c
drivers/net/wireless/mediatek/mt76/mt7921/mcu.c
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h

index 62d9df4..8313bf4 100644 (file)
@@ -578,8 +578,13 @@ static void mt7615_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_PS)
                mt76_connac_mcu_set_vif_ps(&dev->mt76, vif);
 
-       if (changed & BSS_CHANGED_ARP_FILTER)
-               mt7615_mcu_update_arp_filter(hw, vif, info);
+       if ((changed & BSS_CHANGED_ARP_FILTER) &&
+           mt7615_firmware_offload(dev)) {
+               struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
+
+               mt76_connac_mcu_update_arp_filter(&dev->mt76, &mvif->mt76,
+                                                 info);
+       }
 
        if (changed & BSS_CHANGED_ASSOC)
                mt7615_mac_set_beacon_filter(phy, vif, info->assoc);
index be976fe..364daef 100644 (file)
@@ -2704,53 +2704,6 @@ int mt7615_mcu_set_roc(struct mt7615_phy *phy, struct ieee80211_vif *vif,
                                 sizeof(req), false);
 }
 
-int mt7615_mcu_update_arp_filter(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_bss_conf *info)
-{
-       struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-       struct mt7615_dev *dev = mt7615_hw_dev(hw);
-       struct sk_buff *skb;
-       int i, len = min_t(int, info->arp_addr_cnt,
-                          IEEE80211_BSS_ARP_ADDR_LIST_LEN);
-       struct {
-               struct {
-                       u8 bss_idx;
-                       u8 pad[3];
-               } __packed hdr;
-               struct mt76_connac_arpns_tlv arp;
-       } req_hdr = {
-               .hdr = {
-                       .bss_idx = mvif->mt76.idx,
-               },
-               .arp = {
-                       .tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ARP),
-                       .len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
-                       .ips_num = len,
-                       .mode = 2,  /* update */
-                       .option = 1,
-               },
-       };
-
-       if (!mt7615_firmware_offload(dev))
-               return 0;
-
-       skb = mt76_mcu_msg_alloc(&dev->mt76, NULL,
-                                sizeof(req_hdr) + len * sizeof(__be32));
-       if (!skb)
-               return -ENOMEM;
-
-       skb_put_data(skb, &req_hdr, sizeof(req_hdr));
-       for (i = 0; i < len; i++) {
-               u8 *addr = (u8 *)skb_put(skb, sizeof(__be32));
-
-               memcpy(addr, &info->arp_addr_list[i], sizeof(__be32));
-       }
-
-       return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_UNI_CMD_OFFLOAD,
-                                    true);
-}
-
 int mt7615_mcu_set_p2p_oppps(struct ieee80211_hw *hw,
                             struct ieee80211_vif *vif)
 {
index 6a50338..5262b84 100644 (file)
@@ -549,9 +549,6 @@ int mt7615_mac_set_beacon_filter(struct mt7615_phy *phy,
                                 bool enable);
 int mt7615_mcu_set_bss_pm(struct mt7615_dev *dev, struct ieee80211_vif *vif,
                          bool enable);
-int mt7615_mcu_update_arp_filter(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_bss_conf *info);
 int __mt7663_load_firmware(struct mt7615_dev *dev);
 u32 mt7615_mcu_reg_rr(struct mt76_dev *dev, u32 offset);
 void mt7615_mcu_reg_wr(struct mt76_dev *dev, u32 offset, u32 val);
index e057347..79626e6 100644 (file)
@@ -1693,6 +1693,48 @@ int mt76_connac_mcu_set_rate_txpower(struct mt76_phy *phy)
 }
 EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_rate_txpower);
 
+int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
+                                     struct mt76_vif *vif,
+                                     struct ieee80211_bss_conf *info)
+{
+       struct sk_buff *skb;
+       int i, len = min_t(int, info->arp_addr_cnt,
+                          IEEE80211_BSS_ARP_ADDR_LIST_LEN);
+       struct {
+               struct {
+                       u8 bss_idx;
+                       u8 pad[3];
+               } __packed hdr;
+               struct mt76_connac_arpns_tlv arp;
+       } req_hdr = {
+               .hdr = {
+                       .bss_idx = vif->idx,
+               },
+               .arp = {
+                       .tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ARP),
+                       .len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
+                       .ips_num = len,
+                       .mode = 2,  /* update */
+                       .option = 1,
+               },
+       };
+
+       skb = mt76_mcu_msg_alloc(dev, NULL,
+                                sizeof(req_hdr) + len * sizeof(__be32));
+       if (!skb)
+               return -ENOMEM;
+
+       skb_put_data(skb, &req_hdr, sizeof(req_hdr));
+       for (i = 0; i < len; i++) {
+               u8 *addr = (u8 *)skb_put(skb, sizeof(__be32));
+
+               memcpy(addr, &info->arp_addr_list[i], sizeof(__be32));
+       }
+
+       return mt76_mcu_skb_send_msg(dev, skb, MCU_UNI_CMD_OFFLOAD, true);
+}
+EXPORT_SYMBOL_GPL(mt76_connac_mcu_update_arp_filter);
+
 #ifdef CONFIG_PM
 
 const struct wiphy_wowlan_support mt76_connac_wowlan_support = {
index ff9fca5..abefd9d 100644 (file)
@@ -1010,6 +1010,9 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
 int mt76_connac_mcu_sched_scan_enable(struct mt76_phy *phy,
                                      struct ieee80211_vif *vif,
                                      bool enable);
+int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
+                                     struct mt76_vif *vif,
+                                     struct ieee80211_bss_conf *info);
 int mt76_connac_mcu_update_gtk_rekey(struct ieee80211_hw *hw,
                                     struct ieee80211_vif *vif,
                                     struct cfg80211_gtk_rekey_data *key);
index 13910ac..0ded327 100644 (file)
@@ -626,8 +626,12 @@ static void mt7921_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_ASSOC)
                mt7921_bss_bcnft_apply(dev, vif, info->assoc);
 
-       if (changed & BSS_CHANGED_ARP_FILTER)
-               mt7921_mcu_update_arp_filter(hw, vif, info);
+       if (changed & BSS_CHANGED_ARP_FILTER) {
+               struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
+
+               mt76_connac_mcu_update_arp_filter(&dev->mt76, &mvif->mt76,
+                                                 info);
+       }
 
        mt7921_mutex_release(dev);
 }
index a360929..14ba856 100644 (file)
@@ -1339,50 +1339,6 @@ mt7921_pm_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
        }
 }
 
-int mt7921_mcu_update_arp_filter(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_bss_conf *info)
-{
-       struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-       struct mt7921_dev *dev = mt7921_hw_dev(hw);
-       struct sk_buff *skb;
-       int i, len = min_t(int, info->arp_addr_cnt,
-                          IEEE80211_BSS_ARP_ADDR_LIST_LEN);
-       struct {
-               struct {
-                       u8 bss_idx;
-                       u8 pad[3];
-               } __packed hdr;
-               struct mt76_connac_arpns_tlv arp;
-       } req_hdr = {
-               .hdr = {
-                       .bss_idx = mvif->mt76.idx,
-               },
-               .arp = {
-                       .tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ARP),
-                       .len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
-                       .ips_num = len,
-                       .mode = 2,  /* update */
-                       .option = 1,
-               },
-       };
-
-       skb = mt76_mcu_msg_alloc(&dev->mt76, NULL,
-                                sizeof(req_hdr) + len * sizeof(__be32));
-       if (!skb)
-               return -ENOMEM;
-
-       skb_put_data(skb, &req_hdr, sizeof(req_hdr));
-       for (i = 0; i < len; i++) {
-               u8 *addr = (u8 *)skb_put(skb, sizeof(__be32));
-
-               memcpy(addr, &info->arp_addr_list[i], sizeof(__be32));
-       }
-
-       return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_UNI_CMD_OFFLOAD,
-                                    true);
-}
-
 int mt7921_get_txpwr_info(struct mt7921_dev *dev, struct mt7921_txpwr *txpwr)
 {
        struct mt7921_txpwr_event *event;
index c34cf3e..3982e07 100644 (file)
@@ -364,9 +364,6 @@ int mt7921_mcu_uni_bss_bcnft(struct mt7921_dev *dev, struct ieee80211_vif *vif,
                             bool enable);
 int mt7921_mcu_set_bss_pm(struct mt7921_dev *dev, struct ieee80211_vif *vif,
                          bool enable);
-int mt7921_mcu_update_arp_filter(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_bss_conf *info);
 int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev);
 int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev);
 void mt7921_pm_wake_work(struct work_struct *work);
@@ -377,9 +374,6 @@ int mt7921_mac_set_beacon_filter(struct mt7921_phy *phy,
                                 bool enable);
 void mt7921_pm_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif);
 void mt7921_coredump_work(struct work_struct *work);
-int mt7921_mcu_update_arp_filter(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_bss_conf *info);
 int mt7921_wfsys_reset(struct mt7921_dev *dev);
 int mt7921_get_txpwr_info(struct mt7921_dev *dev, struct mt7921_txpwr *txpwr);
 #endif