From 6ac5a1226eb1d450c757ab1c96a6418f2e460a77 Mon Sep 17 00:00:00 2001 From: Surabhi Vishnoi Date: Mon, 13 Jul 2020 13:51:21 +0530 Subject: [PATCH] qcacld-3.0: Add support for CFR in adrastea target in Kbuild Add support for CFR feature for adrastea target. A new feature flag CONFIG_WLAN_CFR_ADRASTEA is introduced for this purpose. Also adrastea do not support enhanced CFR so when only WLAN_CFR_ENABLE and WLAN_CFR_ADRASTEA are enabled, some compilation issues are seen as CONFIG_WLAN_ENH_CFR_ENABLE is not set. Fix these compilation issues as well as introduce a new feature flag to add support for CFR in adrastea. Change-Id: I52bc235c4d271004698163897c15721023410017 CRs-Fixed: 2705119 --- Kbuild | 8 ++- core/hdd/src/wlan_hdd_cfr.c | 132 ++++++++++++++++++------------------ 2 files changed, 73 insertions(+), 67 deletions(-) diff --git a/Kbuild b/Kbuild index d7c05f1f7b..d82e1d597e 100644 --- a/Kbuild +++ b/Kbuild @@ -1081,8 +1081,13 @@ WLAN_CFR_OBJS := $(WLAN_CFR_CORE_DIR)/cfr_common.o \ $(WLAN_CFR_DISP_DIR)/wlan_cfr_ucfg_api.o \ $(WLAN_CFR_DISP_DIR)/wlan_cfr_utils_api.o \ $(WLAN_COMMON_ROOT)/target_if/cfr/src/target_if_cfr.o \ - $(WLAN_COMMON_ROOT)/target_if/cfr/src/target_if_cfr_enh.o \ $(WLAN_COMMON_ROOT)/target_if/cfr/src/target_if_cfr_6490.o +ifeq ($(CONFIG_WLAN_ENH_CFR_ENABLE),y) +WLAN_CFR_OBJS += $(WLAN_COMMON_ROOT)/target_if/cfr/src/target_if_cfr_enh.o +endif +ifeq ($(CONFIG_WLAN_CFR_ADRASTEA),y) +WLAN_CFR_OBJS += $(WLAN_COMMON_ROOT)/target_if/cfr/src/target_if_cfr_adrastea.o +endif endif $(call add-wlan-objs,wlan_cfr,$(WLAN_CFR_OBJS)) @@ -2849,6 +2854,7 @@ cppflags-$(CONFIG_WLAN_CONV_SPECTRAL_ENABLE) += -DWLAN_CONV_SPECTRAL_ENABLE cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DWLAN_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_ENH_CFR_ENABLE cppflags-$(CONFIG_WLAN_ENH_CFR_ENABLE) += -DWLAN_CFR_PM +cppflags-$(CONFIG_WLAN_CFR_ADRASTEA) += -DWLAN_CFR_ADRASTEA cppflags-$(CONFIG_WLAN_CFR_ENABLE) += -DCFR_USE_FIXED_FOLDER cppflags-$(CONFIG_WLAN_FEATURE_MEDIUM_ASSESS) += -DWLAN_FEATURE_MEDIUM_ASSESS cppflags-$(CONFIG_FEATURE_RADAR_HISTORY) += -DFEATURE_RADAR_HISTORY diff --git a/core/hdd/src/wlan_hdd_cfr.c b/core/hdd/src/wlan_hdd_cfr.c index 0c266c4bf7..8660961222 100644 --- a/core/hdd/src/wlan_hdd_cfr.c +++ b/core/hdd/src/wlan_hdd_cfr.c @@ -348,6 +348,72 @@ wlan_cfg80211_cfr_set_config(struct wlan_objmgr_vdev *vdev, return 0; } +static int +wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter, + struct nlattr **tb) +{ + struct cfr_wlanconfig_param params = { 0 }; + struct wlan_objmgr_vdev *vdev; + bool is_start_capture = false; + int ret = 0; + + if (tb[QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE]) { + is_start_capture = nla_get_flag(tb[ + QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE]); + } + + if (is_start_capture && + !tb[QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE_GROUP_BITMAP]) { + hdd_err("Invalid group bitmap"); + return -EINVAL; + } + + vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_CFR_ID); + if (!vdev) { + hdd_err("can't get vdev"); + return -EINVAL; + } + + if (is_start_capture) { + ret = wlan_cfg80211_cfr_set_config(vdev, tb); + if (ret) { + hdd_err("set config failed"); + goto out; + } + params.en_cfg = nla_get_u32(tb[ + QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE_GROUP_BITMAP]); + hdd_debug("params.en_cfg %d", params.en_cfg); + ucfg_cfr_set_en_bitmap(vdev, ¶ms); + } else { + hdd_debug("cleanup rcc mode"); + ucfg_cfr_set_rcc_mode(vdev, RCC_DIS_ALL_MODE, 0); + } + + if (is_start_capture) + ucfg_cfr_resume(wlan_vdev_get_pdev(vdev)); + + ucfg_cfr_subscribe_ppdu_desc(wlan_vdev_get_pdev(vdev), + is_start_capture); + ucfg_cfr_committed_rcc_config(vdev); + if (!is_start_capture) { + ucfg_cfr_stop_indication(vdev); + ucfg_cfr_suspend(wlan_vdev_get_pdev(vdev)); + hdd_debug("stop indication done"); + } + +out: + hdd_objmgr_put_vdev_by_user(vdev, WLAN_CFR_ID); + return ret; +} +#else +static int +wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter, + struct nlattr **tb) +{ + return 0; +} +#endif + #ifdef WLAN_CFR_ADRASTEA static QDF_STATUS wlan_cfg80211_peer_cfr_capture_cfg_adrastea(struct hdd_adapter *adapter, @@ -461,72 +527,6 @@ wlan_cfg80211_peer_cfr_capture_cfg_adrastea(struct hdd_adapter *adapter, } #endif -static int -wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter, - struct nlattr **tb) -{ - struct cfr_wlanconfig_param params = { 0 }; - struct wlan_objmgr_vdev *vdev; - bool is_start_capture = false; - int ret = 0; - - if (tb[QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE]) { - is_start_capture = nla_get_flag(tb[ - QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE]); - } - - if (is_start_capture && - !tb[QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE_GROUP_BITMAP]) { - hdd_err("Invalid group bitmap"); - return -EINVAL; - } - - vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_CFR_ID); - if (!vdev) { - hdd_err("can't get vdev"); - return -EINVAL; - } - - if (is_start_capture) { - ret = wlan_cfg80211_cfr_set_config(vdev, tb); - if (ret) { - hdd_err("set config failed"); - goto out; - } - params.en_cfg = nla_get_u32(tb[ - QCA_WLAN_VENDOR_ATTR_PEER_CFR_ENABLE_GROUP_BITMAP]); - hdd_debug("params.en_cfg %d", params.en_cfg); - ucfg_cfr_set_en_bitmap(vdev, ¶ms); - } else { - hdd_debug("cleanup rcc mode"); - ucfg_cfr_set_rcc_mode(vdev, RCC_DIS_ALL_MODE, 0); - } - - if (is_start_capture) - ucfg_cfr_resume(wlan_vdev_get_pdev(vdev)); - - ucfg_cfr_subscribe_ppdu_desc(wlan_vdev_get_pdev(vdev), - is_start_capture); - ucfg_cfr_committed_rcc_config(vdev); - if (!is_start_capture) { - ucfg_cfr_stop_indication(vdev); - ucfg_cfr_suspend(wlan_vdev_get_pdev(vdev)); - hdd_debug("stop indication done"); - } - -out: - hdd_objmgr_put_vdev_by_user(vdev, WLAN_CFR_ID); - return ret; -} -#else -static int -wlan_cfg80211_peer_enh_cfr_capture(struct hdd_adapter *adapter, - struct nlattr **tb) -{ - return 0; -} -#endif - static int wlan_cfg80211_peer_cfr_capture_cfg(struct wiphy *wiphy, struct hdd_adapter *adapter,