From owner-svn-src-head@FreeBSD.ORG Wed Nov 9 05:48:20 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 97BB81065673; Wed, 9 Nov 2011 05:48:20 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6D9B48FC19; Wed, 9 Nov 2011 05:48:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pA95mK0X067011; Wed, 9 Nov 2011 05:48:20 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pA95mK1x067009; Wed, 9 Nov 2011 05:48:20 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201111090548.pA95mK1x067009@svn.freebsd.org> From: Adrian Chadd Date: Wed, 9 Nov 2011 05:48:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227381 - head/sys/dev/ath/ath_hal/ar5416 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Nov 2011 05:48:20 -0000 Author: adrian Date: Wed Nov 9 05:48:20 2011 New Revision: 227381 URL: http://svn.freebsd.org/changeset/base/227381 Log: Migrate the AR5416 ANI code to use the previously introduced method to fetch the current channel busy statistics, rather than duplicating it here. This forms the (very crude) basis for doing basic channel surveying. Sponsored by: Hobnob, Inc. Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c ============================================================================== --- head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c Wed Nov 9 05:45:30 2011 (r227380) +++ head/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c Wed Nov 9 05:48:20 2011 (r227381) @@ -815,15 +815,15 @@ ar5416AniGetListenTime(struct ath_hal *a { struct ath_hal_5212 *ahp = AH5212(ah); struct ar5212AniState *aniState; - uint32_t txFrameCount, rxFrameCount, cycleCount; + uint32_t rxc_pct, extc_pct, rxf_pct, txf_pct; int32_t listenTime; + int good; - txFrameCount = OS_REG_READ(ah, AR_TFCNT); - rxFrameCount = OS_REG_READ(ah, AR_RFCNT); - cycleCount = OS_REG_READ(ah, AR_CCCNT); + good = ar5416GetMibCycleCountsPct(ah, + &rxc_pct, &extc_pct, &rxf_pct, &txf_pct); aniState = ahp->ah_curani; - if (aniState->cycleCount == 0 || aniState->cycleCount > cycleCount) { + if (good == 0) { /* * Cycle counter wrap (or initial call); it's not possible * to accurately calculate a value because the registers @@ -832,14 +832,18 @@ ar5416AniGetListenTime(struct ath_hal *a listenTime = 0; ahp->ah_stats.ast_ani_lzero++; } else { - int32_t ccdelta = cycleCount - aniState->cycleCount; - int32_t rfdelta = rxFrameCount - aniState->rxFrameCount; - int32_t tfdelta = txFrameCount - aniState->txFrameCount; + int32_t ccdelta = AH5416(ah)->ah_cycleCount - aniState->cycleCount; + int32_t rfdelta = AH5416(ah)->ah_rxBusy - aniState->rxFrameCount; + int32_t tfdelta = AH5416(ah)->ah_txBusy - aniState->txFrameCount; listenTime = (ccdelta - rfdelta - tfdelta) / CLOCK_RATE; } - aniState->cycleCount = cycleCount; - aniState->txFrameCount = txFrameCount; - aniState->rxFrameCount = rxFrameCount; + aniState->cycleCount = AH5416(ah)->ah_cycleCount; + aniState->txFrameCount = AH5416(ah)->ah_rxBusy; + aniState->rxFrameCount = AH5416(ah)->ah_txBusy; + + HALDEBUG(ah, HAL_DEBUG_ANI, "rxc=%d, extc=%d, rxf=%d, txf=%d\n", + rxc_pct, extc_pct, rxf_pct, txf_pct); + return listenTime; } @@ -906,10 +910,13 @@ ar5416AniPoll(struct ath_hal *ah, const /* XXX can aniState be null? */ if (aniState == AH_NULL) return; + + /* Always update from the MIB, for statistics gathering */ + listenTime = ar5416AniGetListenTime(ah); + if (!ANI_ENA(ah)) return; - listenTime = ar5416AniGetListenTime(ah); if (listenTime < 0) { ahp->ah_stats.ast_ani_lneg++; /* restart ANI period if listenTime is invalid */