From 9fa046409b59283ca8be37f0a52c8ab64a90e4ca Mon Sep 17 00:00:00 2001 From: Naga Date: Thu, 10 Sep 2020 07:50:12 +0530 Subject: [PATCH] qcacmn: FR-64493 WDS Extended support Added API send event to control path for created dedicated net device for backhaul when WDS extended feature is enabled. This API will be called when 1st 4 address is received from backhaul. Change-Id: Ie473e582edf3974eb18997f578b02562671c4e9f CRs-Fixed: 2773485 --- dp/wifi3.0/dp_txrx_wds.h | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/dp/wifi3.0/dp_txrx_wds.h b/dp/wifi3.0/dp_txrx_wds.h index 16e4fed188..e468651eab 100644 --- a/dp/wifi3.0/dp_txrx_wds.h +++ b/dp/wifi3.0/dp_txrx_wds.h @@ -82,6 +82,39 @@ void dp_hmwds_ast_add_notify(struct dp_peer *peer, QDF_STATUS err, bool is_peer_map); +#ifdef QCA_SUPPORT_WDS_EXTENDED +/** + * dp_wds_ext_peer_learn() - function to send event to control + * path on receiving 1st 4-address frame from backhaul. + * @soc: DP soc + * @ta_peer: WDS repeater peer + * + * Return: void + */ +static inline void dp_wds_ext_peer_learn(struct dp_soc *soc, + struct dp_peer *ta_peer) +{ + uint8_t wds_ext_src_mac[QDF_MAC_ADDR_SIZE]; + + if (ta_peer->vdev->wds_ext_enabled && + !qdf_atomic_test_and_set_bit(WDS_EXT_PEER_INIT_BIT, + &ta_peer->wds_ext.init)) { + qdf_mem_copy(wds_ext_src_mac, &ta_peer->mac_addr.raw[0], + QDF_MAC_ADDR_SIZE); + soc->cdp_soc.ol_ops->rx_wds_ext_peer_learn( + soc->ctrl_psoc, + ta_peer->peer_id, + ta_peer->vdev->vdev_id, + wds_ext_src_mac); + } +} +#else +static inline void dp_wds_ext_peer_learn(struct dp_soc *soc, + struct dp_peer *ta_peer) +{ +} +#endif + /** * dp_rx_wds_add_or_update_ast() - Add or update the ast entry. * @@ -138,6 +171,7 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer, (qdf_nbuf_data(nbuf) + QDF_MAC_ADDR_SIZE), QDF_MAC_ADDR_SIZE); + dp_wds_ext_peer_learn(soc, ta_peer); ret = dp_peer_add_ast(soc, ta_peer, wds_src_mac, @@ -254,10 +288,12 @@ dp_rx_wds_add_or_update_ast(struct dp_soc *soc, struct dp_peer *ta_peer, * learning is disable on STA vap */ if (soc->ast_override_support && - (ta_peer->vdev->opmode == wlan_op_mode_sta)) + (ta_peer->vdev->opmode == wlan_op_mode_sta)) { dp_peer_del_ast(soc, ast); - else + } else { + dp_wds_ext_peer_learn(soc, ta_peer); dp_peer_update_ast(soc, ta_peer, ast, flags); + } qdf_spin_unlock_bh(&soc->ast_lock); return; }