diff options
| author | Edhar, Mahesh Kumar <c_medhar@qti.qualcomm.com> | 2014-01-16 15:24:00 +0530 |
|---|---|---|
| committer | Prakash Dhavali <pdhavali@qca.qualcomm.com> | 2014-01-26 21:37:04 -0800 |
| commit | b25dc0450f7eb72a7c09eb8d20cc4c5e4a7455c4 (patch) | |
| tree | a6cc6dd12965c9ecf0104683c2bf35752a9c4d29 | |
| parent | a99e5a07e6665cc4d094b250b8dc80010a18815c (diff) | |
WMA:Changes to store tx rate flags and nss inforamtion per vdev
tx rate flags and nss information is needed to compute the data
rate which is used by various user-space applications.
Change-Id: I05cc00c00cb9da5ce4ade4bd1fdf88ca34377f29
CRs-Fixed: 600659
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 44 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 2 |
2 files changed, 43 insertions, 3 deletions
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 8679848053ed..ae22bbbc37d9 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -1102,9 +1102,13 @@ static void wma_update_peer_stats(tp_wma_handle wma, wmi_peer_stats *peer_stats) classa_stats->tx_rate = peer_stats->peer_tx_rate/500; } - /* currently tx rate flags are not provided by - * the fw*/ - classa_stats->tx_rate_flags = eHAL_TX_RATE_LEGACY; + + WMA_LOGD("peer tx rate flags:%d nss:%d", + node->rate_flags, node->nss); + classa_stats->tx_rate_flags = node->rate_flags; + /*rx_frag_cnt parameter is currently not used. + *lets use the same parameter to hold the nss value*/ + classa_stats->rx_frag_cnt = node->nss; } if (node->fw_stats_set & FW_STATS_SET) { @@ -5692,6 +5696,7 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, wmi_vht_rate_set *mcs; u_int32_t num_peer_legacy_rates; u_int32_t num_peer_ht_rates; + struct wma_txrx_node *intr = &wma->interfaces[params->smesessionId]; pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma->vos_context); @@ -5944,6 +5949,7 @@ static int32_t wmi_unified_send_peer_assoc(tp_wma_handle wma, == VHT2x2MCSMASK) ? 1 : 2; } + intr->nss = cmd->peer_nss; cmd->peer_phymode = wma_peer_phymode(nw_type, params->htCapable, params->txChannelWidthSet, params->vhtCapable, @@ -7323,6 +7329,36 @@ send_fail_resp: } #endif +static void wma_set_bss_rate_flags(struct wma_txrx_node *iface, + tpAddBssParams add_bss) +{ + iface->rate_flags = 0; + if (add_bss->htCapable) { + if (add_bss->txChannelWidthSet) + iface->rate_flags |= eHAL_TX_RATE_HT40; + else + iface->rate_flags |= eHAL_TX_RATE_HT20; + } + +#ifdef WLAN_FEATURE_11AC + if (add_bss->vhtCapable) { + if (add_bss->vhtTxChannelWidthSet) + iface->rate_flags |= eHAL_TX_RATE_VHT80; + else if (add_bss->txChannelWidthSet) + iface->rate_flags |= eHAL_TX_RATE_VHT40; + else + iface->rate_flags |= eHAL_TX_RATE_VHT20; + } +#endif + + if (add_bss->staContext.fShortGI20Mhz || + add_bss->staContext.fShortGI40Mhz) + iface->rate_flags |= eHAL_TX_RATE_SGI; + + if (!add_bss->htCapable && !add_bss->vhtCapable) + iface->rate_flags = eHAL_TX_RATE_LEGACY; +} + static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) { ol_txrx_pdev_handle pdev; @@ -7343,6 +7379,8 @@ static void wma_add_bss_sta_mode(tp_wma_handle wma, tpAddBssParams add_bss) vdev_id = add_bss->staContext.smesessionId; iface = &wma->interfaces[vdev_id]; + + wma_set_bss_rate_flags(iface, add_bss); if (add_bss->operMode) { // Save parameters later needed by WDA_ADD_STA_REQ if (iface->addBssStaContext) { diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index e26d85bb58cb..a493d0eab50e 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -428,6 +428,8 @@ struct wma_txrx_node { tANI_U8 fw_stats_set; void *del_staself_req; tANI_U8 bss_status; + tANI_U8 rate_flags; + tANI_U8 nss; }; #if defined(QCA_WIFI_FTM) && !defined(QCA_WIFI_ISOC) |
