Bläddra i källkod

qcacld-3.0: Fix logic to calculate max number of NSS supported

Logic to calculate max chainmask supported is used to calculate
max NSS and thus when NSS passed is 2 the firmware was sent value
3 which is causing firmware crash as max NSS supported is 2.

To fix, added logic that if NSS is greater than WMA_MAX_NSS(2) make
it WMA_MAX_NSS.

Change-Id: Ic7ff541b60434c0ce501d245462cd45e62dd9403
CRs-Fixed: 2033675
Abhishek Singh 8 år sedan
förälder
incheckning
9100cc8c2f
2 ändrade filer med 6 tillägg och 2 borttagningar
  1. 2 0
      core/wma/inc/wma.h
  2. 4 2
      core/wma/src/wma_mgmt.c

+ 2 - 0
core/wma/inc/wma.h

@@ -226,6 +226,8 @@ enum ds_mode {
 
 #define WMA_MAX_RF_CHAINS(x)    ((1 << x) - 1)
 #define WMA_MIN_RF_CHAINS               (1)
+#define WMA_MAX_NSS               (2)
+
 
 #ifdef FEATURE_WLAN_EXTSCAN
 #define WMA_MAX_EXTSCAN_MSG_SIZE        1536

+ 4 - 2
core/wma/src/wma_mgmt.c

@@ -1243,7 +1243,8 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma,
 	 * Limit nss to max number of rf chain supported by target
 	 * Otherwise Fw will crash
 	 */
-	wma_update_txrx_chainmask(wma->num_rf_chains, &cmd->peer_nss);
+	if (cmd->peer_nss > WMA_MAX_NSS)
+		cmd->peer_nss = WMA_MAX_NSS;
 
 	wma_populate_peer_he_cap(cmd, params);
 
@@ -2772,7 +2773,8 @@ void wma_process_update_rx_nss(tp_wma_handle wma_handle,
 		&wma_handle->interfaces[update_rx_nss->smesessionId];
 	int rx_nss = update_rx_nss->rxNss;
 
-	wma_update_txrx_chainmask(wma_handle->num_rf_chains, &rx_nss);
+	if (rx_nss > WMA_MAX_NSS)
+		rx_nss = WMA_MAX_NSS;
 
 	intr->nss = (uint8_t)rx_nss;
 	update_rx_nss->rxNss = (uint32_t)rx_nss;