diff mbox

ath5k: vif adhoc fixup

Message ID 20100929092221.12160.62425.stgit@tt-desk (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Bruno Randolf Sept. 29, 2010, 9:22 a.m. UTC
None
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 499a906..3ed9935 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -1857,9 +1857,6 @@  ath5k_beacon_send(struct ath5k_softc *sc)
 	struct ath5k_vif *avf;
 	struct ath5k_buf *bf;
 	struct sk_buff *skb;
-	u64 tsf;
-	u32 tsftu;
-	int slot;
 
 	ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "in beacon_send\n");
 
@@ -1891,20 +1888,21 @@  ath5k_beacon_send(struct ath5k_softc *sc)
 		sc->bmisscount = 0;
 	}
 
-	tsf = ath5k_hw_get_tsf64(ah);
-	tsftu = TSF_TO_TU(tsf);
-	slot = ((tsftu % sc->bintval) * ATH_BCBUF) / sc->bintval;
-	vif = sc->bslot[(slot + 1) % ATH_BCBUF];
-
-	ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
-		  "tsf %llx tsftu %x intval %u slot %u vif %p\n",
-		 (unsigned long long)tsf, tsftu, sc->bintval, slot, vif);
+	if (sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs > 1) {
+		u64 tsf = ath5k_hw_get_tsf64(ah);
+		u32 tsftu = TSF_TO_TU(tsf);
+		int slot = ((tsftu % sc->bintval) * ATH_BCBUF) / sc->bintval;
+		vif = sc->bslot[(slot + 1) % ATH_BCBUF];
+		ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
+			"tsf %llx tsftu %x intval %u slot %u vif %p\n",
+			(unsigned long long)tsf, tsftu, sc->bintval, slot, vif);
+	} else /* only one interface */
+		vif = sc->bslot[0];
 
-	if (vif)
-		avf = (void *)vif->drv_priv;
-	else
+	if (!vif)
 		return;
 
+	avf = (void *)vif->drv_priv;
 	bf = avf->bbuf;
 	if (unlikely(bf->skb == NULL || sc->opmode == NL80211_IFTYPE_STATION ||
 			sc->opmode == NL80211_IFTYPE_MONITOR)) {
@@ -1964,7 +1962,7 @@  ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf)
 	u64 hw_tsf;
 
 	intval = sc->bintval & AR5K_BEACON_PERIOD;
-	if (sc->opmode == NL80211_IFTYPE_AP) {
+	if (sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs > 1) {
 		intval /= ATH_BCBUF;	/* staggered multi-bss beacons */
 		if (intval < 15)
 			ATH5K_WARN(sc, "intval %u is too low, min 15\n",
@@ -2795,7 +2793,6 @@  static int ath5k_add_interface(struct ieee80211_hw *hw,
 		ret = -ELNRNG;
 		goto end;
 	}
-	sc->nvifs++;
 
 	switch (vif->type) {
 	case NL80211_IFTYPE_AP:
@@ -2809,6 +2806,7 @@  static int ath5k_add_interface(struct ieee80211_hw *hw,
 		goto end;
 	}
 
+	sc->nvifs++;
 	ATH5K_DBG(sc, ATH5K_DEBUG_MODE, "add interface mode %d\n", avf->opmode);
 
 	/* Assign the vap/adhoc to a beacon xmit slot. */