ath9k: calcrxfilter should take multiple VIFs into account.
authorBen Greear <greearb@candelatech.com>
Tue, 14 Sep 2010 19:00:22 +0000 (12:00 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 16 Sep 2010 19:39:41 +0000 (15:39 -0400)
When there is more than one VIF, listen for all beacons
and ensure ATH9K_RX_FILTER_MCAST_BCAST_ALL is set.

Signed-off-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/recv.c

index 6fb3b4536045bebb133be9d5d9a1833ed690ee09..9eceeae28e7eed9ed23c442d97b7d1b45b5027da 100644 (file)
@@ -448,6 +448,7 @@ u32 ath_calcrxfilter(struct ath_softc *sc)
                rfilt |= ATH9K_RX_FILTER_CONTROL;
 
        if ((sc->sc_ah->opmode == NL80211_IFTYPE_STATION) &&
+           (sc->nvifs <= 1) &&
            !(sc->rx.rxfilter & FIF_BCN_PRBRESP_PROMISC))
                rfilt |= ATH9K_RX_FILTER_MYBEACON;
        else
@@ -462,9 +463,8 @@ u32 ath_calcrxfilter(struct ath_softc *sc)
        if (conf_is_ht(&sc->hw->conf))
                rfilt |= ATH9K_RX_FILTER_COMP_BAR;
 
-       if (sc->sec_wiphy || (sc->rx.rxfilter & FIF_OTHER_BSS)) {
-               /* TODO: only needed if more than one BSSID is in use in
-                * station/adhoc mode */
+       if (sc->sec_wiphy || (sc->nvifs > 1) ||
+           (sc->rx.rxfilter & FIF_OTHER_BSS)) {
                /* The following may also be needed for other older chips */
                if (sc->sc_ah->hw_version.macVersion == AR_SREV_VERSION_9160)
                        rfilt |= ATH9K_RX_FILTER_PROM;