Переглянути джерело

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 роки тому
батько
коміт
0079d3e2b1
1 змінених файлів з 56 додано та 55 видалено
  1. 56 55
      mlme/dispatcher/src/wlan_mlme_api.c

+ 56 - 55
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 wma_tgt_vht_cap *cfg)
 {
 {
 	struct wlan_mlme_psoc_obj *mlme_obj;
 	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;
 	uint32_t value = 0;
 	bool hw_rx_ldpc_enabled;
 	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;
 		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:
 	 * VHT max MPDU length:
 	 * override if user configured value is too high
 	 * override if user configured value is too high
 	 * that the target cannot support
 	 * 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) |
 	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 */
 	 /* Set HW RX LDPC capability */
 	hw_rx_ldpc_enabled = !!cfg->vht_rx_ldpc;
 	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 */
 	/* 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 */
 	/* 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 */
 	/* 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 */
 	/* 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 */
 	/* 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 */
 	/* 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 */
 	/* 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:
 	 * 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
 	 * Even though Rome publish ampdu_len=7, it can
 	 * only support 4 because of some h/w bug.
 	 * 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 */
 	/* 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 */
 	/* 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;
 	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)
 QDF_STATUS mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc)
 {
 {
 	struct wlan_mlme_psoc_obj *mlme_obj;
 	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;
 	uint32_t temp = 0;
 
 
 	mlme_obj = mlme_get_psoc_obj(psoc);
 	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;
 		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
 	else
 		temp |= 0x000C;
 		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
 	else
 		temp |= 0x000C;
 		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
 	else
 		temp |= 0x000C;
 		temp |= 0x000C;
 
 
-	vht_cap_info.tx_mcs_map = temp;
+	vht_cap_info->tx_mcs_map = temp;
 
 
 	return QDF_STATUS_SUCCESS;
 	return QDF_STATUS_SUCCESS;
 }
 }