Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Apr 2014 03:51:05 +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: r264292 - head/sys/dev/ath
Message-ID:  <201404090351.s393p5PF044555@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Wed Apr  9 03:51:05 2014
New Revision: 264292
URL: http://svnweb.freebsd.org/changeset/base/264292

Log:
  Add a function to check whether the given register can be accessed whilst
  the chip is asleep.
  
  It's AR5416 and later specific; I'll add a HAL method to generalise it
  later.
  
  Tested:
  
  * AR5416, STA mode

Modified:
  head/sys/dev/ath/ah_osdep.c

Modified: head/sys/dev/ath/ah_osdep.c
==============================================================================
--- head/sys/dev/ath/ah_osdep.c	Wed Apr  9 03:46:04 2014	(r264291)
+++ head/sys/dev/ath/ah_osdep.c	Wed Apr  9 03:51:05 2014	(r264292)
@@ -138,6 +138,24 @@ ath_hal_ether_sprintf(const u_int8_t *ma
 
 #ifdef AH_DEBUG
 
+/*
+ * XXX This is highly relevant only for the AR5416 and later
+ * PCI/PCIe NICs.  It'll need adjustment for other hardware
+ * variations.
+ */
+static int
+ath_hal_reg_whilst_asleep(struct ath_hal *ah, uint32_t reg)
+{
+
+	if (reg >= 0x4000 && reg < 0x5000)
+		return (1);
+	if (reg >= 0x6000 && reg < 0x7000)
+		return (1);
+	if (reg >= 0x7000 && reg < 0x8000)
+		return (1);
+	return (0);
+}
+
 void
 DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...)
 {
@@ -254,7 +272,8 @@ ath_hal_reg_write(struct ath_hal *ah, u_
 	bus_space_handle_t h = ah->ah_sh;
 
 	/* Debug - complain if we haven't fully waken things up */
-	if (ah->ah_powerMode != HAL_PM_AWAKE) {
+	if (! ath_hal_reg_whilst_asleep(ah, reg) &&
+	    ah->ah_powerMode != HAL_PM_AWAKE) {
 		ath_hal_printf(ah, "%s: reg=0x%08x, val=0x%08x, pm=%d\n",
 		    __func__, reg, val, ah->ah_powerMode);
 	}
@@ -285,7 +304,8 @@ ath_hal_reg_read(struct ath_hal *ah, u_i
 	u_int32_t val;
 
 	/* Debug - complain if we haven't fully waken things up */
-	if (ah->ah_powerMode != HAL_PM_AWAKE) {
+	if (! ath_hal_reg_whilst_asleep(ah, reg) &&
+	    ah->ah_powerMode != HAL_PM_AWAKE) {
 		ath_hal_printf(ah, "%s: reg=0x%08x, pm=%d\n",
 		    __func__, reg, ah->ah_powerMode);
 	}
@@ -343,7 +363,8 @@ ath_hal_reg_write(struct ath_hal *ah, u_
 	bus_space_handle_t h = ah->ah_sh;
 
 	/* Debug - complain if we haven't fully waken things up */
-	if (ah->ah_powerMode != HAL_PM_AWAKE) {
+	if (! ath_hal_reg_whilst_asleep(ah, reg) &&
+	    ah->ah_powerMode != HAL_PM_AWAKE) {
 		ath_hal_printf(ah, "%s: reg=0x%08x, val=0x%08x, pm=%d\n",
 		    __func__, reg, val, ah->ah_powerMode);
 	}
@@ -363,7 +384,8 @@ ath_hal_reg_read(struct ath_hal *ah, u_i
 	u_int32_t val;
 
 	/* Debug - complain if we haven't fully waken things up */
-	if (ah->ah_powerMode != HAL_PM_AWAKE) {
+	if (! ath_hal_reg_whilst_asleep(ah, reg) &&
+	    ah->ah_powerMode != HAL_PM_AWAKE) {
 		ath_hal_printf(ah, "%s: reg=0x%08x, pm=%d\n",
 		    __func__, reg, ah->ah_powerMode);
 	}



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