Procházet zdrojové kódy

qcacld-3.0: Fix CSA process WBW IE bandwidth issue

During channel switch, firmware reports CSA offload event,
driver will process wbw IE and set phy mode into firmware.
Now driver only processes case that frequency segment0 above
current primary channel. So device will use bandwidth which
is mismatched with AP after channel switch. It will cause data
transaction failure. Change to support frequency segment0 below
primary channel.

Change-Id: Ie879ceb8eadbe92f6519886dc30fb2c065ddbc40
CRs-Fixed: 2684883
Zhaoyang Liu před 4 roky
rodič
revize
7d713f4ae4
1 změnil soubory, kde provedl 4 přidání a 5 odebrání
  1. 4 5
      core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

+ 4 - 5
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -1465,7 +1465,7 @@ static QDF_STATUS lim_process_csa_wbw_ie(struct mac_context *mac_ctx,
 		eLIM_CHANNEL_SWITCH_PRIMARY_AND_SECONDARY;
 	if ((ap_new_ch_width == CH_WIDTH_160MHZ) &&
 			!new_ch_width_dfn) {
-		if (csa_params->new_ch_freq_seg1 != csa_params->channel +
+		if (abs(csa_params->new_ch_freq_seg1 - csa_params->channel) !=
 				CH_TO_CNTR_FREQ_DIFF_160MHz) {
 			pe_err("CSA wide BW IE has invalid center freq");
 			return QDF_STATUS_E_INVAL;
@@ -1488,7 +1488,7 @@ static QDF_STATUS lim_process_csa_wbw_ie(struct mac_context *mac_ctx,
 				 fw_vht_ch_wd);
 			ap_new_ch_width = fw_vht_ch_wd;
 		}
-		if (csa_params->new_ch_freq_seg1 != csa_params->channel +
+		if (abs(csa_params->new_ch_freq_seg1 - csa_params->channel) !=
 				CH_TO_CNTR_FREQ_DIFF_80MHz) {
 			pe_err("CSA wide BW IE has invalid center freq");
 			return QDF_STATUS_E_INVAL;
@@ -1496,7 +1496,7 @@ static QDF_STATUS lim_process_csa_wbw_ie(struct mac_context *mac_ctx,
 		csa_params->new_ch_freq_seg2 = 0;
 	}
 	if (new_ch_width_dfn) {
-		if (csa_params->new_ch_freq_seg1 != csa_params->channel +
+		if (abs(csa_params->new_ch_freq_seg1 - csa_params->channel) !=
 				CH_TO_CNTR_FREQ_DIFF_80MHz) {
 			pe_err("CSA wide BW IE has invalid center freq");
 			return QDF_STATUS_E_INVAL;
@@ -1507,8 +1507,7 @@ static QDF_STATUS lim_process_csa_wbw_ie(struct mac_context *mac_ctx,
 			ap_new_ch_width = fw_vht_ch_wd;
 		}
 		if ((ap_new_ch_width == CH_WIDTH_160MHZ) &&
-				(csa_params->new_ch_freq_seg1 !=
-				 csa_params->channel +
+		    (abs(csa_params->new_ch_freq_seg1 - csa_params->channel) !=
 				 CH_TO_CNTR_FREQ_DIFF_160MHz)) {
 			pe_err("wide BW IE has invalid 160M center freq");
 			csa_params->new_ch_freq_seg2 = 0;