PERFORCE change 136834 for review

Sam Leffler sam at FreeBSD.org
Tue Mar 4 17:53:10 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=136834

Change 136834 by sam at sam_ebb on 2008/03/04 17:52:33

	unbreak PHYERR frame handling for older parts

Affected files ...

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

Differences ...

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

@@ -2443,6 +2443,11 @@
  * operating mode and state:
  *
  * o always accept unicast, broadcast, and multicast traffic
+ * o accept PHY error frames when hardware doesn't have MIB support
+ *   to count and we need them for ANI (sta mode only at the moment)
+ *   and we are not scanning (ANI is disabled)
+ *   NB: only with recent hal's; older hal's add rx filter bits out
+ *       of sight and we need to blindly preserve them
  * o probe request frames are accepted only when operating in
  *   hostap, adhoc, or monitor modes
  * o enable promiscuous mode according to the interface state
@@ -2455,9 +2460,6 @@
  *   - when doing s/w beacon miss (e.g. for ap+sta)
  * o accept control frames:
  *   - when in monitor mode
- * o accept PHY error frames when hardware doesn't have MIB support
- *   to count and we need them for ANI (sta mode only at the moment)
- *   and we are not scanning (ANI is disabled)
  * XXX BAR frames for 11n
  */
 static u_int32_t
@@ -2467,7 +2469,16 @@
 	struct ifnet *ifp = sc->sc_ifp;
 	u_int32_t rfilt;
 
+#if HAL_ABI_VERSION < 0x08011600
+	rfilt = (ath_hal_getrxfilter(sc->sc_ah) &
+		(HAL_RX_FILTER_PHYRADAR | HAL_RX_FILTER_PHYERR))
+	      | HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
+#else
 	rfilt = HAL_RX_FILTER_UCAST | HAL_RX_FILTER_BCAST | HAL_RX_FILTER_MCAST;
+	if (ic->ic_opmode == IEEE80211_M_STA &&
+	    !sc->sc_needmib && !sc->sc_scanning)
+		rfilt |= HAL_RX_FILTER_PHYERR;
+#endif
 	if (ic->ic_opmode != IEEE80211_M_STA)
 		rfilt |= HAL_RX_FILTER_PROBEREQ;
 	if (ic->ic_opmode != IEEE80211_M_HOSTAP &&
@@ -2479,9 +2490,6 @@
 		rfilt |= HAL_RX_FILTER_BEACON;
 	if (ic->ic_opmode == IEEE80211_M_MONITOR)
 		rfilt |= HAL_RX_FILTER_CONTROL;
-	if (ic->ic_opmode == IEEE80211_M_STA &&
-	    !sc->sc_needmib && !sc->sc_scanning)
-		rfilt |= HAL_RX_FILTER_PHYERR;
 	return rfilt;
 }
 


More information about the p4-projects mailing list