Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8dc1a35 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: further simplify ieee80211_bss_info_change_notify



The special case in the function isn't really needed,
instead make the suspend code a bit better and also
easier to understand and move the warning into the
driver op wrapper inline.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 8da34932
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -207,6 +207,12 @@ static inline void drv_bss_info_changed(struct ieee80211_local *local,
{
	might_sleep();

	WARN_ON_ONCE(changed & (BSS_CHANGED_BEACON |
				BSS_CHANGED_BEACON_ENABLED) &&
		     sdata->vif.type != NL80211_IFTYPE_AP &&
		     sdata->vif.type != NL80211_IFTYPE_ADHOC &&
		     sdata->vif.type != NL80211_IFTYPE_MESH_POINT);

	check_sdata_in_driver(sdata);

	trace_drv_bss_info_changed(local, sdata, info, changed);
+0 −14
Original line number Diff line number Diff line
@@ -231,20 +231,6 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
		return;
	}

	switch (sdata->vif.type) {
	case NL80211_IFTYPE_AP:
	case NL80211_IFTYPE_ADHOC:
	case NL80211_IFTYPE_WDS:
	case NL80211_IFTYPE_MESH_POINT:
		break;
	default:
		/* do not warn to simplify caller in scan.c */
		changed &= ~BSS_CHANGED_BEACON_ENABLED;
		if (WARN_ON(changed & BSS_CHANGED_BEACON))
			return;
		break;
	}

	drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed);
}

+10 −5
Original line number Diff line number Diff line
@@ -121,7 +121,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)

	/* remove all interfaces */
	list_for_each_entry(sdata, &local->interfaces, list) {
		u32 changed = BSS_CHANGED_BEACON_ENABLED;
		u32 changed = 0;

		if (!ieee80211_sdata_running(sdata))
			continue;
@@ -136,14 +136,19 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
				changed = BSS_CHANGED_ASSOC |
					  BSS_CHANGED_BSSID |
					  BSS_CHANGED_IDLE;
			else
				changed = 0;
			/* fall through */
			break;
		case NL80211_IFTYPE_AP:
		case NL80211_IFTYPE_ADHOC:
		case NL80211_IFTYPE_MESH_POINT:
			if (sdata->vif.bss_conf.enable_beacon)
				changed = BSS_CHANGED_BEACON_ENABLED;
			break;
		default:
			ieee80211_quiesce(sdata);
			break;
		}

		ieee80211_quiesce(sdata);

		sdata->suspend_bss_conf = sdata->vif.bss_conf;
		memset(&sdata->vif.bss_conf, 0, sizeof(sdata->vif.bss_conf));
		sdata->vif.bss_conf.idle = true;