summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2011-02-08 12:49:01 +0000
committeradrian <adrian@FreeBSD.org>2011-02-08 12:49:01 +0000
commit44dfaf952a7967d189f26651e2b6a5b528202378 (patch)
tree1506073f2100e382aec6ebe867a5e03b6a4714d4
parent461f2c12fe23d67162780f5c935cc956e24b1f30 (diff)
downloadFreeBSD-src-44dfaf952a7967d189f26651e2b6a5b528202378.zip
FreeBSD-src-44dfaf952a7967d189f26651e2b6a5b528202378.tar.gz
There's apparently a bug with Merlin (AR9280) and later chipsets where
putting descriptors (not buffers) across a 4k page boundary can cause issues. I've not seen it in production myself but it apparently can cause problems. So, in preparation for addressing this workaround, (re)-expose the particular HAL capability bit which marks whether the chipset has support for cross-4k- boundary transactions or not. A subsequent commit will modify the descriptor allocation to avoid allocating descriptor entries that straddle a 4k page boundary.
-rw-r--r--sys/dev/ath/ath_hal/ah_internal.h3
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210_attach.c2
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_attach.c2
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_attach.c2
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9280_attach.c2
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9285_attach.c2
6 files changed, 8 insertions, 5 deletions
diff --git a/sys/dev/ath/ath_hal/ah_internal.h b/sys/dev/ath/ath_hal/ah_internal.h
index f3fd9e8..2caf5cc 100644
--- a/sys/dev/ath/ath_hal/ah_internal.h
+++ b/sys/dev/ath/ath_hal/ah_internal.h
@@ -195,7 +195,8 @@ typedef struct {
halForcePpmSupport : 1,
halEnhancedPmSupport : 1,
halMbssidAggrSupport : 1,
- halBssidMatchSupport : 1;
+ halBssidMatchSupport : 1,
+ hal4kbSplitTransSupport : 1;
uint32_t halWirelessModes;
uint16_t halTotalQueues;
uint16_t halKeyCacheSize;
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
index c76e188..e1a5067 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
@@ -377,6 +377,8 @@ ar5210FillCapabilityInfo(struct ath_hal *ah)
| HAL_INT_FATAL
;
+ pCap->hal4kbSplitTransSupport = AH_TRUE;
+
ahpriv->ah_rxornIsFatal = AH_TRUE;
return AH_TRUE;
}
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
index fe87fce..bace648 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
@@ -509,6 +509,8 @@ ar5211FillCapabilityInfo(struct ath_hal *ah)
| HAL_INT_TIM
;
+ pCap->hal4kbSplitTransSupport = AH_TRUE;
+
/* XXX might be ok w/ some chip revs */
ahpriv->ah_rxornIsFatal = AH_TRUE;
return AH_TRUE;
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
index 9a2bc70..3aabdcc 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
@@ -860,6 +860,8 @@ ar5212FillCapabilityInfo(struct ath_hal *ah)
if (AH_PRIVATE(ah)->ah_macVersion < AR_SREV_VERSION_GRIFFIN)
pCap->halIntrMask &= ~HAL_INT_TBTT;
+ pCap->hal4kbSplitTransSupport = AH_TRUE;
+
return AH_TRUE;
#undef IS_COBRA
#undef IS_GRIFFIN_LITE
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
index 698f9a9..80281d8 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
@@ -698,9 +698,7 @@ ar9280FillCapabilityInfo(struct ath_hal *ah)
pCap->halBtCoexSupport = AH_TRUE;
#endif
pCap->halAutoSleepSupport = AH_FALSE; /* XXX? */
-#if 0
pCap->hal4kbSplitTransSupport = AH_FALSE;
-#endif
pCap->halRxStbcSupport = 1;
pCap->halTxStbcSupport = 1;
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
index d62d0e6..ee65841 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
@@ -384,9 +384,7 @@ ar9285FillCapabilityInfo(struct ath_hal *ah)
pCap->halBtCoexSupport = AH_TRUE;
#endif
pCap->halAutoSleepSupport = AH_FALSE; /* XXX? */
-#if 0
pCap->hal4kbSplitTransSupport = AH_FALSE;
-#endif
pCap->halRxStbcSupport = 1;
pCap->halTxStbcSupport = 1;
OpenPOWER on IntegriCloud