mt76: mt7615: fix .add_beacon_offload()
authorRyder Lee <ryder.lee@mediatek.com>
Sun, 4 Apr 2021 07:48:23 +0000 (15:48 +0800)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:03:06 +0000 (00:03 +0200)
ieee80211_beacon_get_template() returns NULL when beacon state is disabled,
so beacon_offload cannot be disabled for some devices.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mcu.c

index 600c5366c09975ff40853e75eb4ad9a9c616d8ad..6ca9e984039965fdb439e4fe320b48ebf6a053da 100644 (file)
@@ -702,6 +702,9 @@ mt7615_mcu_add_beacon_offload(struct mt7615_dev *dev,
        };
        struct sk_buff *skb;
 
+       if (!enable)
+               goto out;
+
        skb = ieee80211_beacon_get_template(hw, vif, &offs);
        if (!skb)
                return -EINVAL;
@@ -731,6 +734,7 @@ mt7615_mcu_add_beacon_offload(struct mt7615_dev *dev,
        }
        dev_kfree_skb(skb);
 
+out:
        return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_BCN_OFFLOAD, &req,
                                 sizeof(req), true);
 }
@@ -1164,8 +1168,8 @@ mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
                        __le16 tim_ie_pos;
                        __le16 csa_ie_pos;
                        __le16 bcc_ie_pos;
-                       /* 0: enable beacon offload
-                        * 1: disable beacon offload
+                       /* 0: disable beacon offload
+                        * 1: enable beacon offload
                         * 2: update probe respond offload
                         */
                        u8 enable;
@@ -1188,6 +1192,9 @@ mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
        };
        struct sk_buff *skb;
 
+       if (!enable)
+               goto out;
+
        skb = ieee80211_beacon_get_template(mt76_hw(dev), vif, &offs);
        if (!skb)
                return -EINVAL;
@@ -1212,6 +1219,7 @@ mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
        }
        dev_kfree_skb(skb);
 
+out:
        return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD_BSS_INFO_UPDATE,
                                 &req, sizeof(req), true);
 }