Browse Source

qcacmn: Add Mcast Seq num in MLO dev ctx

Move multicast sequence number field from
dp_vdev_be to MLO device context struct.

Change-Id: I28c3a9f4480a5da5b622f9dd2a070ac25b9b6e5b
CRs-Fixed: 3586918
Kenvish Butani 1 năm trước cách đây
mục cha
commit
e617b8791c
3 tập tin đã thay đổi với 14 bổ sung17 xóa
  1. 1 2
      dp/wifi3.0/be/dp_be.c
  2. 2 2
      dp/wifi3.0/be/dp_be.h
  3. 11 13
      dp/wifi3.0/be/dp_be_tx.c

+ 1 - 2
dp/wifi3.0/be/dp_be.c

@@ -915,7 +915,6 @@ dp_mlo_mcast_init(struct dp_soc *soc, struct dp_vdev *vdev)
 	struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
 
 	be_vdev->mcast_primary = false;
-	be_vdev->seq_num = 0;
 
 	hal_tx_mcast_mlo_reinject_routing_set(
 				soc->hal_soc,
@@ -933,7 +932,6 @@ dp_mlo_mcast_deinit(struct dp_soc *soc, struct dp_vdev *vdev)
 {
 	struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
 
-	be_vdev->seq_num = 0;
 	be_vdev->mcast_primary = false;
 	vdev->mlo_vdev = 0;
 }
@@ -2904,6 +2902,7 @@ QDF_STATUS dp_mlo_dev_ctxt_create(struct cdp_soc_t *soc_hdl,
 	qdf_mem_set(mlo_dev_ctxt->bridge_vdev,
 		    WLAN_MAX_MLO_CHIPS * WLAN_MAX_MLO_LINKS_PER_SOC,
 		    CDP_INVALID_VDEV_ID);
+	mlo_dev_ctxt->seq_num = 0;
 
 	/* Add mlo_dev_ctxt to the global DP MLO list */
 	qdf_spin_lock_bh(&mlo_dev_obj->mlo_dev_list_lock);

+ 2 - 2
dp/wifi3.0/be/dp_be.h

@@ -410,7 +410,6 @@ struct dp_pdev_be {
  * @partner_vdev_list: partner list used for Intra-BSS
  * @bridge_vdev_list: partner bridge vdev list
  * @mlo_stats: structure to hold stats for mlo unmapped peers
- * @seq_num: DP MLO seq number
  * @mcast_primary: MLO Mcast primary vdev
  * @mlo_dev_ctxt: MLO device context pointer
  */
@@ -424,7 +423,6 @@ struct dp_vdev_be {
 	struct cdp_vdev_stats mlo_stats;
 #ifdef WLAN_FEATURE_11BE_MLO
 #ifdef WLAN_MCAST_MLO
-	uint16_t seq_num;
 	bool mcast_primary;
 #endif
 #endif
@@ -446,6 +444,7 @@ struct dp_vdev_be {
  * @is_bridge_vdev_present: flag to check if bridge vdev is present
  * @vdev_list_lock: lock to protect vdev list
  * @vdev_count: number of elements in the vdev list
+ * @seq_num: DP MLO multicast sequence number
  * @ref_cnt: reference count
  * @mod_refs: module reference count
  * @ref_delete_pending: flag to monitor last ref delete
@@ -460,6 +459,7 @@ struct dp_mlo_dev_ctxt {
 	bool is_bridge_vdev_present;
 	qdf_spinlock_t vdev_list_lock;
 	uint16_t vdev_count;
+	uint16_t seq_num;
 #endif
 	qdf_atomic_t ref_cnt;
 	qdf_atomic_t mod_refs[DP_MOD_ID_MAX];

+ 11 - 13
dp/wifi3.0/be/dp_be_tx.c

@@ -599,8 +599,7 @@ dp_tx_mlo_mcast_multipass_send(struct dp_vdev_be *be_vdev,
 	}
 	qdf_mem_zero(&msdu_info, sizeof(msdu_info));
 	dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
-	msdu_info.gsn = be_vdev->seq_num;
-	be_ptnr_vdev->seq_num = be_vdev->seq_num;
+	msdu_info.gsn = be_vdev->mlo_dev_ctxt->seq_num;
 
 	if (ptr->vlan_id == MULTIPASS_WITH_VLAN_ID) {
 		msdu_info.tid = HTT_TX_EXT_TID_INVALID;
@@ -705,10 +704,10 @@ dp_tx_mlo_mcast_multipass_handler(struct dp_soc *soc,
 		/* send frame on mcast primary vdev */
 		dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf_copy);
 
-		if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
-			be_vdev->seq_num = 0;
+		if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
+			be_vdev->mlo_dev_ctxt->seq_num = 0;
 		else
-			be_vdev->seq_num++;
+			be_vdev->mlo_dev_ctxt->seq_num++;
 	}
 
 	dp_mlo_iter_ptnr_vdev(be_soc, be_vdev,
@@ -716,10 +715,10 @@ dp_tx_mlo_mcast_multipass_handler(struct dp_soc *soc,
 			      &mpass_buf, DP_MOD_ID_TX, DP_LINK_VDEV_ITER);
 	dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf);
 
-	if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
-		be_vdev->seq_num = 0;
+	if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
+		be_vdev->mlo_dev_ctxt->seq_num = 0;
 	else
-		be_vdev->seq_num++;
+		be_vdev->mlo_dev_ctxt->seq_num++;
 
 	return true;
 }
@@ -771,8 +770,7 @@ dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev,
 
 	qdf_mem_zero(&msdu_info, sizeof(msdu_info));
 	dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
-	msdu_info.gsn = be_vdev->seq_num;
-	be_ptnr_vdev->seq_num = be_vdev->seq_num;
+	msdu_info.gsn = be_vdev->mlo_dev_ctxt->seq_num;
 
 	DP_STATS_INC(ptnr_vdev, tx_i.mlo_mcast.send_pkt_count, 1);
 	nbuf_clone = dp_tx_send_msdu_single(
@@ -815,10 +813,10 @@ void dp_tx_mlo_mcast_handler_be(struct dp_soc *soc,
 	/* send frame on mcast primary vdev */
 	dp_tx_mlo_mcast_pkt_send(be_vdev, vdev, nbuf);
 
-	if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
-		be_vdev->seq_num = 0;
+	if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
+		be_vdev->mlo_dev_ctxt->seq_num = 0;
 	else
-		be_vdev->seq_num++;
+		be_vdev->mlo_dev_ctxt->seq_num++;
 }
 
 bool dp_tx_mlo_is_mcast_primary_be(struct dp_soc *soc,