qcacld-3.0: Fix RSO state machine issues

For MLO connection, when disconnect is started as part of
link switch, host will send RSO STOP to FW.
Post disconnect complete host tries to enable RSO again on
the other connected STA. This is protected by link switch in
progress check to avoid sending RSO start on link vdev during
link switch. But when NB or SB disconnect is queued during link
switch, then link switch in progress flag is reset and RSO start
might go on the assoc vdev.

Do not enable RSO if disconnect is ongoing on same MLD.
Also while processing RSO stop response fw might send RSO stop
response on link vdev. Add handling to process RSO stop response
on other vdev belonging to same MLD

During roam sync if assoc rsp is received from unexpected peer
then abort roaming and send rso stop to FW,HO fail will clean
host CM state machine.

Change-Id: Ibd1f424c3dea80e50e70ebdf112ee2cf44868ebe
CRs-Fixed: 3626015
This commit is contained in:
Amruta Kulkarni
2023-09-27 16:59:06 -07:00
committed by Rahul Choudhary
parent c0099b3505
commit 06c7860fe1
10 changed files with 250 additions and 62 deletions

View File

@@ -168,7 +168,10 @@ if_mgr_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev)
{
struct wlan_objmgr_psoc *psoc;
uint8_t vdev_id;
uint8_t vdev_id = wlan_vdev_get_id(vdev);
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
return QDF_STATUS_E_FAILURE;
/*
* When link switch is in progress, don't send RSO Enable before vdev
@@ -183,10 +186,7 @@ if_mgr_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
return QDF_STATUS_E_FAILURE;
if (policy_mgr_is_sta_active_connection_exists(psoc) &&
wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE &&
mlo_is_enable_roaming_on_connected_sta_allowed(vdev)) {
vdev_id = wlan_vdev_get_id(vdev);
ifmgr_debug("Enable roaming on connected sta for vdev_id %d", vdev_id);
wlan_cm_enable_roaming_on_connected_sta(pdev, vdev_id);
policy_mgr_set_pcl_for_connected_vdev(psoc, vdev_id, true);
}