diff --git a/dp/inc/cdp_txrx_mlo.h b/dp/inc/cdp_txrx_mlo.h index e07dfdfc8d..8fbbf7bf77 100644 --- a/dp/inc/cdp_txrx_mlo.h +++ b/dp/inc/cdp_txrx_mlo.h @@ -19,25 +19,40 @@ struct cdp_mlo_ctxt; -/** - * cdp_ctrl_mlo_mgr - opaque handle for mlo manager context - */ -struct cdp_ctrl_mlo_mgr; - struct cdp_mlo_ctxt *dp_mlo_ctxt_attach_wifi3(struct cdp_ctrl_mlo_mgr *ctrl_ctxt); void dp_mlo_ctxt_detach_wifi3(struct cdp_mlo_ctxt *ml_ctxt); static inline -struct cdp_mlo_ctxt *cdp_mlo_ctxt_attach(struct cdp_ctrl_mlo_mgr *ctrl_ctxt) +struct cdp_mlo_ctxt *cdp_mlo_ctxt_attach(ol_txrx_soc_handle soc, + struct cdp_ctrl_mlo_mgr *ctrl_ctxt) { - return dp_mlo_ctxt_attach_wifi3(ctrl_ctxt); + if (!soc || !soc->ops) { + QDF_BUG(0); + return NULL; + } + + if (!soc->ops->mlo_ops || + !soc->ops->mlo_ops->mlo_ctxt_attach) + return NULL; + + return soc->ops->mlo_ops->mlo_ctxt_attach(ctrl_ctxt); } static inline -void cdp_mlo_ctxt_detach(struct cdp_mlo_ctxt *ml_ctxt) +void cdp_mlo_ctxt_detach(ol_txrx_soc_handle soc, + struct cdp_mlo_ctxt *ml_ctxt) { - dp_mlo_ctxt_detach_wifi3(ml_ctxt); + if (!soc || !soc->ops) { + QDF_BUG(0); + return; + } + + if (!soc->ops->mlo_ops || + !soc->ops->mlo_ops->mlo_ctxt_detach) + return; + + soc->ops->mlo_ops->mlo_ctxt_detach(ml_ctxt); } static inline void cdp_soc_mlo_soc_setup(ol_txrx_soc_handle soc, diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 29166685f9..f8c7b5aa02 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -48,6 +48,11 @@ #define CDP_PEER_DO_NOT_START_UNMAP_TIMER 1 struct hif_opaque_softc; +/** + * cdp_ctrl_mlo_mgr - opaque handle for mlo manager context + */ +struct cdp_ctrl_mlo_mgr; + /* same as ieee80211_nac_param */ enum cdp_nac_param_cmd { @@ -148,6 +153,8 @@ enum cdp_peer_txq_flush_policy { * @mlo_update_delta_tsf2: update delta tsf2 for link * @mlo_update_delta_tqm: update delta tqm for SOC * @mlo_update_mlo_ts_offset: update MLO timestamp offset for SOC + * @mlo_ctxt_attach: Attach DP MLO context + * @mlo_ctxt_detach: Detach DP MLO context */ #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) struct cdp_mlo_ops { @@ -160,6 +167,8 @@ struct cdp_mlo_ops { int8_t *vdev_ids, uint8_t num_vdevs, uint8_t vdev_id); void (*mlo_setup_complete)(struct cdp_mlo_ctxt *mlo_ctxt); + struct cdp_mlo_ctxt *(*mlo_ctxt_attach)(struct cdp_ctrl_mlo_mgr *m_ctx); + void (*mlo_ctxt_detach)(struct cdp_mlo_ctxt *mlo_ctxt); void (*mlo_update_delta_tsf2)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id, uint64_t delta_tsf2); diff --git a/dp/wifi3.0/be/mlo/dp_mlo.c b/dp/wifi3.0/be/mlo/dp_mlo.c index 69082701e1..6d021468b2 100644 --- a/dp/wifi3.0/be/mlo/dp_mlo.c +++ b/dp/wifi3.0/be/mlo/dp_mlo.c @@ -523,6 +523,8 @@ static struct cdp_mlo_ops dp_mlo_ops = { .mlo_update_delta_tsf2 = dp_mlo_update_delta_tsf2, .mlo_update_delta_tqm = dp_mlo_update_delta_tqm, .mlo_update_mlo_ts_offset = dp_mlo_update_mlo_ts_offset, + .mlo_ctxt_attach = dp_mlo_ctxt_attach_wifi3, + .mlo_ctxt_detach = dp_mlo_ctxt_detach_wifi3, }; void dp_soc_mlo_fill_params(struct dp_soc *soc,