qcacld-3.0: Clear whole operations bitmap when RSO deinit
To avoid roaming enable failed for operations bitmap set/clear mismatch for SAP+STA or STA+STA concurrency, clear whole operations bitmap when RSO deinit, then roaming can be enabled again after STA disconnect and reconnect. Add log when set/get operations bitmap to help debug. Change-Id: Ie1f1a213dcdefb393ec3e1e2c6a8a71ab17b226c CRs-Fixed: 2834199
This commit is contained in:
@@ -661,11 +661,21 @@ mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
|
||||
* @reqs: RSO stop requestor
|
||||
* @clear: clear bit if true else set bit
|
||||
*
|
||||
* Return: bitmap value
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
enum wlan_cm_rso_control_requestor reqs, bool clear);
|
||||
/**
|
||||
* mlme_clear_operations_bitmap() - Clear mlme operations bitmap which
|
||||
* indicates what mlme operations are in progress
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: vdev for which the mlme operation bitmap is requested
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
mlme_clear_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
|
||||
|
||||
#define MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id) \
|
||||
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_RSO_ENABLED)
|
||||
|
@@ -2837,6 +2837,8 @@ mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||
}
|
||||
|
||||
bitmap = mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap;
|
||||
mlme_legacy_debug("vdev[%d] bitmap[0x%x]", vdev_id,
|
||||
mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
|
||||
return bitmap;
|
||||
@@ -2867,6 +2869,34 @@ mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap &= ~reqs;
|
||||
else
|
||||
mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap |= reqs;
|
||||
|
||||
mlme_legacy_debug("vdev[%d] bitmap[0x%x], reqs: %d, clear: %d", vdev_id,
|
||||
mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap,
|
||||
reqs, clear);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
}
|
||||
|
||||
void
|
||||
mlme_clear_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_OBJMGR_ID);
|
||||
if (!vdev) {
|
||||
mlme_legacy_err("vdev object is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
return;
|
||||
}
|
||||
|
||||
mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap = 0;
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user