|
@@ -2513,7 +2513,8 @@ static bool dp_get_peer_vdev_roaming_in_progress(struct dp_peer *peer)
|
|
}
|
|
}
|
|
|
|
|
|
QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
|
|
QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
|
|
- ba_window_size, uint32_t start_seq)
|
|
|
|
|
|
+ ba_window_size, uint32_t start_seq,
|
|
|
|
+ bool bar_update)
|
|
{
|
|
{
|
|
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
|
struct dp_rx_tid *rx_tid = &peer->rx_tid[tid];
|
|
struct dp_soc *soc = peer->vdev->pdev->soc;
|
|
struct dp_soc *soc = peer->vdev->pdev->soc;
|
|
@@ -2545,7 +2546,7 @@ QDF_STATUS dp_rx_tid_update_wifi3(struct dp_peer *peer, int tid, uint32_t
|
|
if (dp_get_peer_vdev_roaming_in_progress(peer))
|
|
if (dp_get_peer_vdev_roaming_in_progress(peer))
|
|
return QDF_STATUS_E_PERM;
|
|
return QDF_STATUS_E_PERM;
|
|
|
|
|
|
- if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup)
|
|
|
|
|
|
+ if (soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup && !bar_update)
|
|
soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup(
|
|
soc->cdp_soc.ol_ops->peer_rx_reorder_queue_setup(
|
|
soc->ctrl_psoc, peer->vdev->pdev->pdev_id,
|
|
soc->ctrl_psoc, peer->vdev->pdev->pdev_id,
|
|
peer->vdev->vdev_id, peer->mac_addr.raw,
|
|
peer->vdev->vdev_id, peer->mac_addr.raw,
|
|
@@ -2733,7 +2734,7 @@ QDF_STATUS dp_rx_tid_setup_wifi3(struct dp_peer *peer, int tid,
|
|
rx_tid->ba_win_size = ba_window_size;
|
|
rx_tid->ba_win_size = ba_window_size;
|
|
if (rx_tid->hw_qdesc_vaddr_unaligned)
|
|
if (rx_tid->hw_qdesc_vaddr_unaligned)
|
|
return dp_rx_tid_update_wifi3(peer, tid, ba_window_size,
|
|
return dp_rx_tid_update_wifi3(peer, tid, ba_window_size,
|
|
- start_seq);
|
|
|
|
|
|
+ start_seq, false);
|
|
rx_tid->delba_tx_status = 0;
|
|
rx_tid->delba_tx_status = 0;
|
|
rx_tid->ppdu_id_2k = 0;
|
|
rx_tid->ppdu_id_2k = 0;
|
|
rx_tid->num_of_addba_req = 0;
|
|
rx_tid->num_of_addba_req = 0;
|
|
@@ -3473,7 +3474,7 @@ int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,
|
|
if (status) {
|
|
if (status) {
|
|
rx_tid->num_addba_rsp_failed++;
|
|
rx_tid->num_addba_rsp_failed++;
|
|
dp_rx_tid_update_wifi3(peer, tid, 1,
|
|
dp_rx_tid_update_wifi3(peer, tid, 1,
|
|
- IEEE80211_SEQ_MAX);
|
|
|
|
|
|
+ IEEE80211_SEQ_MAX, false);
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
qdf_spin_unlock_bh(&rx_tid->tid_lock);
|
|
qdf_spin_unlock_bh(&rx_tid->tid_lock);
|
|
dp_err("RxTid- %d addba rsp tx completion failed", tid);
|
|
dp_err("RxTid- %d addba rsp tx completion failed", tid);
|
|
@@ -3498,7 +3499,8 @@ int dp_addba_resp_tx_completion_wifi3(struct cdp_soc_t *cdp_soc,
|
|
|
|
|
|
if (dp_rx_tid_update_wifi3(peer, tid,
|
|
if (dp_rx_tid_update_wifi3(peer, tid,
|
|
rx_tid->ba_win_size,
|
|
rx_tid->ba_win_size,
|
|
- rx_tid->startseqnum)) {
|
|
|
|
|
|
+ rx_tid->startseqnum,
|
|
|
|
+ false)) {
|
|
dp_err("Failed update REO SSN");
|
|
dp_err("Failed update REO SSN");
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3665,7 +3667,7 @@ int dp_addba_requestprocess_wifi3(struct cdp_soc_t *cdp_soc,
|
|
rx_tid->num_of_addba_req++;
|
|
rx_tid->num_of_addba_req++;
|
|
if ((rx_tid->ba_status == DP_RX_BA_ACTIVE &&
|
|
if ((rx_tid->ba_status == DP_RX_BA_ACTIVE &&
|
|
rx_tid->hw_qdesc_vaddr_unaligned)) {
|
|
rx_tid->hw_qdesc_vaddr_unaligned)) {
|
|
- dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
|
|
|
|
|
|
+ dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
peer->active_ba_session_cnt--;
|
|
peer->active_ba_session_cnt--;
|
|
dp_peer_debug("%pK: Rx Tid- %d hw qdesc is already setup",
|
|
dp_peer_debug("%pK: Rx Tid- %d hw qdesc is already setup",
|
|
@@ -3798,7 +3800,7 @@ int dp_delba_process_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
|
|
*/
|
|
*/
|
|
rx_tid->delba_rcode = reasoncode;
|
|
rx_tid->delba_rcode = reasoncode;
|
|
rx_tid->num_of_delba_req++;
|
|
rx_tid->num_of_delba_req++;
|
|
- dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
|
|
|
|
|
|
+ dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
|
|
|
|
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
peer->active_ba_session_cnt--;
|
|
peer->active_ba_session_cnt--;
|
|
@@ -3860,12 +3862,12 @@ int dp_delba_tx_completion_wifi3(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
|
|
rx_tid->delba_tx_status = 0;
|
|
rx_tid->delba_tx_status = 0;
|
|
}
|
|
}
|
|
if (rx_tid->ba_status == DP_RX_BA_ACTIVE) {
|
|
if (rx_tid->ba_status == DP_RX_BA_ACTIVE) {
|
|
- dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
|
|
|
|
|
|
+ dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
peer->active_ba_session_cnt--;
|
|
peer->active_ba_session_cnt--;
|
|
}
|
|
}
|
|
if (rx_tid->ba_status == DP_RX_BA_IN_PROGRESS) {
|
|
if (rx_tid->ba_status == DP_RX_BA_IN_PROGRESS) {
|
|
- dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX);
|
|
|
|
|
|
+ dp_rx_tid_update_wifi3(peer, tid, 1, IEEE80211_SEQ_MAX, false);
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
rx_tid->ba_status = DP_RX_BA_INACTIVE;
|
|
}
|
|
}
|
|
qdf_spin_unlock_bh(&rx_tid->tid_lock);
|
|
qdf_spin_unlock_bh(&rx_tid->tid_lock);
|