From 1eeeb8dd85408820a37ab73d46f6defa23bcb4c2 Mon Sep 17 00:00:00 2001 From: Harprit Chhabada Date: Fri, 14 Sep 2018 15:16:56 -0700 Subject: [PATCH] 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 --- components/mlme/dispatcher/inc/cfg_mlme.h | 10 +- components/mlme/dispatcher/inc/cfg_mlme_acs.h | 165 ++++++++++++++++++ .../mlme/dispatcher/inc/wlan_mlme_api.h | 55 ++++++ .../dispatcher/inc/wlan_mlme_public_struct.h | 22 ++- .../mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 85 +++++++++ .../mlme/dispatcher/src/wlan_mlme_api.c | 72 ++++++++ core/hdd/inc/wlan_hdd_cfg.h | 141 --------------- core/hdd/src/wlan_hdd_cfg.c | 39 ----- core/hdd/src/wlan_hdd_cfg80211.c | 55 +++++- core/hdd/src/wlan_hdd_hostapd.c | 21 ++- core/hdd/src/wlan_hdd_main.c | 20 ++- core/sme/inc/csr_api.h | 1 - core/sme/src/csr/csr_api_roam.c | 3 - 13 files changed, 486 insertions(+), 203 deletions(-) create mode 100644 components/mlme/dispatcher/inc/cfg_mlme_acs.h diff --git a/components/mlme/dispatcher/inc/cfg_mlme.h b/components/mlme/dispatcher/inc/cfg_mlme.h index 5ec0d4243d..29f7aa591e 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme.h +++ b/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 */ diff --git a/components/mlme/dispatcher/inc/cfg_mlme_acs.h b/components/mlme/dispatcher/inc/cfg_mlme_acs.h new file mode 100644 index 0000000000..6c5c67ae83 --- /dev/null +++ b/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 + +/* + * + * 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 + * + * + */ + +#define CFG_ACS_WITH_MORE_PARAM CFG_INI_BOOL( \ + "acs_with_more_param", \ + 0, \ + "Enable ACS with more param") + +/* + * + * 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 + * + * + */ + +#define CFG_AUTO_CHANNEL_SELECT_WEIGHT CFG_INI_UINT( \ + "AutoChannelSelectWeight", \ + 0, \ + 0xFFFFFFFF, \ + 0x000000FF, \ + CFG_VALUE_OR_DEFAULT, \ + "Adjust weight factor in ACS") + +/* + * + * 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 + * + * + */ + +#define CFG_USER_AUTO_CHANNEL_SELECTION CFG_INI_BOOL( \ + "gvendor_acs_support", \ + 0, \ + "Vendor channel selection manager") + +/* + * + * 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 + * + * + */ + +#define CFG_USER_ACS_DFS_LTE CFG_INI_BOOL( \ + "gacs_support_for_dfs_lte_coex", \ + 0, \ + "Acs support for lte coex and dfs") + +/* + * + * 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 + * + * + */ + +#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 */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index 9cacb52904..e58f1615bc 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/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 diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index acb2295575..a21cca095e 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/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; }; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 74cc451d91..6d57c2c16c 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/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 diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index 29aa9f8111..d9ca187f75 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/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) { diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index b11f272b37..29038408a6 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/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 -/* - * - * 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 - * - * - */ -#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) - -/* - * - * 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 - * - * - */ -#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) -/* - * - * 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 - * - * - */ - -#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) - -/* - * - * 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 - * - * - */ -#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, -}; - -/* - * - * 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 - * - * - */ -#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) - /* * * 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; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index bcbdeb87f3..fecb8dcd60 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/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; diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 68e9bff0a6..fdbe3055b8 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/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); diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index b6403d5854..c35851eade 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -82,6 +82,7 @@ #include #include #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); - if (!hdd_ctx->config->vendor_acs_support) + 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 (!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; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 192f0117c6..18a15ad039 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -143,6 +143,7 @@ #include "wlan_tdls_cfg_api.h" #include #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; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index c31ff7f1dc..6b388f8209 100644 --- a/core/sme/inc/csr_api.h +++ b/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; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 71f0e984d2..44c120a03a 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/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 =