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
This commit is contained in:
Jeevan Kukkalli
2020-07-08 23:57:43 +05:30
committed by snandini
parent 66c83b2fbe
commit 94c430da4a
3 changed files with 35 additions and 4 deletions

View File

@@ -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) ? return (pdev->soc->full_mon_mode && pdev->monitor_configured) ?
true : false; 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_ */ #endif /* #ifndef _DP_INTERNAL_H_ */

View File

@@ -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_ALREADY) ||
(status == QDF_STATUS_E_AGAIN)) (status == QDF_STATUS_E_AGAIN))
ret = 0; ret = 0;
dp_hmwds_ast_add_notify(peer, mac_addr,
type, status, false);
fail: fail:
if (peer) if (peer)
dp_peer_unref_delete(peer); dp_peer_unref_delete(peer);

View File

@@ -29,6 +29,9 @@
#include <hal_reo.h> #include <hal_reo.h>
#include <cdp_txrx_handle.h> #include <cdp_txrx_handle.h>
#include <wlan_cfg.h> #include <wlan_cfg.h>
#ifdef FEATURE_WDS
#include "dp_txrx_wds.h"
#endif
#ifdef WLAN_TX_PKT_CAPTURE_ENH #ifdef WLAN_TX_PKT_CAPTURE_ENH
#include "dp_tx_capture.h" #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; cb = ast_entry->callback;
cookie = ast_entry->cookie; cookie = ast_entry->cookie;
peer_type = ast_entry->type;
dp_peer_unlink_ast_entry(soc, ast_entry); dp_peer_unlink_ast_entry(soc, ast_entry);
dp_peer_free_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); vdev_id, is_wds);
} }
err = QDF_STATUS_E_INVAL; err = QDF_STATUS_E_INVAL;
dp_hmwds_ast_add_notify(peer, mac_addr,
peer_type, err, true);
return err; 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); qdf_spin_unlock_bh(&soc->ast_lock);
dp_hmwds_ast_add_notify(peer, mac_addr,
peer_type, err, true);
return err; 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_ast_free_cb_params *)cookie;
struct dp_soc *soc = (struct dp_soc *)dp_soc; struct dp_soc *soc = (struct dp_soc *)dp_soc;
struct dp_peer *peer = NULL; struct dp_peer *peer = NULL;
QDF_STATUS err = QDF_STATUS_SUCCESS;
if (status != CDP_TXRX_AST_DELETED) { if (status != CDP_TXRX_AST_DELETED) {
qdf_mem_free(cookie); 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], peer = dp_peer_find_hash_find(soc, &param->peer_mac_addr.raw[0],
0, param->vdev_id); 0, param->vdev_id);
if (peer) { if (peer) {
dp_peer_add_ast(soc, peer, err = dp_peer_add_ast(soc, peer,
&param->mac_addr.raw[0], &param->mac_addr.raw[0],
param->type, param->type,
param->flags); param->flags);
dp_hmwds_ast_add_notify(peer, &param->mac_addr.raw[0],
param->type, err, false);
dp_peer_unref_delete(peer); dp_peer_unref_delete(peer);
} }
qdf_mem_free(cookie); qdf_mem_free(cookie);