svn commit: r220298 - head/sys/dev/ath/ath_hal
Adrian Chadd
adrian at FreeBSD.org
Sun Apr 3 17:36:34 UTC 2011
Author: adrian
Date: Sun Apr 3 17:36:32 2011
New Revision: 220298
URL: http://svn.freebsd.org/changeset/base/220298
Log:
Add in the clock timing calculation when Merlin is using the 5ghz fast clock.
This is a 44mhz clock, not a 40mhz clock like normal for 5ghz operation.
Modified:
head/sys/dev/ath/ath_hal/ah.c
Modified: head/sys/dev/ath/ath_hal/ah.c
==============================================================================
--- head/sys/dev/ath/ath_hal/ah.c Sun Apr 3 14:39:55 2011 (r220297)
+++ head/sys/dev/ath/ath_hal/ah.c Sun Apr 3 17:36:32 2011 (r220298)
@@ -21,6 +21,7 @@
#include "ah.h"
#include "ah_internal.h"
#include "ah_devid.h"
+#include "ah_eeprom.h" /* for 5ghz fast clock flag */
#include "ar5416/ar5416reg.h" /* NB: includes ar5212reg.h */
@@ -419,6 +420,8 @@ ath_hal_chan2wmode(struct ath_hal *ah, c
/* 11a Turbo 11b 11g 108g */
static const uint8_t CLOCK_RATE[] = { 40, 80, 22, 44, 88 };
+#define CLOCK_FAST_RATE_5GHZ_OFDM 44
+
u_int
ath_hal_mac_clks(struct ath_hal *ah, u_int usecs)
{
@@ -426,7 +429,12 @@ ath_hal_mac_clks(struct ath_hal *ah, u_i
u_int clks;
/* NB: ah_curchan may be null when called attach time */
- if (c != AH_NULL) {
+ /* XXX merlin and later specific workaround - 5ghz fast clock is 44 */
+ if (c != AH_NULL && IS_5GHZ_FAST_CLOCK_EN(ah, c)) {
+ clks = usecs * CLOCK_FAST_RATE_5GHZ_OFDM;
+ if (IEEE80211_IS_CHAN_HT40(c))
+ clks <<= 1;
+ } else if (c != AH_NULL) {
clks = usecs * CLOCK_RATE[ath_hal_chan2wmode(ah, c)];
if (IEEE80211_IS_CHAN_HT40(c))
clks <<= 1;
@@ -442,7 +450,12 @@ ath_hal_mac_usec(struct ath_hal *ah, u_i
u_int usec;
/* NB: ah_curchan may be null when called attach time */
- if (c != AH_NULL) {
+ /* XXX merlin and later specific workaround - 5ghz fast clock is 44 */
+ if (c != AH_NULL && IS_5GHZ_FAST_CLOCK_EN(ah, c)) {
+ usec = clks / CLOCK_FAST_RATE_5GHZ_OFDM;
+ if (IEEE80211_IS_CHAN_HT40(c))
+ usec >>= 1;
+ } else if (c != AH_NULL) {
usec = clks / CLOCK_RATE[ath_hal_chan2wmode(ah, c)];
if (IEEE80211_IS_CHAN_HT40(c))
usec >>= 1;
More information about the svn-src-all
mailing list