summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-10-31 21:03:55 +0000
committeradrian <adrian@FreeBSD.org>2012-10-31 21:03:55 +0000
commitd0a5aab8edfccb067bc936bced8fba1684ab3023 (patch)
tree625117e5ea6e47f69285f48592535401eb7eefdf /sys/dev/ath
parent2bfda3c82e22e708a3bf65f9fbf06e172611bda6 (diff)
downloadFreeBSD-src-d0a5aab8edfccb067bc936bced8fba1684ab3023.zip
FreeBSD-src-d0a5aab8edfccb067bc936bced8fba1684ab3023.tar.gz
HAL updates!
* Add some more ANI spur immunity levels. * For AR5111 radios attached to an AR5212, limit the 5GHz channels that are available. A later revision of the AR5111 supports the 4.9GHz PSB channels but right now there's no check in place for the radio revision. If someone wants PSB support on AR5212+AR5111 radios then please let me know and I'll add the relevant version check. Obtained from: Qualcomm Atheros
Diffstat (limited to 'sys/dev/ath')
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_attach.c24
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_attach.c5
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9280_attach.c4
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9285_attach.c4
-rw-r--r--sys/dev/ath/ath_hal/ar9002/ar9287_attach.c4
5 files changed, 31 insertions, 10 deletions
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
index a833a03..32b3bde 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
@@ -786,7 +786,29 @@ ar5212FillCapabilityInfo(struct ath_hal *ah)
else
pCap->halHigh2GhzChan = 2732;
- pCap->halLow5GhzChan = 4915;
+ /*
+ * For AR5111 version < 4, the lowest centre frequency supported is
+ * 5130MHz. For AR5111 version 4, the 4.9GHz channels are supported
+ * but only in 10MHz increments.
+ *
+ * In addition, the programming method is wrong - it uses the IEEE
+ * channel number to calculate the frequency, rather than the
+ * channel centre. Since half/quarter rates re-use some of the
+ * 5GHz channel IEEE numbers, this will result in a badly programmed
+ * synth.
+ *
+ * Until the relevant support is written, just limit lower frequency
+ * support for AR5111 so things aren't incorrectly programmed.
+ *
+ * XXX It's also possible this code doesn't correctly limit the
+ * centre frequencies of potential channels; this is very important
+ * for half/quarter rate!
+ */
+ if (AH_RADIO_MAJOR(ah) == AR_RAD5111_SREV_MAJOR) {
+ pCap->halLow5GhzChan = 5120; /* XXX lowest centre = 5130MHz */
+ } else {
+ pCap->halLow5GhzChan = 4915;
+ }
pCap->halHigh5GhzChan = 6100;
pCap->halCipherCkipSupport = AH_FALSE;
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
index 10b68db..8cb7380 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
@@ -47,8 +47,8 @@ ar5416AniSetup(struct ath_hal *ah)
.coarseHigh = { -14, -14, -14, -14, -12 },
.coarseLow = { -64, -64, -64, -64, -70 },
.firpwr = { -78, -78, -78, -78, -80 },
- .maxSpurImmunityLevel = 2,
- .cycPwrThr1 = { 2, 4, 6 },
+ .maxSpurImmunityLevel = 7,
+ .cycPwrThr1 = { 2, 4, 6, 8, 10, 12, 14, 16 },
.maxFirstepLevel = 2, /* levels 0..2 */
.firstep = { 0, 4, 8 },
.ofdmTrigHigh = 500,
@@ -61,7 +61,6 @@ ar5416AniSetup(struct ath_hal *ah)
};
/* NB: disable ANI noise immmunity for reliable RIFS rx */
AH5416(ah)->ah_ani_function &= ~(1 << HAL_ANI_NOISE_IMMUNITY_LEVEL);
- ar5416AniAttach(ah, &aniparams, &aniparams, AH_TRUE);
}
/*
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
index 6d550e9..5d79418 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c
@@ -82,8 +82,8 @@ ar9280AniSetup(struct ath_hal *ah)
.coarseHigh = { -14, -14, -14, -14, -12 },
.coarseLow = { -64, -64, -64, -64, -70 },
.firpwr = { -78, -78, -78, -78, -80 },
- .maxSpurImmunityLevel = 2,
- .cycPwrThr1 = { 2, 4, 6 },
+ .maxSpurImmunityLevel = 7,
+ .cycPwrThr1 = { 2, 4, 6, 8, 10, 12, 14, 16 },
.maxFirstepLevel = 2, /* levels 0..2 */
.firstep = { 0, 4, 8 },
.ofdmTrigHigh = 500,
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
index 13bf316..97e6823a 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c
@@ -87,8 +87,8 @@ ar9285AniSetup(struct ath_hal *ah)
.coarseHigh = { -14, -14, -14, -14, -12 },
.coarseLow = { -64, -64, -64, -64, -70 },
.firpwr = { -78, -78, -78, -78, -80 },
- .maxSpurImmunityLevel = 2,
- .cycPwrThr1 = { 2, 4, 6 },
+ .maxSpurImmunityLevel = 7,
+ .cycPwrThr1 = { 2, 4, 6, 8, 10, 12, 14, 16 },
.maxFirstepLevel = 2, /* levels 0..2 */
.firstep = { 0, 4, 8 },
.ofdmTrigHigh = 500,
diff --git a/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c b/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
index fd6e384..b6b8c2c 100644
--- a/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
+++ b/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c
@@ -86,8 +86,8 @@ ar9287AniSetup(struct ath_hal *ah)
.coarseHigh = { -14, -14, -14, -14, -12 },
.coarseLow = { -64, -64, -64, -64, -70 },
.firpwr = { -78, -78, -78, -78, -80 },
- .maxSpurImmunityLevel = 2,
- .cycPwrThr1 = { 2, 4, 6 },
+ .maxSpurImmunityLevel = 7,
+ .cycPwrThr1 = { 2, 4, 6, 8, 10, 12, 14, 16 },
.maxFirstepLevel = 2, /* levels 0..2 */
.firstep = { 0, 4, 8 },
.ofdmTrigHigh = 500,
OpenPOWER on IntegriCloud