ath9k: move ath9k_beacon_config_ap common
authorOleksij Rempel <linux@rempel-privat.de>
Sat, 1 Mar 2014 20:16:03 +0000 (21:16 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 17 Mar 2014 17:13:08 +0000 (13:13 -0400)
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/beacon.c
drivers/net/wireless/ath/ath9k/common-beacon.c
drivers/net/wireless/ath/ath9k/common-beacon.h

index 01322a4..e188743 100644 (file)
@@ -483,26 +483,9 @@ static void ath9k_beacon_config_ap(struct ath_softc *sc,
                                   struct ath_beacon_config *conf)
 {
        struct ath_hw *ah = sc->sc_ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 nexttbtt, intval;
-
-       /* NB: the beacon interval is kept internally in TU's */
-       intval = TU_TO_USEC(conf->beacon_interval);
-       intval /= ATH_BCBUF;
-       nexttbtt = ath9k_get_next_tbtt(sc, ath9k_hw_gettsf64(ah),
-                                      conf->beacon_interval);
-
-       if (conf->enable_beacon)
-               ah->imask |= ATH9K_INT_SWBA;
-       else
-               ah->imask &= ~ATH9K_INT_SWBA;
-
-       ath_dbg(common, BEACON,
-               "AP (%s) nexttbtt: %u intval: %u conf_intval: %u\n",
-               (conf->enable_beacon) ? "Enable" : "Disable",
-               nexttbtt, intval, conf->beacon_interval);
 
-       ath9k_beacon_init(sc, nexttbtt, intval, false);
+       ath9k_cmn_beacon_config_ap(ah, conf, ATH_BCBUF);
+       ath9k_beacon_init(sc, conf->nexttbtt, conf->intval, false);
 }
 
 static void ath9k_beacon_config_sta(struct ath_hw *ah,
index 45bc899..775d1d2 100644 (file)
@@ -149,3 +149,32 @@ void ath9k_cmn_beacon_config_adhoc(struct ath_hw *ah,
                conf->nexttbtt, conf->intval, conf->beacon_interval);
 }
 EXPORT_SYMBOL(ath9k_cmn_beacon_config_adhoc);
+
+/*
+ * For multi-bss ap support beacons are either staggered evenly over N slots or
+ * burst together.  For the former arrange for the SWBA to be delivered for each
+ * slot. Slots that are not occupied will generate nothing.
+ */
+void ath9k_cmn_beacon_config_ap(struct ath_hw *ah,
+                               struct ath_beacon_config *conf,
+                               unsigned int bc_buf)
+{
+       struct ath_common *common = ath9k_hw_common(ah);
+
+       /* NB: the beacon interval is kept internally in TU's */
+       conf->intval = TU_TO_USEC(conf->beacon_interval);
+       conf->intval /= bc_buf;
+       conf->nexttbtt = ath9k_get_next_tbtt(ah, ath9k_hw_gettsf64(ah),
+                                      conf->beacon_interval);
+
+       if (conf->enable_beacon)
+               ah->imask |= ATH9K_INT_SWBA;
+       else
+               ah->imask &= ~ATH9K_INT_SWBA;
+
+       ath_dbg(common, BEACON,
+               "AP (%s) nexttbtt: %u intval: %u conf_intval: %u\n",
+               (conf->enable_beacon) ? "Enable" : "Disable",
+               conf->nexttbtt, conf->intval, conf->beacon_interval);
+}
+EXPORT_SYMBOL(ath9k_cmn_beacon_config_ap);
index d8e7c0d..3665d27 100644 (file)
@@ -21,3 +21,6 @@ int ath9k_cmn_beacon_config_sta(struct ath_hw *ah,
                                struct ath9k_beacon_state *bs);
 void ath9k_cmn_beacon_config_adhoc(struct ath_hw *ah,
                                   struct ath_beacon_config *conf);
+void ath9k_cmn_beacon_config_ap(struct ath_hw *ah,
+                               struct ath_beacon_config *conf,
+                               unsigned int bc_buf);