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
* 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;
}

View File

@@ -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 */

View File

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

View File

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

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);
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
*/