qcacld-3.0: Change WMI force mode for ML link switch case
Currently, to switch links from link A to link B, Host sends two back-to-back WMI commands to FW, by setting link B force active and link A force inactive respectively with force mode MLO_LINK_FORCE_MODE_ACTIVE/MLO_LINK_FORCE_MODE_INACTIVE but if association is in EMLSR mode, FW considers the first WMI to set link B active (when link A is already set active) to be a trigger to enter EMLSR mode and sends OMN frame as part of it. To avoid this, Host has to send a single WMI with force mode MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE and include both active and inactive vdev bitmaps within the same command to clearly indicate the link switch. Change-Id: Iae58fedc800c891625d737daf238fa476382f4a1 CRs-Fixed: 3487826
This commit is contained in:

committed by
Rahul Choudhary

parent
daae501ffb
commit
01fcda20bf
@@ -7317,21 +7317,22 @@ void policy_mgr_activate_mlo_links(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
|
||||
/*
|
||||
* Invoke Force active link cmd first, followed by Force inactive link
|
||||
* cmd. This ensures that there is atleast 1 link active at any given
|
||||
* time.
|
||||
* If there are both active and inactive vdev count, then issue a
|
||||
* single WMI with force mode MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE,
|
||||
* else if there is only active vdev count, send single WMI for
|
||||
* all active vdevs with force mode MLO_LINK_FORCE_MODE_ACTIVE.
|
||||
*/
|
||||
if (active_vdev_cnt)
|
||||
if (active_vdev_cnt && inactive_vdev_cnt)
|
||||
policy_mgr_mlo_sta_set_link_ext(
|
||||
psoc, MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_ACTIVE_INACTIVE,
|
||||
active_vdev_cnt, active_vdev_lst,
|
||||
inactive_vdev_cnt, inactive_vdev_lst);
|
||||
else if (active_vdev_cnt && !inactive_vdev_cnt)
|
||||
policy_mgr_mlo_sta_set_link(psoc,
|
||||
MLO_LINK_FORCE_REASON_DISCONNECT,
|
||||
MLO_LINK_FORCE_MODE_ACTIVE,
|
||||
active_vdev_cnt,
|
||||
active_vdev_lst);
|
||||
if (inactive_vdev_cnt)
|
||||
policy_mgr_mlo_sta_set_link(psoc, MLO_LINK_FORCE_REASON_CONNECT,
|
||||
MLO_LINK_FORCE_MODE_INACTIVE,
|
||||
inactive_vdev_cnt,
|
||||
inactive_vdev_lst);
|
||||
active_vdev_cnt, active_vdev_lst);
|
||||
|
||||
for (idx = 0; idx < ml_vdev_cnt; idx++)
|
||||
mlo_release_vdev_ref(tmp_vdev_lst[idx]);
|
||||
|
Reference in New Issue
Block a user