Browse Source

qcacld-3.0: Add ACS CFG/INI items to MLME component

Add following CFG items to mlme component

1.CFG_ACS_WITH_MORE_PARAM_NAME
2.CFG_AUTO_CHANNEL_SELECT_WEIGHT
3.CFG_USER_AUTO_CHANNEL_SELECTION
4.CFG_USER_ACS_DFS_LTE
5.CFG_EXTERNAL_ACS_POLICY

Change-Id: If31451c2141ec6c30d5590f92a0b36253eaa5c46
CRS-Fixed: 2315978
Harprit Chhabada 6 years ago
parent
commit
1eeeb8dd85

+ 6 - 4
components/mlme/dispatcher/inc/cfg_mlme.h

@@ -26,6 +26,7 @@
 #include "cfg_mlme_chainmask.h"
 #include "cfg_mlme_edca_params.h"
 #include "cfg_mlme_generic.h"
+#include "cfg_mlme_acs.h"
 #include "cfg_mlme_ht_caps.h"
 #include "cfg_mlme_he_caps.h"
 #include "cfg_mlme_lfr.h"
@@ -46,6 +47,7 @@
 
 /* Please Maintain Alphabetic Order here */
 #define CFG_MLME_ALL \
+	CFG_ACS_ALL \
 	CFG_CHAINMASK_ALL \
 	CFG_EDCA_PARAMS_ALL \
 	CFG_FEATURE_FLAG_ALL \
@@ -54,18 +56,18 @@
 	CFG_HE_CAPS_ALL \
 	CFG_LFR_ALL \
 	CFG_MBO_ALL \
+	CFG_MLME_PRODUCT_DETAILS_ALL \
 	CFG_OBSS_HT40_ALL \
 	CFG_OCE_ALL \
 	CFG_QOS_ALL \
 	CFG_RATES_ALL \
 	CFG_SAP_ALL \
-	CFG_MLME_PRODUCT_DETAILS_ALL \
 	CFG_SAP_PROTECTION_ALL \
 	CFG_SCORING_ALL \
 	CFG_STA_ALL \
-	CFG_VHT_CAPS_ALL \
-	CFG_WEP_PARAMS_ALL \
 	CFG_THRESHOLD_ALL \
-	CFG_VHT_CAPS_ALL
+	CFG_VHT_CAPS_ALL \
+	CFG_VHT_CAPS_ALL \
+	CFG_WEP_PARAMS_ALL
 
 #endif /* __CFG_MLME_H */

+ 165 - 0
components/mlme/dispatcher/inc/cfg_mlme_acs.h

@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for
+ * any purpose with or without fee is hereby granted, provided that the
+ * above copyright notice and this permission notice appear in all
+ * copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+ * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/**
+ * DOC: This file contains centralized definitions of converged configuration.
+ */
+
+#ifndef __CFG_MLME_ACS_H
+#define __CFG_MLME_ACS_H
+
+/*
+ * <ini>
+ * acs_with_more_param- Enable acs calculation with more param.
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to enable acs calculation with more param.
+ *
+ * Related: NA
+ *
+ * Supported Feature: ACS
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#define CFG_ACS_WITH_MORE_PARAM CFG_INI_BOOL( \
+		"acs_with_more_param", \
+		0, \
+		"Enable ACS with more param")
+
+/*
+ * <ini>
+ * AutoChannelSelectWeight - ACS channel weight
+ * @Min: 0
+ * @Max: 0xFFFFFFFF
+ * @Default: 0x000000FF
+ *
+ * This ini is used to adjust weight of factors in
+ * acs algorithm.
+ *
+ * Supported Feature: ACS
+ *
+ * Usage: Internal/External
+ *
+ * bits 0-3:   rssi weight
+ * bits 4-7:   bss count weight
+ * bits 8-11:  noise floor weight
+ * bits 12-15: channel free weight
+ * bits 16-19: tx power range weight
+ * bits 20-23: tx power throughput weight
+ * bits 24-31: reserved
+ *
+ * </ini>
+ */
+
+#define CFG_AUTO_CHANNEL_SELECT_WEIGHT CFG_INI_UINT( \
+		"AutoChannelSelectWeight", \
+		0, \
+		0xFFFFFFFF, \
+		0x000000FF, \
+		CFG_VALUE_OR_DEFAULT, \
+		"Adjust weight factor in ACS")
+
+/*
+ * <ini>
+ * gvendor_acs_support - vendor based channel selection manager
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * Enabling this parameter will force driver to use user application based
+ * channel selection algo instead of driver based auto channel selection
+ * logic.
+ *
+ * Supported Feature: ACS
+ *
+ * Usage: External/Internal
+ *
+ * </ini>
+ */
+
+#define CFG_USER_AUTO_CHANNEL_SELECTION CFG_INI_BOOL( \
+		"gvendor_acs_support", \
+		0, \
+		"Vendor channel selection manager")
+
+/*
+ * <ini>
+ * gacs_support_for_dfs_lte_coex - acs support for lte coex and dfs event
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * Enabling this parameter will force driver to use user application based
+ * channel selection algo for channel selection in case of dfs and lte
+ * coex event.
+ *
+ * Supported Feature: ACS
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+
+#define CFG_USER_ACS_DFS_LTE CFG_INI_BOOL( \
+		"gacs_support_for_dfs_lte_coex", \
+		0, \
+		"Acs support for lte coex and dfs")
+
+/*
+ * <ini>
+ * external_acs_policy - External ACS policy control
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * Values are per enum hdd_external_acs_policy.
+ *
+ * This ini is used to control the external ACS policy.
+ *
+ * 0 -Preferable for ACS to select a
+ *    channel with non-zero pcl weight.
+ * 1 -Mandatory for ACS to select a
+ *    channel with non-zero pcl weight.
+ *
+ * Related: None
+ *
+ * Supported Feature: ACS
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+
+#define CFG_EXTERNAL_ACS_POLICY CFG_INI_BOOL( \
+		"acs_policy", \
+		0, \
+		"External ACS Policy Control")
+
+#define CFG_ACS_ALL \
+	CFG(CFG_ACS_WITH_MORE_PARAM) \
+	CFG(CFG_AUTO_CHANNEL_SELECT_WEIGHT) \
+	CFG(CFG_USER_AUTO_CHANNEL_SELECTION) \
+	CFG(CFG_USER_ACS_DFS_LTE) \
+	CFG(CFG_EXTERNAL_ACS_POLICY)
+
+#endif /* __CFG_MLME_ACS_H */

