Lines Matching +full:half +full:- +full:dbm

1 /*-
2 * SPDX-License-Identifier: ISC
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2002-2008 Atheros Communications, Inc.
58 #define AR5413(ah) ((struct ar5413State *) AH5212(ah)->ah_rfHal)
91 if (((freq - 2192) % 5) == 0) { in ar5413SetChannel()
92 channelSel = ((freq - 672) * 2 - 3040)/10; in ar5413SetChannel()
94 } else if (((freq - 2224) % 5) == 0) { in ar5413SetChannel()
95 channelSel = ((freq - 704) * 2 - 3040) / 10; in ar5413SetChannel()
117 freq = freq - 2; /* Align to even 5MHz raster */ in ar5413SetChannel()
119 (uint32_t)(((freq - 4800)*10)/25 + 1), 8); in ar5413SetChannel()
123 ((freq - 4800) / 20 << 2), 8); in ar5413SetChannel()
127 ((freq - 4800) / 10 << 1), 8); in ar5413SetChannel()
131 (freq - 4800) / 5, 8); in ar5413SetChannel()
146 AH_PRIVATE(ah)->ah_curchan = chan; in ar5413SetChannel()
164 (_priv)->Bank##_ix##Data[i] = ar5212Bank##_ix##_5413[i][_col];\ in ar5413SetRfRegs()
168 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5413SetRfRegs()
175 __func__, chan->ic_freq, chan->ic_flags, modesIndex); in ar5413SetRfRegs()
180 switch (chan->ic_flags & IEEE80211_CHAN_ALLFULL) { in ar5413SetRfRegs()
183 ob5GHz = ee->ee_ob1; in ar5413SetRfRegs()
184 db5GHz = ee->ee_db1; in ar5413SetRfRegs()
186 ob5GHz = ee->ee_ob2; in ar5413SetRfRegs()
187 db5GHz = ee->ee_db2; in ar5413SetRfRegs()
189 ob5GHz = ee->ee_ob3; in ar5413SetRfRegs()
190 db5GHz = ee->ee_db3; in ar5413SetRfRegs()
192 ob5GHz = ee->ee_ob4; in ar5413SetRfRegs()
193 db5GHz = ee->ee_db4; in ar5413SetRfRegs()
199 ob2GHz = ee->ee_obFor24; in ar5413SetRfRegs()
200 db2GHz = ee->ee_dbFor24; in ar5413SetRfRegs()
204 ob2GHz = ee->ee_obFor24g; in ar5413SetRfRegs()
205 db2GHz = ee->ee_dbFor24g; in ar5413SetRfRegs()
209 __func__, chan->ic_flags); in ar5413SetRfRegs()
227 ar5212ModifyRfBuffer(priv->Bank6Data, ob2GHz, 3, 241, 0); in ar5413SetRfRegs()
228 ar5212ModifyRfBuffer(priv->Bank6Data, db2GHz, 3, 238, 0); in ar5413SetRfRegs()
230 /* TODO - only for Eagle 1.0 2GHz - remove for production */ in ar5413SetRfRegs()
232 ar5212ModifyRfBuffer(priv->Bank6Data, 1 , 1, 291, 2); in ar5413SetRfRegs()
235 if (AH_PRIVATE(ah)->ah_ispcie) { in ar5413SetRfRegs()
236 ar5212ModifyRfBuffer(priv->Bank6Data, ath_hal_reverseBits(6, 3), in ar5413SetRfRegs()
240 ar5212ModifyRfBuffer(priv->Bank6Data, ob5GHz, 3, 247, 0); in ar5413SetRfRegs()
241 ar5212ModifyRfBuffer(priv->Bank6Data, db5GHz, 3, 244, 0); in ar5413SetRfRegs()
248 HAL_INI_WRITE_BANK(ah, ar5212Bank1_5413, priv->Bank1Data, regWrites); in ar5413SetRfRegs()
249 HAL_INI_WRITE_BANK(ah, ar5212Bank2_5413, priv->Bank2Data, regWrites); in ar5413SetRfRegs()
250 HAL_INI_WRITE_BANK(ah, ar5212Bank3_5413, priv->Bank3Data, regWrites); in ar5413SetRfRegs()
251 HAL_INI_WRITE_BANK(ah, ar5212Bank6_5413, priv->Bank6Data, regWrites); in ar5413SetRfRegs()
252 HAL_INI_WRITE_BANK(ah, ar5212Bank7_5413, priv->Bank7Data, regWrites); in ar5413SetRfRegs()
255 ahp->ah_rfgainState = HAL_RFGAIN_INACTIVE; in ar5413SetRfRegs()
271 case 1: return priv->Bank1Data; in ar5413GetRfBank()
272 case 2: return priv->Bank2Data; in ar5413GetRfBank()
273 case 3: return priv->Bank3Data; in ar5413GetRfBank()
274 case 6: return priv->Bank6Data; in ar5413GetRfBank()
275 case 7: return priv->Bank7Data; in ar5413GetRfBank()
296 * Check first and last elements for out-of-bounds conditions. in GetLowerUpperIndex()
302 if (target >= ep[-1]) { in GetLowerUpperIndex()
303 *vlo = *vhi = listSize - 1; in GetLowerUpperIndex()
314 *vlo = *vhi = tp - (const uint16_t *) lp; in GetLowerUpperIndex()
322 *vlo = tp - (const uint16_t *) lp; in GetLowerUpperIndex()
330 * Fill the Vpdlist for indices Pmax-Pmin
349 while (ii <= (uint16_t)(Pmax - Pmin)) { in ar5413FillVpdTable()
354 if (idxL == (uint32_t)(numIntercepts - 1)) in ar5413FillVpdTable()
355 idxL = numIntercepts - 2; /* extrapolate above */ in ar5413FillVpdTable()
360 (((currPwr - pwrList[idxL])*VpdList[idxR]+ in ar5413FillVpdTable()
361 (pwrList[idxR] - currPwr)*VpdList[idxL])/ in ar5413FillVpdTable()
362 (pwrList[idxR] - pwrList[idxL])); in ar5413FillVpdTable()
365 currPwr += 2; /* half dB steps */ in ar5413FillVpdTable()
381 rv = ((target - srcLeft)*targetRight + in interpolate_signed()
382 (srcRight - target)*targetLeft) / (srcRight - srcLeft); in interpolate_signed()
401 #define VpdTable_L priv->vpdTable_L in ar5413getGainBoundariesAndPdadcsForPowers()
402 #define VpdTable_R priv->vpdTable_R in ar5413getGainBoundariesAndPdadcsForPowers()
403 #define VpdTable_I priv->vpdTable_I in ar5413getGainBoundariesAndPdadcsForPowers()
405 int32_t ss;/* potentially -ve index for taking care of pdGainOverlap */ in ar5413getGainBoundariesAndPdadcsForPowers()
409 * If desired to support -ve power levels in future, just in ar5413getGainBoundariesAndPdadcsForPowers()
410 * change pwr_I_0 to signed 5-bits. in ar5413getGainBoundariesAndPdadcsForPowers()
413 /* to accommodate -ve power levels later on. */ in ar5413getGainBoundariesAndPdadcsForPowers()
415 /* to accommodate -ve power levels later on */ in ar5413getGainBoundariesAndPdadcsForPowers()
422 GetLowerUpperIndex(channel, pRawDataset->pChannels, in ar5413getGainBoundariesAndPdadcsForPowers()
423 pRawDataset->numChannels, &(idxL), &(idxR)); in ar5413getGainBoundariesAndPdadcsForPowers()
426 jj = MAX_NUM_PDGAINS_PER_CHANNEL - ii - 1; in ar5413getGainBoundariesAndPdadcsForPowers()
428 numVpd = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].numVpd; in ar5413getGainBoundariesAndPdadcsForPowers()
430 pPdGainValues[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pd_gain; in ar5413getGainBoundariesAndPdadcsForPowers()
431 Pmin_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[0]; in ar5413getGainBoundariesAndPdadcsForPowers()
432 if (Pmin_t2[numPdGainsUsed] >pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0]) { in ar5413getGainBoundariesAndPdadcsForPowers()
433 Pmin_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0]; in ar5413getGainBoundariesAndPdadcsForPowers()
437 Pmax_t2[numPdGainsUsed] = pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[numVpd-1]; in ar5413getGainBoundariesAndPdadcsForPowers()
438 …if (Pmax_t2[numPdGainsUsed] > pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[numVpd- in ar5413getGainBoundariesAndPdadcsForPowers()
440 pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[numVpd-1]; in ar5413getGainBoundariesAndPdadcsForPowers()
444 &(pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].pwr_t4[0]), in ar5413getGainBoundariesAndPdadcsForPowers()
445 &(pRawDataset->pDataPerChannel[idxL].pDataPerPDGain[jj].Vpd[0]), numVpd, VpdTable_L in ar5413getGainBoundariesAndPdadcsForPowers()
449 &(pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].pwr_t4[0]), in ar5413getGainBoundariesAndPdadcsForPowers()
450 &(pRawDataset->pDataPerChannel[idxR].pDataPerPDGain[jj].Vpd[0]), numVpd, VpdTable_R in ar5413getGainBoundariesAndPdadcsForPowers()
452 for (kk = 0; kk < (uint16_t)(Pmax_t2[numPdGainsUsed] - Pmin_t2[numPdGainsUsed]); kk++) { in ar5413getGainBoundariesAndPdadcsForPowers()
455 channel, pRawDataset->pChannels[idxL], pRawDataset->pChannels[idxR], in ar5413getGainBoundariesAndPdadcsForPowers()
467 if (ii == (numPdGainsUsed - 1)) in ar5413getGainBoundariesAndPdadcsForPowers()
484 ss = (pPdGainBoundaries[ii-1] - Pmin_t2[ii]) - in ar5413getGainBoundariesAndPdadcsForPowers()
486 Vpd_step = (uint16_t)(VpdTable_I[ii][1] - VpdTable_I[ii][0]); in ar5413getGainBoundariesAndPdadcsForPowers()
489 *-ve ss indicates need to extrapolate data below for this pdGain in ar5413getGainBoundariesAndPdadcsForPowers()
497 sizeCurrVpdTable = Pmax_t2[ii] - Pmin_t2[ii]; in ar5413getGainBoundariesAndPdadcsForPowers()
498 tgtIndex = pPdGainBoundaries[ii] + pdGainOverlap_t2 - Pmin_t2[ii]; in ar5413getGainBoundariesAndPdadcsForPowers()
504 Vpd_step = (uint16_t)(VpdTable_I[ii][sizeCurrVpdTable-1] - in ar5413getGainBoundariesAndPdadcsForPowers()
505 VpdTable_I[ii][sizeCurrVpdTable-2]); in ar5413getGainBoundariesAndPdadcsForPowers()
514 (VpdTable_I[ii][sizeCurrVpdTable-1] + in ar5413getGainBoundariesAndPdadcsForPowers()
515 (ss-maxIndex)*Vpd_step); in ar5413getGainBoundariesAndPdadcsForPowers()
524 pPdGainBoundaries[ii] = pPdGainBoundaries[ii-1]; in ar5413getGainBoundariesAndPdadcsForPowers()
528 pPDADCValues[kk] = pPDADCValues[kk-1]; in ar5413getGainBoundariesAndPdadcsForPowers()
546 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5413SetPowerTable()
550 uint16_t *pdadcValues = ahp->ah_pcdacTable; in ar5413SetPowerTable()
559 __func__, chan->ic_freq, chan->ic_flags); in ar5413SetPowerTable()
562 pRawDataset = &ee->ee_rawDataset2413[headerInfo11G]; in ar5413SetPowerTable()
564 pRawDataset = &ee->ee_rawDataset2413[headerInfo11B]; in ar5413SetPowerTable()
567 pRawDataset = &ee->ee_rawDataset2413[headerInfo11A]; in ar5413SetPowerTable()
583 * honoring their settings results in tx power 5dBm low. in ar5413SetPowerTable()
586 (pRawDataset->pDataPerChannel[0].numPdGains - 1)); in ar5413SetPowerTable()
590 | SM(numPdGainsUsed-1, AR_PHY_TPCRG1_NUM_PD_GAIN); in ar5413SetPowerTable()
607 HALDEBUG(ah, HAL_DEBUG_RFPARAM, "%s: using non-default " in ar5413SetPowerTable()
615 * Note the pdadc table may not start at 0 dBm power, could be in ar5413SetPowerTable()
620 ahp->ah_txPowerIndexOffset = (int16_t)(0 - minCalPower5413_t2); in ar5413SetPowerTable()
622 ahp->ah_txPowerIndexOffset = 0; in ar5413SetPowerTable()
652 jj = MAX_NUM_PDGAINS_PER_CHANNEL - ii - 1; in ar5413GetMinPower()
654 numVpd = data->pDataPerPDGain[jj].numVpd; in ar5413GetMinPower()
656 Pmin = data->pDataPerPDGain[jj].pwr_t4[0]; in ar5413GetMinPower()
671 numVpd = data->pDataPerPDGain[ii].numVpd; in ar5413GetMaxPower()
673 Pmax = data->pDataPerPDGain[ii].pwr_t4[numVpd-1]; in ar5413GetMaxPower()
685 uint16_t freq = chan->ic_freq; /* NB: never mapped */ in ar5413GetChannelMaxMinPower()
686 const HAL_EEPROM *ee = AH_PRIVATE(ah)->ah_eeprom; in ar5413GetChannelMaxMinPower()
695 pRawDataset = &ee->ee_rawDataset2413[headerInfo11G]; in ar5413GetChannelMaxMinPower()
697 pRawDataset = &ee->ee_rawDataset2413[headerInfo11B]; in ar5413GetChannelMaxMinPower()
700 pRawDataset = &ee->ee_rawDataset2413[headerInfo11A]; in ar5413GetChannelMaxMinPower()
703 numChannels = pRawDataset->numChannels; in ar5413GetChannelMaxMinPower()
704 data = pRawDataset->pDataPerChannel; in ar5413GetChannelMaxMinPower()
713 (freq > data[numChannels-1].channelValue)) { in ar5413GetChannelMaxMinPower()
719 *maxPow = ar5413GetMaxPower(ah, &data[numChannels - 1]); in ar5413GetChannelMaxMinPower()
720 *minPow = ar5413GetMinPower(ah, &data[numChannels - 1]); in ar5413GetChannelMaxMinPower()
728 totalD = data[i].channelValue - data[last].channelValue; in ar5413GetChannelMaxMinPower()
730 totalF = ar5413GetMaxPower(ah, &data[i]) - ar5413GetMaxPower(ah, &data[last]); in ar5413GetChannelMaxMinPower()
731 *maxPow = (int8_t) ((totalF*(freq-data[last].channelValue) + in ar5413GetChannelMaxMinPower()
733 totalMin = ar5413GetMinPower(ah, &data[i]) - ar5413GetMinPower(ah, &data[last]); in ar5413GetChannelMaxMinPower()
734 *minPow = (int8_t) ((totalMin*(freq-data[last].channelValue) + in ar5413GetChannelMaxMinPower()
755 HALASSERT(ahp->ah_rfHal != AH_NULL); in ar5413RfDetach()
756 ath_hal_free(ahp->ah_rfHal); in ar5413RfDetach()
757 ahp->ah_rfHal = AH_NULL; in ar5413RfDetach()
770 HALASSERT(ah->ah_magic == AR5212_MAGIC); in ar5413RfAttach()
772 HALASSERT(ahp->ah_rfHal == AH_NULL); in ar5413RfAttach()
780 priv->base.rfDetach = ar5413RfDetach; in ar5413RfAttach()
781 priv->base.writeRegs = ar5413WriteRegs; in ar5413RfAttach()
782 priv->base.getRfBank = ar5413GetRfBank; in ar5413RfAttach()
783 priv->base.setChannel = ar5413SetChannel; in ar5413RfAttach()
784 priv->base.setRfRegs = ar5413SetRfRegs; in ar5413RfAttach()
785 priv->base.setPowerTable = ar5413SetPowerTable; in ar5413RfAttach()
786 priv->base.getChannelMaxMinPower = ar5413GetChannelMaxMinPower; in ar5413RfAttach()
787 priv->base.getNfAdjust = ar5212GetNfAdjust; in ar5413RfAttach()
789 ahp->ah_pcdacTable = priv->pcdacTable; in ar5413RfAttach()
790 ahp->ah_pcdacTableSize = sizeof(priv->pcdacTable); in ar5413RfAttach()
791 ahp->ah_rfHal = &priv->base; in ar5413RfAttach()