qcacld-3.0: Single link ML connection

Currently if link specific probe response generation fails
STA keeps sending probe requests until proper probe response
is received or join timeout failure. This results in ML
connection failure

Change is to continue with single link ML connection if probe
response generation for link/s by clearing partner link information.

Change-Id: Ia969501a3bdd1ac70e14f3a0eafd0752207b66da
CRs-Fixed: 3238861
This commit is contained in:
Amruta Kulkarni
2022-08-12 16:34:12 -07:00
gecommit door Madan Koyyalamudi
bovenliggende 6814198bae
commit 7ad653825e
5 gewijzigde bestanden met toevoegingen van 66 en 26 verwijderingen

Bestand weergeven

@@ -1440,7 +1440,9 @@ static void cm_process_connect_complete(struct wlan_objmgr_psoc *psoc,
QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP_104) ||
QDF_HAS_PARAM(ucast_cipher, WLAN_CRYPTO_CIPHER_WEP))) {
cm_csr_set_ss_none(vdev_id);
if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
if (wlan_vdev_mlme_is_mlo_link_vdev(vdev))
mlo_enable_rso(pdev, vdev, rsp);
else if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
cm_roam_start_init_on_connect(pdev, vdev_id);
} else {
if (rsp->is_wps_connection)
@@ -1462,7 +1464,6 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_pdev *pdev;
struct wlan_objmgr_psoc *psoc;
enum QDF_OPMODE op_mode;
QDF_STATUS status;
if (!vdev || !rsp) {
mlme_err("vdev or rsp is NULL");
@@ -1510,10 +1511,6 @@ cm_connect_complete_ind(struct wlan_objmgr_vdev *vdev,
wlan_cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_INIT,
REASON_CONNECT);
status = mlo_enable_rso(pdev, vdev);
if (QDF_IS_STATUS_ERROR(status))
return status;
return QDF_STATUS_SUCCESS;
}

Bestand weergeven

@@ -122,13 +122,15 @@ is_multi_link_roam(struct roam_offload_synch_ind *sync_ind);
*
* @pdev: pdev pointer
* @vdev: assoc vdev pointer
* @rsp: cm connect rsp
*
* This api will be called to enable RSO for MLO connection.
*
* Return: qdf_status success or fail
*/
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev);
struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_resp *rsp);
/**
* mlo_roam_copy_partner_info - copy partner link info to connect response
@@ -270,7 +272,8 @@ is_multi_link_roam(struct roam_offload_synch_ind *sync_ind)
static inline
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev)
struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_resp *rsp)
{
return QDF_STATUS_SUCCESS;
}

Bestand weergeven

@@ -373,17 +373,27 @@ bool is_multi_link_roam(struct roam_offload_synch_ind *sync_ind)
}
QDF_STATUS mlo_enable_rso(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_vdev *vdev)
struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_resp *rsp)
{
struct wlan_objmgr_vdev *assoc_vdev;
uint8_t num_partner_links;
if (wlan_vdev_mlme_is_mlo_link_vdev(vdev)) {
if (!rsp) {
mlo_err("Connect resp is null");
return QDF_STATUS_E_NULL_VALUE;
}
num_partner_links = rsp->ml_parnter_info.num_partner_links;
if (wlan_vdev_mlme_is_mlo_link_vdev(vdev) ||
!num_partner_links ||
num_partner_links == 1) {
assoc_vdev = wlan_mlo_get_assoc_link_vdev(vdev);
if (!assoc_vdev) {
mlo_err("Assoc vdev is null");
return QDF_STATUS_E_NULL_VALUE;
}
cm_roam_start_init_on_connect(pdev,
wlan_vdev_get_id(assoc_vdev));
}
@@ -410,6 +420,7 @@ mlo_roam_copy_partner_info(struct wlan_cm_connect_resp *connect_rsp,
&partner_info->partner_link_info[i].link_addr,
&sync_ind->ml_link[i].link_addr);
}
partner_info->num_partner_links = sync_ind->num_setup_links;
}
void