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
2023-08-28 07:07:13 -07:00
зафіксовано Rahul Choudhary
джерело d270d9ebc3
коміт deeac31fbb

Переглянути файл

@@ -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;