Author: adrian
Date: Thu Jun 23 02:38:36 2011
New Revision: 223459
URL: http://svn.freebsd.org/changeset/base/223459

Log:
  Break out most of the HAL related tweaks into a per-HAL instance,
  rather than global variables.
  
  This specifically allows for debugging to be enabled per-NIC, rather
  than globally.
  
  Since the ath driver doesn't know about AH_DEBUG, and to keep the ABI
  consistent regardless of whether AH_DEBUG is enabled or not, enable the
  debug parameter always but only conditionally compile in the debug
  methods if needed.
  
  The ALQ support is currently still global pending some brainstorming.
  
  Submitted by: [email protected]
  Reviewed by:  adrian, bschmidt

Modified:
  head/sys/dev/ath/ah_osdep.c
  head/sys/dev/ath/ath_hal/ah.h
  head/sys/dev/ath/ath_hal/ah_internal.h
  head/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
  head/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
  head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
  head/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
  head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
  head/sys/dev/ath/ath_hal/ar5416/ar2133.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
  head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
  head/sys/dev/ath/if_ath.c
  head/sys/dev/ath/if_ath_sysctl.c
  head/sys/dev/ath/if_ath_sysctl.h

Modified: head/sys/dev/ath/ah_osdep.c
==============================================================================
--- head/sys/dev/ath/ah_osdep.c Thu Jun 23 02:38:06 2011        (r223458)
+++ head/sys/dev/ath/ah_osdep.c Thu Jun 23 02:38:36 2011        (r223459)
@@ -76,33 +76,6 @@ extern       void DO_HALDEBUG(struct ath_hal *
 
 /* NB: put this here instead of the driver to avoid circular references */
 SYSCTL_NODE(_hw, OID_AUTO, ath, CTLFLAG_RD, 0, "Atheros driver parameters");
-SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD, 0, "Atheros HAL parameters");
-
-#ifdef AH_DEBUG
-int ath_hal_debug = 0;
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, debug, CTLFLAG_RW, &ath_hal_debug,
-           0, "Atheros HAL debugging printfs");
-TUNABLE_INT("hw.ath.hal.debug", &ath_hal_debug);
-#endif /* AH_DEBUG */
-
-int ath_hal_ar5416_biasadj = 0;
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, ar5416_biasadj, CTLFLAG_RW,
-       &ath_hal_ar5416_biasadj, 0, "Enable 2ghz AR5416 direction sensitivity"
-       " bias adjust");
-
-/* NB: these are deprecated; they exist for now for compatibility */
-int    ath_hal_dma_beacon_response_time = 2;   /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, dma_brt, CTLFLAG_RW,
-          &ath_hal_dma_beacon_response_time, 0,
-          "Atheros HAL DMA beacon response time");
-int    ath_hal_sw_beacon_response_time = 10;   /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, sw_brt, CTLFLAG_RW,
-          &ath_hal_sw_beacon_response_time, 0,
-          "Atheros HAL software beacon response time");
-int    ath_hal_additional_swba_backoff = 0;    /* in TU's */
-SYSCTL_INT(_hw_ath_hal, OID_AUTO, swba_backoff, CTLFLAG_RW,
-          &ath_hal_additional_swba_backoff, 0,
-          "Atheros HAL additional SWBA backoff time");
 
 MALLOC_DEFINE(M_ATH_HAL, "ath_hal", "ath hal data");
 
