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:

cometido por
Rahul Choudhary

padre
c7b86575c5
commit
30ca608b32
@@ -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
|
||||
|
||||
/**
|
||||
|
@@ -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;
|
||||
|
Referencia en una nueva incidencia
Block a user