diff options
| author | Abhinav Kumar <abhikuma@codeaurora.org> | 2018-05-11 15:33:35 +0530 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2018-05-14 22:52:44 -0700 |
| commit | 5266565fc21a46bc09b267da8958c498b9d3a725 (patch) | |
| tree | 53059645ae709a56676cebd51128153b38e940ef | |
| parent | 44cdc249053b79cd40366fb00f45b7baaee5bf3e (diff) | |
qcacld-3.0: Make channel list dynamic
Currently driver marks cache type as static when it sends valid
channel list to firmware to use for roaming. When cache type is
static, driver will not add WMI_ROAM_SCAN_MODE_RSSI_CHANGE in
wma_process_roaming_config.
Roam scan may not trigger upon RSSI change when mode does not
have WMI_ROAM_SCAN_MODE_RSSI_CHANGE and may have issues related
to roaming.
Mark channel list as dynamic based on newly added ini
"force_rssi_trigger" for valid channel list as well.
With this new ini , customers can tune the behaviour of
roaming scan in firmware based on RSSI trigger or periodic.
Change-Id: I04123cb954408fd510d41d2b6ba96144be0945f9
CRs-fixed: 2240544
| -rw-r--r-- | core/hdd/inc/wlan_hdd_cfg.h | 26 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg.c | 15 | ||||
| -rw-r--r-- | core/mac/inc/sir_api.h | 1 | ||||
| -rw-r--r-- | core/sme/inc/csr_api.h | 1 | ||||
| -rw-r--r-- | core/sme/inc/csr_internal.h | 1 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_api_roam.c | 21 | ||||
| -rw-r--r-- | core/wma/src/wma_scan_roam.c | 10 |
7 files changed, 68 insertions, 7 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index db46ab7e1f2f..827091eb6b55 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -2301,6 +2301,31 @@ enum hdd_dot11_mode { /* * <ini> + * roam_force_rssi_trigger - To set roam scan mode + * irrespective of channel list + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set roam scan mode + * WMI_ROAM_SCAN_MODE_RSSI_CHANGE, irrespective of whether + * channel list type is CHANNEL_LIST_STATIC or not + * + * Related: None + * + * Supported Feature: Roaming + * + * Usage: External + * + * </ini> + */ +#define CFG_ROAM_FORCE_RSSI_TRIGGER_NAME "roam_force_rssi_trigger" +#define CFG_ROAM_FORCE_RSSI_TRIGGER_MIN (0) +#define CFG_ROAM_FORCE_RSSI_TRIGGER_MAX (1) +#define CFG_ROAM_FORCE_RSSI_TRIGGER_DEFAULT (1) + +/* + * <ini> * roamscan_adaptive_dwell_mode - Sets dwell time adaptive mode * @Min: 0 * @Max: 4 @@ -15748,6 +15773,7 @@ struct hdd_config { bool enable_ftopen; bool is_unit_test_framework_enabled; uint32_t enable_secondary_rate; + bool roam_force_rssi_trigger; }; #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 740a1bd478e8..cf9e44baf3b8 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -5623,6 +5623,15 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_SECONDARY_RATE_DEFAULT, CFG_ENABLE_SECONDARY_RATE_MIN, CFG_ENABLE_SECONDARY_RATE_MAX), + + REG_VARIABLE(CFG_ROAM_FORCE_RSSI_TRIGGER_NAME, + WLAN_PARAM_Integer, struct hdd_config, + roam_force_rssi_trigger, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + CFG_ROAM_FORCE_RSSI_TRIGGER_DEFAULT, + CFG_ROAM_FORCE_RSSI_TRIGGER_MIN, + CFG_ROAM_FORCE_RSSI_TRIGGER_MAX), + }; /** @@ -7528,6 +7537,10 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) hdd_debug("Name = [%s] value = [0x%x]", CFG_ENABLE_SECONDARY_RATE_NAME, pHddCtx->config->enable_secondary_rate); + hdd_debug("Name = [%s] Value = [%u]", + CFG_ROAM_FORCE_RSSI_TRIGGER_NAME, + pHddCtx->config->roam_force_rssi_trigger); + } /** @@ -10070,6 +10083,8 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) pHddCtx->config->scan_adaptive_dwell_mode_nc; smeConfig->csrConfig.roamscan_adaptive_dwell_mode = pHddCtx->config->roamscan_adaptive_dwell_mode; + smeConfig->csrConfig.roam_force_rssi_trigger = + pHddCtx->config->roam_force_rssi_trigger; hdd_update_per_config_to_sme(pHddCtx, smeConfig); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 918bd22e45c1..313dae998639 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -3707,6 +3707,7 @@ typedef struct sSirRoamOffloadScanReq { uint32_t ho_delay_for_rx; uint32_t min_delay_btw_roam_scans; uint32_t roam_trigger_reason_bitmask; + bool roam_force_rssi_trigger; } tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq; typedef struct sSirRoamOffloadScanRsp { diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index a618477fbe33..68f0edc6105e 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1413,6 +1413,7 @@ typedef struct tagCsrConfigParam { uint32_t offload_11k_enable_bitmask; struct csr_neighbor_report_offload_params neighbor_report_offload; bool enable_ftopen; + bool roam_force_rssi_trigger; } tCsrConfigParam; /* Tush */ diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 0c6e94b3db0f..0560385912ae 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -687,6 +687,7 @@ typedef struct tagCsrConfig { uint32_t offload_11k_enable_bitmask; struct csr_neighbor_report_offload_params neighbor_report_offload; bool enable_ftopen; + bool roam_force_rssi_trigger; } tCsrConfig; typedef struct tagCsrChannelPowerInfo { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 8e71ea463768..624aff61bb18 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2204,6 +2204,8 @@ csr_fetch_ch_lst_from_received_list(tpAniSirGlobal mac_ctx, } req_buf->ConnectedNetwork.ChannelCount = num_channels; req_buf->ChannelCacheType = CHANNEL_LIST_DYNAMIC_UPDATE; + sme_debug("ChannelCacheType %dChannelCount %d", + req_buf->ChannelCacheType, num_channels); } /** @@ -3025,6 +3027,8 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, } pMac->roam.configParam.oce_feature_bitmap = pParam->oce_feature_bitmap; + pMac->roam.configParam.roam_force_rssi_trigger = + pParam->roam_force_rssi_trigger; qdf_mem_copy(&pMac->roam.configParam.bss_score_params, &pParam->bss_score_params, @@ -3356,6 +3360,7 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) pMac->roam.configParam.num_disallowed_aps; pParam->oce_feature_bitmap = pMac->roam.configParam.oce_feature_bitmap; + pParam->roam_force_rssi_trigger = cfg_params->roam_force_rssi_trigger; qdf_mem_copy(&pParam->csr_mawc_config, &pMac->roam.configParam.csr_mawc_config, sizeof(pParam->csr_mawc_config)); @@ -18910,6 +18915,9 @@ csr_update_roam_scan_offload_request(tpAniSirGlobal mac_ctx, mac_ctx->roam.configParam.min_delay_btw_roam_scans; req_buf->roam_trigger_reason_bitmask = mac_ctx->roam.configParam.roam_trigger_reason_bitmask; + req_buf->roam_force_rssi_trigger = + mac_ctx->roam.configParam.roam_force_rssi_trigger; + if (wlan_cfg_get_int(mac_ctx, WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT, (uint32_t *) &req_buf->ReassocFailureTimeout) != eSIR_SUCCESS) { @@ -19043,6 +19051,8 @@ csr_fetch_ch_lst_from_ini(tpAniSirGlobal mac_ctx, } req_buf->ConnectedNetwork.ChannelCount = num_channels; req_buf->ChannelCacheType = CHANNEL_LIST_STATIC; + sme_debug("ChannelCacheType %dChannelCount %d", + req_buf->ChannelCacheType, num_channels); return QDF_STATUS_SUCCESS; } @@ -19143,6 +19153,8 @@ csr_fetch_ch_lst_from_occupied_lst(tpAniSirGlobal mac_ctx, else req_buf->ChannelCacheType = CHANNEL_LIST_DYNAMIC_UPDATE; } + sme_debug("ChannelCacheType %dChannelCount %d", + req_buf->ChannelCacheType, num_channels); } /** @@ -19244,11 +19256,10 @@ csr_fetch_valid_ch_lst(tpAniSirGlobal mac_ctx, } req_buf->ValidChannelCount = num_channels; - if (CSR_IS_ROAM_INTRA_BAND_ENABLED(mac_ctx)) { - req_buf->ChannelCacheType = CHANNEL_LIST_STATIC; - req_buf->ConnectedNetwork.ChannelCount = num_channels; - } - + req_buf->ChannelCacheType = CHANNEL_LIST_DYNAMIC_UPDATE; + req_buf->ConnectedNetwork.ChannelCount = num_channels; + sme_debug("ChannelCacheType %dChannelCount %d", + req_buf->ChannelCacheType, num_channels); return status; } diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index f88049447ef2..0a32d4fc8237 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -1006,6 +1006,10 @@ QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, params->roam_offload_params.qos_enabled, params->roam_offload_params.ho_delay_for_rx, params->mode); + WMA_LOGD(FL("min_delay_btw_roam_scans: %d, roam_trigger_reason_bitmask: %d"), + params->min_delay_btw_roam_scans, + params->roam_trigger_reason_bitmask); + status = wmi_unified_roam_scan_offload_mode_cmd(wma_handle->wmi_handle, scan_cmd_fp, params); if (QDF_IS_STATUS_ERROR(status)) @@ -2129,7 +2133,8 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, /* Don't use rssi triggered roam scans if external app * is in control of channel list. */ - if (roam_req->ChannelCacheType != CHANNEL_LIST_STATIC) + if (roam_req->ChannelCacheType != CHANNEL_LIST_STATIC || + roam_req->roam_force_rssi_trigger) mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; } else { @@ -2414,7 +2419,8 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle, /* Don't use rssi triggered roam scans if external app * is in control of channel list. */ - if (roam_req->ChannelCacheType != CHANNEL_LIST_STATIC) + if (roam_req->ChannelCacheType != CHANNEL_LIST_STATIC || + roam_req->roam_force_rssi_trigger) mode |= WMI_ROAM_SCAN_MODE_RSSI_CHANGE; } else { |
