Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Jan 2011 10:48:29 +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: r217882 - head/sys/dev/ath/ath_hal/ar5416
Message-ID:  <201101261048.p0QAmTcf074418@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Wed Jan 26 10:48:29 2011
New Revision: 217882
URL: http://svn.freebsd.org/changeset/base/217882

Log:
  Add ar5416RestoreChainMask() which will undo any AR5416 specific chainmask
  overriding after calibration.
  
  This will get set for other two chain radios, such as AR9280 and later on,
  AR9287. It should however be a nul operation.

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

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416.h
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Wed Jan 26 10:36:43 2011	(r217881)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Wed Jan 26 10:48:29 2011	(r217882)
@@ -202,6 +202,7 @@ extern	void ar5416GetTargetPowersLeg(str
 		uint16_t numChannels, CAL_TARGET_POWER_LEG *pNewPower,
 		uint16_t numRates, HAL_BOOL isExtTarget);
 extern	void ar5416InitChainMasks(struct ath_hal *ah);
+extern	void ar5416RestoreChainMask(struct ath_hal *ah);
 
 extern	HAL_BOOL ar5416StopTxDma(struct ath_hal *ah, u_int q);
 extern	HAL_BOOL ar5416SetupTxDesc(struct ath_hal *ah, struct ath_desc *ds,

Modified: head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c	Wed Jan 26 10:36:43 2011	(r217881)
+++ head/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c	Wed Jan 26 10:48:29 2011	(r217882)
@@ -329,6 +329,8 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMO
 	if (!ar5416InitCal(ah, chan))
 		FAIL(HAL_ESELFTEST);
 
+	ar5416RestoreChainMask(ah);
+
 	AH_PRIVATE(ah)->ah_opmode = opmode;	/* record operating mode */
 
 	if (bChannelChange && !IEEE80211_IS_CHAN_DFS(chan)) 
@@ -1124,6 +1126,18 @@ ar5416InitChainMasks(struct ath_hal *ah)
 	OS_REG_WRITE(ah, AR_SELFGEN_MASK, AH5416(ah)->ah_tx_chainmask);
 }
 
+void
+ar5416RestoreChainMask(struct ath_hal *ah)
+{
+	int rx_chainmask = AH5416(ah)->ah_rx_chainmask;
+
+	if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
+		OS_REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
+		OS_REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
+	}
+}
+
+
 #ifndef IS_5GHZ_FAST_CLOCK_EN
 #define	IS_5GHZ_FAST_CLOCK_EN(ah, chan)	AH_FALSE
 #endif



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