/* * rtw_get_cur_max_rate - * @adapter: pointer to _adapter structure * * Return 0 or 100Kbps */ u16 rtw_get_cur_max_rate(_adapter *adapter) { int i = 0; u16 rate = 0, max_rate = 0; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network; struct sta_info *psta = NULL; u8 short_GI=0; #ifdef CONFIG_80211N_HT u8 rf_type = 0; #endif #ifdef CONFIG_MP_INCLUDED if (adapter->registrypriv.mp_mode == 1) { if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE) return 0; } #endif if((check_fwstate(pmlmepriv, _FW_LINKED) != _TRUE) && (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) != _TRUE)) return 0; psta = rtw_get_stainfo(&adapter->stapriv, get_bssid(pmlmepriv)); if (psta == NULL) return 0; short_GI = query_ra_short_GI(psta); #ifdef CONFIG_80211N_HT if (IsSupportedHT(psta->wireless_mode)) { rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type)); max_rate = rtw_mcs_rate( rf_type, ((psta->bw_mode == CHANNEL_WIDTH_40)?1:0), short_GI, psta->htpriv.ht_cap.supp_mcs_set ); } #ifdef CONFIG_80211AC_VHT else if (IsSupportedVHT(psta->wireless_mode)) { max_rate = ((rtw_vht_mcs_to_data_rate(psta->bw_mode, short_GI, pmlmepriv->vhtpriv.vht_highest_rate) + 1) >> 1) * 10; }
/* * rtw_get_cur_max_rate - * @adapter: pointer to _adapter structure * * Return 0 or 100Kbps */ u16 rtw_get_cur_max_rate(_adapter *adapter) { int i = 0; u16 rate = 0, max_rate = 0; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network; struct sta_info *psta = NULL; u8 short_GI=0; u8 rf_type = 0; if((check_fwstate(pmlmepriv, _FW_LINKED) != true) && (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) != true)) return 0; psta = rtw_get_stainfo(&adapter->stapriv, get_bssid(pmlmepriv)); if (psta == NULL) return 0; short_GI = query_ra_short_GI(psta); if (IsSupportedHT(psta->wireless_mode)) { rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type)); max_rate = rtw_mcs_rate( rf_type, ((psta->bw_mode == CHANNEL_WIDTH_40)?1:0), short_GI, psta->htpriv.ht_cap.supp_mcs_set ); } else { while( (pcur_bss->SupportedRates[i]!=0) && (pcur_bss->SupportedRates[i]!=0xFF)) { rate = pcur_bss->SupportedRates[i]&0x7F; if(rate>max_rate) max_rate = rate; i++; } max_rate = max_rate*10/2; } return max_rate; }