From 22c79d586e5a7bcb8ea08161e37d1c0d93418a6f Mon Sep 17 00:00:00 2001 From: "Pamidipati, Vijay" Date: Fri, 19 Oct 2018 21:39:42 +0530 Subject: [PATCH] qcacmn: Do not use wds_en flag for ADDR search flag update Using wds_en flag to control ADDR search flags in Transmit Descriptor was causing DP to wrongly use ADDRY search instead of ADDRX search on WDS repeater for DBDC repeater and SON scenarios. Fix this by removing the use of this flag in dp_tx_vdev_update_search_flags API Change-Id: Id8ca40f926d58b8267e89d30c2b54cc42b4d4182 CRs-Fixed: 2335867 --- dp/wifi3.0/dp_tx.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 6af8451f6d0c..ebbd0553e5d1 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -3265,6 +3265,30 @@ QDF_STATUS dp_tx_vdev_attach(struct dp_vdev *vdev) return QDF_STATUS_SUCCESS; } +#ifdef FEATURE_WDS +static inline bool dp_tx_da_search_override(struct dp_vdev *vdev) +{ + struct dp_soc *soc = vdev->pdev->soc; + + /* + * If AST index override support is available (HKv2 etc), + * DA search flag be enabled always + * + * If AST index override support is not available (HKv1), + * DA search flag should be used for all modes except QWRAP + */ + if (soc->ast_override_support || !vdev->proxysta_vdev) + return true; + + return false; +} +#else +static inline bool dp_tx_da_search_override(struct dp_vdev *vdev) +{ + return false; +} +#endif + /** * dp_tx_vdev_update_search_flags() - Update vdev flags as per opmode * @vdev: virtual device instance @@ -3291,9 +3315,7 @@ void dp_tx_vdev_update_search_flags(struct dp_vdev *vdev) vdev->hal_desc_addr_search_flags = (HAL_TX_DESC_ADDRX_EN | HAL_TX_DESC_ADDRY_EN); else if ((vdev->opmode == wlan_op_mode_sta) && - (!vdev->wds_enabled || - (vdev->proxysta_vdev && - !soc->ast_override_support))) + !dp_tx_da_search_override(vdev)) vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRY_EN; else vdev->hal_desc_addr_search_flags = HAL_TX_DESC_ADDRX_EN;