Browse Source

qcacmn: single dev reinject cleanup

single dev reinject cleanup in DP

Change-Id: I2376a17ac5e850ca21db83714124fd0ccf62243d
CRs-Fixed: 3359180
KARTHIK KUMAR T 2 years ago
parent
commit
31278694e1
4 changed files with 58 additions and 7 deletions
  1. 27 0
      dp/wifi3.0/be/dp_be.c
  2. 1 1
      dp/wifi3.0/dp_rx_err.c
  3. 29 5
      dp/wifi3.0/dp_tx.c
  4. 1 1
      hal/wifi3.0/be/hal_be_tx.h

+ 27 - 0
dp/wifi3.0/be/dp_be.c

@@ -2153,6 +2153,32 @@ static void dp_mlo_mcast_reset_pri_mcast(struct dp_vdev_be *be_vdev,
 	be_ptnr_vdev->mcast_primary = false;
 }
 
+#if defined(CONFIG_MLO_SINGLE_DEV)
+static void dp_txrx_set_mlo_mcast_primary_vdev_param_be(
+					struct dp_vdev *vdev,
+					cdp_config_param_type val)
+{
+	struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
+	struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(
+						be_vdev->vdev.pdev->soc);
+
+	be_vdev->mcast_primary = val.cdp_vdev_param_mcast_vdev;
+	vdev->mlo_vdev = true;
+
+	if (be_vdev->mcast_primary) {
+		struct cdp_txrx_peer_params_update params = {0};
+
+		params.chip_id = be_soc->mlo_chip_id;
+		params.pdev_id = be_vdev->vdev.pdev->pdev_id;
+		params.osif_vdev = be_vdev->vdev.osif_vdev;
+		dp_wdi_event_handler(
+				WDI_EVENT_MCAST_PRIMARY_UPDATE,
+				be_vdev->vdev.pdev->soc,
+				(void *)&params, CDP_INVALID_PEER,
+				WDI_NO_VAL, params.pdev_id);
+	}
+}
+#else
 static void dp_txrx_set_mlo_mcast_primary_vdev_param_be(
 					struct dp_vdev *vdev,
 					cdp_config_param_type val)
@@ -2185,6 +2211,7 @@ static void dp_txrx_set_mlo_mcast_primary_vdev_param_be(
 				WDI_NO_VAL, params.pdev_id);
 	}
 }
+#endif
 
 static void dp_txrx_reset_mlo_mcast_primary_vdev_param_be(
 					struct dp_vdev *vdev,

+ 1 - 1
dp/wifi3.0/dp_rx_err.c

@@ -1924,7 +1924,7 @@ fail:
 }
 
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) && \
-	defined(WLAN_MCAST_MLO)
+	defined(WLAN_MCAST_MLO) && !defined(CONFIG_MLO_SINGLE_DEV)
 static bool dp_rx_igmp_handler(struct dp_soc *soc,
 			       struct dp_vdev *vdev,
 			       struct dp_txrx_peer *peer,

+ 29 - 5
dp/wifi3.0/dp_tx.c

@@ -2257,9 +2257,31 @@ int dp_tx_frame_is_drop(struct dp_vdev *vdev, uint8_t *srcmac, uint8_t *dstmac)
 /* MLO vdev id inc offset */
 #define DP_MLO_VDEV_ID_OFFSET 0x80
 
+#ifdef QCA_SUPPORT_WDS_EXTENDED
+static inline bool
+dp_tx_wds_ext_check(struct cdp_tx_exception_metadata *tx_exc_metadata)
+{
+	if (tx_exc_metadata && tx_exc_metadata->is_wds_extended)
+		return true;
+
+	return false;
+}
+#else
+static inline bool
+dp_tx_wds_ext_check(struct cdp_tx_exception_metadata *tx_exc_metadata)
+{
+	return false;
+}
+#endif
+
 static inline void
-dp_tx_bypass_reinjection(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc)
+dp_tx_bypass_reinjection(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc,
+			 struct cdp_tx_exception_metadata *tx_exc_metadata)
 {
+	/* wds ext enabled will not set the TO_FW bit */
+	if (dp_tx_wds_ext_check(tx_exc_metadata))
+		return;
+
 	if (!(tx_desc->flags & DP_TX_DESC_FLAG_TO_FW)) {
 		tx_desc->flags |= DP_TX_DESC_FLAG_TO_FW;
 		qdf_atomic_inc(&soc->num_tx_exception);
@@ -2291,7 +2313,8 @@ dp_tx_update_mcast_param(uint16_t peer_id,
 }
 #else
 static inline void
-dp_tx_bypass_reinjection(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc)
+dp_tx_bypass_reinjection(struct dp_soc *soc, struct dp_tx_desc_s *tx_desc,
+			 struct cdp_tx_exception_metadata *tx_exc_metadata)
 {
 }
 
@@ -2391,7 +2414,7 @@ dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 					    DP_TCL_METADATA_TYPE_PEER_BASED);
 		DP_TX_TCL_METADATA_PEER_ID_SET(htt_tcl_metadata,
 					       peer_id);
-		dp_tx_bypass_reinjection(soc, tx_desc);
+		dp_tx_bypass_reinjection(soc, tx_desc, tx_exc_metadata);
 	} else
 		htt_tcl_metadata = vdev->htt_tcl_metadata;
 
@@ -3953,7 +3976,8 @@ int dp_tx_proxy_arp(struct dp_vdev *vdev, qdf_nbuf_t nbuf)
 }
 #endif
 
-#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
+#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) && \
+	!defined(CONFIG_MLO_SINGLE_DEV)
 #ifdef WLAN_MCAST_MLO
 static bool
 dp_tx_reinject_mlo_hdl(struct dp_soc *soc, struct dp_vdev *vdev,
@@ -5574,7 +5598,7 @@ void dp_tx_prefetch_next_nbuf_data(struct dp_tx_desc_s *next)
  * Return: true when packet is reinjected
  */
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) && \
-	defined(WLAN_MCAST_MLO)
+	defined(WLAN_MCAST_MLO) && !defined(CONFIG_MLO_SINGLE_DEV)
 static inline bool
 dp_tx_mcast_reinject_handler(struct dp_soc *soc, struct dp_tx_desc_s *desc)
 {

+ 1 - 1
hal/wifi3.0/be/hal_be_tx.h

@@ -813,7 +813,7 @@ hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,
  * Return: void
  */
 #if defined(HWIO_TCL_R0_CMN_CONFIG_MCAST_CMN_PN_SN_MLO_REINJECT_ENABLE_BMSK) && \
-	defined(WLAN_MCAST_MLO)
+	defined(WLAN_MCAST_MLO) && !defined(CONFIG_MLO_SINGLE_DEV)
 static inline void
 hal_tx_mcast_mlo_reinject_routing_set(
 				hal_soc_handle_t hal_soc_hdl,