qcacld-3.0: Set dp peer flags for mlo roaming

During MLO roaming, non-assoc link is processed first.
Set the dp peer info flags:
- Non-assoc link: is_first_link = True and is_primary_link = False
- Assoc link: is_first_link = False and is_primary_link = True

For legacy to MLO roaming add checks for link vdev processing
during add sta resp and delete bss peer.

Change-Id: I602e4bc03c09b5d8dd35016448eabfaa3ff5acfa
CRs-Fixed: 3129304
This commit is contained in:
Amruta Kulkarni
2022-02-11 17:09:02 -08:00
committed by Madan Koyyalamudi
parent 64300680c5
commit 6ce2f89512

View File

@@ -1915,7 +1915,8 @@ QDF_STATUS wma_add_peer(tp_wma_handle wma,
if (peer_type == WMI_PEER_TYPE_TDLS)
cdp_peer_set_peer_as_tdls(dp_soc, vdev_id, peer_addr, true);
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id) ||
MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
wma_debug("LFR3: Created peer "QDF_MAC_ADDR_FMT" vdev_id %d, peer_count %d",
QDF_MAC_ADDR_REF(peer_addr), vdev_id,
wma->interfaces[vdev_id].peer_count + 1);
@@ -1989,8 +1990,19 @@ static void wma_cdp_peer_setup(tp_wma_handle wma,
qdf_mem_zero(&peer_info, sizeof(peer_info));
peer_info.mld_peer_mac = mld_mac;
if (MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id) &&
wlan_vdev_mlme_get_is_mlo_link(wma->psoc, vdev_id)) {
peer_info.is_first_link = 1;
peer_info.is_primary_link = 0;
} else if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id) &&
wlan_vdev_mlme_get_is_mlo_vdev(wma->psoc, vdev_id)) {
peer_info.is_first_link = 0;
peer_info.is_primary_link = 1;
} else {
peer_info.is_first_link = wlan_peer_mlme_is_assoc_peer(obj_peer);
peer_info.is_primary_link = peer_info.is_first_link;
}
cdp_peer_setup(dp_soc, vdev_id, peer_addr, &peer_info);
wlan_objmgr_peer_release_ref(obj_peer, WLAN_LEGACY_WMA_ID);
}
@@ -4645,6 +4657,8 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
}
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc,
params->smesessionId) ||
MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc,
params->smesessionId)) {
/* iface->nss = params->nss; */
/*In LFR2.0, the following operations are performed as
@@ -4839,8 +4853,11 @@ out:
wma_debug("vdev_id %d aid %d sta mac " QDF_MAC_ADDR_FMT " status %d",
params->smesessionId, params->assocId,
QDF_MAC_ADDR_REF(params->bssId), params->status);
/* Don't send a response during roam sync operation */
if (!MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, params->smesessionId))
if (!MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, params->smesessionId) &&
!MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc,
params->smesessionId))
wma_send_msg_high_priority(wma, WMA_ADD_STA_RSP,
(void *)params, 0);
}
@@ -5238,7 +5255,8 @@ void wma_delete_sta(tp_wma_handle wma, tpDeleteStaParams del_sta)
switch (oper_mode) {
case BSS_OPERATIONAL_MODE_STA:
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id) ||
MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
wma_debug("LFR3: Del STA on vdev_id %d", vdev_id);
qdf_mem_free(del_sta);
return;
@@ -5516,7 +5534,8 @@ void wma_delete_bss(tp_wma_handle wma, uint8_t vdev_id)
qdf_mem_free(roam_scan_stats_req);
}
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
if (MLME_IS_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id) ||
MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id)) {
roam_synch_in_progress = true;
wma_debug("LFR3: Setting vdev_up to FALSE for vdev:%d",
vdev_id);
@@ -5568,6 +5587,10 @@ detach_peer:
return;
out:
/* skip when legacy to mlo roam sync ongoing */
if (MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(wma->psoc, vdev_id))
return;
params = qdf_mem_malloc(sizeof(*params));
if (!params)
return;