mac80211: track enable_beacon explicitly
[firefly-linux-kernel-4.4.55.git] / net / mac80211 / offchannel.c
index a5379aea7d09d2410c70a3b467a1f336aa32dc43..1430b48600fc8052e63089cac0c04d86d5f4a07b 100644 (file)
@@ -126,11 +126,13 @@ void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
                        set_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
 
                /* Check to see if we should disable beaconing. */
-               if (sdata->vif.type == NL80211_IFTYPE_AP ||
-                   sdata->vif.type == NL80211_IFTYPE_ADHOC ||
-                   sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
+               if (sdata->vif.bss_conf.enable_beacon) {
+                       set_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED,
+                               &sdata->state);
+                       sdata->vif.bss_conf.enable_beacon = false;
                        ieee80211_bss_info_change_notify(
                                sdata, BSS_CHANGED_BEACON_ENABLED);
+               }
 
                if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
                        netif_tx_stop_all_queues(sdata->dev);
@@ -183,11 +185,12 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
                        netif_tx_wake_all_queues(sdata->dev);
                }
 
-               if (sdata->vif.type == NL80211_IFTYPE_AP ||
-                   sdata->vif.type == NL80211_IFTYPE_ADHOC ||
-                   sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
+               if (test_and_clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED,
+                                      &sdata->state)) {
+                       sdata->vif.bss_conf.enable_beacon = true;
                        ieee80211_bss_info_change_notify(
                                sdata, BSS_CHANGED_BEACON_ENABLED);
+               }
        }
        mutex_unlock(&local->iflist_mtx);
 }