From f72cbe544a90959b7002c4eddc4722fd3c145aec Mon Sep 17 00:00:00 2001 From: Keyur Parekh Date: Thu, 15 Nov 2018 15:56:07 -0800 Subject: [PATCH] qcacmn: populate NSS value and Translate MCS value for HT This change will resolve displaying NSS value in stats in case of HT. And also it will give proper NSS value to calculate rate value. Modify MCS value to match with Tx stats from firmware. Also retain original MCS value to use in radiotap code for HT case. Change-Id: I4dad068262a5e9188a5935db6b2cbf8d14138e7e --- hal/wifi3.0/hal_api_mon.h | 1 + hal/wifi3.0/hal_generic_api.h | 4 ++++ qdf/inc/qdf_nbuf.h | 2 ++ qdf/linux/src/qdf_nbuf.c | 2 +- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/hal/wifi3.0/hal_api_mon.h b/hal/wifi3.0/hal_api_mon.h index 922543d574cd..9ca15af8886d 100644 --- a/hal/wifi3.0/hal_api_mon.h +++ b/hal/wifi3.0/hal_api_mon.h @@ -130,6 +130,7 @@ #define HE_LTF_4_X 3 #define HE_LTF_UNKNOWN 0 #define VHT_SIG_SU_NSS_MASK 0x7 +#define HT_SIG_SU_NSS_SHIFT 0x3 #define HAL_TID_INVALID 31 #define HAL_AST_IDX_INVALID 0xFFFF diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index 92d2b1cbe397..4ab560622a2d 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -431,11 +431,15 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo, 1 : 0; ppdu_info->rx_status.mcs = HAL_RX_GET(ht_sig_info, HT_SIG_INFO_0, MCS); + ppdu_info->rx_status.ht_mcs = ppdu_info->rx_status.mcs; ppdu_info->rx_status.bw = HAL_RX_GET(ht_sig_info, HT_SIG_INFO_0, CBW); ppdu_info->rx_status.sgi = HAL_RX_GET(ht_sig_info, HT_SIG_INFO_1, SHORT_GI); ppdu_info->rx_status.reception_type = HAL_RX_TYPE_SU; + ppdu_info->rx_status.nss = ((ppdu_info->rx_status.mcs) >> + HT_SIG_SU_NSS_SHIFT) + 1; + ppdu_info->rx_status.mcs &= ((1 << HT_SIG_SU_NSS_SHIFT) - 1); break; } diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index e70c22d423c2..d0506183c992 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -181,6 +181,7 @@ * @ant_signal_db: Rx packet RSSI * @nr_ant: Number of Antennas used for streaming * @mcs: MCS index of Rx frame + * @ht_mcs: MCS index for HT RX frames * @nss: Number of spatial streams * @bw: bandwidth of rx frame * @is_stbc: Is STBC enabled @@ -246,6 +247,7 @@ struct mon_rx_status { uint8_t ant_signal_db; uint8_t nr_ant; uint8_t mcs; + uint8_t ht_mcs; uint8_t nss; uint16_t tcp_msdu_count; uint16_t udp_msdu_count; diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 0d3e96b35549..965842d147d7 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -4141,7 +4141,7 @@ unsigned int qdf_nbuf_update_radiotap(struct mon_rx_status *rx_status, rtap_buf[rtap_len] |= IEEE80211_RADIOTAP_MCS_BW_20; rtap_len += 1; - rtap_buf[rtap_len] = rx_status->mcs; + rtap_buf[rtap_len] = rx_status->ht_mcs; rtap_len += 1; if ((rtap_len - length) > RADIOTAP_HT_FLAGS_LEN) {