qcacld-3.0: Let IOT APs recover by avoiding back to back DELBA

Station sends the BA and upgrades to the next possible BA window
size upon receiving all frames successfully from the current
window. Some IOT APs go out of sync from BA window size of the
station when AP fails to receive the BA sent from station. AP
transmits the frames again with previous window sequence number
and won't be ack'ed by station hardware as BA window has already
moved ahead. So, station deletes the upgraded BA and tries
to fallback.

Ideally, AP is supposed to consider the fact that "the previous
window transmission was successful when station upgrades to next
window size". But some APs take little longer time to
recover/upgrade to next window size. Don't delete the BA
immediately and have some tolerance(3 seconds) as the previous
negotiated BA just got deleted.

Change-Id: I6b277223f02dac521316cec20bd5d958785cc2e9
CRs-Fixed: 2970714
This commit is contained in:
Srinivas Dasari
2021-07-01 00:01:01 +05:30
committed by Madan Koyyalamudi
parent 14d84bf050
commit c65ead975b
6 changed files with 150 additions and 0 deletions

View File

@@ -3240,4 +3240,43 @@ wlan_mlme_is_data_stall_recovery_fw_supported(struct wlan_objmgr_psoc *psoc);
*/
QDF_STATUS mlme_cfg_get_eht_caps(struct wlan_objmgr_psoc *psoc,
tDot11fIEeht_cap *eht_cap);
/**
* wlan_mlme_set_ba_2k_jump_iot_ap() - Set a flag if ba 2k jump IOT AP is found
* @vdev: vdev pointer
* @found: Carries the value true if ba 2k jump IOT AP is found
*
* Return: QDF Status
*/
QDF_STATUS
wlan_mlme_set_ba_2k_jump_iot_ap(struct wlan_objmgr_vdev *vdev, bool found);
/**
* wlan_mlme_is_ba_2k_jump_iot_ap() - Check if ba 2k jump IOT AP is found
* @vdev: vdev pointer
*
* Return: true if ba 2k jump IOT AP is found
*/
bool
wlan_mlme_is_ba_2k_jump_iot_ap(struct wlan_objmgr_vdev *vdev);
/**
* wlan_mlme_set_last_delba_sent_time() - Cache the last delba sent ts
* @vdev: vdev pointer
* @delba_sent_time: Last delba sent timestamp
*
* Return: QDF Status
*/
QDF_STATUS
wlan_mlme_set_last_delba_sent_time(struct wlan_objmgr_vdev *vdev,
qdf_time_t delba_sent_time);
/**
* wlan_mlme_get_last_delba_sent_time() - Get the last delba sent ts
* @vdev: vdev pointer
*
* Return: Last delba timestamp if cached, 0 otherwise
*/
qdf_time_t
wlan_mlme_get_last_delba_sent_time(struct wlan_objmgr_vdev *vdev);
#endif /* _WLAN_MLME_API_H_ */