qcacmn: Do not honor addba response Tx failure in roaming

Add callback to get the roaming status and do not honor addba
response Tx failure.

Change-Id: I148542fc3c629749fc08623f5041f6ca76fee298
CRs-Fixed: 2439721
This commit is contained in:
Manjunathappa Prakash 2019-05-23 17:35:12 -07:00 • committed by nshrivas
commit 85de96c698
3 changed files with 26 additions and 5 deletions

View file

@ -965,6 +965,8 @@ struct ol_if_ops {
uint8_t *dest_macaddr,
uint8_t *peer_macaddr,
uint32_t flags);
bool (*is_roam_inprogress)(uint32_t vdev_id);
/* TODO: Add any other control path calls required to OL_IF/WMA layer */
};

View file

@ -771,6 +771,12 @@ void dp_local_peer_id_pool_init(struct dp_pdev *pdev);
void dp_local_peer_id_alloc(struct dp_pdev *pdev, struct dp_peer *peer);
void dp_local_peer_id_free(struct dp_pdev *pdev, struct dp_peer *peer);
#else
static inline
QDF_STATUS dp_get_vdevid(void *peer_handle, uint8_t *vdev_id)
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline void dp_local_peer_id_pool_init(struct dp_pdev *pdev)
{
}

View file

@ -2315,13 +2315,26 @@ int dp_addba_resp_tx_completion_wifi3(void *peer_handle,
rx_tid = &peer->rx_tid[tid];
qdf_spin_lock_bh(&rx_tid->tid_lock);
if (status) {
struct ol_if_ops *ol_ops = NULL;
bool is_roaming = false;
uint8_t vdev_id = -1;
rx_tid->num_addba_rsp_failed++;
dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
rx_tid->ba_status = DP_RX_BA_INACTIVE;
ol_ops = peer->vdev->pdev->soc->cdp_soc.ol_ops;
if (ol_ops && ol_ops->is_roam_inprogress) {
dp_get_vdevid(peer, &vdev_id);
is_roaming = ol_ops->is_roam_inprogress(vdev_id);
}
if (!is_roaming) {
dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
rx_tid->ba_status = DP_RX_BA_INACTIVE;
}
qdf_spin_unlock_bh(&rx_tid->tid_lock);
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"%s: Rx Tid- %d addba rsp tx completion failed!",
__func__, tid);
dp_err("RxTid- %d addba rsp tx completion failed, is_roaming %d",
tid, is_roaming);
return QDF_STATUS_SUCCESS;
}