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);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to