Lines Matching +full:analog +full:- +full:pass

1 /*-
2 * SPDX-License-Identifier: ISC
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2002-2008 Atheros Communications, Inc.
78 #define V(r, c) (ia)->data[((r)*(ia)->cols) + (c)] in write_common()
82 for (r = 0; r < ia->rows; r++) { in write_common()
141 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212Reset()
142 ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212Reset()
171 HALASSERT(AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER3); in ar5212Reset()
188 * only) - the best and most general fix for this situation in ar5212Reset()
191 * gets resynchronized to the AP's TSF - power save is in ar5212Reset()
210 /* If the channel change is across the same mode - perform a fast channel change */ in ar5212Reset()
214 * -channel change requested - so it's not the initial reset. in ar5212Reset()
215 * -it's not a change to the current channel - in ar5212Reset()
217 * -the modes of the previous and requested channel are the in ar5212Reset()
222 (AH_PRIVATE(ah)->ah_curchan != AH_NULL) && in ar5212Reset()
223 (chan->ic_freq != AH_PRIVATE(ah)->ah_curchan->ic_freq) && in ar5212Reset()
224 ((chan->ic_flags & IEEE80211_CHAN_ALLTURBO) == in ar5212Reset()
225 (AH_PRIVATE(ah)->ah_curchan->ic_flags & IEEE80211_CHAN_ALLTURBO))) { in ar5212Reset()
227 /* If ChannelChange completed - skip the rest of reset */ in ar5212Reset()
277 __func__, chan->ic_freq, chan->ic_flags); in ar5212Reset()
289 __func__, chan->ic_freq, chan->ic_flags); in ar5212Reset()
296 /* Set correct Baseband to analog shift setting to access analog chips. */ in ar5212Reset()
299 regWrites = ath_hal_ini_write(ah, &ahp->ah_ini_modes, modesIndex, 0); in ar5212Reset()
300 regWrites = write_common(ah, &ahp->ah_ini_common, bChannelChange, in ar5212Reset()
310 ahp->ah_rfHal->writeRegs(ah, modesIndex, freqIndex, regWrites); in ar5212Reset()
327 if (AH_PRIVATE(ah)->ah_phyRev >= AR_PHY_CHIP_ID_REV_2) { in ar5212Reset()
336 if (ichan->channel == 2484) { in ar5212Reset()
338 ee->ee_cckOfdmPwrDelta - in ar5212Reset()
339 ee->ee_scaledCh14FilterCckDelta); in ar5212Reset()
342 ee->ee_cckOfdmPwrDelta); in ar5212Reset()
347 SM((ee->ee_cckOfdmPwrDelta*-1), in ar5212Reset()
349 SM((cckOfdmPwrDelta*-1), in ar5212Reset()
365 if (AH_PRIVATE(ah)->ah_phyRev >= AR_PHY_CHIP_ID_REV_3) { in ar5212Reset()
369 if (AH_PRIVATE(ah)->ah_phyRev >= AR_PHY_CHIP_ID_REV_4) { in ar5212Reset()
373 /* Enable double-buffering */ in ar5212Reset()
383 if (IS_DISABLE_FAST_ADC_CHAN(ichan->channel)) in ar5212Reset()
397 /* Write the analog registers */ in ar5212Reset()
398 if (!ahp->ah_rfHal->setRfRegs(ah, chan, modesIndex, rfXpdGain)) { in ar5212Reset()
407 AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER5_3) in ar5212Reset()
425 OS_REG_WRITE(ah, AR_STA_ID0, LE_READ_4(ahp->ah_macaddr)); in ar5212Reset()
426 OS_REG_WRITE(ah, AR_STA_ID1, LE_READ_2(ahp->ah_macaddr + 4) in ar5212Reset()
429 | ahp->ah_staId1Defaults in ar5212Reset()
434 OS_REG_WRITE(ah, AR_BSSMSKL, LE_READ_4(ahp->ah_bssidmask)); in ar5212Reset()
435 OS_REG_WRITE(ah, AR_BSSMSKU, LE_READ_2(ahp->ah_bssidmask + 4)); in ar5212Reset()
448 OS_REG_WRITE(ah, AR_BSS_ID0, LE_READ_4(ahp->ah_bssid)); in ar5212Reset()
449 OS_REG_WRITE(ah, AR_BSS_ID1, LE_READ_2(ahp->ah_bssid + 4) | in ar5212Reset()
450 (ahp->ah_assocId & 0x3fff) << AR_BSS_ID1_AID_S); in ar5212Reset()
453 OS_REG_WRITE(ah, AR_RSSI_THR, ahp->ah_rssiThr); in ar5212Reset()
462 ar5212SetCoverageClass(ah, AH_PRIVATE(ah)->ah_coverageClass, 1); in ar5212Reset()
541 if (!IEEE80211_IS_CHAN_B(chan) && ahp->ah_bIQCalibration != IQ_CAL_DONE) { in ar5212Reset()
548 ahp->ah_bIQCalibration = IQ_CAL_RUNNING; in ar5212Reset()
550 ahp->ah_bIQCalibration = IQ_CAL_INACTIVE; in ar5212Reset()
559 ahp->ah_intrTxqs = 0; in ar5212Reset()
560 for (i = 0; i < AH_PRIVATE(ah)->ah_caps.halTotalQueues; i++) in ar5212Reset()
569 ahp->ah_maskReg = AR_IMR_TXOK | AR_IMR_TXERR | AR_IMR_TXURN in ar5212Reset()
574 ahp->ah_maskReg |= AR_IMR_MIB; in ar5212Reset()
575 OS_REG_WRITE(ah, AR_IMR, ahp->ah_maskReg); in ar5212Reset()
581 if (AH_PRIVATE(ah)->ah_rfkillEnabled) in ar5212Reset()
608 if (AH_PRIVATE(ah)->ah_macVersion > AR_SREV_VERSION_VENICE || in ar5212Reset()
609 (AH_PRIVATE(ah)->ah_macVersion == AR_SREV_VERSION_VENICE && in ar5212Reset()
610 AH_PRIVATE(ah)->ah_macRev >= AR_SREV_GRIFFIN_LITE)) { in ar5212Reset()
630 /* TPC for self-generated frames */ in ar5212Reset()
632 ackTpcPow = MS(ahp->ah_macTPC, AR_TPC_ACK); in ar5212Reset()
633 if ((ackTpcPow-ahp->ah_txPowerIndexOffset) > chan->ic_maxpower) in ar5212Reset()
634 ackTpcPow = chan->ic_maxpower+ahp->ah_txPowerIndexOffset; in ar5212Reset()
636 if (ackTpcPow > (2*chan->ic_maxregpower - twiceAntennaReduction)) in ar5212Reset()
637 ackTpcPow = (2*chan->ic_maxregpower - twiceAntennaReduction) in ar5212Reset()
638 + ahp->ah_txPowerIndexOffset; in ar5212Reset()
640 ctsTpcPow = MS(ahp->ah_macTPC, AR_TPC_CTS); in ar5212Reset()
641 if ((ctsTpcPow-ahp->ah_txPowerIndexOffset) > chan->ic_maxpower) in ar5212Reset()
642 ctsTpcPow = chan->ic_maxpower+ahp->ah_txPowerIndexOffset; in ar5212Reset()
644 if (ctsTpcPow > (2*chan->ic_maxregpower - twiceAntennaReduction)) in ar5212Reset()
645 ctsTpcPow = (2*chan->ic_maxregpower - twiceAntennaReduction) in ar5212Reset()
646 + ahp->ah_txPowerIndexOffset; in ar5212Reset()
648 chirpTpcPow = MS(ahp->ah_macTPC, AR_TPC_CHIRP); in ar5212Reset()
649 if ((chirpTpcPow-ahp->ah_txPowerIndexOffset) > chan->ic_maxpower) in ar5212Reset()
650 chirpTpcPow = chan->ic_maxpower+ahp->ah_txPowerIndexOffset; in ar5212Reset()
652 if (chirpTpcPow > (2*chan->ic_maxregpower - twiceAntennaReduction)) in ar5212Reset()
653 chirpTpcPow = (2*chan->ic_maxregpower - twiceAntennaReduction) in ar5212Reset()
654 + ahp->ah_txPowerIndexOffset; in ar5212Reset()
669 /* Restore user-specified settings */ in ar5212Reset()
670 if (ahp->ah_miscMode != 0) in ar5212Reset()
671 OS_REG_WRITE(ah, AR_MISC_MODE, ahp->ah_miscMode); in ar5212Reset()
672 if (ahp->ah_sifstime != (u_int) -1) in ar5212Reset()
673 ar5212SetSifsTime(ah, ahp->ah_sifstime); in ar5212Reset()
674 if (ahp->ah_slottime != (u_int) -1) in ar5212Reset()
675 ar5212SetSlotTime(ah, ahp->ah_slottime); in ar5212Reset()
676 if (ahp->ah_acktimeout != (u_int) -1) in ar5212Reset()
677 ar5212SetAckTimeout(ah, ahp->ah_acktimeout); in ar5212Reset()
678 if (ahp->ah_ctstimeout != (u_int) -1) in ar5212Reset()
679 ar5212SetCTSTimeout(ah, ahp->ah_ctstimeout); in ar5212Reset()
680 if (AH_PRIVATE(ah)->ah_diagreg != 0) in ar5212Reset()
681 OS_REG_WRITE(ah, AR_DIAG_SW, AH_PRIVATE(ah)->ah_diagreg); in ar5212Reset()
683 AH_PRIVATE(ah)->ah_opmode = opmode; /* record operating mode */ in ar5212Reset()
688 chan->ic_state &= ~IEEE80211_CHANSTATE_CWINT; in ar5212Reset()
717 if (!ahp->ah_rfHal->setChannel(ah, chan)) in ar5212SetChannel()
724 * perform a synthesizer-only channel change (no reset). If the
743 for (qnum = 0; qnum < AH_PRIVATE(ah)->ah_caps.halTotalQueues; qnum++) { in ar5212ChannelChange()
753 OS_REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_REQUEST); /* Request analog bus grant */ in ar5212ChannelChange()
788 AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER5_3) in ar5212ChannelChange()
830 * re-enable the hardware.
847 * Reset the HW - PCI must be reset after the rest of the in ar5212Disable()
864 OS_MARK(ah, AH_MARK_CHIPRESET, chan ? chan->ic_freq : 0); in ar5212ChipReset()
867 * Reset the HW - PCI must be reset after the rest of the in ar5212ChipReset()
942 * - The PLL cannot be set to 44 unless the CCK or DYNAMIC in ar5212ChipReset()
944 * - Turbo cannot be set at the same time as CCK or DYNAMIC in ar5212ChipReset()
984 OS_MARK(ah, AH_MARK_PERCAL, chan->ic_freq); in ar5212PerCalibrationN()
990 __func__, chan->ic_freq, chan->ic_flags); in ar5212PerCalibrationN()
995 if (ahp->ah_bIQCalibration == IQ_CAL_DONE || in ar5212PerCalibrationN()
996 ahp->ah_bIQCalibration == IQ_CAL_INACTIVE) in ar5212PerCalibrationN()
1000 if (ahp->ah_bIQCalibration == IQ_CAL_RUNNING && in ar5212PerCalibrationN()
1005 ahp->ah_bIQCalibration = IQ_CAL_INACTIVE; in ar5212PerCalibrationN()
1029 * Prescale these values to remove 64-bit operation in ar5212PerCalibrationN()
1035 /* Protect against divide-by-0 and loss of sign bits. */ in ar5212PerCalibrationN()
1037 iCoff = (int8_t)(-iqCorrMeas) / iCoffDenom; in ar5212PerCalibrationN()
1039 if (iCoff < -32) { in ar5212PerCalibrationN()
1040 iCoff = -32; in ar5212PerCalibrationN()
1046 qCoff = (powerMeasI / qCoffDenom) - 128; in ar5212PerCalibrationN()
1047 if (qCoff < -16) { in ar5212PerCalibrationN()
1048 qCoff = -16; in ar5212PerCalibrationN()
1064 ahp->ah_bIQCalibration = IQ_CAL_DONE; in ar5212PerCalibrationN()
1065 ichan->privFlags |= CHANNEL_IQVALID; in ar5212PerCalibrationN()
1066 ichan->iCoff = iCoff; in ar5212PerCalibrationN()
1067 ichan->qCoff = qCoff; in ar5212PerCalibrationN()
1070 ahp->ah_bIQCalibration == IQ_CAL_DONE && in ar5212PerCalibrationN()
1071 (ichan->privFlags & CHANNEL_IQVALID) == 0) { in ar5212PerCalibrationN()
1081 ahp->ah_bIQCalibration = IQ_CAL_RUNNING; in ar5212PerCalibrationN()
1117 __func__, chan->ic_freq, chan->ic_flags); in ar5212ResetCalValid()
1120 ichan->privFlags &= ~CHANNEL_IQVALID; in ar5212ResetCalValid()
1203 if (AH_PRIVATE(ah)->ah_ispcie) { in ar5212SetResetReg()
1235 if (! AH_PRIVATE(ah)->ah_ispcie) { in ar5212SetResetReg()
1243 if (AH_PRIVATE(ah)->ah_bustype == HAL_BUS_TYPE_PCI) { in ar5212SetResetReg()
1260 * MAC stopped gracefully; no need to warm-reset the PCI bus in ar5212SetResetReg()
1281 * Set CFG, little-endian for descriptor accesses. in ar5212SetResetReg()
1295 AH5212(ah)->ah_phyPowerOn = ((resetMask & AR_RC_BB) == 0); in ar5212SetResetReg()
1304 nf = 0 - ((nf ^ 0x1ff) + 1); in ar5212GetNoiseFloor()
1312 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in getNoiseFloorThresh()
1314 HALASSERT(ah->ah_magic == AR5212_MAGIC); in getNoiseFloorThresh()
1316 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in getNoiseFloorThresh()
1318 *nft = ee->ee_noiseFloorThresh[headerInfo11A]; in getNoiseFloorThresh()
1321 *nft = ee->ee_noiseFloorThresh[headerInfo11B]; in getNoiseFloorThresh()
1325 *nft = ee->ee_noiseFloorThresh[headerInfo11G]; in getNoiseFloorThresh()
1330 __func__, chan->ic_freq, chan->ic_flags); in getNoiseFloorThresh()
1345 ahp->ah_nfCalHist.first_run = 1; in ar5212InitNfCalHistBuffer()
1346 ahp->ah_nfCalHist.currIndex = 0; in ar5212InitNfCalHistBuffer()
1347 ahp->ah_nfCalHist.privNF = AR5212_CCA_MAX_GOOD_VALUE; in ar5212InitNfCalHistBuffer()
1348 ahp->ah_nfCalHist.invalidNFcount = AR512_NF_CAL_HIST_MAX; in ar5212InitNfCalHistBuffer()
1350 ahp->ah_nfCalHist.nfCalBuffer[i] = AR5212_CCA_MAX_GOOD_VALUE; in ar5212InitNfCalHistBuffer()
1359 h->nfCalBuffer[h->currIndex] = nf; in updateNFHistBuff()
1360 if (++h->currIndex >= AR512_NF_CAL_HIST_MAX) in updateNFHistBuff()
1361 h->currIndex = 0; in updateNFHistBuff()
1374 for (i = 0; i < AR512_NF_CAL_HIST_MAX-1; i ++) { in ar5212GetNfHistMid()
1375 for (j = 1; j < AR512_NF_CAL_HIST_MAX-i; j ++) { in ar5212GetNfHistMid()
1376 if (sort[j] > sort[j-1]) { in ar5212GetNfHistMid()
1378 sort[j] = sort[j-1]; in ar5212GetNfHistMid()
1379 sort[j-1] = nf; in ar5212GetNfHistMid()
1383 return sort[(AR512_NF_CAL_HIST_MAX-1)>>1]; in ar5212GetNfHistMid()
1393 struct ar5212NfCalHist *h = &ahp->ah_nfCalHist; in ar5212GetNf()
1401 ichan->rawNoiseFloor = h->privNF; /* most recent value */ in ar5212GetNf()
1402 return ichan->rawNoiseFloor; in ar5212GetNf()
1419 chan->ic_state |= IEEE80211_CHANSTATE_CWINT; in ar5212GetNf()
1426 * Pass through histogram and write median value as in ar5212GetNf()
1428 * full window of in-range values to be seen before we in ar5212GetNf()
1432 if (h->first_run) { in ar5212GetNf()
1436 h->invalidNFcount = AR512_NF_CAL_HIST_MAX; in ar5212GetNf()
1437 } else if (--(h->invalidNFcount) == 0) { in ar5212GetNf()
1438 h->first_run = 0; in ar5212GetNf()
1439 h->privNF = nf = ar5212GetNfHistMid(h->nfCalBuffer); in ar5212GetNf()
1444 h->privNF = nf = ar5212GetNfHistMid(h->nfCalBuffer); in ar5212GetNf()
1467 val |= (((uint32_t)(-50) << 1) & 0x1FF); in ar5212GetNf()
1473 return (ichan->rawNoiseFloor = nf); in ar5212GetNf()
1486 if (!AH_PRIVATE(ah)->ah_caps.halCompressSupport) in ar5212SetCompRegs()
1504 OS_REG_WRITE(ah, AR_DCM_D, ahp->ah_decompMask[i]); in ar5212SetCompRegs()
1515 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212SetAntennaSwitchInternal()
1519 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212SetAntennaSwitchInternal()
1520 HALASSERT(ahp->ah_phyPowerOn); in ar5212SetAntennaSwitchInternal()
1522 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5212SetAntennaSwitchInternal()
1539 __func__, chan->ic_flags); in ar5212SetAntennaSwitchInternal()
1543 antSwitchA = ee->ee_antennaControl[1][ix] in ar5212SetAntennaSwitchInternal()
1544 | (ee->ee_antennaControl[2][ix] << 6) in ar5212SetAntennaSwitchInternal()
1545 | (ee->ee_antennaControl[3][ix] << 12) in ar5212SetAntennaSwitchInternal()
1546 | (ee->ee_antennaControl[4][ix] << 18) in ar5212SetAntennaSwitchInternal()
1547 | (ee->ee_antennaControl[5][ix] << 24) in ar5212SetAntennaSwitchInternal()
1549 antSwitchB = ee->ee_antennaControl[6][ix] in ar5212SetAntennaSwitchInternal()
1550 | (ee->ee_antennaControl[7][ix] << 6) in ar5212SetAntennaSwitchInternal()
1551 | (ee->ee_antennaControl[8][ix] << 12) in ar5212SetAntennaSwitchInternal()
1552 | (ee->ee_antennaControl[9][ix] << 18) in ar5212SetAntennaSwitchInternal()
1553 | (ee->ee_antennaControl[10][ix] << 24) in ar5212SetAntennaSwitchInternal()
1577 ahp->ah_diversity = AH_FALSE; in ar5212SetAntennaSwitchInternal()
1583 ahp->ah_diversity = AH_TRUE; in ar5212SetAntennaSwitchInternal()
1585 ahp->ah_antControl = settings; in ar5212SetAntennaSwitchInternal()
1619 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212SetBoardValues()
1627 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212SetBoardValues()
1629 switch (chan->ic_flags & IEEE80211_CHAN_ALLTURBOFULL) { in ar5212SetBoardValues()
1636 ahp->ah_gainValues.currStep->paramVal[GP_TXCLIP]); in ar5212SetBoardValues()
1647 __func__, chan->ic_flags); in ar5212SetBoardValues()
1653 (ee->ee_antennaControl[0][arrayMode] << 4) | 0x1); in ar5212SetBoardValues()
1655 ar5212SetAntennaSwitchInternal(ah, ahp->ah_antControl, chan); in ar5212SetBoardValues()
1659 (ee->ee_noiseFloorThresh[arrayMode] & 0x1FF) in ar5212SetBoardValues()
1662 if (ee->ee_version >= AR_EEPROM_VER5_0 && IEEE80211_IS_CHAN_TURBO(chan)) { in ar5212SetBoardValues()
1663 switchSettling = ee->ee_switchSettlingTurbo[is2GHz]; in ar5212SetBoardValues()
1664 adcDesiredSize = ee->ee_adcDesiredSizeTurbo[is2GHz]; in ar5212SetBoardValues()
1665 pgaDesiredSize = ee->ee_pgaDesiredSizeTurbo[is2GHz]; in ar5212SetBoardValues()
1666 txrxAtten = ee->ee_txrxAttenTurbo[is2GHz]; in ar5212SetBoardValues()
1667 rxtxMargin = ee->ee_rxtxMarginTurbo[is2GHz]; in ar5212SetBoardValues()
1669 switchSettling = ee->ee_switchSettling[arrayMode]; in ar5212SetBoardValues()
1670 adcDesiredSize = ee->ee_adcDesiredSize[arrayMode]; in ar5212SetBoardValues()
1671 pgaDesiredSize = ee->ee_pgaDesiredSize[is2GHz]; in ar5212SetBoardValues()
1672 txrxAtten = ee->ee_txrxAtten[is2GHz]; in ar5212SetBoardValues()
1673 rxtxMargin = ee->ee_rxtxMargin[is2GHz]; in ar5212SetBoardValues()
1685 (ee->ee_txEndToXPAOff[arrayMode] << 24) in ar5212SetBoardValues()
1686 | (ee->ee_txEndToXPAOff[arrayMode] << 16) in ar5212SetBoardValues()
1687 | (ee->ee_txFrameToXPAOn[arrayMode] << 8) in ar5212SetBoardValues()
1688 | ee->ee_txFrameToXPAOn[arrayMode]); in ar5212SetBoardValues()
1690 ee->ee_txEndToXLNAOn[arrayMode] << 8); in ar5212SetBoardValues()
1692 (ee->ee_thresh62[arrayMode] << 12) & 0x7F000); in ar5212SetBoardValues()
1695 * False detect backoff - suspected 32 MHz spur causes false in ar5212SetBoardValues()
1700 if (ee->ee_version < AR_EEPROM_VER3_3) { in ar5212SetBoardValues()
1702 if (AH_PRIVATE(ah)->ah_subvendorid == 0x1022 && in ar5212SetBoardValues()
1707 falseDectectBackoff += ee->ee_falseDetectBackoff[arrayMode]; in ar5212SetBoardValues()
1711 if (ichan->privFlags & CHANNEL_IQVALID) { in ar5212SetBoardValues()
1712 iCoff = ichan->iCoff; in ar5212SetBoardValues()
1713 qCoff = ichan->qCoff; in ar5212SetBoardValues()
1715 iCoff = ee->ee_iqCalI[is2GHz]; in ar5212SetBoardValues()
1716 qCoff = ee->ee_iqCalQ[is2GHz]; in ar5212SetBoardValues()
1727 if (ee->ee_version >= AR_EEPROM_VER4_1) { in ar5212SetBoardValues()
1728 if (!IEEE80211_IS_CHAN_108G(chan) || ee->ee_version >= AR_EEPROM_VER5_0) in ar5212SetBoardValues()
1732 if (ee->ee_version >= AR_EEPROM_VER5_1) { in ar5212SetBoardValues()
1763 #define CHAN_TO_SPUR(_f, _freq) ( ((_freq) - ((_f) ? 2300 : 4900)) * 10 ) in ar5212SetSpurMitigation()
1770 curChanAsSpur = CHAN_TO_SPUR(is2GHz, ichan->channel); in ar5212SetSpurMitigation()
1772 if (ichan->mainSpur) { in ar5212SetSpurMitigation()
1774 finalSpur = ichan->mainSpur; in ar5212SetSpurMitigation()
1791 if ((curChanAsSpur - spurDetectWidth <= (spurChan & HAL_SPUR_VAL_MASK)) && in ar5212SetSpurMitigation()
1798 ichan->mainSpur = finalSpur; in ar5212SetSpurMitigation()
1831 spurOffset = finalSpur - curChanAsSpur; in ar5212SetSpurMitigation()
1878 pilotMask[0] |= 1 << (curBinOffset - 1); in ar5212SetSpurMitigation()
1880 pilotMask[1] |= 1 << (curBinOffset - 33); in ar5212SetSpurMitigation()
1883 if ((curBinOffset >= -1) && (curBinOffset <= 14)) in ar5212SetSpurMitigation()
1886 binMagMask[1] |= pMagMap[i] << (curBinOffset - 15) * 2; in ar5212SetSpurMitigation()
1888 binMagMask[2] |= pMagMap[i] << (curBinOffset -31) * 2; in ar5212SetSpurMitigation()
1890 binMagMask[3] |= pMagMap[i] << (curBinOffset -47) * 2; in ar5212SetSpurMitigation()
1947 * ALGO -> coef = 1e8/fcarrier*fclock/40; in ar5212SetDeltaSlope()
1953 * ALGO -> coef_exp = 14-floor(log2(coef)); in ar5212SetDeltaSlope()
1956 for (coef_exp = 31; coef_exp > 0; coef_exp--) in ar5212SetDeltaSlope()
1961 coef_exp = 14 - (coef_exp - COEF_SCALE_S); in ar5212SetDeltaSlope()
1964 * ALGO -> coef_man = floor(coef* 2^coef_exp+0.5); in ar5212SetDeltaSlope()
1967 coef_man = coef_scaled + (1 << (COEF_SCALE_S - coef_exp - 1)); in ar5212SetDeltaSlope()
1968 ds_coef_man = coef_man >> (COEF_SCALE_S - coef_exp); in ar5212SetDeltaSlope()
1969 ds_coef_exp = coef_exp - 16; in ar5212SetDeltaSlope()
1989 struct ieee80211_channel dummy = *AH_PRIVATE(ah)->ah_curchan; in ar5212SetTxPowerLimit()
1994 AH_PRIVATE(ah)->ah_powerLimit = AH_MIN(limit, MAX_RATE_POWER); in ar5212SetTxPowerLimit()
2013 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212SetTransmitPower()
2017 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212SetTransmitPower()
2019 OS_MEMZERO(ahp->ah_pcdacTable, ahp->ah_pcdacTableSize); in ar5212SetTransmitPower()
2020 OS_MEMZERO(ahp->ah_ratesArray, sizeof(ahp->ah_ratesArray)); in ar5212SetTransmitPower()
2022 powerLimit = AH_MIN(MAX_RATE_POWER, AH_PRIVATE(ah)->ah_powerLimit); in ar5212SetTransmitPower()
2024 tpcInDb = tpcScaleReductionTable[AH_PRIVATE(ah)->ah_tpScale]; in ar5212SetTransmitPower()
2033 if (!ahp->ah_rfHal->setPowerTable(ah, in ar5212SetTransmitPower()
2042 * to avg ratio - except in newer avg power designs in ar5212SetTransmitPower()
2045 ahp->ah_ratesArray[15] += 4; in ar5212SetTransmitPower()
2047 * txPowerIndexOffset is set by the SetPowerTable() call - in ar5212SetTransmitPower()
2050 for (i = 0; i < N(ahp->ah_ratesArray); i++) { in ar5212SetTransmitPower()
2051 ahp->ah_ratesArray[i] += ahp->ah_txPowerIndexOffset; in ar5212SetTransmitPower()
2052 if (ahp->ah_ratesArray[i] > 63) in ar5212SetTransmitPower()
2053 ahp->ah_ratesArray[i] = 63; in ar5212SetTransmitPower()
2056 if (ee->ee_eepMap < 2) { in ar5212SetTransmitPower()
2058 * Correct gain deltas for 5212 G operation - in ar5212SetTransmitPower()
2061 if (AH_PRIVATE(ah)->ah_phyRev < AR_PHY_CHIP_ID_REV_2 && in ar5212SetTransmitPower()
2067 ee->ee_cckOfdmPwrDelta - in ar5212SetTransmitPower()
2068 ee->ee_scaledCh14FilterCckDelta); in ar5212SetTransmitPower()
2071 ee->ee_cckOfdmPwrDelta); in ar5212SetTransmitPower()
2080 ((((ahp->ah_pcdacTable[2*i + 1] << 8) | 0xff) & 0xffff) << 16) in ar5212SetTransmitPower()
2081 | (((ahp->ah_pcdacTable[2*i] << 8) | 0xff) & 0xffff) in ar5212SetTransmitPower()
2088 POW_OFDM(ahp->ah_ratesArray[3], 24) in ar5212SetTransmitPower()
2089 | POW_OFDM(ahp->ah_ratesArray[2], 16) in ar5212SetTransmitPower()
2090 | POW_OFDM(ahp->ah_ratesArray[1], 8) in ar5212SetTransmitPower()
2091 | POW_OFDM(ahp->ah_ratesArray[0], 0) in ar5212SetTransmitPower()
2094 POW_OFDM(ahp->ah_ratesArray[7], 24) in ar5212SetTransmitPower()
2095 | POW_OFDM(ahp->ah_ratesArray[6], 16) in ar5212SetTransmitPower()
2096 | POW_OFDM(ahp->ah_ratesArray[5], 8) in ar5212SetTransmitPower()
2097 | POW_OFDM(ahp->ah_ratesArray[4], 0) in ar5212SetTransmitPower()
2102 POW_CCK(ahp->ah_ratesArray[10], 24) in ar5212SetTransmitPower()
2103 | POW_CCK(ahp->ah_ratesArray[9], 16) in ar5212SetTransmitPower()
2104 | POW_CCK(ahp->ah_ratesArray[15], 8) /* XR target power */ in ar5212SetTransmitPower()
2105 | POW_CCK(ahp->ah_ratesArray[8], 0) in ar5212SetTransmitPower()
2108 POW_CCK(ahp->ah_ratesArray[14], 24) in ar5212SetTransmitPower()
2109 | POW_CCK(ahp->ah_ratesArray[13], 16) in ar5212SetTransmitPower()
2110 | POW_CCK(ahp->ah_ratesArray[12], 8) in ar5212SetTransmitPower()
2111 | POW_CCK(ahp->ah_ratesArray[11], 0) in ar5212SetTransmitPower()
2119 (ahp->ah_tpcEnabled ? AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE : 0)); in ar5212SetTransmitPower()
2138 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212SetRateTable()
2139 uint16_t *rpow = ahp->ah_ratesArray; in ar5212SetRateTable()
2151 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212SetRateTable()
2153 twiceMaxRDPower = chan->ic_maxregpower * 2; in ar5212SetRateTable()
2154 *pMaxPower = -MAX_RATE_POWER; in ar5212SetRateTable()
2159 for (i = 0; i < ee->ee_numCtls; i++) { in ar5212SetRateTable()
2162 if (ee->ee_ctl[i] == 0) in ar5212SetRateTable()
2164 if (ee->ee_ctl[i] == cfgCtl || in ar5212SetRateTable()
2165 cfgCtl == ((ee->ee_ctl[i] & CTL_MODE_M) | SD_NO_CTL)) { in ar5212SetRateTable()
2166 rep = &ee->ee_rdEdgesPower[i * NUM_EDGES]; in ar5212SetRateTable()
2181 for (i = 0; i < ee->ee_numCtls; i++) { in ar5212SetRateTable()
2184 if (ee->ee_ctl[i] == 0) in ar5212SetRateTable()
2186 if (ee->ee_ctl[i] == cfgCtl || in ar5212SetRateTable()
2187 cfgCtl == ((ee->ee_ctl[i] & CTL_MODE_M) | SD_NO_CTL)) { in ar5212SetRateTable()
2188 rep = &ee->ee_rdEdgesPower[i * NUM_EDGES]; in ar5212SetRateTable()
2216 ar5212GetTargetPowers(ah, chan, ee->ee_trgtPwr_11g, in ar5212SetRateTable()
2217 ee->ee_numTargetPwr_11g, &targetPowerOfdm); in ar5212SetRateTable()
2219 ar5212GetTargetPowers(ah, chan, ee->ee_trgtPwr_11a, in ar5212SetRateTable()
2220 ee->ee_numTargetPwr_11a, &targetPowerOfdm); in ar5212SetRateTable()
2226 twiceMaxRDPower - twiceAntennaReduction); in ar5212SetRateTable()
2232 * power only for non-AP operation. in ar5212SetRateTable()
2236 && AH_PRIVATE(ah)->ah_opmode != HAL_M_HOSTAP in ar5212SetRateTable()
2243 if (ee->ee_version >= AR_EEPROM_VER3_1) in ar5212SetRateTable()
2245 ee->ee_turbo2WMaxPower5); in ar5212SetRateTable()
2250 if (ee->ee_version >= AR_EEPROM_VER4_0 && in ar5212SetRateTable()
2253 ee->ee_turbo2WMaxPower2); in ar5212SetRateTable()
2260 scaledPower = maxAvailPower - (tpcScaleReduction * 2); in ar5212SetRateTable()
2273 if (ee->ee_version >= AR_EEPROM_VER4_0) { in ar5212SetRateTable()
2276 ee->ee_xrTargetPower2 : ee->ee_xrTargetPower5); in ar5212SetRateTable()
2281 ahp->ah_ofdmTxPower = *pMaxPower; in ar5212SetRateTable()
2293 __func__, twiceMaxRDPower, ee->ee_turbo2WMaxPower5, in ar5212SetRateTable()
2295 chan->ic_freq, chan->ic_flags, in ar5212SetRateTable()
2301 ar5212GetTargetPowers(ah, chan, ee->ee_trgtPwr_11b, in ar5212SetRateTable()
2302 ee->ee_numTargetPwr_11b, &targetPowerCck); in ar5212SetRateTable()
2306 twiceMaxRDPower - twiceAntennaReduction); in ar5212SetRateTable()
2311 scaledPower = AH_MIN(scaledPower, targetPowerCck.twicePwr6_24) - (tpcScaleReduction * 2); in ar5212SetRateTable()
2339 tpcScaleReduction * 2, chan->ic_freq, chan->ic_flags, in ar5212SetRateTable()
2343 ahp->ah_tx6PowerInHalfDbm = *pMaxPower; in ar5212SetRateTable()
2344 AH_PRIVATE(ah)->ah_maxPowerLevel = ahp->ah_tx6PowerInHalfDbm; in ar5212SetRateTable()
2363 if (ahp->ah_rfHal->getChannelMaxMinPower(ah, chan, &maxPower, &minPower)) { in ar5212GetChipPowerLimits()
2365 chan->ic_maxpower = maxPower / 2; in ar5212GetChipPowerLimits()
2366 chan->ic_minpower = minPower / 2; in ar5212GetChipPowerLimits()
2370 __func__, chan->ic_freq, chan->ic_flags); in ar5212GetChipPowerLimits()
2371 chan->ic_maxpower = MAX_RATE_POWER; in ar5212GetChipPowerLimits()
2372 chan->ic_minpower = 0; in ar5212GetChipPowerLimits()
2379 powerLimit = AH_MIN(MAX_RATE_POWER, AH_PRIVATE(ah)->ah_powerLimit); in ar5212GetChipPowerLimits()
2381 tpcInDb = tpcScaleReductionTable[AH_PRIVATE(ah)->ah_tpScale]; in ar5212GetChipPowerLimits()
2390 if (maxPower < chan->ic_maxpower) in ar5212GetChipPowerLimits()
2391 chan->ic_maxpower = maxPower; in ar5212GetChipPowerLimits()
2392 if (minPower < chan->ic_minpower) in ar5212GetChipPowerLimits()
2393 chan->ic_minpower = minPower; in ar5212GetChipPowerLimits()
2396 chan->ic_freq, chan->ic_maxpower, chans->ic_minpower); in ar5212GetChipPowerLimits()
2402 * Correct for the gain-delta between ofdm and cck mode target
2409 * [0..7] --> ofdm 6, 9, .. 48, 54
2410 * [8..14] --> cck 1L, 2L, 2S, .. 11L, 11S
2411 * [15] --> XR (all rates get the same power)
2419 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5212CorrectGainDelta()
2420 int16_t ratesIndex[N(ahp->ah_ratesArray)]; in ar5212CorrectGainDelta()
2425 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5212CorrectGainDelta()
2427 gainDeltaAdjust = ee->ee_cckOfdmGainDelta; in ar5212CorrectGainDelta()
2430 OS_MEMCPY(ratesIndex, ahp->ah_ratesArray, sizeof(ratesIndex)); in ar5212CorrectGainDelta()
2434 /* apply a gain_delta correction of -15 for CCK */ in ar5212CorrectGainDelta()
2435 ratesIndex[ii] -= gainDeltaAdjust; in ar5212CorrectGainDelta()
2448 if (ratesIndex[ii] == ahp->ah_ratesArray[jj]) { in ar5212CorrectGainDelta()
2449 if (ahp->ah_ratesArray[jj] == 0) in ar5212CorrectGainDelta()
2458 ratesIndex[ii]--; in ar5212CorrectGainDelta()
2466 ratesIndex[ii] = PWR_TABLE_SIZE -1; in ar5212CorrectGainDelta()
2467 cckIndex = ahp->ah_ratesArray[ii] - twiceOfdmCckDelta; in ar5212CorrectGainDelta()
2477 ahp->ah_pcdacTable[ratesIndex[ii]] = in ar5212CorrectGainDelta()
2478 ahp->ah_pcdacTable[cckIndex]; in ar5212CorrectGainDelta()
2482 ahp->ah_ratesArray[ii] = ratesIndex[ii]; in ar5212CorrectGainDelta()
2544 lRatio = (target - srcLeft) * EEP_SCALE / (srcRight - srcLeft); in interpolate()
2552 rv = (lRatio * targetRight + (EEP_SCALE - lRatio) * in interpolate()
2599 pNewPower->twicePwr6_24 = interpolate(freq, clo, chi, in ar5212GetTargetPowers()
2601 pNewPower->twicePwr36 = interpolate(freq, clo, chi, in ar5212GetTargetPowers()
2603 pNewPower->twicePwr48 = interpolate(freq, clo, chi, in ar5212GetTargetPowers()
2605 pNewPower->twicePwr54 = interpolate(freq, clo, chi, in ar5212GetTargetPowers()
2612 return (u >= v ? u - v : v - u); in udiff()
2632 * Check first and last elements for out-of-bounds conditions. in ar5212GetLowerUpperValues()
2634 if (target < (uint32_t)(lp[0] * EEP_SCALE - EEP_DELTA)) { in ar5212GetLowerUpperValues()
2638 if (target > (uint32_t)(ep[-1] * EEP_SCALE + EEP_DELTA)) { in ar5212GetLowerUpperValues()
2639 *vlo = *vhi = ep[-1]; in ar5212GetLowerUpperValues()
2657 if (target < (uint32_t)(lp[1] * EEP_SCALE - EEP_DELTA)) { in ar5212GetLowerUpperValues()
2667 * Perform analog "swizzling" of parameters into their location
2684 arrayEntry = (firstBit - 1) / 8; in ar5212ModifyRfBuffer()
2685 bitPosition = (firstBit - 1) % 8; in ar5212ModifyRfBuffer()
2690 mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) << in ar5212ModifyRfBuffer()
2695 bitsLeft -= 8 - bitPosition; in ar5212ModifyRfBuffer()
2696 tmp32 = tmp32 >> (8 - bitPosition); in ar5212ModifyRfBuffer()
2704 * Sets the rate to duration values in MAC - used for multi-
2731 for (i = 0; i < rt->rateCount; ++i) in ar5212SetRateDurationTable()
2733 AR_RATE_DURATION(rt->info[i].rateCode), in ar5212SetRateDurationTable()
2736 rt->info[i].controlRate, AH_FALSE, AH_TRUE)); in ar5212SetRateDurationTable()
2740 for (i = 0; i < rt->rateCount; ++i) { in ar5212SetRateDurationTable()
2741 uint32_t reg = AR_RATE_DURATION(rt->info[i].rateCode); in ar5212SetRateDurationTable()
2743 if (rt->info[i].phy != IEEE80211_T_CCK) in ar5212SetRateDurationTable()
2749 rt->info[i].controlRate, AH_FALSE, in ar5212SetRateDurationTable()
2752 if (rt->info[i].shortPreamble) { in ar5212SetRateDurationTable()
2753 reg += rt->info[i].shortPreamble << 2; in ar5212SetRateDurationTable()
2757 rt->info[i].controlRate, in ar5212SetRateDurationTable()