qcacmn: Enhancements for link switch connect

Introduce following for link switch disconnect:
    1) Connect request source.
    2) Connect request reason.

If the set MAC address response for new link is successful, post
connection on new link and transition the link switch state to
connecting. If the status of connection is successful, update
the state to link switch complete or else directly go for
deserializing link switch command and posting response to FW.

Based on the final state of link switch at the time of sending
FW response, send the appropirate status of link switch and reset
the state of link switch to idle post FW notify.

Don't unlink BSS incase of failure in connection.

Don't indicate connect results to userspace.

As we are already in serialization due to link switch,
don't serialize/deserialize connection command if it
is due to link switch.

Incase of race condition between link switch connect and
userspace connect/disconnect always abort link switch connect.

Change-Id: Ie350b52021c36802b82d6cb5f6f441fe1bd10458
CRs-Fixed: 3556529
This commit is contained in:
Vinod Kumar Pirla
2023-07-05 13:09:06 -07:00
committed by Rahul Choudhary
parent a147f231ea
commit 35ea97c560
9 changed files with 250 additions and 85 deletions

View File

@@ -1047,7 +1047,8 @@ static void osif_indcate_connect_results(struct wlan_objmgr_vdev *vdev,
static inline
bool osif_cm_is_unlink_bss_required(struct wlan_cm_connect_resp *rsp)
{
if (QDF_IS_STATUS_SUCCESS(rsp->connect_status))
if (QDF_IS_STATUS_SUCCESS(rsp->connect_status) ||
rsp->cm_id & CM_ID_LSWITCH_BIT)
return false;
if (rsp->reason == CM_NO_CANDIDATE_FOUND ||
@@ -1107,7 +1108,7 @@ QDF_STATUS osif_connect_handler(struct wlan_objmgr_vdev *vdev,
osif_check_and_unlink_bss(vdev, rsp);
status = osif_validate_connect_and_reset_src_id(osif_priv, rsp);
if (QDF_IS_STATUS_ERROR(status)) {
if (QDF_IS_STATUS_ERROR(status) || rsp->cm_id & CM_ID_LSWITCH_BIT) {
osif_cm_connect_comp_ind(vdev, rsp, OSIF_NOT_HANDLED);
return status;
}