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);
        }
_______________________________________________
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