VOID odm_DynamicTxPowerNIC( IN PVOID pDM_VOID ) { PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID; if (!(pDM_Odm->SupportAbility & ODM_BB_DYNAMIC_TXPWR)) return; #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) if(pDM_Odm->SupportICType == ODM_RTL8192C) { odm_DynamicTxPower_92C(pDM_Odm); } else if(pDM_Odm->SupportICType == ODM_RTL8192D) { odm_DynamicTxPower_92D(pDM_Odm); } else if (pDM_Odm->SupportICType == ODM_RTL8821) { #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) PADAPTER Adapter = pDM_Odm->Adapter; PMGNT_INFO pMgntInfo = GetDefaultMgntInfo(Adapter); if (pMgntInfo->RegRspPwr == 1) { if(pDM_Odm->RSSI_Min > 60) { ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 1); // Resp TXAGC offset = -3dB } else if(pDM_Odm->RSSI_Min < 55) { ODM_SetMACReg(pDM_Odm, ODM_REG_RESP_TX_11AC, BIT20|BIT19|BIT18, 0); // Resp TXAGC offset = 0dB } } #endif } #endif }
VOID CHNL_ChangeBwChnlFromPeerWorkitemCallBack( IN PVOID Context ) { PADAPTER Adapter = (PADAPTER)Context; CHANNEL_WIDTH ChnlBW; EXTCHNL_OFFSET ExtChnlOffset; PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); PADAPTER pExtAdapter = GetFirstAPAdapter(Adapter); PADAPTER pGoAdapter = GetFirstGOPort(Adapter); if(pExtAdapter != NULL) { if(pExtAdapter->bAPChannelInprogressForNewconnected) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); return; } } if(pGoAdapter != NULL) { if(pGoAdapter->bAPChannelInprogressForNewconnected) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); return; } } if(GetDefaultMgntInfo(Adapter)->RegMultiChannelFcsMode != 0) { if(TRUE == MultiChannel_IsFCSInProgress(Adapter)) { RT_TRACE(COMP_MULTICHANNEL, DBG_TRACE, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): skip change ch & bw due to MCC\n")); return; } } #if 0 if(GetDefaultAdapter(Adapter)->bInHctTest) { RT_DISP(FCHNL, FCHNL_ERROR, ("%s: hct test , return \n", __FUNCTION__)); return; } #endif chnl_GetBWFrom_IE(Adapter, &ChnlBW, &ExtChnlOffset); if( pChnlInfo->CurrentChannelBandWidth != ChnlBW || pChnlInfo->Ext20MHzChnlOffsetOf40MHz != ExtChnlOffset) { // // Leave LPS and wait until RF is already on before switching channel. 2014.09.25, by tynli. // LPSLeaveAndCheckReady(Adapter); RT_TRACE(COMP_MLME, DBG_LOUD, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): CurrentChannel=%d, ChnlBW=%d, ExtChnlOffset=%d\n", pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset)); CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset); // We should set RA H2C cmd because the BW in TxDesc will be filled again by Fw, we // need to inform Fw the BW changed information. 2012.11.26. by tynli. // Suggested by SD1 Alex Chou. if(!ACTING_AS_AP(Adapter) && !ACTING_AS_IBSS(Adapter)) { // we only need to set rate mask Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, 0); } } }