瀏覽代碼

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
Manjunathappa Prakash 5 年之前
父節點
當前提交
85de96c698
共有 3 個文件被更改,包括 26 次插入5 次删除
  1. 2 0
      dp/inc/cdp_txrx_ops.h
  2. 6 0
      dp/wifi3.0/dp_internal.h
  3. 18 5
      dp/wifi3.0/dp_peer.c

+ 2 - 0
dp/inc/cdp_txrx_ops.h

@@ -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 */
 };
 

+ 6 - 0
dp/wifi3.0/dp_internal.h

@@ -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)
 {
 }

+ 18 - 5
dp/wifi3.0/dp_peer.c

@@ -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;
 	}