void rtl8723b_hal_dm_in_lps(PADAPTER padapter) { u32 PWDB_rssi=0; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter); PDM_ODM_T pDM_Odm = &pHalData->odmpriv; pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable; struct sta_priv *pstapriv = &padapter->stapriv; struct sta_info *psta = NULL; DBG_871X("%s, RSSI_Min=%d\n", __func__, pDM_Odm->RSSI_Min); //update IGI ODM_Write_DIG(pDM_Odm, pDM_Odm->RSSI_Min); //set rssi to fw psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv)); if(psta && (psta->rssi_stat.UndecoratedSmoothedPWDB > 0)) { PWDB_rssi = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) ); rtl8723b_set_rssi_cmd(padapter, (u8*)&PWDB_rssi); } }
VOID odm_RSSIMonitorCheckCE( IN PVOID pDM_VOID ) { PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID; PADAPTER Adapter = pDM_Odm->Adapter; HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(Adapter); int i; int tmpEntryMaxPWDB=0, tmpEntryMinPWDB=0xff; u8 sta_cnt=0; u32 UL_DL_STATE = 0, STBC_TX = 0, TxBF_EN = 0; u32 PWDB_rssi[NUM_STA]={0};//[0~15]:MACID, [16~31]:PWDB_rssi BOOLEAN FirstConnect = FALSE; pRA_T pRA_Table = &pDM_Odm->DM_RA_Table; if(pDM_Odm->bLinked != _TRUE) return; FirstConnect = (pDM_Odm->bLinked) && (pRA_Table->firstconnect == FALSE); pRA_Table->firstconnect = pDM_Odm->bLinked; { struct sta_info *psta; for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) { if (IS_STA_VALID(psta = pDM_Odm->pODM_StaInfo[i])) { if(IS_MCAST( psta->hwaddr)) //if(psta->mac_id ==1) continue; if(psta->rssi_stat.UndecoratedSmoothedPWDB == (-1)) continue; if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB) tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB; if(psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB) tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB; if(psta->rssi_stat.UndecoratedSmoothedPWDB != (-1)) { #ifdef CONFIG_80211N_HT if(pDM_Odm->SupportICType == ODM_RTL8192E || pDM_Odm->SupportICType == ODM_RTL8812) { #ifdef CONFIG_BEAMFORMING BEAMFORMING_CAP Beamform_cap = beamforming_get_entry_beam_cap_by_mac_id(&Adapter->mlmepriv, psta->mac_id); if(Beamform_cap & (BEAMFORMER_CAP_HT_EXPLICIT |BEAMFORMER_CAP_VHT_SU)) TxBF_EN = 1; else TxBF_EN = 0; if (TxBF_EN) { STBC_TX = 0; } else #endif { #ifdef CONFIG_80211AC_VHT if(IsSupportedVHT(psta->wireless_mode)) STBC_TX = TEST_FLAG(psta->vhtpriv.stbc_cap, STBC_VHT_ENABLE_TX); else #endif STBC_TX = TEST_FLAG(psta->htpriv.stbc_cap, STBC_HT_ENABLE_TX); } } #endif if(pDM_Odm->SupportICType == ODM_RTL8192D) PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) | ((Adapter->stapriv.asoc_sta_count+1) << 8)); else if ((pDM_Odm->SupportICType == ODM_RTL8192E)||(pDM_Odm->SupportICType == ODM_RTL8812)||(pDM_Odm->SupportICType == ODM_RTL8821)) PWDB_rssi[sta_cnt++] = (((u8)(psta->mac_id&0xFF)) | ((psta->rssi_stat.UndecoratedSmoothedPWDB&0x7F)<<16) |(STBC_TX << 25) | (FirstConnect << 29) | (TxBF_EN << 30)); else PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16) ); } } } for(i=0; i< sta_cnt; i++) { if(PWDB_rssi[i] != (0)){ if(pHalData->fw_ractrl == _TRUE)// Report every sta's RSSI to FW { if(pDM_Odm->SupportICType == ODM_RTL8723B){ rtl8723b_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i])); } } } } } if(tmpEntryMaxPWDB != 0) // If associated entry is found { pdmpriv->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB; } else { pdmpriv->EntryMaxUndecoratedSmoothedPWDB = 0; } if(tmpEntryMinPWDB != 0xff) // If associated entry is found { pdmpriv->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB; } else { pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0; } FindMinimumRSSI(Adapter);//get pdmpriv->MinUndecoratedPWDBForDM pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM; }