Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Feb 2008 18:56:03 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 135827 for review
Message-ID:  <200802201856.m1KIu30n082716@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=135827

Change 135827 by sam@sam_ebb on 2008/02/20 18:56:03

	er, let's get it right this time

Affected files ...

.. //depot/projects/vap/sys/dev/ath/if_ath.c#33 edit

Differences ...

==== //depot/projects/vap/sys/dev/ath/if_ath.c#33 (text+ko) ====

@@ -689,16 +689,15 @@
 
 	if (clone && sc->sc_hasbmask) {
 		/* NB: we only do this if h/w supports multiple bssid */
-		for (i = 0; i < 32; i++)
+		for (i = 0; i < 8; i++)
 			if ((sc->sc_bssidmask & (1<<i)) == 0)
 				break;
-		if (i != 0) {
+		if (i != 0)
 			mac[0] |= (i << 2)|0x2;
-			sc->sc_hwbssidmask[0] &= ~mac[0];
-		}
 	} else
 		i = 0;
 	sc->sc_bssidmask |= 1<<i;
+	sc->sc_hwbssidmask[0] &= ~mac[0];
 	if (i == 0)
 		sc->sc_nbssid0++;
 }
@@ -707,12 +706,16 @@
 reclaim_address(struct ath_softc *sc, const uint8_t mac[IEEE80211_ADDR_LEN])
 {
 	int i = mac[0] >> 2;
+	uint8_t mask;
+
 	if (i != 0 || --sc->sc_nbssid0 == 0) {
 		sc->sc_bssidmask &= ~(1<<i);
-		sc->sc_hwbssidmask[0] |= mac[0];
-		/* put back U/L bit if any other vaps need it */
-		if (sc->sc_bssidmask & ~1)
-			sc->sc_hwbssidmask[0] &= ~0x2;
+		/* recalculate bssid mask from remaining addresses */
+		mask = 0xff;
+		for (i = 1; i < 8; i++)
+			if (sc->sc_bssidmask & (1<<i))
+				mask &= ~((i<<2)|0x2);
+		sc->sc_hwbssidmask[0] |= mask;
 	}
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802201856.m1KIu30n082716>