diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index c77a9eed21..6950b77a52 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/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); diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index 37447c72e7..8a46e51a57 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/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]; diff --git a/dp/wifi3.0/be/dp_be_tx.c b/dp/wifi3.0/be/dp_be_tx.c index 258d2eb0b6..7d43d217f3 100644 --- a/dp/wifi3.0/be/dp_be_tx.c +++ b/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,