Browse Source

qcacld-3.0: properly update vht caps in mlme vht caps

In mlme_update_vht_cap, local structure is updated instead of
mlme global structure for vht caps and thus the mlme vht caps
contains only the default values.

Fix this by updating mlme vht caps in mlme_update_vht_cap.

Change-Id: Ifa3d30ae202f1a4b6361db1a504861918f7ebf2c
CRs-Fixed: 2334955
Abhishek Singh 6 years ago
parent
commit
15997c7db6
1 changed files with 56 additions and 55 deletions
  1. 56 55
      components/mlme/dispatcher/src/wlan_mlme_api.c

+ 56 - 55
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -1791,7 +1791,7 @@ QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
 			       struct wma_tgt_vht_cap *cfg)
 {
 	struct wlan_mlme_psoc_obj *mlme_obj;
-	struct mlme_vht_capabilities_info vht_cap_info;
+	struct mlme_vht_capabilities_info *vht_cap_info;
 	uint32_t value = 0;
 	bool hw_rx_ldpc_enabled;
 
@@ -1801,64 +1801,65 @@ QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	vht_cap_info = mlme_obj->cfg.vht_caps.vht_cap_info;
+	vht_cap_info = &mlme_obj->cfg.vht_caps.vht_cap_info;
 
 	/*
 	 * VHT max MPDU length:
 	 * override if user configured value is too high
 	 * that the target cannot support
 	 */
-	if (vht_cap_info.ampdu_len > cfg->vht_max_mpdu)
-		vht_cap_info.ampdu_len = cfg->vht_max_mpdu;
+	if (vht_cap_info->ampdu_len > cfg->vht_max_mpdu)
+		vht_cap_info->ampdu_len = cfg->vht_max_mpdu;
 
 	value = (CFG_VHT_BASIC_MCS_SET_STADEF & VHT_MCS_1x1) |
-		vht_cap_info.basic_mcs_set;
-	if (vht_cap_info.enable2x2)
-		value = (value & VHT_MCS_2x2) | (vht_cap_info.rx_mcs2x2 << 2);
-	vht_cap_info.basic_mcs_set = value;
+		vht_cap_info->basic_mcs_set;
+	if (vht_cap_info->enable2x2)
+		value = (value & VHT_MCS_2x2) | (vht_cap_info->rx_mcs2x2 << 2);
+	vht_cap_info->basic_mcs_set = value;
 
-	value = (CFG_VHT_RX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info.rx_mcs;
-	if (vht_cap_info.enable2x2)
-		value = (value & VHT_MCS_2x2) | (vht_cap_info.rx_mcs2x2 << 2);
-	vht_cap_info.rx_mcs_map = value;
+	value = (CFG_VHT_RX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info->rx_mcs;
 
-	value = (CFG_VHT_TX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info.tx_mcs;
-	if (vht_cap_info.enable2x2)
-		value = (value & VHT_MCS_2x2) | (vht_cap_info.tx_mcs2x2 << 2);
-	vht_cap_info.tx_mcs_map = value;
+	if (vht_cap_info->enable2x2)
+		value = (value & VHT_MCS_2x2) | (vht_cap_info->rx_mcs2x2 << 2);
+	vht_cap_info->rx_mcs_map = value;
+
+	value = (CFG_VHT_TX_MCS_MAP_STADEF & VHT_MCS_1x1) | vht_cap_info->tx_mcs;
+	if (vht_cap_info->enable2x2)
+		value = (value & VHT_MCS_2x2) | (vht_cap_info->tx_mcs2x2 << 2);
+	vht_cap_info->tx_mcs_map = value;
 
 	 /* Set HW RX LDPC capability */
 	hw_rx_ldpc_enabled = !!cfg->vht_rx_ldpc;
-	if (hw_rx_ldpc_enabled != vht_cap_info.ldpc_coding_cap)
-		vht_cap_info.ldpc_coding_cap = hw_rx_ldpc_enabled;
+	if (hw_rx_ldpc_enabled != vht_cap_info->ldpc_coding_cap)
+		vht_cap_info->ldpc_coding_cap = hw_rx_ldpc_enabled;
 
 	/* set the Guard interval 80MHz */
-	if (vht_cap_info.short_gi_80mhz && !cfg->vht_short_gi_80)
-		vht_cap_info.short_gi_80mhz = cfg->vht_short_gi_80;
+	if (vht_cap_info->short_gi_80mhz && !cfg->vht_short_gi_80)
+		vht_cap_info->short_gi_80mhz = cfg->vht_short_gi_80;
 
 	/* Set VHT TX STBC cap */
-	if (vht_cap_info.tx_stbc && !cfg->vht_tx_stbc)
-		vht_cap_info.tx_stbc = cfg->vht_tx_stbc;
+	if (vht_cap_info->tx_stbc && !cfg->vht_tx_stbc)
+		vht_cap_info->tx_stbc = cfg->vht_tx_stbc;
 
 	/* Set VHT RX STBC cap */
-	if (vht_cap_info.rx_stbc && !cfg->vht_rx_stbc)
-		vht_cap_info.rx_stbc = cfg->vht_rx_stbc;
+	if (vht_cap_info->rx_stbc && !cfg->vht_rx_stbc)
+		vht_cap_info->rx_stbc = cfg->vht_rx_stbc;
 
 	/* Set VHT SU Beamformer cap */
-	if (vht_cap_info.su_bformer && !cfg->vht_su_bformer)
-		vht_cap_info.su_bformer = cfg->vht_su_bformer;
+	if (vht_cap_info->su_bformer && !cfg->vht_su_bformer)
+		vht_cap_info->su_bformer = cfg->vht_su_bformer;
 
 	/* check and update SU BEAMFORMEE capabality */
-	if (vht_cap_info.enable_txbf_20mhz && !cfg->vht_su_bformee)
-		vht_cap_info.su_bformee = cfg->vht_su_bformee;
+	if (vht_cap_info->enable_txbf_20mhz && !cfg->vht_su_bformee)
+		vht_cap_info->su_bformee = cfg->vht_su_bformee;
 
 	/* Set VHT MU Beamformer cap */
-	if (vht_cap_info.mu_bformer && !cfg->vht_mu_bformer)
-		vht_cap_info.mu_bformer = cfg->vht_mu_bformer;
+	if (vht_cap_info->mu_bformer && !cfg->vht_mu_bformer)
+		vht_cap_info->mu_bformer = cfg->vht_mu_bformer;
 
 	/* Set VHT MU Beamformee cap */
-	if (vht_cap_info.enable_mu_bformee && !cfg->vht_mu_bformee)
-		vht_cap_info.enable_mu_bformee = cfg->vht_mu_bformee;
+	if (vht_cap_info->enable_mu_bformee && !cfg->vht_mu_bformee)
+		vht_cap_info->enable_mu_bformee = cfg->vht_mu_bformee;
 
 	/*
 	 * VHT max AMPDU len exp:
@@ -1867,16 +1868,16 @@ QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
 	 * Even though Rome publish ampdu_len=7, it can
 	 * only support 4 because of some h/w bug.
 	 */
-	if (vht_cap_info.ampdu_len_exponent > cfg->vht_max_ampdu_len_exp)
-		vht_cap_info.ampdu_len_exponent = cfg->vht_max_ampdu_len_exp;
+	if (vht_cap_info->ampdu_len_exponent > cfg->vht_max_ampdu_len_exp)
+		vht_cap_info->ampdu_len_exponent = cfg->vht_max_ampdu_len_exp;
 
 	/* Set VHT TXOP PS CAP */
-	if (vht_cap_info.txop_ps && !cfg->vht_txop_ps)
-		vht_cap_info.txop_ps = cfg->vht_txop_ps;
+	if (vht_cap_info->txop_ps && !cfg->vht_txop_ps)
+		vht_cap_info->txop_ps = cfg->vht_txop_ps;
 
 	/* set the Guard interval 160MHz */
-	if (vht_cap_info.short_gi_160mhz && !cfg->vht_short_gi_160)
-		vht_cap_info.short_gi_160mhz = cfg->vht_short_gi_160;
+	if (vht_cap_info->short_gi_160mhz && !cfg->vht_short_gi_160)
+		vht_cap_info->short_gi_160mhz = cfg->vht_short_gi_160;
 
 	return QDF_STATUS_SUCCESS;
 
@@ -1885,7 +1886,7 @@ QDF_STATUS mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc,
 QDF_STATUS mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc)
 {
 	struct wlan_mlme_psoc_obj *mlme_obj;
-	struct mlme_vht_capabilities_info vht_cap_info;
+	struct mlme_vht_capabilities_info *vht_cap_info;
 	uint32_t temp = 0;
 
 	mlme_obj = mlme_get_psoc_obj(psoc);
@@ -1894,34 +1895,34 @@ QDF_STATUS mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc)
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	vht_cap_info = mlme_obj->cfg.vht_caps.vht_cap_info;
+	vht_cap_info = &mlme_obj->cfg.vht_caps.vht_cap_info;
 
-	temp = vht_cap_info.basic_mcs_set;
-	temp = (temp & 0xFFFC) | vht_cap_info.rx_mcs;
-	if (vht_cap_info.enable2x2)
-		temp = (temp & 0xFFF3) | (vht_cap_info.rx_mcs2x2 << 2);
+	temp = vht_cap_info->basic_mcs_set;
+	temp = (temp & 0xFFFC) | vht_cap_info->rx_mcs;
+	if (vht_cap_info->enable2x2)
+		temp = (temp & 0xFFF3) | (vht_cap_info->rx_mcs2x2 << 2);
 	else
 		temp |= 0x000C;
 
-	vht_cap_info.basic_mcs_set = temp;
+	vht_cap_info->basic_mcs_set = temp;
 
-	temp = vht_cap_info.rx_mcs_map;
-	temp = (temp & 0xFFFC) | vht_cap_info.rx_mcs;
-	if (vht_cap_info.enable2x2)
-		temp = (temp & 0xFFF3) | (vht_cap_info.rx_mcs2x2 << 2);
+	temp = vht_cap_info->rx_mcs_map;
+	temp = (temp & 0xFFFC) | vht_cap_info->rx_mcs;
+	if (vht_cap_info->enable2x2)
+		temp = (temp & 0xFFF3) | (vht_cap_info->rx_mcs2x2 << 2);
 	else
 		temp |= 0x000C;
 
-	vht_cap_info.rx_mcs_map = temp;
+	vht_cap_info->rx_mcs_map = temp;
 
-	temp = vht_cap_info.tx_mcs_map;
-	temp = (temp & 0xFFFC) | vht_cap_info.tx_mcs;
-	if (vht_cap_info.enable2x2)
-		temp = (temp & 0xFFF3) | (vht_cap_info.tx_mcs2x2 << 2);
+	temp = vht_cap_info->tx_mcs_map;
+	temp = (temp & 0xFFFC) | vht_cap_info->tx_mcs;
+	if (vht_cap_info->enable2x2)
+		temp = (temp & 0xFFF3) | (vht_cap_info->tx_mcs2x2 << 2);
 	else
 		temp |= 0x000C;
 
-	vht_cap_info.tx_mcs_map = temp;
+	vht_cap_info->tx_mcs_map = temp;
 
 	return QDF_STATUS_SUCCESS;
 }