From 2ba6fe9132cc647e2d8be1efe91869d572a70d41 Mon Sep 17 00:00:00 2001 From: Yeshwanth Sriram Guntuka Date: Wed, 4 Oct 2017 14:40:45 +0530 Subject: [PATCH] qcacld-3.0: Add ini to configure different OCE features Add ini support to configure different OCE features which is sent as bitmap to firmware via vdev_set_param command. Change-Id: I2c679a6fe902e1b41ba984ed2255eee02ed29549 CRs-Fixed: 2121585 --- core/hdd/inc/wlan_hdd_cfg.h | 173 +++++++++++++++++++++++++++++++- core/hdd/src/wlan_hdd_cfg.c | 68 ++++++++++++- core/hdd/src/wlan_hdd_main.c | 8 ++ core/sme/inc/csr_api.h | 1 + core/sme/inc/csr_internal.h | 1 + core/sme/src/csr/csr_api_roam.c | 6 ++ core/wma/inc/wma_if.h | 1 + core/wma/src/wma_dev_if.c | 11 ++ 8 files changed, 266 insertions(+), 3 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 2eb196234e4d..2dfb75b6b196 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -10996,7 +10996,10 @@ enum hdd_wext_control { * @Max: 1 * @Default: 1 * - * This ini is used to enable/disable broadcast probe response + * This ini is used to enable/disable broadcast probe response. + * This is set only if g_is_fils_enabled is set to 1 + * If this is disabled then OCE ini oce_sta_enable will also be + * disabled and OCE IE will not be sent in frames. * * Related: None * @@ -13232,7 +13235,6 @@ enum hdd_external_acs_freq_band { #define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MIN (-120) #define CFG_MBO_CAND_RSSI_BTC_THRESHOLD_MAX (0) - /* * * g_enable_packet_filter_bitmap - Enable Packet filters before going into @@ -13316,6 +13318,166 @@ enum hdd_external_acs_freq_band { #define CFG_REDUCED_BEACON_INTERVAL_MAX (100) #define CFG_REDUCED_BEACON_INTERVAL_DEFAULT (0) +/* + * oce_enable_rssi_assoc_reject - Enable/disable rssi based assoc rejection + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to enable/disable rssi based assoc rejection. If this is + * disabled then OCE ini oce_sta_enable will also be disabled and OCE IE will + * not be sent in frames. + * + * Related: None + * + * Supported Feature: OCE + * + * Usage: External + * + * + */ +#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_NAME \ + "oce_enable_rssi_assoc_reject" +#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MIN (0) +#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MAX (1) +#define CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_DEFAULT (1) + +/* + * + * oce_enable_probe_req_rate - Set probe request rate + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set probe request rate to 5.5Mbps as per OCE requirement + * in 2.4G band + * + * Related: None + * + * Supported Feature: OCE + * + * Usage: External + * + * + */ +#define CFG_OCE_PROBE_REQ_RATE_NAME "oce_enable_probe_req_rate" +#define CFG_OCE_PROBE_REQ_RATE_MIN (0) +#define CFG_OCE_PROBE_REQ_RATE_MAX (1) +#define CFG_OCE_PROBE_REQ_RATE_DEFAULT (0) + +/* + * + * oce_enable_probe_resp_rate - Set probe response rate + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set probe response rate to 5.5Mbps as per OCE requirement + * in 2.4G band + * + * Related: None + * + * Supported Feature: OCE + * + * Usage: External + * + * + */ +#define CFG_OCE_PROBE_RSP_RATE_NAME "oce_enable_probe_resp_rate" +#define CFG_OCE_PROBE_RSP_RATE_MIN (0) +#define CFG_OCE_PROBE_RSP_RATE_MAX (1) +#define CFG_OCE_PROBE_RSP_RATE_DEFAULT (0) + +/* + * + * oce_enable_beacon_rate - Set beacon rate + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set beacon rate to 5.5Mbps as per OCE requirement in + * 2.4G band + * + * Related: None + * + * Supported Feature: OCE + * + * Usage: External + * + * + */ +#define CFG_OCE_BEACON_RATE_NAME "oce_enable_beacon_rate" +#define CFG_OCE_BEACON_RATE_MIN (0) +#define CFG_OCE_BEACON_RATE_MAX (1) +#define CFG_OCE_BEACON_RATE_DEFAULT (0) + +/* + * + * oce_enable_probe_req_deferral - Enable/disable probe request deferral + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable probe request deferral as per OCE spec + * + * Related: None + * + * Supported Feature: OCE + * + * Usage: External + * + * + */ +#define CFG_ENABLE_PROBE_REQ_DEFERRAL_NAME "oce_enable_probe_req_deferral" +#define CFG_ENABLE_PROBE_REQ_DEFERRAL_MIN (0) +#define CFG_ENABLE_PROBE_REQ_DEFERRAL_MAX (1) +#define CFG_ENABLE_PROBE_REQ_DEFERRAL_DEFAULT (0) + +/* + * + * oce_enable_fils_discovery_sap - Enable/disable fils discovery in sap mode + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable fils discovery in sap mode + * + * Related: None + * + * Supported Feature: FILS + * + * Usage: External + * + * + */ +#define CFG_ENABLE_FILS_DISCOVERY_SAP_NAME "oce_enable_fils_discovery_sap" +#define CFG_ENABLE_FILS_DISCOVERY_SAP_MIN (0) +#define CFG_ENABLE_FILS_DISCOVERY_SAP_MAX (1) +#define CFG_ENABLE_FILS_DISCOVERY_SAP_DEFAULT (0) + +/* + * + * enable_esp_for_roam - Enable/disable esp feature + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable ESP(Estimated service parameters) IE + * parsing and decides whether firmware will include this in its scoring algo. + * + * Related: None + * + * Supported Feature: STA + * + * Usage: External + * + * + */ +#define CFG_ENABLE_ESP_FEATURE_NAME "enable_esp_for_roam" +#define CFG_ENABLE_ESP_FEATURE_MIN (0) +#define CFG_ENABLE_ESP_FEATURE_MAX (1) +#define CFG_ENABLE_ESP_FEATURE_DEFAULT (0) + /* * Type declarations */ @@ -14182,6 +14344,13 @@ struct hdd_config { uint8_t enable_phy_reg_retention; uint8_t dfs_beacon_tx_enhanced; uint16_t reduced_beacon_interval; + bool rssi_assoc_reject_enabled; + bool oce_probe_req_rate_enabled; + bool oce_probe_resp_rate_enabled; + bool oce_beacon_rate_enabled; + bool probe_req_deferral_enabled; + bool fils_discovery_sap_enabled; + bool esp_for_roam_enabled; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 4eb061b30991..12552690c414 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -5229,6 +5229,57 @@ struct reg_table_entry g_registry_table[] = { CFG_REDUCED_BEACON_INTERVAL_DEFAULT, CFG_REDUCED_BEACON_INTERVAL_MIN, CFG_REDUCED_BEACON_INTERVAL_MAX), + + REG_VARIABLE(CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_NAME, + WLAN_PARAM_Integer, struct hdd_config, + rssi_assoc_reject_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_DEFAULT, + CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MIN, + CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT_MAX), + + REG_VARIABLE(CFG_OCE_PROBE_REQ_RATE_NAME, WLAN_PARAM_Integer, + struct hdd_config, oce_probe_req_rate_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_PROBE_REQ_RATE_DEFAULT, + CFG_OCE_PROBE_REQ_RATE_MIN, + CFG_OCE_PROBE_REQ_RATE_MAX), + + REG_VARIABLE(CFG_OCE_PROBE_RSP_RATE_NAME, WLAN_PARAM_Integer, + struct hdd_config, oce_probe_resp_rate_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_PROBE_RSP_RATE_DEFAULT, + CFG_OCE_PROBE_RSP_RATE_MIN, + CFG_OCE_PROBE_RSP_RATE_MAX), + + REG_VARIABLE(CFG_OCE_BEACON_RATE_NAME, WLAN_PARAM_Integer, + struct hdd_config, oce_beacon_rate_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_OCE_BEACON_RATE_DEFAULT, + CFG_OCE_BEACON_RATE_MIN, + CFG_OCE_BEACON_RATE_MAX), + + REG_VARIABLE(CFG_ENABLE_PROBE_REQ_DEFERRAL_NAME, WLAN_PARAM_Integer, + struct hdd_config, probe_req_deferral_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_PROBE_REQ_DEFERRAL_DEFAULT, + CFG_ENABLE_PROBE_REQ_DEFERRAL_MIN, + CFG_ENABLE_PROBE_REQ_DEFERRAL_MAX), + + REG_VARIABLE(CFG_ENABLE_FILS_DISCOVERY_SAP_NAME, WLAN_PARAM_Integer, + struct hdd_config, fils_discovery_sap_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_FILS_DISCOVERY_SAP_DEFAULT, + CFG_ENABLE_FILS_DISCOVERY_SAP_MIN, + CFG_ENABLE_FILS_DISCOVERY_SAP_MAX), + + REG_VARIABLE(CFG_ENABLE_ESP_FEATURE_NAME, WLAN_PARAM_Integer, + struct hdd_config, esp_for_roam_enabled, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ENABLE_ESP_FEATURE_DEFAULT, + CFG_ENABLE_ESP_FEATURE_MIN, + CFG_ENABLE_ESP_FEATURE_MAX), + }; @@ -8432,7 +8483,7 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) { QDF_STATUS status = QDF_STATUS_SUCCESS; tSmeConfigParams *smeConfig; - uint8_t rrm_capab_len; + uint8_t rrm_capab_len, val; struct hdd_config *pConfig = hdd_ctx->config; @@ -8828,6 +8879,21 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->config->num_11b_tx_chains; smeConfig->csrConfig.num_11ag_tx_chains = hdd_ctx->config->num_11ag_tx_chains; + val = (pConfig->oce_probe_req_rate_enabled * + WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) + + (pConfig->oce_probe_resp_rate_enabled * + WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) + + (pConfig->oce_beacon_rate_enabled * + WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) + + (pConfig->probe_req_deferral_enabled * + WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) + + (pConfig->fils_discovery_sap_enabled * + WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) + + (pConfig->esp_for_roam_enabled * + WMI_VDEV_OCE_ESP_FEATURE_BITMAP) + + (pConfig->rssi_assoc_reject_enabled * + WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP); + smeConfig->csrConfig.oce_feature_bitmap = val; hdd_update_bss_score_params(hdd_ctx->config, &smeConfig->csrConfig.bss_score_params); diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 6f120a2c425f..273a11e0dcf7 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -7631,6 +7631,14 @@ static void hdd_override_ini_config(struct hdd_context *hdd_ctx) if (!hdd_ipa_is_present(hdd_ctx)) hdd_ctx->config->IpaConfig = 0; + + if (!hdd_ctx->config->rssi_assoc_reject_enabled || + !hdd_ctx->config->enable_bcast_probe_rsp) { + hdd_debug("OCE disabled, rssi_assoc_reject_enabled: %d enable_bcast_probe_rsp: %d", + hdd_ctx->config->rssi_assoc_reject_enabled, + hdd_ctx->config->enable_bcast_probe_rsp); + hdd_ctx->config->oce_sta_enabled = 0; + } } /** diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 37c886e84bb0..b9736204bea9 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1354,6 +1354,7 @@ typedef struct tagCsrConfigParam { uint32_t rssi_channel_penalization; uint32_t num_disallowed_aps; struct sir_score_config bss_score_params; + uint8_t oce_feature_bitmap; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 9c6c2613f4bf..041115b2c80e 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -631,6 +631,7 @@ struct csr_config { uint32_t rssi_channel_penalization; uint32_t num_disallowed_aps; struct sir_score_config bss_score_params; + uint8_t oce_feature_bitmap; }; struct csr_channel_powerinfo { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 4594400a3f95..fa217bd966b9 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2938,6 +2938,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pParam->rssi_channel_penalization; pMac->roam.configParam.num_disallowed_aps = pParam->num_disallowed_aps; + pMac->roam.configParam.oce_feature_bitmap = + pParam->oce_feature_bitmap; qdf_mem_copy(&pMac->roam.configParam.bss_score_params, &pParam->bss_score_params, @@ -3197,6 +3199,8 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pMac->roam.configParam.rssi_channel_penalization; pParam->num_disallowed_aps = pMac->roam.configParam.num_disallowed_aps; + pParam->oce_feature_bitmap = + pMac->roam.configParam.oce_feature_bitmap; qdf_mem_copy(&pParam->csr_mawc_config, &pMac->roam.configParam.csr_mawc_config, sizeof(pParam->csr_mawc_config)); @@ -16270,6 +16274,8 @@ QDF_STATUS csr_issue_add_sta_for_session_req(tpAniSirGlobal pMac, pMac->roam.configParam.fils_max_chan_guard_time; add_sta_self_req->pkt_err_disconn_th = pMac->roam.configParam.pkt_err_disconn_th; + add_sta_self_req->oce_feature_bitmap = + pMac->roam.configParam.oce_feature_bitmap; msg.type = WMA_ADD_STA_SELF_REQ; msg.reserved = 0; msg.bodyptr = add_sta_self_req; diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index 4a83d0cf3e84..1dce2732c836 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -1192,6 +1192,7 @@ struct add_sta_self_params { bool enable_bcast_probe_rsp; uint8_t fils_max_chan_guard_time; uint16_t pkt_err_disconn_th; + uint8_t oce_feature_bitmap; }; /** diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 34eb5791e2be..e55045dd5daa 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -2220,6 +2220,17 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle, WMA_LOGE("Failed to set WMI_VDEV_PARAM_REPEAT_PROBE_TIME"); } + if ((self_sta_req->type == WMI_VDEV_TYPE_STA || + self_sta_req->type == WMI_VDEV_TYPE_AP) && + self_sta_req->sub_type == 0) { + ret = wma_vdev_set_param(wma_handle->wmi_handle, + self_sta_req->session_id, + WMI_VDEV_PARAM_ENABLE_DISABLE_OCE_FEATURES, + self_sta_req->oce_feature_bitmap); + if (QDF_IS_STATUS_ERROR(ret)) + WMA_LOGE("Failed to set WMI_VDEV_PARAM_ENABLE_DISABLE_OCE_FEATURES"); + } + /* Initialize BMISS parameters */ if ((self_sta_req->type == WMI_VDEV_TYPE_STA) && (self_sta_req->sub_type == 0))