qcacld-3.0: Add logic to disable a link during STA connect/roam

Add logic to disable a link vdev if concurrency doesn't allow it.
Send mlo_force_link_inactive in peer assoc for this and add
it in deleted table on connection complete.

Also disable the link if roam sync indication indicate
that link is disabled.

Change-Id: Ib0615308a669a5fd9d2b8ef6f8ab3f50953f658d
CRs-Fixed: 3192728
This commit is contained in:
Abhishek Singh
2022-05-09 12:12:08 +05:30
committed by Madan Koyyalamudi
parent 12e3558871
commit 2b4bc8d5df
7 changed files with 93 additions and 6 deletions

View File

@@ -1039,6 +1039,18 @@ void policy_mgr_move_vdev_from_connection_to_disabled_tbl(
struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* policy_mgr_ml_link_vdev_need_to_be_disabled() - check if ml link need to be
* disabled during connection.
* @psoc: psoc
* @vdev: vdev
*
* Return: true if STA link is need to be disabled else false.
*/
bool
policy_mgr_ml_link_vdev_need_to_be_disabled(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev);
/**
* policy_mgr_handle_link_enable_disable_resp() - enable/disable a ml link
* @vdev: vdev
@@ -1069,6 +1081,13 @@ policy_mgr_move_vdev_from_disabled_to_connection_tbl(
struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id) {}
static inline bool
policy_mgr_ml_link_vdev_need_to_be_disabled(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{
return false;
}
static inline void
policy_mgr_move_vdev_from_connection_to_disabled_tbl(
struct wlan_objmgr_psoc *psoc,

View File

@@ -3225,6 +3225,31 @@ void policy_mgr_move_vdev_from_connection_to_disabled_tbl(
policy_mgr_add_to_disabled_links(pm_ctx, freq, mode, vdev_id);
}
bool
policy_mgr_ml_link_vdev_need_to_be_disabled(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev)
{
union conc_ext_flag conc_ext_flags;
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_STA_MODE)
return false;
/* Check only for link vdev */
if (!wlan_vdev_mlme_is_mlo_vdev(vdev) ||
!wlan_vdev_mlme_is_mlo_link_vdev(vdev))
return false;
conc_ext_flags.value = policy_mgr_get_conc_ext_flags(vdev, false);
/*
* For non-assoc link vdev set link as disabled if concurency is
* not allowed
*/
return !policy_mgr_allow_concurrency(psoc, PM_STA_MODE,
wlan_get_operation_chan_freq(vdev),
HW_MODE_20_MHZ,
conc_ext_flags.value);
}
static void
policy_mgr_enable_disable_link_from_vdev_bitmask(struct wlan_objmgr_psoc *psoc,
unsigned long enable_vdev_mask,