diff --git a/dp/wifi3.0/be/dp_be.c b/dp/wifi3.0/be/dp_be.c index 690bd0dd4f..dc6432f29e 100644 --- a/dp/wifi3.0/be/dp_be.c +++ b/dp/wifi3.0/be/dp_be.c @@ -1832,10 +1832,25 @@ dp_initialize_arch_ops_be_mcast_mlo(struct dp_arch_ops *arch_ops) } #endif /* WLAN_MCAST_MLO */ +#ifdef WLAN_MLO_MULTI_CHIP +static inline void +dp_initialize_arch_ops_be_mlo_ptnr_chip(struct dp_arch_ops *arch_ops) +{ + arch_ops->dp_partner_chips_map = dp_mlo_partner_chips_map; + arch_ops->dp_partner_chips_unmap = dp_mlo_partner_chips_unmap; +} +#else +static inline void +dp_initialize_arch_ops_be_mlo_ptnr_chip(struct dp_arch_ops *arch_ops) +{ +} +#endif + static inline void dp_initialize_arch_ops_be_mlo(struct dp_arch_ops *arch_ops) { dp_initialize_arch_ops_be_mcast_mlo(arch_ops); + dp_initialize_arch_ops_be_mlo_ptnr_chip(arch_ops); arch_ops->mlo_peer_find_hash_detach = dp_mlo_peer_find_hash_detach_wrapper; arch_ops->mlo_peer_find_hash_attach = diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index 55243c6931..8a830c462c 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/dp/wifi3.0/be/dp_be.h @@ -406,7 +406,28 @@ dp_mlo_get_peer_hash_obj(struct dp_soc *soc) void dp_clr_mlo_ptnr_list(struct dp_soc *soc, struct dp_vdev *vdev); -#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO) +#if defined(WLAN_FEATURE_11BE_MLO) +/** + * dp_mlo_partner_chips_map() - Map MLO peers to partner SOCs + * @soc: Soc handle + * @peer: DP peer handle for ML peer + * @peer_id: peer_id + * Return: None + */ +void dp_mlo_partner_chips_map(struct dp_soc *soc, + struct dp_peer *peer, + uint16_t peer_id); + +/** + * dp_mlo_partner_chips_unmap() - Unmap MLO peers to partner SOCs + * @soc: Soc handle + * @peer_id: peer_id + * Return: None + */ +void dp_mlo_partner_chips_unmap(struct dp_soc *soc, + uint16_t peer_id); + +#ifdef WLAN_MCAST_MLO typedef void dp_ptnr_vdev_iter_func(struct dp_vdev_be *be_vdev, struct dp_vdev *ptnr_vdev, void *arg); @@ -450,6 +471,7 @@ struct dp_vdev *dp_mlo_get_mcast_primary_vdev(struct dp_soc_be *be_soc, struct dp_vdev_be *be_vdev, enum dp_mod_id mod_id); #endif +#endif #else typedef struct dp_soc_be *dp_mld_peer_hash_obj_t; diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index 9a566f50d9..27c4dd0652 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -2874,7 +2874,8 @@ static inline struct dp_peer *dp_peer_find_add_id(struct dp_soc *soc, return NULL; } dp_peer_find_id_to_obj_add(soc, peer, peer_id); - dp_mlo_partner_chips_map(soc, peer, peer_id); + if (soc->arch_ops.dp_partner_chips_map) + soc->arch_ops.dp_partner_chips_map(soc, peer, peer_id); dp_peer_update_state(soc, peer, DP_PEER_STATE_ACTIVE); return peer; @@ -3239,7 +3240,10 @@ dp_rx_peer_unmap_handler(struct dp_soc *soc, uint16_t peer_id, dp_peer_rx_reo_shared_qaddr_delete(soc, peer); dp_peer_find_id_to_obj_remove(soc, peer_id); - dp_mlo_partner_chips_unmap(soc, peer_id); + + if (soc->arch_ops.dp_partner_chips_unmap) + soc->arch_ops.dp_partner_chips_unmap(soc, peer_id); + peer->peer_id = HTT_INVALID_PEER; /* diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index 8a42df9717..aa3099d865 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -1907,39 +1907,6 @@ static inline void dp_print_mlo_ast_stats_be(struct dp_soc *soc) } #endif /* WLAN_FEATURE_11BE_MLO */ -#if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) -/** - * dp_mlo_partner_chips_map() - Map MLO peers to partner SOCs - * @soc: Soc handle - * @peer: DP peer handle for ML peer - * @peer_id: peer_id - * Return: None - */ -void dp_mlo_partner_chips_map(struct dp_soc *soc, - struct dp_peer *peer, - uint16_t peer_id); - -/** - * dp_mlo_partner_chips_unmap() - Unmap MLO peers to partner SOCs - * @soc: Soc handle - * @peer_id: peer_id - * Return: None - */ -void dp_mlo_partner_chips_unmap(struct dp_soc *soc, - uint16_t peer_id); -#else -static inline void dp_mlo_partner_chips_map(struct dp_soc *soc, - struct dp_peer *peer, - uint16_t peer_id) -{ -} - -static inline void dp_mlo_partner_chips_unmap(struct dp_soc *soc, - uint16_t peer_id) -{ -} -#endif - static inline QDF_STATUS dp_peer_rx_tids_create(struct dp_peer *peer) { diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 1b81ff3fb9..d53510b0c3 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -1947,6 +1947,11 @@ struct dp_arch_ops { struct hal_tx_completion_status *ts, uint32_t *delay_us); void (*print_mlo_ast_stats)(struct dp_soc *soc); + void (*dp_partner_chips_map)(struct dp_soc *soc, + struct dp_peer *peer, + uint16_t peer_id); + void (*dp_partner_chips_unmap)(struct dp_soc *soc, + uint16_t peer_id); }; /**