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
This commit is contained in:
Surabhi Vishnoi 2020-07-13 13:51:21 +05:30 committed by Madan Koyyalamudi
parent 8890408df0
commit 6ac5a1226e
2 changed files with 73 additions and 67 deletions

8
Kbuild
View File

@ -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

View File

@ -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, &params);
} 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, &params);
} 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,