From 32761e468edcf49b0592773a070e232affd12cc1 Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Mon, 25 Sep 2017 17:10:54 +0530 Subject: [PATCH] qcacld-3.0: Add support to enable/disable FILS runtime Currently, FILS feature is enabled with ini parameter [is_fils_enabled] at init time. This change adds support to enable disable FILS from vendor command. Change-Id: I0c84d777a6259c96233a4777f184ddf6f7bc58af CRs-Fixed: 2121214 --- core/hdd/src/wlan_hdd_cfg.c | 2 ++ core/hdd/src/wlan_hdd_cfg80211.c | 16 ++++++++++++++++ core/sme/inc/csr_api.h | 1 + core/sme/inc/csr_internal.h | 1 + core/sme/inc/sme_api.h | 10 ++++++++++ core/sme/src/common/sme_api.c | 23 +++++++++++++++++++++-- core/sme/src/csr/csr_api_roam.c | 4 ++++ 7 files changed, 55 insertions(+), 2 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 12552690c414..b9c7cd449d6c 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -8857,6 +8857,8 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->config->rx_aggregation_size; smeConfig->csrConfig.enable_bcast_probe_rsp = hdd_ctx->config->enable_bcast_probe_rsp; + smeConfig->csrConfig.is_fils_enabled = + hdd_ctx->config->is_fils_enabled; smeConfig->csrConfig.qcn_ie_support = hdd_ctx->config->qcn_ie_support; smeConfig->csrConfig.fils_max_chan_guard_time = diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 11d17dd8cdfe..7f103ed4a621 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -6690,6 +6690,22 @@ __wlan_hdd_cfg80211_wifi_configuration_set(struct wiphy *wiphy, return -EINVAL; } } + if (adapter->device_mode == QDF_STA_MODE && + tb[QCA_WLAN_VENDOR_ATTR_CONFIG_DISABLE_FILS]) { + uint8_t disable_fils; + + disable_fils = nla_get_u8(tb[ + QCA_WLAN_VENDOR_ATTR_CONFIG_DISABLE_FILS]); + hdd_debug("Set disable_fils - %d", disable_fils); + + qdf_status = sme_update_fils_setting(hdd_ctx->hHal, + adapter->session_id, + disable_fils); + if (qdf_status != QDF_STATUS_SUCCESS) { + hdd_err("set disable_fils failed"); + ret_val = -EINVAL; + } + } return ret_val; } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index b9736204bea9..075513fa2246 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1340,6 +1340,7 @@ typedef struct tagCsrConfigParam { uint32_t rx_aggregation_size; struct wmi_per_roam_config per_roam_config; bool enable_bcast_probe_rsp; + bool is_fils_enabled; #ifdef WLAN_FEATURE_11AX bool enable_ul_ofdma; bool enable_ul_mimo; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 041115b2c80e..beb18a1d2cca 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -617,6 +617,7 @@ struct csr_config { uint32_t rx_aggregation_size; struct wmi_per_roam_config per_roam_config; bool enable_bcast_probe_rsp; + bool is_fils_enabled; #ifdef WLAN_FEATURE_11AX bool enable_ul_ofdma; bool enable_ul_mimo; diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 2bade53a3fa9..b442b2f2189f 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1297,6 +1297,16 @@ QDF_STATUS sme_set_default_scan_ie(tHalHandle hal, uint16_t session_id, QDF_STATUS sme_update_session_param(tHalHandle hal, uint8_t session_id, uint32_t param_type, uint32_t param_val); +/** + * sme_update_fils_setting() - API to update PE FILS setting + * @hal: HAL handle for device + * @session_id: Session ID + * @param_val: Param value to be update + * + * Return: QDF_STATUS + */ +QDF_STATUS sme_update_fils_setting(tHalHandle hal, uint8_t session_id, + uint8_t param_val); #ifdef WLAN_FEATURE_DISA /** * sme_encrypt_decrypt_msg() - handles encrypt/decrypt mesaage diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index e6bea028e560..19f99ca7215a 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -6470,8 +6470,27 @@ QDF_STATUS sme_set_tx_power(tHalHandle hHal, uint8_t sessionId, return QDF_STATUS_SUCCESS; } -QDF_STATUS sme_update_session_param(tHalHandle hal, - uint8_t session_id, +QDF_STATUS sme_update_fils_setting(tHalHandle hal, uint8_t session_id, + uint8_t param_val) +{ + QDF_STATUS status; + tpAniSirGlobal pMac = PMAC_STRUCT(hal); + + pMac->roam.configParam.is_fils_enabled = !param_val; + + pMac->roam.configParam.enable_bcast_probe_rsp = !param_val; + status = wma_cli_set_command((int)session_id, + (int)WMI_VDEV_PARAM_ENABLE_BCAST_PROBE_RESPONSE, + !param_val, VDEV_CMD); + if (status) + QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR, + "%s: Failed to set enable bcast probe setting", + __func__); + + return status; +} + +QDF_STATUS sme_update_session_param(tHalHandle hal, uint8_t session_id, uint32_t param_type, uint32_t param_val) { QDF_STATUS status = QDF_STATUS_SUCCESS; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 927d970b1992..8d7b51b4bc14 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2928,6 +2928,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pParam->rx_aggregation_size; pMac->roam.configParam.enable_bcast_probe_rsp = pParam->enable_bcast_probe_rsp; + pMac->roam.configParam.is_fils_enabled = + pParam->is_fils_enabled; pMac->roam.configParam.qcn_ie_support = pParam->qcn_ie_support; pMac->roam.configParam.fils_max_chan_guard_time = @@ -3189,6 +3191,8 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pMac->roam.configParam.rx_aggregation_size; pParam->enable_bcast_probe_rsp = pMac->roam.configParam.enable_bcast_probe_rsp; + pParam->is_fils_enabled = + pMac->roam.configParam.is_fils_enabled; pParam->qcn_ie_support = pMac->roam.configParam.qcn_ie_support; pParam->fils_max_chan_guard_time =