//============================================================ // functions //============================================================ static void Init_ODM_ComInfo_8812(PADAPTER Adapter) { PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; PDM_ODM_T pDM_Odm = &(pHalData->odmpriv); u8 cut_ver,fab_ver; u8 BoardType = ODM_BOARD_DEFAULT; // // Init Value // _rtw_memset(pDM_Odm,0,sizeof(pDM_Odm)); pDM_Odm->Adapter = Adapter; ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PLATFORM,ODM_CE); if (Adapter->interface_type == RTW_GSPI) ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,ODM_ITRF_SDIO); else ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,Adapter->interface_type); if (IS_HARDWARE_TYPE_8812(Adapter)) ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8812); else if (IS_HARDWARE_TYPE_8821(Adapter)) ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8821); fab_ver = ODM_TSMC; if (IS_VENDOR_8812A_C_CUT(Adapter)) cut_ver = ODM_CUT_C; else cut_ver = ODM_CUT_A; ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver); ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID)); //1 ======= BoardType: ODM_CMNINFO_BOARD_TYPE ======= #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) if(pHalData->InterfaceSel == INTF_SEL1_USB_High_Power) { ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 1); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 1); } else { ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, pHalData->ExternalPA_2G); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 0); } #else // PCIE no external PA now??? ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 0); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 0); #endif if (pHalData->ExternalLNA_2G != 0) { BoardType |= ODM_BOARD_EXT_LNA; ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_LNA, 1); } if (pHalData->ExternalLNA_5G != 0) { BoardType |= ODM_BOARD_EXT_LNA_5G; ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_LNA, 1); } if (pHalData->ExternalPA_2G != 0) { BoardType |= ODM_BOARD_EXT_PA; ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_PA, 1); } if (pHalData->ExternalPA_5G != 0) { BoardType |= ODM_BOARD_EXT_PA_5G; ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_5G_EXT_PA, 1); } ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BOARD_TYPE, BoardType); //1 ============== End of BoardType ============== ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RFE_TYPE, pHalData->RFEType); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_EXT_TRSW, 0); ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pEEPROM->CustomerID); // ODM_CMNINFO_BINHCT_TEST only for MP Team ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BWIFI_TEST,Adapter->registrypriv.wifi_spec); if(pHalData->rf_type == RF_1T1R){ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T1R); } else if(pHalData->rf_type == RF_2T2R){ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_2T2R); } else if(pHalData->rf_type == RF_1T2R){ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T2R); } ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RFE_TYPE, pHalData->RFEType); ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType); #ifdef CONFIG_DISABLE_ODM pdmpriv->InitODMFlag = 0; #else pdmpriv->InitODMFlag = ODM_RF_CALIBRATION | ODM_RF_TX_PWR_TRACK //| ; //if(pHalData->AntDivCfg) // pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV; #endif ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag); }
static void PHY_HandleSwChnlAndSetBW8812(struct rtl_priv *rtlpriv, BOOLEAN bSwitchChannel, BOOLEAN bSetBandWidth, uint8_t ChannelNum, enum CHANNEL_WIDTH ChnlWidth, uint8_t ChnlOffsetOf40MHz, uint8_t ChnlOffsetOf80MHz, uint8_t CenterFrequencyIndex1 ) { struct rtl_mac *mac = &(rtlpriv->mac80211); struct _rtw_hal * pHalData = GET_HAL_DATA(rtlpriv); uint8_t tmpChannel = rtlpriv->phy.current_channel; enum CHANNEL_WIDTH tmpBW= rtlpriv->phy.current_chan_bw; uint8_t tmpnCur40MhzPrimeSC = mac->cur_40_prime_sc; uint8_t tmpnCur80MhzPrimeSC = mac->cur_80_prime_sc; uint8_t tmpCenterFrequencyIndex1 = rtlpriv->phy.current_channel; struct mlme_ext_priv *pmlmeext = &rtlpriv->mlmeextpriv; BOOLEAN bSwChnl = _FALSE, bSetChnlBW = _FALSE; /* DBG_871X("=> PHY_HandleSwChnlAndSetBW8812: bSwitchChannel %d, bSetBandWidth %d \n",bSwitchChannel,bSetBandWidth); */ /* check is swchnl or setbw */ if(!bSwitchChannel && !bSetBandWidth) { RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, "PHY_HandleSwChnlAndSetBW8812: not switch channel and not set bandwidth \n"); return; } /* skip change for channel or bandwidth is the same */ if(bSwitchChannel) { if(rtlpriv->phy.current_channel != ChannelNum) { if (HAL_IsLegalChannel(rtlpriv, ChannelNum)) bSwChnl = _TRUE; else return; } } if(bSetBandWidth) { if(pHalData->bChnlBWInitialzed == _FALSE) { pHalData->bChnlBWInitialzed = _TRUE; bSetChnlBW = _TRUE; } else if((rtlpriv->phy.current_chan_bw != ChnlWidth) || (mac->cur_40_prime_sc != ChnlOffsetOf40MHz) || (mac->cur_80_prime_sc != ChnlOffsetOf80MHz) || (rtlpriv->phy.current_channel != CenterFrequencyIndex1)) { bSetChnlBW = _TRUE; } } if(!bSetChnlBW && !bSwChnl) { /* DBG_871X("<= PHY_HandleSwChnlAndSetBW8812: bSwChnl %d, bSetChnlBW %d \n",bSwChnl,bSetChnlBW); */ return; } if(bSwChnl) { rtlpriv->phy.current_channel = ChannelNum; } if(bSetChnlBW) { rtlpriv->phy.current_chan_bw = ChnlWidth; mac->cur_40_prime_sc = ChnlOffsetOf40MHz; mac->cur_80_prime_sc = ChnlOffsetOf80MHz; } /* Switch workitem or set timer to do switch channel or setbandwidth operation */ if((!rtlpriv->bDriverStopped) && (!rtlpriv->bSurpriseRemoved)) { struct rtl_hal *rtlhal = rtl_hal(rtlpriv); /* DBG_871X("phy_SwChnlAndSetBwMode8812(): bSwChnl %d, bSetChnlBW %d \n", bSwChnl, bSetChnlBW); */ if ((rtlpriv->bDriverStopped) || (rtlpriv->bSurpriseRemoved)) { return; } if (bSwChnl) { rtl8821au_phy_sw_chnl_callback(rtlpriv); bSwChnl = _FALSE; } if (bSetChnlBW) { rtlpriv->cfg->ops->phy_set_bw_mode_callback(rtlpriv); bSetChnlBW = _FALSE; } rtl8821au_dm_clean_txpower_tracking_state(rtlpriv); PHY_SetTxPowerLevel8812(rtlpriv, rtlpriv->phy.current_channel); if ((rtlpriv->phy.need_iqk = false == true)) { if(IS_HARDWARE_TYPE_8812(rtlhal)) rtl8812au_phy_iq_calibrate(rtlpriv, _FALSE); else if(IS_HARDWARE_TYPE_8821(rtlhal)) rtl8821au_phy_iq_calibrate(rtlpriv, _FALSE); rtlpriv->phy.need_iqk = false; } } else { if(bSwChnl) { rtlpriv->phy.current_channel = tmpChannel; } if(bSetChnlBW) { rtlpriv->phy.current_chan_bw = tmpBW; mac->cur_40_prime_sc = tmpnCur40MhzPrimeSC; mac->cur_80_prime_sc = tmpnCur80MhzPrimeSC; } } /* * DBG_871X("Channel %d ChannelBW %d ",pHalData->CurrentChannel, pHalData->CurrentChannelBW); * DBG_871X("40MhzPrimeSC %d 80MhzPrimeSC %d ",pHalData->nCur40MhzPrimeSC, pHalData->nCur80MhzPrimeSC); * DBG_871X("CenterFrequencyIndex1 %d \n",pHalData->CurrentCenterFrequencyIndex1); */ /* * DBG_871X("<= PHY_HandleSwChnlAndSetBW8812: bSwChnl %d, bSetChnlBW %d \n",bSwChnl,bSetChnlBW); */ }