+ 55 - 0
components/mlme/dispatcher/inc/wlan_mlme_api.h

@@ -177,6 +177,61 @@ QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
 				     struct mlme_ht_capabilities_info
 				     ht_cap_info);
 
+/**
+ * wlan_mlme_get_acs_with_more_param() - Get the acs_with_more_param flag
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS wlan_mlme_get_acs_with_more_param(struct wlan_objmgr_psoc *psoc,
+					     bool *value);
+
+/**
+ * wlan_mlme_get_auto_channel_weight() - Get the auto channel weight
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS wlan_mlme_get_auto_channel_weight(struct wlan_objmgr_psoc *psoc,
+					     uint32_t *value);
+
+/**
+ * wlan_mlme_get_vendor_acs_support() - Get the vendor based channel selece
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Return: QDF Status
+ */
+
+QDF_STATUS wlan_mlme_get_vendor_acs_support(struct wlan_objmgr_psoc *psoc,
+					    bool *value);
+
+/**
+ * wlan_mlme_get_acs_support_for_dfs_ltecoex() - Get the flag for
+ *						 acs support for dfs ltecoex
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_acs_support_for_dfs_ltecoex(struct wlan_objmgr_psoc *psoc,
+					  bool *value);
+
+/**
+ * wlan_mlme_get_external_acs_policy() - Get the flag for external acs policy
+ *
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+wlan_mlme_get_external_acs_policy(struct wlan_objmgr_psoc *psoc,
+				  bool *value);
+
 /**
  *
  * wlan_mlme_get_sap_inactivity_override() - Check if sap max inactivity

+ 21 - 1
components/mlme/dispatcher/inc/wlan_mlme_public_struct.h

@@ -551,6 +551,22 @@ struct wlan_mlme_product_details_cfg {
 	char manufacture_product_version[WLAN_CFG_MFR_PRODUCT_VERSION_LEN + 1];
 };
 
+/*
+ * struct wlan_mlme_acs - All acs related cfg items
+ * @is_acs_with_more_param - to enable acs with more param
+ * @auto_channel_select_weight - to set acs channel weight
+ * @is_vendor_acs_support - enable application based channel selection
+ * @is_acs_support_for_dfs_ltecoex - enable channel for dfs and lte coex
+ * @is_external_acs_policy - control external policy
+ */
+struct wlan_mlme_acs {
+	bool is_acs_with_more_param;
+	uint32_t auto_channel_select_weight;
+	bool is_vendor_acs_support;
+	bool is_acs_support_for_dfs_ltecoex;
+	bool is_external_acs_policy;
+};
+
 /**
  * struct wlan_mlme_obss_ht40 - OBSS HT40 config items
  * @active_dwelltime:        obss active dwelltime
@@ -887,10 +903,13 @@ struct wlan_mlme_wep_cfg {
  * @he_caps: HE related cfg items
  * @lfr: LFR related CFG Items
  * @obss_ht40:obss ht40 CFG Items
- * @vht_cfg: VHT related CFG Items
+ * @mbo_cfg: Multiband Operation related CFG items
+ * @vht_caps: VHT related CFG Items
  * @rates: Rates related cfg items
  * @product_details: product details related CFG Items
  * @sap_protection_cfg: SAP erp protection related CFG items
+ * @acs: ACS related CFG items
+ * @sap_cfg: sap CFG items
  * @sta: sta CFG Items
  * @scoring: BSS Scoring related CFG Items
  * @threshold: threshold related cfg items
@@ -916,6 +935,7 @@ struct wlan_mlme_cfg {
 	struct wlan_mlme_scoring_cfg scoring;
 	struct wlan_mlme_oce oce;
 	struct wlan_mlme_threshold threshold;
+	struct wlan_mlme_acs acs;
 	struct wlan_mlme_feature_flag feature_flags;
 	struct wlan_mlme_wep_cfg wep_params;
 };

+ 85 - 0
components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h

@@ -149,6 +149,91 @@ QDF_STATUS ucfg_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc,
 	return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info);
 }
 
+/**
+ * ucfg_mlme_get_acs_with_more_param() - Get the flag for acs with
+ *					 more param
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: QDF Status
+ */
+static inline
+QDF_STATUS ucfg_mlme_get_acs_with_more_param(struct wlan_objmgr_psoc *psoc,
+					     bool *value)
+{
+	return wlan_mlme_get_acs_with_more_param(psoc, value);
+}
+
+/**
+ * ucfg_mlme_get_auto_channel_weight() - Get the auto channel select weight
+ *
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: QDF Status
+ */
+static inline
+QDF_STATUS ucfg_mlme_get_auto_channel_weight(struct wlan_objmgr_psoc *psoc,
+					     uint32_t *value)
+{
+	return wlan_mlme_get_auto_channel_weight(psoc, value);
+}
+
+/**
+ * ucfg_mlme_get_vendor_acs_support() - Get the flag for
+ *					vendor acs support
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: QDF Status
+ */
+static inline
+QDF_STATUS ucfg_mlme_get_vendor_acs_support(struct wlan_objmgr_psoc *psoc,
+					    bool *value)
+{
+	return wlan_mlme_get_vendor_acs_support(psoc, value);
+}
+
+/**
+ * ucfg_mlme_get_external_acs_policy() - Get flag for external control
+ *					 acs policy
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: QDF Status
+ */
+static inline QDF_STATUS
+ucfg_mlme_get_external_acs_policy(struct wlan_objmgr_psoc *psoc,
+				  bool *value)
+{
+	return wlan_mlme_get_external_acs_policy(psoc, value);
+}
+
+/**
+ * ucfg_mlme_set_ht_cap_info() - Set the HT cap info config
+ * @psoc: pointer to psoc object
+ * @value: Value that needs to be set from the caller
+ *
+ * Inline UCFG API to be used by HDD/OSIF callers
+ *
+ * Return: QDF Status
+ */
+static inline
+QDF_STATUS
+ucfg_mlme_get_acs_support_for_dfs_ltecoex(struct wlan_objmgr_psoc *psoc,
+					  bool *value)
+{
+	return wlan_mlme_get_acs_support_for_dfs_ltecoex(psoc, value);
+}
+
 /**
  *
  * ucfg_mlme_get_sap_inactivity_override() - Check if sap max inactivity

+ 72 - 0
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -103,6 +103,78 @@ void wlan_mlme_get_sap_inactivity_override(struct wlan_objmgr_psoc *psoc,
 	*val = mlme_obj->cfg.qos_mlme_params.sap_max_inactivity_override;
 }
 
+QDF_STATUS wlan_mlme_get_acs_with_more_param(struct wlan_objmgr_psoc *psoc,
+					     bool *value)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
+
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*value = mlme_obj->cfg.acs.is_acs_with_more_param;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS wlan_mlme_get_auto_channel_weight(struct wlan_objmgr_psoc *psoc,
+					     uint32_t *value)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
+
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*value = mlme_obj->cfg.acs.auto_channel_select_weight;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS wlan_mlme_get_vendor_acs_support(struct wlan_objmgr_psoc *psoc,
+					    bool *value)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
+
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*value = mlme_obj->cfg.acs.is_vendor_acs_support;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_acs_support_for_dfs_ltecoex(struct wlan_objmgr_psoc *psoc,
+					  bool *value)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
+
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*value = mlme_obj->cfg.acs.is_acs_support_for_dfs_ltecoex;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS
+wlan_mlme_get_external_acs_policy(struct wlan_objmgr_psoc *psoc,
+				  bool *value)
+{
+	struct wlan_mlme_psoc_obj *mlme_obj = mlme_get_psoc_obj(psoc);
+
+	if (!mlme_obj) {
+		mlme_err("Failed to get MLME Obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*value = mlme_obj->cfg.acs.is_external_acs_policy;
+	return QDF_STATUS_SUCCESS;
+}
+
 QDF_STATUS wlan_mlme_get_tx_chainmask_cck(struct wlan_objmgr_psoc *psoc,
 					  bool *value)
 {

+ 0 - 141
core/hdd/inc/wlan_hdd_cfg.h

@@ -6894,50 +6894,6 @@ enum hdd_link_speed_rpt_type {
 #define CFG_SET_TSF_PTP_OPT_DEFAULT               (0xf)
 #endif
 
-/*
- * <ini>
- * gvendor_acs_support - vendor based channel selection manager
- * @Min: 0
- * @Max: 1
- * @Default: 0
- *
- * Enabling this parameter will force driver to use user application based
- * channel selection algo instead of driver based auto channel selection
- * logic.
- *
- * Supported Feature: ACS
- *
- * Usage: External/Internal
- *
- * </ini>
- */
-#define CFG_USER_AUTO_CHANNEL_SELECTION       "gvendor_acs_support"
-#define CFG_USER_AUTO_CHANNEL_SELECTION_DISABLE   (0)
-#define CFG_USER_AUTO_CHANNEL_SELECTION_ENABLE    (1)
-#define CFG_USER_AUTO_CHANNEL_SELECTION_DEFAULT   (0)
-
-/*
- * <ini>
- * gacs_support_for_dfs_lte_coex - acs support for lte coex and dfs event
- * @Min: 0
- * @Max: 1
- * @Default: 0
- *
- * Enabling this parameter will force driver to use user application based
- * channel selection algo for channel selection in case of dfs and lte
- * coex event.
- *
- * Supported Feature: ACS
- *
- * Usage: Internal
- *
- * </ini>
- */
-#define CFG_USER_ACS_DFS_LTE           "gacs_support_for_dfs_lte_coex"
-#define CFG_USER_ACS_DFS_LTE_DISABLE   (0)
-#define CFG_USER_ACS_DFS_LTE_ENABLE    (1)
-#define CFG_USER_ACS_DFS_LTE_DEFAULT   (0)
-
 /*
  * Enable/Disable to initiate BUG report in case of fatal event
  * Default: Enable
@@ -8316,58 +8272,6 @@ enum hdd_wext_control {
 #define CFG_ACTIVE_MC_BC_APF_MODE_MAX     (ACTIVE_APF_ENABLED)
 #define CFG_ACTIVE_MC_BC_APF_MODE_DEFAULT (ACTIVE_APF_DISABLED)
 
-/*
- * <ini>
- * acs_with_more_param- Enable acs calculation with more param.
- * @Min: 0
- * @Max: 1
- * @Default: 0
- *
- * This ini is used to enable acs calculation with more param.
- *
- * Related: NA
- *
- * Supported Feature: ACS
- *
- * Usage: Internal/External
- *
- * </ini>
- */
-
-#define CFG_ACS_WITH_MORE_PARAM_NAME    "acs_with_more_param"
-#define CFG_ACS_WITH_MORE_PARAM_MIN     (0)
-#define CFG_ACS_WITH_MORE_PARAM_MAX     (1)
-#define CFG_ACS_WITH_MORE_PARAM_DEFAULT (0)
-
-/*
- * <ini>
- * AutoChannelSelectWeight - ACS channel weight
- * @Min: 0
- * @Max: 0xFFFFFFFF
- * @Default: 0x000000FF
- *
- * This ini is used to adjust weight of factors in
- * acs algorithm.
- *
- * Supported Feature: ACS
- *
- * Usage: Internal/External
- *
- * bits 0-3:   rssi weight
- * bits 4-7:   bss count weight
- * bits 8-11:  noise floor weight
- * bits 12-15: channel free weight
- * bits 16-19: tx power range weight
- * bits 20-23: tx power throughput weight
- * bits 24-31: reserved
- *
- * </ini>
- */
-#define CFG_AUTO_CHANNEL_SELECT_WEIGHT            "AutoChannelSelectWeight"
-#define CFG_AUTO_CHANNEL_SELECT_WEIGHT_MIN        (0)
-#define CFG_AUTO_CHANNEL_SELECT_WEIGHT_MAX        (0xFFFFFFFF)
-#define CFG_AUTO_CHANNEL_SELECT_WEIGHT_DEFAULT    (0x000000FF)
-
 #ifdef WLAN_FEATURE_11AX
 /* 11AX related INI configuration */
 /*
@@ -8748,46 +8652,6 @@ enum hdd_wext_control {
 #define CFG_MAWC_NLO_MAX_SCAN_INTERVAL_MAX      (0xFFFFFFFF)
 #define CFG_MAWC_NLO_MAX_SCAN_INTERVAL_DEFAULT  (60000)
 
-
-/*
- * enum hdd_external_acs_policy - External ACS policy
- * @HDD_EXTERNAL_ACS_PCL_PREFERRED -Preferable for ACS to select a
- *	channel with non-zero pcl weight.
- * @HDD_EXTERNAL_ACS_PCL_MANDATORY -Mandatory for ACS to select a
- *	channel with non-zero pcl weight.
- *
- * enum hdd_external_acs_policy is used to select the ACS policy.
- *
- */
-enum hdd_external_acs_policy {
-	HDD_EXTERNAL_ACS_PCL_PREFERRED = 0,
-	HDD_EXTERNAL_ACS_PCL_MANDATORY = 1,
-};
-
-/*
- * <ini>
- * external_acs_policy - External ACS policy control
- * @Min: 0
- * @Max: 1
- * @Default: 0
- *
- * Values are per enum hdd_external_acs_policy.
- *
- * This ini is used to control the external ACS policy.
- *
- * Related: None
- *
- * Supported Feature: ACS
- *
- * Usage: Internal/External
- *
- * </ini>
- */
-#define CFG_EXTERNAL_ACS_POLICY         "acs_policy"
-#define CFG_EXTERNAL_ACS_POLICY_MIN     (HDD_EXTERNAL_ACS_PCL_PREFERRED)
-#define CFG_EXTERNAL_ACS_POLICY_MAX     (HDD_EXTERNAL_ACS_PCL_MANDATORY)
-#define CFG_EXTERNAL_ACS_POLICY_DEFAULT (HDD_EXTERNAL_ACS_PCL_PREFERRED)
-
 /*
  * <ini>
  * gEnableTxOrphan- Enable/Disable orphaning of Tx packets
@@ -10282,8 +10146,6 @@ struct hdd_config {
 	uint8_t gDisableDfsJapanW53;
 	bool gEnableOverLapCh;
 	bool fRegChangeDefCountry;
-	bool acs_with_more_param;
-	uint32_t auto_channel_select_weight;
 #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
 	uint32_t TxFlowLowWaterMark;
 	uint32_t TxFlowHighWaterMarkOffset;
@@ -10479,8 +10341,6 @@ struct hdd_config {
 	uint8_t adapt_dwell_lpf_weight;
 	uint8_t adapt_dwell_passive_mon_intval;
 	uint8_t adapt_dwell_wifi_act_threshold;
-	bool vendor_acs_support;
-	bool acs_support_for_dfs_ltecoex;
 	bool bug_report_for_no_scan_results;
 	bool bug_on_reinit_failure;
 	uint32_t iface_change_wait_time;
@@ -10530,7 +10390,6 @@ struct hdd_config {
 	uint32_t mawc_nlo_exp_backoff_ratio;
 	uint32_t mawc_nlo_init_scan_interval;
 	uint32_t mawc_nlo_max_scan_interval;
-	enum hdd_external_acs_policy external_acs_policy;
 	/* threshold of packet drops at which FW initiates disconnect */
 	uint16_t pkt_err_disconn_th;
 	bool is_force_1x1;

