From d1a229d4125ab00ffe2cf94d3a0e0828e7d52ef4 Mon Sep 17 00:00:00 2001 From: gaolez Date: Wed, 28 Mar 2018 17:26:40 +0800 Subject: [PATCH] qcacld-3.0: Refine the MGMT rate valid check function qcacld-2.0 to qcacld-3.0 propagation 1. CCK rate should not allowed in 5G mode 2. Avoid configure 2 stream rates to send MGMT packet Change-Id: Id222bc5c41264ba802a43a02d333f16578bc4a5d CRs-Fixed: 2182955 --- core/wma/src/wma_mgmt.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index e3c503eb1d19..93df8bba220e 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -601,10 +601,11 @@ static inline void wma_get_link_probe_timeout(struct sAniSirGlobal *mac, /** * wma_verify_rate_code() - verify if rate code is valid. * @rate_code: rate code + * @band: band information * * Return: verify result */ -static bool wma_verify_rate_code(u_int32_t rate_code) +static bool wma_verify_rate_code(u_int32_t rate_code, enum cds_band_type band) { uint8_t preamble, nss, rate; bool valid = true; @@ -615,7 +616,7 @@ static bool wma_verify_rate_code(u_int32_t rate_code) switch (preamble) { case WMI_RATE_PREAMBLE_CCK: - if (nss != 0 || rate > 3) + if (nss != 0 || rate > 3 || band == CDS_BAND_5GHZ) valid = false; break; case WMI_RATE_PREAMBLE_OFDM: @@ -623,11 +624,11 @@ static bool wma_verify_rate_code(u_int32_t rate_code) valid = false; break; case WMI_RATE_PREAMBLE_HT: - if (nss > 1 || rate > 7) + if (nss != 0 || rate > 7) valid = false; break; case WMI_RATE_PREAMBLE_VHT: - if (nss > 1 || rate > 9) + if (nss != 0 || rate > 9) valid = false; break; default: @@ -653,6 +654,7 @@ void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id) uint32_t cfg_val; int ret; uint32_t per_band_mgmt_tx_rate = 0; + enum cds_band_type band = 0; struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); if (NULL == mac) { @@ -662,8 +664,9 @@ void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id) if (wlan_cfg_get_int(mac, WNI_CFG_RATE_FOR_TX_MGMT, &cfg_val) == eSIR_SUCCESS) { + band = CDS_BAND_ALL; if ((cfg_val == WNI_CFG_RATE_FOR_TX_MGMT_STADEF) || - !wma_verify_rate_code(cfg_val)) { + !wma_verify_rate_code(cfg_val, band)) { WMA_LOGD("default WNI_CFG_RATE_FOR_TX_MGMT, ignore"); } else { ret = wma_vdev_set_param( @@ -682,8 +685,10 @@ void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id) if (wlan_cfg_get_int(mac, WNI_CFG_RATE_FOR_TX_MGMT_2G, &cfg_val) == eSIR_SUCCESS) { + band = CDS_BAND_2GHZ; if ((cfg_val == WNI_CFG_RATE_FOR_TX_MGMT_2G_STADEF) || - !wma_verify_rate_code(cfg_val)) { + !wma_verify_rate_code(cfg_val, band)) { + WMA_LOGD("use default 2G MGMT rate."); per_band_mgmt_tx_rate &= ~(1 << TX_MGMT_RATE_2G_ENABLE_OFFSET); } else { @@ -698,8 +703,10 @@ void wma_set_vdev_mgmt_rate(tp_wma_handle wma, uint8_t vdev_id) if (wlan_cfg_get_int(mac, WNI_CFG_RATE_FOR_TX_MGMT_5G, &cfg_val) == eSIR_SUCCESS) { + band = CDS_BAND_5GHZ; if ((cfg_val == WNI_CFG_RATE_FOR_TX_MGMT_5G_STADEF) || - !wma_verify_rate_code(cfg_val)) { + !wma_verify_rate_code(cfg_val, band)) { + WMA_LOGD("use default 5G MGMT rate."); per_band_mgmt_tx_rate &= ~(1 << TX_MGMT_RATE_5G_ENABLE_OFFSET); } else {