@@ -146,7 +119,7 @@ ath_hal_ether_sprintf(const u_int8_t *ma
 void
 DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...)
 {
-       if ((mask == HAL_DEBUG_UNMASKABLE) || (ath_hal_debug & mask)) {
+       if ((mask == HAL_DEBUG_UNMASKABLE) || (ah->ah_config.ah_debug & mask)) {
                __va_list ap;
                va_start(ap, fmt);
                ath_hal_vprintf(ah, fmt, ap);
@@ -174,6 +147,8 @@ DO_HALDEBUG(struct ath_hal *ah, u_int ma
 #include <sys/pcpu.h>
 #include <dev/ath/ath_hal/ah_decode.h>
 
+SYSCTL_NODE(_hw_ath, OID_AUTO, hal, CTLFLAG_RD, 0, "Atheros HAL parameters");
+
 static struct alq *ath_hal_alq;
 static int ath_hal_alq_emitdev;        /* need to emit DEVICE record */
 static u_int ath_hal_alq_lost;         /* count of lost records */

Modified: head/sys/dev/ath/ath_hal/ah.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah.h       Thu Jun 23 02:38:06 2011        
(r223458)
+++ head/sys/dev/ath/ath_hal/ah.h       Thu Jun 23 02:38:36 2011        
(r223459)
@@ -756,6 +756,17 @@ struct dfs_event {
 };
 typedef struct dfs_event HAL_DFS_EVENT;
 
+typedef struct
+{
+       int ah_debug;                   /* only used if AH_DEBUG is defined */
+       int ah_ar5416_biasadj;          /* enable AR2133 radio specific bias 
fiddling */
+
+       /* NB: these are deprecated; they exist for now for compatibility */
+       int ah_dma_beacon_response_time;/* in TU's */
+       int ah_sw_beacon_response_time; /* in TU's */
+       int ah_additional_swba_backoff; /* in TU's */
+}HAL_OPS_CONFIG;
+
 /*
  * Hardware Access Layer (HAL) API.
  *
@@ -784,6 +795,7 @@ struct ath_hal {
 
        uint16_t        *ah_eepromdata; /* eeprom buffer, if needed */
 
+       HAL_OPS_CONFIG ah_config;
        const HAL_RATE_TABLE *__ahdecl(*ah_getRateTable)(struct ath_hal *,
                                u_int mode);
        void      __ahdecl(*ah_detach)(struct ath_hal*);

Modified: head/sys/dev/ath/ath_hal/ah_internal.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_internal.h      Thu Jun 23 02:38:06 2011        
(r223458)
+++ head/sys/dev/ath/ath_hal/ah_internal.h      Thu Jun 23 02:38:36 2011        
(r223459)
@@ -475,12 +475,6 @@ isBigEndian(void)
 #define        OS_A_REG_RMW_FIELD(_a, _r, _f, _v) \
        do { OS_REG_WRITE(_a, _r, (OS_REG_READ(_a, _r) &~ (_f)) | (((_v) << 
_f##_S) & (_f))) ; OS_DELAY(100); } while (0)
 
-/* system-configurable parameters */
-extern int ath_hal_dma_beacon_response_time;   /* in TU's */
-extern int ath_hal_sw_beacon_response_time;    /* in TU's */
-extern int ath_hal_additional_swba_backoff;    /* in TU's */
-extern int ath_hal_ar5416_biasadj;             /* 1 or 0 */
-
 /* wait for the register contents to have the specified value */
 extern HAL_BOOL ath_hal_wait(struct ath_hal *, u_int reg,
                uint32_t mask, uint32_t val);
@@ -504,11 +498,10 @@ extern    void ath_hal_free(void *);
 /* common debugging interfaces */
 #ifdef AH_DEBUG
 #include "ah_debug.h"
-extern int ath_hal_debug;
 #define        HALDEBUG(_ah, __m, ...) \
        do {                                                    \
                if ((__m) == HAL_DEBUG_UNMASKABLE ||            \
-                   (ath_hal_debug & (__m))) {                  \
+                   ((_ah != AH_NULL) && (((struct 
ath_hal*)_ah)->ah_config.ah_debug & (__m)))) {                       \
                        DO_HALDEBUG((_ah), (__m), __VA_ARGS__); \
                }                                               \
        } while(0);

Modified: head/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c     Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c     Thu Jun 23 02:38:36 
2011        (r223459)
@@ -56,9 +56,9 @@ ar5210BeaconInit(struct ath_hal *ah,
 
        if (AH_PRIVATE(ah)->ah_opmode != HAL_M_STA) {
                bt.bt_nextdba = (next_beacon -
-                       ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+                       ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 
TU */
                bt.bt_nextswba = (next_beacon -
-                       ath_hal_sw_beacon_response_time) << 3;  /* 1/8 TU */
+            ah->ah_config.ah_sw_beacon_response_time) << 3;    /* 1/8 TU */
                /*
                 * The SWBA interrupt is not used for beacons in ad hoc mode
                 * as we don't yet support ATIMs. So since the beacon never

Modified: head/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c     Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c     Thu Jun 23 02:38:36 
2011        (r223459)
@@ -71,9 +71,9 @@ ar5211BeaconInit(struct ath_hal *ah,
        case HAL_M_IBSS:
        case HAL_M_HOSTAP:
                bt.bt_nextdba = (next_beacon -
-                       ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+                       ah->ah_config.ah_dma_beacon_response_time) << 3;        
/* 1/8 TU */
                bt.bt_nextswba = (next_beacon -
-                       ath_hal_sw_beacon_response_time) << 3;  /* 1/8 TU */
+            ah->ah_config.ah_sw_beacon_response_time) << 3;    /* 1/8 TU */
                break;
        }
        /*

Modified: head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c       Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c       Thu Jun 23 02:38:36 
2011        (r223459)
@@ -345,8 +345,9 @@ ar5211ResetTxQueue(struct ath_hal *ah, u
                        | AR_Q_MISC_CBR_INCR_DIS0 | 
AR_Q_MISC_RDYTIME_EXP_POLICY);
 
                value = (ahp->ah_beaconInterval
-                       - (ath_hal_sw_beacon_response_time - 
ath_hal_dma_beacon_response_time)
-                       - ath_hal_additional_swba_backoff) * 1024;
+                       - (ah->ah_config.ah_sw_beacon_response_time
+                               - ah->ah_config.ah_dma_beacon_response_time)
+                       - ah->ah_config.ah_additional_swba_backoff) * 1024;
                OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | AR_Q_RDYTIMECFG_EN);
 
                /* Configure DCU for CAB */

Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c     Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c     Thu Jun 23 02:38:36 
2011        (r223459)
@@ -84,9 +84,9 @@ ar5212BeaconInit(struct ath_hal *ah,
        case HAL_M_HOSTAP:
        case HAL_M_IBSS:
                bt.bt_nextdba = (next_beacon -
-                       ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+                       ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 
TU */
                bt.bt_nextswba = (next_beacon -
-                       ath_hal_sw_beacon_response_time) << 3;  /* 1/8 TU */
+            ah->ah_config.ah_sw_beacon_response_time) << 3;    /* 1/8 TU */
                break;
        }
        /*

Modified: head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c       Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c       Thu Jun 23 02:38:36 
2011        (r223459)
@@ -416,9 +416,9 @@ ar5212ResetTxQueue(struct ath_hal *ah, u
                         * here solely for backwards compatibility.
                         */
                        value = (ahp->ah_beaconInterval
-                               - (ath_hal_sw_beacon_response_time -
-                                       ath_hal_dma_beacon_response_time)
-                               - ath_hal_additional_swba_backoff) * 1024;
+                               - (ah->ah_config.ah_sw_beacon_response_time -
+                                       
ah->ah_config.ah_dma_beacon_response_time)
+                               - ah->ah_config.ah_additional_swba_backoff) * 
1024;
                        OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | 
AR_Q_RDYTIMECFG_ENA);
                }
                dmisc |= SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL,

Modified: head/sys/dev/ath/ath_hal/ar5416/ar2133.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar2133.c    Thu Jun 23 02:38:06 2011        
(r223458)
+++ head/sys/dev/ath/ath_hal/ar5416/ar2133.c    Thu Jun 23 02:38:36 2011        
(r223459)
@@ -185,7 +185,7 @@ ar2133SetChannel(struct ath_hal *ah, con
        }
 
        /* Workaround for hw bug - AR5416 specific */
-       if (AR_SREV_OWL(ah) && ath_hal_ar5416_biasadj)
+       if (AR_SREV_OWL(ah) && ah->ah_config.ah_ar5416_biasadj)
                ar2133ForceBias(ah, freq);
 
        reg32 = (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c     Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c     Thu Jun 23 02:38:36 
2011        (r223459)
@@ -93,9 +93,9 @@ ar5416BeaconInit(struct ath_hal *ah,
                /* fall thru... */
        case HAL_M_HOSTAP:
                bt.bt_nextdba = (next_beacon -
-                       ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */
+                       ah->ah_config.ah_dma_beacon_response_time) << 3;        
/* 1/8 TU */
                bt.bt_nextswba = (next_beacon -
-                       ath_hal_sw_beacon_response_time) << 3;  /* 1/8 TU */
+            ah->ah_config.ah_sw_beacon_response_time) << 3;    /* 1/8 TU */
                bt.bt_flags |= AR_TIMER_MODE_TBTT
                            |  AR_TIMER_MODE_DBA
                            |  AR_TIMER_MODE_SWBA;

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c       Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c       Thu Jun 23 02:38:36 
2011        (r223459)
@@ -288,7 +288,7 @@ ar5416SetQuiet(struct ath_hal *ah, uint3
                        nextStart_us += OS_REG_READ(ah, AR_TSF_L32);
                }
                if (flag & HAL_QUIET_ADD_SWBA_RESP_TIME) {
-                       nextStart_us += ath_hal_sw_beacon_response_time;
+                       nextStart_us += 
ah->ah_config.ah_sw_beacon_response_time;
                }
                OS_REG_RMW_FIELD(ah, AR_QUIET1, AR_QUIET1_QUIET_ACK_CTS_ENABLE, 
1);
                OS_REG_WRITE(ah, AR_QUIET2, SM(duration, AR_QUIET2_QUIET_DUR));

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c       Thu Jun 23 02:38:06 
2011        (r223458)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c       Thu Jun 23 02:38:36 
2011        (r223459)
@@ -1035,9 +1035,9 @@ ar5416ResetTxQueue(struct ath_hal *ah, u
                         * here solely for backwards compatibility.
                         */
                        value = (ahp->ah_beaconInterval
-                               - (ath_hal_sw_beacon_response_time -
-                                       ath_hal_dma_beacon_response_time)
-                               - ath_hal_additional_swba_backoff) * 1024;
+                               - (ah->ah_config.ah_sw_beacon_response_time -
+                                       
ah->ah_config.ah_dma_beacon_response_time)
+                               - ah->ah_config.ah_additional_swba_backoff) * 
1024;
                        OS_REG_WRITE(ah, AR_QRDYTIMECFG(q), value | 
AR_Q_RDYTIMECFG_ENA);
                }
                dmisc |= SM(AR_D_MISC_ARB_LOCKOUT_CNTRL_GLOBAL,

Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c   Thu Jun 23 02:38:06 2011        (r223458)
+++ head/sys/dev/ath/if_ath.c   Thu Jun 23 02:38:36 2011        (r223459)
@@ -738,6 +738,7 @@ ath_attach(u_int16_t devid, struct ath_s
         */
        ath_sysctlattach(sc);
        ath_sysctl_stats_attach(sc);
+       ath_sysctl_hal_attach(sc);
 
        if (bootverbose)
                ieee80211_announce(ic);

Modified: head/sys/dev/ath/if_ath_sysctl.c
==============================================================================
--- head/sys/dev/ath/if_ath_sysctl.c    Thu Jun 23 02:38:06 2011        
(r223458)
+++ head/sys/dev/ath/if_ath_sysctl.c    Thu Jun 23 02:38:36 2011        
(r223459)
@@ -719,3 +719,43 @@ ath_sysctl_stats_attach(struct ath_softc
        /* Attach the RX phy error array */
        ath_sysctl_stats_attach_rxphyerr(sc, child);
 }
+
+/*
+ * This doesn't necessarily belong here (because it's HAL related, not
+ * driver related).
+ */
+void
+ath_sysctl_hal_attach(struct ath_softc *sc)
+{
+       struct sysctl_oid *tree = device_get_sysctl_tree(sc->sc_dev);
+       struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->sc_dev);
+       struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
+
+       tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "hal", CTLFLAG_RD,
+           NULL, "Atheros HAL parameters");
+       child = SYSCTL_CHILDREN(tree);
+
+       sc->sc_ah->ah_config.ah_debug = 0;
+       SYSCTL_ADD_INT(ctx, child, OID_AUTO, "debug", CTLFLAG_RW,
+           &sc->sc_ah->ah_config.ah_debug, 0, "Atheros HAL debugging printfs");
+
+       sc->sc_ah->ah_config.ah_ar5416_biasadj = 0;
+       SYSCTL_ADD_INT(ctx, child, OID_AUTO, "ar5416_biasadj", CTLFLAG_RW,
+           &sc->sc_ah->ah_config.ah_ar5416_biasadj, 0,
+           "Enable 2ghz AR5416 direction sensitivity bias adjust");
+
+       sc->sc_ah->ah_config.ah_dma_beacon_response_time = 2;
+       SYSCTL_ADD_INT(ctx, child, OID_AUTO, "dma_brt", CTLFLAG_RW,
+           &sc->sc_ah->ah_config.ah_dma_beacon_response_time, 0,
+           "Atheros HAL DMA beacon response time");
+
+       sc->sc_ah->ah_config.ah_sw_beacon_response_time = 10;
+       SYSCTL_ADD_INT(ctx, child, OID_AUTO, "sw_brt", CTLFLAG_RW,
+           &sc->sc_ah->ah_config.ah_sw_beacon_response_time, 0,
+           "Atheros HAL software beacon response time");
+
+       sc->sc_ah->ah_config.ah_additional_swba_backoff = 0;
+       SYSCTL_ADD_INT(ctx, child, OID_AUTO, "swba_backoff", CTLFLAG_RW,
+           &sc->sc_ah->ah_config.ah_additional_swba_backoff, 0,
+           "Atheros HAL additional SWBA backoff time");
+}

Modified: head/sys/dev/ath/if_ath_sysctl.h
==============================================================================
--- head/sys/dev/ath/if_ath_sysctl.h    Thu Jun 23 02:38:06 2011        
(r223458)
+++ head/sys/dev/ath/if_ath_sysctl.h    Thu Jun 23 02:38:36 2011        
(r223459)
@@ -34,5 +34,5 @@
 
 extern void ath_sysctlattach(struct ath_softc *);
 extern void ath_sysctl_stats_attach(struct ath_softc *sc);
-
+extern void ath_sysctl_hal_attach(struct ath_softc *sc);
 #endif
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to