qcacmn: Add HMWDS rem-addr support in Beryllium

Add HMWDS rem-addr support to delete AST WDS mac entries in
Beryllium chipsets.

Change-Id: I5623bac02b326d1d668ad5e1fdcfc3a9f8cbbb9c
CRs-Fixed: 3397961
This commit is contained in:
Abishek Ganapathy
2023-02-06 17:16:42 +05:30
committed by Madan Koyyalamudi
parent 56559ee387
commit ee1493dc9c
5 changed files with 108 additions and 12 deletions

View File

@@ -680,6 +680,42 @@ static inline QDF_STATUS cdp_peer_ast_delete_by_pdev
cookie);
}
/**
* cdp_peer_HMWDS_ast_delete() - delete the ast entry from soc AST hash table
* for HMWDS rem-addr command
*
* @soc: data path soc handle
* @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
* QDF_STATUS_E_INVAL false if ast entry not found
*/
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 delete_in_fw)
{
if (!soc || !soc->ops) {
dp_cdp_debug("Invalid Instance:");
QDF_BUG(0);
return QDF_STATUS_E_INVAL;
}
if (!soc->ops->cmn_drv_ops ||
!soc->ops->cmn_drv_ops->txrx_peer_HMWDS_ast_delete)
return QDF_STATUS_E_INVAL;
return soc->ops->cmn_drv_ops->txrx_peer_HMWDS_ast_delete
(soc,
vdev_id,
dest_mac,
type,
delete_in_fw);
}
static inline int cdp_peer_add_ast
(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
uint8_t *mac_addr,

View File

@@ -276,6 +276,10 @@ struct cdp_cmn_ops {
txrx_ast_free_cb callback,
void *cookie);
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 delete_in_fw);
QDF_STATUS
(*txrx_peer_delete)(struct cdp_soc_t *soc, uint8_t vdev_id,
uint8_t *peer_mac, uint32_t bitmap,

View File

@@ -1186,6 +1186,37 @@ static QDF_STATUS dp_peer_ast_entry_del_by_pdev(struct cdp_soc_t *soc_handle,
return QDF_STATUS_SUCCESS;
}
/**
* dp_peer_HMWDS_ast_entry_del() - delete the ast entry from soc AST hash
* table if HMWDS rem-addr command is issued
*
* @soc_handle: data path 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
* QDF_STATUS_E_INVAL false if ast entry not found
*/
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 delete_in_fw)
{
struct dp_soc *soc = (struct dp_soc *)soc_handle;
if (soc->ast_offload_support) {
dp_del_wds_entry_wrapper(soc, vdev_id, wds_macaddr, type,
delete_in_fw);
return QDF_STATUS_SUCCESS;
}
return -QDF_STATUS_E_INVAL;
}
/**
* dp_srng_find_ring_in_mask() - find which ext_group a ring belongs
* @ring_num: ring num of the ring being queried
@@ -14040,6 +14071,7 @@ static struct cdp_cmn_ops dp_ops_cmn = {
dp_peer_ast_entry_del_by_soc,
.txrx_peer_ast_delete_by_pdev =
dp_peer_ast_entry_del_by_pdev,
.txrx_peer_HMWDS_ast_delete = dp_peer_HMWDS_ast_entry_del,
.txrx_peer_delete = dp_peer_delete_wifi3,
#ifdef DP_RX_UDP_OVER_PEER_ROAM
.txrx_update_roaming_peer = dp_update_roaming_peer_wifi3,

View File

@@ -123,11 +123,11 @@ static int dp_update_wds_entry_wrapper(struct dp_soc *soc,
*
* Return: None
*/
static void dp_del_wds_entry_wrapper(struct dp_soc *soc,
uint8_t vdev_id,
uint8_t *wds_macaddr,
uint8_t type,
uint8_t delete_in_fw)
void dp_del_wds_entry_wrapper(struct dp_soc *soc,
uint8_t vdev_id,
uint8_t *wds_macaddr,
uint8_t type,
uint8_t delete_in_fw)
{
target_if_del_wds_entry(soc->ctrl_psoc, vdev_id,
wds_macaddr, type, delete_in_fw);
@@ -171,11 +171,11 @@ static int dp_update_wds_entry_wrapper(struct dp_soc *soc,
return status;
}
static void dp_del_wds_entry_wrapper(struct dp_soc *soc,
uint8_t vdev_id,
uint8_t *wds_macaddr,
uint8_t type,
uint8_t delete_in_fw)
void dp_del_wds_entry_wrapper(struct dp_soc *soc,
uint8_t vdev_id,
uint8_t *wds_macaddr,
uint8_t type,
uint8_t delete_in_fw)
{
soc->cdp_soc.ol_ops->peer_del_wds_entry(soc->ctrl_psoc,
vdev_id,
@@ -183,8 +183,16 @@ static void dp_del_wds_entry_wrapper(struct dp_soc *soc,
type,
delete_in_fw);
}
#endif
#endif
#endif /* BYPASS_OL_OPS */
#else
void dp_del_wds_entry_wrapper(struct dp_soc *soc,
uint8_t vdev_id,
uint8_t *wds_macaddr,
uint8_t type,
uint8_t delete_in_fw)
{
}
#endif /* FEATURE_AST */
#ifdef FEATURE_WDS
static inline bool

View File

@@ -1258,6 +1258,22 @@ QDF_STATUS dp_peer_ast_hash_attach(struct dp_soc *soc);
*/
QDF_STATUS dp_peer_mec_hash_attach(struct dp_soc *soc);
/**
* dp_del_wds_entry_wrapper() - delete a WDS AST entry
* @soc: DP soc structure pointer
* @vdev_id: vdev_id
* @wds_macaddr: MAC address of ast node
* @type: type from enum cdp_txrx_ast_entry_type
* @delete_in_fw: Flag to indicate if entry needs to be deleted in fw
*
* This API is used to delete an AST entry from fw
*
* Return: None
*/
void dp_del_wds_entry_wrapper(struct dp_soc *soc, uint8_t vdev_id,
uint8_t *wds_macaddr, uint8_t type,
uint8_t delete_in_fw);
void dp_soc_wds_attach(struct dp_soc *soc);
/**