ソースを参照

qcacmn: Add arch ops to get the peer from dest mac

Add the arch ops to get the peer from destination mac address.

Change-Id: Ic316f7e91edb3ffc516b64b65cb6797b958f440a
CRs-Fixed: 3194921
syed touqeer pasha 3 年 前
コミット
3ab1b41388
3 ファイル変更49 行追加0 行削除
  1. 17 0
      dp/wifi3.0/be/dp_be.c
  2. 3 0
      dp/wifi3.0/dp_types.h
  3. 29 0
      dp/wifi3.0/li/dp_li.c

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

@@ -1667,6 +1667,22 @@ static QDF_STATUS dp_peer_map_attach_be(struct dp_soc *soc)
 	return QDF_STATUS_SUCCESS;
 }
 
+static struct dp_peer *dp_find_peer_by_destmac_be(struct dp_soc *soc,
+						  uint8_t *dest_mac,
+						  uint8_t vdev_id)
+{
+	struct dp_peer *peer = NULL;
+
+	peer = dp_peer_find_hash_find(soc, dest_mac, 0,
+				      vdev_id, DP_MOD_ID_SAWF);
+	if (!peer) {
+		qdf_err("Invalid peer");
+		return NULL;
+	}
+
+	return peer;
+}
+
 #ifdef WLAN_FEATURE_11BE_MLO
 #ifdef WLAN_MCAST_MLO
 static inline void
@@ -1749,5 +1765,6 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
 	arch_ops->dp_peer_rx_reorder_queue_setup =
 					dp_peer_rx_reorder_queue_setup_be;
 	arch_ops->txrx_print_peer_stats = dp_print_peer_txrx_stats_be;
+	arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_be;
 	dp_init_near_full_arch_ops_be(arch_ops);
 }

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

@@ -1816,6 +1816,9 @@ struct dp_arch_ops {
 						     struct dp_peer *peer,
 						     int tid,
 						     uint32_t ba_window_size);
+	struct dp_peer *(*dp_find_peer_by_destmac)(struct dp_soc *soc,
+						   uint8_t *dest_mac_addr,
+						   uint8_t vdev_id);
 };
 
 /**

+ 29 - 0
dp/wifi3.0/li/dp_li.c

@@ -541,6 +541,34 @@ dp_rx_intrabss_handle_nawds_li(struct dp_soc *soc, struct dp_txrx_peer *ta_peer,
 	return false;
 }
 
+static struct dp_peer *dp_find_peer_by_destmac_li(struct dp_soc *soc,
+						  uint8_t *dest_mac,
+						  uint8_t vdev_id)
+{
+	struct dp_peer *peer = NULL;
+	struct dp_ast_entry *ast_entry = NULL;
+	uint16_t peer_id;
+
+	qdf_spin_lock_bh(&soc->ast_lock);
+	ast_entry = dp_peer_ast_hash_find_by_vdevid(soc, dest_mac, vdev_id);
+
+	if (!ast_entry) {
+		qdf_spin_unlock_bh(&soc->ast_lock);
+		qdf_warn("%s NULL ast entry");
+		return NULL;
+	}
+
+	peer_id = ast_entry->peer_id;
+	qdf_spin_unlock_bh(&soc->ast_lock);
+
+	if (peer_id == HTT_INVALID_PEER)
+		return NULL;
+
+	peer = dp_peer_get_ref_by_id(soc, peer_id,
+				     DP_MOD_ID_SAWF);
+	return peer;
+}
+
 void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
 {
 #ifndef QCA_HOST_MODE_WIFI_DISABLED
@@ -590,6 +618,7 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
 	arch_ops->txrx_print_peer_stats = dp_print_peer_txrx_stats_li;
 	arch_ops->dp_peer_rx_reorder_queue_setup =
 					dp_peer_rx_reorder_queue_setup_li;
+	arch_ops->dp_find_peer_by_destmac = dp_find_peer_by_destmac_li;
 }
 
 #ifdef QCA_DP_TX_HW_SW_NBUF_DESC_PREFETCH