qcacmn: ast entry reset api for son
API to reset ast entry for son, ast entry active field will be set on call of reset_api and all the ast entry active field will reset on call of reset_table api, ast_flush api will delete enteries in table Change-Id: I26ed0fff818a112348a7aefba3b028ed40b2fe26 CRs-Fixed: 2209095
This commit is contained in:
zatwierdzone przez
nshrivas
rodzic
414d2e790c
commit
89219d97b4
@@ -257,6 +257,24 @@ static inline void cdp_peer_setup
|
||||
peer);
|
||||
}
|
||||
|
||||
static inline void *cdp_peer_ast_hash_find
|
||||
(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: Invalid Instance:", __func__);
|
||||
QDF_BUG(0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!soc->ops->cmn_drv_ops ||
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_ast_hash_find)
|
||||
return NULL;
|
||||
|
||||
return soc->ops->cmn_drv_ops->txrx_peer_ast_hash_find(soc,
|
||||
ast_mac_addr);
|
||||
}
|
||||
|
||||
static inline int cdp_peer_add_ast
|
||||
(ol_txrx_soc_handle soc, struct cdp_peer *peer_handle,
|
||||
uint8_t *mac_addr, enum cdp_txrx_ast_entry_type type, uint32_t flags)
|
||||
@@ -279,8 +297,59 @@ static inline int cdp_peer_add_ast
|
||||
flags);
|
||||
}
|
||||
|
||||
static inline void cdp_peer_reset_ast
|
||||
(ol_txrx_soc_handle soc, uint8_t *wds_macaddr)
|
||||
{
|
||||
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: Invalid Instance:", __func__);
|
||||
QDF_BUG(0);
|
||||
return;
|
||||
}
|
||||
if (!soc->ops->cmn_drv_ops ||
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_reset_ast)
|
||||
return;
|
||||
|
||||
soc->ops->cmn_drv_ops->txrx_peer_reset_ast(soc, wds_macaddr);
|
||||
}
|
||||
|
||||
static inline void cdp_peer_reset_ast_table
|
||||
(ol_txrx_soc_handle soc)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: Invalid Instance:", __func__);
|
||||
QDF_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!soc->ops->cmn_drv_ops ||
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table)
|
||||
return;
|
||||
|
||||
soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table(soc);
|
||||
}
|
||||
|
||||
static inline void cdp_peer_flush_ast_table
|
||||
(ol_txrx_soc_handle soc)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: Invalid Instance:", __func__);
|
||||
QDF_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!soc->ops->cmn_drv_ops ||
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_flush_ast_table)
|
||||
return;
|
||||
|
||||
soc->ops->cmn_drv_ops->txrx_peer_flush_ast_table(soc);
|
||||
}
|
||||
|
||||
static inline int cdp_peer_update_ast
|
||||
(ol_txrx_soc_handle soc, void *ast_handle,
|
||||
(ol_txrx_soc_handle soc, uint8_t *wds_macaddr,
|
||||
struct cdp_peer *peer_handle, uint32_t flags)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
@@ -294,9 +363,10 @@ static inline int cdp_peer_update_ast
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_update_ast)
|
||||
return 0;
|
||||
|
||||
|
||||
return soc->ops->cmn_drv_ops->txrx_peer_update_ast(soc,
|
||||
peer_handle,
|
||||
ast_handle,
|
||||
wds_macaddr,
|
||||
flags);
|
||||
}
|
||||
|
||||
@@ -317,23 +387,6 @@ static inline void cdp_peer_del_ast
|
||||
soc->ops->cmn_drv_ops->txrx_peer_del_ast(soc, ast_handle);
|
||||
}
|
||||
|
||||
static inline void *cdp_peer_ast_hash_find
|
||||
(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: Invalid Instance:", __func__);
|
||||
QDF_BUG(0);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!soc->ops->cmn_drv_ops ||
|
||||
!soc->ops->cmn_drv_ops->txrx_peer_ast_hash_find)
|
||||
return NULL;
|
||||
|
||||
return soc->ops->cmn_drv_ops->txrx_peer_ast_hash_find(soc,
|
||||
ast_mac_addr);
|
||||
}
|
||||
|
||||
static inline uint8_t cdp_peer_ast_get_pdev_id
|
||||
(ol_txrx_soc_handle soc, void *ast_handle)
|
||||
|
@@ -103,7 +103,8 @@ struct cdp_cmn_ops {
|
||||
|
||||
int (*txrx_peer_update_ast)
|
||||
(ol_txrx_soc_handle soc, struct cdp_peer *peer_hdl,
|
||||
void *ast_hdl, uint32_t flags);
|
||||
uint8_t *mac_addr, uint32_t flags);
|
||||
|
||||
|
||||
void *(*txrx_peer_ast_hash_find)
|
||||
(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr);
|
||||
@@ -295,6 +296,13 @@ struct cdp_cmn_ops {
|
||||
void (*set_soc_dp_txrx_handle)(struct cdp_soc *soc_handle,
|
||||
void *dp_txrx_handle);
|
||||
|
||||
void (*txrx_peer_reset_ast)
|
||||
(ol_txrx_soc_handle soc, uint8_t *ast_macaddr);
|
||||
|
||||
void (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc);
|
||||
|
||||
void (*txrx_peer_flush_ast_table)(ol_txrx_soc_handle soc);
|
||||
|
||||
ol_txrx_tx_fp tx_send;
|
||||
};
|
||||
|
||||
|
@@ -310,20 +310,117 @@ static void dp_peer_del_ast_wifi3(struct cdp_soc_t *soc_hdl,
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
}
|
||||
|
||||
|
||||
static int dp_peer_update_ast_wifi3(struct cdp_soc_t *soc_hdl,
|
||||
struct cdp_peer *peer_hdl,
|
||||
void *ast_entry_hdl,
|
||||
uint8_t *wds_macaddr,
|
||||
uint32_t flags)
|
||||
{
|
||||
int status;
|
||||
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||
struct dp_ast_entry *ast_entry = NULL;
|
||||
|
||||
qdf_spin_lock_bh(&soc->ast_lock);
|
||||
ast_entry = dp_peer_ast_hash_find(soc, wds_macaddr);
|
||||
|
||||
status = dp_peer_update_ast(soc,
|
||||
(struct dp_peer *)peer_hdl,
|
||||
(struct dp_ast_entry *)ast_entry_hdl,
|
||||
ast_entry,
|
||||
flags);
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_wds_reset_ast_wifi3() - Reset the is_active param for ast entry
|
||||
* @soc_handle: Datapath SOC handle
|
||||
* @ast_entry_hdl: AST Entry handle
|
||||
* Return: None
|
||||
*/
|
||||
static void dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t *wds_macaddr)
|
||||
{
|
||||
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
|
||||
struct dp_ast_entry *ast_entry = NULL;
|
||||
|
||||
qdf_spin_lock_bh(&soc->ast_lock);
|
||||
ast_entry = dp_peer_ast_hash_find(soc, wds_macaddr);
|
||||
|
||||
if (ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) {
|
||||
ast_entry->is_active = TRUE;
|
||||
}
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_wds_reset_ast_table_wifi3() - Reset the is_active param for all ast entry
|
||||
* @soc: Datapath SOC handle
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void dp_wds_reset_ast_table_wifi3(struct cdp_soc_t *soc_hdl)
|
||||
{
|
||||
struct dp_soc *soc = (struct dp_soc *) soc_hdl;
|
||||
struct dp_pdev *pdev;
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_peer *peer;
|
||||
struct dp_ast_entry *ase, *temp_ase;
|
||||
int i;
|
||||
|
||||
qdf_spin_lock_bh(&soc->ast_lock);
|
||||
|
||||
for (i = 0; i < MAX_PDEV_CNT && soc->pdev_list[i]; i++) {
|
||||
pdev = soc->pdev_list[i];
|
||||
DP_PDEV_ITERATE_VDEV_LIST(pdev, vdev) {
|
||||
DP_VDEV_ITERATE_PEER_LIST(vdev, peer) {
|
||||
DP_PEER_ITERATE_ASE_LIST(peer, ase, temp_ase) {
|
||||
if (ase->type ==
|
||||
CDP_TXRX_AST_TYPE_STATIC)
|
||||
continue;
|
||||
ase->is_active = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_wds_flush_ast_table_wifi3() - Delete all wds and hmwds ast entry
|
||||
* @soc: Datapath SOC handle
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void dp_wds_flush_ast_table_wifi3(struct cdp_soc_t *soc_hdl)
|
||||
{
|
||||
struct dp_soc *soc = (struct dp_soc *) soc_hdl;
|
||||
struct dp_pdev *pdev;
|
||||
struct dp_vdev *vdev;
|
||||
struct dp_peer *peer;
|
||||
struct dp_ast_entry *ase, *temp_ase;
|
||||
int i;
|
||||
|
||||
qdf_spin_lock_bh(&soc->ast_lock);
|
||||
|
||||
for (i = 0; i < MAX_PDEV_CNT && soc->pdev_list[i]; i++) {
|
||||
pdev = soc->pdev_list[i];
|
||||
DP_PDEV_ITERATE_VDEV_LIST(pdev, vdev) {
|
||||
DP_VDEV_ITERATE_PEER_LIST(vdev, peer) {
|
||||
DP_PEER_ITERATE_ASE_LIST(peer, ase, temp_ase) {
|
||||
if (ase->type ==
|
||||
CDP_TXRX_AST_TYPE_STATIC)
|
||||
continue;
|
||||
dp_peer_del_ast(soc, ase);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
qdf_spin_unlock_bh(&soc->ast_lock);
|
||||
}
|
||||
|
||||
static void *dp_peer_ast_hash_find_wifi3(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t *ast_mac_addr)
|
||||
{
|
||||
@@ -575,6 +672,31 @@ static void dp_print_ast_stats(struct dp_soc *soc)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void dp_print_peer_table(struct dp_vdev *vdev)
|
||||
{
|
||||
struct dp_peer *peer = NULL;
|
||||
|
||||
DP_PRINT_STATS("Dumping Peer Table Stats:");
|
||||
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
||||
if (!peer) {
|
||||
DP_PRINT_STATS("Invalid Peer");
|
||||
return;
|
||||
}
|
||||
DP_PRINT_STATS(" peer_mac_addr = %pM"
|
||||
" nawds_enabled = %d"
|
||||
" bss_peer = %d"
|
||||
" wapi = %d"
|
||||
" wds_enabled = %d"
|
||||
" delete in progress = %d",
|
||||
peer->mac_addr.raw,
|
||||
peer->nawds_enabled,
|
||||
peer->bss_peer,
|
||||
peer->wapi,
|
||||
peer->wds_enabled,
|
||||
peer->delete_in_progress);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_setup_srng - Internal function to setup SRNG rings used by data path
|
||||
*/
|
||||
@@ -1588,6 +1710,7 @@ static void dp_wds_aging_timer_fn(void *soc_hdl)
|
||||
qdf_timer_mod(&soc->wds_aging_timer, DP_WDS_AGING_TIMER_DEFAULT_MS);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* dp_soc_wds_attach() - Setup WDS timer and AST table
|
||||
* @soc: Datapath SOC handle
|
||||
@@ -5605,6 +5728,7 @@ dp_print_host_stats(struct cdp_vdev *vdev_handle, enum cdp_host_txrx_stats type)
|
||||
break;
|
||||
case TXRX_AST_STATS:
|
||||
dp_print_ast_stats(pdev->soc);
|
||||
dp_print_peer_table(vdev);
|
||||
break;
|
||||
case TXRX_SRNG_PTR_STATS:
|
||||
dp_print_ring_stats(pdev);
|
||||
@@ -6714,6 +6838,9 @@ static struct cdp_cmn_ops dp_ops_cmn = {
|
||||
.get_soc_dp_txrx_handle = dp_soc_get_dp_txrx_handle,
|
||||
.set_soc_dp_txrx_handle = dp_soc_set_dp_txrx_handle,
|
||||
.tx_send = dp_tx_send,
|
||||
.txrx_peer_reset_ast = dp_wds_reset_ast_wifi3,
|
||||
.txrx_peer_reset_ast_table = dp_wds_reset_ast_table_wifi3,
|
||||
.txrx_peer_flush_ast_table = dp_wds_flush_ast_table_wifi3,
|
||||
};
|
||||
|
||||
static struct cdp_ctrl_ops dp_ops_ctrl = {
|
||||
|
Reference in New Issue
Block a user