From 4bb252b2a3327ea56ed1f2f901169d25c2b36251 Mon Sep 17 00:00:00 2001 From: Rakesh Pillai Date: Mon, 24 Apr 2023 00:00:59 -0700 Subject: [PATCH] qcacmn: Featurize wlan repeater handling in multipass Currently the packet tx handling for AP-multipass assumes wlan repeater to be present. For targets like qca6490, kiwi etc, wlan repeaters are not supported in the network topology. Hence to skip unwanted tx packet copy in per-pkt path, move the code to handle packet tx to waln repeater in multipass mode under a feature macro. Change-Id: I8bb3fbc4f3de76c3ae04978d12d369fad5d2553f CRs-Fixed: 3491508 --- dp/wifi3.0/dp_tx.c | 52 +++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 0a35856a79..8a324a1a03 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -6770,29 +6770,14 @@ uint8_t dp_tx_need_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev, return DP_VLAN_UNTAGGED; } -bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev, - qdf_nbuf_t nbuf, - struct dp_tx_msdu_info_s *msdu_info) +#ifndef WLAN_REPEATER_NOT_SUPPORTED +static inline void +dp_tx_multipass_send_pkt_to_repeater(struct dp_soc *soc, struct dp_vdev *vdev, + qdf_nbuf_t nbuf, + struct dp_tx_msdu_info_s *msdu_info) { - uint16_t vlan_id = 0; - uint16_t group_key = 0; - uint8_t is_spcl_peer = DP_VLAN_UNTAGGED; qdf_nbuf_t nbuf_copy = NULL; - if (HTT_TX_MSDU_EXT2_DESC_FLAG_VALID_KEY_FLAGS_GET(msdu_info->meta_data[0])) - return true; - - is_spcl_peer = dp_tx_need_multipass_process(soc, vdev, nbuf, &vlan_id); - - if ((is_spcl_peer != DP_VLAN_TAGGED_MULTICAST) && - (is_spcl_peer != DP_VLAN_TAGGED_UNICAST)) - return true; - - if (is_spcl_peer == DP_VLAN_TAGGED_UNICAST) { - dp_tx_remove_vlan_tag(vdev, nbuf); - return true; - } - /* AP can have classic clients, special clients & * classic repeaters. * 1. Classic clients & special client: @@ -6822,10 +6807,35 @@ bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev, HTT_INVALID_PEER, NULL); if (nbuf_copy) { qdf_nbuf_free(nbuf_copy); - qdf_err("nbuf_copy send failed"); + dp_info_rl("nbuf_copy send failed"); } } +} +#endif +bool dp_tx_multipass_process(struct dp_soc *soc, struct dp_vdev *vdev, + qdf_nbuf_t nbuf, + struct dp_tx_msdu_info_s *msdu_info) +{ + uint16_t vlan_id = 0; + uint16_t group_key = 0; + uint8_t is_spcl_peer = DP_VLAN_UNTAGGED; + + if (HTT_TX_MSDU_EXT2_DESC_FLAG_VALID_KEY_FLAGS_GET(msdu_info->meta_data[0])) + return true; + + is_spcl_peer = dp_tx_need_multipass_process(soc, vdev, nbuf, &vlan_id); + + if ((is_spcl_peer != DP_VLAN_TAGGED_MULTICAST) && + (is_spcl_peer != DP_VLAN_TAGGED_UNICAST)) + return true; + + if (is_spcl_peer == DP_VLAN_TAGGED_UNICAST) { + dp_tx_remove_vlan_tag(vdev, nbuf); + return true; + } + + dp_tx_multipass_send_pkt_to_repeater(soc, vdev, nbuf, msdu_info); group_key = vdev->iv_vlan_map[vlan_id]; /*