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
This commit is contained in:

committed by
Rahul Choudhary

parent
39bb6afc38
commit
e617b8791c
@@ -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);
|
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
|
||||||
|
|
||||||
be_vdev->mcast_primary = false;
|
be_vdev->mcast_primary = false;
|
||||||
be_vdev->seq_num = 0;
|
|
||||||
|
|
||||||
hal_tx_mcast_mlo_reinject_routing_set(
|
hal_tx_mcast_mlo_reinject_routing_set(
|
||||||
soc->hal_soc,
|
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);
|
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
|
||||||
|
|
||||||
be_vdev->seq_num = 0;
|
|
||||||
be_vdev->mcast_primary = false;
|
be_vdev->mcast_primary = false;
|
||||||
vdev->mlo_vdev = 0;
|
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,
|
qdf_mem_set(mlo_dev_ctxt->bridge_vdev,
|
||||||
WLAN_MAX_MLO_CHIPS * WLAN_MAX_MLO_LINKS_PER_SOC,
|
WLAN_MAX_MLO_CHIPS * WLAN_MAX_MLO_LINKS_PER_SOC,
|
||||||
CDP_INVALID_VDEV_ID);
|
CDP_INVALID_VDEV_ID);
|
||||||
|
mlo_dev_ctxt->seq_num = 0;
|
||||||
|
|
||||||
/* Add mlo_dev_ctxt to the global DP MLO list */
|
/* Add mlo_dev_ctxt to the global DP MLO list */
|
||||||
qdf_spin_lock_bh(&mlo_dev_obj->mlo_dev_list_lock);
|
qdf_spin_lock_bh(&mlo_dev_obj->mlo_dev_list_lock);
|
||||||
|
@@ -410,7 +410,6 @@ struct dp_pdev_be {
|
|||||||
* @partner_vdev_list: partner list used for Intra-BSS
|
* @partner_vdev_list: partner list used for Intra-BSS
|
||||||
* @bridge_vdev_list: partner bridge vdev list
|
* @bridge_vdev_list: partner bridge vdev list
|
||||||
* @mlo_stats: structure to hold stats for mlo unmapped peers
|
* @mlo_stats: structure to hold stats for mlo unmapped peers
|
||||||
* @seq_num: DP MLO seq number
|
|
||||||
* @mcast_primary: MLO Mcast primary vdev
|
* @mcast_primary: MLO Mcast primary vdev
|
||||||
* @mlo_dev_ctxt: MLO device context pointer
|
* @mlo_dev_ctxt: MLO device context pointer
|
||||||
*/
|
*/
|
||||||
@@ -424,7 +423,6 @@ struct dp_vdev_be {
|
|||||||
struct cdp_vdev_stats mlo_stats;
|
struct cdp_vdev_stats mlo_stats;
|
||||||
#ifdef WLAN_FEATURE_11BE_MLO
|
#ifdef WLAN_FEATURE_11BE_MLO
|
||||||
#ifdef WLAN_MCAST_MLO
|
#ifdef WLAN_MCAST_MLO
|
||||||
uint16_t seq_num;
|
|
||||||
bool mcast_primary;
|
bool mcast_primary;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -446,6 +444,7 @@ struct dp_vdev_be {
|
|||||||
* @is_bridge_vdev_present: flag to check if bridge vdev is present
|
* @is_bridge_vdev_present: flag to check if bridge vdev is present
|
||||||
* @vdev_list_lock: lock to protect vdev list
|
* @vdev_list_lock: lock to protect vdev list
|
||||||
* @vdev_count: number of elements in the vdev list
|
* @vdev_count: number of elements in the vdev list
|
||||||
|
* @seq_num: DP MLO multicast sequence number
|
||||||
* @ref_cnt: reference count
|
* @ref_cnt: reference count
|
||||||
* @mod_refs: module reference count
|
* @mod_refs: module reference count
|
||||||
* @ref_delete_pending: flag to monitor last ref delete
|
* @ref_delete_pending: flag to monitor last ref delete
|
||||||
@@ -460,6 +459,7 @@ struct dp_mlo_dev_ctxt {
|
|||||||
bool is_bridge_vdev_present;
|
bool is_bridge_vdev_present;
|
||||||
qdf_spinlock_t vdev_list_lock;
|
qdf_spinlock_t vdev_list_lock;
|
||||||
uint16_t vdev_count;
|
uint16_t vdev_count;
|
||||||
|
uint16_t seq_num;
|
||||||
#endif
|
#endif
|
||||||
qdf_atomic_t ref_cnt;
|
qdf_atomic_t ref_cnt;
|
||||||
qdf_atomic_t mod_refs[DP_MOD_ID_MAX];
|
qdf_atomic_t mod_refs[DP_MOD_ID_MAX];
|
||||||
|
@@ -599,8 +599,7 @@ dp_tx_mlo_mcast_multipass_send(struct dp_vdev_be *be_vdev,
|
|||||||
}
|
}
|
||||||
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
|
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
|
||||||
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
|
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
|
||||||
msdu_info.gsn = be_vdev->seq_num;
|
msdu_info.gsn = be_vdev->mlo_dev_ctxt->seq_num;
|
||||||
be_ptnr_vdev->seq_num = be_vdev->seq_num;
|
|
||||||
|
|
||||||
if (ptr->vlan_id == MULTIPASS_WITH_VLAN_ID) {
|
if (ptr->vlan_id == MULTIPASS_WITH_VLAN_ID) {
|
||||||
msdu_info.tid = HTT_TX_EXT_TID_INVALID;
|
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 */
|
/* send frame on mcast primary vdev */
|
||||||
dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf_copy);
|
dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf_copy);
|
||||||
|
|
||||||
if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
|
if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
|
||||||
be_vdev->seq_num = 0;
|
be_vdev->mlo_dev_ctxt->seq_num = 0;
|
||||||
else
|
else
|
||||||
be_vdev->seq_num++;
|
be_vdev->mlo_dev_ctxt->seq_num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp_mlo_iter_ptnr_vdev(be_soc, be_vdev,
|
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);
|
&mpass_buf, DP_MOD_ID_TX, DP_LINK_VDEV_ITER);
|
||||||
dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf);
|
dp_tx_mlo_mcast_multipass_send(be_vdev, vdev, &mpass_buf);
|
||||||
|
|
||||||
if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
|
if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
|
||||||
be_vdev->seq_num = 0;
|
be_vdev->mlo_dev_ctxt->seq_num = 0;
|
||||||
else
|
else
|
||||||
be_vdev->seq_num++;
|
be_vdev->mlo_dev_ctxt->seq_num++;
|
||||||
|
|
||||||
return true;
|
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));
|
qdf_mem_zero(&msdu_info, sizeof(msdu_info));
|
||||||
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
|
dp_tx_get_queue(ptnr_vdev, nbuf_clone, &msdu_info.tx_queue);
|
||||||
msdu_info.gsn = be_vdev->seq_num;
|
msdu_info.gsn = be_vdev->mlo_dev_ctxt->seq_num;
|
||||||
be_ptnr_vdev->seq_num = be_vdev->seq_num;
|
|
||||||
|
|
||||||
DP_STATS_INC(ptnr_vdev, tx_i.mlo_mcast.send_pkt_count, 1);
|
DP_STATS_INC(ptnr_vdev, tx_i.mlo_mcast.send_pkt_count, 1);
|
||||||
nbuf_clone = dp_tx_send_msdu_single(
|
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 */
|
/* send frame on mcast primary vdev */
|
||||||
dp_tx_mlo_mcast_pkt_send(be_vdev, vdev, nbuf);
|
dp_tx_mlo_mcast_pkt_send(be_vdev, vdev, nbuf);
|
||||||
|
|
||||||
if (qdf_unlikely(be_vdev->seq_num > MAX_GSN_NUM))
|
if (qdf_unlikely(be_vdev->mlo_dev_ctxt->seq_num > MAX_GSN_NUM))
|
||||||
be_vdev->seq_num = 0;
|
be_vdev->mlo_dev_ctxt->seq_num = 0;
|
||||||
else
|
else
|
||||||
be_vdev->seq_num++;
|
be_vdev->mlo_dev_ctxt->seq_num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dp_tx_mlo_is_mcast_primary_be(struct dp_soc *soc,
|
bool dp_tx_mlo_is_mcast_primary_be(struct dp_soc *soc,
|
||||||
|
Reference in New Issue
Block a user