svn commit: r222276 - in head/sys/dev/ath/ath_hal: . ar5416 ar9001 ar9002

Adrian Chadd adrian at FreeBSD.org
Wed May 25 07:19:19 UTC 2011


Author: adrian
Date: Wed May 25 07:19:19 2011
New Revision: 222276
URL: http://svn.freebsd.org/changeset/base/222276

Log:
  Tidy up the ANI API in preparation for looking to expose some more
  of the ANI statistics and committing some tools which use these.
  
  * Change HAL_ANI_* commands _back_ to be numerical, rather than a
    bitmap;
  * modify access to the ANI control bitmap to convert a command to
    a bitmap;
  * Fix the ANI noise immunity fiddling for CCK errors - it wasn't
    checking whether noise immunity was disabled or not.

Modified:
  head/sys/dev/ath/ath_hal/ah_internal.h
  head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
  head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
  head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
  head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c

Modified: head/sys/dev/ath/ath_hal/ah_internal.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_internal.h	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ah_internal.h	Wed May 25 07:19:19 2011	(r222276)
@@ -418,16 +418,21 @@ extern	HAL_BOOL ath_hal_setTxQProps(stru
 extern	HAL_BOOL ath_hal_getTxQProps(struct ath_hal *ah,
 		HAL_TXQ_INFO *qInfo, const HAL_TX_QUEUE_INFO *qi);
 
+/*
+ * Internal HAL ANI commands.
+ *
+ * These values represent the ANI commands passed to the ANI Control method
+ * for AR5212, AR5416 and later chipsets.
+ */
 typedef enum {
-	HAL_ANI_PRESENT = 0x1,			/* is ANI support present */
-	HAL_ANI_NOISE_IMMUNITY_LEVEL = 0x2,	/* set level */
-	HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION = 0x4,	/* enable/disable */
-	HAL_ANI_CCK_WEAK_SIGNAL_THR = 0x8,		/* enable/disable */
-	HAL_ANI_FIRSTEP_LEVEL = 0x10,			/* set level */
-	HAL_ANI_SPUR_IMMUNITY_LEVEL = 0x20,		/* set level */
-	HAL_ANI_MODE = 0x40,	/* 0 => manual, 1 => auto (XXX do not change) */
-	HAL_ANI_PHYERR_RESET =0x80,			/* reset phy error stats */
-	HAL_ANI_ALL = 0xff
+	HAL_ANI_PRESENT = 0,			/* is ANI support present */
+	HAL_ANI_NOISE_IMMUNITY_LEVEL = 1,	/* set level */
+	HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION = 2,	/* enable/disable */
+	HAL_ANI_CCK_WEAK_SIGNAL_THR = 3,	/* enable/disable */
+	HAL_ANI_FIRSTEP_LEVEL = 4,		/* set level */
+	HAL_ANI_SPUR_IMMUNITY_LEVEL = 5,	/* set level */
+	HAL_ANI_MODE = 6,			/* 0 => manual, 1 => auto (XXX do not change) */
+	HAL_ANI_PHYERR_RESET = 7,		/* reset phy error stats */
 } HAL_ANI_CMD;
 
 #define	HAL_SPUR_VAL_MASK		0x3FFF

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c	Wed May 25 07:19:19 2011	(r222276)
@@ -175,9 +175,17 @@ ar5416AniControl(struct ath_hal *ah, HAL
 	struct ar5212AniState *aniState = ahp->ah_curani;
 	const struct ar5212AniParams *params = aniState->params;
 
+	/* Check whether the particular function is enabled */
+	if (((1 << cmd) & AH5416(ah)->ah_ani_function) == 0) {
+		HALDEBUG(ah, HAL_DEBUG_ANI, "%s: command %d disabled\n",
+		    __func__, cmd);
+		HALDEBUG(ah, HAL_DEBUG_ANI, "%s: cmd %d; mask %x\n", __func__, cmd, AH5416(ah)->ah_ani_function);
+		return AH_FALSE;
+	}
+
 	OS_MARK(ah, AH_MARK_ANI_CONTROL, cmd);
 
-	switch (cmd & AH5416(ah)->ah_ani_function) {
+	switch (cmd) {
 	case HAL_ANI_NOISE_IMMUNITY_LEVEL: {
 		u_int level = param;
 
@@ -356,14 +364,14 @@ ar5416AniOfdmErrTrigger(struct ath_hal *
 	aniState = ahp->ah_curani;
 	params = aniState->params;
 	/* First, raise noise immunity level, up to max */
-	if ((AH5416(ah)->ah_ani_function & HAL_ANI_NOISE_IMMUNITY_LEVEL) &&
+	if ((AH5416(ah)->ah_ani_function & (1 << HAL_ANI_NOISE_IMMUNITY_LEVEL)) &&
 	    (aniState->noiseImmunityLevel+1 < params->maxNoiseImmunityLevel)) {
 		ar5416AniControl(ah, HAL_ANI_NOISE_IMMUNITY_LEVEL, 
 				 aniState->noiseImmunityLevel + 1);
 		return;
 	}
 	/* then, raise spur immunity level, up to max */
-	if ((AH5416(ah)->ah_ani_function & HAL_ANI_SPUR_IMMUNITY_LEVEL) &&
+	if ((AH5416(ah)->ah_ani_function & (1 << HAL_ANI_SPUR_IMMUNITY_LEVEL)) &&
 	    (aniState->spurImmunityLevel+1 < params->maxSpurImmunityLevel)) {
 		ar5416AniControl(ah, HAL_ANI_SPUR_IMMUNITY_LEVEL,
 				 aniState->spurImmunityLevel + 1);
@@ -443,7 +451,8 @@ ar5416AniCckErrTrigger(struct ath_hal *a
 	/* first, raise noise immunity level, up to max */
 	aniState = ahp->ah_curani;
 	params = aniState->params;
-	if (aniState->noiseImmunityLevel+1 < params->maxNoiseImmunityLevel) {
+	if ((AH5416(ah)->ah_ani_function & (1 << HAL_ANI_NOISE_IMMUNITY_LEVEL) &&
+	    aniState->noiseImmunityLevel+1 < params->maxNoiseImmunityLevel)) {
 		ar5416AniControl(ah, HAL_ANI_NOISE_IMMUNITY_LEVEL,
 				 aniState->noiseImmunityLevel + 1);
 		return;

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Wed May 25 07:19:19 2011	(r222276)
@@ -58,7 +58,7 @@ ar5416AniSetup(struct ath_hal *ah)
 		.period			= 100,
 	};
 	/* NB: disable ANI noise immmunity for reliable RIFS rx */
-	AH5416(ah)->ah_ani_function &= ~ HAL_ANI_NOISE_IMMUNITY_LEVEL;
+	AH5416(ah)->ah_ani_function &= ~(1 << HAL_ANI_NOISE_IMMUNITY_LEVEL);
 	ar5416AniAttach(ah, &aniparams, &aniparams, AH_TRUE);
 }
 
@@ -199,7 +199,7 @@ ar5416InitState(struct ath_hal_5416 *ahp
 	AH5416(ah)->ah_tx_chainmask = AR5416_DEFAULT_TXCHAINMASK;
 
 	/* Enable all ANI functions to begin with */
-	AH5416(ah)->ah_ani_function = HAL_ANI_ALL;
+	AH5416(ah)->ah_ani_function = 0xffffffff;
 
         /* Set overridable ANI methods */
         AH5212(ah)->ah_aniControl = ar5416AniControl;

Modified: head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c	Wed May 25 07:19:19 2011	(r222276)
@@ -82,7 +82,7 @@ ar9160AniSetup(struct ath_hal *ah)
 	};
 
 	/* NB: disable ANI noise immmunity for reliable RIFS rx */
-	AH5416(ah)->ah_ani_function &= ~ HAL_ANI_NOISE_IMMUNITY_LEVEL;
+	AH5416(ah)->ah_ani_function &= ~(1 << HAL_ANI_NOISE_IMMUNITY_LEVEL);
 	ar5416AniAttach(ah, &aniparams, &aniparams, AH_TRUE);
 }
 

Modified: head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c	Wed May 25 07:19:19 2011	(r222276)
@@ -93,7 +93,7 @@ ar9280AniSetup(struct ath_hal *ah)
                 .period                 = 100,
         };
 	/* NB: disable ANI noise immmunity for reliable RIFS rx */
-	AH5416(ah)->ah_ani_function &= ~ HAL_ANI_NOISE_IMMUNITY_LEVEL;
+	AH5416(ah)->ah_ani_function &= ~(1 << HAL_ANI_NOISE_IMMUNITY_LEVEL);
 
         /* NB: ANI is not enabled yet */
         ar5416AniAttach(ah, &aniparams, &aniparams, AH_TRUE);

Modified: head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c	Wed May 25 04:46:48 2011	(r222275)
+++ head/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c	Wed May 25 07:19:19 2011	(r222276)
@@ -98,7 +98,7 @@ ar9285AniSetup(struct ath_hal *ah)
                 .period                 = 100,
         };
 	/* NB: disable ANI noise immmunity for reliable RIFS rx */
-	AH5416(ah)->ah_ani_function &= ~ HAL_ANI_NOISE_IMMUNITY_LEVEL;
+	AH5416(ah)->ah_ani_function &= ~(1 << HAL_ANI_NOISE_IMMUNITY_LEVEL);
 
         ar5416AniAttach(ah, &aniparams, &aniparams, AH_TRUE);
 }


More information about the svn-src-head mailing list