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
This commit is contained in:
Bapiraju Alla
2021-07-26 07:17:25 -07:00
committed by Madan Koyyalamudi
parent 49133bc2ab
commit 19856d1d3f
5 changed files with 40 additions and 31 deletions

View File

@@ -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 * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * 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)) if (!ucfg_nan_is_sta_nan_ndi_4_port_allowed(psoc))
ucfg_nan_check_and_disable_unsupported_ndi(psoc, ucfg_nan_check_and_disable_unsupported_ndi(psoc,
false); false);
if (!wlan_vdev_mlme_is_mlo_link_vdev(vdev)) {
/* /*
* In case of STA+STA concurrency, firmware might try to roam * In case of STA+STA concurrency, firmware might try to roam
* to same AP where host is trying to do association on the other * to same AP where host is trying to do association on the other
* STA iface. Roaming is disabled on all the ifaces to avoid * STA iface. Roaming is disabled on all the ifaces to avoid
* this scenario. * this scenario.
*/ */
if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START); if_mgr_disable_roaming(pdev, vdev, RSO_CONNECT_START);
wlan_tdls_teardown_links_sync(psoc);
wlan_tdls_teardown_links_sync(psoc); }
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }

View File

@@ -302,7 +302,7 @@ typedef struct sSirProbeRespBeacon {
uint8_t num_transmit_power_env; uint8_t num_transmit_power_env;
tDot11fIEtransmit_power_env transmit_power_env[MAX_TPE_IES]; tDot11fIEtransmit_power_env transmit_power_env[MAX_TPE_IES];
uint8_t ap_power_type; uint8_t ap_power_type;
tpSirMultiLink_IE mlo_ie; tSirMultiLink_IE mlo_ie;
} tSirProbeRespBeacon, *tpSirProbeRespBeacon; } tSirProbeRespBeacon, *tpSirProbeRespBeacon;
/* probe Request structure */ /* probe Request structure */

View File

@@ -4317,7 +4317,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
pe_session->peSessionId, pe_session->peSessionId,
pe_session->limMlmState)); pe_session->limMlmState));
} }
if (mlo_conn && !mlo_recv_assoc_frm) if (mlo_conn && !mlo_recv_assoc_frm && LIM_IS_AP_ROLE(pe_session))
return; return;
lim_send_del_sta_cnf(mac, sta_dsaddr, staDsAssocId, mlmStaContext, lim_send_del_sta_cnf(mac, sta_dsaddr, staDsAssocId, mlmStaContext,

View File

@@ -3640,6 +3640,8 @@ static void lim_fill_ml_partner_info(struct cm_vdev_join_req *req,
return; return;
} }
num_links = req->partner_info.num_partner_links; 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++) { for (idx = 0; idx < num_links; idx++) {
partner_info->partner_link_info[idx].link_id = 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( qdf_copy_macaddr(
&partner_info->partner_link_info[idx].link_addr, &partner_info->partner_link_info[idx].link_addr,
&req->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 #else

View File

@@ -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); 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); qdf_mem_free(pr);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
@@ -6731,7 +6731,7 @@ sir_convert_mlo_reassoc_req_frame2_struct(struct mac_context *mac,
tpSirAssocReq pAssocReq, tpSirAssocReq pAssocReq,
uint8_t link_id) 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; 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, struct pe_session *pe_session,
tDot11fAssocRequest *frm) tDot11fAssocRequest *frm)
{ {
uint8_t link, sta_link; uint8_t link;
uint8_t num_sta_prof = 0, total_sta_prof; uint8_t num_sta_prof = 0, total_sta_prof;
tDot11fIEmlo_ie *mlo_ie; tDot11fIEmlo_ie *mlo_ie;
tDot11fIEsta_profile *sta_prof; 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, qdf_mem_copy(&mlo_ie->mld_mac_addr.info.mld_mac_addr,
mld_addr, mld_addr,
QDF_MAC_ADDR_SIZE); QDF_MAC_ADDR_SIZE);
mlo_ie->link_id_info_present = 1; mlo_ie->link_id_info_present = 0;
mlo_ie->link_id_info.info.link_id =
pe_session->vdev->mlo_dev_ctx->mld_id;
mlo_ie->bss_param_change_cnt_present = 0; mlo_ie->bss_param_change_cnt_present = 0;
mlo_ie->medium_sync_delay_info_present = 0; mlo_ie->medium_sync_delay_info_present = 0;
mlo_ie->eml_capab_present = 0; mlo_ie->eml_capab_present = 0;
mlo_ie->mld_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; total_sta_prof = 2;
partner_info = &pe_session->lim_join_req->partner_info; 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 < total_sta_prof && total_sta_prof != num_sta_prof;
link++, sta_link++) { link++) {
if (!partner_info->num_partner_links) if (!partner_info->num_partner_links)
continue; continue;
sta_prof = &mlo_ie->sta_profile[num_sta_prof]; vdev = mlo_dev_ctx->wlan_vdev_list[1];
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];
if (!vdev) { if (!vdev) {
pe_err("vdev is null"); pe_err("vdev is null");
return QDF_STATUS_E_NULL_VALUE; 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_ie_lists, sizeof(non_inher_ie_lists));
qdf_mem_zero(non_inher_ext_ie_lists, qdf_mem_zero(non_inher_ext_ie_lists,
sizeof(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, vdev->vdev_mlme.macaddr,
QDF_MAC_ADDR_SIZE); 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 /* TBD : populate beacon_interval, dtim_info
* nstr_link_pair_present, nstr_bitmap_size * nstr_link_pair_present, nstr_bitmap_size
*/ */