u8 Get_RA_LDPC_8812(struct sta_info *psta) { uint8_t bLDPC = 0; if (psta->mac_id == 1) bLDPC = 0; else if (psta != NULL) { #ifdef CONFIG_80211AC_VHT if (IsSupportedVHT(psta->wireless_mode)) { if (TEST_FLAG(psta->vhtpriv.ldpc_cap, LDPC_VHT_CAP_TX)) bLDPC = 1; else bLDPC = 0; } else if (IsSupportedTxHT(psta->wireless_mode)) { if (TEST_FLAG(psta->htpriv.ldpc_cap, LDPC_HT_CAP_TX)) bLDPC = 1; else bLDPC = 0; } else #endif bLDPC = 0; } return (bLDPC << 2); }
void Set_RA_LDPC_8812( struct sta_info *psta, BOOLEAN bLDPC ) { if(psta == NULL) return; #ifdef CONFIG_80211AC_VHT if(psta->wireless_mode == WIRELESS_11_5AC) { if(bLDPC && TEST_FLAG(psta->vhtpriv.ldpc_cap, LDPC_VHT_CAP_TX)) SET_FLAG(psta->vhtpriv.ldpc_cap, LDPC_VHT_ENABLE_TX); else CLEAR_FLAG(psta->vhtpriv.ldpc_cap, LDPC_VHT_ENABLE_TX); } else if(IsSupportedTxHT(psta->wireless_mode) || IsSupportedVHT(psta->wireless_mode)) { if(bLDPC && TEST_FLAG(psta->htpriv.ldpc_cap, LDPC_HT_CAP_TX)) SET_FLAG(psta->htpriv.ldpc_cap, LDPC_HT_ENABLE_TX); else CLEAR_FLAG(psta->htpriv.ldpc_cap, LDPC_HT_ENABLE_TX); } #endif //DBG_871X("MacId %d bLDPC %d\n", psta->mac_id, bLDPC); }
/* * 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; u8 *p; u16 rate = 0, max_rate = 0; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); struct registry_priv *pregistrypriv = &adapter->registrypriv; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; WLAN_BSSID_EX *pcur_bss = &pmlmepriv->cur_network.network; #ifdef CONFIG_80211N_HT struct rtw_ieee80211_ht_cap *pht_capie; u8 rf_type = 0; u8 bw_40MHz=0, short_GI_20=0, short_GI_40=0, cbw40_enable=0; u16 mcs_rate=0; u32 ht_ielen = 0; #endif #ifdef CONFIG_80211AC_VHT struct vht_priv *pvhtpriv = &pmlmepriv->vhtpriv; #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; #ifdef CONFIG_80211N_HT if (IsSupportedTxHT(pmlmeext->cur_wireless_mode)) { p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12); if(p && ht_ielen>0) { pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2); _rtw_memcpy(&mcs_rate , pht_capie->supp_mcs_set, 2); //bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1:0; //cur_bwmod is updated by beacon, pmlmeinfo is updated by association response bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1:0; //short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1:0; short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0; short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0; rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type)); if (pmlmeext->cur_channel > 14) { if ((pregistrypriv->bw_mode & 0xf0) > 0) cbw40_enable = 1; } else { if ((pregistrypriv->bw_mode & 0x0f) > 0) cbw40_enable = 1; } max_rate = rtw_mcs_rate( rf_type, bw_40MHz & cbw40_enable, short_GI_20, short_GI_40, pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate ); } } #ifdef CONFIG_80211AC_VHT else if (IsSupportedVHT(pmlmeext->cur_wireless_mode)) { max_rate = ((rtw_vht_data_rate(pvhtpriv->bwmode, pvhtpriv->sgi, pvhtpriv->vht_highest_rate) + 1) >> 1) * 10; }