Browse Source

qcacld-3.0: Fix he case failed

lim_check_oui_and_update_session call location is changed by
Change-Id: Ib99072c36b72859cb1f8a4336f8aa7f696cb7d02.
session->nss is initialized in lim_check_oui_and_update_session,
it should be called before lim_extract_ap_capability->
lim_check_is_he_mcs_valid, or he capable of session is disabled,
he cases will fail.

To fix it, lim_check_oui_and_update_session call location is changed back
to follow lim_join_req_update_ht_vht_caps.

Add new function lim_disable_bformee_for_iot to handle IoT issue,
since it need get channel width of session, let it be called after
lim_extract_ap_capability.

Change-Id: Ice1d86b3f6711a116b94cd139aae87f249c554d4
CRs-Fixed: 3600303
Jianmin Zhu 1 year ago
parent
commit
deeac31fbb
1 changed files with 35 additions and 13 deletions
  1. 35 13
      core/mac/src/pe/lim/lim_process_sme_req_messages.c

+ 35 - 13
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -1954,18 +1954,6 @@ static void lim_check_oui_and_update_session(struct mac_context *mac_ctx,
 		session->is_oui_auth_assoc_6mbps_2ghz_enable = true;
 	}
 
-	/* When connect to IoT AP with BW 160MHz and NSS 2,
-	 * disable Beamformee
-	 */
-	if (wlan_action_oui_search(mac_ctx->psoc,
-				   &vendor_ap_search_attr,
-				   ACTION_OUI_DISABLE_BFORMEE) &&
-	    session->nss == 2 && CH_WIDTH_160MHZ == session->ch_width) {
-		session->vht_config.su_beam_formee = 0;
-		session->vht_config.mu_beam_formee = 0;
-		pe_debug("IoT ap, NSS 2 BW 160, disable beamformee");
-	}
-
 	if (WLAN_REG_IS_24GHZ_CH_FREQ(bss_desc->chan_freq) &&
 	    !mac_ctx->mlme_cfg->vht_caps.vht_cap_info.b24ghz_band &&
 	    session->dot11mode == MLME_DOT11_MODE_11AC) {
@@ -3142,6 +3130,39 @@ static void lim_reset_self_ocv_caps(struct pe_session *session)
 
 }
 
+/**
+ * lim_disable_bformee_for_iot_ap() - disable bformee for iot ap
+ *@mac_ctx: mac context
+ *@session: pe session
+ *@bss_desc: bss descriptor
+ *
+ * When connect IoT AP with BW 160MHz and NSS 2, disable Beamformee
+ *
+ * Return: None
+ */
+static void
+lim_disable_bformee_for_iot_ap(struct mac_context *mac_ctx,
+			       struct pe_session *session,
+			       struct bss_description *bss_desc)
+{
+	struct action_oui_search_attr vendor_ap_search_attr;
+	uint16_t ie_len;
+
+	ie_len = wlan_get_ielen_from_bss_description(bss_desc);
+
+	vendor_ap_search_attr.ie_data = (uint8_t *)&bss_desc->ieFields[0];
+	vendor_ap_search_attr.ie_length = ie_len;
+
+	if (wlan_action_oui_search(mac_ctx->psoc,
+				   &vendor_ap_search_attr,
+				   ACTION_OUI_DISABLE_BFORMEE) &&
+	    session->nss == 2 && CH_WIDTH_160MHZ == session->ch_width) {
+		session->vht_config.su_beam_formee = 0;
+		session->vht_config.mu_beam_formee = 0;
+		pe_debug("IoT ap with BW 160 MHz NSS 2, disable Beamformee");
+	}
+}
+
 QDF_STATUS
 lim_fill_pe_session(struct mac_context *mac_ctx, struct pe_session *session,
 		    struct bss_description *bss_desc)
@@ -3266,6 +3287,7 @@ lim_fill_pe_session(struct mac_context *mac_ctx, struct pe_session *session,
 	lim_join_req_update_ht_vht_caps(mac_ctx, session, bss_desc,
 					ie_struct);
 
+	lim_check_oui_and_update_session(mac_ctx, session, ie_struct);
 	ese_ver_present = ie_struct->ESEVersion.present;
 
 	/* Copying of bssId is already done, while creating session */
@@ -3409,7 +3431,7 @@ lim_fill_pe_session(struct mac_context *mac_ctx, struct pe_session *session,
 		&session->gLimCurrentBssUapsd,
 		&local_power_constraint, session, &is_pwr_constraint);
 
-	lim_check_oui_and_update_session(mac_ctx, session, ie_struct);
+	lim_disable_bformee_for_iot_ap(mac_ctx, session, bss_desc);
 
 	mlme_obj->reg_tpc_obj.is_power_constraint_abs =
 						!is_pwr_constraint;