svn commit: r221580 - in head/sys/dev/ath/ath_hal: . ar5416

Adrian Chadd adrian at FreeBSD.org
Sat May 7 06:45:35 UTC 2011


Author: adrian
Date: Sat May  7 06:45:35 2011
New Revision: 221580
URL: http://svn.freebsd.org/changeset/base/221580

Log:
  Some BB hang changes:
  
  * Add Howl (ar9130) to the list of chips that have DFS/BB/MAC hangs
  * Don't treat unknown BB hangs as fatal; ath9k/Atheros HAL don't
    treat it as such.
  * Add HAL_DEBUG_DFS to the debug fields in ath_hal/ah_debug.h
  
  The BB hang check simply loops over an observation register checking
  for a stuck state engine, but it can happen under high traffic
  conditions. Ath9k and the Atheros HAL simply log a debug message and
  continue.
  
  Private to FreeBSD:
  
  * Add HAL_DEBUG_HANG to the debug fields
  * Change the hang debugging to HAL_DEBUG_HANG rather than HAL_DEBUG_DFS
    like in the Atheros HAL.
  
  Obtained from:	Atheros

Modified:
  head/sys/dev/ath/ath_hal/ah_debug.h
  head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c

Modified: head/sys/dev/ath/ath_hal/ah_debug.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ah_debug.h	Sat May  7 04:40:44 2011	(r221579)
+++ head/sys/dev/ath/ath_hal/ah_debug.h	Sat May  7 06:45:35 2011	(r221580)
@@ -45,6 +45,8 @@ enum {
 	HAL_DEBUG_GPIO		= 0x00040000,	/* GPIO debugging */
 	HAL_DEBUG_INTERRUPT	= 0x00080000,	/* interrupt handling */
 	HAL_DEBUG_DIVERSITY	= 0x00100000,	/* diversity debugging */
+	HAL_DEBUG_DFS		= 0x00200000,	/* DFS debugging */
+	HAL_DEBUG_HANG		= 0x00400000,	/* BB/MAC hang debugging */
 
 	HAL_DEBUG_ANY		= 0xffffffff
 };

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c	Sat May  7 04:40:44 2011	(r221579)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c	Sat May  7 06:45:35 2011	(r221580)
@@ -283,9 +283,9 @@ ar5416GetCapability(struct ath_hal *ah, 
 	case HAL_CAP_BB_HANG:
 		switch (capability) {
 		case HAL_BB_HANG_RIFS:
-			return AR_SREV_SOWL(ah) ? HAL_OK : HAL_ENOTSUPP;
+			return (AR_SREV_HOWL(ah) || AR_SREV_SOWL(ah)) ? HAL_OK : HAL_ENOTSUPP;
 		case HAL_BB_HANG_DFS:
-			return AR_SREV_SOWL(ah) ? HAL_OK : HAL_ENOTSUPP;
+			return (AR_SREV_HOWL(ah) || AR_SREV_SOWL(ah)) ? HAL_OK : HAL_ENOTSUPP;
 		case HAL_BB_HANG_RX_CLEAR:
 			return AR_SREV_MERLIN(ah) ? HAL_OK : HAL_ENOTSUPP;
 		}
@@ -293,7 +293,7 @@ ar5416GetCapability(struct ath_hal *ah, 
 	case HAL_CAP_MAC_HANG:
 		return ((ah->ah_macVersion == AR_XSREV_VERSION_OWL_PCI) ||
 		    (ah->ah_macVersion == AR_XSREV_VERSION_OWL_PCIE) ||
-		    AR_SREV_SOWL(ah)) ?
+		    AR_SREV_HOWL(ah) || AR_SREV_SOWL(ah)) ?
 			HAL_OK : HAL_ENOTSUPP;
 	case HAL_CAP_DIVERSITY:		/* disable classic fast diversity */
 		return HAL_ENXIO;
@@ -466,7 +466,7 @@ ar5416DetectMacHang(struct ath_hal *ah)
 	if (ar5416CompareDbgHang(ah, &mac_dbg, &hang_sig2))
 		return HAL_MAC_HANG_SIG2;
 
-	HALDEBUG(ah, HAL_DEBUG_ANY, "%s Found an unknown MAC hang signature "
+	HALDEBUG(ah, HAL_DEBUG_HANG, "%s Found an unknown MAC hang signature "
 	    "DMADBG_3=0x%x DMADBG_4=0x%x DMADBG_5=0x%x DMADBG_6=0x%x\n",
 	    __func__, mac_dbg.dma_dbg_3, mac_dbg.dma_dbg_4, mac_dbg.dma_dbg_5,
 	    mac_dbg.dma_dbg_6);
@@ -515,13 +515,13 @@ ar5416DetectBBHang(struct ath_hal *ah)
 	}
 	for (i = 0; i < N(hang_list); i++)
 		if ((hang_sig & hang_list[i].mask) == hang_list[i].val) {
-			HALDEBUG(ah, HAL_DEBUG_ANY,
+			HALDEBUG(ah, HAL_DEBUG_HANG,
 			    "%s BB hang, signature 0x%x, code 0x%x\n",
 			    __func__, hang_sig, hang_list[i].code);
 			return hang_list[i].code;
 		}
 
-	HALDEBUG(ah, HAL_DEBUG_ANY, "%s Found an unknown BB hang signature! "
+	HALDEBUG(ah, HAL_DEBUG_HANG, "%s Found an unknown BB hang signature! "
 	    "<0x806c>=0x%x\n", __func__, hang_sig);
 
 	return HAL_BB_HANG_UNKNOWN;


More information about the svn-src-head mailing list