svn commit: r239753 - head/sys/dev/ath/ath_hal/ar5416

Adrian Chadd adrian at FreeBSD.org
Mon Aug 27 20:10:39 UTC 2012


Author: adrian
Date: Mon Aug 27 20:10:38 2012
New Revision: 239753
URL: http://svn.freebsd.org/changeset/base/239753

Log:
  Ensure that all firstep values are available in ANI.
  
  The comparison assumes maxFirstepLevel is a count, rather than a maximum
  value.  The array is 3 entries in size however 'maxFirstepLevel' is 2.
  
  This bug also exists in the AR5212 HAL.

Modified:
  head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c	Mon Aug 27 20:03:08 2012	(r239752)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c	Mon Aug 27 20:10:38 2012	(r239753)
@@ -422,7 +422,7 @@ ar5416AniOfdmErrTrigger(struct ath_hal *
 			 * If weak sig detect is already off, as last resort,
 			 * raise firstep level 
 			 */
-			if (aniState->firstepLevel+1 < params->maxFirstepLevel) {
+			if (aniState->firstepLevel < params->maxFirstepLevel) {
 				if (ar5416AniControl(ah, HAL_ANI_FIRSTEP_LEVEL,
 						 aniState->firstepLevel + 1))
 					return;
@@ -436,7 +436,7 @@ ar5416AniOfdmErrTrigger(struct ath_hal *
 				ar5416AniControl(ah,
 				    HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION,
 				    AH_TRUE);
-			if (aniState->firstepLevel+1 < params->maxFirstepLevel)
+			if (aniState->firstepLevel < params->maxFirstepLevel)
 				if (ar5416AniControl(ah, HAL_ANI_FIRSTEP_LEVEL,
 				     aniState->firstepLevel + 1))
 				return;
@@ -490,7 +490,7 @@ ar5416AniCckErrTrigger(struct ath_hal *a
 			 * Beacon signal in mid and high range,
 			 * raise firstep level.
 			 */
-			if (aniState->firstepLevel+1 < params->maxFirstepLevel)
+			if (aniState->firstepLevel < params->maxFirstepLevel)
 				ar5416AniControl(ah, HAL_ANI_FIRSTEP_LEVEL,
 						 aniState->firstepLevel + 1);
 		} else {
@@ -954,6 +954,8 @@ ar5416AniPoll(struct ath_hal *ah, const 
 	if (listenTime < 0) {
 		ahp->ah_stats.ast_ani_lneg++;
 		/* restart ANI period if listenTime is invalid */
+		HALDEBUG(ah, HAL_DEBUG_ANI, "%s: invalid listenTime\n",
+		    __func__);
 		ar5416AniRestart(ah, aniState);
 	}
 	/* XXX beware of overflow? */
@@ -973,6 +975,8 @@ ar5416AniPoll(struct ath_hal *ah, const 
 		    aniState->cckPhyErrCount <= aniState->listenTime *
 		    params->cckTrigLow/1000)
 			ar5416AniLowerImmunity(ah);
+		HALDEBUG(ah, HAL_DEBUG_ANI, "%s: lower immunity\n",
+		    __func__);
 		ar5416AniRestart(ah, aniState);
 	} else if (aniState->listenTime > params->period) {
 		updateMIBStats(ah, aniState);


More information about the svn-src-all mailing list