From 19856d1d3fb07075d7713e8b7c770a1d2b60b993 Mon Sep 17 00:00:00 2001 From: Bapiraju Alla Date: Mon, 26 Jul 2021 07:17:25 -0700 Subject: [PATCH] qcacld-3.0: MLO connect path fixes Fixes in this change include: - Add debug prints - Don't disable roaming in case of MLO link connection - Minor compilation fixes Change-Id: I0aa9e8b2fd634b6dba1926796d95db997946aac3 CRs-fixed: 3013039 --- .../interface_mgr/src/wlan_if_mgr_sta.c | 22 +++++------ core/mac/src/include/parser_api.h | 2 +- core/mac/src/pe/lim/lim_assoc_utils.c | 2 +- .../src/pe/lim/lim_process_sme_req_messages.c | 6 +++ .../src/sys/legacy/src/utils/src/parser_api.c | 39 ++++++++++--------- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c index bbf0e49021..c5492369b8 100644 --- a/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c +++ b/components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -75,16 +75,16 @@ QDF_STATUS if_mgr_connect_start(struct wlan_objmgr_vdev *vdev, if (!ucfg_nan_is_sta_nan_ndi_4_port_allowed(psoc)) ucfg_nan_check_and_disable_unsupported_ndi(psoc, false); - - /* - * In case of STA+STA concurrency, firmware might try to roam - * to same AP where host is trying to do association on the other - * STA iface. Roaming is disabled on all the ifaces to avoid - * this scenario. - */ - if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START); - - wlan_tdls_teardown_links_sync(psoc); + if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev)) { + /* + * In case of STA+STA concurrency, firmware might try to roam + * to same AP where host is trying to do association on the other + * STA iface. Roaming is disabled on all the ifaces to avoid + * this scenario. + */ + if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START); + wlan_tdls_teardown_links_sync(psoc); + } return QDF_STATUS_SUCCESS; } diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index ff8ac5375a..569ca7ca82 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -302,7 +302,7 @@ typedef struct sSirProbeRespBeacon { uint8_t num_transmit_power_env; tDot11fIEtransmit_power_env transmit_power_env[MAX_TPE_IES]; uint8_t ap_power_type; - tpSirMultiLink_IE mlo_ie; + tSirMultiLink_IE mlo_ie; } tSirProbeRespBeacon, *tpSirProbeRespBeacon; /* probe Request structure */ diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 31d4a7e581..576dd1c3ba 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -4317,7 +4317,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta, pe_session->peSessionId, pe_session->limMlmState)); } - if (mlo_conn && !mlo_recv_assoc_frm) + if (mlo_conn && !mlo_recv_assoc_frm && LIM_IS_AP_ROLE(pe_session)) return; lim_send_del_sta_cnf(mac, sta_dsaddr, staDsAssocId, mlmStaContext, diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index 7a1c53d179..f33d78390d 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -3640,6 +3640,8 @@ static void lim_fill_ml_partner_info(struct cm_vdev_join_req *req, return; } num_links = req->partner_info.num_partner_links; + partner_info->num_partner_links = num_links; + pe_debug("MLO: num_links:%d", num_links); for (idx = 0; idx < num_links; idx++) { partner_info->partner_link_info[idx].link_id = @@ -3647,6 +3649,10 @@ static void lim_fill_ml_partner_info(struct cm_vdev_join_req *req, qdf_copy_macaddr( &partner_info->partner_link_info[idx].link_addr, &req->partner_info.partner_link_info[idx].link_addr); + pe_debug("MLO: link_id:%d" QDF_MAC_ADDR_FMT, + partner_info->partner_link_info[idx].link_id, + QDF_MAC_ADDR_REF(partner_info->partner_link_info[idx]. + link_addr.bytes)); } } #else diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 7fda2f0967..b6cae14014 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -2972,7 +2972,7 @@ QDF_STATUS sir_convert_probe_frame2_struct(struct mac_context *mac, } update_bss_color_change_ie_from_probe_rsp(pr, pProbeResp); - sir_convert_mlo_probe_rsp_frame2_struct(pr, pProbeResp->mlo_ie); + sir_convert_mlo_probe_rsp_frame2_struct(pr, &pProbeResp->mlo_ie); qdf_mem_free(pr); return QDF_STATUS_SUCCESS; @@ -6731,7 +6731,7 @@ sir_convert_mlo_reassoc_req_frame2_struct(struct mac_context *mac, tpSirAssocReq pAssocReq, uint8_t link_id) { - /* TDMLO much more like sir_convert_mlo_assoc_req_frame2_struct */ + /* TD MLO much more like sir_convert_mlo_assoc_req_frame2_struct */ return QDF_STATUS_SUCCESS; } @@ -8679,7 +8679,7 @@ QDF_STATUS populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx, struct pe_session *pe_session, tDot11fAssocRequest *frm) { - uint8_t link, sta_link; + uint8_t link; uint8_t num_sta_prof = 0, total_sta_prof; tDot11fIEmlo_ie *mlo_ie; tDot11fIEsta_profile *sta_prof; @@ -8714,38 +8714,37 @@ QDF_STATUS populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx, qdf_mem_copy(&mlo_ie->mld_mac_addr.info.mld_mac_addr, mld_addr, QDF_MAC_ADDR_SIZE); - mlo_ie->link_id_info_present = 1; - mlo_ie->link_id_info.info.link_id = - pe_session->vdev->mlo_dev_ctx->mld_id; - + mlo_ie->link_id_info_present = 0; mlo_ie->bss_param_change_cnt_present = 0; mlo_ie->medium_sync_delay_info_present = 0; mlo_ie->eml_capab_present = 0; mlo_ie->mld_capab_present = 0; - //find out number of links from bcn or prb rsp + /* find out number of links from bcn or prb rsp */ total_sta_prof = 2; partner_info = &pe_session->lim_join_req->partner_info; - for (link = 0, sta_link = 1; + mlo_dev_ctx = pe_session->vdev->mlo_dev_ctx; + if (!mlo_dev_ctx) { + pe_err("mlo_dev_ctx is null"); + return QDF_STATUS_E_NULL_VALUE; + } + + for (link = 0; link < total_sta_prof && total_sta_prof != num_sta_prof; - link++, sta_link++) { + link++) { if (!partner_info->num_partner_links) continue; - sta_prof = &mlo_ie->sta_profile[num_sta_prof]; - link_info = &partner_info->partner_link_info[link]; - mlo_dev_ctx = pe_session->vdev->mlo_dev_ctx; - if (!mlo_dev_ctx) { - pe_err("mlo_dev_ctx is null"); - return QDF_STATUS_E_NULL_VALUE; - } - vdev = mlo_dev_ctx->wlan_vdev_list[sta_link]; + vdev = mlo_dev_ctx->wlan_vdev_list[1]; if (!vdev) { pe_err("vdev is null"); return QDF_STATUS_E_NULL_VALUE; } + sta_prof = &mlo_ie->sta_profile[num_sta_prof]; + link_info = &partner_info->partner_link_info[link]; + qdf_mem_zero(non_inher_ie_lists, sizeof(non_inher_ie_lists)); qdf_mem_zero(non_inher_ext_ie_lists, sizeof(non_inher_ext_ie_lists)); @@ -8758,6 +8757,10 @@ QDF_STATUS populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx, vdev->vdev_mlme.macaddr, QDF_MAC_ADDR_SIZE); + pe_debug("link mac: "QDF_MAC_ADDR_FMT, vdev->vdev_mlme.macaddr); + pe_debug("STA prof mac: "QDF_MAC_ADDR_FMT, + sta_prof->sta_mac_addr.info.sta_mac_addr); + /* TBD : populate beacon_interval, dtim_info * nstr_link_pair_present, nstr_bitmap_size */