Browse Source

qcacld-3.0: Check user configuration to set HE MCS map

Check the user configuration setting to set HE MCS map.

Change-Id: Ia336384c0b468725478a1e9a53ff508ac206f4c7
CRs-Fixed: 2407594
Kiran Kumar Lokere 6 years ago
parent
commit
86277e7536
1 changed files with 28 additions and 10 deletions
  1. 28 10
      components/mlme/dispatcher/src/wlan_mlme_api.c

+ 28 - 10
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -508,6 +508,9 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
 	tDot11fIEhe_cap *he_cap = &wma_cfg->he_cap;
 	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
 	uint8_t value;
+	uint16_t tx_mcs_map = 0;
+	uint16_t rx_mcs_map = 0;
+	uint8_t nss;
 
 	if (!mlme_obj)
 		return QDF_STATUS_E_FAILURE;
@@ -740,23 +743,38 @@ QDF_STATUS mlme_update_tgt_he_caps_in_cfg(struct wlan_objmgr_psoc *psoc,
 	mlme_obj->cfg.he_caps.dot11_he_cap.rx_full_bw_su_he_mu_non_cmpr_sigb =
 				he_cap->rx_full_bw_su_he_mu_non_cmpr_sigb;
 
-	if (cfg_in_range(CFG_HE_RX_MCS_MAP_LT_80, he_cap->rx_he_mcs_map_lt_80))
+	tx_mcs_map = he_cap->tx_he_mcs_map_lt_80;
+	rx_mcs_map = he_cap->rx_he_mcs_map_lt_80;
+	if (!mlme_obj->cfg.vht_caps.vht_cap_info.enable2x2) {
+		nss = 2;
+		tx_mcs_map = HE_SET_MCS_4_NSS(tx_mcs_map, HE_MCS_DISABLE, nss);
+		rx_mcs_map = HE_SET_MCS_4_NSS(rx_mcs_map, HE_MCS_DISABLE, nss);
+	}
+
+	if (cfg_in_range(CFG_HE_RX_MCS_MAP_LT_80, rx_mcs_map))
 		mlme_obj->cfg.he_caps.dot11_he_cap.rx_he_mcs_map_lt_80 =
-			he_cap->rx_he_mcs_map_lt_80;
-	if (cfg_in_range(CFG_HE_TX_MCS_MAP_LT_80, he_cap->tx_he_mcs_map_lt_80))
+			rx_mcs_map;
+	if (cfg_in_range(CFG_HE_TX_MCS_MAP_LT_80, tx_mcs_map))
 		mlme_obj->cfg.he_caps.dot11_he_cap.tx_he_mcs_map_lt_80 =
-			he_cap->tx_he_mcs_map_lt_80;
-	if (cfg_in_range(CFG_HE_RX_MCS_MAP_160,
-			 *((uint16_t *)he_cap->rx_he_mcs_map_160)))
+			tx_mcs_map;
+	tx_mcs_map = *((uint16_t *)he_cap->tx_he_mcs_map_160);
+	rx_mcs_map = *((uint16_t *)he_cap->rx_he_mcs_map_160);
+
+	if (!mlme_obj->cfg.vht_caps.vht_cap_info.enable2x2) {
+		nss = 2;
+		tx_mcs_map = HE_SET_MCS_4_NSS(tx_mcs_map, HE_MCS_DISABLE, nss);
+		rx_mcs_map = HE_SET_MCS_4_NSS(rx_mcs_map, HE_MCS_DISABLE, nss);
+	}
+
+	if (cfg_in_range(CFG_HE_RX_MCS_MAP_160, rx_mcs_map))
 		qdf_mem_copy(mlme_obj->cfg.he_caps.dot11_he_cap.
 			     rx_he_mcs_map_160,
-			     he_cap->rx_he_mcs_map_160, sizeof(uint16_t));
+			     &rx_mcs_map, sizeof(uint16_t));
 
-	if (cfg_in_range(CFG_HE_TX_MCS_MAP_160,
-			 *((uint16_t *)he_cap->tx_he_mcs_map_160)))
+	if (cfg_in_range(CFG_HE_TX_MCS_MAP_160, tx_mcs_map))
 		qdf_mem_copy(mlme_obj->cfg.he_caps.dot11_he_cap.
 			     tx_he_mcs_map_160,
-			     he_cap->tx_he_mcs_map_160, sizeof(uint16_t));
+			     &tx_mcs_map, sizeof(uint16_t));
 
 	if (cfg_in_range(CFG_HE_RX_MCS_MAP_80_80,
 			 *((uint16_t *)he_cap->rx_he_mcs_map_80_80)))