mt76: mt7915: fix mt7915_mcu_add_beacon
authorRyder Lee <ryder.lee@mediatek.com>
Sun, 4 Apr 2021 07:48:24 +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.

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

index 67b1426e98b63ac031201772ddb4d4bb7f2cd431..3507fd135dfe92705e9a0f6f0d4c051fcdadb3b0 100644 (file)
@@ -2451,6 +2451,17 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
        struct bss_info_bcn *bcn;
        int len = MT7915_BEACON_UPDATE_SIZE + MAX_BEACON_SIZE;
 
+       rskb = mt7915_mcu_alloc_sta_req(dev, mvif, NULL, len);
+       if (IS_ERR(rskb))
+               return PTR_ERR(rskb);
+
+       tlv = mt7915_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
+       bcn = (struct bss_info_bcn *)tlv;
+       bcn->enable = en;
+
+       if (!en)
+               goto out;
+
        skb = ieee80211_beacon_get_template(hw, vif, &offs);
        if (!skb)
                return -EINVAL;
@@ -2461,16 +2472,6 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
                return -EINVAL;
        }
 
-       rskb = mt7915_mcu_alloc_sta_req(dev, mvif, NULL, len);
-       if (IS_ERR(rskb)) {
-               dev_kfree_skb(skb);
-               return PTR_ERR(rskb);
-       }
-
-       tlv = mt7915_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
-       bcn = (struct bss_info_bcn *)tlv;
-       bcn->enable = en;
-
        if (mvif->band_idx) {
                info = IEEE80211_SKB_CB(skb);
                info->hw_queue |= MT_TX_HW_QUEUE_EXT_PHY;
@@ -2481,6 +2482,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw,
        mt7915_mcu_beacon_cont(dev, rskb, skb, bcn, &offs);
        dev_kfree_skb(skb);
 
+out:
        return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
                                     MCU_EXT_CMD(BSS_INFO_UPDATE), true);
 }