summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-07-21 19:23:34 +0000
committersam <sam@FreeBSD.org>2009-07-21 19:23:34 +0000
commitdb513982617a6fea7af277fcf4247676e321c8c1 (patch)
tree45889c5236c746f38c91dc030e75a92b1ef5537d
parent109d6f3c87933f2d5603d091a6f77e034c23d09f (diff)
downloadFreeBSD-src-db513982617a6fea7af277fcf4247676e321c8c1.zip
FreeBSD-src-db513982617a6fea7af277fcf4247676e321c8c1.tar.gz
Fix handling of AR_RX_FILTER_BSSID: write the shadow value for AR_MISC_MODE
so other register writes preserve the setting of AR_MISC_MODE_BSSID_MATCH_FORCE. Reviewed by: rpaulo Approved by: re (kib)
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_recv.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c b/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c
index f6d5b33..eee18b0 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_recv.c
@@ -164,7 +164,7 @@ ar5212GetRxFilter(struct ath_hal *ah)
if (phybits & (AR_PHY_ERR_OFDM_TIMING|AR_PHY_ERR_CCK_TIMING))
bits |= HAL_RX_FILTER_PHYERR;
if (AH_PRIVATE(ah)->ah_caps.halBssidMatchSupport &&
- (OS_REG_READ(ah, AR_MISC_MODE) & AR_MISC_MODE_BSSID_MATCH_FORCE))
+ (AH5212(ah)->ah_miscMode & AR_MISC_MODE_BSSID_MATCH_FORCE))
bits |= HAL_RX_FILTER_BSSID;
return bits;
}
@@ -175,6 +175,7 @@ ar5212GetRxFilter(struct ath_hal *ah)
void
ar5212SetRxFilter(struct ath_hal *ah, uint32_t bits)
{
+ struct ath_hal_5212 *ahp = AH5212(ah);
uint32_t phybits;
OS_REG_WRITE(ah, AR_RX_FILTER,
@@ -194,12 +195,11 @@ ar5212SetRxFilter(struct ath_hal *ah, uint32_t bits)
OS_REG_READ(ah, AR_RXCFG) &~ AR_RXCFG_ZLFDMA);
}
if (AH_PRIVATE(ah)->ah_caps.halBssidMatchSupport) {
- uint32_t miscbits = OS_REG_READ(ah, AR_MISC_MODE);
if (bits & HAL_RX_FILTER_BSSID)
- miscbits |= AR_MISC_MODE_BSSID_MATCH_FORCE;
+ ahp->ah_miscMode |= AR_MISC_MODE_BSSID_MATCH_FORCE;
else
- miscbits &= ~AR_MISC_MODE_BSSID_MATCH_FORCE;
- OS_REG_WRITE(ah, AR_MISC_MODE, miscbits);
+ ahp->ah_miscMode &= ~AR_MISC_MODE_BSSID_MATCH_FORCE;
+ OS_REG_WRITE(ah, AR_MISC_MODE, ahp->ah_miscMode);
}
}
OpenPOWER on IntegriCloud