Răsfoiți Sursa

qca-wifi: Update feature wds APIs and move dp_peer_teardown_wifi3 to cmndev

dp_tx_mec_handleri,dp_rx_wds_add_or_update_ast,
dp_rx_wds_srcport_learn were changed inside common dp.
As part of cleanup we have moved it to component
dev.This change adopts to the latest dp_tx_mec_handler version.
With this change we are moving dp_peer_teardown_wifi3 to common code as
it is also required by MCL driver code.

Change-Id: Ieba59ceb2f3a3b21f3588fe2685e0dc720ee049a
Pranita Solanke 6 ani în urmă
părinte
comite
0b5337fd6b
2 a modificat fișierele cu 41 adăugiri și 70 ștergeri
  1. 1 3
      dp/wifi3.0/dp_txrx_wds.c
  2. 40 67
      dp/wifi3.0/dp_txrx_wds.h

+ 1 - 3
dp/wifi3.0/dp_txrx_wds.c

@@ -197,9 +197,7 @@ void dp_tx_mec_handler(struct dp_vdev *vdev, uint8_t *status)
 		return;
 
 	soc = vdev->pdev->soc;
-	qdf_spin_lock_bh(&soc->peer_ref_mutex);
-	peer = TAILQ_FIRST(&vdev->peer_list);
-	qdf_spin_unlock_bh(&soc->peer_ref_mutex);
+	peer = vdev->vap_bss_peer;
 
 	if (!peer) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,

+ 40 - 67
dp/wifi3.0/dp_txrx_wds.h

@@ -34,48 +34,6 @@ dp_rx_da_learn(struct dp_soc *soc,
 	       qdf_nbuf_t nbuf);
 
 void dp_tx_mec_handler(struct dp_vdev *vdev, uint8_t *status);
