//============================================================
// 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);
	
}
Exemplo n.º 2
0
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);
     */

}