Browse Source

qcacmn: MLO Intra-BSS changes

When a packet s destined to ML STA from a legacy peer, use
the ML peer id to identify the primary link and redirect the
packet to primary vdev for Intra-BSS.

Change-Id: Id8e6fcc9e2dd638e6d923eef50f55325fa538c49
CRs-Fixed: 3169484
Manoj Ekbote 3 years ago
parent
commit
67fe081325
2 changed files with 15 additions and 3 deletions
  1. 9 3
      dp/wifi3.0/be/dp_be_rx.c
  2. 6 0
      hal/wifi3.0/be/hal_be_rx.h

+ 9 - 3
dp/wifi3.0/be/dp_be_rx.c

@@ -1270,8 +1270,10 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
 
 	dest_chip_id = HAL_RX_DEST_CHIP_ID_GET(msdu_metadata);
 	qdf_assert_always(dest_chip_id <= (DP_MLO_MAX_DEST_CHIP_ID - 1));
+	da_peer_id = HAL_RX_PEER_ID_GET(msdu_metadata);
 
-	if (be_soc->mlo_enabled) {
+	/* TA is MLD peer */
+	if (be_soc->mlo_enabled && ta_peer->mld_peer) {
 		/* validate chip_id, get a ref, and re-assign soc */
 		params->dest_soc =
 			dp_mlo_get_soc_ref_by_chip_id(be_soc->ml_ctxt,
@@ -1280,8 +1282,6 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
 			return false;
 	}
 
-	da_peer_id = dp_rx_peer_metadata_peer_id_get_be(params->dest_soc,
-							msdu_metadata->da_idx);
 	da_peer = dp_txrx_peer_get_ref_by_id(params->dest_soc, da_peer_id,
 					     &txrx_ref_handle, DP_MOD_ID_RX);
 	if (!da_peer)
@@ -1308,6 +1308,12 @@ dp_rx_intrabss_ucast_check_be(qdf_nbuf_t nbuf,
 
 	/* MLO specific Intra-BSS check */
 	if (dp_rx_intrabss_fwd_mlo_allow(ta_peer, da_peer)) {
+		/* TA is legacy peer */
+		if (!ta_peer->mld_peer) {
+			params->dest_soc = da_peer->vdev->pdev->soc;
+			ret = true;
+			goto rel_da_peer;
+		}
 		/* index of soc in the array */
 		soc_idx = dest_chip_id << DP_MLO_DEST_CHIP_ID_SHIFT;
 		if (!(be_vdev->partner_vdev_list[soc_idx][0] ==

+ 6 - 0
hal/wifi3.0/be/hal_be_rx.h

@@ -27,6 +27,8 @@
 #define HAL_RX_DA_IDX_CHIP_ID_OFFSET    14
 #define HAL_RX_DA_IDX_CHIP_ID_MASK      0x3
 
+#define HAL_RX_DA_IDX_PEER_ID_MASK    0x3fff
+
 /*
  * macro to set the cookie into the rxdma ring entry
  */
@@ -213,6 +215,10 @@
 #define HAL_RX_DEST_CHIP_ID_GET(msdu_metadata) \
 	(((msdu_metadata)->da_idx >> HAL_RX_DA_IDX_CHIP_ID_OFFSET) &	\
 	 HAL_RX_DA_IDX_CHIP_ID_MASK)
+
+#define HAL_RX_PEER_ID_GET(msdu_metadata) \
+	(((msdu_metadata)->da_idx) & HAL_RX_DA_IDX_PEER_ID_MASK)
+
 /**
  * enum hal_be_rx_wbm_error_source: Indicates which module initiated the
  * release of this buffer or descriptor