-#ifdef FEATURE_AST
-/*
- * dp_peer_delete_ast_entries(): Delete all AST entries for a peer
- * @soc - datapath soc handle
- * @peer - datapath peer handle
- *
- * Delete the AST entries belonging to a peer
- */
-static inline void dp_peer_delete_ast_entries(struct dp_soc *soc,
-					      struct dp_peer *peer)
-{
-	struct dp_ast_entry *ast_entry, *temp_ast_entry;
-
-	qdf_spin_lock_bh(&soc->ast_lock);
-	DP_PEER_ITERATE_ASE_LIST(peer, ast_entry, temp_ast_entry)
-		dp_peer_del_ast(soc, ast_entry);
-
-	peer->self_ast_entry = NULL;
-	qdf_spin_unlock_bh(&soc->ast_lock);
-}
-static void dp_peer_teardown_wifi3(struct cdp_vdev *vdev_hdl, void *peer_hdl)
-{
-	struct dp_vdev *vdev = (struct dp_vdev *)vdev_hdl;
-	struct dp_peer *peer = (struct dp_peer *)peer_hdl;
-	struct dp_soc *soc = (struct dp_soc *)vdev->pdev->soc;
-
-	/*
-	 * For BSS peer, new peer is not created on alloc_node if the
-	 * peer with same address already exists , instead refcnt is
-	 * increased for existing peer. Correspondingly in delete path,
-	 * only refcnt is decreased; and peer is only deleted , when all
-	 * references are deleted. So delete_in_progress should not be set
-	 * for bss_peer, unless only 2 reference remains (peer map reference
-	 * and peer hash table reference).
-	 */
-	if (peer->bss_peer && (qdf_atomic_read(&peer->ref_cnt) > 2))
-		return;
-
-	peer->delete_in_progress = true;
-	dp_peer_delete_ast_entries(soc, peer);
-}
-#endif
 #ifdef FEATURE_WDS
 static inline bool dp_tx_da_search_override(struct dp_vdev *vdev)
 {
@@ -119,7 +77,7 @@ dp_txrx_set_wds_rx_policy(struct cdp_vdev *vdev_handle,
  */
 static inline void
 dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
-			    uint8_t *wds_src_mac, uint8_t is_ad4_valid,
+			    qdf_nbuf_t nbuf, uint8_t is_ad4_valid,
 			    uint8_t is_sa_valid, uint8_t is_chfrag_start,
 			    uint16_t sa_idx, uint16_t sa_sw_peer_id)
 {
@@ -129,6 +87,7 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 	uint32_t ret = 0;
 	struct dp_neighbour_peer *neighbour_peer = NULL;
 	struct dp_pdev *pdev = ta_peer->vdev->pdev;
+	uint8_t wds_src_mac[QDF_MAC_ADDR_SIZE];
 
 	/* For AP mode : Do wds source port learning only if it is a
 	 * 4-address mpdu
@@ -150,8 +109,15 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 	}
 
 	if (qdf_unlikely(!is_sa_valid)) {
-		ret = dp_peer_add_ast(soc, ta_peer, wds_src_mac,
-				      CDP_TXRX_AST_TYPE_WDS, flags);
+		qdf_mem_copy(wds_src_mac,
+			     (qdf_nbuf_data(nbuf) + QDF_MAC_ADDR_SIZE),
+			     QDF_MAC_ADDR_SIZE);
+
+		ret = dp_peer_add_ast(soc,
+				      ta_peer,
+				      wds_src_mac,
+				      CDP_TXRX_AST_TYPE_WDS,
+				      flags);
 		return;
 	}
 
@@ -174,11 +140,17 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 		 * cached.
 		 */
 		if (!soc->ast_override_support) {
-			ret = dp_peer_add_ast(soc, ta_peer, wds_src_mac,
-					      CDP_TXRX_AST_TYPE_WDS, flags);
+			qdf_mem_copy(wds_src_mac,
+				     (qdf_nbuf_data(nbuf) + QDF_MAC_ADDR_SIZE),
+				     QDF_MAC_ADDR_SIZE);
+
+			ret = dp_peer_add_ast(soc,
+					      ta_peer,
+					      wds_src_mac,
+					      CDP_TXRX_AST_TYPE_WDS,
+					      flags);
 			return;
-		}
-		if (soc->ast_override_support) {
+		} else {
 			/* In HKv2 smart monitor case, when NAC client is
 			 * added first and this client roams within BSS to
 			 * connect to RE, since we have an AST entry for
@@ -187,24 +159,26 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 			 * to FW.
 			 */
 			if (pdev->neighbour_peers_added) {
+				qdf_mem_copy(wds_src_mac,
+					     (qdf_nbuf_data(nbuf) +
+					      QDF_MAC_ADDR_SIZE),
+					     QDF_MAC_ADDR_SIZE);
+
 				qdf_spin_lock_bh(&pdev->neighbour_peer_mutex);
 				TAILQ_FOREACH(neighbour_peer,
 					      &pdev->neighbour_peers_list,
 					      neighbour_peer_list_elem) {
-					if (!qdf_mem_cmp(&neighbour_peer->
-							 neighbour_peers_macaddr
-							 , wds_src_mac,
-							 QDF_MAC_ADDR_SIZE)) {
-						ret = dp_peer_add_ast
-							(soc,
-							 ta_peer,
+					if (!qdf_mem_cmp(&neighbour_peer->neighbour_peers_macaddr,
 							 wds_src_mac,
-							 CDP_TXRX_AST_TYPE_WDS,
-							 flags);
-						QDF_TRACE
-							(QDF_MODULE_ID_DP,
-							 QDF_TRACE_LEVEL_INFO,
-							 "sa valid and nac roamed to wds");
+							 QDF_MAC_ADDR_SIZE)) {
+						ret = dp_peer_add_ast(soc,
+								      ta_peer,
+								      wds_src_mac,
+								      CDP_TXRX_AST_TYPE_WDS,
+								      flags);
+						QDF_TRACE(QDF_MODULE_ID_DP,
+							  QDF_TRACE_LEVEL_INFO,
+							  "sa valid and nac roamed to wds");
 						break;
 					}
 				}
@@ -214,6 +188,7 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 		}
 	}
 
+
 	if ((ast->type == CDP_TXRX_AST_TYPE_WDS_HM) ||
 	    (ast->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
 		return;
@@ -262,8 +237,9 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer,
 		 * for multicast loopback frames originated from connected
 		 * clients and looped back (intrabss) by Root AP
 		 */
-		if (ast->pdev_id != ta_peer->vdev->pdev->pdev_id)
+		if (ast->pdev_id != ta_peer->vdev->pdev->pdev_id) {
 			return;
+		}
 
 		/*
 		 * Kickout, when direct associated peer(SA) roams
@@ -300,7 +276,6 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
 {
 	uint16_t sa_sw_peer_id = hal_rx_msdu_end_sa_sw_peer_id_get(rx_tlv_hdr);
 	uint8_t sa_is_valid = hal_rx_msdu_end_sa_is_valid_get(rx_tlv_hdr);
-	uint8_t wds_src_mac[IEEE80211_ADDR_LEN];
 	uint16_t sa_idx;
 	uint8_t is_chfrag_start = 0;
 	uint8_t is_ad4_valid = 0;
@@ -312,15 +287,13 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
 	if (is_chfrag_start)
 		is_ad4_valid = hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr);
 
-	memcpy(wds_src_mac, (qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN),
-	       IEEE80211_ADDR_LEN);
 
 	/*
 	 * Get the AST entry from HW SA index and mark it as active
 	 */
 	sa_idx = hal_rx_msdu_end_sa_idx_get(rx_tlv_hdr);
 
-	dp_rx_wds_add_or_update_ast(soc, ta_peer, wds_src_mac, is_ad4_valid,
+	dp_rx_wds_add_or_update_ast(soc, ta_peer, nbuf, is_ad4_valid,
 				    sa_is_valid, is_chfrag_start,
 				    sa_idx, sa_sw_peer_id);
 }