From adadb6074df63fb10f84a51d4760064e1a67f437 Mon Sep 17 00:00:00 2001 From: Adrian Chadd Date: Wed, 31 Oct 2012 21:03:55 +0000 Subject: [PATCH] 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 --- sys/dev/ath/ath_hal/ar5212/ar5212_attach.c | 24 +++++++++++++++++++++- sys/dev/ath/ath_hal/ar5416/ar5416_attach.c | 5 ++--- sys/dev/ath/ath_hal/ar9002/ar9280_attach.c | 4 ++-- sys/dev/ath/ath_hal/ar9002/ar9285_attach.c | 4 ++-- sys/dev/ath/ath_hal/ar9002/ar9287_attach.c | 4 ++-- 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 a833a035fe25..32b3bde49b56 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 10b68db92950..8cb73804c482 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 6d550e90efb6..5d79418999fc 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 13bf316c1ba6..97e6823a7b49 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 fd6e384904c4..b6b8c2c170bf 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,