Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jun 2011 02:38:36 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223459 - in head/sys/dev/ath: . ath_hal ath_hal/ar5210 ath_hal/ar5211 ath_hal/ar5212 ath_hal/ar5416
Message-ID:  <201106230238.p5N2cajT079306@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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:	ssgriffonuser@gmail.com
  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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106230238.p5N2cajT079306>