diff options
author | Dustin Brown <dustinb@codeaurora.org> | 2016-11-16 16:51:10 -0800 |
---|---|---|
committer | qcabuildsw <qcabuildsw@localhost> | 2016-12-14 14:07:23 -0800 |
commit | 905cdc782fb542d164a13bba5dc6ff63c564811a (patch) | |
tree | a3feef202885ad147a6e4aa01c3b40091fb4e3e4 | |
parent | 9a090095c34d772ad2b59dfe3dc948ddc9cf7178 (diff) | |
download | qcacld-905cdc782fb542d164a13bba5dc6ff63c564811a.tar.gz |
qcacld-3.0: Default to MSC 0 when reporting invalid link speed
During vdev startup, firmware reports a tx rate of 0, which does not
map to a valid MCS. If the last reported tx rate from firmware does not
map to a valid MCS, default to MCS 0 when reporting link speed to
the kernel.
Change-Id: I6a2cb1cc6b328b76ed2f1ddd6ceb0f5ce7c84318
CRs-Fixed: 1091046
-rw-r--r-- | core/hdd/src/wlan_hdd_stats.c | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/core/hdd/src/wlan_hdd_stats.c b/core/hdd/src/wlan_hdd_stats.c index 23462999b9..3e08913947 100644 --- a/core/hdd/src/wlan_hdd_stats.c +++ b/core/hdd/src/wlan_hdd_stats.c @@ -1699,6 +1699,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; uint8_t rate_flags; + uint8_t mcs_index; hdd_context_t *pHddCtx = (hdd_context_t *) wiphy_priv(wiphy); struct hdd_config *pCfg = pHddCtx->config; @@ -1789,6 +1790,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, hdd_lpass_notify_connect(pAdapter); rate_flags = pAdapter->hdd_stats.ClassA_stat.tx_rate_flags; + mcs_index = pAdapter->hdd_stats.ClassA_stat.mcs_index; /* convert to the UI units of 100kbps */ myRate = pAdapter->hdd_stats.ClassA_stat.tx_rate * 5; @@ -1802,18 +1804,14 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, promiscuous_rx_frag_cnt; } - if (pAdapter->hdd_stats.ClassA_stat.mcs_index == - INVALID_MCS_IDX) { - rate_flags = eHAL_TX_RATE_LEGACY; - pAdapter->hdd_stats.ClassA_stat.mcs_index = 0; - } + if (mcs_index == INVALID_MCS_IDX) + mcs_index = 0; } hdd_info("RSSI %d, RLMS %u, rate %d, rssi high %d, rssi mid %d, rssi low %d, rate_flags 0x%x, MCS %d", sinfo->signal, pCfg->reportMaxLinkSpeed, myRate, (int)pCfg->linkSpeedRssiHigh, (int)pCfg->linkSpeedRssiMid, - (int)pCfg->linkSpeedRssiLow, (int)rate_flags, - (int)pAdapter->hdd_stats.ClassA_stat.mcs_index); + (int)pCfg->linkSpeedRssiLow, (int)rate_flags, (int)mcs_index); #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) || defined(WITH_BACKPORTS) /* assume basic BW. anything else will override this later */ @@ -1974,24 +1972,21 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, if (rate_flags & eHAL_TX_RATE_VHT80) { currentRate = - supported_vht_mcs_rate[pAdapter-> - hdd_stats.ClassA_stat.mcs_index]. + supported_vht_mcs_rate[mcs_index]. supported_VHT80_rate[rateFlag]; maxRate = supported_vht_mcs_rate[maxMCSIdx]. supported_VHT80_rate[rateFlag]; } else if (rate_flags & eHAL_TX_RATE_VHT40) { currentRate = - supported_vht_mcs_rate[pAdapter-> - hdd_stats.ClassA_stat.mcs_index]. + supported_vht_mcs_rate[mcs_index]. supported_VHT40_rate[rateFlag]; maxRate = supported_vht_mcs_rate[maxMCSIdx]. supported_VHT40_rate[rateFlag]; } else if (rate_flags & eHAL_TX_RATE_VHT20) { currentRate = - supported_vht_mcs_rate[pAdapter-> - hdd_stats.ClassA_stat.mcs_index]. + supported_vht_mcs_rate[mcs_index]. supported_VHT20_rate[rateFlag]; maxRate = supported_vht_mcs_rate[maxMCSIdx]. @@ -2053,7 +2048,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, else if (!(rate_flags & eHAL_TX_RATE_LEGACY)) { maxRate = myRate; maxSpeedMCS = 1; - maxMCSIdx = pAdapter->hdd_stats.ClassA_stat.mcs_index; + maxMCSIdx = mcs_index; } /* report a value at least as big as current rate */ if ((maxRate < myRate) || (0 == maxRate)) { @@ -2062,8 +2057,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, maxSpeedMCS = 0; } else { maxSpeedMCS = 1; - maxMCSIdx = - pAdapter->hdd_stats.ClassA_stat.mcs_index; + maxMCSIdx = mcs_index; /* * IEEE_P802.11ac_2013.pdf page 325, 326 * - MCS9 is valid for VHT20 when @@ -2145,8 +2139,7 @@ static int __wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, #endif /* LINKSPEED_DEBUG_ENABLED */ } else { /* must be MCS */ - sinfo->txrate.mcs = - pAdapter->hdd_stats.ClassA_stat.mcs_index; + sinfo->txrate.mcs = mcs_index; sinfo->txrate.nss = nss; sinfo->txrate.flags |= RATE_INFO_FLAGS_VHT_MCS; if (rate_flags & eHAL_TX_RATE_VHT80) { |