diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index afeec4f86b..9f92bbca5c 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -688,6 +688,7 @@ static inline QDF_STATUS cdp_peer_ast_delete_by_pdev * @vdev_id: vdev id * @dest_mac: AST entry mac address to delete * @type: cdp_txrx_ast_entry_type to send to FW + * @delete_in_fw: flag to indicate AST entry deletion in FW * * Return: QDF_STATUS_SUCCESS if ast entry found with ast_mac_addr and delete * is sent @@ -695,7 +696,7 @@ static inline QDF_STATUS cdp_peer_ast_delete_by_pdev */ static inline QDF_STATUS cdp_peer_HMWDS_ast_delete (ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *dest_mac, - uint8_t type) + uint8_t type, uint8_t delete_in_fw) { if (!soc || !soc->ops) { dp_cdp_debug("Invalid Instance:"); @@ -711,7 +712,8 @@ static inline QDF_STATUS cdp_peer_HMWDS_ast_delete (soc, vdev_id, dest_mac, - type); + type, + delete_in_fw); } static inline int cdp_peer_add_ast @@ -739,7 +741,7 @@ static inline int cdp_peer_add_ast static inline QDF_STATUS cdp_peer_reset_ast (ol_txrx_soc_handle soc, uint8_t *wds_macaddr, uint8_t *peer_macaddr, - uint8_t vdev_id, enum cdp_txrx_ast_entry_type type) + uint8_t vdev_id) { if (!soc || !soc->ops) { @@ -752,12 +754,11 @@ static inline QDF_STATUS cdp_peer_reset_ast return QDF_STATUS_E_FAILURE; return soc->ops->cmn_drv_ops->txrx_peer_reset_ast(soc, wds_macaddr, - peer_macaddr, vdev_id, type); + peer_macaddr, vdev_id); } static inline QDF_STATUS cdp_peer_reset_ast_table - (ol_txrx_soc_handle soc, uint8_t vdev_id, - enum cdp_txrx_ast_entry_type type) + (ol_txrx_soc_handle soc, uint8_t vdev_id) { if (!soc || !soc->ops) { dp_cdp_debug("Invalid Instance:"); @@ -769,8 +770,7 @@ static inline QDF_STATUS cdp_peer_reset_ast_table !soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table) return QDF_STATUS_E_FAILURE; - return soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table(soc, vdev_id, - type); + return soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table(soc, vdev_id); } static inline void cdp_peer_flush_ast_table diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index d8df88d3ca..4c75b0ae43 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -281,7 +281,7 @@ struct cdp_cmn_ops { QDF_STATUS (*txrx_peer_HMWDS_ast_delete) (ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *dest_mac, - uint8_t type); + uint8_t type, uint8_t delete_in_fw); QDF_STATUS (*txrx_peer_delete)(struct cdp_soc_t *soc, uint8_t vdev_id, @@ -596,12 +596,10 @@ struct cdp_cmn_ops { QDF_STATUS (*txrx_peer_reset_ast) (ol_txrx_soc_handle soc, uint8_t *ast_macaddr, - uint8_t *peer_macaddr, uint8_t vdev_id, - enum cdp_txrx_ast_entry_type type); + uint8_t *peer_macaddr, uint8_t vdev_id); - QDF_STATUS (*txrx_peer_reset_ast_table) - (ol_txrx_soc_handle soc, uint8_t vdev_id, - enum cdp_txrx_ast_entry_type type); + QDF_STATUS (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc, + uint8_t vdev_id); void (*txrx_peer_flush_ast_table)(ol_txrx_soc_handle soc); void (*txrx_set_ba_aging_timeout)(struct cdp_soc_t *soc_handle, diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index a8de5e9fdd..26d3104329 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -581,15 +581,13 @@ dp_peer_reset_ast_entries(struct dp_soc *soc, struct dp_peer *peer, void *arg) * @wds_macaddr: WDS entry MAC Address * @peer_mac_addr: WDS entry MAC Address * @vdev_id: id of vdev handle - * @type: Type of AST entry * * Return: QDF_STATUS */ static QDF_STATUS dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl, uint8_t *wds_macaddr, uint8_t *peer_mac_addr, - uint8_t vdev_id, - enum cdp_txrx_ast_entry_type type) + uint8_t vdev_id) { struct dp_soc *soc = (struct dp_soc *)soc_hdl; struct dp_ast_entry *ast_entry = NULL; @@ -597,7 +595,7 @@ static QDF_STATUS dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl, struct dp_pdev *pdev; struct dp_vdev *vdev; - if (soc->ast_offload_support && type != CDP_TXRX_AST_TYPE_WDS_HM) + if (soc->ast_offload_support) return QDF_STATUS_E_FAILURE; vdev = dp_vdev_get_ref_by_id(soc, vdev_id, DP_MOD_ID_CDP); @@ -641,17 +639,16 @@ static QDF_STATUS dp_wds_reset_ast_wifi3(struct cdp_soc_t *soc_hdl, * dp_wds_reset_ast_table_wifi3() - Reset the is_active param for all ast entry * @soc_hdl: Datapath SOC handle * @vdev_id: id of vdev object - * @type: Type of AST entry * * Return: QDF_STATUS */ static QDF_STATUS dp_wds_reset_ast_table_wifi3(struct cdp_soc_t *soc_hdl, - uint8_t vdev_id, enum cdp_txrx_ast_entry_type type) + uint8_t vdev_id) { struct dp_soc *soc = (struct dp_soc *) soc_hdl; - if (soc->ast_offload_support && type != CDP_TXRX_AST_TYPE_WDS_HM) + if (soc->ast_offload_support) return QDF_STATUS_SUCCESS; qdf_spin_lock_bh(&soc->ast_lock); @@ -975,6 +972,7 @@ static QDF_STATUS dp_peer_ast_entry_del_by_pdev(struct cdp_soc_t *soc_handle, * @vdev_id: vdev id * @wds_macaddr: AST entry mac address to delete * @type: cdp_txrx_ast_entry_type to send to FW + * @delete_in_fw: flag to indicate AST entry deletion in FW * * Return: QDF_STATUS_SUCCESS if ast entry found with ast_mac_addr and delete * is sent @@ -983,13 +981,14 @@ static QDF_STATUS dp_peer_ast_entry_del_by_pdev(struct cdp_soc_t *soc_handle, static QDF_STATUS dp_peer_HMWDS_ast_entry_del(struct cdp_soc_t *soc_handle, uint8_t vdev_id, uint8_t *wds_macaddr, - uint8_t type) + uint8_t type, + uint8_t delete_in_fw) { struct dp_soc *soc = (struct dp_soc *)soc_handle; if (soc->ast_offload_support) { - dp_wds_reset_ast_wifi3(soc_handle, wds_macaddr, NULL, vdev_id, - type); + dp_del_wds_entry_wrapper(soc, vdev_id, wds_macaddr, type, + delete_in_fw); return QDF_STATUS_SUCCESS; } diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index ae355c2f09..bb4b36345e 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -201,14 +201,11 @@ dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc, * for the peer free ast entry from here only in this case */ - switch (ast_entry->type) { - case CDP_TXRX_AST_TYPE_WDS_HM_SEC: - case CDP_TXRX_AST_TYPE_SELF: - case CDP_TXRX_AST_TYPE_WDS_HM: - return false; - default: + if ((ast_entry->type != CDP_TXRX_AST_TYPE_WDS_HM_SEC) && + (ast_entry->type != CDP_TXRX_AST_TYPE_SELF)) return true; - } + + return false; } #else static inline bool @@ -1560,71 +1557,6 @@ void dp_peer_free_hmwds_cb(struct cdp_ctrl_objmgr_psoc *ctrl_psoc, qdf_mem_free(cookie); } -QDF_STATUS dp_peer_add_ast_hmwds(struct dp_soc *soc, - struct dp_peer *peer, - uint8_t *mac_addr, - enum cdp_txrx_ast_entry_type type, - uint32_t flags) -{ - struct dp_ast_entry *ast_entry = NULL; - struct dp_vdev *vdev = NULL; - struct dp_ast_entry *tmp_ast_entry; - int status = 0; - - vdev = peer->vdev; - if (!vdev) { - dp_peer_err("%pK: Peers vdev is NULL", soc); - QDF_ASSERT(0); - return QDF_STATUS_E_INVAL; - } - qdf_spin_lock_bh(&soc->ast_lock); - - /* Check if the mac_addr is already been part of ast_list_elem - * Return STATUS Already if found - */ - DP_PEER_ITERATE_ASE_LIST(peer, ast_entry, tmp_ast_entry) { - if ((ast_entry->type == CDP_TXRX_AST_TYPE_WDS_HM) && - (!ast_entry->delete_in_progress) && - (qdf_mem_cmp(mac_addr, ast_entry->mac_addr.raw, - QDF_MAC_ADDR_SIZE) == 0)) { - qdf_spin_unlock_bh(&soc->ast_lock); - return QDF_STATUS_E_ALREADY; - } - } - ast_entry = (struct dp_ast_entry *) - qdf_mem_malloc(sizeof(struct dp_ast_entry)); - - if (!ast_entry) { - qdf_spin_unlock_bh(&soc->ast_lock); - dp_peer_err("%pK: fail to allocate ast_entry", soc); - QDF_ASSERT(0); - return QDF_STATUS_E_NOMEM; - } - - qdf_mem_copy(&ast_entry->mac_addr.raw[0], mac_addr, QDF_MAC_ADDR_SIZE); - ast_entry->pdev_id = vdev->pdev->pdev_id; - ast_entry->is_mapped = false; - ast_entry->delete_in_progress = false; - ast_entry->peer_id = peer->peer_id; - ast_entry->next_hop = 0; - ast_entry->vdev_id = vdev->vdev_id; - ast_entry->type = CDP_TXRX_AST_TYPE_WDS_HM; - ast_entry->is_active = TRUE; - DP_STATS_INC(soc, ast.added, 1); - dp_peer_ast_hash_add(soc, ast_entry); - soc->num_ast_entries++; - - TAILQ_INSERT_TAIL(&peer->ast_entry_list, ast_entry, ase_list_elem); - - status = dp_update_wds_entry_wrapper(soc, - peer, - ast_entry->mac_addr.raw, - flags); - - qdf_spin_unlock_bh(&soc->ast_lock); - return qdf_status_from_os_return(status); -} - QDF_STATUS dp_peer_add_ast(struct dp_soc *soc, struct dp_peer *peer, uint8_t *mac_addr, @@ -1640,17 +1572,8 @@ QDF_STATUS dp_peer_add_ast(struct dp_soc *soc, bool is_peer_found = false; int status = 0; - if (soc->ast_offload_support) { - if (type == CDP_TXRX_AST_TYPE_WDS_HM) { - return dp_peer_add_ast_hmwds(soc, - peer, - mac_addr, - flags, - type); - } else { - return QDF_STATUS_E_INVAL; - } - } + if (soc->ast_offload_support) + return QDF_STATUS_E_INVAL; vdev = peer->vdev; if (!vdev) { @@ -1934,15 +1857,14 @@ void dp_peer_del_ast(struct dp_soc *soc, struct dp_ast_entry *ast_entry) { struct dp_peer *peer = NULL; + if (soc->ast_offload_support) + return; + if (!ast_entry) { dp_info_rl("NULL AST entry"); return; } - if (soc->ast_offload_support && ast_entry->type != - CDP_TXRX_AST_TYPE_WDS_HM) - return; - if (ast_entry->delete_in_progress) { dp_info_rl("AST entry deletion in progress mac addr:"QDF_MAC_ADDR_FMT" type:%d", QDF_MAC_ADDR_REF(ast_entry->mac_addr.raw), @@ -2138,15 +2060,6 @@ struct dp_ast_entry *dp_peer_ast_hash_find_by_vdevid(struct dp_soc *soc, return NULL; } -QDF_STATUS dp_peer_add_ast_hmwds(struct dp_soc *soc, - struct dp_peer *peer, - uint8_t *mac_addr, - enum cdp_txrx_ast_entry_type type, - uint32_t flags) -{ - return QDF_STATUS_E_FAILURE; -} - QDF_STATUS dp_peer_add_ast(struct dp_soc *soc, struct dp_peer *peer, uint8_t *mac_addr, diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index 09d08cf85e..c866f9d5ce 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -710,22 +710,6 @@ QDF_STATUS dp_peer_add_ast(struct dp_soc *soc, struct dp_peer *peer, uint8_t *mac_addr, enum cdp_txrx_ast_entry_type type, uint32_t flags); -/** - * dp_peer_add_ast_hmwds() - Allocate and add hmwds AST entry into peer list - * @soc: SoC handle - * @peer: peer to which ast node belongs - * @mac_addr: MAC address of ast node - * @type: AST entry type - * @flags: AST configuration flags - * - * This function adds new HMWDS AST entry into peer AST list - * - * Return: QDF_STATUS code - */ -QDF_STATUS dp_peer_add_ast_hmwds(struct dp_soc *soc, struct dp_peer *peer, - uint8_t *mac_addr, - enum cdp_txrx_ast_entry_type type, - uint32_t flags); /** * dp_peer_del_ast() - Delete and free AST entry * @soc: SoC handle