Lines Matching +full:pre +full:- +full:calibration

1 /*-
2 * SPDX-License-Identifier: ISC
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2002-2006 Atheros Communications, Inc.
50 { 1, 0x46, 96 }, /* 2312 -19 */
51 { 1, 0x46, 97 }, /* 2317 -18 */
52 { 1, 0x46, 98 }, /* 2322 -17 */
53 { 1, 0x46, 99 }, /* 2327 -16 */
54 { 1, 0x46, 100 }, /* 2332 -15 */
55 { 1, 0x46, 101 }, /* 2337 -14 */
56 { 1, 0x46, 102 }, /* 2342 -13 */
57 { 1, 0x46, 103 }, /* 2347 -12 */
58 { 1, 0x46, 104 }, /* 2352 -11 */
59 { 1, 0x46, 105 }, /* 2357 -10 */
60 { 1, 0x46, 106 }, /* 2362 -9 */
61 { 1, 0x46, 107 }, /* 2367 -8 */
62 { 1, 0x46, 108 }, /* 2372 -7 */
63 /* index -6 to 0 are pad to make this a nolookup table */
64 { 1, 0x46, 116 }, /* -6 */
65 { 1, 0x46, 116 }, /* -5 */
66 { 1, 0x46, 116 }, /* -4 */
67 { 1, 0x46, 116 }, /* -3 */
68 { 1, 0x46, 116 }, /* -2 */
69 { 1, 0x46, 116 }, /* -1 */
99 /* Power timeouts in usec to wait for chip to wake-up. */
178 __func__, opmode, chan->ic_freq, chan->ic_flags, in ar5211Reset()
200 HALASSERT(AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER3); in ar5211Reset()
223 if (AH_PRIVATE(ah)->ah_macVersion >= AR_SREV_VERSION_OAHU) { in ar5211Reset()
230 chan->ic_state &= ~IEEE80211_CHANSTATE_CWINT; in ar5211Reset()
265 __func__, chan->ic_freq, chan->ic_flags); in ar5211Reset()
277 __func__, chan->ic_freq, chan->ic_flags); in ar5211Reset()
283 if (AH_PRIVATE(ah)->ah_macVersion >= AR_SREV_VERSION_OAHU) { in ar5211Reset()
290 if (AH_PRIVATE(ah)->ah_macVersion >= AR_SREV_VERSION_OAHU) { in ar5211Reset()
292 AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER3_1) { in ar5211Reset()
293 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211Reset()
297 ob2GHz = ee->ee_ob2GHz[0]; in ar5211Reset()
298 db2GHz = ee->ee_db2GHz[0]; in ar5211Reset()
300 ob2GHz = ee->ee_ob2GHz[1]; in ar5211Reset()
301 db2GHz = ee->ee_db2GHz[1]; in ar5211Reset()
337 /* Fix pre-AR5211 register values, this includes AR5311s. */ in ar5211Reset()
338 if (AH_PRIVATE(ah)->ah_macVersion < AR_SREV_VERSION_OAHU) { in ar5211Reset()
368 if (AH_PRIVATE(ah)->ah_macVersion >= AR_SREV_VERSION_OAHU) { in ar5211Reset()
376 OS_REG_WRITE(ah, AR_STA_ID0, LE_READ_4(ahp->ah_macaddr)); in ar5211Reset()
377 OS_REG_WRITE(ah, AR_STA_ID1, LE_READ_2(ahp->ah_macaddr + 4) in ar5211Reset()
390 OS_REG_WRITE(ah, AR_BSS_ID0, LE_READ_4(ahp->ah_bssid)); in ar5211Reset()
391 OS_REG_WRITE(ah, AR_BSS_ID1, LE_READ_2(ahp->ah_bssid + 4)); in ar5211Reset()
394 OS_REG_WRITE(ah, AR_RSSI_THR, ahp->ah_rssiThr); in ar5211Reset()
399 * for pre-Production Oahu only. in ar5211Reset()
403 if (AH_PRIVATE(ah)->ah_macVersion == AR_SREV_VERSION_OAHU && in ar5211Reset()
404 AH_PRIVATE(ah)->ah_macRev < AR_SREV_OAHU_PROD) { in ar5211Reset()
421 (AH_PRIVATE(ah)->ah_11nCompat & HAL_DIAG_11N_SERVICES) != 0) { in ar5211Reset()
425 MS(AH_PRIVATE(ah)->ah_11nCompat, HAL_DIAG_11N_SERVICES)&1); in ar5211Reset()
438 if (AH_PRIVATE(ah)->ah_devid == AR5211_FPGA11B && in ar5211Reset()
455 * There is an issue if the AP starts the calibration before in ar5211Reset()
470 chan->ic_state |= IEEE80211_CHANSTATE_CWINT; in ar5211Reset()
472 "%s: noise floor calibration failed\n", __func__); in ar5211Reset()
476 /* Start IQ calibration w/ 2^(INIT_IQCAL_LOG_COUNT_MAX+1) samples */ in ar5211Reset()
477 if (ahp->ah_calibrationTime != 0) { in ar5211Reset()
480 ahp->ah_bIQCalibration = AH_TRUE; in ar5211Reset()
505 ahp->ah_maskReg = INIT_INTERRUPT_MASK; in ar5211Reset()
514 ahp->ah_maskReg |= AR_IMR_MIB; in ar5211Reset()
517 if (AH_PRIVATE(ah)->ah_rfkillEnabled) in ar5211Reset()
529 /* Restore user-specified slot time and timeouts */ in ar5211Reset()
530 if (ahp->ah_sifstime != (u_int) -1) in ar5211Reset()
531 ar5211SetSifsTime(ah, ahp->ah_sifstime); in ar5211Reset()
532 if (ahp->ah_slottime != (u_int) -1) in ar5211Reset()
533 ar5211SetSlotTime(ah, ahp->ah_slottime); in ar5211Reset()
534 if (ahp->ah_acktimeout != (u_int) -1) in ar5211Reset()
535 ar5211SetAckTimeout(ah, ahp->ah_acktimeout); in ar5211Reset()
536 if (ahp->ah_ctstimeout != (u_int) -1) in ar5211Reset()
537 ar5211SetCTSTimeout(ah, ahp->ah_ctstimeout); in ar5211Reset()
538 if (AH_PRIVATE(ah)->ah_diagreg != 0) in ar5211Reset()
539 OS_REG_WRITE(ah, AR_DIAG_SW, AH_PRIVATE(ah)->ah_diagreg); in ar5211Reset()
541 AH_PRIVATE(ah)->ah_opmode = opmode; /* record operating mode */ in ar5211Reset()
558 * re-enable the hardware.
575 * Reset the HW - PCI must be reset after the rest of the in ar5211Disable()
610 } else if (AH_PRIVATE(ah)->ah_devid == AR5211_DEVID) { in ar5211ChipReset()
621 * Reset the HW - PCI must be reset after the rest of the in ar5211ChipReset()
656 __func__, chan->ic_freq, chan->ic_flags); in ar5211PerCalibrationN()
659 /* IQ calibration in progress. Check to see if it has finished. */ in ar5211PerCalibrationN()
660 if (ahp->ah_bIQCalibration && in ar5211PerCalibrationN()
662 /* IQ Calibration has finished. */ in ar5211PerCalibrationN()
663 ahp->ah_bIQCalibration = AH_FALSE; in ar5211PerCalibrationN()
665 /* Read calibration results. */ in ar5211PerCalibrationN()
671 * Prescale these values to remove 64-bit operation requirement at the loss in ar5211PerCalibrationN()
677 /* Protect against divide-by-0. */ in ar5211PerCalibrationN()
679 iCoff = (-iqCorrMeas) / iCoffDenom; in ar5211PerCalibrationN()
683 qCoff = ((int32_t)powerMeasI / qCoffDenom) - 64; in ar5211PerCalibrationN()
706 *isCalDone = !ahp->ah_bIQCalibration; in ar5211PerCalibrationN()
712 chan->ic_state |= IEEE80211_CHANSTATE_CWINT; in ar5211PerCalibrationN()
724 chan->ic_state |= IEEE80211_CHANSTATE_CWINT; in ar5211PerCalibrationN()
768 * Set CFG, little-endian for descriptor accesses. in ar5211SetResetReg()
790 chanIEEE = chan->ic_ieee; in ar5211SetChannel()
795 data2111 = ((ath_hal_reverseBits(ci->channelSelect, 8) & 0xff) in ar5211SetChannel()
797 | (ci->refClkSel << 4); in ar5211SetChannel()
798 chan5111 = ci->channel5111; in ar5211SetChannel()
806 reg32 = ath_hal_reverseBits(chan5111 - 24, 8) & 0xFF; in ar5211SetChannel()
809 reg32 = ath_hal_reverseBits(((chan5111 - 24) / 2), 8) & 0xFF; in ar5211SetChannel()
818 AH_PRIVATE(ah)->ah_curchan = chan; in ar5211SetChannel()
829 nf = 0 - ((nf ^ 0x1ff) + 1); in ar5211GetNoiseFloor()
834 * Peform the noisefloor calibration for the length of time set
866 * As a guesstimate - we may only get 1/60th the time on in ar5211RunNoiseFloor()
878 runTime, AH_PRIVATE(ah)->ah_curchan->ic_freq); in ar5211RunNoiseFloor()
895 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in getNoiseFloorThresh()
897 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in getNoiseFloorThresh()
899 *nft = ee->ee_noiseFloorThresh[0]; in getNoiseFloorThresh()
902 *nft = ee->ee_noiseFloorThresh[1]; in getNoiseFloorThresh()
905 *nft = ee->ee_noiseFloorThresh[2]; in getNoiseFloorThresh()
909 __func__, chan->ic_flags); in getNoiseFloorThresh()
930 "%s: NF did not complete in calibration window\n", __func__); in ar5211IsNfGood()
942 chan->ic_state |= IEEE80211_CHANSTATE_CWINT; in ar5211IsNfGood()
944 ichan->rawNoiseFloor = nf; in ar5211IsNfGood()
949 * Peform the noisefloor calibration and check for any constant channel
952 * NOTE: preAR5211 have a lengthy carrier wave detection process - hence
955 * Returns: TRUE for a successful noise floor calibration; else FALSE
962 if (AH_PRIVATE(ah)->ah_macVersion < AR_SREV_VERSION_OAHU && in ar5211CalNoiseFloor()
963 (chan->ic_flags & CHANNEL_NFCREQUIRED)) { in ar5211CalNoiseFloor()
982 ichan->rawNoiseFloor = 0; in ar5211CalNoiseFloor()
984 ichan->rawNoiseFloor = nf; in ar5211CalNoiseFloor()
1007 { 5790, 11 }, /* NB: ordered high -> low */ in ar5211GetNfAdjust()
1020 for (i = 0; c->channel <= adjust5111[i].freqLow; i++) in ar5211GetNfAdjust()
1037 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetRf6and7()
1051 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5211SetRf6and7()
1054 tempOB = ee->ee_ob1; in ar5211SetRf6and7()
1055 tempDB = ee->ee_db1; in ar5211SetRf6and7()
1057 tempOB = ee->ee_ob2; in ar5211SetRf6and7()
1058 tempDB = ee->ee_db2; in ar5211SetRf6and7()
1060 tempOB = ee->ee_ob3; in ar5211SetRf6and7()
1061 tempDB = ee->ee_db3; in ar5211SetRf6and7()
1063 tempOB = ee->ee_ob4; in ar5211SetRf6and7()
1064 tempDB = ee->ee_db4; in ar5211SetRf6and7()
1070 rfXpdGain = ee->ee_xgain[0]; in ar5211SetRf6and7()
1071 rfPloSel = ee->ee_xpd[0]; in ar5211SetRf6and7()
1072 rfPwdXpd = !ee->ee_xpd[0]; in ar5211SetRf6and7()
1076 (ee->ee_cornerCal.pd84<< 28); in ar5211SetRf6and7()
1079 (ee->ee_cornerCal.pd90 << 26); in ar5211SetRf6and7()
1082 (ee->ee_cornerCal.gSel << 3); in ar5211SetRf6and7()
1085 tempOB = ee->ee_obFor24; in ar5211SetRf6and7()
1086 tempDB = ee->ee_dbFor24; in ar5211SetRf6and7()
1087 rfXpdGain = ee->ee_xgain[1]; in ar5211SetRf6and7()
1088 rfPloSel = ee->ee_xpd[1]; in ar5211SetRf6and7()
1089 rfPwdXpd = !ee->ee_xpd[1]; in ar5211SetRf6and7()
1092 tempOB = ee->ee_obFor24g; in ar5211SetRf6and7()
1093 tempDB = ee->ee_dbFor24g; in ar5211SetRf6and7()
1094 rfXpdGain = ee->ee_xgain[2]; in ar5211SetRf6and7()
1095 rfPloSel = ee->ee_xpd[2]; in ar5211SetRf6and7()
1096 rfPwdXpd = !ee->ee_xpd[2]; in ar5211SetRf6and7()
1100 __func__, chan->ic_flags); in ar5211SetRf6and7()
1132 ahp->ah_rfgainState = RFGAIN_INACTIVE; in ar5211SetRf6and7()
1144 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetAntennaSwitchInternal()
1149 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5211SetAntennaSwitchInternal()
1155 __func__, chan->ic_flags); in ar5211SetAntennaSwitchInternal()
1159 antSwitchA = ee->ee_antennaControl[1][ix] in ar5211SetAntennaSwitchInternal()
1160 | (ee->ee_antennaControl[2][ix] << 6) in ar5211SetAntennaSwitchInternal()
1161 | (ee->ee_antennaControl[3][ix] << 12) in ar5211SetAntennaSwitchInternal()
1162 | (ee->ee_antennaControl[4][ix] << 18) in ar5211SetAntennaSwitchInternal()
1163 | (ee->ee_antennaControl[5][ix] << 24) in ar5211SetAntennaSwitchInternal()
1165 antSwitchB = ee->ee_antennaControl[6][ix] in ar5211SetAntennaSwitchInternal()
1166 | (ee->ee_antennaControl[7][ix] << 6) in ar5211SetAntennaSwitchInternal()
1167 | (ee->ee_antennaControl[8][ix] << 12) in ar5211SetAntennaSwitchInternal()
1168 | (ee->ee_antennaControl[9][ix] << 18) in ar5211SetAntennaSwitchInternal()
1169 | (ee->ee_antennaControl[10][ix] << 24) in ar5211SetAntennaSwitchInternal()
1188 ahp->ah_diversityControl = settings; in ar5211SetAntennaSwitchInternal()
1205 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetBoardValues()
1209 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5211SetBoardValues()
1213 AR_PHY_FRAME_CTL_TX_CLIP, ee->ee_cornerCal.clip); in ar5211SetBoardValues()
1223 __func__, chan->ic_flags); in ar5211SetBoardValues()
1228 if (AH_PRIVATE(ah)->ah_macVersion < AR_SREV_VERSION_OAHU) { in ar5211SetBoardValues()
1234 (ee->ee_antennaControl[0][arrayMode] << 4) | 0x1); in ar5211SetBoardValues()
1237 ahp->ah_diversityControl, chan); in ar5211SetBoardValues()
1241 (ee->ee_noiseFloorThresh[arrayMode] & 0x1FF) | (1<<9)); in ar5211SetBoardValues()
1245 ((ee->ee_switchSettling[arrayMode] << 7) & 0x3F80)); in ar5211SetBoardValues()
1248 ((ee->ee_txrxAtten[arrayMode] << 12) & 0x3F000)); in ar5211SetBoardValues()
1251 ((ee->ee_pgaDesiredSize[arrayMode] << 8) & 0xFF00) | in ar5211SetBoardValues()
1252 (ee->ee_adcDesiredSize[arrayMode] & 0x00FF)); in ar5211SetBoardValues()
1254 (ee->ee_txEndToXPAOff[arrayMode] << 24) | in ar5211SetBoardValues()
1255 (ee->ee_txEndToXPAOff[arrayMode] << 16) | in ar5211SetBoardValues()
1256 (ee->ee_txFrameToXPAOn[arrayMode] << 8) | in ar5211SetBoardValues()
1257 ee->ee_txFrameToXPAOn[arrayMode]); in ar5211SetBoardValues()
1260 (ee->ee_txEndToXLNAOn[arrayMode] << 8)); in ar5211SetBoardValues()
1263 ((ee->ee_thresh62[arrayMode] << 12) & 0x7F000)); in ar5211SetBoardValues()
1268 * False detect backoff - suspected 32 MHz spur causes in ar5211SetBoardValues()
1273 if (AH_PRIVATE(ah)->ah_eeversion < AR_EEPROM_VER3_3) { in ar5211SetBoardValues()
1274 if (AH_PRIVATE(ah)->ah_subvendorid == 0x1022 && in ar5211SetBoardValues()
1282 falseDectectBackoff += ee->ee_falseDetectBackoff[arrayMode]; in ar5211SetBoardValues()
1303 AH_PRIVATE(ah)->ah_powerLimit = AH_MIN(limit, MAX_RATE_POWER); in ar5211SetTxPowerLimit()
1316 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetTransmitPower()
1324 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5211SetTransmitPower()
1326 eepromPcdacs.numChannels = ee->ee_numChannels11a; in ar5211SetTransmitPower()
1327 eepromPcdacs.pChannelList= ee->ee_channels11a; in ar5211SetTransmitPower()
1328 eepromPcdacs.pDataPerChannel = ee->ee_dataPerChannel11a; in ar5211SetTransmitPower()
1329 nchan = ee->ee_numTargetPwr_11a; in ar5211SetTransmitPower()
1330 pi = ee->ee_trgtPwr_11a; in ar5211SetTransmitPower()
1333 eepromPcdacs.numChannels = ee->ee_numChannels2_4; in ar5211SetTransmitPower()
1334 eepromPcdacs.pChannelList= ee->ee_channels11g; in ar5211SetTransmitPower()
1335 eepromPcdacs.pDataPerChannel = ee->ee_dataPerChannel11g; in ar5211SetTransmitPower()
1336 nchan = ee->ee_numTargetPwr_11g; in ar5211SetTransmitPower()
1337 pi = ee->ee_trgtPwr_11g; in ar5211SetTransmitPower()
1340 eepromPcdacs.numChannels = ee->ee_numChannels2_4; in ar5211SetTransmitPower()
1341 eepromPcdacs.pChannelList= ee->ee_channels11b; in ar5211SetTransmitPower()
1342 eepromPcdacs.pDataPerChannel = ee->ee_dataPerChannel11b; in ar5211SetTransmitPower()
1343 nchan = ee->ee_numTargetPwr_11b; in ar5211SetTransmitPower()
1344 pi = ee->ee_trgtPwr_11b; in ar5211SetTransmitPower()
1348 __func__, chan->ic_flags); in ar5211SetTransmitPower()
1357 for (i = 0; i < ee->ee_numCtls; i++) in ar5211SetTransmitPower()
1358 if (ee->ee_ctl[i] != 0 && ee->ee_ctl[i] == cfgCtl) { in ar5211SetTransmitPower()
1359 rep = &ee->ee_rdEdgesPower[i * NUM_EDGES]; in ar5211SetTransmitPower()
1412 maxScaledPwr = pScaledUpDbm[pcdacStruct.numPcdacValues - 1]; in ar5211SetPowerTable()
1423 * working from the top, hence i = 63 - j. in ar5211SetPowerTable()
1425 i = (uint16_t)(pcdacStruct.numPcdacValues - 1 - j); in ar5211SetPowerTable()
1428 if (pScaledUpDbm[i-1] > pScaledUpDbm[i]) { in ar5211SetPowerTable()
1434 pScaledUpDbm[i - 1] = pScaledUpDbm[i]; in ar5211SetPowerTable()
1445 pwr = (uint16_t)(PWR_STEP * ((minScaledPwr - PWR_MIN + PWR_STEP / 2) / PWR_STEP) + PWR_MIN); in ar5211SetPowerTable()
1449 for (i = 0; i < (2 * (pwr - PWR_MIN) / EEP_SCALE + 1); i++) in ar5211SetPowerTable()
1453 while (pwr < pScaledUpDbm[pcdacStruct.numPcdacValues - 1]) { in ar5211SetPowerTable()
1456 while (pwr < pScaledUpDbm[pcdacStruct.numPcdacValues - 1] && in ar5211SetPowerTable()
1457 (pwr - pScaledUpDbm[i])*(pwr - pScaledUpDbm[i+1]) > 0) in ar5211SetPowerTable()
1473 pcdacTable[pcdacTableIndex] = pcdacTable[pcdacTableIndex - 1]; in ar5211SetPowerTable()
1498 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetRateTable()
1512 int16_t scaledPower = 0; /* for gcc -O2 */ in ar5211SetRateTable()
1518 twiceMaxRDPower = chan->ic_maxregpower * 2; in ar5211SetRateTable()
1521 twiceAntennaGain = ee->ee_antennaGainMax[0]; in ar5211SetRateTable()
1523 twiceAntennaGain = ee->ee_antennaGainMax[1]; in ar5211SetRateTable()
1621 * power only for non-AP operation. in ar5211SetRateTable()
1624 AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER3_1 in ar5211SetRateTable()
1626 && AH_PRIVATE(ah)->ah_opmode != HAL_M_HOSTAP in ar5211SetRateTable()
1629 twicePower = AH_MIN(twicePower, ee->ee_turbo2WMaxPower5); in ar5211SetRateTable()
1633 pRatesPower[i] = AH_MIN(twicePower, twiceMaxRDPower - twiceAntennaReduction); in ar5211SetRateTable()
1638 scaledPower = pRatesPower[0] - in ar5211SetRateTable()
1639 (tpcScaleReductionTable[AH_PRIVATE(ah)->ah_tpScale] * 2); in ar5211SetRateTable()
1648 ahp->ah_tx6PowerInHalfDbm = pRatesPower[0]; in ar5211SetRateTable()
1653 __func__, chan->ic_freq); in ar5211SetRateTable()
1657 HALDEBUG(ah, HAL_DEBUG_RESET, "TPC Scale %d dBm - Ant Red %d dBm\n", in ar5211SetRateTable()
1658 tpcScaleReductionTable[AH_PRIVATE(ah)->ah_tpScale] * 2, in ar5211SetRateTable()
1661 AH_PRIVATE(ah)->ah_eeversion >= AR_EEPROM_VER3_1) in ar5211SetRateTable()
1663 ee->ee_turbo2WMaxPower5); in ar5211SetRateTable()
1686 AH_PRIVATE(ah)->ah_maxPowerLevel = pRatesPower[0]; in ar5211SetRateTable()
1707 ar5211GetLowerUpperValues(channel, pSrcStruct->pChannelList, in ar5211GetScaledPower()
1708 pSrcStruct->numChannels, &lFreq, &rFreq); in ar5211GetScaledPower()
1740 pChannelData = pSrcStruct->pDataPerChannel; in ar5211FindValueInList()
1741 for (i = 0; i < pSrcStruct->numChannels; i++ ) { in ar5211FindValueInList()
1742 if (pChannelData->channelValue == channel) { in ar5211FindValueInList()
1743 pPcdac = pChannelData->PcdacValues; in ar5211FindValueInList()
1744 for (j = 0; j < pChannelData->numPcdacValues; j++ ) { in ar5211FindValueInList()
1746 *powerValue = pChannelData->PwrValues[j]; in ar5211FindValueInList()
1781 lRatio = (target - srcLeft) * EEP_SCALE / (srcRight - srcLeft); in ar5211GetInterpolatedValue()
1789 rv = (lRatio * targetRight + (EEP_SCALE - lRatio) * in ar5211GetInterpolatedValue()
1805 * INPUT value -value to search for
1806 * INPUT pList -ptr to the list to search
1807 * INPUT listSize -number of entries in list
1808 * OUTPUT pLowerValue -return the lower value
1809 * OUTPUT pUpperValue -return the upper value
1816 const uint16_t listEndValue = *(pList + listSize - 1); in ar5211GetLowerUpperValues()
1824 if (target < (uint32_t)(*pList * EEP_SCALE - EEP_DELTA)) { in ar5211GetLowerUpperValues()
1846 if (abs(pList[i] * EEP_SCALE - (int32_t) target) < EEP_DELTA) { in ar5211GetLowerUpperValues()
1856 if (target < (uint32_t)(pList[i + 1] * EEP_SCALE - EEP_DELTA)) { in ar5211GetLowerUpperValues()
1877 pChannelData = pSrcStruct->pDataPerChannel; in ar5211GetLowerUpperPcdacs()
1878 for (i = 0; i < pSrcStruct->numChannels; i++) { in ar5211GetLowerUpperPcdacs()
1879 if (pChannelData->channelValue == channel) in ar5211GetLowerUpperPcdacs()
1883 ar5211GetLowerUpperValues(pcdac, pChannelData->PcdacValues, in ar5211GetLowerUpperPcdacs()
1884 pChannelData->numPcdacValues, pLowerPcdac, pUpperPcdac); in ar5211GetLowerUpperPcdacs()
1898 { {4, 0, 1, 0}, -2, "FG3"}, /* halfJack */
1899 { {3, 1, 1, 0}, -3, "FG2"}, /* clip3 */
1900 { {4, 0, 0, 0}, -4, "FG1"}, /* noJack */
1901 { {2, 1, 1, 0}, -6, "FG0"} /* clip2 */
1912 GAIN_VALUES *gv = &ahp->ah_gainValues; in ar5211InitializeGainValues()
1915 gv->currStepNum = gainLadder.defaultStepNum; in ar5211InitializeGainValues()
1916 gv->currStep = &gainLadder.optStep[gainLadder.defaultStepNum]; in ar5211InitializeGainValues()
1917 gv->active = AH_TRUE; in ar5211InitializeGainValues()
1918 gv->loTrig = 20; in ar5211InitializeGainValues()
1919 gv->hiTrig = 35; in ar5211InitializeGainValues()
1925 const struct ieee80211_channel *chan = AH_PRIVATE(ah)->ah_curchan; in ar5211InvalidGainReadback()
1936 gv->loTrig = L1; in ar5211InvalidGainReadback()
1937 gv->hiTrig = L4+5; in ar5211InvalidGainReadback()
1945 gv->loTrig = L1 + DYN_ADJ_LO_MARGIN; in ar5211InvalidGainReadback()
1946 gv->hiTrig = L4 - DYN_ADJ_UP_MARGIN; in ar5211InvalidGainReadback()
1948 g = gv->currGain; in ar5211InvalidGainReadback()
1963 SM(ahp->ah_tx6PowerInHalfDbm, AR_PHY_PAPD_PROBE_POWERTX) in ar5211RequestRfgain()
1966 ahp->ah_rfgainState = HAL_RFGAIN_READ_REQUESTED; in ar5211RequestRfgain()
1971 * the current state of the thermal calibration gain engine.
1977 GAIN_VALUES *gv = &ahp->ah_gainValues; in ar5211GetRfgain()
1980 if (!gv->active) in ar5211GetRfgain()
1983 if (ahp->ah_rfgainState == HAL_RFGAIN_READ_REQUESTED) { in ar5211GetRfgain()
1989 gv->currGain = rddata >> AR_PHY_PAPD_PROBE_GAINF_S; in ar5211GetRfgain()
1991 ahp->ah_rfgainState = HAL_RFGAIN_INACTIVE; in ar5211GetRfgain()
2001 ahp->ah_rfgainState = HAL_RFGAIN_NEED_CHANGE; in ar5211GetRfgain()
2005 return ahp->ah_rfgainState; in ar5211GetRfgain()
2015 return (gv->currGain <= gv->loTrig || gv->currGain >= gv->hiTrig); in ar5211IsGainAdjustNeeded()
2025 if (!gv->active) in ar5211AdjustGain()
2026 return -1; in ar5211AdjustGain()
2028 gv->currStep = &gainLadder.optStep[gv->currStepNum]; in ar5211AdjustGain()
2029 if (gv->currGain >= gv->hiTrig) { in ar5211AdjustGain()
2030 if (gv->currStepNum == 0) { in ar5211AdjustGain()
2033 return -1; in ar5211AdjustGain()
2036 "%s: Adding gain: currG=%d [%s] --> ", in ar5211AdjustGain()
2037 __func__, gv->currGain, gv->currStep->stepName); in ar5211AdjustGain()
2038 gv->targetGain = gv->currGain; in ar5211AdjustGain()
2039 while (gv->targetGain >= gv->hiTrig && gv->currStepNum > 0) { in ar5211AdjustGain()
2040 gv->targetGain -= 2 * (gainLadder.optStep[--(gv->currStepNum)].stepGain - in ar5211AdjustGain()
2041 gv->currStep->stepGain); in ar5211AdjustGain()
2042 gv->currStep = &gainLadder.optStep[gv->currStepNum]; in ar5211AdjustGain()
2045 gv->targetGain, gv->currStep->stepName); in ar5211AdjustGain()
2048 if (gv->currGain <= gv->loTrig) { in ar5211AdjustGain()
2049 if (gv->currStepNum == gainLadder.numStepsInLadder-1) { in ar5211AdjustGain()
2052 return -2; in ar5211AdjustGain()
2055 "%s: Deducting gain: currG=%d [%s] --> ", in ar5211AdjustGain()
2056 __func__, gv->currGain, gv->currStep->stepName); in ar5211AdjustGain()
2057 gv->targetGain = gv->currGain; in ar5211AdjustGain()
2058 while (gv->targetGain <= gv->loTrig && in ar5211AdjustGain()
2059 gv->currStepNum < (gainLadder.numStepsInLadder - 1)) { in ar5211AdjustGain()
2060 gv->targetGain -= 2 * in ar5211AdjustGain()
2061 (gainLadder.optStep[++(gv->currStepNum)].stepGain - gv->currStep->stepGain); in ar5211AdjustGain()
2062 gv->currStep = &gainLadder.optStep[gv->currStepNum]; in ar5211AdjustGain()
2065 gv->targetGain, gv->currStep->stepName); in ar5211AdjustGain()
2072 * Adjust the 5GHz EEPROM information with the desired calibration values.
2077 HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5211SetRfgain()
2079 if (!gv->active) in ar5211SetRfgain()
2081 ee->ee_cornerCal.clip = gv->currStep->paramVal[0]; /* bb_tx_clip */ in ar5211SetRfgain()
2082 ee->ee_cornerCal.pd90 = gv->currStep->paramVal[1]; /* rf_pwd_90 */ in ar5211SetRfgain()
2083 ee->ee_cornerCal.pd84 = gv->currStep->paramVal[2]; /* rf_pwd_84 */ in ar5211SetRfgain()
2084 ee->ee_cornerCal.gSel = gv->currStep->paramVal[3]; /* rf_rfgainsel */ in ar5211SetRfgain()
2099 | ahp->ah_staId1Defaults); in ar5211SetOperatingMode()
2105 | ahp->ah_staId1Defaults); in ar5211SetOperatingMode()
2111 | ahp->ah_staId1Defaults); in ar5211SetOperatingMode()
2119 ar5211SetOperatingMode(ah, AH_PRIVATE(ah)->ah_opmode); in ar5211SetPCUConfig()