qcacld-3.0: Check vdev up instead of connected when chang RSO
When roaming happens, vdev CM changes from CONNECTED to ROAMING first, vdev still keeps up, then RSO becomes ROAMING_IN_PROG later, so need permit RSO cmd during CM ROAMING state. Change-Id: If4902dcff6b8b4f169fb43da4a889b09e1c2875d CRs-Fixed: 3482158
This commit is contained in:

committed by
Madan Koyyalamudi

父節點
0487b4bd3e
當前提交
eb33a28d70
@@ -4628,7 +4628,7 @@ cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
return status;
|
||||
|
||||
if (wlan_vdev_mlme_is_mlo_vdev(vdev))
|
||||
is_up = mlo_check_if_all_links_up(vdev);
|
||||
is_up = mlo_check_if_all_vdev_up(vdev);
|
||||
else
|
||||
is_up = QDF_IS_STATUS_SUCCESS(wlan_vdev_is_up(vdev));
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
@@ -376,11 +376,23 @@ wlan_mlo_roam_abort_on_link(struct wlan_objmgr_psoc *psoc,
|
||||
* This api will check if all the requested links are in CM connected
|
||||
* state.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
* Return: bool, true: all links of mld connected
|
||||
*/
|
||||
bool
|
||||
mlo_check_if_all_links_up(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlo_check_if_all_vdev_up - Check if all vdev are up
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* This api will check if all the requested vdev are in up
|
||||
* state.
|
||||
*
|
||||
* Return: bool, true: all assoc/link vdevs of mld in UP state
|
||||
*/
|
||||
bool
|
||||
mlo_check_if_all_vdev_up(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlo_roam_set_link_id - set link id post roaming
|
||||
*
|
||||
@@ -538,6 +550,12 @@ mlo_check_if_all_links_up(struct wlan_objmgr_vdev *vdev)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
mlo_check_if_all_vdev_up(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void
|
||||
mlo_roam_set_link_id(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind)
|
||||
|
@@ -744,6 +744,40 @@ mlo_check_if_all_links_up(struct wlan_objmgr_vdev *vdev)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
mlo_check_if_all_vdev_up(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_mlo_dev_context *mlo_dev_ctx;
|
||||
struct wlan_mlo_sta *sta_ctx;
|
||||
uint8_t i;
|
||||
|
||||
if (!vdev || !vdev->mlo_dev_ctx) {
|
||||
mlo_err("Vdev is null");
|
||||
return false;
|
||||
}
|
||||
|
||||
mlo_dev_ctx = vdev->mlo_dev_ctx;
|
||||
sta_ctx = mlo_dev_ctx->sta_ctx;
|
||||
for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
|
||||
if (!mlo_dev_ctx->wlan_vdev_list[i])
|
||||
continue;
|
||||
|
||||
if (qdf_test_bit(i, sta_ctx->wlan_connected_links) &&
|
||||
!QDF_IS_STATUS_SUCCESS(wlan_vdev_is_up(mlo_dev_ctx->wlan_vdev_list[i]))) {
|
||||
mlo_debug("Vdev id %d is not in connected state",
|
||||
wlan_vdev_get_id(mlo_dev_ctx->wlan_vdev_list[i]));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (i == WLAN_UMAC_MLO_MAX_VDEVS) {
|
||||
mlo_debug("all links are up");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
mlo_roam_set_link_id(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind)
|
||||
|
Reference in New Issue
Block a user