qcacld-3.0: Handle eMLSR concurrency

In NAN+eMLSR concurrency, when NAN is already present
and if eMLSR comes. Host disables(by sending
MLO_LINK_FORCE_MODE_INACTIVE_NUM) one link only after
both vdev up. But there is a race condition where
firmware enters to emlsr mode just after link vdev up
and host sends the disable command after
WMI_VDEV_INSTALL_KEY_CMDID. This causes inconsistency
in firmware eMLSR state machine. Firmware asserts as
other mac is occupied by NAN and eMLSR module tries to
change the hw mode to eMLSR mode. Both mac's should be
free/available for eMLSR STA operation when firmware
tries to switch hw mode to eMLSR.

As part of fix, Host to send mlo_force_link_inactive=1
in peer assoc command of link vdev to indicate firmware
not to enter in eMLSR mode. Host shall disable one link
as part of concurrency evaluation post connection anyway.
Once the concurrency is gone, host to enable both links
to let firmware enter into eMLSR hw_mode.

Change-Id: I0ee141b51868a3c5c5d9ff6cf1bd3765bc450fa4
CRs-Fixed: 3527911
Este commit está contenido en:
Jyoti Kumari
2023-06-15 15:19:28 +05:30
cometido por Rahul Choudhary
padre c7b86575c5
commit 30ca608b32
Se han modificado 3 ficheros con 29 adiciones y 2 borrados

Ver fichero

@@ -1288,6 +1288,26 @@ QDF_STATUS policy_mgr_wait_for_set_link_update(struct wlan_objmgr_psoc *psoc);
*/
uint32_t
policy_mgr_get_active_vdev_bitmap(struct wlan_objmgr_psoc *psoc);
/**
* policy_mgr_is_emlsr_sta_concurrency_present() - Check whether eMLSR
* concurrency is present or not.
* @psoc: PSOC object information
*
* This API is to check if any other concurrency is present when an eMLSR
* STA connection is about to complete(i.e. when first link is connected
* and second link is coming up). This helps to let the eMLSR connection
* happen but not let firmware enter into eMLSR hw mode by sending
* mlo_force_link_inactive=1 in peer_assoc of link when other concurrency is
* present.
*
* Host driver shall disable the one link post connection anyway if concurrency
* is present. Once the concurrency is gone, policy_mgr shall evaluate and
* re-enable links to let firmware go to eMLSR hw mode.
*
* Return: true is it's allow otherwise false
*/
bool policy_mgr_is_emlsr_sta_concurrency_present(struct wlan_objmgr_psoc *psoc);
#else
static inline bool
policy_mgr_is_ml_vdev_id(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
@@ -1335,6 +1355,12 @@ policy_mgr_get_active_vdev_bitmap(struct wlan_objmgr_psoc *psoc)
{
return 0;
}
static inline bool
policy_mgr_is_emlsr_sta_concurrency_present(struct wlan_objmgr_psoc *psoc)
{
return false;
}
#endif
/**

Ver fichero

@@ -6378,7 +6378,7 @@ void policy_mgr_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc *psoc,
num_mlo, mlo_vdev_lst);
}
static bool
bool
policy_mgr_is_emlsr_sta_concurrency_present(struct wlan_objmgr_psoc *psoc)
{
uint8_t num_mlo = 0;