Prechádzať zdrojové kódy

qcacmn: Notify HMWDS ast add status to upper layers

Notification is sent in following two scenarios.
 - After call to dp_peer_add_ast() if we are not expecting any
   peer map event.
 - When HTT peer map event is received.

Change-Id: Id926d1cec1ee64520b0368fcc5000988c24e0513
CRs-Fixed: 2745542
Jeevan Kukkalli 5 rokov pred
rodič
commit
94c430da4a
3 zmenil súbory, kde vykonal 35 pridanie a 4 odobranie
  1. 11 0
      dp/wifi3.0/dp_internal.h
  2. 3 0
      dp/wifi3.0/dp_main.c
  3. 21 4
      dp/wifi3.0/dp_peer.c

+ 11 - 0
dp/wifi3.0/dp_internal.h

@@ -2280,4 +2280,15 @@ static inline bool dp_soc_is_full_mon_enable(struct dp_pdev *pdev)
 	return (pdev->soc->full_mon_mode && pdev->monitor_configured) ?
 			true : false;
 }
+
+#ifndef FEATURE_WDS
+static inline void
+dp_hmwds_ast_add_notify(struct dp_peer *peer,
+			uint8_t *mac_addr,
+			enum cdp_txrx_ast_entry_type type,
+			QDF_STATUS err,
+			bool is_peer_map)
+{
+}
+#endif
 #endif /* #ifndef _DP_INTERNAL_H_ */

+ 3 - 0
dp/wifi3.0/dp_main.c

@@ -652,6 +652,9 @@ static int dp_peer_add_ast_wifi3(struct cdp_soc_t *soc_hdl,
 	    (status == QDF_STATUS_E_ALREADY) ||
 	    (status == QDF_STATUS_E_AGAIN))
 		ret = 0;
+
+	dp_hmwds_ast_add_notify(peer, mac_addr,
+				type, status, false);
 fail:
 	if (peer)
 		dp_peer_unref_delete(peer);

+ 21 - 4
dp/wifi3.0/dp_peer.c

@@ -29,6 +29,9 @@
 #include <hal_reo.h>
 #include <cdp_txrx_handle.h>
 #include <wlan_cfg.h>
+#ifdef FEATURE_WDS
+#include "dp_txrx_wds.h"
+#endif
 
 #ifdef WLAN_TX_PKT_CAPTURE_ENH
 #include "dp_tx_capture.h"
@@ -593,6 +596,7 @@ static inline QDF_STATUS dp_peer_map_ast(struct dp_soc *soc,
 
 				cb = ast_entry->callback;
 				cookie = ast_entry->cookie;
+				peer_type = ast_entry->type;
 
 				dp_peer_unlink_ast_entry(soc, ast_entry);
 				dp_peer_free_ast_entry(soc, ast_entry);
@@ -613,6 +617,10 @@ static inline QDF_STATUS dp_peer_map_ast(struct dp_soc *soc,
 					 vdev_id, is_wds);
 			}
 			err = QDF_STATUS_E_INVAL;
+
+			dp_hmwds_ast_add_notify(peer, mac_addr,
+						peer_type, err, true);
+
 			return err;
 		}
 	}
@@ -640,6 +648,10 @@ static inline QDF_STATUS dp_peer_map_ast(struct dp_soc *soc,
 	}
 
 	qdf_spin_unlock_bh(&soc->ast_lock);
+
+	dp_hmwds_ast_add_notify(peer, mac_addr,
+				peer_type, err, true);
+
 	return err;
 }
 
@@ -652,6 +664,7 @@ void dp_peer_free_hmwds_cb(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
 		(struct dp_ast_free_cb_params *)cookie;
 	struct dp_soc *soc = (struct dp_soc *)dp_soc;
 	struct dp_peer *peer = NULL;
+	QDF_STATUS err = QDF_STATUS_SUCCESS;
 
 	if (status != CDP_TXRX_AST_DELETED) {
 		qdf_mem_free(cookie);
@@ -661,10 +674,14 @@ void dp_peer_free_hmwds_cb(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
 	peer = dp_peer_find_hash_find(soc, &param->peer_mac_addr.raw[0],
 				      0, param->vdev_id);
 	if (peer) {
-		dp_peer_add_ast(soc, peer,
-				&param->mac_addr.raw[0],
-				param->type,
-				param->flags);
+		err = dp_peer_add_ast(soc, peer,
+				      &param->mac_addr.raw[0],
+				      param->type,
+				      param->flags);
+
+		dp_hmwds_ast_add_notify(peer, &param->mac_addr.raw[0],
+					param->type, err, false);
+
 		dp_peer_unref_delete(peer);
 	}
 	qdf_mem_free(cookie);