qcacmn: add support for reset ast entry and table

Add support for reset ast entry and table, also send
ast entry type to upper layers in delete callback

Change-Id: I6b420fba5bab50519e8954a1e796b04bc0768ef8
CRs-fixed: 2384550
This commit is contained in:
Chaithanya Garrepalli
2019-02-19 23:45:12 +05:30
committed by nshrivas
parent 7062efab4c
commit 267ae0e416
4 changed files with 50 additions and 25 deletions

View File

@@ -529,7 +529,8 @@ static inline int cdp_peer_add_ast
}
static inline void cdp_peer_reset_ast
(ol_txrx_soc_handle soc, uint8_t *wds_macaddr, void *vdev_hdl)
(ol_txrx_soc_handle soc, uint8_t *wds_macaddr, uint8_t *peer_macaddr,
void *vdev_hdl)
{
if (!soc || !soc->ops) {
@@ -542,7 +543,8 @@ static inline void cdp_peer_reset_ast
!soc->ops->cmn_drv_ops->txrx_peer_reset_ast)
return;
soc->ops->cmn_drv_ops->txrx_peer_reset_ast(soc, wds_macaddr, vdev_hdl);
soc->ops->cmn_drv_ops->txrx_peer_reset_ast(soc, wds_macaddr,
peer_macaddr, vdev_hdl);
}
static inline void cdp_peer_reset_ast_table

View File

@@ -402,7 +402,8 @@ struct cdp_cmn_ops {
void *dp_txrx_handle);
void (*txrx_peer_reset_ast)
(ol_txrx_soc_handle soc, uint8_t *ast_macaddr, void *vdev_hdl);
(ol_txrx_soc_handle soc, uint8_t *ast_macaddr,
uint8_t *peer_macaddr, void *vdev_hdl);
void (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc,
void *vdev_hdl);
@@ -882,7 +883,8 @@ struct ol_if_ops {
uint8_t *dest_macaddr, uint8_t *peer_macaddr,
uint32_t flags);
void (*peer_del_wds_entry)(void *ol_soc_handle,
uint8_t *wds_macaddr);
uint8_t *wds_macaddr,
uint8_t type);
QDF_STATUS
(*lro_hash_config)(struct cdp_ctrl_objmgr_pdev *ctrl_pdev,
struct cdp_lro_hash_config *rx_offld_hash);

View File

@@ -565,26 +565,49 @@ static int dp_peer_update_ast_wifi3(struct cdp_soc_t *soc_hdl,
* Return: None
*/
static void dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl,
uint8_t *wds_macaddr, void *vdev_handle)
uint8_t *wds_macaddr,
uint8_t *peer_mac_addr,
void *vdev_handle)
{
struct dp_soc *soc = (struct dp_soc *)soc_hdl;
struct dp_ast_entry *ast_entry = NULL;
struct dp_ast_entry *tmp_ast_entry;
struct dp_peer *peer;
struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle;
struct dp_pdev *pdev;
if (!vdev)
return;
pdev = vdev->pdev;
if (peer_mac_addr) {
peer = dp_peer_find_hash_find(soc, peer_mac_addr,
0, vdev->vdev_id);
if (!peer)
return;
qdf_spin_lock_bh(&soc->ast_lock);
DP_PEER_ITERATE_ASE_LIST(peer, ast_entry, tmp_ast_entry) {
if ((ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM) ||
(ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
dp_peer_del_ast(soc, ast_entry);
}
qdf_spin_unlock_bh(&soc->ast_lock);
dp_peer_unref_delete(peer);
} else if (wds_macaddr) {
qdf_spin_lock_bh(&soc->ast_lock);
ast_entry = dp_peer_ast_hash_find_by_pdevid(soc, wds_macaddr,
vdev->pdev->pdev_id);
pdev->pdev_id);
if (ast_entry) {
if ((ast_entry->type != CDP_TXRX_AST_TYPE_STATIC) &&
(ast_entry->type != CDP_TXRX_AST_TYPE_SELF) &&
(ast_entry->type != CDP_TXRX_AST_TYPE_STA_BSS)) {
ast_entry->is_active = TRUE;
if ((ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM) ||
(ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM_SEC))
dp_peer_del_ast(soc, ast_entry);
}
}
qdf_spin_unlock_bh(&soc->ast_lock);
}
}
/*
* dp_wds_reset_ast_table_wifi3() - Reset the is_active param for all ast entry
@@ -611,13 +634,10 @@ static void dp_wds_reset_ast_table_wifi3(struct cdp_soc_t *soc_hdl,
DP_VDEV_ITERATE_PEER_LIST(vdev, peer) {
DP_PEER_ITERATE_ASE_LIST(peer, ase, temp_ase) {
if ((ase->type ==
CDP_TXRX_AST_TYPE_STATIC) ||
CDP_TXRX_AST_TYPE_WDS_HM) ||
(ase->type ==
CDP_TXRX_AST_TYPE_SELF) ||
(ase->type ==
CDP_TXRX_AST_TYPE_STA_BSS))
continue;
ase->is_active = TRUE;
CDP_TXRX_AST_TYPE_WDS_HM_SEC))
dp_peer_del_ast(soc, ase);
}
}
}

View File

@@ -1012,10 +1012,11 @@ void dp_peer_ast_send_wds_del(struct dp_soc *soc,
peer->vdev->vdev_id, ast_entry->mac_addr.raw,
ast_entry->next_hop, ast_entry->peer->mac_addr.raw);
if (ast_entry->next_hop &&
ast_entry->type != CDP_TXRX_AST_TYPE_WDS_HM_SEC)
if (ast_entry->next_hop) {
cdp_soc->ol_ops->peer_del_wds_entry(peer->vdev->osif_vdev,
ast_entry->mac_addr.raw);
ast_entry->mac_addr.raw,
ast_entry->type);
}
ast_entry->delete_in_progress = true;
}