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.
This commit is contained in:
adrian 2011-02-08 12:49:01 +00:00
parent 461f2c12fe
commit 44dfaf952a
6 changed files with 8 additions and 5 deletions

View File

@ -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;

View File

@ -377,6 +377,8 @@ ar5210FillCapabilityInfo(struct ath_hal *ah)
| HAL_INT_FATAL
;
pCap->hal4kbSplitTransSupport = AH_TRUE;
ahpriv->ah_rxornIsFatal = AH_TRUE;
return AH_TRUE;
}

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;