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

Commit 57c4d7b4 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

mac80211: clean up beacon interval settings



We currently have two beacon interval configuration knobs:
hw.conf.beacon_int and vif.bss_info.beacon_int. This is
rather confusing, even though the former is used when we
beacon ourselves and the latter when we are associated to
an AP.

This just deprecates the hw.conf.beacon_int setting in favour
of always using vif.bss_info.beacon_int. Since it touches all
the beaconing IBSS code anyway, we can also add support for
the cfg80211 IBSS beacon interval configuration easily.

NOTE: The hw.conf.beacon_int setting is retained for now due
      to drivers still using it -- I couldn't untangle all
      drivers, some are updated in this patch.

Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f3b85252
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -316,9 +316,9 @@ int ar9170_set_beacon_timers(struct ar9170 *ar)
	u32 v = 0;
	u32 pretbtt = 0;

	v |= ar->hw->conf.beacon_int;

	if (ar->vif) {
		v |= ar->vif->bss_conf.beacon_int;

		switch (ar->vif->type) {
		case NL80211_IFTYPE_MESH_POINT:
		case NL80211_IFTYPE_ADHOC:
@@ -326,7 +326,7 @@ int ar9170_set_beacon_timers(struct ar9170 *ar)
			break;
		case NL80211_IFTYPE_AP:
			v |= BIT(24);
			pretbtt = (ar->hw->conf.beacon_int - 6) << 16;
			pretbtt = (ar->vif->bss_conf.beacon_int - 6) << 16;
			break;
		default:
			break;
+4 −1
Original line number Diff line number Diff line
@@ -1337,7 +1337,7 @@ static int ar9170_op_config(struct ieee80211_hw *hw, u32 changed)
			goto out;
	}

	if (changed & IEEE80211_CONF_CHANGE_BEACON_INTERVAL) {
	if (changed & BSS_CHANGED_BEACON_INT) {
		err = ar9170_set_beacon_timers(ar);
		if (err)
			goto out;
@@ -1499,6 +1499,9 @@ static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw,
#endif /* CONFIG_AR9170_LEDS */
	}

	if (changed & BSS_CHANGED_BEACON_INT)
		err = ar9170_set_beacon_timers(ar);

	if (changed & BSS_CHANGED_HT) {
		/* TODO */
		err = 0;
+4 −1
Original line number Diff line number Diff line
@@ -2756,7 +2756,6 @@ ath5k_config(struct ieee80211_hw *hw, u32 changed)

	mutex_lock(&sc->lock);

	sc->bintval = conf->beacon_int;
	sc->power_level = conf->power_level;

	ret = ath5k_chan_set(sc, conf->channel);
@@ -3083,6 +3082,10 @@ static void ath5k_bss_info_changed(struct ieee80211_hw *hw,
				    u32 changes)
{
	struct ath5k_softc *sc = hw->priv;

	if (changes & BSS_CHANGED_BEACON_INT)
		sc->bintval = bss_conf->beacon_int;

	if (changes & BSS_CHANGED_ASSOC) {
		mutex_lock(&sc->lock);
		sc->assoc = bss_conf->assoc;
+2 −0
Original line number Diff line number Diff line
@@ -590,6 +590,8 @@ struct ath_softc {
	int led_on_cnt;
	int led_off_cnt;

	int beacon_interval;

	struct ath_rfkill rf_kill;
	struct ath_ani ani;
	struct ath9k_node_stats nodestats;
+3 −6
Original line number Diff line number Diff line
@@ -320,8 +320,7 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
		u64 tsfadjust;
		int intval;

		intval = sc->hw->conf.beacon_int ?
			sc->hw->conf.beacon_int : ATH_DEFAULT_BINTVAL;
		intval = sc->beacon_interval ? : ATH_DEFAULT_BINTVAL;

		/*
		 * Calculate the TSF offset for this beacon slot, i.e., the
@@ -431,8 +430,7 @@ void ath_beacon_tasklet(unsigned long data)
	 * on the tsf to safeguard against missing an swba.
	 */

	intval = sc->hw->conf.beacon_int ?
		sc->hw->conf.beacon_int : ATH_DEFAULT_BINTVAL;
	intval = sc->beacon_interval ? : ATH_DEFAULT_BINTVAL;

	tsf = ath9k_hw_gettsf64(ah);
	tsftu = TSF_TO_TU(tsf>>32, tsf);
@@ -711,8 +709,7 @@ void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
	/* Setup the beacon configuration parameters */

	memset(&conf, 0, sizeof(struct ath_beacon_config));
	conf.beacon_interval = sc->hw->conf.beacon_int ?
		sc->hw->conf.beacon_int : ATH_DEFAULT_BINTVAL;
	conf.beacon_interval = sc->beacon_interval ? : ATH_DEFAULT_BINTVAL;
	conf.listen_interval = 1;
	conf.dtim_period = conf.beacon_interval;
	conf.dtim_count = 1;
Loading