/******************************************************************************
|
*
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
*
|
* This program is free software; you can redistribute it and/or modify it
|
* under the terms of version 2 of the GNU General Public License as
|
* published by the Free Software Foundation.
|
*
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* more details.
|
*
|
* You should have received a copy of the GNU General Public License along with
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
*
|
*
|
******************************************************************************/
|
|
#include "mp_precomp.h"
|
#include "../phydm_precomp.h"
|
|
#if (RTL8822B_SUPPORT == 1)
|
|
BOOLEAN
|
GetMixModeTXAGCBBSWingOffset_8822b(
|
PVOID pDM_VOID,
|
PWRTRACK_METHOD Method,
|
u1Byte RFPath,
|
u1Byte TxPowerIndexOffest
|
)
|
{
|
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
|
PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
|
|
u1Byte BBSwingUpperBound = pRFCalibrateInfo->DefaultOfdmIndex + 10;
|
u1Byte BBSwingLowerBound = 0;
|
|
s1Byte TX_AGC_Index = 0;
|
u1Byte TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex;
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("Path_%d pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]=%d, TxPowerIndexOffest=%d\n",
|
RFPath, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], TxPowerIndexOffest));
|
|
if (TxPowerIndexOffest > 0XF)
|
TxPowerIndexOffest = 0XF;
|
|
if (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] >= 0 && pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] <= TxPowerIndexOffest) {
|
TX_AGC_Index = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
|
TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex;
|
} else if (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] > TxPowerIndexOffest) {
|
TX_AGC_Index = TxPowerIndexOffest;
|
pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath] = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] - TxPowerIndexOffest;
|
TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath];
|
|
if (TX_BBSwing_Index > BBSwingUpperBound)
|
TX_BBSwing_Index = BBSwingUpperBound;
|
} else {
|
TX_AGC_Index = 0;
|
|
if (pRFCalibrateInfo->DefaultOfdmIndex > (pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] * (-1)))
|
TX_BBSwing_Index = pRFCalibrateInfo->DefaultOfdmIndex + pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
|
else
|
TX_BBSwing_Index = BBSwingLowerBound;
|
|
if (TX_BBSwing_Index < BBSwingLowerBound)
|
TX_BBSwing_Index = BBSwingLowerBound;
|
}
|
|
pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath] = TX_AGC_Index;
|
pRFCalibrateInfo->BbSwingIdxOfdm[RFPath] = TX_BBSwing_Index;
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("MixMode Offset Path_%d pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]=%d pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]=%d TxPowerIndexOffest=%d\n",
|
RFPath, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->BbSwingIdxOfdm[RFPath] , TxPowerIndexOffest));
|
|
return TRUE;
|
}
|
|
|
VOID
|
ODM_TxPwrTrackSetPwr8822B(
|
PVOID pDM_VOID,
|
PWRTRACK_METHOD Method,
|
u1Byte RFPath,
|
u1Byte ChannelMappedIndex
|
)
|
{
|
|
#if 0
|
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
|
u1Byte Channel = pHalData->CurrentChannel;
|
u1Byte BandWidth = pHalData->CurrentChannelBW;
|
u1Byte TxPowerIndex = 0;
|
u1Byte TxRate = 0xFF;
|
RT_STATUS status = RT_STATUS_SUCCESS;
|
|
PHALMAC_PWR_TRACKING_OPTION pPwr_tracking_opt = &(pRFCalibrateInfo->HALMAC_PWR_TRACKING_INFO);
|
|
if (pDM_Odm->mp_mode == TRUE) {
|
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
#if (MP_DRIVER == 1)
|
PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
|
|
TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
|
#endif
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
|
|
TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
|
#endif
|
#endif
|
} else {
|
u2Byte rate = *(pDM_Odm->pForcedDataRate);
|
|
if (!rate) { /*auto rate*/
|
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate);
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
if (pDM_Odm->number_linked_client != 0)
|
TxRate = HwRateToMRate(pDM_Odm->TxRate);
|
#endif
|
} else { /*force rate*/
|
TxRate = (u1Byte) rate;
|
}
|
}
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("Call:%s TxRate=0x%X\n", __func__, TxRate));
|
|
TxPowerIndex = PHY_GetTxPowerIndex(Adapter, (ODM_RF_RADIO_PATH_E) RFPath, TxRate, BandWidth, Channel);
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("type=%d TxPowerIndex=%d pRFCalibrateInfo->Absolute_OFDMSwingIdx=%d pRFCalibrateInfo->DefaultOfdmIndex=%d RFPath=%d\n", Method, TxPowerIndex, pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->DefaultOfdmIndex, RFPath));
|
|
pPwr_tracking_opt->type = Method;
|
pPwr_tracking_opt->bbswing_index = pRFCalibrateInfo->DefaultOfdmIndex;
|
pPwr_tracking_opt->pwr_tracking_para[RFPath].enable = 1;
|
pPwr_tracking_opt->pwr_tracking_para[RFPath].tx_pwr_index = TxPowerIndex;
|
pPwr_tracking_opt->pwr_tracking_para[RFPath].pwr_tracking_offset_value = pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath];
|
pPwr_tracking_opt->pwr_tracking_para[RFPath].tssi_value = 0;
|
|
|
if (RFPath == (MAX_PATH_NUM_8822B - 1)) {
|
status = HAL_MAC_Send_PowerTracking_Info(&GET_HAL_MAC_INFO(Adapter), pPwr_tracking_opt);
|
|
if (status == RT_STATUS_SUCCESS) {
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("Path A 0xC94=0x%X 0xC1C=0x%X\n",
|
ODM_GetBBReg(pDM_Odm, 0xC94, BIT29 | BIT28 | BIT27 | BIT26 | BIT25),
|
ODM_GetBBReg(pDM_Odm, 0xC1C, 0xFFE00000)
|
));
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("Path B 0xE94=0x%X 0xE1C=0x%X\n",
|
ODM_GetBBReg(pDM_Odm, 0xE94, BIT29 | BIT28 | BIT27 | BIT26 | BIT25),
|
ODM_GetBBReg(pDM_Odm, 0xE1C, 0xFFE00000)
|
));
|
} else {
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("Power Tracking to FW Fail ret code = %d\n", status));
|
}
|
}
|
|
#endif
|
|
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
|
PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
|
u1Byte TxPowerIndexOffest = 0;
|
u1Byte TxPowerIndex = 0;
|
|
|
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
u1Byte Channel = pHalData->CurrentChannel;
|
u1Byte BandWidth = pHalData->CurrentChannelBW;
|
u1Byte TxRate = 0xFF;
|
|
if (pDM_Odm->mp_mode == TRUE) {
|
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
#if (MP_DRIVER == 1)
|
PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
|
|
TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
|
#endif
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
PMPT_CONTEXT pMptCtx = &(Adapter->mppriv.MptCtx);
|
|
TxRate = MptToMgntRate(pMptCtx->MptRateIndex);
|
#endif
|
#endif
|
} else {
|
u2Byte rate = *(pDM_Odm->pForcedDataRate);
|
|
if (!rate) { /*auto rate*/
|
#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
TxRate = Adapter->HalFunc.GetHwRateFromMRateHandler(pDM_Odm->TxRate);
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
if (pDM_Odm->number_linked_client != 0)
|
TxRate = HwRateToMRate(pDM_Odm->TxRate);
|
#endif
|
} else { /*force rate*/
|
TxRate = (u1Byte) rate;
|
}
|
}
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD, ("Call:%s TxRate=0x%X\n", __func__, TxRate));
|
|
#endif
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("pRF->DefaultOfdmIndex=%d pRF->DefaultCckIndex=%d\n", pRFCalibrateInfo->DefaultOfdmIndex, pRFCalibrateInfo->DefaultCckIndex));
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("pRF->Absolute_OFDMSwingIdx=%d pRF->Remnant_OFDMSwingIdx=%d pRF->Absolute_CCKSwingIdx=%d pRF->Remnant_CCKSwingIdx=%d RFPath=%d\n",
|
pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath], pRFCalibrateInfo->Remnant_OFDMSwingIdx[RFPath], pRFCalibrateInfo->Absolute_CCKSwingIdx[RFPath], pRFCalibrateInfo->Remnant_CCKSwingIdx, RFPath));
|
|
#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))
|
TxPowerIndex = PHY_GetTxPowerIndex(Adapter, (ODM_RF_RADIO_PATH_E) RFPath, TxRate, BandWidth, Channel);
|
#else
|
TxPowerIndex = config_phydm_read_txagc_8822b(pDM_Odm, RFPath, 0x04); /*0x04(TX_AGC_OFDM_6M)*/
|
#endif
|
|
if (TxPowerIndex >= 63)
|
TxPowerIndex = 63;
|
|
TxPowerIndexOffest = 63 - TxPowerIndex;
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("TxPowerIndex=%d TxPowerIndexOffest=%d RFPath=%d\n", TxPowerIndex, TxPowerIndexOffest, RFPath));
|
|
|
if (Method == MIX_MODE) {
|
switch (RFPath) {
|
case ODM_RF_PATH_A:
|
GetMixModeTXAGCBBSWingOffset_8822b(pDM_Odm, Method, RFPath, TxPowerIndexOffest);
|
ODM_SetBBReg(pDM_Odm, 0xC94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25), pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]);
|
ODM_SetBBReg(pDM_Odm, rA_TxScale_Jaguar, 0xFFE00000, TxScalingTable_Jaguar[pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]]);
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("TXAGC(0xC94)=0x%x BBSwing(0xc1c)=0x%x BBSwingIndex=%d RFPath=%d\n",
|
ODM_GetBBReg(pDM_Odm, 0xC94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25)),
|
ODM_GetBBReg(pDM_Odm, 0xc1c, 0xFFE00000),
|
pRFCalibrateInfo->BbSwingIdxOfdm[RFPath], RFPath));
|
break;
|
|
case ODM_RF_PATH_B:
|
GetMixModeTXAGCBBSWingOffset_8822b(pDM_Odm, Method, RFPath, TxPowerIndexOffest);
|
ODM_SetBBReg(pDM_Odm, 0xE94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25), pRFCalibrateInfo->Absolute_OFDMSwingIdx[RFPath]);
|
ODM_SetBBReg(pDM_Odm, rB_TxScale_Jaguar, 0xFFE00000, TxScalingTable_Jaguar[pRFCalibrateInfo->BbSwingIdxOfdm[RFPath]]);
|
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_TX_PWR_TRACK, ODM_DBG_LOUD,
|
("TXAGC(0xE94)=0x%x BBSwing(0xe1c)=0x%x BBSwingIndex=%d RFPath=%d\n",
|
ODM_GetBBReg(pDM_Odm, 0xE94, (BIT29 | BIT28 | BIT27 | BIT26 | BIT25)),
|
ODM_GetBBReg(pDM_Odm, 0xe1c, 0xFFE00000),
|
pRFCalibrateInfo->BbSwingIdxOfdm[RFPath], RFPath));
|
break;
|
|
default:
|
break;
|
}
|
}
|
}
|
|
|
VOID
|
GetDeltaSwingTable_8822B(
|
PVOID pDM_VOID,
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
pu1Byte *TemperatureUP_A,
|
pu1Byte *TemperatureDOWN_A,
|
pu1Byte *TemperatureUP_B,
|
pu1Byte *TemperatureDOWN_B,
|
pu1Byte *TemperatureUP_CCK_A,
|
pu1Byte *TemperatureDOWN_CCK_A,
|
pu1Byte *TemperatureUP_CCK_B,
|
pu1Byte *TemperatureDOWN_CCK_B
|
#else
|
pu1Byte *TemperatureUP_A,
|
pu1Byte *TemperatureDOWN_A,
|
pu1Byte *TemperatureUP_B,
|
pu1Byte *TemperatureDOWN_B
|
#endif
|
)
|
{
|
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
|
PODM_RF_CAL_T pRFCalibrateInfo = &(pDM_Odm->RFCalibrateInfo);
|
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
u1Byte channel = *(pDM_Odm->pChannel);
|
#else
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
u1Byte channel = pHalData->CurrentChannel;
|
#endif
|
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
*TemperatureUP_CCK_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P;
|
*TemperatureDOWN_CCK_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N;
|
*TemperatureUP_CCK_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P;
|
*TemperatureDOWN_CCK_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N;
|
#endif
|
|
*TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P;
|
*TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N;
|
*TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P;
|
*TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N;
|
|
if (36 <= channel && channel <= 64) {
|
*TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[0];
|
*TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[0];
|
*TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[0];
|
*TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[0];
|
} else if (100 <= channel && channel <= 144) {
|
*TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[1];
|
*TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[1];
|
*TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[1];
|
*TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[1];
|
} else if (149 <= channel && channel <= 177) {
|
*TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_P[2];
|
*TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_5GA_N[2];
|
*TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_P[2];
|
*TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_5GB_N[2];
|
}
|
}
|
|
|
VOID
|
phy_LCCalibrate_8822B(
|
PDM_ODM_T pDM_Odm
|
)
|
{
|
u4Byte LC_Cal = 0, cnt = 0;
|
|
/*backup RF0x18*/
|
LC_Cal = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask);
|
|
/*Start LCK*/
|
ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal | 0x08000);
|
|
ODM_delay_ms(100);
|
|
for (cnt = 0; cnt < 100; cnt++) {
|
if (ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, 0x8000) != 0x1)
|
break;
|
ODM_delay_ms(10);
|
}
|
|
/*Recover channel number*/
|
ODM_SetRFReg(pDM_Odm, ODM_RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, LC_Cal);
|
}
|
|
|
|
VOID
|
PHY_LCCalibrate_8822B(
|
PVOID pDM_VOID
|
)
|
{
|
PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID;
|
BOOLEAN bStartContTx = FALSE, bSingleTone = FALSE, bCarrierSuppression = FALSE;
|
u8Byte StartTime;
|
u8Byte ProgressingTime;
|
|
|
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
PADAPTER pAdapter = pDM_Odm->Adapter;
|
|
#if (MP_DRIVER == 1)
|
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
PMPT_CONTEXT pMptCtx = &(pAdapter->MptCtx);
|
#else
|
PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
|
#endif
|
bStartContTx = pMptCtx->bStartContTx;
|
bSingleTone = pMptCtx->bSingleTone;
|
bCarrierSuppression = pMptCtx->bCarrierSuppression;
|
#endif
|
#endif
|
|
if (bStartContTx || bSingleTone || bCarrierSuppression) {
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("[LCK]continues TX ing !!! LCK return\n"));
|
return;
|
}
|
|
StartTime = ODM_GetCurrentTime(pDM_Odm);
|
phy_LCCalibrate_8822B(pDM_Odm);
|
ProgressingTime = ODM_GetProgressingTime(pDM_Odm, StartTime);
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_CALIBRATION, ODM_DBG_LOUD, ("[LCK]LCK ProgressingTime = %lld\n", ProgressingTime));
|
}
|
|
|
|
void ConfigureTxpowerTrack_8822B(
|
PTXPWRTRACK_CFG pConfig
|
)
|
{
|
pConfig->SwingTableSize_CCK = TXSCALE_TABLE_SIZE;
|
pConfig->SwingTableSize_OFDM = TXSCALE_TABLE_SIZE;
|
pConfig->Threshold_IQK = IQK_THRESHOLD;
|
pConfig->Threshold_DPK = DPK_THRESHOLD;
|
pConfig->AverageThermalNum = AVG_THERMAL_NUM_8822B;
|
pConfig->RfPathCount = MAX_PATH_NUM_8822B;
|
pConfig->ThermalRegAddr = RF_T_METER_8822B;
|
|
pConfig->ODM_TxPwrTrackSetPwr = ODM_TxPwrTrackSetPwr8822B;
|
pConfig->DoIQK = DoIQK_8822B;
|
pConfig->PHY_LCCalibrate = PHY_LCCalibrate_8822B;
|
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
pConfig->GetDeltaAllSwingTable = GetDeltaSwingTable_8822B;
|
#else
|
pConfig->GetDeltaSwingTable = GetDeltaSwingTable_8822B;
|
#endif
|
}
|
|
|
VOID PHY_SetRFPathSwitch_8822B(
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
IN PDM_ODM_T pDM_Odm,
|
#else
|
IN PADAPTER pAdapter,
|
#endif
|
IN BOOLEAN bMain
|
)
|
{
|
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
|
#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
|
PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
|
#endif
|
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
|
#endif
|
#endif
|
|
#if 0
|
ODM_SetBBReg(pDM_Odm, 0xCB4, bMaskDWord, 0x00004577);
|
ODM_SetBBReg(pDM_Odm, 0x1900, bMaskDWord, 0x00001000);
|
ODM_SetBBReg(pDM_Odm, 0x4C, bMaskDWord, 0x01628202);
|
|
if (bMain)
|
ODM_SetBBReg(pDM_Odm, 0xCBC, bMaskDWord, 0x00000200); /*WiFi */
|
else
|
ODM_SetBBReg(pDM_Odm, 0xCBC, bMaskDWord, 0x00000100); /* BT*/
|
#else
|
/*BY SY Request */
|
ODM_SetBBReg(pDM_Odm, 0x4C, (BIT24 | BIT23), 0x2);
|
ODM_SetBBReg(pDM_Odm, 0x974, 0xff, 0xff);
|
|
/*ODM_SetBBReg(pDM_Odm, 0x1991, 0x3, 0x0);*/
|
ODM_SetBBReg(pDM_Odm, 0x1990, (BIT9 | BIT8), 0x0);
|
|
/*ODM_SetBBReg(pDM_Odm, 0xCBE, 0x8, 0x0);*/
|
ODM_SetBBReg(pDM_Odm, 0xCBC, BIT19, 0x0);
|
|
ODM_SetBBReg(pDM_Odm, 0xCB4, 0xff, 0x77);
|
|
if (bMain) {
|
/*ODM_SetBBReg(pDM_Odm, 0xCBD, 0x3, 0x2); WiFi */
|
ODM_SetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8), 0x2); /*WiFi */
|
} else {
|
/*ODM_SetBBReg(pDM_Odm, 0xCBD, 0x3, 0x1); BT*/
|
ODM_SetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8), 0x1); /*BT*/
|
}
|
|
#endif
|
}
|
|
BOOLEAN
|
phy_QueryRFPathSwitch_8822B(
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
PDM_ODM_T pDM_Odm
|
#else
|
PADAPTER pAdapter
|
#endif
|
)
|
{
|
#if !(DM_ODM_SUPPORT_TYPE & ODM_AP)
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
|
#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
|
PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
|
#endif
|
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
|
PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
|
#endif
|
#endif
|
|
if (ODM_GetBBReg(pDM_Odm, 0xCBC, (BIT9 | BIT8)) == 0x2) /*WiFi */
|
return TRUE;
|
else
|
return FALSE;
|
}
|
|
|
BOOLEAN PHY_QueryRFPathSwitch_8822B(
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
PDM_ODM_T pDM_Odm
|
#else
|
PADAPTER pAdapter
|
#endif
|
)
|
{
|
|
#if DISABLE_BB_RF
|
return TRUE;
|
#endif
|
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
return phy_QueryRFPathSwitch_8822B(pDM_Odm);
|
#else
|
return phy_QueryRFPathSwitch_8822B(pAdapter);
|
#endif
|
}
|
|
|
#endif /* (RTL8822B_SUPPORT == 0)*/
|