From 94c430da4aaba54e7ebb669b004d28287f62a21b Mon Sep 17 00:00:00 2001 From: Jeevan Kukkalli Date: Wed, 8 Jul 2020 23:57:43 +0530 Subject: [PATCH] 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 --- dp/wifi3.0/dp_internal.h | 11 +++++++++++ dp/wifi3.0/dp_main.c | 3 +++ dp/wifi3.0/dp_peer.c | 25 +++++++++++++++++++++---- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index fbc314d6fb..0e0e50df86 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/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_ */ diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8b1d99a8ab..79894f1ad3 100644 --- a/dp/wifi3.0/dp_main.c +++ b/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); diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index bfbfa3f68c..1e30f45cb8 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -29,6 +29,9 @@ #include #include #include +#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, ¶m->peer_mac_addr.raw[0], 0, param->vdev_id); if (peer) { - dp_peer_add_ast(soc, peer, - ¶m->mac_addr.raw[0], - param->type, - param->flags); + err = dp_peer_add_ast(soc, peer, + ¶m->mac_addr.raw[0], + param->type, + param->flags); + + dp_hmwds_ast_add_notify(peer, ¶m->mac_addr.raw[0], + param->type, err, false); + dp_peer_unref_delete(peer); } qdf_mem_free(cookie);