PERFORCE change 135827 for review
Sam Leffler
sam at FreeBSD.org
Wed Feb 20 18:56:04 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=135827
Change 135827 by sam at 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;
}
}
More information about the p4-projects
mailing list