Преглед изворни кода

qcacmn: Map and umap MLO DP peer to partner soc

Maping and unmaping of the MLO DP peer to the partner soc
will be initialized based on architecture.
dp_mlo_partner_chips_map
dp_mlo_partner_chips_unmap

Change-Id: I918f6d552acd9d64086abf4c38f913348e13c381
CRs-Fixed: 3267904
Sai Rupesh Chevuru пре 2 година
родитељ
комит
383edf35d0
5 измењених фајлова са 49 додато и 36 уклоњено
  1. 15 0
      dp/wifi3.0/be/dp_be.c
  2. 23 1
      dp/wifi3.0/be/dp_be.h
  3. 6 2
      dp/wifi3.0/dp_peer.c
  4. 0 33
      dp/wifi3.0/dp_peer.h
  5. 5 0
      dp/wifi3.0/dp_types.h

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

@@ -1832,10 +1832,25 @@ dp_initialize_arch_ops_be_mcast_mlo(struct dp_arch_ops *arch_ops)
 }
 #endif /* WLAN_MCAST_MLO */
 
+#ifdef WLAN_MLO_MULTI_CHIP
+static inline void
+dp_initialize_arch_ops_be_mlo_ptnr_chip(struct dp_arch_ops *arch_ops)
+{
+	arch_ops->dp_partner_chips_map = dp_mlo_partner_chips_map;
+	arch_ops->dp_partner_chips_unmap = dp_mlo_partner_chips_unmap;
+}
+#else
+static inline void
+dp_initialize_arch_ops_be_mlo_ptnr_chip(struct dp_arch_ops *arch_ops)
+{
+}
+#endif
+
 static inline void
 dp_initialize_arch_ops_be_mlo(struct dp_arch_ops *arch_ops)
 {
 	dp_initialize_arch_ops_be_mcast_mlo(arch_ops);
+	dp_initialize_arch_ops_be_mlo_ptnr_chip(arch_ops);
 	arch_ops->mlo_peer_find_hash_detach =
 	dp_mlo_peer_find_hash_detach_wrapper;
 	arch_ops->mlo_peer_find_hash_attach =

+ 23 - 1
dp/wifi3.0/be/dp_be.h

@@ -406,7 +406,28 @@ dp_mlo_get_peer_hash_obj(struct dp_soc *soc)
 
 void  dp_clr_mlo_ptnr_list(struct dp_soc *soc, struct dp_vdev *vdev);
 
-#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO)
+#if defined(WLAN_FEATURE_11BE_MLO)
+/**
+ * dp_mlo_partner_chips_map() - Map MLO peers to partner SOCs
+ * @soc: Soc handle
+ * @peer: DP peer handle for ML peer
+ * @peer_id: peer_id
+ * Return: None
+ */
+void dp_mlo_partner_chips_map(struct dp_soc *soc,
+			      struct dp_peer *peer,
+			      uint16_t peer_id);
+
+/**
+ * dp_mlo_partner_chips_unmap() - Unmap MLO peers to partner SOCs
+ * @soc: Soc handle
+ * @peer_id: peer_id
+ * Return: None
+ */
+void dp_mlo_partner_chips_unmap(struct dp_soc *soc,
+				uint16_t peer_id);
+
+#ifdef WLAN_MCAST_MLO
 typedef void dp_ptnr_vdev_iter_func(struct dp_vdev_be *be_vdev,
 				    struct dp_vdev *ptnr_vdev,
 				    void *arg);
@@ -450,6 +471,7 @@ struct dp_vdev *dp_mlo_get_mcast_primary_vdev(struct dp_soc_be *be_soc,
 					      struct dp_vdev_be *be_vdev,
 					      enum dp_mod_id mod_id);
 #endif
+#endif
 
 #else
 typedef struct dp_soc_be *dp_mld_peer_hash_obj_t;

+ 6 - 2
dp/wifi3.0/dp_peer.c

@@ -2874,7 +2874,8 @@ static inline struct dp_peer *dp_peer_find_add_id(struct dp_soc *soc,
 			return NULL;
 		}
 		dp_peer_find_id_to_obj_add(soc, peer, peer_id);
-		dp_mlo_partner_chips_map(soc, peer, peer_id);
+		if (soc->arch_ops.dp_partner_chips_map)
+			soc->arch_ops.dp_partner_chips_map(soc, peer, peer_id);
 
 		dp_peer_update_state(soc, peer, DP_PEER_STATE_ACTIVE);
 		return peer;
@@ -3239,7 +3240,10 @@ dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id,
 	dp_peer_rx_reo_shared_qaddr_delete(soc, peer);
 
 	dp_peer_find_id_to_obj_remove(soc, peer_id);
-	dp_mlo_partner_chips_unmap(soc, peer_id);
+
+	if (soc->arch_ops.dp_partner_chips_unmap)
+		soc->arch_ops.dp_partner_chips_unmap(soc, peer_id);
+
 	peer->peer_id = HTT_INVALID_PEER;
 
 	/*

+ 0 - 33
dp/wifi3.0/dp_peer.h

@@ -1907,39 +1907,6 @@ static inline void dp_print_mlo_ast_stats_be(struct dp_soc *soc)
 }
 #endif /* WLAN_FEATURE_11BE_MLO */
 
-#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
-/**
- * dp_mlo_partner_chips_map() - Map MLO peers to partner SOCs
- * @soc: Soc handle
- * @peer: DP peer handle for ML peer
- * @peer_id: peer_id
- * Return: None
- */
-void dp_mlo_partner_chips_map(struct dp_soc *soc,
-			      struct dp_peer *peer,
-			      uint16_t peer_id);
-
-/**
- * dp_mlo_partner_chips_unmap() - Unmap MLO peers to partner SOCs
- * @soc: Soc handle
- * @peer_id: peer_id
- * Return: None
- */
-void dp_mlo_partner_chips_unmap(struct dp_soc *soc,
-				uint16_t peer_id);
-#else
-static inline void dp_mlo_partner_chips_map(struct dp_soc *soc,
-					    struct dp_peer *peer,
-					    uint16_t peer_id)
-{
-}
-
-static inline void dp_mlo_partner_chips_unmap(struct dp_soc *soc,
-					      uint16_t peer_id)
-{
-}
-#endif
-
 static inline
 QDF_STATUS dp_peer_rx_tids_create(struct dp_peer *peer)
 {

+ 5 - 0
dp/wifi3.0/dp_types.h

@@ -1947,6 +1947,11 @@ struct dp_arch_ops {
 				  struct hal_tx_completion_status *ts,
 				  uint32_t *delay_us);
 	void (*print_mlo_ast_stats)(struct dp_soc *soc);
+	void (*dp_partner_chips_map)(struct dp_soc *soc,
+				     struct dp_peer *peer,
+				     uint16_t peer_id);
+	void (*dp_partner_chips_unmap)(struct dp_soc *soc,
+				       uint16_t peer_id);
 };
 
 /**