diff --git a/dp/inc/cdp_txrx_cfg.h b/dp/inc/cdp_txrx_cfg.h index edb083180b..8113688608 100644 --- a/dp/inc/cdp_txrx_cfg.h +++ b/dp/inc/cdp_txrx_cfg.h @@ -333,4 +333,55 @@ cdp_cfg_set_new_htt_msg_format(ol_txrx_soc_handle soc, soc->ops->cfg_ops->set_new_htt_msg_format(val); } +/** + * cdp_cfg_set_peer_unmap_conf_support() - set peer unmap conf feature + * @soc - datapath soc handle + * @val - enable or disable peer unmap conf feature + * + * Set if peer unmap confirmation feature is supported by both FW and in INI + * + * return NONE + */ +static inline void +cdp_cfg_set_peer_unmap_conf_support(ol_txrx_soc_handle soc, bool val) +{ + if (!soc || !soc->ops) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, + "%s invalid instance", __func__); + QDF_BUG(0); + return; + } + + if (!soc->ops->cfg_ops || + !soc->ops->cfg_ops->set_peer_unmap_conf_support) + return; + + soc->ops->cfg_ops->set_peer_unmap_conf_support(val); +} + +/** + * cdp_cfg_get_peer_unmap_conf_support() - check peer unmap conf feature + * @soc - datapath soc handle + * + * Check if peer unmap confirmation feature is enabled + * + * return true is peer unmap confirmation feature is enabled else false + */ +static inline bool +cdp_cfg_get_peer_unmap_conf_support(ol_txrx_soc_handle soc) +{ + if (!soc || !soc->ops) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, + "%s invalid instance", __func__); + QDF_BUG(0); + return false; + } + + if (!soc->ops->cfg_ops || + !soc->ops->cfg_ops->get_peer_unmap_conf_support) + return false; + + return soc->ops->cfg_ops->get_peer_unmap_conf_support(); +} + #endif /* _CDP_TXRX_CFG_H_ */ diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index 2efa1d9831..8987785234 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -702,6 +702,30 @@ cdp_peer_delete(ol_txrx_soc_handle soc, void *peer, uint32_t bitmap) soc->ops->cmn_drv_ops->txrx_peer_delete(peer, bitmap); } +static inline void +cdp_peer_delete_sync(ol_txrx_soc_handle soc, void *peer, + QDF_STATUS(*delete_cb)( + uint8_t vdev_id, + uint32_t peerid_cnt, + uint16_t *peerid_list), + uint32_t bitmap) +{ + 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_delete_sync) + return; + + soc->ops->cmn_drv_ops->txrx_peer_delete_sync(peer, + delete_cb, + bitmap); +} + static inline int cdp_set_monitor_mode(ol_txrx_soc_handle soc, struct cdp_vdev *vdev, uint8_t smart_monitor) diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index d142d9aded..73a9863f4f 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -372,6 +372,13 @@ typedef struct cdp_soc_t *ol_txrx_soc_handle; */ typedef void (*ol_txrx_vdev_delete_cb)(void *context); +/** + * ol_txrx_peer_unmap_sync_cb - callback registered during peer detach sync + */ +typedef QDF_STATUS(*ol_txrx_peer_unmap_sync_cb)(uint8_t vdev_id, + uint32_t peer_id_cnt, + uint16_t *peer_id_list); + /** * ol_txrx_pkt_direction - Packet Direction * @rx_direction: rx path packet diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 922ec24736..88169fa7b3 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -158,6 +158,12 @@ struct cdp_cmn_ops { QDF_STATUS (*txrx_set_monitor_mode)(struct cdp_vdev *vdev, uint8_t smart_monitor); + void (*txrx_peer_delete_sync)(void *peer, + QDF_STATUS(*delete_cb)( + uint8_t vdev_id, + uint32_t peerid_cnt, + uint16_t *peerid_list), + uint32_t bitmap); uint8_t (*txrx_get_pdev_id_frm_pdev)(struct cdp_pdev *pdev); @@ -999,11 +1005,15 @@ struct cdp_pmf_ops { * @set_cfg_packet_log_enabled: * @cfg_attach: * @vdev_rx_set_intrabss_fwd: - * @get_opmode: * @is_rx_fwd_disabled: * @tx_set_is_mgmt_over_wmi_enabled: * @is_high_latency: * @set_flow_control_parameters: + * @set_flow_steering: + * @set_ptp_rx_opt_enabled: + * @set_new_htt_msg_format: + * @set_peer_unmap_conf_support: + * @get_peer_unmap_conf_support: */ struct cdp_cfg_ops { void (*set_cfg_rx_fwd_disabled)(struct cdp_cfg *cfg_pdev, @@ -1020,6 +1030,8 @@ struct cdp_cfg_ops { void (*set_flow_steering)(struct cdp_cfg *cfg_pdev, uint8_t val); void (*set_ptp_rx_opt_enabled)(struct cdp_cfg *cfg_pdev, uint8_t val); void (*set_new_htt_msg_format)(uint8_t val); + void (*set_peer_unmap_conf_support)(bool val); + bool (*get_peer_unmap_conf_support)(void); }; /**