qcacld-3.0: ini parameter to allow STA+SAP SCC on LTE coex channel

When Force SCC and STA+SAP SCC on LTE coex channel are enabled:
   1. When STA on LTE coex channel, start SAP, select STA
      channel.
   2. When SAP on, connect STA on LTE coex channel, then switch
      SAP channel to STA channel.

Change-Id: I3f3972df43318473342d42012be3a57b8baad965
CRs-Fixed: 2235704
This commit is contained in:
Zhu Jianmin 2018-05-11 10:54:10 +08:00 • committed by nshrivas
commit 72d32dedba
4 changed files with 50 additions and 3 deletions

View file

@ -9162,6 +9162,30 @@ enum dot11p_mode {
#define CFG_STA_SAP_SCC_ON_DFS_CHAN_MAX (1)
#define CFG_STA_SAP_SCC_ON_DFS_CHAN_DEFAULT (0)
/*
* <ini>
* g_sta_sap_scc_on_lte_coex_chan - Allow STA+SAP SCC on LTE coex channel
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to allow STA+SAP SCC on LTE coex channel
* 0 - Disallow STA+SAP SCC on LTE coex channel
* 1 - Allow STA+SAP SCC on LTE coex channel
*
* Related: None.
*
* Supported Feature: Non-DBS, DBS
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN "g_sta_sap_scc_on_lte_coex_chan"
#define CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MIN (0)
#define CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MAX (1)
#define CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_DEFAULT (0)
/*
* gPNOChannelPrediction will allow user to enable/disable the
* PNO channel prediction feature.
@ -14794,6 +14818,7 @@ struct hdd_config {
uint32_t dual_mac_feature_disable;
uint8_t dbs_scan_selection[CFG_DBS_SCAN_PARAM_LENGTH];
uint32_t sta_sap_scc_on_dfs_chan;
uint32_t sta_sap_scc_on_lte_coex_chan;
bool tx_chain_mask_cck;
uint8_t tx_chain_mask_1ss;
bool smart_chainmask_enabled;

View file

@ -3599,6 +3599,12 @@ struct reg_table_entry g_registry_table[] = {
CFG_STA_SAP_SCC_ON_DFS_CHAN_MIN,
CFG_STA_SAP_SCC_ON_DFS_CHAN_MAX),
REG_VARIABLE(CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN, WLAN_PARAM_HexInteger,
struct hdd_config, sta_sap_scc_on_lte_coex_chan,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_DEFAULT,
CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MIN,
CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN_MAX),
#ifdef FEATURE_WLAN_SCAN_PNO
REG_VARIABLE(CFG_PNO_CHANNEL_PREDICTION_NAME, WLAN_PARAM_Integer,
@ -6871,6 +6877,9 @@ void hdd_cfg_print(struct hdd_context *hdd_ctx)
hdd_debug("Name = [%s] value = [%u]",
CFG_STA_SAP_SCC_ON_DFS_CHAN,
hdd_ctx->config->sta_sap_scc_on_dfs_chan);
hdd_debug("Name = [%s] value = [%u]",
CFG_STA_SAP_SCC_ON_LTE_COEX_CHAN,
hdd_ctx->config->sta_sap_scc_on_lte_coex_chan);
#ifdef FEATURE_WLAN_SCAN_PNO
hdd_debug("Name = [%s] Value = [%u]",
CFG_PNO_CHANNEL_PREDICTION_NAME,
@ -8427,6 +8436,8 @@ QDF_STATUS hdd_set_policy_mgr_user_cfg(struct hdd_context *hdd_ctx)
hdd_ctx->config->sta_sap_scc_on_dfs_chan;
user_cfg->channel_select_logic_conc =
hdd_ctx->config->channel_select_logic_conc;
user_cfg->sta_sap_scc_on_lte_coex_chan =
hdd_ctx->config->sta_sap_scc_on_lte_coex_chan;
status = policy_mgr_set_user_cfg(hdd_ctx->hdd_psoc, user_cfg);
qdf_mem_free(user_cfg);

View file

@ -2724,7 +2724,8 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel,
status = wlansap_set_channel_change_with_csa(
WLAN_HDD_GET_SAP_CTX_PTR(adapter),
(uint32_t)target_channel,
target_bw, forced);
target_bw,
forced && !(hdd_ctx->config->sta_sap_scc_on_lte_coex_chan));
if (QDF_STATUS_SUCCESS != status) {
hdd_err("SAP set channel failed for channel: %d, bw: %d",

View file

@ -951,6 +951,9 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
sap_context->channel,
sap_context->csr_roamProfile.phyMode,
sap_context->cc_switch_mode);
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG,
FL("After check overlap: con_ch:%d"),
con_ch);
if (sap_context->cc_switch_mode !=
QDF_MCC_TO_SCC_SWITCH_FORCE_PREFERRED_WITHOUT_DISCONNECTION) {
if (QDF_IS_STATUS_ERROR(
@ -963,8 +966,15 @@ QDF_STATUS sap_goto_channel_sel(struct sap_context *sap_context,
return QDF_STATUS_E_ABORTED;
}
}
if (con_ch && !wlan_reg_is_dfs_ch(mac_ctx->pdev,
con_ch)) {
QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG,
FL("After check concurrency: con_ch:%d"),
con_ch);
if (con_ch &&
(policy_mgr_sta_sap_scc_on_lte_coex_chan(
mac_ctx->psoc) ||
policy_mgr_is_safe_channel(mac_ctx->psoc,
con_ch)) &&
!wlan_reg_is_dfs_ch(mac_ctx->pdev, con_ch)) {
QDF_TRACE(QDF_MODULE_ID_SAP,
QDF_TRACE_LEVEL_ERROR,
"%s: Override ch %d to %d due to CC Intf",