Merge "qcacld-3.0: Add new STA-SAP on DFS chan INI config mode" into wlan-cld3.driver.lnx.2.0

This commit is contained in:
CNSS_WLAN Service 2019-07-04 10:04:59 -07:00 • committed by Gerrit - the friendly Code Review server
commit 90f4eff29d
5 changed files with 146 additions and 5 deletions

View file

@ -64,6 +64,27 @@ typedef const enum policy_mgr_conc_next_action
((channel_select_logic_conc & PM_FW_MODE_STA_P2P_BIT_MASK) >> \
PM_FW_MODE_STA_P2P_BIT_POS)
/**
* enum PM_AP_DFS_MASTER_MODE - AP dfs master mode
* @PM_STA_SAP_ON_DFS_DEFAULT - Disallow STA+SAP SCC on DFS channel
* @PM_STA_SAP_ON_DFS_MASTER_MODE_DISABLED - Allow STA+SAP SCC
* on DFS channel with master mode disabled
* @PM_STA_SAP_ON_DFS_MASTER_MODE_FLEX - enhance
* "PM_STA_SAP_ON_DFS_MASTER_MODE_DISABLED" with below requirement:
* a. Allow single SAP (GO) start on DFS channel.
* b. Allow CAC process on DFS channel in single SAP (GO) mode
* c. Allow DFS radar event process in single SAP (GO) mode
* d. Disallow CAC and radar event process in SAP (GO) + STA mode.
*
* This enum value will be used to set to INI g_sta_sap_scc_on_dfs_chan to
* config the sta+sap on dfs channel behaviour expected by user.
*/
enum PM_AP_DFS_MASTER_MODE {
PM_STA_SAP_ON_DFS_DEFAULT,
PM_STA_SAP_ON_DFS_MASTER_MODE_DISABLED,
PM_STA_SAP_ON_DFS_MASTER_MODE_FLEX,
};
/**
* policy_mgr_get_allow_mcc_go_diff_bi() - to get information on whether GO
* can have diff BI than STA in MCC
@ -130,6 +151,33 @@ QDF_STATUS policy_mgr_get_force_1x1(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
policy_mgr_get_sta_sap_scc_on_dfs_chnl(struct wlan_objmgr_psoc *psoc,
uint8_t *sta_sap_scc_on_dfs_chnl);
/**
* policy_mgr_get_dfs_master_dynamic_enabled() - support dfs master or not
* on AP interafce when STA+SAP(GO) concurrency
* @psoc: pointer to psoc
* @vdev_id: sap vdev id
*
* This API is used to check AP dfs master functionality enabled or not when
* STA+SAP(GO) concurrency.
* If g_sta_sap_scc_on_dfs_chan is non-zero, the STA+SAP(GO) concurrency
* is allowed on DFS channel SCC and the SAP's DFS master functionality
* should be enable/disable according to:
* 1. g_sta_sap_scc_on_dfs_chan is 0: function return true - dfs master
* capability enabled.
* 2. g_sta_sap_scc_on_dfs_chan is 1: function return false - dfs master
* capability disabled.
* 3. g_sta_sap_scc_on_dfs_chan is 2: dfs master capability based on STA on
* 5G or not:
* a. 5G STA active - return false
* b. no 5G STA active -return true
*
* Return: true if dfs master functionality should be enabled.
*/
bool
policy_mgr_get_dfs_master_dynamic_enabled(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* policy_mgr_get_sta_sap_scc_lte_coex_chnl() - to find out if STA & SAP
* SCC is allowed on LTE COEX

View file

@ -386,14 +386,18 @@ CFG_INI_UINT("gDualMacFeatureDisable", 0, 6, 0, CFG_VALUE_OR_DEFAULT, \
* g_sta_sap_scc_on_dfs_chan - Allow STA+SAP SCC on DFS channel with master
* mode support disabled.
* @Min: 0
* @Max: 1
* @Max: 2
* @Default: 0
*
* This ini is used to allow STA+SAP SCC on DFS channel with master mode
* support disabled.
* support disabled, the value is defined by enum PM_AP_DFS_MASTER_MODE.
* 0 - Disallow STA+SAP SCC on DFS channel
* 1 - Allow STA+SAP SCC on DFS channel with master mode disabled
*
* 2 - enhance "1" with below requirement
* a. Allow single SAP (GO) start on DFS channel.
* b. Allow CAC process on DFS channel in single SAP (GO) mode
* c. Allow DFS radar event process in single SAP (GO) mode
* d. Disallow CAC and radar event process in SAP (GO) + STA mode.
* Related: None.
*
* Supported Feature: Non-DBS, DBS
@ -404,7 +408,7 @@ CFG_INI_UINT("gDualMacFeatureDisable", 0, 6, 0, CFG_VALUE_OR_DEFAULT, \
*/
#define CFG_STA_SAP_SCC_ON_DFS_CHAN \
CFG_INI_UINT("g_sta_sap_scc_on_dfs_chan", 0, 1, 0, CFG_VALUE_OR_DEFAULT, \
CFG_INI_UINT("g_sta_sap_scc_on_dfs_chan", 0, 2, 0, CFG_VALUE_OR_DEFAULT, \
"Allow STA+SAP SCC on DFS channel with master mode disable")
/*

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2018-2019 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
@ -227,6 +227,33 @@ ucfg_policy_mgr_get_sta_sap_scc_on_dfs_chnl(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
ucfg_policy_mgr_get_sta_sap_scc_lte_coex_chnl(struct wlan_objmgr_psoc *psoc,
uint8_t *sta_sap_scc_lte_coex);
/**
* ucfg_policy_mgr_get_dfs_master_dynamic_enabled() - support dfs master or not
* AP interface when STA+SAP(GO) concurrency
* @psoc: pointer to psoc
* @vdev_id: sap vdev id
*
* This API is used to check SAP (GO) dfs master functionality enabled or not
* when STA+SAP(GO) concurrency.
* If g_sta_sap_scc_on_dfs_chan is non-zero, the STA+SAP(GO) is allowed on DFS
* channel SCC and the SAP's DFS master functionality should be enable/disable
* according to:
* 1. g_sta_sap_scc_on_dfs_chan is 0: function return true - dfs master
* capability enabled.
* 2. g_sta_sap_scc_on_dfs_chan is 1: function return false - dfs master
* capability disabled.
* 3. g_sta_sap_scc_on_dfs_chan is 2: dfs master capability based on STA on
* 5G or not:
* a. 5G STA active - return false
* b. no 5G STA active -return true
*
* Return: true if dfs master functionality should be enabled.
*/
bool
ucfg_policy_mgr_get_dfs_master_dynamic_enabled(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* ucfg_policy_mgr_get_sap_mandt_chnl() - to find out if SAP mandatory channel
* support is enabled

View file

@ -116,6 +116,61 @@ policy_mgr_get_sta_sap_scc_on_dfs_chnl(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
bool
policy_mgr_get_dfs_master_dynamic_enabled(
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
{
struct policy_mgr_psoc_priv_obj *pm_ctx;
bool sta_on_5g = false;
bool sta_on_2g = false;
uint32_t i;
bool enable;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx) {
policy_mgr_err("pm_ctx is NULL");
return true;
}
if (!pm_ctx->cfg.sta_sap_scc_on_dfs_chnl)
return true;
if (pm_ctx->cfg.sta_sap_scc_on_dfs_chnl ==
PM_STA_SAP_ON_DFS_MASTER_MODE_DISABLED)
return false;
if (pm_ctx->cfg.sta_sap_scc_on_dfs_chnl !=
PM_STA_SAP_ON_DFS_MASTER_MODE_FLEX) {
policy_mgr_debug("sta_sap_scc_on_dfs_chnl %d unknown",
pm_ctx->cfg.sta_sap_scc_on_dfs_chnl);
return true;
}
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) {
if (!((pm_conc_connection_list[i].vdev_id != vdev_id) &&
pm_conc_connection_list[i].in_use &&
(pm_conc_connection_list[i].mode == PM_STA_MODE ||
pm_conc_connection_list[i].mode == PM_P2P_CLIENT_MODE)))
continue;
if (WLAN_REG_IS_5GHZ_CH(pm_conc_connection_list[i].chan))
sta_on_5g = true;
else
sta_on_2g = true;
}
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
if (policy_mgr_is_hw_dbs_capable(psoc) && !sta_on_5g)
enable = true;
else if (!sta_on_5g && !sta_on_2g)
enable = true;
else
enable = false;
policy_mgr_debug("sta_sap_scc_on_dfs_chnl %d sta_on_2g %d sta_on_5g %d enable %d",
pm_ctx->cfg.sta_sap_scc_on_dfs_chnl, sta_on_2g,
sta_on_5g, enable);
return enable;
}
QDF_STATUS
policy_mgr_get_sta_sap_scc_lte_coex_chnl(struct wlan_objmgr_psoc *psoc,
uint8_t *sta_sap_scc_lte_coex)

View file

@ -188,6 +188,13 @@ ucfg_policy_mgr_get_sta_sap_scc_on_dfs_chnl(struct wlan_objmgr_psoc *psoc,
sta_sap_scc_on_dfs_chnl);
}
bool
ucfg_policy_mgr_get_dfs_master_dynamic_enabled(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
return policy_mgr_get_dfs_master_dynamic_enabled(psoc, vdev_id);
}
QDF_STATUS
ucfg_policy_mgr_get_sta_sap_scc_lte_coex_chnl(struct wlan_objmgr_psoc *psoc,
uint8_t *sta_sap_scc_lte_coex)