+ 0 - 39
core/hdd/src/wlan_hdd_cfg.c

@@ -2243,20 +2243,6 @@ struct reg_table_entry g_registry_table[] = {
 		     CFG_REG_CHANGE_DEF_COUNTRY_MIN,
 		     CFG_REG_CHANGE_DEF_COUNTRY_MAX),
 
-	REG_VARIABLE(CFG_ACS_WITH_MORE_PARAM_NAME, WLAN_PARAM_Integer,
-		     struct hdd_config, acs_with_more_param,
-		     VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
-		     CFG_ACS_WITH_MORE_PARAM_DEFAULT,
-		     CFG_ACS_WITH_MORE_PARAM_MIN,
-		     CFG_ACS_WITH_MORE_PARAM_MAX),
-
-	REG_VARIABLE(CFG_AUTO_CHANNEL_SELECT_WEIGHT, WLAN_PARAM_HexInteger,
-		     struct hdd_config, auto_channel_select_weight,
-		     VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
-		     CFG_AUTO_CHANNEL_SELECT_WEIGHT_DEFAULT,
-		     CFG_AUTO_CHANNEL_SELECT_WEIGHT_MIN,
-		     CFG_AUTO_CHANNEL_SELECT_WEIGHT_MAX),
-
 #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
 	REG_VARIABLE(CFG_LL_TX_FLOW_LWM, WLAN_PARAM_Integer,
 		     struct hdd_config, TxFlowLowWaterMark,
@@ -3091,20 +3077,6 @@ struct reg_table_entry g_registry_table[] = {
 		CFG_CREATE_BUG_REPORT_FOR_SCAN_DISABLE,
 		CFG_CREATE_BUG_REPORT_FOR_SCAN_ENABLE),
 
-	REG_VARIABLE(CFG_USER_AUTO_CHANNEL_SELECTION, WLAN_PARAM_Integer,
-		struct hdd_config, vendor_acs_support,
-		VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
-		CFG_USER_AUTO_CHANNEL_SELECTION_DEFAULT,
-		CFG_USER_AUTO_CHANNEL_SELECTION_DISABLE,
-		CFG_USER_AUTO_CHANNEL_SELECTION_ENABLE),
-
-	REG_VARIABLE(CFG_USER_ACS_DFS_LTE, WLAN_PARAM_Integer,
-		struct hdd_config, acs_support_for_dfs_ltecoex,
-		VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
-		CFG_USER_ACS_DFS_LTE_DEFAULT,
-		CFG_USER_ACS_DFS_LTE_DISABLE,
-		CFG_USER_ACS_DFS_LTE_ENABLE),
-
 #ifdef CONFIG_DP_TRACE
 	REG_VARIABLE(CFG_ENABLE_DP_TRACE, WLAN_PARAM_Integer,
 		struct hdd_config, enable_dp_trace,
@@ -3113,7 +3085,6 @@ struct reg_table_entry g_registry_table[] = {
 		CFG_ENABLE_DP_TRACE_MIN,
 		CFG_ENABLE_DP_TRACE_MAX),
 
-
 	REG_VARIABLE_STRING(CFG_ENABLE_DP_TRACE_CONFIG, WLAN_PARAM_String,
 			struct hdd_config, dp_trace_config,
 			VAR_FLAGS_OPTIONAL,
@@ -3467,14 +3438,6 @@ struct reg_table_entry g_registry_table[] = {
 		CFG_MAWC_NLO_MAX_SCAN_INTERVAL_MIN,
 		CFG_MAWC_NLO_MAX_SCAN_INTERVAL_MAX),
 
-
-	REG_VARIABLE(CFG_EXTERNAL_ACS_POLICY, WLAN_PARAM_Integer,
-		     struct hdd_config, external_acs_policy,
-		     VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
-		     CFG_EXTERNAL_ACS_POLICY_DEFAULT,
-		     CFG_EXTERNAL_ACS_POLICY_MIN,
-		     CFG_EXTERNAL_ACS_POLICY_MAX),
-
 	REG_VARIABLE(CFG_DROPPED_PKT_DISCONNECT_TH_NAME, WLAN_PARAM_Integer,
 		struct hdd_config, pkt_err_disconn_th,
 		VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -5746,8 +5709,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx)
 	smeConfig->csrConfig.sap_channel_avoidance =
 		hdd_ctx->config->sap_channel_avoidance;
 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
-	smeConfig->csrConfig.acs_with_more_param =
-		hdd_ctx->config->acs_with_more_param;
 
 	smeConfig->csrConfig.f_prefer_non_dfs_on_radar =
 		hdd_ctx->config->prefer_non_dfs_on_radar;

+ 46 - 9
core/hdd/src/wlan_hdd_cfg80211.c

@@ -127,7 +127,6 @@
 #include "wlan_crypto_global_api.h"
 #include "wlan_nl_to_crypto_params.h"
 #include "wlan_crypto_global_def.h"
-#include "cfg_mlme_threshold.h"
 #include "cfg_ucfg_api.h"
 
 #define g_mode_rates_size (12)
@@ -2195,6 +2194,8 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
 	eCsrPhyMode phy_mode;
 	enum qca_wlan_vendor_attr_external_acs_policy acs_policy;
 	uint32_t i;
+	QDF_STATUS qdf_status;
+	bool is_external_acs_policy = cfg_default(CFG_EXTERNAL_ACS_POLICY);
 
 	if (!hdd_ctx) {
 		hdd_err("HDD context is NULL");
@@ -2300,8 +2301,12 @@ int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
 				  vendor_weight_list[i]);
 	}
 
-	if (HDD_EXTERNAL_ACS_PCL_MANDATORY ==
-		hdd_ctx->config->external_acs_policy) {
+	qdf_status = ucfg_mlme_get_external_acs_policy(hdd_ctx->psoc,
+						       &is_external_acs_policy);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+		hdd_err("get_external_acs_policy failed, set default");
+
+	if (is_external_acs_policy) {
 		acs_policy =
 			QCA_WLAN_VENDOR_ATTR_EXTERNAL_ACS_POLICY_PCL_MANDATORY;
 	} else {
@@ -2413,6 +2418,8 @@ int hdd_start_vendor_acs(struct hdd_adapter *adapter)
 {
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	int status;
+	QDF_STATUS qdf_status;
+	bool is_acs_support_for_dfs_ltecoex = cfg_default(CFG_USER_ACS_DFS_LTE);
 
 	status = hdd_create_acs_timer(adapter);
 	if (status != 0) {
@@ -2425,8 +2432,13 @@ int hdd_start_vendor_acs(struct hdd_adapter *adapter)
 		hdd_err("failed to update acs timer reason");
 		return status;
 	}
+	qdf_status = ucfg_mlme_get_acs_support_for_dfs_ltecoex(
+				hdd_ctx->psoc,
+				&is_acs_support_for_dfs_ltecoex);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+		hdd_err("get_acs_support_for_dfs_ltecoex failed, set def");
 
-	if (hdd_ctx->config->acs_support_for_dfs_ltecoex)
+	if (is_acs_support_for_dfs_ltecoex)
 		status = qdf_status_to_os_return(wlan_sap_set_vendor_acs(
 				WLAN_HDD_GET_SAP_CTX_PTR(adapter),
 				true));
@@ -2468,6 +2480,12 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
 	uint8_t conc_channel;
 	mac_handle_t mac_handle;
 	bool skip_etsi13_srd_chan = false;
+	uint32_t auto_channel_select_weight =
+		cfg_default(CFG_AUTO_CHANNEL_SELECT_WEIGHT);
+	bool is_vendor_acs_support =
+		cfg_default(CFG_USER_AUTO_CHANNEL_SELECTION);
+	bool is_external_acs_policy =
+		cfg_default(CFG_EXTERNAL_ACS_POLICY);
 
 	/* ***Note*** Donot set SME config related to ACS operation here because
 	 * ACS operation is not synchronouse and ACS for Second AP may come when
@@ -2727,9 +2745,16 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
 			  ch_width, ht_enabled, vht_enabled,
 			  sap_config->acs_cfg.start_ch,
 			  sap_config->acs_cfg.end_ch);
-	if (hdd_ctx->config->auto_channel_select_weight)
+
+	qdf_status =
+		ucfg_mlme_get_auto_channel_weight(hdd_ctx->psoc,
+						  &auto_channel_select_weight);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+		hdd_err("get_auto_channel_weight failed");
+
+	if (auto_channel_select_weight)
 		sap_config->auto_channel_select_weight =
-		    hdd_ctx->config->auto_channel_select_weight;
+				auto_channel_select_weight;
 
 	sap_config->acs_cfg.is_ht_enabled = ht_enabled;
 	sap_config->acs_cfg.is_vht_enabled = vht_enabled;
@@ -2743,8 +2768,13 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
 
 	conc_channel = policy_mgr_mode_specific_get_channel(hdd_ctx->psoc,
 							    PM_STA_MODE);
-	if (hdd_ctx->config->external_acs_policy ==
-	    HDD_EXTERNAL_ACS_PCL_MANDATORY) {
+
+	qdf_status = ucfg_mlme_get_external_acs_policy(hdd_ctx->psoc,
+						       &is_external_acs_policy);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+		hdd_err("get_external_acs_policy failed");
+
+	if (is_external_acs_policy) {
 		if ((conc_channel >= WLAN_REG_CH_NUM(CHAN_ENUM_36) &&
 		     sap_config->acs_cfg.band == QCA_ACS_MODE_IEEE80211A) ||
 		     (conc_channel <= WLAN_REG_CH_NUM(CHAN_ENUM_14) &&
@@ -2786,8 +2816,15 @@ static int __wlan_hdd_cfg80211_do_acs(struct wiphy *wiphy,
 		hdd_debug("ACS Pending for %s", adapter->dev->name);
 		ret = 0;
 	} else {
+		qdf_status =
+			ucfg_mlme_get_vendor_acs_support(
+					hdd_ctx->psoc,
+					&is_vendor_acs_support);
+		if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+			hdd_err("get_vendor_acs_support failed, set default");
+
 		/* Check if vendor specific acs is enabled */
-		if (hdd_ctx->config->vendor_acs_support)
+		if (is_vendor_acs_support)
 			ret = hdd_start_vendor_acs(adapter);
 		else
 			ret = wlan_hdd_cfg80211_start_acs(adapter);

+ 18 - 3
core/hdd/src/wlan_hdd_hostapd.c

@@ -82,6 +82,7 @@
 #include <wlan_ipa_ucfg_api.h>
 #include <wlan_cp_stats_mc_ucfg_api.h>
 #include "wlan_mlme_ucfg_api.h"
+#include "cfg_ucfg_api.h"
 
 #define ACS_SCAN_EXPIRY_TIMEOUT_S 4
 
@@ -4252,8 +4253,16 @@ static int wlan_hdd_sap_p2p_11ac_overrides(struct hdd_adapter *ap_adapter)
 static int wlan_hdd_setup_driver_overrides(struct hdd_adapter *ap_adapter)
 {
 	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(ap_adapter);
+	QDF_STATUS qdf_status;
+	bool is_vendor_acs_support =
+		cfg_default(CFG_USER_AUTO_CHANNEL_SELECTION);
+
+	qdf_status = ucfg_mlme_get_vendor_acs_support(hdd_ctx->psoc,
+						      &is_vendor_acs_support);
+	if (!QDF_IS_STATUS_SUCCESS(qdf_status))
+		hdd_err("get_vendor_acs_support failed, set default");
 
-	if (!hdd_ctx->config->vendor_acs_support)
+	if (!is_vendor_acs_support)
 		return wlan_hdd_sap_p2p_11ac_overrides(ap_adapter);
 	else
 		return 0;
@@ -4512,6 +4521,8 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 	uint8_t ignore_cac = 0;
 	int value;
 	bool val;
+	uint32_t auto_channel_select_weight =
+		cfg_default(CFG_AUTO_CHANNEL_SELECT_WEIGHT);
 
 	hdd_enter();
 
@@ -4615,8 +4626,12 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter,
 	pConfig->beacon_int = pMgmt_frame->u.beacon.beacon_int;
 	pConfig->dfs_cac_offload = hdd_ctx->dfs_cac_offload;
 
-	pConfig->auto_channel_select_weight =
-			     iniConfig->auto_channel_select_weight;
+	status = ucfg_mlme_get_auto_channel_weight(hdd_ctx->psoc,
+						   &auto_channel_select_weight);
+	if (!QDF_IS_STATUS_SUCCESS(status))
+		hdd_err("ucfg_mlme_get_auto_channel_weight failed, set def");
+
+	pConfig->auto_channel_select_weight = auto_channel_select_weight;
 	pConfig->disableDFSChSwitch = iniConfig->disableDFSChSwitch;
 	ucfg_mlme_get_sap_chn_switch_bcn_count(hdd_ctx->psoc, &value);
 	pConfig->sap_chanswitch_beacon_cnt = value;

+ 18 - 2
core/hdd/src/wlan_hdd_main.c

@@ -143,6 +143,7 @@
 #include "wlan_tdls_cfg_api.h"
 #include <wlan_hdd_rssi_monitor.h>
 #include "wlan_mlme_ucfg_api.h"
+#include "cfg_mlme_acs.h"
 #include "wlan_mlme_public_struct.h"
 #include "wlan_fwol_ucfg_api.h"
 #ifdef CNSS_GENL
@@ -8561,6 +8562,10 @@ void hdd_unsafe_channel_restart_sap(struct hdd_context *hdd_ctxt)
 	bool found = false;
 	uint8_t restart_chan;
 	bool value;
+	QDF_STATUS status;
+	bool is_acs_support_for_dfs_ltecoex = cfg_default(CFG_USER_ACS_DFS_LTE);
+	bool is_vendor_acs_support =
+		cfg_default(CFG_USER_AUTO_CHANNEL_SELECTION);
 
 	hdd_for_each_adapter(hdd_ctxt, adapter) {
 		if (!(adapter->device_mode == QDF_SAP_MODE &&
@@ -8598,8 +8603,19 @@ void hdd_unsafe_channel_restart_sap(struct hdd_context *hdd_ctxt)
 			continue;
 		}
 
-		if (hdd_ctxt->config->vendor_acs_support &&
-		    hdd_ctxt->config->acs_support_for_dfs_ltecoex) {
+		status = ucfg_mlme_get_acs_support_for_dfs_ltecoex(
+					hdd_ctxt->psoc,
+					&is_acs_support_for_dfs_ltecoex);
+		if (!QDF_IS_STATUS_SUCCESS(status))
+			hdd_err("get_acs_support_for_dfs_ltecoex failed,set def");
+
+		status = ucfg_mlme_get_vendor_acs_support(
+					hdd_ctxt->psoc,
+					&is_vendor_acs_support);
+		if (!QDF_IS_STATUS_SUCCESS(status))
+			hdd_err("get_vendor_acs_support failed, set default");
+
+		if (is_vendor_acs_support && is_acs_support_for_dfs_ltecoex) {
 			hdd_update_acs_timer_reason(adapter,
 				QCA_WLAN_VENDOR_ACS_SELECT_REASON_LTE_COEX);
 			continue;

+ 0 - 1
core/sme/inc/csr_api.h

@@ -1193,7 +1193,6 @@ typedef struct tagCsrConfigParam {
 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
 	bool sap_channel_avoidance;
 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
-	bool acs_with_more_param;
 	uint8_t f_prefer_non_dfs_on_radar;
 	bool is_ps_enabled;
 	uint32_t auto_bmps_timer_val;

+ 0 - 3
core/sme/src/csr/csr_api_roam.c

@@ -3075,8 +3075,6 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac,
 		pMac->sap.sap_channel_avoidance =
 			pParam->sap_channel_avoidance;
 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
-		pMac->sap.acs_with_more_param =
-			pParam->acs_with_more_param;
 
 		pMac->f_prefer_non_dfs_on_radar =
 			pParam->f_prefer_non_dfs_on_radar;
@@ -3318,7 +3316,6 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
 	pParam->sap_channel_avoidance = pMac->sap.sap_channel_avoidance;
 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
-	pParam->acs_with_more_param = pMac->sap.acs_with_more_param;
 	pParam->max_intf_count = pMac->sme.max_intf_count;
 	pParam->enableSelfRecovery = pMac->sme.enableSelfRecovery;
 	pParam->f_prefer_non_dfs_on_radar =