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:

committed by
Madan Koyyalamudi

parent
49133bc2ab
commit
19856d1d3f
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user